Sou estudante de CS e, sinceramente, não entendo os livros de Knuth [fechado]

52

Eu me deparei com esta citação de Bill Gates: "Você definitivamente deveria me enviar um currículo se puder ler a coisa toda". Ele estava falando sobre os livros The Art of Programming . Então, fiquei muito curioso e quero ler tudo. Mas honestamente, eu não entendo.

Eu realmente não sou tão intelectual. Portanto, esse deve ser o motivo pelo qual não consigo entender, mas estou ansioso para aprender. Atualmente, estou lendo o Volume 1 sobre algoritmos fundamentais. Existem livros disponíveis para iniciantes / pessoas lentas como eu, que ajudariam a aumentar meu conhecimento para que eu possa ler o livro de Knuth com facilidade no futuro?

Rho
fonte
Humm digamos que eu iria entendê-lo (e você também eu acho), mas levaria muito tempo e há livros mais fáceis hoje em dia ..
Nils
22
Eles podem ser difíceis de ler e pode haver livros mais fáceis, mas você deve lê-los de qualquer maneira. Até agora, só consegui ler o primeiro livro e não entendo tudo! mas vale a pena. Ciência da Computação é difícil . Quanto mais cedo você perceber que não é inteligente o suficiente para entendê-lo, mais cedo poderá começar a aprender como aprendê-lo.
Michael K
2
Eles são inclinados a matemática para programadores em matemática. O CS evoluiu nos últimos anos e existem inúmeras áreas benéficas que não são matemáticas. Qual direção você deseja desenvolver mais? Se são algoritmos e coisas do tipo, provavelmente são de boa leitura, se houver outras áreas, eles expandirão seu horizonte, mas tanto quanto ler um livro sobre algum tópico de biologia. Portanto, dependendo da sua área, eles podem estar em qualquer lugar, desde a missão crítica até quase inútil.
Coder
11
Desde quando os programadores consideram Bill Gates autoritário?
Giorgio
2
O Coursera possui 6 cursos gratuitos sobre algoritmos (partes 1 e 2 dos algoritmos, partes 1 e 2 do projeto e análise de algoritmos e partes 1 e 2 da combinatória analítica).
Anthony

Respostas:

39

Até acho que o livro de Knuth é um pouco avançado e difícil de entender. Esses livros são definitivamente para algoritmos de nível de pesquisa IMHO.

Existem livros disponíveis para iniciantes / pessoas lentas como eu?

A introdução de algoritmos pelo CLRS é muito mais simples.

EDIT :

Ainda assim, se você quiser ler o livro de Knuth, deve primeiro ler a Matemática Concreta . Knuth quer que seus alunos estejam cientes da parte matemática básica da análise de algoritmos.

Prasoon Saurav
fonte
5
O manual de design do algoritmo é ainda mais fácil / mais acessível - é quase divertido de ler
Martin Beckett
Introdução aos algoritmos é um ótimo livro. Usamos isso no nosso primeiro curso de algoritmos CSE e adorei. Embora eu deva dizer que passei muitas iterações passando pelos mesmos exemplos para realmente dizer que as entendo.
8287 Chris
4
@SidCool: Há uma terceira edição do CLRS com uma dúzia de novas seções.
Bill the Lizard
10
Os livros de Knuth são War & Peace of programming. Eles são bons, mas são usados ​​principalmente para fazer as estantes parecerem impressionantes.
Gaurav
6
"Até acho que o livro de Knuth está um pouco avançado"? modéstia eh :)
occulus
57

Não deixe de ler todas as citações de Gates, incluindo:

"Demorou uma disciplina incrível e vários meses para eu ler. Estudei 20 páginas, guardei por uma semana e voltei por mais 20 páginas. Se alguém é tão ousado que acha que sabe tudo, Knuth continuará. ajude-os a entender que o mundo é profundo e complicado ".

Não são livros fáceis e não pretendem ser. Lembre-se de que um dos objetivos de Knuth era trazer rigor matemático à ciência da computação . Isso é ótimo se você quiser provar algo sobre um algoritmo, mas não tão bom se você quiser apenas saber como ele funciona.

Michael Dorfman tem algumas boas dicas para ler os livros em sua resposta à pergunta (agora excluída) no Stackoverflow sobre O que posso obter da leitura do lote? . Se você não tem 10k rep, ainda pode ver a pergunta e a resposta dele na máquina de wayback .

