Qual é o livro mais influente que todo programador deve ler? [fechadas]

1439

Se você pudesse voltar no tempo e pedir a si mesmo para ler um livro específico no início de sua carreira como desenvolvedor, que livro seria?

Espero que essa lista seja variada e cubra uma ampla gama de coisas.

Para pesquisar: use a caixa de pesquisa no canto superior direito. Para pesquisar as respostas da pergunta atual, use inquestion:this. Por exemplo:

inquestion:this "Code Complete"
Robert Harvey
fonte
8
Navegar neste tópico me faz perceber como a maioria dos livros relacionados à programação é feia. Muito boa discussão!
24530 Carl Bergquist
23
Interessante é que, enquanto o título diz "Qual é o livro mais influente que todo programador deve ler?", Existem alguns livros sugeridos que lidam com tópicos específicos de idiomas. Por definição, e por perguntas como foram colocadas, os livros sugeridos aqui devem lidar com tópicos agnósticos de linguagem, o que prova que a maioria dos programadores ainda precisa aprender a ler.
Rook
19
Se eu pudesse voltar no tempo e me pedir para ler alguma coisa, seria melhor um jornal ou livro de fatos esportivos que eu carregava comigo. Qualquer outra coisa é um desperdício de boas viagens no tempo. :-)
jmucchiello
32
Você sabe, se eu não estivesse preocupada em ser votada MUITO, eu sugeriria Twilight. "É também sobre pessoas que são pálidas e evitam o sol!"
Jacob Bellamy
3
Alguém pode limpar as respostas excluindo entradas repetidas nos livros? A maioria deles já foi votada.
rao

Respostas:

