¿Cuál es el libro más influyente que todo programador debería leer? [cerrado]

1439

Si pudieras retroceder en el tiempo y decirte a ti mismo que leas un libro específico al comienzo de tu carrera como desarrollador, ¿qué libro sería?

Espero que esta lista sea variada y cubra una amplia gama de cosas.

Para buscar: use el cuadro de búsqueda en la esquina superior derecha. Para buscar las respuestas de la pregunta actual, use inquestion:this. Por ejemplo:

inquestion:this "Code Complete"
Robert Harvey
fuente
8
Navegar por este hilo me hace darme cuenta de lo fea que son la mayoría de los libros relacionados con la programación. Muy buen hilo sin embargo!
Carl Bergquist
23
Esto es interesante, mientras el título dice "¿Cuál es el libro más influyente que todo programador debería leer?", Se sugieren algunos libros que tratan temas específicos del idioma. Por definición, y por pregunta tal como se expresó, los libros sugeridos aquí deberían tratar temas agnósticos de lenguaje, lo que demuestra que la mayoría de los programadores aún no han aprendido a leer.
Rook
19
Si pudiera retroceder en el tiempo y decirme que lea algo, será mejor que sea un periódico o un libro de datos deportivos que lleve conmigo. Cualquier otra cosa es una pérdida de buen viaje en el tiempo. :-)
jmucchiello
32
Sabes, si no me preocupara que me bajaran a votar TODO, iría y sugeriría Twilight. "¡TAMBIÉN se trata de personas pálidas y que evitan el sol!"
Jacob Bellamy
3
¿Alguien puede limpiar las respuestas eliminando entradas repetidas en los libros? La mayoría de ellos ya votaron.
rao

Respuestas:

1746
  • Código completo (2a edición) por Steve McConnell
  • El programador pragmático
  • Estructura e interpretación de programas de computadora
  • El lenguaje de programación C de Kernighan y Ritchie
  • Introducción a los algoritmos de Cormen, Leiserson, Rivest y Stein
  • Patrones de diseño de la banda de los cuatro
  • Refactorización: mejora del diseño del código existente
  • El mes del hombre mítico
  • El arte de la programación de computadoras por Donald Knuth
  • Compiladores: principios, técnicas y herramientas por Alfred V. Aho, Ravi Sethi y Jeffrey D. Ullman
  • Gödel, Escher, Bach por Douglas Hofstadter
  • Código limpio: un manual de artesanía de software ágil por Robert C. Martin
  • C ++ efectivo
  • C ++ más efectivo
  • CÓDIGO por Charles Petzold
  • Perlas de programación por Jon Bentley
  • Trabajando efectivamente con código heredado por Michael C. Feathers
  • Peopleware de Demarco y Lister
  • Codificadores en el trabajo por Peter Seibel
  • ¡Seguramente estás bromeando, señor Feynman!
  • Efectiva Java 2da edición
  • Patrones de arquitectura de aplicaciones empresariales por Martin Fowler
  • El pequeño intrigante
  • El maquinista experimentado
  • ¿Por qué la guía (conmovedora) de Ruby?
  • Los internos manejan el asilo: por qué los productos de alta tecnología nos vuelven locos y cómo restaurar la cordura
  • El arte de la programación de Unix
  • Desarrollo guiado por pruebas: por ejemplo, por Kent Beck
  • Prácticas de un desarrollador ágil
  • No me hagas pensar
  • Desarrollo de software ágil, principios, patrones y prácticas por Robert C. Martin
  • Diseños impulsados por dominio de Eric Evans
  • El diseño de las cosas cotidianas por Donald Norman
  • Diseño moderno de C ++ por Andrei Alexandrescu
  • Mejor escritura de software I de Joel Spolsky
  • La práctica de la programación por Kernighan y Pike
  • Pensamiento y aprendizaje pragmáticos: refactorice su Wetware por Andy Hunt
  • Estimación de software: desmitificando el arte negro por Steve McConnel
  • El programador apasionado (mi trabajo fue a la India) por Chad Fowler
  • Hackers: héroes de la revolución informática
  • Algoritmos + Estructuras de datos = Programas
  • Escribir código sólido
  • JavaScript: las partes buenas
  • Conseguir real por 37 señales
  • Fundamentos de programación por Karl Seguin
  • Gráficos por computadora: principios y práctica en C (2ª edición)
  • Pensando en Java por Bruce Eckel
  • Los elementos de los sistemas informáticos
  • Refactorización a patrones por Joshua Kerievsky
  • Sistemas operativos modernos por Andrew S. Tanenbaum
  • El Turing anotado
  • Cosas que nos hacen inteligentes por Donald Norman
  • La forma intemporal de construir por Christopher Alexander
  • La fecha límite: una novela sobre gestión de proyectos por Tom DeMarco
  • El lenguaje de programación C ++ (3a edición) por Stroustrup
  • Patrones de arquitectura de aplicaciones empresariales
  • Sistemas informáticos: la perspectiva de un programador
  • Principios, patrones y prácticas ágiles en C # por Robert C. Martin
  • Creciente software orientado a objetos, guiado por pruebas
  • Pautas de diseño del marco por Brad Abrams
  • Objeto de pensamiento por el Dr. David West
  • Programación avanzada en el entorno UNIX por W. Richard Stevens
  • Hackers y pintores: grandes ideas de la era de la informática
  • El alma de una nueva máquina de Tracy Kidder
  • CLR a través de C # por Jeffrey Richter
  • La forma intemporal de construir por Christopher Alexander
  • Patrones de diseño en C # por Steve Metsker
  • Alicia en el país de las maravillas de Lewis Carol
  • Zen y el arte del mantenimiento de motocicletas por Robert M. Pirsig
  • Acerca de la cara: los elementos esenciales del diseño de interacción
  • Aquí viene todo el mundo: el poder de organizar sin organizaciones por Clay Shirky
  • El tao de la programación
  • Belleza computacional de la naturaleza
  • Redacción de código sólido por Steve Maguire
  • La guía de Philip y Alex para la publicación web
  • Análisis y diseño orientado a objetos con aplicaciones de Grady Booch
  • Java efectivo por Joshua Bloch
  • Computabilidad por NJ Cutland
  • Autores intelectuales de la programación
  • El Tao Te Ching
  • El programador productivo
  • El arte del engaño por Kevin Mitnick
  • El programador de carrera: tácticas de guerrilla para un mundo imperfecto por Christopher Duncan
  • Paradigmas de programación de inteligencia artificial: estudios de caso en Common Lisp
  • Masters of Doom
  • Prueba de unidad pragmática en C # con NUnit por Andy Hunt y Dave Thomas con Matt Hargett
  • Cómo resolverlo por George Polya
  • El alquimista de Paulo Coelho
  • Smalltalk-80: el lenguaje y su implementación
  • Redacción de código seguro (2a edición) por Michael Howard
  • Introducción a la programación funcional por Philip Wadler y Richard Bird
  • No hay errores! por David Thielen
  • Retrabajo de Jason Freid y DHH
  • JUnit en acción