O que você obterá com a leitura do lote? Uma excelente base em Ciência da Computação. Você entenderá como os computadores operam, desde portas lógicas até compiladores. Você pensará em problemas que nunca soube realmente serem problemas (ou seja, qual é a maneira mais rápida de se multiplicar?) E verá conexões algorítmicas entre coisas que nunca pensou que estavam relacionadas (leitos de rios, RNA e parênteses aninhados, por exemplo).

Eu discordo completamente das pessoas que dizem "criar software em vez de ler sobre a construção de software" - há uma diferença entre as disciplinas de Engenharia de Software e Ciência da Computação. TAOCP é sobre o último.

Se você ainda não começou, tenho algumas recomendações.

Primeiro, você pode começar com o Volume 4. É um material emocionante, muito atualizado, e o senso de humor de Knuth brilha. Além disso, existem vídeos disponíveis (no site do Stanford SPCD ou no Stanford iTunes), onde Knuth discute várias seções. Esses vídeos são altamente recomendados. Os fascículos 0, 1, 2, 3 e 4 do volume 4 estão disponíveis como brochuras separadas. Juntos, o material V4 publicado é maior que qualquer um dos três primeiros volumes, mas dividido em pedaços pequenos. (Gostaria de saber se os volumes 1 a 3 pareceriam menos assustadores para as pessoas se cada volume tivesse sido publicado em forma de livro de um capítulo ...)

Dependendo da sua formação em matemática, eu recomendo que você passe o capítulo 1 pela primeira vez e volte a ele conforme necessário. Na verdade, você provavelmente desejará ler cada seção (pelo menos) duas vezes - rapidamente na primeira vez, apenas para entender a intuição e a essência dos argumentos e, então, lenta e cuidadosamente, entender cada etapa.

Certifique-se de ler o Volume 1, Fascicle 1 no MMIX, em vez das seções antigas no MIX. O MMIX é melhor em vários aspectos, e é melhor converter o MIX no texto em MMIX à medida que avança do que tentar atravessar os dois mundos.

Uma regra geral: não pule os exercícios. Há muito material bom nas perguntas (e respostas). Faça o máximo de exercícios possível; mas leia todas elas (e leia as respostas, depois de tentar o problema ou decidir dar um passe).

Finalmente, se você realmente pegar o bug: leia o índice. Muitas ótimas piadas escondidas por lá.

Naturalmente, o StackOverflow seria um bom lugar para postar perguntas específicas no texto, se elas surgirem ....

Para outros recursos, descobri que é útil pesquisar os conteúdos programáticos das conceituadas escolas de ciência da computação. Por exemplo, livros didáticos para o início de classes de algoritmos:

Março de Corbin
fonte
O link para SO foi quebrado, mas eu achei um post que eu imagino é semelhante: stackoverflow.com/questions/1022167/...
asjohnson
+1 para o post original no Way Back Machine e a lista de livros dessas universidades
Anthony
+1 por recomendar começar com o Volume 4, fascículos 0, 1, 2, 3 e 4 e também por ler sobre o MMIX em vez do MIX. Como resultado, vou começar com o Volumn 1, Fascicle 1, porque abrange o MMIX.
Shaun Luttin
Como programador Java / c, eu me sinto muito fácil de entender e praticar <Estruturas de Dados e Análise de Algoritmos em Java>.
Eric Wang
29

Knuth é o autor de ciência da computação mais respeitado, citado, comentado e altamente respeitado da história. Seus livros adornam as estantes de todos os desenvolvedores sérios de software e são mencionados com o mesmo nível de respeito que as pessoas dão à Bíblia e à Arte da Guerra.

Eu até ouvi dizer que algumas pessoas realmente leram partes dos livros de Knuth.

A maioria das pessoas apenas pretende .

Pessoalmente, estou guardando-os para minha aposentadoria

Steven A. Lowe
fonte
22
É por isso que as cópias usadas e gastas valem mais do que as novas!
Martin Beckett
13
Se você entende The Art of War, perceberá que só precisa fazer as pessoas pensarem que entende Knuth quando não o faz e, inversamente, que não entende Knuth quando o faz. Se não, você não. E se você entender o livro 5 do Livro dos Cinco Anéis, nem precisará falar de Knuth. E se você leu The Art of Unix Programming da ESR e entendeu os koans, nem precisará de Knuth, porque terá transcendido a barreira da complexidade.
Christopher Mahan
20