1746
  • Code Complete (2a edição) por Steve McConnell
  • O programador pragmático
  • Estrutura e Interpretação de Programas de Computador
  • A linguagem de programação C de Kernighan e Ritchie
  • Introdução aos algoritmos de Cormen, Leiserson, Rivest & Stein
  • Padrões de Design da Gang of Four
  • Refatoração: aprimorando o design do código existente
  • O Mês do Homem Mítico
  • A arte da programação de computadores por Donald Knuth
  • Compiladores: Princípios, técnicas e ferramentas de Alfred V. Aho, Ravi Sethi e Jeffrey D. Ullman
  • Gödel, Escher, Bach por Douglas Hofstadter
  • Código Limpo: Um Manual de Artesanato de Software Ágil, por Robert C. Martin
  • C ++ eficaz
  • C ++ mais eficaz
  • CODE by Charles Petzold
  • Pérolas de programação por Jon Bentley
  • Trabalhando efetivamente com o código legado de Michael C. Feathers
  • Peopleware por Demarco e Lister
  • Coders at Work por Peter Seibel
  • Certamente você está brincando, Sr. Feynman!
  • Java eficaz 2ª edição
  • Padrões de arquitetura de aplicativos corporativos de Martin Fowler
  • The Little Schemer
  • O planejador experiente
  • Guia (comovente) de Ruby do Why
  • Os presos estão administrando o asilo: por que os produtos de alta tecnologia nos deixam loucos e como restaurar a sanidade
  • A Arte da Programação Unix
  • Desenvolvimento orientado a testes: por exemplo, por Kent Beck
  • Práticas de um desenvolvedor ágil
  • Não me faça pensar
  • Desenvolvimento, princípios, padrões e práticas de software ágil por Robert C. Martin
  • Projetos orientados a domínio por Eric Evans
  • O design das coisas cotidianas por Donald Norman
  • Design moderno em C ++ por Andrei Alexandrescu
  • Melhor escrita de software I por Joel Spolsky
  • A Prática de Programação por Kernighan e Pike
  • Pensamento e aprendizagem pragmáticos: Refatorar o seu Wetware por Andy Hunt
  • Estimativa de Software: Desmistificando a Arte Negra por Steve McConnel
  • O programador apaixonado (meu trabalho foi para a Índia) por Chad Fowler
  • Hackers: Heróis da Revolução Informática
  • Algoritmos + Estruturas de Dados = Programas
  • Escrevendo código sólido
  • JavaScript - As boas partes
  • Realizando-se por 37 sinais
  • Fundamentos da programação por Karl Seguin
  • Computação Gráfica: Princípios e Práticas em C (2ª Edição)
  • Pensando em Java por Bruce Eckel
  • Os elementos dos sistemas de computação
  • Refatoração de padrões por Joshua Kerievsky
  • Sistemas operacionais modernos por Andrew S. Tanenbaum
  • O Turing anotado
  • Coisas que nos tornam inteligentes Donald Norman
  • A maneira atemporal de construção de Christopher Alexander
  • O prazo: um romance sobre gerenciamento de projetos por Tom DeMarco
  • A linguagem de programação C ++ (3ª edição) por Stroustrup
  • Padrões de arquitetura de aplicativos corporativos
  • Sistemas de Computação - Perspectiva de um Programador
  • Princípios, padrões e práticas ágeis em C # de Robert C. Martin
  • Crescimento de software orientado a objetos, guiado por testes
  • Diretrizes de projeto de estrutura de Brad Abrams
  • Pensamento de Objetos pelo Dr. David West
  • Programação avançada no ambiente UNIX por W. Richard Stevens
  • Hackers e pintores: grandes idéias da era do computador
  • A alma de uma nova máquina por Tracy Kidder
  • CLR via C # por Jeffrey Richter
  • A maneira atemporal de construção de Christopher Alexander
  • Padrões de Design em C # por Steve Metsker
  • Alice no país das maravilhas por Lewis Carol
  • Zen e a arte da manutenção de motocicletas por Robert M. Pirsig
  • Sobre o rosto - o essencial do design de interação
  • Aqui vem todo mundo: o poder de organizar sem organizações por Clay Shirky
  • O Tao da Programação
  • Beleza computacional da natureza
  • Escrevendo código sólido por Steve Maguire
  • Guia de Philip e Alex para publicação na Web
  • Análise e Design Orientados a Objetos com Aplicações de Grady Booch
  • Java eficaz por Joshua Bloch
  • Computabilidade por NJ Cutland
  • Masterminds of Programming
  • O Tao Te Ching
  • O programador produtivo
  • A arte da decepção por Kevin Mitnick
  • Programador de carreira: táticas de guerrilha para um mundo imperfeito por Christopher Duncan
  • Paradigmas da programação de inteligência artificial: estudos de caso no Common Lisp
  • Masters of Doom
  • Teste de unidade pragmática em C # com NUnit por Andy Hunt e Dave Thomas com Matt Hargett
  • Como resolvê-lo por George Polya
  • O Alquimista de Paulo Coelho
  • Smalltalk-80: A linguagem e sua implementação
  • Writing Secure Code (2nd Edition) de Michael Howard
  • Introdução à Programação Funcional por Philip Wadler e Richard Bird
  • Sem erros! de David Thielen
  • Retrabalho de Jason Freid e DHH
  • JUnit em ação
aleatórios
fonte
16
Code Complete é um bom livro, se você estiver na faculdade, talvez. Se você tem pelo menos 1 ano de experiência em programação, é um furo total.
Bogdan Gavril MSFT
19
O Code Complete possui muitas informações úteis, mas está enterrado em hipérbole, waffle e repetição, o que dificulta a leitura.
Jeff Yates
76
Li o Code Complete 3 anos em minha carreira. Eu não tinha feito um curso de engenharia de software nem um curso de construção de linguagem de programação, mas fiz alguns cursos introdutórios de CS. É de longe o melhor livro que eu já li para me tornar um programador melhor. Não fará de você um especialista, mas fará de você muito mais do que um tinkerer.
Shea
119
O problema deste livro é que, para um iniciante, não faz muito sentido, pois os conceitos são um pouco avançados. Quando estiver pronto para poder lê-lo, você já deverá conhecer e praticar 99% dos conceitos do livro.
ESAC
57
Esse é o trato com sugestões de bom senso, como as encontradas neste livro. De vez em quando você precisa ser lembrado deles para voltar à linha.
JohnFx 17/06/09
9