aleatorio
fuente
16
Code Complete es un buen libro si estás en la universidad, tal vez. Si tiene al menos 1 año de experiencia en programación, es un aburrimiento total.
Bogdan Gavril MSFT
19
Code Complete tiene mucha información útil, pero está oculto en hipérbole, waffle y repetición, lo que lo hace difícil de leer.
Jeff Yates
76
Leí Code Complete 3 años en mi carrera. No había tomado un curso de ingeniería de software ni un curso de construcción de lenguaje de programación, pero había tomado algunos cursos introductorios de CS. Es, con mucho, el mejor libro individual que he leído para convertirme en un mejor programador. No lo convertirá en un especialista, pero lo hará mucho más que un ingeniero.
Shea
119
El problema con este libro es que para un principiante, realmente no tiene sentido ya que los conceptos están un poco avanzados. Para cuando esté listo para poder leerlo, ya debe conocer y practicar el 99% de los conceptos del libro.
esac
57
Ese es el trato con las sugerencias de sentido común, como las que se encuentran en este libro. De vez en cuando necesita que se les recuerde que deben volver a la cola.
JohnFx
9

K&R

@Juan: Conozco a Juan, lo sé, pero hay algunas cosas que solo se pueden aprender si realmente se enfoca en la tarea en cuestión. Hablar en ideales abstractos todo el día simplemente te convierte en un académico. Es en la aplicación del resumen que realmente entendemos la razón de su existencia. :PAGS

@Keith: Gran mención de "Los presos están ejecutando el asilo" por Alan Cooper, una revelación segura, cualquier desarrollador que haya trabajado conmigo desde que leí ese libro me escuchó mencionar las ideas que propugna. +1

Jason Bunting
fuente
9

Matemáticas discretas para informáticos http://ecx.images-amazon.com/images/I/51HCJ5R42KL._SL500_BO2,204,203,200_AA219_PIsitb-sticker-dp-arrow,TopRight,-24,-23_SH20_OU02_.jpg

