Como um programador C++ com certa experiência, eu recomendaria os seguintes livros.
Para quem está começando
Começar é um passo difícil. É importante escolher um livro didático. Qualquer um dos livros abaixo é assim, basta escolher um deles. Note que os livros já são de C++. Não recomendo iniciar os estudos através do C, justamente por conter um estilo de programação que não é mais usado em C++, assim, você evita vicios.
Programação Orientada a Objetos em C++, do prof. André Duarte Bueno (UFSC): Ótimo material, em português e disponível para download gratuitamente aqui.
The C++ Programming Language, do Bjarne Stroustroup: é um livro pesado, exige um bom domínio do C, mas quem melhor do que o pai do C++ para falar de C++?
Accelerated C++: Practical Programming by Example, do Andrew Koenig: Para quem não sabe C, e nem quer saber, mas quer aprender C++;
C++ Como Programar, Deitel: Para quem nem sabe programar, ou não sabe nem C e C++. O livro é muito didático, indiscutivelmente melhor que o livro de java do mesmo autor. E com a vantagem de ensinar C++, sem te viciar no estilo C. Ainda assim, há vários comentários que explicam a diferença das duas e no que o estilo C++ é superior ao C.
Esse material não passa do nível básico (sintaxe e dicas de programação básica). Se você quer ir ainda mais longe, recomendo que leia a lista abaixo.
Para quem já sabe C++:
Essa lista é uma espécie de RoadMap. O ideal é pegar cada um desses livros mais ou menos nessa ordem. Dá para trocar a ordem dos dois primeiros, eles são igualmente importantes. O último livro da lista é extremamente conceitual e profundo, mas é legal se você quiser ter um entendimento teórico mais forte sobre os patterns envolvendo templates usados na STL (e que, portanto, podem ser usados no dia-a-dia).
The C++ Standard Library – Tutorial and Reference de Nicolai M. Josuttis: programar em C++ hoje sem saber a STL é como programar em Java sem usar nada além dos pacotes java.lang e java.math, portanto, esse é obrigatório. A STL contém algortimos úteis, a classe string, e a biblioteca de collections do C++ (map, set, multimap, vector, list, são exemplos);
Effective C++, do Scott Meyers: tão obrigatório quanto Effective Java. Faz você programar C++ de verdade, e não C com classes. Se você ainda usa #define para fazer constantes, ou não sabe para que declarar um método como const, leia esse livro;
More Effective C++, do Scott Meyers: Uma boa extensão ao Effective C++.
Effective STL, do Scott Meyers: Saiba boas e más práticas envolvendo a STL;
Beyond the C++ Standard Library: An Introduction to Boost, do Björn Karlsson: Para quem quer entender bem as coleções extras da boost e o esquema de “garbage collection” via smart pointers que é possível com C++;
C++ Templates: The complete Guide, de David Vandervoorde e Nicolai M. Josuttis: O guia mais completo, didático e explicativo sobre templates. Cobre desde a sintaxe básica até usos bastante avançados. Dá dicas de design e uso inteligente da programação genérica e meta-programação.
Modern C++ Design, de Andrei Alexandrescu: Definitivamente um dos melhores e mais importantes livros sobre design patterns envolvendo templates. Ajuda a entender os Allocators da STL, por exemplo. Entretanto, saibam bem templates antes de começa-lo. Ele é definitivamente um complemento ao livro anterior;
Não incluí nessa lista nenhum livro sobre sistemas operacionais específicos.
Os acimas citados são excelentes, recomendo esses tambem:
Optimizing software in C++- Muito bom, trata de varios assuntos que podem otimizar seu codigo, inclusive nas novas CPUs com mais de um núcleo.
O’Reilly – Secure Programming Cookbook for C and C++ – Mostra técnicas anti-tempero e anti-debuging no seu codigo.
O’Reilly – C++ Cookbook – Outro excelente livro.
The Art of C++ de Herbert Schildt – Demostra um nivel de programação quase esóterico
Via de regra, qualquer coisa do Herbert Schildt é lixo. Não serve nem pra nivelar mesa (porque são grossos demais).
Os grandes nomes na literatura sobre o assunto são Bjarne Stroustrup (poucas pessoas têm uma visão tão clara e objetiva sobre filosofias de linguagens de programação quanto ele), Scott Meyers (sem H), Herb Sutter, Andrei Alexandrescu, Nicolai Josuttis.
Em comparação, os outros autores são tudo de segunda (ou pior) categoria.
Por mim, existem dois tipos de autores:
1. Aqueles que pesquisam e o livro é a materialização do seu trabalho, como é o caso de todos os autores que você citou como sendo “grandes autores”.
2. E aqueles que aprendem com o trabalho dos outros e fazem livros mais didáticos. Eu enquadro o Herbert Schildt nessa segunda categoria. Comecei a ler The Art of C++ há alguns meses e, embora não seja tão denso quanto o livro do Alexandrescu, mostra os tópicos de programação genérica com bastante clareza.
O livro do Bjarne, por exemplo, pode ser genial, mas não é nada didático. É coeso e denso também, mas ele assume que o leitor tem um excelente conhecimento em C, não tem uma sequência que seja exatamente didática e, tem exemplos que talvez ele, experiente em compiladores, entenda. Só recomendaria para quem já tem um bom conhecimento em C e em C++.
Por fim, o que você considera “grandes nomes” está totalmente de acordo com a minha opinião. Tanto, que são exatamente os autores que citei ali em cima!
Há duas outras categorias: autores incompetentes medíocres (que você nunca vai ouvir falar), e autores incompetentes notórios (que ganham fama pela incompetência). O Schildt se encaixa nesta última.
Ele consegue “amaciar” o conteúdo a ponto de torná-lo errado. Por mais “didático” que você seja, se está escrevendo besteiras, é mau autor. Ele ganhou notoriedade na mídia escrevendo livros fáceis e errados; e no meio técnico através de plágio (ocasiões que usou posts da USENET, principalmente comp.lang.c, em seus livros, sem atribuição). Isto lhe garantiu um verbete no Jargon File: http://catb.org/jargon/html/B/bullschildt.html
Naturalmente, ele não perde a oportunidade de se auto-intitular um expert e best-seller em qualquer assunto que ele escrever.
No The Annotated C Standard, ele consegue escrever erros que contradizem o texto correto e claro na página imediatamente ao lado: http://www.lysator.liu.se/c/schildt.html
Experimentei o “C: The Complete reference” (publicado no Brasil como “C Completo e Total”) no segundo semestre de faculdade; não sabia nada de C, mas tive bom senso o suficiente para perceber que era um monte de asneira, e felizmente parei de ler antes de chegar na metade. Para ter uma idéia, veja http://www.seebs.net/c/c_tcr.html
No accu.org (site de reviews de livros de programação), se procurar pelo autor “Schildt”, vai ver todos rotulados como “Not recommended” (menos dois… por algum motivo o reviewer não rotulou a recomendação; mas fica muito óbvio pela primeira frase de ambos reviews que eles também são “Not recommended”).
Nossa, bom saber. Na verdade, meu caminho pelo C++ também não foi através dos livros dele. E eu já tinha ouvido falar muito bem do autor.
Puxa, e eu que gostava tanto do meu livro C Completo e Total… snif snif
Vinigodoy, me responda uma coisa cara, eu estou estudando programação com o livro C++, como programar dos Deitel. Depois que eu concluir esse livro, qual o próximo passo que vc me recomenda. Eu queria muito me tornar um profissional nesse linguagem, dominar bem técnicas de algorítimo junto com C++.
Programa bastante, até se sentir confortável com o básico da linguagem. Depois disso, pode começar lendo livro-a-livro dos que estão citados em “para quem já sabe C++”, nesse mesmo roadmap. Deixei eles na ordem para quem, como você, quer se aperfeiçoar na linguagem.
Gostaria de saber se o livro “Turbo C++ Completo e Total” de Murray Pappas, é considerado um bom livro.
E para quem ele se aplica.
Obrigado
Ele foi um bom livro, para a epoca dele. Mas hoje está um pouco desatualizado, assim como o próprio Turbo C++.
Sugiro que você procure um livro mais atual, especialmente um que reforce o uso da STL e de padrões modernos de programação em C++, como os que estão aqui no RoadMap.
Olá,
Verifiquei que o material gratuito sugerido no início do tópico:
( Programação Orientada a Objetos em C++, do prof. André Duarte Bueno (UFSC) )
não explica sobre threads. Qual material dá uma boa explicação de implementação e funcionamento das threads ?
Obrigado
Diferente do Java, threads não são um recurso padrão da linguagem C++. Por isso, não há nenhum livro sobre isso nesse roadmap.
Você deve procurar livros específicos sobre o assunto para o sistema operacional de seu interesse. Se tiver interesse em mais de uma plataforma, você também pode procurar material sobre o padrão pthreads ou sobre a biblioteca de threads da boost.
Outro livro que eu recomendaria para o seu roadmap:
C++ Coding Standards: 101 Rules, Guidelines and Best Practices, do Herb Sutter e Andrei Alexandrescu. Estou lendo este livro no momento e é uma mina de ouro em termos de dicas e boas práticas. Mas é para quem é mais avançado e se sente confortável com a linguagem.
Parabéns pelo seu blog! Comecei o meu a pouco tempo e estou aprendendo a blogar ainda. Estou fazendo um Arkanoid também (com C++ e Allegro), e quando terminá-lo, seguirei seu exemplo e colocarei lá.
Abraços!
Tá anotada a dica! Vou procurar esse livro para mim. Faz tempo que quero ler a série toda recomendada pelo Stroustrup.
Se você já sabe programar, acho que o Arkanoid é um ótimo início. Não é um jogo nem muito complexo e nem trivial.
Para quem ainda está dando os primeiros passos na programação, costumo a sugerir um jogo de tabuleiro simples antes, como o Jogo da Velha.
Já coloquei o seu blog nos meus feeds.
Vinícius,
Eu também indicaria o livro Thinking in C++ do Eckel.
Abraço.
Esse livro é muito bom sim, mas nas versões atuais, não na encontrada gratuitamente na Internet. A da net está bastante desatualizada.
Outro bom livro gratuito, que eu quase li todo, foi o C++ Unleashed, do Jesse Liberty, com vários autores:
http://freeprogrammingebooks.com/object-oriented-analysis-c-uml/
Bastante didático, mas já para quem fez seus primeiros programas.
Vinigodoy,
tem como você indicar alguns livros sobre C, assim como fez no início que passa pelos iniciantes e depois os avançados.
Obrigado!
Pessoal vcs sabem um bom livro que ensine estruturas de dados em c++? , Eu estou com um chamado projeto e algoritmos em c++ e java ( nivio ziviani ) mais nao acho ele didatico e estou com algumas duvidas com ponteiros, ja li como programar em c++ do deitel e esse do andre bueno
Eu tenho esse aqui:
http://www.submarino.com.br/produto/1/27161/estruturas+de+dados+usando+c
Acho legal, mas é bem Czão. E já ouvi falar bem desse:
http://www.submarino.com.br/produto/1/1836564