K&R

@ Juan: Eu conheço Juan, eu sei - mas há algumas coisas que só podem ser aprendidas se você realmente se dedicar à tarefa em questão. Falar em ideais abstratos o dia todo simplesmente o transforma em acadêmico. É na aplicação do resumo que realmente entendemos a razão de sua existência. : P

@ Keith: Uma grande menção a "The Inmates are Running the Asylum", de Alan Cooper - um revelador de certeza, qualquer desenvolvedor que trabalhe comigo desde que li esse livro me ouviu mencionar as idéias que ele propõe. +1

Jason Bunting
fonte
9

Matemática discreta para cientistas da computação http://ecx.images-amazon.com/images/I/51HCJ5R42KL._SL500_BO2,204,203,200_AA219_PIsitb-sticker-dp-arrow,TopRight,-24,-23_SH20_OU02_.jpg

Matemática Discreta Para Cientistas da Computação por JK Truss.

Enquanto isso não ensina programação, ensina matemática fundamental que todo programador deve conhecer. Você pode se lembrar disso na universidade, mas, na verdade, fazer uma lógica de predicado melhorará suas habilidades de programação, você precisará aprender a Teoria dos Conjuntos se quiser programar usando coleções.

Realmente há muitas informações interessantes aqui que podem fazer você pensar sobre os problemas de maneiras diferentes. É prático, basta pegar de vez em quando para aprender algo novo.

Tarski
fonte
9

Sistemática: Como os sistemas funcionam e especialmente como eles falham . Use-o barato. Mas você pode não entender o humor até ter trabalhado em alguns projetos com falha.

A beleza do livro é o ano dos direitos autorais.

Provavelmente a "lei" mais profunda apresentada no livro:

Teorema fundamental do modo de falha (FFT): sistemas complexos geralmente operam no modo de falha.

A idéia é que existem partes com falha em um determinado software, mascaradas por falhas em outras partes ou por validações em outras partes. Veja um exemplo do mundo real na máquina de radiação Therac-25 , cujas falhas de software foram mascaradas por falhas de hardware. Quando as falhas de hardware foram removidas, a condição de corrida de software que não foi detectada durante todos esses anos resultou na máquina matando três pessoas.

Nicholas Piasecki
fonte
1
Verifique também a Bíblia de Sistemas do mesmo autor (John Gall). É a terceira edição do Systemantics, ele acabou de mudar o título. Este é o livro que você roubaria da escola. É o livro que os adultos crescem lendo debaixo de um cobertor com uma lanterna.
precisa
9

Um dos meus favoritos é o Hacker's Delight , porque era tão divertido de ler quanto educacional.

Espero que a segunda edição seja lançada em breve!

tr9sh
fonte
+1 para "Hacker's Delight", de Henry S. Warren Jr - não se trata de hackear no sentido popular, mas de hackear como em brincadeiras de baixo nível e outros "hacks" no sentido verdadeiro e original da palavra. Não é para todos, mas se você está envolvido na otimização de código, compiladores, etc., ou é apenas um nerd geral interessado em coisas de baixo nível, então este é um ótimo livro.
Paul R
9

Conceitos, técnicas e modelos de programação de computadores.

texto alternativo http://ecx.images-amazon.com/images/I/51YZ50ZR13L._SL500_AA240_.jpg

amit
fonte
Brillant, a capa do livro mostra "La Sagrada Família", uma grande basílica católica romana em construção em Barcelona, ​​Catalunha, Espanha. A ser concluído em 2026 (restam apenas 17 anos). Como a maioria dos programas, mesmo com os melhores livros, eles nunca terminou ...
PeterMmm
9

