Depois de ler uma pergunta sobre livros que todo programador deve ler , pergunto-me se o seguinte deve ser considerado obsoleto:
- Código completo : 1ª edição em 1993; 2ª edição em maio de 2004
- Introdução aos algoritmos (Cormen, Leiserson, Rivest, Stein) : 1ª edição em 1990; 2ª edição em setembro de 2001; 3ª edição em 2009
- Programador pragmático : outubro de 1999
- Estrutura e Interpretação de Programas de Computador : 1ª edição em 1984; 2ª edição em setembro de 1996
- A linguagem de programação C : 1ª edição em 1978; 2ª edição em abril de 1988
Todos esses livros parecem muito antigos. Não há diferença entre a computação moderna e o que era atual quando esses livros foram escritos?
Por exemplo, meu professor de 61 anos explica as coisas muito bem, mas esquece de levar em consideração tudo o que foi feito entre quando ele começou a ensinar há 25 anos.
Não é o mesmo para aqueles livros? Não existem mais livros modernos que ensinam princípios e tecnologias mais próximos da prática atual? Ou você os considera úteis e relevantes até hoje?
books
software-obsolescence
Olivier Pons
fonte
fonte
Respostas:
Estes livros são sobre os princípios do desenvolvimento. Esses princípios são, por natureza, agnósticos de linguagem e, para alguns, até agnósticos de paradigma (POO, 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 depois devolvê-los. Facebook, Twitter, 3D, processo em lote de contabilidade, gerenciamento de tráfego ferroviário, lançamento de foguetes, etc.
Livros sobre uma linguagem, como
"How to learn XXXXX in YY days"
, onde XXXXX é uma linguagem 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 são substituídas e se tornam desatualizado.Code Complete , do incrível 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 enfrenta todos os dias já foi resolvido e que 95% de nós ainda está reinventando a roda.
A chamada "nuvem" não é o futuro do desenvolvimento de software, é uma maneira de usar software desenvolvido.
Não caia na armadilha de chavões exageradas / besteiras, concentre-se 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.
fonte
"Learn Javascript in 15 seconds"
e apenas meio bazilhão de"Learn PHP on 17 secsonds"
Psicologia-Programação de Computadores (1971) - Com um milhão de vezes mais programadores do que em 1970, a psicologia de como eles projetam programas e que 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 estrutura, utilitários, scripts e plugins - as idéias nas Ferramentas de Software nunca foram tão relevantes.
EDIT: Para abordar a questão geral de - os livros de programação antigos são relevantes?
Os princípios gerais da engenharia de software não mudaram muito, 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. sempre foi.
Esses livros mais antigos geralmente eram escritos por especialistas da área. Muitos livros de programação modernos têm como objetivo apressar-se em um batente de porta de 2000 páginas para obter a última palavra da moda enquanto ela ainda está atual.
Os livros sobre idiomas e tecnologias que não são mais usados provavelmente não são relevantes - nenhum manual do Vax assembler está na lista. Mas 'C' ainda é muito usado e 'O idioma de programação C' não é apenas o melhor livro sobre 'C'; é um modelo de como escrever um tutorial conciso e uma referência à sua linguagem.
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ê encontre. Ninguém apresentou uma classificação 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 o CLRS.
ps. Seu novo e legal iWhatsit roda o BSD, desenvolvido em 1977. Agora vocês caem do meu gramado!
fonte
IMHO não é uma surpresa que livros muito bons permaneçam populares por décadas - isso mostra como eles são bons. Mas acho que posso dizer uma coisa para cada um dos candidatos que você listou:
Na verdade, a primeira edição de "Code complete" foi de 1993, então esta é realmente um "clássico". É sobre o 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 # / Objective-C / D / ...). Então, sim, este livro está atualizado.
Bem, na verdade eu não li esse livro (meu livro de algoritmos era de "Sedgewick"), mas os algoritmos de aprendizado e a construção de algoritmos são realmente independentes da linguagem. Obviamente, esse ofício está ficando subestimado nos últimos anos, pois hoje em dia você encontra muitos algoritmos básicos em bibliotecas padrão, mas IMHO todo programador profissional deve ter algum conhecimento básico nesse campo.
Este é um livro muito bom sobre programação como artesanato. Linguagem independente e muito, muito atualizada, desde que a programação seja feita pelos programadores como uma tarefa manual, usando editores de texto, IDEs, controle de versão etc.
Esse é o meu favorito, mesmo que (ou talvez porque) o livro use Scheme para ensinar as diferenças entre diferentes paradigmas de programação. Não conheço nenhum outro livro que tenha um foco tão forte na construção de abstrações. E criar abstrações é uma habilidade essencial que faz a diferença entre um programador medíocre e um programador de topo - que não mudou nas últimas décadas; portanto, realmente, este livro é atemporal. Além disso, linguagens funcionais e elementos de linguagem tornaram-se mais populares recentemente, então IMHO as idéias apresentadas neste livro renasceram.
Bem, este livro pode não ser tão atemporal quanto os outros quatro. Mas como C é algo como a "mãe" de todos os idiomas populares que listei acima, também pode ser uma boa ideia ler este livro - acho que não existem alguns livros "C" modernos que sejam realmente melhores. E se você tiver que fazer a programação de manutenção do código C ++ que foi escrito por alguém que conhecia C melhor que C ++, este livro é obrigatório.
Por fim, você estava pedindo livros que levassem mais em conta a "realidade atual", sem ser muito específico da 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 com os prioridades certos.
(Não listo aqui nada sobre o desenvolvimento da Web ou de aplicativos, porque 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 código legado" de 2004. Talvez esses sejam alguns dos livros "mais recentes" que você está procurando?
fonte
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 desejam chegar a um nível superior.
Eles não são obsoletos a longo prazo, porque a ciência fundamental em Ciência da Computação não mudou.
fonte
Não li todos esses livros, mas possuo o Code Complete e o Pragmatic Programmer. Esses livros estão longe de serem obsoletos. Eles podem ter alguns parágrafos um pouco enferrujados, mas a maior parte do conteúdo ainda é relevante hoje.
O avanço em Ciência da Computação e Programação é um processo evolutivo . Novas abstrações estão sendo introduzidas sobre as antigas, mas essas coisas novas não tornam obsoletas as antigas.
Uma analogia ... Se você está estudando para ser um cirurgião de trauma ou um cirurgião especializado em transplante de coração, ainda precisa saber como o corpo humano funciona, química celular, sistemas orgânicos, como abrir o peito e como rapidamente pare de sangrar 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.
fonte
A "nuvem" não é um fator. A "nuvem" é realmente muito mais antiga que a maioria dos livros que você listou. a maioria desses livros trata de princípios fundamentais, eles realmente nunca 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 e não começa a fazer coisas diferentes apenas porque. O único livro específico do idioma que você listou é sobre C; nesse caso, esse livro antigo é muito mais útil do que qualquer coisa nova, porque provavelmente foi escrito mais perto do período em que qualquer código C com o qual você trabalharia foi desenvolvido.
fonte
A lista que você citou, não, eles não são obsoletos. Um livro é obsoleto apenas quando o assunto mudou o suficiente para que não seja útil. A natureza da programação e a linguagem C mudaram muito pouco desde a publicação
fonte
Uma das coisas que você precisa entender é 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 em que a Ciência da Computação tende a gastar muito tempo, e isso continua sendo válido, mesmo que o mundo mude ao seu redor. Isso por 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 geometria tem dois mil anos. A maioria das aulas de matemática ensinadas até o nível superior tem pelo menos 300 anos. A única razão pela qual os livros de CS não são mais antigos é porque o campo ainda é novo.
fonte
Alguns livros são atemporais porque discutem idéias que são tão fundamentais para a prática de desenvolvimento de software que sempre serão aplicados.
Tomemos, por exemplo, o Mythical Man Month , quando eu estava lendo este livro, esqueci que ele foi escrito em 1975. Quando ele esparrama alguma referência ocasional sobre o IBM System 360, ele sempre me chama a atenção, porque esse é o único conteúdo que data o livro. Tudo o resto se aplica aqui e agora. Ainda mantenho minha cópia dos Patterns of Enterprise Application Architecture de Martin Fowler , agora com 9 anos, mas novamente atemporal e ainda aplicável ao trabalho que faço hoje.
Meu livro favorito agora é o Java Modeling in Color with UML de Peter Coad (1999), embora eu seja um desenvolvedor de C # e evite a UML, porque as técnicas e conceitos me tornam um codificador melhor.
Faríamos bem em aprender com a primeira geração de desenvolvedores, porque eles trilharam o caminho em que estamos caminhando agora e sua sabedoria conquistada pode nos ajudar a dar um salto inicial no que estamos fazendo / aprendendo hoje.
fonte
Os princípios básicos do software não mudaram nos últimos 20 anos. Uma pilha, uma árvore e uma lista vinculada ainda funcionam da mesma forma que na época. "XOR" ainda significa a mesma coisa. Um byte ainda possui 8 bits.
Você está sugerindo seriamente que o "desenvolvimento multiplataforma" é uma nova idéia? Por que você acha que C foi inventado?
"Cloud" é um chavão de marketing. Costumava significar algo específico, mas foi degradado pelo uso excessivo. Hoje em dia, sempre que você tem algo que fala com um servidor remoto por uma rede, os profissionais de marketing colam o rótulo "nuvem" nele. Portanto, não há realmente sentido em falar sobre isso, porque é uma palavra sem sentido.
Eu não conheço o seu professor de 61 anos, então não posso garantir isso. Você, por outro lado, claramente não é tão inteligente quanto pensa. Escute o professor, é possível que você aprenda alguma coisa.
"Você não envelhece por não ser tolo. Muitos jovens sábios, eles morreram como um filho da puta." - Richard Pryor
fonte
Aqui estão alguns livros mais antigos e desatualizados:
A arte da programação de computadores, vol. 1-3 por D. Knuth. Estes foram publicados entre 1968 e 1981! Não estamos mais usando tubos de vácuo, pessoal! Tudo nestes livros é coxo. Onde está a discussão sobre Python e Ruby?
Computadores e Intratabilidade: Um Guia para a Teoria da Completude NP por MR Garey e DS Johnson, 1979. Super coxo! Todos esses problemas já foram resolvidos agora, provavelmente.
Se um livro não foi escrito nos últimos três anos com foco no Python, não vale a pena ler.
fonte
Esses livros não são obsoletos, são clássicos.
Para citar Kaplansky , " dedique algum tempo todos os dias aprendendo algo novo que não se relaciona com o problema no qual você está trabalhando atualmente (lembre-se de que a disjunção pode ser temporária) e leia os mestres " .
fonte
Sei o que você quer dizer, quando temos avanços (o LINQ vem à mente) que alteram a legibilidade e o 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.
Enquanto as linguagens de programação que eles usam podem ter caído em voga, a teoria por trás das linguagens de programação ainda soa verdadeira hoje. A maioria desses livros faz questão de abordar muito bem o básico, e o básico não mudou muito.
fonte
A indústria da ciência da computação ainda é muito jovem. Livros escritos há 30 anos, considero ainda valiosos e necessários para um entendimento completo. Os conceitos abstratos às vezes levam algum tempo para serem digeridos.
fonte
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áticos, e a matemática não está mudando rapidamente. Certamente, ainda há pesquisas sobre novos algoritmos que são superiores em determinadas circunstâncias (por exemplo, o algoritmo de Furer (2007) Schonhage-Strassen para multiplicar mais de 40000 + números longos), mas a introdução é necessária para aprender o básico (dividir e conquistar) / Programação dinâmica / Programação linear / etc) para que você possa aprender a pensar de maneira sensata sobre algoritmos.
O padrão de aprendizagem C da K&R ainda é a melhor fonte; embora não tenha certeza se confiaria nas seções deles sobre como configurar seu ambiente.
O SICP é um livro maravilhoso e ensina os fundamentos do CS moderno através do ensino do cisco, que é uma linguagem maravilhosa. No entanto, o lisp não é, sem dúvida, o idioma mais útil atualmente; embora outros argumentem que o lisp é sua arma secreta e que o aprendizado de linguagens como java ou python faz com que os programadores sejam muito ruins, que nunca precisam aprender a implementar listas ou matrizes vinculadas ou de classificação ou notação de grande O e acabam fazendo coisas muito ineficientes.
Alguns programadores de código completo ou pragmático são menos relevantes, especialmente se você estiver programando em linguagens mais recentes (por exemplo, python / ruby / C ++ 11), já que geralmente é focado em como fazer algo em C ou fornece soluções recomendadas usando o melhor ferramentas disponíveis no momento (como CVS / RCS para controle de versão, em vez de uma ferramenta moderna como git / bzr / hg / svn). Mas ainda é bom pensar em como o controle de versão é uma obrigação e como ele precisa ser contínuo e auto-documentado e seguir a lógica do porquê é uma necessidade absoluta.
Ou as recomendações da PP contra IDEs para editor básico de unix + ferramentas unix - para não dizer que você não deve aprender a usar find / awk / localize / grep / sed, mas um bom IDE geralmente pode economizar muito tempo. Por exemplo, o emacs pode destacar a sintaxe ou completar o código com simplicidade; mas digamos que um bom IDE dirá fornecer dicas de ferramentas com declarações de função quando você as digitar ou analisar o código e marcar variáveis não utilizadas, facilitar o recolhimento de seções de código etc.
fonte
Sim sim e sim.
Isso não torna esses livros obsoletos. "Computação moderna" é um termo incrivelmente amplo. No entanto, inclui programação C, portanto, "A linguagem de programação C" ainda é um livro relevante. Ele inclui algoritmos, de modo que "Introdução aos algoritmos" ainda é um livro relevante. E assim por diante.
A maioria dos aplicativos na App Store (para usar a plataforma móvel mais popular como exemplo) é escrita no Objective C, um idioma do início dos anos 80 que é um superconjunto de C. Então, novamente, C ainda é relevante.
É o nosso presente.
Mas o que isso significa?
Existem muitos idiomas, APIs, estruturas, plataformas, ferramentas, estratégias de colaboração etc. para a escola para prepará-lo para um trabalho específico . A escola só pode estabelecer as bases, fornecendo um modelo de trabalho básico 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 de verdade" 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 que sabe aprender , porque sua educação nunca termina.
fonte
Ok, então eu vou oferecer uma resposta que é muito mais teórica. Concordo com todos vocês que responderam ao, bastante óbvio na minha opinião, esses livros são a base do que nós, como programadores, fazemos e todas essas novas estruturas são construídas sobre a mesma linha de pilares antigos.
Aqui estão meus dois centavos - não meus, eu aprendi com São Tomás de Aquino e com Aristóteles antes dele.
A mecânica de um computador não mudou desde von-neumann. Da mesma forma, os detalhes que você precisa aprender para ser um grande 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 negócio. Se você é um desses caras que foi direto para JAVA ou C #, pode ser um bom programador, mas seria um programador muito melhor se aprendesse o período C--.
Algoritmos e estruturas de dados são a base dos programas de computador, aprenda-os.
Tudo o resto é uma abstração dessas disciplinas essenciais. As abstrações são maravilhosas quando usadas corretamente - sério, eu uso o C # para 75% de todos os meus projetos. No entanto, eles o tornam estúpido se você não tiver tempo para entender como eles funcionam e como funcionar sem eles. Você passará um tempo interminável criando software para se encaixar no proverbial buraco quadrado quando houver abordagens muito melhores e haverá bugs que poderiam ter sido evitados. Desenvolvimento de Software é um ofício que deve ser dominado e, no final do dia, as ferramentas raramente mudam. É por isso que esses livros são tão importantes.
Todos esses programadores somente em JAVA e C #, tsk, aposto que a maioria deles nunca viu um episódio de Star Trek!
fonte
Eu ouvi um ditado de um mentor:
"Bom conselho vem com uma razão por que para que você saiba quando já não é um bom conselho." Assim, nos termos do livro, um livro que explica por que fazer X sobre Y informará quando esse conselho não for mais válido. Um livro "sempre faça isso, apenas faça", como parte do curso intensivo na linguagem X, não é tão bom.
Eu vi um chamado "aprender unix em 24 horas", bem, o livro tinha cerca de 8cm de espessura, duvido que muitas pessoas possam 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 já foram considerados mainstream (em voga ontem), mas agora não são:
E há algumas coisas que antes eram completamente anátemas, mas agora são aceitas:
Saiba o porquê e você saberá quando antigas suposições foram substituídas por uma nova realidade, e o conselho também deve.
fonte