10 artigos que todo programador deveria ler (pelo menos duas vezes)
Luiz em 02/03/2009Semana passada, Michael Feathers publicou um post no blog da ObjectMentor onde indica 10 artigos que todo programador deveria ler. Segundo ele, a lista contém artigos que abrangem assuntos que todo programador deve saber sobre código. Os artigos estão em inglês. Essa lista pode servir de um resumo do que há de mais importante para aprender sobre programação para quem pretende trabalhar com isso. A lista segue abaixo, com links para versões gratuitas dos artigos (no post original, nem todos os links são para versões gratuitas):
- On the Criteria To Be Used in Decomposing Systems into Modules – David Parnas: trata de como dividir um sistema de modo a aumentar sua flexibilidade e diminuir o tempo de desenvolvimento, dando origem à ideia da divisão de responsabilidades.
- A Note on Distributed Computing – Jim Waldo, Geoff Wyant, Ann Wollrath, Sam Kendall: um artigo importante para se entender por que programação distribuída não é transparente. Mostra que não é possível fazer programação distribuída de forma transparente sem perder em confiabilidade e robustez.
- The next 700 programming languages – P. J. Landin: examina três técnicas de construção de linguagens de programação que podem (e, segundo o autor, devem) ser usadas para criar as próximas linguagens de programação. O artigo é bastante teórico mas, como Michael Feathers disse, o importante é pegar a ideia principal do artigo, que é a importância da programação funcional.
- Can programming be liberated from the von Neumann style? – John Backus: artigo que trata, basicamente, de programação funcional. Explica, dá exemplos e propriedades matemáticas das linguagens.
- Reflections on Trusting Trust – Ken Thompson: um artigo mais filosófico sobre computação, mostrando o quanto precisamos confiar no trabalho de alguns programadores para nós mesmos programarmos.
- Lisp: Good news, bad news, how to win big – Richard Gabriel: o artigo fala sobre Lisp, mas os conceitos abordados valem para qualquer linguagem de programação. São mostradas as qualidades e os defeitos da linguagem e o que fazer para melhorá-la. Mas, no fundo, o artigo trata sobre tecnologias que nem sempre são as melhores, mas acabam fazendo mais sucesso.
- An experimental evaluation of the assumption of independence in multiversion programming – John Knight, Nancy Leveson: trata de um experimento para verificar a eficácia de um método proposto para tentar tornar um sistema mais robusto: o desenvolvimento em paralelo por programadores diferentes (só para adiantar: não funcionava).
- Arguments and results – James Noble: um artigo que, com a difusão do paradigma de orientação a objetos, levanta uma discussão bastante relevante nos dias atuais: como expor as funcionalidades de um objeto, ou seja, como projetar sua interface.
- A Laboratory For Teaching Object-Oriented Thinking – Kent Beck, Ward Cunningham: o artigo aborda o aprendizado do pensamento orientado a objetos para programadores, com técnicas como os cartões CRC (Class, Responsibility, Collaboration).
- Programming as an Experience: the inspiration for Self – David Ungar, Randall B. Smith: um artigo sobre o projeto da linguagem Self, que surgiu com o objetivo de melhorar a experiência do desenvolvimento de software e que inovou, em muitos aspectos, o conhecimento sobre linguagens de programação. (Quem sabe teremos um post sobre Self na série “Linguagens de Programação” qualquer dia?)
Essa é a lista original publicada no post, com os comentários sobre os artigos adaptados e traduzidos. É claro, há diversos outros artigos muito bons nos quais vale a pena dar uma olhada. Qual você adicionaria/removeria?