Como aprender computação
Dia desses o Lameiro me passou uma lista de livros para desenvolvedores, e eu achei a lista bastante curiosa. Se eu fosse criar uma similar, eu não colocaria nenhum dos livros citados naquela lista! Ao invés disso, a minha lista com os top 10 livros de computação seria a abaixo:
1 - Gödel, Escher, Bach (Hofstadter): Eu começaria com o GEB, por dois motivos. O primeiro é que ele é um ótimo reality check: se você não gostar do GEB, então mude de área, porque computação não é a sua praia :) O segundo motivo é que esse livro tem uma excelente introdução à lógica (proposicional e de predicados), que é a ferramenta básica onde você constrói a ciência da computação.
2 - Concrete Mathematics (Knuth): Você não precisa saber matemática para programar, mas se você quiser ser um bom programador, então matemática é essencial. O Concrete tem todo o básico que você precisa pra fazer análises de complexidade computacional, e tudo escrito de maneira extremamente bem-humorada.
3 - Algorithms in C++ (Sedgewick): Se você já sabe lógica e matemática, então agora pode partir pro estudo de algoritmos. O Sedgewick tem todos os algoritmos básicos, e é uma leitura bem leve: se você está começando com algoritmos agora, esse precisa ser o seu primeiro livro. Ele não vai muito fundo em nenhum tópico, mas isso é compensado pela extrema didática nos tópicos. O livro ainda tem código exemplo pra todos os algoritmos, e várias edições, uma pra cada linguagem (eu sei que tem, pelo menos, C, C++, Java e Pascal).
4 - Introduction to Algorithms (Cormen): Os algoritmos que você aprendeu no Sedgewick, você vai estudar em detalhes no Cormen. Esse livro é extremamente formal, e talvez por isso é o livro-texto usado nos cursos de computaçao do MIT. Ele também cobre algoritmos mais avançados, que o Sedgewick apenas cita (por exemplo, Fibonacci Heap)
5 - The Art of Computer Programming (Knuth): O tAoCP está para o Cormen assim como o Cormen está pro Segdewick, aqui você vai dissecar os algoritmos até o último bit deles. Além de ser uma coleção excelente, a encadernação é muito bonita (mas não se engane, ele fica ótimo na prateleira, mas melhor ainda na sua cabeça).
6 - Effective C++ (Meyers): Agora que você sabe os algoritmos, precisa de uma linguagem para programá-los. Pra falar a verdade, a escolha de linguagem nem importa tanto assim, mas se você escolher uma, aprenda-a tão bem quanto possível. Eu escolhi C++, e esse livro do Meyers é o que diferencia as crianças dos adultos (especialmente para aquelas horas quando você cria uma classe sem destrutor virtual e não sabe por que a memória está vazando).
7 - Effective STL (Meyers): Já teve uma época em que eu não gostava de C++, mas isso é porque eu sou velho o suficiente pra ter mexido em C++ antes que os compiladores tivessem templates. Com templates a linguagem fica muito mais atraente, e esse é o livro que vai te ensinar a dominar a STL.
8 - The Practice of Programming (Kernighan, Pike): Se você leu tudo até agora, então você já é um programador muito bom na teoria. Na prática, entretanto, tem um monte de skills que ainda faltam. Nesse livro você aprende sobre as coisas que usualmente não se aprende na escola: debugging, otimização, unit testing, documentação.
9 - Programming Pearls (Bentley): Com os livros lidos até agora, você já deve ser um excelente programador. O passo final é passar de programador para um true hacker, e esse é um passo que não requer só conhecimento, você também precisa de manha, criatividade e insight. Eu não sei se dá pra ensinar essas coisas, mas esse livro certamente é o que chega mais próximo disso.
10 - The Mythical Man-Month (Brooks): Depois de ler todos os livros acima você estará próximo do nirvana, mas pra atingir o zen da programação de verdade, é preciso lembrar que projetos não precisam só de computadores, precisam de pessoas também. O Mythical Man-Month é um livro de gerência de projetos de software escrito em 1975, mas é surpreendente como ele continua atual. A tecnologia avança, mas as pessoas continuam as mesmas :)
É claro que pra manter uma lista com só dez itens, muita coisa boa fica de fora. Mas a lista acima tem um mérito: foi com esses livros que eu aprendi computação de verdade (vale lembrar que eu sou autodidata, minha graduação foi em engenharia elétrica, e eu quase não tive computação em aulas). Se funcionou pra mim, pode ser que funcione pra você também :)
1 - Gödel, Escher, Bach (Hofstadter): Eu começaria com o GEB, por dois motivos. O primeiro é que ele é um ótimo reality check: se você não gostar do GEB, então mude de área, porque computação não é a sua praia :) O segundo motivo é que esse livro tem uma excelente introdução à lógica (proposicional e de predicados), que é a ferramenta básica onde você constrói a ciência da computação.
2 - Concrete Mathematics (Knuth): Você não precisa saber matemática para programar, mas se você quiser ser um bom programador, então matemática é essencial. O Concrete tem todo o básico que você precisa pra fazer análises de complexidade computacional, e tudo escrito de maneira extremamente bem-humorada.
3 - Algorithms in C++ (Sedgewick): Se você já sabe lógica e matemática, então agora pode partir pro estudo de algoritmos. O Sedgewick tem todos os algoritmos básicos, e é uma leitura bem leve: se você está começando com algoritmos agora, esse precisa ser o seu primeiro livro. Ele não vai muito fundo em nenhum tópico, mas isso é compensado pela extrema didática nos tópicos. O livro ainda tem código exemplo pra todos os algoritmos, e várias edições, uma pra cada linguagem (eu sei que tem, pelo menos, C, C++, Java e Pascal).
4 - Introduction to Algorithms (Cormen): Os algoritmos que você aprendeu no Sedgewick, você vai estudar em detalhes no Cormen. Esse livro é extremamente formal, e talvez por isso é o livro-texto usado nos cursos de computaçao do MIT. Ele também cobre algoritmos mais avançados, que o Sedgewick apenas cita (por exemplo, Fibonacci Heap)
5 - The Art of Computer Programming (Knuth): O tAoCP está para o Cormen assim como o Cormen está pro Segdewick, aqui você vai dissecar os algoritmos até o último bit deles. Além de ser uma coleção excelente, a encadernação é muito bonita (mas não se engane, ele fica ótimo na prateleira, mas melhor ainda na sua cabeça).
6 - Effective C++ (Meyers): Agora que você sabe os algoritmos, precisa de uma linguagem para programá-los. Pra falar a verdade, a escolha de linguagem nem importa tanto assim, mas se você escolher uma, aprenda-a tão bem quanto possível. Eu escolhi C++, e esse livro do Meyers é o que diferencia as crianças dos adultos (especialmente para aquelas horas quando você cria uma classe sem destrutor virtual e não sabe por que a memória está vazando).
7 - Effective STL (Meyers): Já teve uma época em que eu não gostava de C++, mas isso é porque eu sou velho o suficiente pra ter mexido em C++ antes que os compiladores tivessem templates. Com templates a linguagem fica muito mais atraente, e esse é o livro que vai te ensinar a dominar a STL.
8 - The Practice of Programming (Kernighan, Pike): Se você leu tudo até agora, então você já é um programador muito bom na teoria. Na prática, entretanto, tem um monte de skills que ainda faltam. Nesse livro você aprende sobre as coisas que usualmente não se aprende na escola: debugging, otimização, unit testing, documentação.
9 - Programming Pearls (Bentley): Com os livros lidos até agora, você já deve ser um excelente programador. O passo final é passar de programador para um true hacker, e esse é um passo que não requer só conhecimento, você também precisa de manha, criatividade e insight. Eu não sei se dá pra ensinar essas coisas, mas esse livro certamente é o que chega mais próximo disso.
10 - The Mythical Man-Month (Brooks): Depois de ler todos os livros acima você estará próximo do nirvana, mas pra atingir o zen da programação de verdade, é preciso lembrar que projetos não precisam só de computadores, precisam de pessoas também. O Mythical Man-Month é um livro de gerência de projetos de software escrito em 1975, mas é surpreendente como ele continua atual. A tecnologia avança, mas as pessoas continuam as mesmas :)
É claro que pra manter uma lista com só dez itens, muita coisa boa fica de fora. Mas a lista acima tem um mérito: foi com esses livros que eu aprendi computação de verdade (vale lembrar que eu sou autodidata, minha graduação foi em engenharia elétrica, e eu quase não tive computação em aulas). Se funcionou pra mim, pode ser que funcione pra você também :)
Marcadores: complexidade, cpp, livros, math
16 Comentários:
Tem a lista do Jeff Atwood também.
As três listas são boas e eu gostaria de ter lido mais livros das três.
A lista do Phillip tem o objetivo de melhorar o conhecimento de OOP de gente que já programa, a sua tem o objetivo de ensinar um leigo a programar bem e a do Jeff Atwood tem um foco maior em interface e no usuário. Tudo isso é bom.
A verdade é, a maior parte dos programadores male male lêem um Java/C++/C# How to Program por cima e vão pro mercado. Triste isso.
Por Wilerson, Às 24 de junho de 2008 06:33
Olá Pinguim.
Bem, a lista de livros do Philip é para quem já sabe programar (como dito no primeiro parágrafo do blog dele). Acredito que a sua lista e a dele são relativamente complementares, cada uma a seu tempo. Depois de conhecer a teoria de algoritmos, ED, uma linguagem de programação e desenvolver o espírito hacker, acredito que é necessário aprender como transformar aquele monte de idéias malucas em um código legível, reutilizável e fácil de dar manutenção no longo prazo. A lista do Philip tem ótimos livros para este segundo conjunto de objetivos, mas certamente não é "Como aprender computação", nem tinha o objetivo de ser. A sua lista certamente está bem mais próxima desse objetivo.
Abraços e obrigado pela lista. Será muito útil.
Por Lameiro, Às 24 de junho de 2008 08:54
Vou começar faculdade de Ciência esse ano, e tô com um pouco de medo de não gostar de matemática tanto quanto é necessário...
Vou tentar ler esses livros aí e descobrir :P
Quem sabe eu não viro um 1337 h4x0r, né?
Por chaosboss, Às 24 de junho de 2008 09:16
Como você colocou dois livros do Meyers, vale a pena olhar essa série de artigos dele, listando os mais importantes livros, artigos e pessoas do c++:
http://www.artima.com/cppsource/top_cpp_books.html
Legal é essa confissão dele:
"I have not written production software in over 20 years, and I have never written production software in C++. Nope, not ever. Furthermore, I’ve never even tried to write production software in C++, so not only am I not a real C++ developer, I’m not even a wannabe."
Por Carlos, Às 24 de junho de 2008 10:35
Muito boa a lista de livros porposta, pena que o meu inglês é muito fraco, acho que já sai em desvantagem com relação aos demais colegas!!
Por عبدآلحميداحمد ***H4m1d***, Às 24 de junho de 2008 11:18
Eis a grande diferença entre a ciência (computação) e a técnica (geralmente chamada de "informática").
A biblioteca do IME é um paraiso para quem sabe o que escolher na prateleira :-)
Muito boa a lista!
Por Cesar, Às 24 de junho de 2008 13:08
Achei a lista do Lameiro mais uma lista de hypes. Gostei bem mais mais da sua.
É claro, gostei de alguns livros da lista do Lameiro, não gostei de alguns da sua e citaria alguns livros diferentes, isso sempre acontece. =)
Se entrarmos nessa discussão – que lista cada um faria –, criaríamos um meme.
[]'s
Cacilhas, La Batalema
Por La Batalema Pitonisto, Às 24 de junho de 2008 14:42
Gostei da lista, e realmente dá para fazer um "meme" da idéia...
Acabei montando a minha lista, e vou postar no meu
[jabá]blog[/jabá]
Quanto à diferença entre ciência e técnica (que o cesar chamou de informática) eu acredito essa diferença está mais na prioridade e na ordem dos livros. Sou tecnólogo de formação e li os livros do Knuth, Wirth, Herbert Schildt, Meyer, etc. Mas também li Yourdon, Gane e Sarson, Brooks, entre outros... Abraços
Por RobsonFrança, Às 24 de junho de 2008 18:07
Boa lista, mas você está sugerindo desperdiçar muito tempo com C++ em pleno 2008; tempo que seria muito melhor gasto com o bom e velho SICP.
Eu trabalho no Google e não sei programar. Aprender a programar leva dez anos. Estou estudando a oito, quase chegando lá… ;)
Por leoboiko, Às 25 de junho de 2008 08:24
A lista é muito boa, mas gostaria de tecer alguns comentários:
1) o CLRS não é adotado apenas nos cursos do MIT, mas por todo departamento de computação de qualquer Universidade razoável;
2) o CLRS não é nem de longe "extremamente formal". É um trabalho formidável, mas o formalismo do livro é apenas o minimamente necessário para um estudo decente de algoritmos (essa era a intenção dos autores). Uma discussão bem mais formal pode ser encontrada em Sedgewick, "An Introduction to the Analysis of Algorithms";
3) Matemática Concreta é um livro sensacional e vai muito além do ferramental matemático básico. Apesar de ser uma leitura interessante para todos, não recomendo como livro de cabeceira para quem está começando, visto que apesar de conter partes de mais fácil digestão, o todo é bem difícil: pode assustar. Para quem está começando os apêndices matemáticos do CLRS já devem bastar. É verdade que uma breve olhada no Matemática Concreta, vez ou outra, pode ser útil (a sacada de integrar os dois lados de uma recorrência me fez ficar de queixo caído).
De resto, exceto por um ou outro \epsilon, concordo com tudo o que vc disse e parabéns pelo post e pelo blog.
Por Domingos's Code Pit, Às 25 de junho de 2008 16:43
Já que você falou no The Mythical Man-Month vale a pena comentar que depois de ler ele vale a pena gastar um fim de semana para ler o "Peopleware: Productive Projects and Teams" (Tom DeMarco / Timothy Lister). Ele dá algumas soluções para os problemas de administração de pessoal apontados pelo Brooks =)
Por pilgerowski, Às 26 de junho de 2008 10:10
Ótima lista, mas considerando a ordem eu tiraria o Sedgewick e colocaria o SICP no lugar. O Cormen é mais formal mas é didático o bastante para poder ser usado como introdução, sabendo o que estudar na hora certa.
Por Pedro Werneck, Às 2 de julho de 2008 18:29
Faltou algo de Dados, como o Chris Date.
Por DUTRA, Leandro Guimarães Faria Corcete, Às 8 de julho de 2008 10:39
ricbit, peguei a muda de aveleiro no shalom e falei com o guri deitado ate ele mandar usar o galho pela tela pra procurar agua, mas a porca nao deixa usar nenhum objeto. lembra o que tinha que fazer? tem que fazer algo com a muda antes de usar?
Por Edu, Às 19 de julho de 2008 21:17
Você precisa conversar com um carinha antes. Eu não lembro o nome dele, mas é no lado oeste do mapa.
Por ricbit, Às 20 de julho de 2008 00:15
Cara, muito legal a sua lista, muito obrigado. Já comecei a ler o GEB e estou curtindo muito!
Pena q não tem mais prá vender em português... (a única cópia q eu achei, estão vendendo por R$ 490!!!) Mas a em inglês não é muito difícil.
Por André, Às 20 de janeiro de 2010 16:20
Postar um comentário
Links para esta postagem:
Criar um link
<< Início