Existe uma data de validade para livros bem considerados, mas antigos sobre programação? [fechadas]

51

Depois de ler a pergunta sobre livros que todo programador deve ler , gostaria de saber se o seguinte deve ser considerado obsoleto:

Todos esses livros parecem muito antigos. Não existe uma diferença entre a computação moderna e o que estava em vigor quando esses livros foram escritos?

Por exemplo, meu professor de 61 anos explica muito bem as coisas, mas se esquece de levar em conta tudo o que foi feito entre quando começou a lecionar há 25 anos e agora.

O mesmo não acontece com esses livros? Não existem mais livros modernos que ensinem princípios e tecnologias mais próximos da prática atual? Ou você considera que eles sejam úteis e relevantes até hoje?

    
por Olivier Pons 23.05.2017 / 14:40
fonte

18 respostas

92

Este livro é sobre os princípios do desenvolvimento. Esses princípios são, por natureza, agnósticos para a linguagem e, para alguns, até mesmo agnósticos para o paradigma (OOP, programação funcional, linguagens imperativas).

Eles explicam a teoria e as boas maneiras do desenvolvimento porque, no final, o software sempre trata de obter dados, processá-los e, em seguida, enviá-los de volta. Facebook, Twitter, 3D, processo batch de contabilidade, gerenciamento de tráfego ferroviário, lançamento de foguetes, etc.

Livros sobre um idioma, como "How to learn XXXXX in YY days" , em que XXXXX é um idioma e YY é um número que eventualmente (e às vezes muito rapidamente) se tornará obsoleto, porque, por natureza, trata-se de coisas que evoluem , ou seja substituído e ficar desatualizado.

Código Completo , do fantástico Steve McConnell, talvez seja o livro que me fez perceber isso. E o Programador Pragmático mudou totalmente a visão que eu tinha do desenvolvimento de software. Ao ler esses livros, você percebe que 95% do problema que você está enfrentando todos os dias já foi resolvido e que 95% de nós ainda estão reinventando a roda.

O chamado "Cloud" não é o futuro do desenvolvimento de software, é uma maneira de usar software desenvolvido.

Não caia na armadilha de chavões de hype / bullshit, foque em como você pode melhorar suas habilidades de artesão de software.

Concentre-se em aprender com o que outros espíritos brilhantes inventaram e aprenderam antes de nós, porque é a única maneira de se tornar um desenvolvedor talentoso.

    
por 13.12.2011 / 02:30
fonte
80

All those books seem very, very, very old."

Psicologia-Programação de Computador (1971) - Com um milhão de vezes mais programadores que em 1970 a psicologia de como eles projetam programas e quais erros cometem e como evitá-los é mais importante do que nunca.

Ferramentas de software (1976) - Com a web sendo uma coleção de obras de quadro, utilitários, scripts e plugins - as ideias em Software Tools nunca foram mais relevantes.

EDIT: Para abordar a questão geral de - livros de programação antigos são relevantes?

Os princípios gerais da engenharia de software não mudaram tanto assim, existem novas tecnologias OO, TDD etc. Mas geralmente os usuários e os problemas não mudaram - e pensar em como dividir um problema é o mesmo agora como sempre foi.

Esses livros mais antigos eram geralmente escritos por especialistas na área. Muitos livros de programação modernos visam apressar uma porta de 2000 páginas para a última palavra da moda enquanto ainda é atual.

Livros sobre linguagens e tecnologias que não são mais usadas provavelmente não são relevantes - nenhum manual do montador Vax está na lista. Mas 'C' ainda é muito usado e 'A linguagem de programação C' não é apenas o melhor livro sobre 'C', é um modelo de como escrever um tutorial conciso e referência ao seu idioma.

Existem novos algoritmos? Sim. Mas todos os algoritmos antigos ainda são relevantes e a maioria dos novos está em áreas obscuras que é improvável que você conheça. Ninguém chegou a um tipo melhor ou FFT recentemente. Embora outras pessoas tenham tentado explicá-las melhor, não há razão para que os livros de Algoritmos deste ano sejam melhores que os CLRS.

ps. Seu novo e legal iWhatsit roda o BSD, desenvolvido em 1977. Agora vocês, crianças, saem do meu gramado!

    
por 13.12.2011 / 23:32
fonte
28

All those books seem very, very, very old. Don't you think there's a difference between nowadays and when those book were written?