Matemática discreta para informáticos por JK Truss.

Si bien esto no te enseña a programar, te enseña matemáticas fundamentales que todo programador debe saber. Puede recordar estas cosas de la universidad, pero en realidad, hacer lógica de predicados mejorará sus habilidades de programación, debe aprender la teoría de conjuntos si desea programar usando colecciones.

Realmente hay mucha información interesante aquí que puede hacer que pienses en los problemas de diferentes maneras. Es útil tenerlo, solo aprender de vez en cuando para aprender algo nuevo.

Tarski
fuente
9

Sistemática: cómo funcionan los sistemas y especialmente cómo fallan . Consíguelo usado barato. Pero es posible que no obtenga el humor hasta que haya trabajado en algunos proyectos fallidos.

La belleza del libro es el año de copyright.

Probablemente la "ley" para llevar más profunda presentada en el libro:

El teorema fundamental del modo de falla (FFT): los sistemas complejos generalmente operan en modo de falla.

La idea es que hay partes defectuosas en cualquier pieza de software que están enmascaradas por fallas en otras partes o por validaciones en otras partes. Vea un ejemplo del mundo real en la máquina de radiación Therac-25 , cuyas fallas de software fueron enmascaradas por fallas de hardware. Cuando se eliminaron las cajas de seguridad del hardware, la condición de carrera del software que no se había detectado durante todos esos años provocó que la máquina matara a 3 personas.

Nicholas Piasecki
fuente
1
También revise The Systems Bible por el mismo autor (John Gall). Es la tercera edición de Systemantics, él acaba de cambiar el título. Este es el libro que robarías de la escuela. Es el libro que los adultos adultos leen debajo de una manta con una linterna.
Chris Wenham el
9

Uno de mis favoritos personales es Hacker's Delight , porque fue tan divertido de leer como educativo.

¡Espero que la segunda edición se lance pronto!

tr9sh
fuente
+1 para "Hacker's Delight" de Henry S. Warren Jr: no se trata de hackear en el sentido popular, sino de hackear como en twiddling de bajo nivel y otros "hacks" en el sentido verdadero y original de la palabra. No es para todos, pero si usted está involucrado en la optimización de código, compiladores, etc., o simplemente es un nerd general que está interesado en cosas de bajo nivel, entonces este es un gran libro.
Paul R
9

Programación extrema explicada: Abrace el cambio por Kent Beck. Si bien no abogo por una versión hardcore de XP o la carretera en el desarrollo de software, desearía que me hubieran presentado los principios de este libro mucho antes en mi carrera. Pruebas unitarias, refactorización, simplicidad, integración continua, costo / tiempo / calidad / alcance: esto cambió la forma en que veía el desarrollo. Antes de Agile, se trataba del depurador y el miedo a las solicitudes de cambio. Después de Agile, esos demonios no aparecían tan grandes.

TrueWill
fuente
9

La práctica de la programación. Por Brian W. Kernighan, Rob Pike.

El estilo que se muestra aquí es excelente: el código solo habla por sí mismo y todo el libro sigue el principio KISS. Personalmente no es mi idioma de elección, pero sigue siendo influyente para mí.

RD1
fuente
1
-1 Duplicado de stackoverflow.com/questions/1711/…
Ruben Bartelink
9

Paradigmas de programación de inteligencia artificial : estudios de caso en Common Lisp por Peter Norvig

ingrese la descripción de la imagen aquí

Empecé a leerlo porque quería aprender Common Lisp. Cuando estaba a medio camino, me di cuenta de que este era el mejor libro sobre programación que había leído hasta ahora.

Michiel Borkent
fuente
9

Definitivamente la artesanía del software

texto alternativo http://ecx.images-amazon.com/images/I/5186JKTDVWL._SL500_AA240_.jpg

Este libro explica muchas cosas sobre ingeniería de software, desarrollo de sistemas. También es extremadamente útil comprender la diferencia entre los diferentes tipos de desarrollo de productos: web VS shrinkwrap VS IBM framework. ¿Qué tenían en mente las personas cuando concebían el modelo de cascada? Lea esto y todo quedará claro (con suerte)