Extrema programação explicada: abraçar a mudança por Kent Beck. Embora eu não defenda uma abordagem XP ou estrada do hardcore no desenvolvimento de software, eu gostaria de ter sido apresentado aos princípios deste livro muito antes na minha carreira. Teste de unidade, refatoração, simplicidade, integração contínua, custo / tempo / qualidade / escopo - isso mudou a maneira como eu olhava para o desenvolvimento. Antes do Agile, era tudo sobre o depurador e o medo de solicitações de mudança. Depois do Agile, esses demônios não pareciam tão grandes.

TrueWill
fonte
9

Tipos e linguagens de programação de Benjamin C Pierce para uma compreensão completa dos fundamentos das linguagens de programação.

Dave Clarke
fonte
9

O Database System Concepts é um dos melhores livros que você pode ler sobre como entender os bons princípios de design de banco de dados.

texto alternativo

Ryan Berger
fonte
9

A prática da programação. Por Brian W. Kernighan, Rob Pike.

O estilo mostrado aqui é excelente - o código apenas fala por si e todo o livro segue o princípio do KISS. Pessoalmente, não minhas línguas de escolha, mas ainda influentes para mim.

RD1
fonte
1
-1 Duplicado de stackoverflow.com/questions/1711/…
Ruben Bartelink 27/03
9

Paradigmas da programação de inteligência artificial : estudos de caso em Common Lisp por Peter Norvig

insira a descrição da imagem aqui

Comecei a ler porque queria aprender Common Lisp. Quando estava no meio do caminho, percebi que esse era o melhor livro sobre programação que eu havia lido até agora.

Michiel Borkent
fonte
9

Definitivamente artesanato de software

texto alternativo http://ecx.images-amazon.com/images/I/5186JKTDVWL._SL500_AA240_.jpg

Este livro explica muitas coisas sobre engenharia de software, desenvolvimento de sistemas. Também é extremamente útil entender a diferença entre diferentes tipos de desenvolvimento de produtos: web VS shrinkwrap VS framework IBM. O que as pessoas tinham em mente quando conceberam o modelo em cascata? Leia isso e tudo ficará claro (espero)

dario minonne
fonte
Este livro precisa ser reescrito do zero. O assunto é muito interessante, mas o livro é bastante insano.
precisa
Chris, tenho dificuldade em entender o seu comentário ... Você pode explicar mais? Por que 'louco'?
Dario minonne
Em primeiro lugar, está cheio de erros tipográficos. A mão editorial geralmente de primeira linha de Addison Wesley está estranhamente ausente neste volume.
Chris Mountford #
... continuando, e não há espaço suficiente aqui, mas: 2. nunca fica claro no texto em que o autor alterna entre fato e opinião, anedota e princípio fundamental etc. 3. o artesanato em software é uma metáfora e uma estratégia para lidar com vários aspectos difíceis do desenvolvimento de software. Tem vantagens específicas sobre alternativas e presumivelmente desvantagens. Eu acredito que essa é a abordagem sensata. Não faz sentido dizer que o software é inerentemente um ofício. Leitura muito irritante, mas para ser justo, foi há um tempo atrás e muitos detalhes que esqueci. Meu desgosto permanece, no entanto.
Chris Mountford
8

@ Peter Coulton - você não lê Knuth, você estuda.

Para mim e meu trabalho ... Estruturas de dados puramente funcionais são ótimas para pensar e desenvolver com linguagens funcionais em mente.

nlucaroni
fonte
8

"O mundo é plano", de Thomas Friedman.

A excelência em programação exige um investimento de energia mental e uma dedicação ao aprendizado contínuo comparável às profissões de medicina ou direito. Paga uma fração do que essas profissões pagam, muito menos os salários pagos aos especialistas em matemática que se dirigem ao setor financeiro. E os salários para a construção de código estão corroendo porque é uma profissão que é relativamente fácil para os inteligentes e autodisciplinados na maioria das economias entrarem.

