Después de leer una pregunta sobre libros que todo programador debería leer , me pregunto si lo siguiente debería considerarse obsoleto:
- Código completo : primera edición en 1993; 2a edición en mayo de 2004
- Introducción a los algoritmos (Cormen, Leiserson, Rivest, Stein) : primera edición en 1990; 2ª edición en septiembre de 2001; 3ra edición en 2009
- El programador pragmático : octubre de 1999
- Estructura e interpretación de los programas informáticos : primera edición en 1984; 2a edición en septiembre de 1996
- El lenguaje de programación C : primera edición en 1978; 2a edición en abril de 1988
Todos estos libros parecen muy viejos. ¿No hay una diferencia entre la informática moderna y lo que era actual cuando se escribieron esos libros?
Por ejemplo, mi maestra de 61 años explica muy bien las cosas, pero olvida tener en cuenta todo lo que se hizo entre cuando 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ñen principios y tecnologías que estén más cerca de la práctica actual? ¿O los considera útiles y relevantes incluso hoy?
books
software-obsolescence
Olivier Pons
fuente
fuente
Respuestas:
Estos libros tratan sobre los principios del desarrollo. Estos principios son, por naturaleza, independientes del lenguaje, y para algunos incluso independientes del paradigma (POO, programación funcional, lenguajes imperativos).
Explican la teoría y las buenas formas del desarrollo porque, al final, el software siempre se trata de obtener datos, procesarlos y luego enviarlos de vuelta. Facebook, Twitter, 3D, proceso de contabilidad por lotes, gestión del tráfico ferroviario, lanzamiento de cohetes, etc.
Libros que tratan sobre un idioma, como
"How to learn XXXXX in YY days"
, donde XXXXX es un idioma y YY es un número que eventualmente (y a veces muy rápidamente) se volverá obsoleto, porque, por naturaleza, se trata de cosas que evolucionan, o son reemplazadas y se vuelven anticuado.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 tales libros, te das cuenta de que el 95% del problema que enfrentas todos los días ya se ha resuelto, y que el 95% de nosotros todavía estamos reinventando la rueda.
La llamada "Nube" no es el futuro del desarrollo de software, es una forma de usar software desarrollado.
No caiga en la trampa de las palabras de moda exageradas / tonterías, concéntrese en cómo puede mejorar sus habilidades de artesano de software.
Concé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 consumado.
fuente
"Learn Javascript in 15 seconds"
y solo medio bazillion de"Learn PHP on 17 secsonds"
Psychology-Computer-Programming (1971) - Con un millón de veces más programadores que en 1970, la psicología de cómo diseñan programas y qué errores cometen y cómo evitarlos es más importante que nunca.
Software Tools (1976): como la web es una colección de marcos, utilidades, scripts y complementos, las ideas de Software Tools nunca han sido tan relevantes.
EDITAR: Para abordar la cuestión general de: ¿son relevantes los viejos libros de programación?
Los principios generales de la ingeniería de software no han cambiado tanto, 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. Siempre fue.
Estos libros antiguos generalmente fueron escritos por expertos en el campo. Muchos libros de programación modernos tienen como objetivo apresurar una puerta de entrada de 2000 páginas para la última palabra de moda mientras aún 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 es solo el mejor libro sobre 'C', es un modelo de cómo escribir un tutorial conciso y una referencia a su lenguaje.
¿Hay nuevos algoritmos? Si. 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 encontrado un mejor tipo o FFT recientemente. Aunque otras personas han intentado explicarlos mejor, no hay razón para que los libros de Algoritmos de este año sean mejores que CLRS.
PD. Su nuevo y genial iWhatsit ejecuta BSD, desarrollado en 1977. ¡Ahora ustedes, niños, salgan de mi césped!
fuente
En mi humilde opinión, no es una sorpresa que muy buenos libros sigan siendo populares durante décadas, lo que demuestra lo buenos que son. Pero creo que puedo decirte algo para cada uno de los candidatos que enumeraste:
En realidad, la primera edición de "Code complete" fue de 1993, por lo que esta es realmente un "clásico". Se trata de un 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 / ...). Entonces sí, este libro está actualizado.
Bueno, en realidad no leí ese libro (mi libro de texto de algoritmos era de "Sedgewick"), pero el aprendizaje de algoritmos y construcción de algoritmos es realmente independiente del lenguaje. Por supuesto, este oficio se está subestimando en los últimos años, ya que hoy en día se encuentran muchos algoritmos básicos en bibliotecas estándar, pero en mi humilde opinión, cada programador profesional debería tener algunos conocimientos básicos en este campo.
Este es un libro muy bueno sobre la programación como un trabajo artesanal. Lenguaje agnóstico y muy, muy actualizado, siempre que los programadores realicen la programación como una tarea manual, utilizando editores de texto, IDE, control de versiones, etc.
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 tenga un enfoque tan fuerte en construir abstracciones. Y construir abstracciones es una habilidad clave que marca la diferencia entre un programador mediocre y un programador superior, que no ha cambiado en las últimas décadas, así que realmente, 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.
Bueno, este libro puede no ser tan atemporal como los otros cuatro. Pero dado que C es algo así como la "madre" de todos los lenguajes populares que mencioné anteriormente, puede ser una buena idea leer este libro, no creo que haya algunos libros modernos de "C" que sean realmente mejores. Y si tiene que hacer una programación de mantenimiento del código C ++ que fue escrita por alguien que conocía mejor a C que a C ++, entonces este libro es imprescindible.
Finalmente, estaba pidiendo libros que tengan más en cuenta la "realidad actual", sin ser demasiado específicos de la tecnología. Entonces, ¿cuál 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.
(No enumero aquí nada sobre desarrollo web o de aplicaciones, porque creo que esta tecnología es específica).
Existen buenos libros para los temas 1 y 2, especialmente "Código limpio" , que es de 2008, y "Trabajo eficaz con código heredado" de 2004. ¿Quizás esos son algunos de los libros "más nuevos" que está buscando?
fuente
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 quieren llegar a un nivel superior.
No son obsoletos ni mucho menos porque la ciencia fundamental en informática no ha cambiado.
fuente
No he leído todos esos libros, pero tengo Code Complete y The Pragmatic Programmer. Estos libros están lejos de ser obsoletos. Es posible que tengan un par de párrafos que están un poco oxidados, pero la mayor parte 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 viejas, pero estas cosas nuevas no necesariamente hacen que las viejas sean obsoletas.
Una analogía ... Ya sea que esté estudiando para ser un cirujano de trauma o un cirujano especializado en trasplante de corazón, aún necesita saber cómo funciona el cuerpo humano, la química celular, los sistemas de órganos, cómo abrir el cofre y cómo abrirlo rápidamente. deje de sangrar si ocurre, etc. Solo porque inventaron equipos endoscópicos y técnicas menos invasivas, no significa que esté fuera del gancho para aprender lo básico. Solo significa que tienes que aprender más.
fuente
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 son sobre principios básicos, realmente 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. Del mismo modo, un puntero sigue siendo un puntero, no comienza a hacer cosas diferentes solo porque sí. El único libro específico de lenguaje que mencionó es sobre C, en cuyo caso ese libro viejo es mucho más útil que cualquier cosa nueva, porque probablemente fue escrito más cerca del período de tiempo en que se desarrolló cualquier código C con el que estaría trabajando.
fuente
La lista que citó, no, no son 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 su publicación.
fuente
Una de las cosas que debe tener en cuenta es que existen principios subyacentes que son esencialmente atemporales y implementaciones que tienden a ir y venir.
Los principios subyacentes son esencialmente toda la teoría aburrida en la que la informática tiende a pasar mucho tiempo, y que sigue siendo válida incluso si el mundo cambia a su alrededor. Esto en oposición a 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.
fuente
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 Mes del Hombre Mítico , cuando estaba leyendo este libro, me olvidaba que estaba escrito en 1975. Cuando espolvorea alguna 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 los Patrones de arquitectura de aplicaciones empresariales de Martin Fowler , ahora de 9 años pero nuevamente intemporal y aún aplicable al trabajo que hago hoy.
Mi libro favorito en este momento es Java Modeling en color de Peter Coad con UML (1999) a pesar de que soy un desarrollador de C # y evito UML, porque las técnicas y conceptos me hacen un mejor codificador.
Haríamos bien en aprender de la primera generación de desarrolladores porque han pisado el terreno por el que estamos caminando en este momento y su sabiduría duramente ganada puede ayudarnos a comenzar rápidamente lo que estamos haciendo / aprendiendo hoy.
fuente
Los principios básicos del software no han cambiado en los últimos 20 años. Una pila, un árbol y una lista vinculada siguen funcionando igual que en aquel entonces. "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 C fue inventado?
"Cloud" es una palabra de moda de marketing. Solía significar algo específico, pero ha sido degradado por el uso excesivo. Hoy en día, cada vez que tiene algo que le habla a un servidor remoto a través de una red, los vendedores le pegan la etiqueta de "nube". Entonces, 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. Usted, por otro lado, claramente no es tan inteligente como cree que es. Escucha al profesor, es posible que aprendas algo.
"No puedes ser viejo sin ser tonto. Muchos jóvenes sabios, murieron como un hijo de puta". - Richard Pryor
fuente
Aquí hay algunos libros más antiguos y desactualizados:
El arte de la programación de computadoras, vol. 1-3 por D. Knuth. ¡Estos fueron publicados entre 1968 y 1981! ¡Ya no usamos tubos de vacío, gente! Todo en estos libros es cojo. ¿Dónde está la discusión sobre Python y Ruby?
Computadoras e Intractabilidad: una guía para la teoría de la completitud NP por MR Garey y DS Johnson, 1979. ¡Súper cojo! Todos estos problemas ya se han resuelto, probablemente.
Si un libro no fue escrito en los últimos tres años con enfoque en Python, entonces no vale la pena leerlo.
fuente
Esos libros no son obsoletos, esos libros son clásicos.
Para citar a Kaplansky , " pase algún tiempo todos los días aprendiendo algo nuevo que no esté relacionado con el problema en el que está trabajando actualmente (recuerde que la desunión puede ser temporal) y lea los maestros " .
fuente
Sé lo que quieres decir, cuando tenemos avances (viene a la mente LINQ) que cambian la legibilidad y el uso del código, pero simplemente porque estos libros son viejos, no significa que no ofrezcan grandes lecciones para el lector.
Si bien los lenguajes de programación que usan pueden haber quedado fuera de moda, la teoría detrás de los lenguajes de programación todavía suena cierta hoy en día. La mayoría de estos libros tratan de cubrir muy bien lo básico, y lo básico no ha cambiado tanto.
fuente
La industria informática todavía es muy joven. Considero que los libros escritos hace 30 años siguen siendo valiosos y necesarios para una comprensión completa. Los conceptos abstractos a veces tardan en digerirse.
fuente
Algunas partes menores son 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, el algoritmo de Furer (2007) Schonhage-Strassen para multiplicar números largos de más de 40000 dígitos juntos), pero la introducción que necesita para aprender los conceptos básicos (divide y vencerás) / Programación dinámica / Programación lineal / etc.) para que pueda aprender a pensar con sensatez sobre los algoritmos.
Aprender el estándar C de K&R sigue siendo la mejor fuente; aunque no estoy seguro si confiaría 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 hoy en día; aunque otros argumentarán que lisp es su arma secreta y que aprender idiomas como java o python primero hace que los programadores sean muy malos y que nunca necesiten aprender cómo implementar listas o matrices enlazadas o notación big-O y terminen haciendo cosas muy ineficientes.
Algunos de Code Complete o Pragmatic Programmer 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 brinda las soluciones recomendadas utilizando los mejores herramientas disponibles en ese momento (como CVS / RCS para control de versiones en lugar de una herramienta moderna como git / bzr / hg / svn). Pero sigue siendo bueno estar pensando en cómo el control de versiones es imprescindible y cómo debe ser transparente y autodocumentado y pasar por la lógica de por qué es un deber absoluto.
O las recomendaciones de PP contra IDEs para un editor básico de Unix + herramientas de Unix, por no decir que no debería aprender a usar find / awk / localizar / grep / sed, pero un buen IDE a menudo puede ahorrar mucho tiempo. Por ejemplo, emacs puede resaltar la sintaxis o completar código simple; pero digamos que un buen IDE dirá consejos sobre herramientas con declaraciones de funciones cuando las escriba, o analice el código y marque las variables no utilizadas, facilite el colapso de secciones de código, etc.
fuente
Si, si y si.
Eso no hace que esos libros sean obsoletos. "Computación moderna" es un término increíblemente amplio. Sin embargo, incluye programación en C, por lo que "El lenguaje de programación C" sigue siendo un libro relevante. Se incluye algoritmos, por lo que "Introducción a los algoritmos" sigue siendo un libro relevante. Y así sucesivamente.
La mayoría de las aplicaciones en 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. Entonces, nuevamente, C sigue siendo relevante.
Es nuestro presente.
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, ofreciéndole un modelo de trabajo básico de 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 la capacidad para este tipo de trabajo, que tiene una base en teoría y práctica, y que sabe cómo aprender , porque su educación nunca termina.
fuente
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, que estos libros son la base de lo que hacemos nosotros como programadores y todos estos nuevos marcos están construidos sobre la misma línea de los viejos pilares.
Aquí están mis dos centavos, en realidad no los míos, lo aprendí de San Aquino y de Aristóteles antes que él.
La mecánica de una computadora no ha cambiado desde von-neumann. Del mismo modo, los detalles que necesita para aprender a ser un gran programador serán los mismos hasta que el modelo von-Neumann sea obsoleto. Asamblea, es el lenguaje de las computadoras ... aprende, no hay excusas.
C es el idioma nativo de Windows y Unix. Aprende o encuentra un nuevo comercio. Si usted es uno de esos tipos que fueron directamente a JAVA o C #, puede ser un buen programador, pero sería un mejor programador si aprendiera el período C--.
Los algoritmos y las estructuras de datos son la base de los programas informáticos, 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 se adapte al agujero cuadrado proverbial cuando haya enfoques mucho mejores y tenga errores que podrían haberse evitado. El desarrollo de software es un oficio que debe dominarse y, al final del día, las herramientas rara vez cambian. Es por eso que estos libros son tan importantes.
Todos estos programadores de JAVA y C # solo, tsk, ¡apuesto a que la mayoría de ellos nunca ha visto un episodio de Star Trek!
fuente
Escuché un dicho de un mentor:
"Un buen consejo viene con una razón por qué para que sepa cuando ya no es un buen consejo." Entonces, en los términos del libro, un libro que explica por qué hacer X sobre Y le permitirá saber cuándo ese consejo ya no es válido. Un libro "siempre haz esto, solo hazlo", 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 unos 8 cm de grosor, dudo que muchas personas puedan leer cada página en 24 horas :)
Recuerde que lo que está de moda hoy podría burlarse de mañana. Todos los siguientes fueron considerados una vez mainstream (en boga ayer) pero ahora no lo son:
Y hay algunas cosas que alguna vez fueron completamente anatema pero que ahora se aceptan:
Sepa por qué, y sabrá cuándo los viejos supuestos han sido reemplazados por una nueva realidad, y también el consejo.
fuente