Eu queria aprender C ++ por um tempo e fiz AP Computer Programming na High School (quando era C ++ e não Java). Eu gosto de C e simplesmente não encontrei tempo para aprender C ++ ou voltarei a usar C # onde sou muito mais produtivo.
Minha pergunta é a seguinte: dado que o C ++ '11 foi aprovado (embora eu saiba que não esteja totalmente implementado) isso muda a maneira como devo abordar o aprendizado de C ++? Eu possuo C ++: The Complete Reference, de Herb Schildt, que é de 1998. O novo padrão aprovado torna menos importante o aprendizado de tais livros do que alguns dos novos tutoriais / livros que incluem itens do padrão? Existe algum benefício em aprender com os livros mais antigos?
Respostas:
Absolutamente. Hoje em dia, três coisas que geralmente estão na lição 2 devem mudar muito, muito mais tarde:
Essas coisas que geralmente estão na lição 99 devem mudar muito, muito antes
Cada ponteiro bruto deve ser imediatamente entregue a um invólucro de ponteiro inteligente (eu começaria com compartilhado e consideraria único mais tarde, pois requer explicação de referências std :: move e rvalue). Fazer isso fará com que o aprendizado de C ++ seja muito parecido com o aprendizado de Java ou C #, onde você aprende a biblioteca ao mesmo tempo que a linguagem. Isso também retira muito do trabalho da memória e deixa as pessoas menos preocupadas com truques.
Eu também trabalharia lambdas na imagem na primeira vez que quisemos iterar através de uma coleção e fazer algo para cada elemento.
Isenção de responsabilidade: Estou escrevendo um curso de C ++ para o Pluralsight agora e usando essa abordagem. O último módulo é "entender o código de outras pessoas" e é aí que colocarei coisas confusas, como char * strings, gerenciamento manual de memória, aritmética de ponteiros e assim por diante.
Atualização: algumas pessoas perguntaram por que a existência do C ++ 0x inspira o ensino de coisas que poderiam ter sido ensinadas com o C ++ 03. Eu acho que é uma série de coisas:
>>
elimina a pegadinha que estaria presente ao declarar alguns modelos de modelosNa minha opinião, há coisas que poderíamos ter mudado sobre o modo como ensinávamos C ++ há algum tempo, mas alguns de nós nos contivemos porque ainda precisávamos da maneira da velha escola para fazer um fallback ou porque ensiná-la envolvia muito de conhecimento arcano.
fonte
std::for_each()
seja muito mais popular do que costumava ser,auto
seja muito importante, e a nova sintaxe da declaração de função (em conjunto comdecltype
) seja usada bastante no código do modelo. Essas são coisas que nenhum livro atual de C ++ ensina. Mas sim, em geral eu concordo com você (+1
). Quando comecei a dar cursos de C ++, comecei com C ++ acelerado e, embora meu curso tenha se desviado cada vez mais dele, ele ainda se mantém fiel ao princípio subjacente.Praticamente sim. O fato simples é que, em C ++ 98 e 03, muitas boas práticas eram fundamentalmente inutilizáveis devido à baixa qualidade do suporte de linguagem para, por exemplo, programação funcional. Agora que as lambdas existem e funcionam, as pessoas tendem a aceitar interfaces funcionais muito melhor do que costumavam, e a programação genérica é ainda mais forte do que antes.
Em 1998, as pessoas estavam apenas começando a descobrir como escrever código rápido, seguro e de alta qualidade usando C ++, e muito código era "C era Classes". No C ++ 11, são idiomas muito diferentes, como copiar e trocar, e a Regra dos Três (agora Cinco) é bem conhecida e definida, e muito mais tipos de gerenciamento de recursos se tornaram Padrão, como
shared_ptr
eunique_ptr
onde os Padrões anteriores simplesmente os deixaram. como buracos abertos.Você pode visualizar esta pergunta para obter uma excelente lista de material de referência em C ++.
fonte
+1
de mim.Não conheço o livro específico que você mencionou. Mas, em geral, você pode dizer que todos os conceitos básicos sobre sintaxe C ++, tipos de dados e OOP ainda são verdadeiros. O mesmo vale para as bibliotecas STL mencionadas na maioria dos livros para iniciantes.
Embora um livro tão antigo quanto 1998 possa ter perdido algumas atualizações e desenvolvimentos no estilo de programação C ++, que se acumularam na comunidade ao longo dos anos. Eu procuraria recursos um pouco mais atualizados. Existem mais do que suficientes tutoriais e documentos on-line gratuitos que devem fornecer um bom começo. Alguns deles podem até mencionar C ++ 0x.
O C ++ 0x certamente mudará muito sobre como os programadores veem e usam a linguagem no futuro. Mas isso influenciaria projetos mais complexos, onde os novos recursos começam a fazer sentido. Para um iniciante, isso não importa e você pode se concentrar em se familiarizar com os conceitos existentes, isso já é suficiente para aprender. Como muitos livros para iniciantes não se aprofundam nos modelos, por exemplo, os novos modelos variados não são o que você precisa saber agora.
Talvez dê uma olhada em uma lista de alterações . Pelo menos alguns conceitos como o intervalo baseado em loops provavelmente aparecerão em novos tutoriais, mesmo para iniciantes. Então vale a pena dar uma olhada.
fonte
cprogramming.com
.Obviamente, com relação a qualquer coisa relacionada à tecnologia, estar atualizado com o material mais recente é sempre uma jogada inteligente; no entanto, as alterações introduzidas no C ++ 11 foram projetadas para não abalar o barco. Se você é novo em C ++ (ou programação em geral), isso não é algo que me preocuparia.
Além disso, se você é um programador profissional, pode apostar que estará trabalhando no código de outra pessoa no futuro, portanto sempre haverá valor em entender como as coisas funcionam, mesmo que seja uma técnica depreciada na prática.
fonte
auto
execução das funções lambda, e assíncrona poderia fazer outra coisa senão "agitar o barco"?