Os livros de Knuth mudaram o campo dos algoritmos para sempre. Ele mesmo disse que 'duas páginas do meu livro é o trabalho de toda a carreira de alguém' e que seus livros eram difíceis de ler. O livro contém material condensado de anos de trabalho em Ciência da Computação.

Você não deve se sentir mal se não conseguir entender.

Como Prasoon disse, o CLRS é um livro mais simples de ler.

Você também tem algoritmos de Rajasekaran, Sahni et al, que são fáceis de entender.

Arjun J Rao
fonte
isso é incrível ouvir .. eu pensei im o único a ter problemas para ler este livro .. muito obrigado
Rho
7
@ Raymond Ho: Eu não acho que alguém realmente goste de ler os livros de Knuth. Conheço pelo menos uma pessoa que as tem na estante apenas para fazer a estante parecer impressionante.
FrustratedWithFormsDesigner
12

Quando me formei, peguei os três primeiros volumes do TAOCP como presente de formatura e tentei lê-los diretamente. Nunca conseguiu. Hoje em dia eu consegui passar 1/3 dos três primeiros volumes (pensado em nenhuma ordem específica). O material é definitivamente denso, mas há três dicas que aprendi que ajudaram muito.

Primeiro, não tente ler de capa a capa. O TAOCP é realmente um trabalho de referência, e achei melhor ler uma seção quando for relevante para um problema que você está tentando resolver. Como muitas coisas no mundo, entender as soluções é muito mais fácil depois que você encontra os problemas que eles estão tentando resolver.

Em seguida, esse fluxograma na frente do livro, não é apenas um pouco de humor, mas na verdade uma dica bastante útil. Leia as seções nas quais você está trabalhando iterativamente, começando primeiro com apenas os conceitos gerais e, em seguida, aprofundando-se na matemática.

Por fim, mantenha um bom papel antiquado e um lápis à mão para trabalhar com os algoritmos descritos, e trabalhe com alguns dos problemas fáceis. É um longo caminho para ajudar a reforçar o que você está lendo.

Cercerilla
fonte
10

Não se preocupe, a maioria das pessoas não entende a arte da programação de computadores (TAOCP). Portanto, não pense que você é lento ou novato por não entender - você é como os outros 99,99% de nós que não entendem.

Você é bastante ambicioso se quiser chegar ao nível em que pode ler o TAOCP com facilidade . Eu mesmo só folheei os livros antes de guardá-los. Provavelmente, apenas um punhado de pessoas neste planeta entende o TAOCP.

Confira o post: Os programadores de livros não leem realmente por Bill the Lizard.

Existem muitos outros livros listados aqui que são bastante legíveis , compreensíveis e você pode se beneficiar imediatamente .

Eu pessoalmente gosto de:

esponja
fonte
8

Eu tropecei nesta citação de Bill Gates: "Você definitivamente deveria me enviar um currículo se puder ler a coisa toda". Ele estava falando sobre os livros The Art of Programming .. Então eu fiquei bem curioso e quero ler tudo, mas honestamente, eu não entendo nada .. I'm really not that highly intellectual being.. Então essa deve ser a razão pela qual eu não consigo entender , mas estou ansioso para aprender .. Atualmente, estou lendo o volume 1 sobre algo fundamental .. Existe algum livro por aí que seja amigável para iniciantes / pessoas lentas como eu? Para que eu possa me construir e espero que, no futuro, possa ler o livro de Knuth à vontade ..

se você se define como está, not a highly intellectual beingentão está definindo expectativas baixas. Você precisa quebrar essa mentalidade se quiser fazer algo que valha a pena. Não deve haver dúvida em sua mente que você pode conseguir algo. Além disso, alcançá-lo não significa que você o alcançará facilmente.

As coisas que vale a pena perseguir são as difíceis ... e isso não é um clichê. No software, na engenharia, na vida em geral, se você deseja alcançar algo, precisa seguir as coisas difíceis, as que as pessoas evitam e não se contentar com os menores denominadores comuns das coisas.

