A arte da programação de computadores - Ler ou não ler? [fechadas]

63

Existem muitos livros sobre programação por aí, e parece que o Code Complete está no topo da lista de "livros de programação obrigatórios" da maioria das pessoas, mas e The Art of Computer Programming, de Donald Knuth? Sou uma pessoa ocupada, entre o trabalho e uma família jovem, não tenho muito tempo livre, por isso tenho que ser exigente quanto ao uso.

Eu estou pensando - alguém aqui leu 'TAOCP'? Em caso afirmativo, vale a pena reservar um tempo para ler ou algum outro livro ou mais programas paralelos, como projetos para animais de estimação ou contribuir com o código aberto, seriam uma melhor utilização do meu tempo em termos de desenvolvimento profissional?

AVISO LEGAL - Para aqueles que usam camisetas "Knuth is my homeboy", não me interpretem mal - eu quero ler, mas estou me perguntando se deveria estar no topo da minha lista de prioridades ou se algo mais vier primeiro.

Zannjaminderson
fonte
Eu quero ler, mas é caro como o inferno, então eu o comprei quando terminar a universidade e começar a ganhar algum dinheiro. Além disso, preciso de uma estante grande.
gablin
Eu cheguei na página 3 e brinquei. Vendido o aparelho na Amazon 6 meses depois.
precisa saber é o seguinte

Respostas:

72

O TAOCP é uma referência totalmente inestimável para entender como as estruturas e algoritmos de dados que usamos todos os dias funcionam e por que o trabalho, mas comprometer-se a lê-lo de capa a capa seria um investimento extraordinário do seu tempo.

Como um homem de família, passe o tempo com seus filhos.

Adam Crossland
fonte
34
+1 para crianças - os computadores são notoriamente bons para esperar. Eles podem esperar que as crianças sejam mais velhas.
3
+1 para crianças, enquanto você poderá ler o livro a qualquer momento da sua vida, poderá brincar com seu filho de 4 anos apenas por 1 ano. E com o seu filho de 5 anos de idade por apenas 1 ano também ...
3
Ótima resposta. Há muitas coisas que nos tornariam melhores programadores, mas precisamos ser inteligentes sobre onde investimos nosso tempo e também lembrar que há mais na vida do que ser um grande programador.
Jon Hopkins
5
Ainda não tenho filhos e realmente quero terminar de ler antes de morrer. Não devo ter filhos?
Afundou
11
@sank você está pensando como um programador ... :)
Angelin Nadar
23

Substitua "a enciclopédia" na sua pergunta por todas as referências ao TAOCP, e acho que a resposta deve ser óbvia. Porque em muitos aspectos, é isso que é TAOCP.

Há uma história (possivelmente apócrifa) sobre Steve Jobs conhecer Knuth. A primeira coisa que Jobs lhe disse foi "É um prazer conhecê-lo, Dr. Knuth. Li todos os seus trabalhos!". A resposta de Knuth foi "Você está cheio de merda": http://www.folklore.org/StoryView.py?project=Macintosh&story=Close_Encounters_of_the_Steve_Kind.txt

Jason Baker
fonte
11
A enciclopédia tem uma quantidade imensa de coisas, principalmente não tão interessantes ou relevantes para pessoas com até uma ampla gama de interesses. O conteúdo do TAOCP é pelo menos um pouco relevante para qualquer desenvolvedor de software.
David Thornley
4
Re: a história Jobs: Ele é uma história apócrifa. Knuth disse isso na palestra sobre tecnologia do Google de Randall Munroe.
greyfade
4
A "história", no entanto, me fez sorrir. :)
MetalMikester
Eu posso atestar o humor do Dr. Knuth. Enviei um email para o endereço publicado dele. Fiquei surpreso que ele respondeu. Sua resposta foi uma cópia impressa marcada do meu e-mail, se ele educadamente me dissesse para ler o restante da seção no TAOCP. Minha assinatura de e-mail é sobre ser do Missouri (mostre-me), para o qual ele fez um comentário sobre um político tolo do MO. Ele então concluiu dizendo: "Apenas brincando, não me culpe pelo governador Schwarzenegger".
22411 dbasnett
21

Não, não deve estar no topo da sua lista de prioridades. Eu tenho um conjunto completo e NÃO li a coisa toda. Eu o usei (até agora) como uma boa referência para certos problemas (foi inestimável na minha compreensão da aleatoriedade e no teste de geradores aleatórios, por exemplo). Sempre que surge um tópico de CS em que eu não tenho um controle REALMENTE bom, costumo pegar a parte relevante do TAOCP como um bom passo no meu entendimento.