dario minonne
fuente
Este libro necesita ser reescrito desde cero. El tema es muy interesante, pero el libro es bastante loco.
Chris Mountford
Chris, es difícil entender tu comentario ... ¿Puedes explicar más? ¿Por qué 'loco'?
dario minonne
En primer lugar está lleno de errores tipográficos. La mano editorial generalmente de primera categoría de Addison Wesley está extrañamente ausente en este volumen.
Chris Mountford
... continuando, y no hay suficiente espacio aquí, pero: 2. nunca está claro en el texto dónde el autor cambia entre hechos y opiniones, anécdotas y principios fundamentales, etc. 3. la artesanía del software es una metáfora y una estrategia para tratar con varios aspectos difíciles del desarrollo de software. Tiene ventajas específicas sobre alternativas y presumiblemente desventajas. Creo que ese es el enfoque sensato. No tiene sentido decir que el software es inherentemente un oficio. Lectura muy molesta, pero para ser justos, fue hace un tiempo y muchos detalles que he olvidado. Sin embargo, mi disgusto permanece.
Chris Mountford
8

@ Peter Coulton: no lees a Knuth, lo estudias.

Para mí y mi trabajo ... Las estructuras de datos puramente funcionales son excelentes para pensar y desarrollar teniendo en cuenta los lenguajes funcionales.

nlucaroni
fuente
8

"El mundo es plano" de Thomas Friedman.

La excelencia en la programación exige una inversión de energía mental y una dedicación al aprendizaje continuo comparable a las profesiones de medicina o derecho. Paga una fracción de lo que pagan esas profesiones, mucho menos los salarios pagados a los expertos en matemática que se dirigen al sector financiero. Y salarios por construcción del código se están erosionando porque es una profesión relativamente fácil de ingresar para los inteligentes y autodisciplinados en la mayoría de las economías.

La programación ya se ha erosionado hasta el punto de pagar menos que, digamos, plomería. La fontanería no puede ser "deslocalizada". No necesita pagar $ 2395 para asistir a la Conferencia Profesional de Plomeros cada dos años por el privilegio de recibir un conjunto completamente nuevo de tecnologías de plomería que le tomará un año aprender.

Si vives en Norteamérica o Europa, eres joven y eres inteligente, la programación no es una elección de carrera racional. Empresas que implican programación, absolutamente. Estudie negocios, sepa lo suficiente sobre programación para refinar su detector de BS: brillante. ¿Pero dedicar la mayor parte de su energía mental al dominio de bibliotecas, estructuras de datos y algoritmos? Eso solo tiene sentido si la programación es algo más que una opción económica.

Si amas la programación y por esa razón tienes la intención de hacerla tu carrera, entonces te corresponde desarrollar una comprensión fría de las fuerzas que son, y continuarán, para que sea una profesión cada vez más difícil para ganarse la vida. . "El mundo es plano" no le enseñará cómo nombrar sus variables, pero lo sumergirá durante 6 u 8 horas en realidades económicas que ya han llegado. Si usted puede leerlo, y no se asuste, a continuación, salir y comprar "código completo."

Larry OBrien
fuente
Esa es una gran respuesta!
Avi
8

texto alternativo

Este último año tomé varias clases. Yo leo

El dilema del innovador (tecnología disruptiva)
El mes del hombre mítico (software de gestión)
Crossing the Chasm (inicio)
Sistemas de gestión de bases de datos, The COW Book
Programming C #, The OSTRICH Book
Beginning iPhone Developmen, The GRAPEFRUIT Book

Cada libro fue increíble, pero el dilema del innovador de Clayton Christensen (1997 !!!) es realmente un libro fantástico y me hizo pensar realmente en el mundo del software moderno. El desafío abordado es la tecnología disruptiva, y cómo las empresas de unidades de disco y las empresas no técnicas siempre se ven afectadas por la nueva tecnología que cambia el juego. Le da a uno una nueva perspectiva cuando piensa en Google, probablemente la mayor empresa 'web'. ¿Por qué tienen sus manos en TODO? Es porque no quieren que su posición sea interrumpida por algo nuevo. La vista previa en Google es suficiente para tener la idea. Léelo!

TahoeWolverine
fuente
Creo que este libro es bastante repetitivo. Recomiendo leer los primeros 1/4.
Ben Haley
8

piratas informáticos, por Steven Levy.

La personalidad y la forma de vida deben ser lo primero. Todo lo demás se puede aprender.

tsilb
fuente
8

El lenguaje Python fue muy influyente para mí, desearía haber leído este libro hace años. La belleza y la simplicidad del lenguaje Python realmente afectaron la forma en que escribí el código en otros idiomas.

texto alternativo texto alternativo

Matthew J Morrison
fuente
2
Creo que comenzar nuevos programadores con Python reduciría la cantidad de código feo en el mundo. Trabajo con alguien que sangra las líneas al azar; esa persona no lo haría si hubiera trabajado con Python durante unos meses.
xnine
66
Creo que comenzar nuevos programadores con Python reduciría la cantidad de otros lenguajes.
Marco Mariani
2
¿Son esas portadas una coincidencia?
Kelly S. French
7