A programação já corroeu a ponto de pagar menos do que, digamos, encanamentos. O encanamento não pode ser "offshored". Você não precisa pagar US $ 2395 para participar da Professional Plumber's Conference a cada dois anos pelo privilégio de receber um conjunto totalmente novo de tecnologias de encanamento que levará um ano para você aprender.

Se você mora na América do Norte ou na Europa, é jovem e inteligente, a programação não é uma opção de carreira racional. Empresas que envolvem programação, absolutamente. Estude negócios, saiba o suficiente sobre programação para refinar seu detector de BS: brilhante. Mas dedicar a maior parte de sua energia mental ao domínio de bibliotecas, estruturas de dados e algoritmos? Isso só faz sentido se a programação é algo mais para você do que uma escolha econômica.

Se você gosta de programar e, por esse motivo, pretende fazer da sua carreira, é necessário que você desenvolva uma compreensão fria das forças que são e continuarão a torná-la uma profissão cada vez mais difícil para se sustentar. . "O mundo é plano" não ensinará a você como nomear suas variáveis, mas mergulhará por 6 ou 8 horas em realidades econômicas que chegaram. Se você pode lê-lo, e não ficar com medo, em seguida, sair e comprar "Code Complete".

Larry OBrien
fonte
Essa é uma boa resposta!
Avi
8

texto alternativo

Neste último ano, participei de várias aulas. Eu li

O dilema do inovador (tecnologia disruptiva)
O mês do homem mítico (software de gerenciamento)
Atravessando o abismo (inicialização)
Sistemas de gerenciamento de banco de dados, o livro de vacas
Programação C #, o livro de OSTRICH
Começando os desenvolvedores do iPhone, o livro GRAPEFRUIT

Cada livro foi incrível, mas o dilema do inovador de Clayton Christensen (1997 !!!) é realmente um livro fantástico, e isso me fez pensar muito sobre o mundo moderno do software. O desafio enfrentado é a tecnologia disruptiva e como as empresas de unidades de disco e as não técnicas são sempre interrompidas por uma nova tecnologia revolucionária. Dá uma nova perspectiva ao pensar no Google, provavelmente a maior empresa da web. Por que eles têm as mãos em TUDO? É porque eles não querem que sua posição seja interrompida por algo novo. A visualização no google é suficiente para entender a idéia. Leia-o!

TahoeWolverine
fonte
Eu acho que este livro é bastante repetitivo. Eu recomendo a leitura dos primeiros 1/4.
Ben Haley
8

hackers, de Steven Levy.

A personalidade e o modo de vida devem vir primeiro. Tudo o resto pode ser aprendido.

tsilb
fonte
8

A linguagem Python foi muito influente para mim, eu gostaria de ter lido esses livros anos atrás. A beleza e a simplicidade da linguagem Python realmente afetaram a maneira como escrevi código em outras linguagens.

texto alternativo texto alternativo

Matthew J Morrison
fonte
2
Acho que iniciar novos programadores com Python reduziria a quantidade de código feio no mundo. Eu trabalho com alguém que recua linhas aleatoriamente - essa pessoa não faria isso se tivesse trabalhado com Python por alguns meses.
xnine 25/10/10
6
Eu acho que iniciar novos programadores com Python reduziria a quantidade de outras linguagens.
Marco Mariani
2
Essas capas são uma coincidência?
Kelly S. French
7

Eu acho que "The Art of Unix Programming" é um excelente livro, por um excelente hacker / mente brilhante como Eric S. Raymond, que tenta nos fazer entender alguns princípios do design de software (principalmente a simplicidade). Este livro é obrigatório para toda programação que está prestes a iniciar um projeto na plataforma Unix.

espreita
fonte
6
isso é uma duplicata.
Christopher Mahan
7