Se você decidir lê-lo, terá mais poder, e eu definitivamente recomendo tomá-lo em pequenos pedaços. Não tenha medo de pular e olhar o que for mais interessante primeiro.

Michael Kohne
fonte
11
Você acerta o prego na cabeça.
precisa saber é o seguinte
9

O TOACP é uma leitura essencial - em algum momento. Dependendo do que você faz diariamente, pode não ser o mais urgente.

É um daqueles livros (bem, coleções de livros) que é bom de ler no início de sua carreira, porque realmente fornece boas idéias que você normalmente não conseguiria até mais tarde, mas não é essencial para a sobrevivência até você se formar nessa parte da sua carreira, onde você não apenas codifica, escolhe a caixa de ferramentas. Este é o ponto em que você realmente deseja estudar algoritmos, espero que já entenda um pouco o design da linguagem e tenha uma compreensão muito ampla de quais ferramentas, linguagens e sistemas existem e como cada um deles se encaixa no ecossistema de coisas que você pode desenhar para um projeto específico.

Em outras palavras: é um aprendizado geral, por isso, se você é obsessivo como eu, leia-o agora, se não for, não há problema em adiar até começar a desejar subir a escada e se tornar um profissional.

HedgeMage
fonte
6

Tendo empreendido recentemente essa mesma tarefa, posso dizer que a maneira como ele escreve é ​​muito agradável e os problemas são rotulados (de acordo com a dificuldade) de maneira muito adequada. Obtenha o primeiro volume, leia os capítulos 1 e 2 e veja como você gosta.

sova
fonte
6

O TAOCP é um ótimo trabalho, mas lê-lo seria um investimento terrível para um desenvolvedor de software que pratica. Se você fizer isso, estará sacrificando alguns anos (quanto tempo levará) do seu orçamento profissional de auto-aperfeiçoamento para aprender muito sobre pouco.

Eu recomendaria trabalhar com um ou vários livros "finais" sobre algoritmos, o meu favorito nesta área é o Manual de design de algoritmos de Steven S. Skiena

Então, se você sentir que precisa / deseja mais, vá para o Knuth.

Ao mesmo tempo, você pode comprar um ou vários volumes de TAOCP, pesquisar para entender quais áreas o Knuth cobre nele e mantê-lo em sua biblioteca, caso você realmente precise de algumas informações no seu dia-a-dia. trabalhos. Meu palpite é que você não faria isso e essa é outra razão pela qual eu não aconselho a tentar ler. Mas se você se referir a ele com frequência suficiente, saberá que vale a pena ler o artigo de capa a capa.

kdubinets
fonte
6

O trabalho seminal de Knuth é a referência mais popular que os programadores pretendem ler ou terminam de ler. Algum dia.

Steven A. Lowe
fonte
2
É como "Uma Breve História do Tempo", de Hawking, para programadores.
Jon Hopkins
11
Bit I tinha lido ABHIT. A radiação de Hawking me parece estranha. Um buraco negro encolhe porque mais algumas coisas caem nele? Entendo a conservação da massa e a coisa de duas metades de cada par virtual que nunca pode se encontrar para destruir, mas a ideia ainda é esquisita.
31311 Steve314
@ Steve314: o que é ainda mais estranho é que buracos negros minúsculos explodem violentamente. Teoricamente.
Steven A. Lowe
2
ABHOT É curto e é direcionado ao público em geral. TAOCP não é uma dessas coisas.
21412 Sean McMillan
3

+10 no comentário da família / filhos. Eu tento fazer a maior parte da leitura enquanto durar em voos de olhos vermelhos para os clientes.

Mas ... sim, vale muito a pena a leitura. Não há razão para ler linearmente; em vez disso, procure e escolha alguns tópicos de interesse.

Jé Queue
fonte
3

Estou firmemente no campo das pessoas que acham que todo desenvolvedor deve investir na obtenção dos livros em algum momento (e está ficando mais fácil agora que parece que eles estão sendo reimpressos em brochura ), mas do mesmo modo, eu faria Também é difícil acreditar que alguém se sente e leia todos eles de capa a capa.

