¿Hay una fecha de caducidad para los libros de programación bien considerados, pero antiguos? [cerrado]

51

Después de leer a pregunta acerca de los libros que todo programador debería leer , me pregunto si lo siguiente debería considerarse obsoleto:

Todos estos libros parecen muy viejos. ¿No hay una diferencia entre la computación moderna y lo que era actual cuando se escribieron esos libros?

Por ejemplo, mi profesor de 61 años explica las cosas muy bien, pero se olvida de tener en cuenta todo lo que se ha hecho desde que comenzó a enseñar hace 25 años y ahora.

¿No es lo mismo cierto para esos libros? ¿No hay más libros modernos que enseñan principios y tecnologías que estén más cerca de la práctica actual? ¿O los considera útiles y relevantes incluso hoy?

    
pregunta Olivier Pons 23.05.2017 - 14:40

18 respuestas

92

Estos libros tratan sobre los principios del desarrollo. Estos principios son, por naturaleza, agnósticos del lenguaje y, para algunos, incluso agnósticos del paradigma (OOP, programación funcional, lenguajes imperativos).

Explican la teoría y las buenas formas de desarrollo porque, al final, el software siempre trata de obtener datos, procesarlos y luego devolverlos. Facebook, Twitter, 3D, proceso por lotes de contabilidad, gestión del tráfico ferroviario, lanzamiento de cohetes, etc.

Libros que son sobre un idioma, como "How to learn XXXXX in YY days" , donde XXXXX es un idioma e YY es un número que eventualmente (y en ocasiones muy rápidamente) se volverá obsoleto porque, por naturaleza, se trata de cosas que evolucionan. , o ser reemplazado y quedar desactualizado.

Code Complete , del increíble Steve McConnell, es quizás el libro que me hizo darme cuenta de esto. Y el Programador Pragmático cambió totalmente la visión que tenía del desarrollo de software. Al leer estos libros, te das cuenta de que el 95% del problema al que te enfrentas todos los días ya se resolvió, y que el 95% de nosotros aún reinventamos la rueda.

La llamada "Nube" no es el futuro del desarrollo de software, es una forma de usar software desarrollado.

No caigas en la trampa de las palabras de moda / bullshit, concéntrate en cómo puedes mejorar tus habilidades de artesano de software.

Céntrese en aprender de lo que otros espíritus brillantes han inventado y aprendido antes que nosotros, porque es la única forma de convertirse en un desarrollador exitoso.

    
respondido por el Clement Herreman 13.12.2011 - 02:30
80
  

Todos esos libros parecen muy, muy, muy viejos ".

Psicología-Programación por computadora (1971) - Con un millón de veces más programadores que en 1970, la psicología La forma en que diseñan los programas y los errores que cometen y cómo evitarlos es más importante que nunca.

Herramientas de software (1976) - Con la web como una colección de marcos, utilidades, scripts y complementos - las ideas en Herramientas de software nunca han sido más relevantes.

EDITAR: Para abordar la pregunta general de: ¿son relevantes los libros de programación antiguos?

Los principios generales de la ingeniería de software no han cambiado mucho, hay nuevas tecnologías OO, TDD, etc. Pero, en general, los usuarios y los problemas no han cambiado, y pensar en cómo dividir un problema es lo mismo ahora como siempre fue.

Estos libros antiguos fueron escritos generalmente por expertos en el campo. Muchos de los libros de programación modernos están dirigidos a apresurar un tope de puerta de 2000 páginas para la última palabra de moda mientras está vigente.

Los libros sobre idiomas y tecnologías que ya no se usan probablemente no sean relevantes, no hay ningún manual de ensamblador Vax en la lista. Pero 'C' todavía se usa mucho y 'El lenguaje de programación C' no solo es el mejor libro sobre 'C', es un modelo de cómo escribir un tutorial conciso y una referencia a su idioma.