Primeiro, não está claro qual é o seu histórico de CS. O livro de Knuth exige um certo grau de maturidade. Poucas pessoas com um diploma de CS podem passar por isso com facilidade. Eu não esperaria que um estudante de CS que acabasse de terminar seu primeiro curso em algoritmos fosse capaz de realmente ler um único livro de Knuth. A maturidade necessária para alcançá-la simplesmente não existe, e isso não tem nada a ver com a capacidade mental do aluno.

Você precisa ter seu básico de algoritmos de maneira clara e clara, e precisa de uma boa quantidade de programação (trabalho e / ou escolar) em seu currículo - eu diria, pelo menos, 40 créditos em programação. Você também precisa ter sua matemática de CS em terreno firme.

Você não pode ir muito longe sem ter uma boa compreensão da matemática discreta (e possivelmente da teoria da computação).

Não é que você precise desse conhecimento para trabalhar nos problemas de Knuth, mas precisa de uma maturidade para poder passar por esse tipo de material.

Primeiro escolha um livro e apenas um livro (o livro do CLRS como sugerido anteriormente) e trabalhe-o do início ao fim. Quando possível, faça programas implementando os algoritmos. Não use Java ou C #, nem mesmo C ++. Vá para os ossos nus C e tenha a sensação de construir coisas a partir de restos de metal nus.

Obtenha também o livro de Knuth sobre "Matemática concreta" se você ainda não fez um curso de matemática discreta e teoria da computação. Seria bom que você também passasse por esse livro.

Em seguida, lide com a enciclopédia de Knuth, um tomo, um capítulo de cada vez. Não vá para outro capítulo sem entender bem o primeiro.

Eu sugeriria que você analisasse primeiro o volume I (algoritmos fundamentais), depois o volume III (pesquisa e classificação). Esses devem ser seus objetivos imediatos. Então, mais tarde (muito mais tarde), resolva o volume IV (algoritmos combinatórios) e, em seguida, o volume II (algoritmos semi-numéricos).

Não se sinta mal se não o entender primeiro. Eu tenho tentado passar pelo volume I e III por anos (10 anos agora).

E você não deve colocar tanto peso nisso também. Não faça isso para provar algo a alguém ou a si mesmo. Faça isso porque você está intelectualmente interessado em fazê-lo. Você pode se tornar proficiente em algoritmos simplesmente usando o livro do CLRS (ou qualquer um dos melhores livros de graduação).

Seja pragmático e faça uma pausa. Trate de ler o livro de Knuth como uma ambição pessoal de longo prazo, não como uma prova imediata de que você é material de CS;)

Existem outras coisas mais importantes (em termos de carreira) pelas quais se matar;)

luis.espinal
fonte
2
Nota: Você se refere ao Volume III duas vezes e nunca ao Volume II, nomeando o Volume III com dois nomes diferentes.
alternativa
Obrigado por me avisar (+1). A ordem que eu quis dizer foi a seguinte: primeiro volume I (algoritmos fundamentais), depois volume III (pesquisa e classificação), depois volume IV (algoritmos combinatórios) e depois volume II (algoritmos semi-numéricos.)
luis.espinal
6
+1 Não é porque as coisas são difíceis que não ousamos; é porque não ousamos que sejam difíceis. - Seneca
mouviciel
4

Antes de começar em Knuth, tive que percorrer quatro livros diferentes. Os dois primeiros são os livros de Algoritmos de Sedgewick . Eles apresentam uma visão geral da maioria dos algoritmos e estruturas de dados em um formulário implementado real, para que você possa ver o que são e como funcionam. Esses livros vêm em diferentes versões de linguagem - eu li os em C, mas iirc foram originalmente escritos em Pascal, e existem versões em C ++ e Java por aí.

Depois disso, trabalhei em boa parte do livro de Cormen sobre algoritmos e usei Introdução a análise de algoritmos de Sedgewick e Flajolet como um texto complementar, pois está mais na veia do rigor matemático de Knuth do que no livro de Cormen. Ainda tenho que terminar uma delas, principalmente escolhendo as peças que acho que preciso.

Depois de ler essas e de me formar em Matemática, posso ler algumas das TAOCP, mas é uma leitura difícil. Isso não quer dizer que não seja útil. Os TAOCP são alguns dos melhores manuais de referência de algoritmos existentes, mas pensar que você pode usá-los para entender "completamente" qualquer coisa é um tanto problemático.

Justin Hamilton
fonte