IMHO não é uma surpresa que livros muito bons se mantenham populares ao longo de décadas - isso mostra quão bons eles são. Mas acho que posso dizer algo para cada um dos candidatos que você listou:

Code complete: 2nd edition = may, 2004

Na verdade, a primeira edição de "Code complete" foi de 1993, então este é realmente um "clássico". Trata-se de estilo básico de codificação, usando exemplos que se aplicam a quase todas as linguagens de programação da família C, que contém as linguagens mais populares atualmente (C / C ++ / Java / C # / Objetivo-C / D / ...). Então, sim, este livro está atualizado.

Introduction to algorithms (Cormen, Leiserson, Rivest, Stein)
Bem, eu realmente não li esse livro (meu livro de texto de algoritmos era de "Sedgewick"), mas algoritmos de aprendizado e construção de algoritmos são realmente agnósticos. Claro, este ofício está recebendo alguns underrating nos últimos anos desde que você encontra muitos algoritmos básicos hoje em dia em bibliotecas padrão, mas IMHO cada programador profissional deve ter algum conhecimento básico neste campo.

The Pragmatic Programmer

Este é um livro muito bom sobre programação como artesanato. Linguagem agnóstica e muito, muito atualizada, desde que a programação seja feita por programadores como uma tarefa manual, usando editores de texto, IDEs, controle de versão, etc.

Structure and Interpretation of Computer Programs: = September 1, 1996

Este é o meu favorito pessoal, embora (ou talvez porque) o livro use Scheme para ensinar as diferenças entre os diferentes paradigmas de programação. Eu não conheço nenhum outro livro que tenha um foco tão strong na construção de abstrações. E construir abstrações é uma habilidade fundamental que faz a diferença entre um programador medíocre e um programador de topo - que não mudou nas últimas décadas, então, realmente, este livro é atemporal. Além disso, linguagens funcionais e elementos de linguagem se tornaram mais populares recentemente, então IMHO as ideias apresentadas neste livro tiveram um renascimento.

The C Programming Language

Bem, este livro pode não ser tão intemporal quanto os outros quatro. Mas como C é algo como a "mãe" de todas as linguagens populares que listei acima, pode ser uma boa idéia ler este livro também - eu não acho que há alguns livros "C" modernos que são realmente melhores. E se você tem que fazer programação de manutenção de código C ++ que foi escrito por alguém que sabia que C melhor que C ++, então este livro é uma obrigação.

Por fim, você estava pedindo livros que levem em consideração mais a "realidade atual", sem ser específico demais em tecnologia. Então, qual é a "realidade atual" e o que mudou no lado "não-tecnológico"? Aqui estão alguns pontos da última década, sem dizer que esta lista está completa ou tendo os priorites corretos.

  1. Existe mais código legado (especialmente mais código legado não apenas em Fortran e Cobol, mas também em C ++ e Java).
  2. O teste de unidade e o TDD se tornaram mais favoritos.
  3. Há muito mais código aberto disponível.
  4. OO tem recebido mais e mais críticas

(Eu não listo aqui nada sobre desenvolvimento Web ou App, porque eu acho que essa tecnologia é específica).

Existem bons livros para os tópicos 1 e 2, especialmente " Código Limpo ", que é de 2008, e " Trabalhando efetivamente com o legado código " de 2004. Talvez esses sejam alguns dos livros" mais recentes "que você está procurando?

    
por 23.05.2017 / 14:40
fonte
13

Dos que você mencionou, "Código completo", "O programador pragmático" e "SICP" estão na minha lista de leitura recomendada para todos os novos desenvolvedores que começam aqui na minha empresa e querem chegar a um nível mais alto. / p>

Eles não estão obsoletos por um longo caminho porque a ciência fundamental em Ciência da Computação não mudou.

    
por 12.12.2011 / 17:54
fonte
10

Eu não li todos esses livros, mas eu possuo o Código Completo e o Programador Pragmático. Esses livros estão longe de serem obsoletos. Eles podem ter alguns parágrafos que estão um pouco enferrujados, mas a maior parte do conteúdo ainda é relevante hoje em dia.

O avanço em Ciência da Computação e Programação é um processo evolutivo . Novas abstrações estão sendo introduzidas em cima das antigas, mas essas novas coisas não tornam o obsoleto obsoleto.

Uma analogia ... Se você está estudando para ser um cirurgião de trauma ou um cirurgião especializado em transplante de coração, você ainda precisa saber como o corpo humano funciona, a química das células, os sistemas de órgãos, como abrir o peito e Como parar rapidamente o sangramento, se ocorrer, etc ... Só porque eles inventaram equipamentos endoscópicos e técnicas menos invasivas, isso não significa que você está fora do gancho para aprender o básico. Significa apenas que você precisa aprender mais.

    
por 12.12.2011 / 22:12
fonte
7

A "nuvem" não é um fator. A "nuvem" é na verdade muito mais antiga que a maioria dos livros listados. a maioria desses livros é sobre princípios fundamentais, eles nem sempre mudam com frequência. Estruturas e bibliotecas mudam o tempo todo, mas como você deve estruturar seu código não muda muito. Da mesma forma um ponteiro ainda é um ponteiro que não começa a fazer coisas diferentes só porque. O único livro específico da linguagem que você listou é sobre C, caso em que o livro antigo é muito mais útil do que qualquer novidade, porque provavelmente foi escrito mais próximo do período em que qualquer código em C com o qual você estaria trabalhando foi desenvolvido. >     

por 12.12.2011 / 17:36
fonte
6

A lista que você citou, não é obsoleta. Um livro só fica obsoleto quando o assunto mudou o suficiente para não ser útil. A natureza da programação e a linguagem C mudaram muito pouco desde a publicação

    
por 12.12.2011 / 17:41
fonte
6

Uma das coisas que você precisa perceber é que existem princípios subjacentes que são essencialmente atemporais e implementações que tendem a ir e vir.

Os princípios subjacentes são essencialmente toda a teoria chata que a Ciência da Computação tende a gastar muito tempo, e que continua sendo válida mesmo que o mundo mude em torno dela. Isso, em oposição a coisas como "Como usar o Win32s no Windows 3.11", que é muito antigo e desatualizado.

Para colocar as coisas em perspectiva - o texto canônico sobre a geometria tem dois mil anos. A maioria das aulas de matemática até o nível universitário tem pelo menos 300 anos de idade. Apenas os livros de CS não são mais antigos, porque o campo ainda é novo.

    
por 12.12.2011 / 18:41
fonte
6

Alguns livros são atemporais porque discutem ideias que são tão fundamentais para a prática do desenvolvimento de software que sempre serão aplicados.

Tomemos por exemplo o Mês do Mito Mítico , quando eu estava lendo este livro, fiquei esquecendo que era escrito em 1975. Quando ele asperge na referência ocasional sobre o IBM System 360, ele sempre me irrita porque esse é o único conteúdo que data o livro. Tudo o resto se aplica aqui e agora. Eu ainda mantenho minha cópia do Padrões de Arquitetura de Aplicações Corporativas de Martin Fowler, agora com 9 anos de idade, mas novamente atemporal e ainda aplicável para o trabalho que faço hoje.

Meu livro favorito agora é o Modelagem Java em cores com UML (1999) de Peter Coad, embora eu ' Sou um desenvolvedor C # e evito a UML, porque as técnicas e conceitos me fazem um programador melhor.

Gostaríamos de aprender com a primeira geração de desenvolvedores porque eles pisam o chão que estamos caminhando agora e a sabedoria obtida com eles pode nos ajudar a começar o que estamos fazendo / aprendendo hoje .

    
por 12.12.2011 / 20:27
fonte
5

Os princípios fundamentais do software não mudaram nos últimos 20 anos. Uma pilha, uma árvore e uma lista encadeada ainda funcionam da mesma forma que naquela época. "XOR" ainda significa a mesma coisa. Um byte ainda tem 8 bits.

Você está sugerindo seriamente que o "desenvolvimento de multiplataformas" é uma ideia nova? Por que você acha que C foi inventado?

"Cloud" é uma palavra de propaganda de marketing. Costumava significar algo específico, mas foi degradado pelo uso excessivo. Hoje em dia, sempre que você tiver algo que converse com um servidor remoto em uma rede, os profissionais de marketing usam o rótulo "nuvem". Então não há realmente nenhum ponto em falar sobre isso, porque é uma palavra sem sentido.

Eu não conheço seu professor de 61 anos, então não posso garantir ele. Você, por outro lado, não é tão inteligente quanto pensa. Ouça o professor, é possível que você aprenda alguma coisa.

"Você não consegue ser velho por não ser tolo. Muitos jovens sábios, mortos como um filho da puta." - Richard Pryor

    
por 12.12.2011 / 19:21
fonte
4

Aqui estão alguns livros mais antigos e desatualizados:

  • A arte da programação de computadores, vol. 1-3 por D. Knuth. Estes foram publicado entre 1968 e 1981! Nós não estamos usando tubos de vácuo mais pessoas! Tudo nesses livros é manco. Onde está discussão sobre Python e Ruby?

  • Computadores e intratabilidade: um guia para a teoria de NP-Completeness por M. R. Garey e D.S. Johnson, 1979. Super lame! Todos esses problemas foram resolvidos agora, provavelmente.

Se um livro não foi escrito nos últimos três anos com foco no Python, então não vale a pena ler.

    
por 12.12.2011 / 19:09
fonte
3

Esses livros não são obsoletos, esses livros são clássicos.

Para citar Kaplansky , " passe algum tempo todos os dias aprendendo algo novo que é separado do problema no qual você está trabalhando atualmente (lembre-se de que a disjunção pode ser temporária) e leia os mestres . "

    
por 12.12.2011 / 19:29
fonte
3

Eu sei o que você quer dizer, quando temos avanços (o LINQ vem à mente) que alteram a legibilidade e uso do código, mas simplesmente porque esses livros são antigos, não significa que eles não oferecem grandes lições para o leitor.

Embora as linguagens de programação que eles usam possam ter caído em desuso, a teoria por trás das linguagens de programação ainda soa verdadeira hoje. A maioria desses livros faz questão de cobrir muito bem a base, e o básico não mudou muito.

    
por 31.01.2012 / 15:26
fonte
1

A indústria da ciência da computação ainda é muito jovem. Livros escritos há 30 anos eu considero ainda valiosos e necessários para uma compreensão completa. Conceitos abstratos às vezes demoram um pouco para serem digeridos.

    
por 12.12.2011 / 20:24
fonte
1

Algumas partes menores são obsoletas em todos esses livros, mas 99% ainda é ótimo.

Os livros de algoritmos envelhecerão lentamente. Algoritmos são matemática e a matemática não está mudando rapidamente. Claro, ainda há pesquisas sobre novos algoritmos que são superiores em certas circunstâncias (por exemplo, algoritmo da Furer ( 2007) Schonhage-Strassen para multiplicar 40000 + dígitos longos números juntos), mas a introdução que você precisa aprender o básico (dividir-e-conquistar / programação dinâmica / programação linear / etc) para que você possa aprender a pensar de forma sensata sobre os algoritmos.

O padrão de aprendizado C do K & R ainda é a melhor fonte; embora eu não tenha certeza se confiaria em suas seções sobre como configurar seu ambiente.

O SICP é um livro maravilhoso e ensina os fundamentos da CS moderna através do ensino do lisp, que é uma linguagem maravilhosa. No entanto, lisp é sem dúvida a linguagem mais útil hoje em dia; Embora outros argumentem que o lisp é sua arma secreta e que aprender linguagens como java ou python primeiro torna os programadores muito ruins que nunca precisam aprender a implementar listas ordenadas ou vinculadas ou arrays ou notações big-O e acabam fazendo coisas muito ineficientes.

Alguns dos complementadores de código ou programadores pragmáticos são menos relevantes, especialmente se você estiver programando em linguagens mais novas (por exemplo, python / ruby / C ++ 11), pois geralmente está focado em como fazer algo em C ou oferece soluções recomendadas usando as melhores ferramentas disponíveis no momento (como CVS / RCS para controle de versão ao invés de uma ferramenta moderna como git / bzr / hg / svn). Mas ainda é bom estar pensando sobre como o controle de versão é uma necessidade e como ele precisa ser transparente e autodocumentado e seguir a lógica de por que é uma necessidade absoluta.

Ou as recomendações do PP contra IDEs para editor unix básico + ferramentas unix - para não dizer que você não deve aprender a usar o find / awk / locate / grep / sed, mas um bom IDE pode economizar muito tempo. Por exemplo, o emacs pode realçar a sintaxe ou concluir um código simples; mas digamos que um bom IDE dirá dicas de ferramentas com declarações de função quando você as digita ou analisa o código e marca variáveis não usadas, facilita o recolhimento de seções de código, etc.

    
por 12.12.2011 / 21:40
fonte
1

Isn't there a difference between modern computing and what was current when those book were written? Do you think it changes what we should learn? Shouldn't we take into account the developments of the last 20 years?

Sim, sim e sim.

Isso não torna esses livros obsoletos. "Computação moderna" é um termo incrivelmente amplo. No entanto, inclui programação C, então "The C Programming Language" ainda é um livro relevante. Ele inclui algoritmos, então "Introdução aos Algoritmos" ainda é um livro relevante. Então, e assim por diante.

Should the current emphasis on multiplatform development multiplatform development (see phonegap) change what we learn today?

A maioria dos aplicativos na App Store (para usar a plataforma móvel mais popular como exemplo) são escritos em Objective C, uma linguagem do início dos anos 80 que é um superconjunto de C. Então, novamente, C ainda é relevante. / p>

Do you think the "cloud" is a fad or the future?

É o nosso presente.

When students get out of university, they are supposed to be real developers and be able to work immediately

Mas o que isso significa?

Existem muitas linguagens, APIs, estruturas, plataformas, ferramentas, estratégias de colaboração, etc. para a escola prepará-lo para um trabalho específico . A escola só pode lançar as bases, dando-lhe um modelo básico de funcionamento de como a máquina funciona, sobre algoritmos, estruturas de dados, construção de código, estratégias de decomposição, algumas ferramentas, etc.

Um "desenvolvedor real" não é alguém que sabe tudo, é alguém com capacidade para esse tipo de trabalho, que tem uma base em teoria e prática e quem sabe como aprender , porque sua educação nunca acaba.

    
por 12.12.2011 / 23:17
fonte
1

Ok, então vou oferecer uma resposta muito mais teórica. Eu concordo com todos vocês que responderam, na minha opinião, bastante óbvio, esses livros são a base do que nós, programadores, fazemos e todos esses novos frameworks são construídos sobre a mesma linha de pilares antigos.

Aqui estão meus dois centavos - não realmente meus, eu aprendi de St. Aquinas e de Aristóteles antes dele.

An abstraction is useless to someone who doesn't understand the particulars.

A mecânica de um computador não mudou desde von-neumann. Da mesma forma, os detalhes que você precisa aprender para ser um ótimo programador serão os mesmos até que o modelo von-neumann seja obsoleto. Assembly, é a linguagem dos computadores ... aprenda, sem desculpas.

C é o idioma nativo do Windows e do Unix. Aprenda ou encontre um novo ofício. Se você é um desses caras que foram direto para JAVA ou C #, você pode ser um bom programador, mas seria um programador muito melhor se aprendesse C - period.

Algoritmos e estruturas de dados são a base dos programas de computador, aprendê-los.

Tudo o mais é uma abstração dessas disciplinas básicas. Abstrações são maravilhosas quando usadas corretamente - sério, eu uso o C # para 75% de todos os meus projetos. No entanto, eles fazem você estúpido se você não tomar o tempo para entender como eles funcionam e como funcionam sem eles. Você gastará um tempo infinito fazendo o software se encaixar no proverbial orifício quadrado quando houver abordagens muito melhores e tiver bugs que poderiam ter sido evitados. O desenvolvimento de software é um ofício que deve ser dominado e, no final das contas, as ferramentas raramente mudam. É por isso que esses livros são tão importantes.

Todos esses programadores JAVA e C # apenas, tsk, aposto que a maioria deles nunca viu um episódio de Star Trek!

    
por 13.12.2011 / 07:40
fonte
1

Eu ouvi um ditado de um mentor:

"Um bom conselho vem com uma razão por que para que você saiba quando não é mais um bom conselho." Assim, nos termos do livro, um livro que explica por que fazer X por Y permitirá que você saiba quando esse conselho não é mais válido. Um livro "sempre faça isso, apenas faça", como alguns dos cursos intensivos na linguagem X não é tão bom.

Eu vi um chamado "learn unix in 24 hours", bem o livro tinha cerca de 8cm de espessura, duvido que muitas pessoas pudessem ler todas as páginas em 24 horas:)

Lembre-se de que o que está em voga hoje pode ser ridicularizado amanhã. Todos os itens a seguir foram considerados mainstream (em voga ontem), mas agora não são:

  • Ir para
  • Saída única de entrada única
  • notação húngara
  • abordagem em cascata

E há algumas coisas que antes eram completamente anátemas, mas agora são aceitas:

  • Recursão como uma ferramenta para resolver problemas (radical no início do BASIC dias)
  • Alocando memória em tempo de execução com malloc / new
  • Uso do STL C ++
  • Linguagens coletadas por lixo para sistemas em tempo real

Saiba por que, e você saberá quando suposições antigas foram substituídas por uma nova realidade, e também o conselho.

    
por 15.12.2011 / 05:13
fonte