A melhor abordagem para eles - se você não tem um trajeto para trabalhar onde tem tempo livre para sentar e ler - é ler o suficiente deles para saber onde encontrar as coisas e ler um capítulo inteiro sempre que precisar. você pode usá-los como livros de referência para um determinado problema. Com o Google e o Stack Overflow, não é tão comum procurar livros de referência, mas, em alguns casos, você pode achar que os livros fornecem algumas dicas de que você precisaria enviar mais tempo procurando na Internet.

rjzii
fonte
11
Leia um capítulo completo? Isso representa cerca de meio volume e não são pequenos volumes. Eu acho que você pode significar uma unidade menor de texto.
precisa saber é o seguinte
3

Não esqueça que, no começo, Knuth queria escrever algo sobre como escrever um compilador.

Você pode obter muitas informações na rede com a wikipedia, por exemplo, mas se você não é algum tipo de pesquisador, basta ler o resumo, obterá satisfação.

Você ainda pode obter o primeiro tomo para lê-lo quando estiver entediado ...

jokoon
fonte
2

Provavelmente é mais importante que você faça esses problemas no livro do que apenas lê-los. Isso exigirá muito tempo.

Ele tem até 4 volumes e 5 fascículos (quaisquer que sejam), portanto, concluir os livros provavelmente seria melhor do que um curso universitário nos fundamentos da ciência da computação e torná-lo quase o melhor programador de todos os tempos.

Desde que você tem uma família jovem, como eu, você me deu uma ótima ideia. Eu comprava os livros um de cada vez e os ensinava aos seus filhos.

Peter Turner
fonte
11
"portanto, a conclusão dos livros provavelmente seria melhor do que um curso universitário" - os volumes 1 a 3 foram usados ​​como livros em vários cursos quando eu obtive meu diploma de conclusão de curso e passaríamos um curso inteiro em apenas metade de um dos volumes por exemplo, "Volume 3 Classificando e Pesquisando" foi ministrado como dois cursos separados.
seguinte
2
Ponto secundário, mas no momento existem apenas três volumes publicados com o quarto em andamento. Os fascículos são uma pré-impressão do que se tornará o quarto volume. www-cs-faculty.stanford.edu/~uno/taocp.html
rjzii
1

Se você estiver curioso, faça-o, mas leva algum tempo para digerir, assim você precisa levar o seu tempo.

Você tem um trajeto onde pode ler - isso seria perfeito.


EDIT: Você pode achar interessante esta prévia de uma pequena parte do Volume 4: http://www-cs-faculty.stanford.edu/~uno/fasc1a.ps.gz

(nota: postscript compactado)

user1249
fonte
11
Infelizmente (neste caso - MUITO sortudo de outra maneira) eu telecomuto, então isso não é uma opção.
Zannjaminderson
1

Não é algo que a maioria das pessoas queira sentar e ler de capa a capa, não. É uma referência incrivelmente valiosa, e certamente é bom buscá-la, escolher uma seção interessante, ler sobre ela e fazer alguns exercícios. Mas as comparações da enciclopédia feitas acima são bastante adequadas ... são grandes, extensas e detalhadas. E alguns dos "exercícios" são problemas de pesquisa que podem levar anos para serem resolvidos.

Se você deseja apenas um conhecimento melhor dos algoritmos de baixo nível, talvez seja melhor começar com os livros de Robert Sedgewick (por exemplo, "Algoritmos em C", "Algoritmos em Java" etc.).

mindcrime
fonte
1

Se você quiser mudar o mundo, leia-o. Se você quiser aprender novos hacks, não leia.

muito tolo
fonte
1

O TAOCP de Knuth é uma obra-prima. Mas, como qualquer obra-prima (como "Illiad", "War and Peace" ou "In Search of Lost Time" de Proust), não é para todos ou para sempre.

O livro está muito bem escrito e muito bem pesquisado. Os problemas são grandes e a explicação dos algoritmos é bem feita.

O grande problema do livro é o fato de Knuth mostrar o código para uma linguagem de montagem fictícia para um computador fictício. Eu entendo por que ele fez isso, mas o fato é que é uma merda.

Eu recomendo usar este livro como uma Bíblia. Quando precisar, procure. Você encontrará a resposta. Isso aconteceu comigo mais de uma vez!

Eduardo
fonte
3
Ajudaria se tivesse usado o montador real para IBM360 ou PDP8?
Martin Beckett
11
Nunca poderia suportar esses 50 anos com uma linguagem assembly não-ficcional. Coloca todos em uma mesma desvantagem!
Luser droog