¿Hay nuevos algoritmos? Sí. Pero todos los algoritmos antiguos siguen siendo relevantes y la mayoría de los nuevos están en áreas oscuras que es poco probable que se encuentren. Nadie ha ideado un mejor tipo o FFT recientemente. Aunque otras personas han intentado explicarlas mejor, no hay razón para que los libros de Algoritmos de este año sean mejores que los CLRS.

ps. Tu nuevo y genial iWhatsit ejecuta BSD, desarrollado en 1977. ¡Ahora, chicos, salgan de mi jardín!

    
respondido por el Martin Beckett 13.12.2011 - 23:32
28
  

Todos esos libros parecen muy, muy, muy viejos. ¿No crees que hay una diferencia entre hoy en día y cuando se escribieron esos libros?

En mi humilde opinión no es una sorpresa que los libros muy buenos se mantengan populares durante décadas, eso demuestra lo buenos que son. Pero creo que puedo decirle algo para cada uno de los candidatos que enumeró:

Code complete: 2nd edition = may, 2004

En realidad, la primera edición de "Code complete" fue de 1993, por lo que esta es realmente una "clásica". Se trata del estilo de codificación básico, utilizando ejemplos que se aplican a casi todos los lenguajes de programación de la familia C, que contiene los lenguajes más populares en la actualidad (C / C ++ / Java / C # / Objective-C / D / ...). Así que sí, este libro está actualizado.

Introduction to algorithms (Cormen, Leiserson, Rivest, Stein)

Bueno, en realidad no leí ese libro (mi libro de texto de algoritmos era de "Sedgewick"), pero los algoritmos de aprendizaje y la construcción de algoritmos son realmente agnósticos. Por supuesto, este oficio está subestimando algo en los últimos años, ya que hoy en día se encuentran muchos algoritmos básicos en las bibliotecas estándar, pero en mi humilde opinión, todo programador profesional debería tener algún conocimiento básico en este campo.

The Pragmatic Programmer

Este es un muy buen libro sobre la programación como artesanía. Lenguaje agnóstico y muy, muy actualizado, siempre que la programación sea realizada por los programadores como una tarea manual, utilizando editores de texto, IDE, control de versiones, etc.

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

Este es mi favorito personal, aunque (o quizás porque) el libro usa Scheme para enseñarle las diferencias entre los diferentes paradigmas de programación. No conozco ningún otro libro que se centre tanto en la creación de abstracciones. Y construir abstracciones es una habilidad clave que marca la diferencia entre un programador mediocre y uno de los mejores programadores: eso no ha cambiado las últimas décadas, así que, de verdad, este libro es atemporal. Además, los lenguajes funcionales y los elementos del lenguaje se han vuelto más populares recientemente, por lo que, en mi humilde opinión, las ideas presentadas en este libro tuvieron un renacimiento.

The C Programming Language

Bueno, este libro puede no ser tan atemporal como los otros cuatro. Pero como C es algo así como la "madre" de todos los lenguajes populares que mencioné anteriormente, puede ser una buena idea leer este libro, ya que no creo que haya algunos libros modernos en "C" que sean realmente mejores. Y si tiene que hacer una programación de mantenimiento del código C ++ que fue escrito por alguien que conocía C mejor que C ++, este libro es imprescindible.

Finalmente, pedías libros que tuvieran más en cuenta la "realidad actual", sin ser demasiado específicos de la tecnología. Entonces, ¿qué es la "realidad actual" y qué ha cambiado en el lado "no tecnológico"? Aquí hay algunos puntos de la última década, sin decir que esta lista está completa o que tiene las prioridades correctas.

  1. Existe más código heredado (especialmente más código heredado no solo en Fortran y Cobol, sino también en C ++ y Java).
  2. Las pruebas unitarias y TDD se han vuelto más favoritas.
  3. Hay mucho más código de código abierto disponible.
  4. OO ha recibido más y más críticos

(No enumero aquí nada sobre el desarrollo de aplicaciones o web, porque creo que esta tecnología es específica).

Existen buenos libros para los temas 1 y 2, especialmente " Clean Code ", que es de 2008, y " Trabajar de manera efectiva con el legado código " de 2004. ¿Esos son algunos de los libros" más nuevos "que está buscando?

    
respondido por el Doc Brown 23.05.2017 - 14:40
13

De los que mencionó "Código completo", "El programador pragmático" y "SICP" han estado en mi lista de lecturas recomendadas para todos los nuevos desarrolladores que comienzan aquí en mi empresa y desean llegar a un nivel superior.

No están obsoletos ni mucho menos porque la ciencia fundamental en Informática no ha cambiado.

    
respondido por el Joris Timmermans 12.12.2011 - 17:54
10

No he leído todos esos libros, pero sí tengo Code Complete y The Pragmatic Programmer. Estos libros están lejos de ser obsoletos. Pueden tener un par de párrafos que están un poco oxidados, pero la mayoría del contenido sigue siendo relevante hoy en día.

El avance en Informática y Programación es un proceso evolutivo . Se están introduciendo nuevas abstracciones sobre las antiguas, pero estas cosas nuevas no necesariamente hacen que las viejas sean obsoletas.

Una analogía ... Ya sea que esté estudiando para ser un cirujano especialista en traumatismos o un cirujano que se especialice en el trasplante de corazón, todavía necesita saber cómo funciona el cuerpo humano, la química celular, los sistemas de órganos, cómo abrir el tórax y cómo detener rápidamente el sangrado si se produce, etc ... Solo porque inventaron equipos endoscópicos y técnicas menos invasivas, no significa que usted esté descolgado para aprender lo básico. Solo significa que tienes que aprender más.

    
respondido por el c_maker 12.12.2011 - 22:12
7

La "nube" no es un factor. La "nube" es en realidad mucho más antigua que la mayoría de los libros que enumeró. la mayoría de esos libros tratan sobre principios fundamentales, en realidad nunca cambian a menudo. Los marcos y las bibliotecas cambian todo el tiempo, pero la forma en que debe estructurar su código no cambia mucho. De manera similar, un puntero sigue siendo un puntero que no comienza a hacer cosas diferentes solo porque sí. El único libro específico de idioma que mencionaste es sobre C, en cuyo caso el libro antiguo es mucho más útil que cualquier otro nuevo, porque probablemente se escribió más cerca del período de tiempo en el que se desarrolló cualquier código C con el que estarías trabajando.

    
respondido por el Ryathal 12.12.2011 - 17:36
6

La lista que citaste, no están obsoletas. Un libro solo es obsoleto cuando el tema ha cambiado lo suficiente como para que no sean útiles. La naturaleza de la programación y el lenguaje C han cambiado muy poco desde la publicación

    
respondido por el Tom Squires 12.12.2011 - 17:41
6

Una de las cosas que debe tener en cuenta es que existen principios subyacentes que son esencialmente eternos, y las implementaciones que tienden a aparecer y desaparecer.

Los principios subyacentes son esencialmente toda la teoría aburrida de que la Informática tiende a pasar mucho tiempo y eso sigue siendo válido incluso si el mundo cambia a su alrededor. Esto, a diferencia de cosas como "Cómo usar Win32s en Windows 3.11" que es muy antiguo y obsoleto.

Para poner las cosas en perspectiva: el texto canónico sobre geometría tiene dos mil años. La mayoría de las matemáticas que se enseñan hasta el nivel universitario tienen al menos 300 años. La única razón por la que los libros de CS no son más antiguos es porque el campo aún es nuevo.

    
respondido por el user1249 12.12.2011 - 18:41
6

Algunos libros son atemporales porque discuten ideas que son tan fundamentales para la práctica del desarrollo de software que siempre se aplicarán.

Tomemos, por ejemplo, el Mythical Man Month , cuando estaba leyendo este libro, siempre olvidé que era escrito en 1975. Cuando aparece en la referencia ocasional sobre IBM System 360, siempre me molesta porque ese es el único contenido que data del libro. Todo lo demás se aplica aquí y ahora. Todavía conservo mi copia de Patrones de Arquitectura de Aplicaciones Empresariales de Martin Fowler, ahora tiene 9 años pero nuevamente es atemporal y sigue siendo aplicable al trabajo que hago hoy.

Mi libro favorito en este momento es Modelado de Java en color con UML (1999) de Peter Coad (1999) a pesar de que m a C # desarrollador y evito UML, porque las técnicas y los conceptos me hacen un mejor programador.

Nos gustaría aprender de la primera generación de desarrolladores porque han pisado el terreno en el que estamos caminando en este momento y su sabiduría adquirida puede ayudarnos a comenzar lo que estamos haciendo / aprendiendo hoy. .

    
respondido por el Michael Brown 12.12.2011 - 20:27
5

Los principios básicos del software no han cambiado en los últimos 20 años. Una pila, un árbol y una lista enlazada siguen funcionando igual que antes. "XOR" todavía significa lo mismo. Un byte todavía tiene 8 bits.

¿Estás sugiriendo seriamente que el "desarrollo multiplataforma" es una idea nueva? ¿Por qué crees que se inventó C?

"Cloud" es una palabra de moda de marketing. Solía significar algo específico, pero se ha degradado por el uso excesivo. Hoy en día, cada vez que tiene algo que habla con un servidor remoto a través de una red, los profesionales de marketing le pegan la etiqueta de "nube". Así que realmente no tiene sentido hablar de eso, porque es una palabra sin sentido.

No conozco a tu profesor de 61 años, así que no puedo responder por él. Por otro lado, usted claramente no es tan inteligente como cree que es. Escucha al profesor, es posible que aprendas algo.

"No llegas a ser viejo por no ser un tonto. Muchos jóvenes sabios, están muertos como un hijo de puta". - Richard Pryor

    
respondido por el Mike Baranczak 12.12.2011 - 19:21
4

Aquí hay más libros muy viejos y obsoletos:

  • El arte de la programación de computadoras, vol. 1-3 por D. Knuth. Éstas eran Publicado entre 1968 y 1981! No estamos utilizando tubos de vacío. más gente Todo en estos libros es escaso. Dónde está el discusión sobre Python y Ruby?

  • Computadoras e intratabilidad: una guía para la teoría de NP-Completeness por M. R. Garey y D. S. Johnson, 1979. ¡Súper cojo! Todos estos problemas se han resuelto ya, probablemente.

Si un libro no se escribió en los últimos tres años con enfoque en Python, entonces no vale la pena leerlo.

    
respondido por el stackoverflowuser2010 12.12.2011 - 19:09
3

Esos libros no son obsoletos, esos libros son clásicos.

Para citar Kaplansky , " pasa algo de tiempo todos los días aprendiendo algo nuevo. es una separación del problema en el que está trabajando actualmente (recuerde que la separación puede ser temporal), y lea los maestros . "

    
respondido por el Francesco 12.12.2011 - 19:29
3

Sé lo que quieres decir, cuando tenemos avances (LINQ viene a la mente) que cambian la legibilidad y el uso del código, pero simplemente porque estos libros son antiguos, no significa que no ofrezcan grandes lecciones para el lector.

Si bien los lenguajes de programación que utilizan pueden haber pasado de moda, la teoría detrás de los lenguajes de programación aún hoy sigue vigente. La mayoría de estos libros hacen un punto para cubrir lo básico muy bien, y lo básico no ha cambiado mucho.

    
respondido por el Onion-Knight 31.01.2012 - 15:26
1

La industria de la informática es todavía muy joven. Los libros escritos hace 30 años considero que todavía son valiosos y necesarios para una comprensión completa. Los conceptos abstractos a veces toman un tiempo para digerir.

    
respondido por el SoftwareCarpenter 12.12.2011 - 20:24
1

Algunas partes menores están obsoletas en todos esos libros, pero el 99% sigue siendo excelente.

Los libros de algoritmos envejecerán lentamente. Los algoritmos son matemáticas, y las matemáticas no están cambiando rápidamente. Claro, todavía hay investigaciones sobre nuevos algoritmos que son superiores en ciertas circunstancias (por ejemplo, algoritmo de Furer ( 2007) Schonhage-Strassen para multiplicar 40000+ dígitos números largos juntos), pero la introducción que necesita para aprender lo básico (dividir y conquistar / Programación dinámica / Programación lineal / etc) para que pueda aprender a pensar con sensatez sobre los algoritmos.

El aprendizaje del estándar C de K & R sigue siendo la mejor fuente; aunque no estoy seguro de confiar en sus secciones sobre cómo configurar su entorno.

SICP es un libro maravilloso y enseña los fundamentos de la CS moderna a través de la enseñanza de lisp, que es un lenguaje maravilloso. Sin embargo, lisp posiblemente no sea el lenguaje más útil en la actualidad; aunque otros argumentarán que su arma secreta es lisp y que aprender idiomas como java o python primero hace que los programadores sean muy malos y que nunca necesiten aprender a implementar listas o enlaces vinculados o de notación big-O y terminen haciendo cosas muy ineficientes.

Algunos de Programador Pragmático o Código Completo son menos relevantes, especialmente si está programando en lenguajes más nuevos (por ejemplo, python / ruby / C ++ 11), ya que a menudo se enfoca en cómo hacer algo en C o ofrece soluciones recomendadas utilizando las mejores herramientas disponibles en ese momento (como CVS / RCS para el control de versiones en lugar de una herramienta moderna como git / bzr / hg / svn). Pero sigue siendo bueno pensar en cómo el control de versiones es una necesidad y cómo debe ser transparente y autodocumentado, y pasar por la lógica de por qué es una necesidad absoluta.

O las recomendaciones de PP contra IDE para el editor básico de Unix + herramientas de Unix, por no decir que no debe aprender a usar find / awk / localizar / grep / sed, pero un buen IDE a menudo puede ahorrar mucho tiempo. Por ejemplo, emacs puede hacer resaltado de sintaxis o completar código simple; pero diga que un buen IDE dirá: proporcione información sobre herramientas con declaraciones de funciones cuando las escriba, o analice el código y marque las variables no utilizadas, facilitando el colapso de las secciones del código, etc.

    
respondido por el dr jimbob 12.12.2011 - 21:40
1
  

¿No hay una diferencia entre la computación moderna y la actualidad cuando se escribieron esos libros? ¿Crees que cambia lo que deberíamos aprender? ¿No deberíamos tener en cuenta la evolución de los últimos 20 años?

Sí, sí y sí.

Eso no hace que esos libros sean obsoletos. "Computación moderna" es un término increíblemente amplio. Sin embargo, incluye la programación en C, por lo que "El lenguaje de programación C" sigue siendo un libro relevante. incluye algoritmos, por lo que "Introducción a los algoritmos" sigue siendo un libro relevante. Y así sucesivamente.

  

¿Debería el énfasis actual en el desarrollo multiplataforma el desarrollo multiplataforma (ver phonegap) cambiar lo que aprendemos hoy?

La mayoría de las aplicaciones en la App Store (para usar la plataforma móvil más popular como ejemplo) están escritas en Objective C, un lenguaje de principios de los 80 que es un superconjunto de C. Así que, de nuevo, C sigue siendo relevante.

  

¿Crees que la "nube" es una moda o el futuro?

Es nuestro presente.

  

Cuando los estudiantes salen de la universidad, se supone que son desarrolladores reales y que pueden trabajar de inmediato

¿Pero qué significa eso?

Hay demasiados idiomas, API, marcos, plataformas, herramientas, estrategias de colaboración, etc. para que la escuela te prepare para un trabajo específico . La escuela solo puede sentar las bases, proporcionándole un modelo de trabajo básico sobre cómo funciona la máquina, sobre algoritmos, estructuras de datos, construcción de códigos, estrategias de descomposición, algunas herramientas, etc.

Un "desarrollador real" no es alguien que lo sabe todo, es alguien con capacidad para este tipo de trabajo, que tiene una base en la teoría y la práctica, y que sabe cómo aprender , porque Tu educación nunca termina.

    
respondido por el Mud 12.12.2011 - 23:17
1

Ok, entonces voy a ofrecer una respuesta que es mucho más teórica. Estoy de acuerdo con todos ustedes que respondieron, bastante obvio en mi opinión, estos libros son la base de lo que hacemos como programadores y todos estos nuevos marcos se basan en la misma línea de pilares antiguos.

Aquí están mis dos centavos, no realmente míos, lo aprendí de San Aquino y de Aristóteles antes que él.

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

La mecánica de una computadora no ha cambiado desde von-neumann. De manera similar, los detalles que necesita para aprender a ser un gran programador serán los mismos hasta que el modelo de von-neumann quede obsoleto. Asamblea, es el lenguaje de las computadoras ... aprende, no hay excusas.

C es el idioma nativo de Windows y Unix. Apréndelo o encuentra un nuevo oficio. Si eres uno de esos tipos que fueron directos a JAVA o C #, puedes ser un buen programador, pero serías un programador mucho mejor si aprendieras el período C--.

Los algoritmos y las estructuras de datos son la base de los programas de computadora, apréndalos.

Todo lo demás es una abstracción de estas disciplinas centrales. Las abstracciones son maravillosas cuando se usan correctamente. En serio, uso C # para el 75% de todos mis proyectos. Sin embargo, te vuelven estúpido si no te tomas el tiempo para entender cómo funcionan y cómo funcionar sin ellos. Pasará un tiempo interminable haciendo que el software pase a través del proverbial agujero cuadrado cuando haya enfoques mucho mejores y habrá errores que podrían haberse evitado. El desarrollo de software es un oficio que se debe dominar, y al final del día, las herramientas rara vez cambian. Es por eso que estos libros son tan importantes.

Todos estos programadores solo de JAVA y C #, tsk, ¡apuesto a que la mayoría de ellos nunca han visto un episodio de Star Trek!

    
respondido por el Jonathan Henson 13.12.2011 - 07:40
1

Escuché un dicho de un mentor:

"Un buen consejo viene con una razón por qué para que sepa cuándo ya no es un buen consejo". Entonces, en los términos del libro, un libro que explica por qué hacer X sobre Y te permitirá saber cuándo ese consejo ya no es válido. Un libro de "siempre haga esto, simplemente hágalo", como algunos de los cursos intensivos en el lenguaje X, no es tan bueno.

Vi uno llamado "aprender unix en 24 horas", bueno, el libro tenía aproximadamente 8 cm de grosor, dudo que muchas personas puedan leer cada página en 24 horas :)

Recuerda que lo que está de moda hoy se puede burlar de mañana. Todas las siguientes fueron una vez consideradas como la corriente principal (en voga ayer) pero ahora no lo son:

  • Goto
  • Entrada única salida única
  • notación húngara
  • enfoque de cascada

Y hay algunas cosas que antes eran completamente anatemas pero ahora se aceptan:

  • La recursión como una herramienta para resolver problemas (radical en los principios básicos días)
  • Asignar memoria en tiempo de ejecución con malloc / new
  • Uso de C ++ STL
  • Idiomas de recolección de basura para sistemas en tiempo real

Sepa por qué, y sabrá cuándo las suposiciones antiguas han sido reemplazadas por una nueva realidad, y el consejo también debería hacerlo.

    
respondido por el anon 15.12.2011 - 05:13

Lea otras preguntas en las etiquetas