Embora eu concorde que muitos dos livros acima são leituras obrigatórias (Programador Pragmático, Mês do Homem Mítico, Arte da Programação de Computadores e SICP vêm à mente imediatamente), eu gostaria de seguir uma direção um pouco diferente e recomendar Uma Disciplina. de programação por Edsger Dijkstra. Mesmo com 32 anos, a ênfase no "design para verificabilidade" é altamente relevante (mesmo que "verificabilidade" signifique "prova" em vez de "testes de unidade").

joel.neely
fonte
7

A refatoração de Martin Fowler : Melhorando o design do código existente já foi listada. Mas vou detalhar por que isso me impactou.

A essência de todo o livro trata da estruturação do código, para que seja mais simples ler e entender por humanos . Isso me ensina fortemente que o código que escrevo destina-se a meus colegas e sucessores a consumir e possivelmente aprender algo bom com isso. Isso me inspira a programar conscientemente de uma maneira que deixe as pessoas louvando meu nome, e não me amaldiçoando por toda a eternidade .

icelava
fonte
7

Aqui está um excelente livro que não é tão amplamente aplaudido, mas é cheio de insights profundos: Desenvolvimento Ágil de Software: O Jogo Cooperativo , de Alistair Cockburn.

O que há de tão especial nisso? Bem, claramente todo mundo já ouviu o termo "Agile", e parece que a maioria é de crentes hoje em dia. Quer você acredite ou não, existem alguns princípios profundos por trás do porquê do movimento Agile existir. Este livro descobre e articula esses princípios de maneira precisa e científica. Alguns dos princípios são (aliás, essas são minhas palavras, não as de Alistair):

  1. A coisa mais difícil sobre o desenvolvimento de software de equipe é fazer com que o cérebro de todos tenha o mesmo entendimento. Estamos construindo sistemas enormes, elaborados e complexos, invisíveis no mundo tangível. Quanto melhor você conseguir que os cérebros das pessoas compartilhem um entendimento mais profundo, mais eficaz será sua equipe no desenvolvimento de software. Essa é a razão subjacente pela qual a programação em pares faz sentido. A maioria das pessoas descarta isso (e eu também fiz isso inicialmente), mas com esse princípio em mente, recomendo que você dê outra chance. Você acaba com DUAS pessoas que entendem profundamente o subsistema que você acabou de criar ... não existem muitas outras maneiras de obter uma transferência de informações tão profunda tão rapidamente. É como uma fusão mental vulcano.
  2. Você nem sempre precisa de palavras para comunicar rapidamente um profundo entendimento. E um corolário: muitas palavras e você excede a capacidade do ouvinte / leitor, o que significa que a transferência de entendimento que você está tentando não acontece. Considere que as crianças aprendem a falar a língua sendo "imersas" e "absorvendo". Também não é a linguagem ... ele dá o exemplo de algumas crianças brincando com trens no chão. Junto vem outro garoto que nunca viu um trem antes ... mas, observando as outras crianças, ele pega a essência do jogo e joga junto. Isso acontece o tempo todo entre humanos. Isso, juntamente com o corolário sobre muitas palavras, ajuda você a ver como estava errado nos velhos tempos da "cachoeira" para tentar escrever especificações de requisitos detalhados de 700 páginas.

Há muito mais lá também. Agora vou calar a boca, mas recomendo vivamente este livro!

Charlie Flowers
fonte
2
Uma contribuição única e você teve tempo para explicar claramente por que valia a pena ler. +1 por originalidade e esforço! Vou olhar para a frente a ler esta breve ...
Avery Payne
Boa. Eu não acho que você ficará desapontado.
Charlie Flowers
7

Mestres da desgraça. No que diz respeito à motivação e ao amor pela sua profissão: não haverá nada melhor do que o descrito neste livro, uma história verdadeiramente inspiradora!

Jasper Bekkers
fonte
+1 para o preciso uma linha crítica
rubayeet