Creo que "The Art of Unix Programming" es un libro excelente, escrito por un excelente pirata informático / mente brillante como Eric S. Raymond, que intenta hacernos entender algunos principios del diseño de software (principalmente la simplicidad). Este libro es imprescindible para cada programación que está a punto de comenzar un proyecto en la plataforma Unix.

acecha
fuente
66
Esto es un duplicado.
Christopher Mahan
7

Si bien estoy de acuerdo en que muchos de los libros anteriores son de lectura obligatoria (el Programador pragmático, el Mes mítico del hombre, el Arte de la programación de computadoras y el SICP me vienen a la mente de inmediato), me gustaría ir en una dirección ligeramente diferente y recomendar Una disciplina. de Programación por Edsger Dijkstra. Aunque tiene 32 años, el énfasis en el "diseño para la verificabilidad" es muy relevante (incluso si "verificabilidad" significa "prueba" en lugar de "pruebas unitarias").

joel.neely
fuente
7

Refactorización de Martin Fowler : Mejorar el diseño del código existente ya se ha enumerado. Pero detallaré por qué me ha impactado.

La esencia de todo el libro se trata de estructurar el código para que sea más fácil de leer y comprender por los humanos . Me enseña firmemente que el código que escribo está destinado a que mis colegas y sucesores lo consuman y posiblemente aprendan algo bueno de él. Me inspira a programar conscientemente de una manera que deja a las personas alabando mi nombre y sin maldecirme a la condenación por toda la eternidad .

icelava
fuente
7

Aquí hay un excelente libro que no es tan aplaudido, pero está lleno de información profunda: Desarrollo de software ágil: el juego cooperativo , de Alistair Cockburn.

¿Qué tiene de especial? Bueno, claramente todos han escuchado el término "Ágil", y parece que la mayoría son creyentes en estos días. Aunque creas o no, hay algunos principios profundos detrás de por qué existe el movimiento ágil. Este libro descubre y articula estos principios de manera precisa y científica. Algunos de los principios son (por cierto, estas son mis palabras, no las de Alistair):

  1. Lo más difícil del desarrollo de software en equipo es lograr que todos los cerebros tengan la misma comprensión. Estamos construyendo sistemas enormes, elaborados y complejos que son invisibles en el mundo tangible. Cuanto mejor consiga que los cerebros de las personas compartan una comprensión más profunda, más efectivo será su equipo en el desarrollo de software. Esta es la razón subyacente por la que la programación de pares tiene sentido. La mayoría de las personas lo descartan (y yo también lo hice inicialmente), pero con este principio en mente, recomiendo que le des otra oportunidad. Terminas con DOS personas que entienden profundamente el subsistema que acabas de construir ... no hay muchas otras formas de obtener una transferencia de información tan profunda tan rápidamente. Es como una fusión mental vulcana.
  2. No siempre se necesitan palabras para comunicar una comprensión profunda rápidamente. Y un corolario: demasiadas palabras y excedes la capacidad del oyente / lector, lo que significa que la transferencia de comprensión que estás intentando no ocurre. Considere que los niños aprenden a hablar el lenguaje al estar "inmersos" y "absorbentes". No solo el lenguaje tampoco ... da el ejemplo de algunos niños jugando con trenes en el piso. A lo largo viene otro niño que nunca antes había VISTO un tren ... pero al observar a los otros niños, él capta la esencia del juego y juega de inmediato. Esto sucede todo el tiempo entre humanos. Esto, junto con el corolario sobre demasiadas palabras, lo ayuda a ver cuán equivocado era en los viejos días de la "cascada" para intentar escribir especificaciones detalladas de requisitos de 700 páginas.

Hay mucho más allí también. Me callaré ahora, ¡pero recomiendo encarecidamente este libro!

Flores de charlie
fuente
2
Una contribución única, y te tomaste el tiempo para explicar claramente por qué valía la pena leerlo. ¡+1 por originalidad y esfuerzo! Esperaré leer esto pronto ...
Avery Payne
Bueno. No creo que te decepciones.
Charlie Flowers
7

Maestros de la fatalidad. En cuanto a la motivación y el amor por su profesión: no mejorará más de lo que se describe en este libro, ¡una historia verdaderamente inspiradora!

Jasper Bekkers
fuente
+1 para la revisión precisa de una línea
rubayeet