Los 10 libros que todo programador debería leer, sin excusas

En su día, ya publiqué una lista de los 10 libros sobre programación que, personalmente, considero que todo desarrollador debería leer. Esta vez, vía Slashdot, os traigo una lista votada por los miles de usuarios de Stack Overflow, EL sitio al que dirigirse cuando uno tiene alguna pregunta sobre programación. Me alegra saber que coincidimos en algún libro.

Para no aburriros repitiendo mis impresiones, cada título viene acompañado con la traducción del comentario que de cada libro hicieron los usuarios que los propusieron. Todo el crédito es suyo.

Code Complete

La enciclopedia de las buenas prácticas a la hora de programar. “Code Complete” se centra principalmente en la artesanía individual — todas esas cosas que, una a una, forman lo que instintivamente identificamos como “escribir código limpio”. Es el tipo de libro que dedica 50 páginas a hablar de la organización del código y de los espacios en blanco.

The Pragmatic Programmer

Un gran libro para todos aquellos programadores que han aprendido la mecánica de la programación, quizás en la universidad, pero no saben muy bien cómo continuar. Es como la diferencia entre el dibujo técnico y la arquitectura. Lo que aprendiste en aquella clase de la universidad era dibujo técnico, ahora puedes dibujar perfectamente, pero si todavía sientes que no sabrías por dónde empezar si alguien te propusiera desarrollar un cliente P2P de cero, este es justo el libro que necesitas.

Structure and Interpretation of Computer Programs

Personalmente, “Structure and Interpretation of Computer Programs” es, de lejos, el libro sobre programación que más me ha influenciado de todos los que he leído.

Hay clásicos como “Code Complete”, “Refactoring” y “Design Patterns” que te enseñan hábitos de trabajo efectivos y los detalles más minuciosos del oficio. Otros, como “Peopleware”, “Psychology of Computer Programming” y “The Mythical Man-Month” ahondan en los aspectos psicosociales del desarrollo de software. Hay numerosos libros dedicados a los algoritmos. Todos ellos tienen su lugar.

Sin embargo, SICP, juega en una liga distinta. Es un libro que te iluminará. Evocará en ti una pasión por escribir programas hermosos. Es más, te enseñará a reconocer y apreciar esa belleza. Te dejará en un estado de asombro y con una insaciable sed por aprender. Otros libros pueden hacer que seas mejor programador; este libro te convertirá en programador.

Y entretanto, aprenderás un par de cosas sobre programación funcional (los efectos colaterales no se introducen hasta el capítulo tres), evaluación perezosa, metaprogramación (bueno, abstracciones metalingüisticas), máquinas virtuales, intérpretes, y compiladores.

Algunos piensan que SICP no es un libro para principiantes. Probablemente yo no habría apreciado el libro en su totalidad de no haber tenido una cierta experiencia previa, pero sí lo recomiendo encarecidamente para principantes. Al fin y al cabo, el libro se escribió para el famoso 6.001, el curso de introducción a la programación del MIT. Puede requerir un cierto esfuerzo mental (especialmente si haces los ejercicios – cosa que deberías), pero el premio compensa el esfuerzo con creces.

¿Todavía no estás convencido? Lee el prólogo o el prefacio a la primera edición. El texto completo está disponible gratis en la web e incluso tienes las clases en vídeo para acompañarlo.

The C Programming Language

Es conciso, fácil de leer, y te enseñará tres cosas: el lenguaje de programación C, cómo pensar como un programador, y el bajo nivel del modelo computacional. (Es importante entender qué ocurre entre bambalinas)

Introduction to Algorithms

“Introduction to algorithms” (Cormen, Leiserson, Rivest, Stein) también conocido como CLRS.

“Code Complete” te enseña a programar correctamente, “The Mythical Man-Month” te enseña a gestionar correctamente, “Design Patterns” te enseña a diseñar correctamente… Este libro te enseña a escribir pensar algoritmos.

En mi mente, el código es sólo una herramienta, no la esencia. La parte principal del desarrollo de software (en mi opinión) es la creación de nuevos algoritmos y la re-implementación de algoritmos ya existentes. El resto es sólo ensamblar piezas de Lego o crear capas de “gestión”. Todavía sueño con el trabajo en el que me dejen invertir la mayor parte de mi tiempo (>50%) en escribir algoritmos, dejando los detalles de gestión para otra gente…

Refactoring: Improving the Design of Existing Code

Creo que tendría que recomendar “Refactoring: Improving the Design of Existing Code”.

Design patterns : elements of reusable object-oriented software

Personalmente creo que “Design Patterns” de The Gang of Four es un libro muy útil. No trata acerca de los “meta” aspectos de la programación como muchas de las otras sugerencias, pero enfatiza el encapsular buenas técnicas de programación en forma de patrones, y ha animado a otros a desarrollar nuevos patrones y anti patrones con los que tener un idioma común a la hora de hablar sobre programación.

The Mythical Man-Month

En el podcast número 12, Jeff y Joel sugirieron un millón de libros recomendados. Yo, por mi parte, no puedo dejar de recomendar “The Mythical Man-Month”.

The Art of Computer Programming,

“The Art of Computer Programming”, aunque sólo sea por el esfuerzo que Knuth ha puesto en escribirlo.

Compilers: Principles, Techniques and Tools

Me sorprende que nadie haya mencionado el libro del dragón. Nunca olvidaré la portada de la primera edición. Este libro me hizo darme cuenta de lo realmente mágicos que son los compiladores. 🙂

Comentarios
  1. Los enlaces a Amazon UK son de referido, por cierto. Esto significa que, si os animáis a comprar algún libro, yo me llevaré unos céntimos. Y a vosotros no os costará más, por supuesto.

    Responder

  2. Quique

    Ninguno está disponible en español?

    Responder

    • Alguno sí que está en castellano. El de “Patrones de diseño”, por ejemplo, aunque no sé si será la última edición, probablemente sea más complicado de encontrar, y, al menos en España, será bastante más caro.

      Responder

      • jacho

        ¡Gran selección!

        Yo tengo el de “Patrones de diseño” en español, se encuentra fácilmente, pero, como pasa con muchos libros de software, el original inglés se entiende mejor. Es que traducen todo, y hay terminología que traducida suena ridícula, nada familiar.

        Solo recomendaría comprar alguno de estos libros en español a quien tenga un nivel muy bajo de inglés. Si no, no merece la pena.

        Responder

    • hcxangel

      Tambien The C Programming Language, con ese fue que aprendi C

      Responder

  3. Muy buena lista, aunque hecho de menos alguno como el Clean Code http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882

    Responder

    • En mi lista original sí que lo incluí 🙂

      Responder

    • Martin

      En español ISBN 978-84-415-3210-6 Código Limpio.

      Responder

  4. Trece

    No soy programador, ni pretendo serlo. La lógica, la psicología cognitiva y la teoría del conocimiento son las áreas de mi interés, por eso me gustaría que me comentaran si conocen algunos textos que se enfoquen maś en la lógica y herística de la programación, es decir, qué tipos de razonamiento se sigue en la práctica de la programación informática y qué tipos de estrategias toman en cuenta a la hora de adoptar un lenguaje de programación.

    Trataré de poner un ejemplo. Supongamos que un programador desea realizar una aplicación capaz de realizar X tarea y conoce 3 lenguajes de programación (los cuales maneja perfectamente) que podrían servir a su propósito, entonces, ¿qué razonamiento sigue dicho programador para elegir uno de esos lenguajes? y una vez elegido ¿qué pautas sigue su pensamiento durante el proceso de programar?

    Saludos

    Responder

    • Pregunta:
      “¿ ¿qué pautas sigue su pensamiento durante el proceso de programar?”.

      Respuesta:
      La menor cantidad posible de wtf 😉
      http://commadot.com/wtf-per-minute/

      Responder

    • Tal vez puedas tener una aproximación con “Head First Software Development” de la serie Head First de O’Reilly. Pero ten en cuenta los cambios de paradigma que a lo largo de muy poco tiempo ha sacudido el mundo de la programación (Programación “desnuda”, estructurada, orientada a objetos, a aspectos, “tisular” o de patrones…), probablemente por la necesidad de almacenar y manipular cada vez más ingentes cantidades de información así como su crecimiento hasta ir transformando la artesanía en ingeniería. También ha influido poderosamente el salto de la programación “personal” -investigadores y personas muy cualificadas que necesitaban de capacidad de computación para su trabajo- a la programación de masas, en la que la interfaz de usuario es importantísima y, como todos sabemos, una auténtica pesadilla que envuelve el núcleo funcional o negocio. Según el paradigma, el desarrollador ha optado por unas tecnologías y unos desarrollos u otros.
      Saludos.

      Responder

      • Francisco

        Los libros de la serie head first que se enfocan en la programacion, son muy buenos!, y mas para aquellos que quieren comenzar a programar. Me gustan bastante.

        Responder

    • El lenguaje que menos líneas de codigo necesite

      Responder

      • Guille

        Tú no eres ingeniero informático, ¿verdad?

        Responder

  5. El de “The C Programming Language” ¿también debería leerlo un programador que no vaya a trabajar con C? 😛

    Responder

    • Yo CREO que no lo he leído, pero sí que recomendaría a todo el mundo saber algo de C.

      Responder

    • Jaime Páez

      Si no porgramas en C no eres un programador, quizás seas un aprendiz pero en ese caso igual deberías aprender C para ser un programador de verdad…

      Responder

      • uno--

        Lo mismo podría decir yo del cobol no?

        Responder

        • Lo mismo podría decir Bill acerca de Visual Basic 6.

          Responder

          • Jose Ramon

            jamás sin ser sometido a duras criticas, C es un lenguaje estructurado y poderoso que realmente te hace conocer y aplicar la logica de un programa, visual 6 solo te permite hacer programas visuales mas rapido, todo lo contrario de C

          • Ariel

            Lo mismo se podria decir de no saber assembler?

      • EzE

        totalmente de acuerdo.
        todo se puede hacer mejor en C/C++

        Responder

      • Dionel

        Para ser un buen programador no se necesita programar en C. Eso es cuento de camino. Se puede programar en C bien mal, bien feo, bien oscuro. El C es un lenguaje más de programación con su propia sintaxis y semántica. Para programar bien se necesita conocer bien la Filosofía de Diseño del Ambiente de Programación que utilizas y hacer buenos algoritmos. Después eso nada más lo debes traducir al lenguaje que utilizarás ya sea Ensamblador, Pascal, Python, etc, etc, etc…ahh, olvidaba y C.

        Responder

    • Rafael Montagud

      Hay una razón por la que en algunos sitios se enseña todavía C, y es por el concepto de indirección, o lo que es lo mismo por como funcionan los punteros

      Para más informacion: http://programmers.stackexchange.com/questions/105902/do-the-young-minds-need-to-learn-the-pointer-concepts

      Responder

      • Dionel

        En mi opinión, los punteros no son cosas naturales, es algo propio de la Programación. Las cosas en la vida real, para la que se programa a diario, existen de por si, no por referencias, sino por sus propiedades, cualidades y funcionalidades. Eso de crear un puntero, controlar la memoria que maneja, y después liberarla, eso no es problema del Programador de Aplicaciones, es del ambiente que utilizo para programar, y hasta del SO. Yo creo las clases del universo que estoy diseñando. Creo las intancias en tiempo de corrida de esas clases o de otras necesarias (ya preestablecidas en bibliotecas) y las mando a eliminar cuando ya no me son necesarias. Si eso se hace con punteros o no, eso es problema del ambiente de programación, del SO, pero no mío. Tal vez del programador del “ambiente de programación”. Los desarrolladores de Microsoft, CodeGear, Oracle, Sun, etc…

        Responder

  6. Me uno a Quique, ¿hay alguno en castellano?. Es vagueza más que nada 🙁

    Responder

  7. Creo que Ingenieria de Software Un Enfoque Práctico (Pressman 5th Ed)tiene que entrar en esa lista, ustedes que dicen???. Saludos!!!!

    Responder

    • Dionel

      Yo estoy totalmente de acuerdo. Muchos programadores se disparan a programar de una vez sin haber hecho un análisis y diseño del problema en cuestión. Entonces empieza el para atrás y para alante y los cambios en el código del programa que cada vez se pone más oscuro y oscuro. Los libros de Pressman son muy buenos, en mi opinión.

      Responder

  8. fritx

    si…los libros de Pressman no deben faltar en la biblioteca del programador y del informatico en general……

    quiero agregar un libro “en ingles” que a mi en lo personal me gusto mucho porque esta escrito con un lenguaje bastante coloquial para que cualquier ser humano pueda comprender y dominar la programacion en Python…

    se llama “Beginning Python from novice to professional” second edition.
    autor: Magnus Lie Hetland.

    busquenlo por torrent en pirate bay..
    saludos !

    Responder

    • logongas

      En mi opinion pressman es una de las personas que más daño ha hecho a la informática. Deberían Quemarse sus libros a las puertas de las facultades de informática. Su Visión de los proyectos es totalmente idealista y alejada de lo normal de un proyecto. Es como sí para hablar del amor se pusieramos cómo película de referencia pretty woman.

      Responder

  9. Sólo tengo que decir que llevo todo el verano leyendo (relajadamente) “Code Complete” y que es un libro imprescindible a mi entender.

    Responder

  10. antonio.

    Les recomiendo 100 things every designer needs to know about people

    Responder

  11. Les faltó “The Art of computing programming” del gran Donald E. Knuth referencia obligada desde hace muuucho

    Responder

    • Dionel

      Totalmente de acuerdo. Eso es clásico.

      Responder

  12. […] Los 10 libros que todo programador debería leer, sin excusas mundogeek.net/archivos/2011/09/06/los-10-libros-que-todo-…  por lafdez hace nada […]

    Responder

  13. […] About @satiromarra On Tuesday 6th September 2011, satiromarra said: Lista de los 10 libros sobre programación que todo desarrollador debería leer. Vía Slashdot, es una lista votada por los miles de usuarios de Stack Overflow, el sitio al que dirigirse cuando uno tiene alguna pregunta sobre programación. Vía: mundogeek.net/archivos/2011/09/06/los-10-libros-que-todo-programador-d…/ […]

    Responder

  14. Pablo

    Quiten SICP,es un libro muy criticado por ser aburrido ,segun norving,Pero The Algorithm Design Manual(un manual de guerra del dia a dia en los algoritmos), es digno para ocupar ese lugar o How to Design Programs(otro libro del MIT,gratis,sobre Scheme) o para programacion funcional en haskell,
    Learn You a Haskell,gratis en internet,y version no official en españo como aprenderhaskell.es,puede parecer poco serio,pero es uno de los mejores libros para introducirse a la programacion funcional,en lo personal tiene mas sobre programacion funcional que programming scala,programming clojure y otros.

    Responder

    • “Quiten SICP,es un libro muy criticado por ser aburrido ,segun norving”

      Y por ello debe quitar el autor de esta entrada ese libro? es un libro magnifico… divertido o no puede ser muy relativo, tambien muchos conocidos consideran aburrido programar y no por ello yo voy a cambiar de opinion.

      Responder

      • Pablo

        El problema SICP es que ya es una vaca sagrada,cuando hay mejores lecturas.

        Responder

  15. Excelente, me vienen en un momento justo

    Responder

  16. MiguelRock

    hmm uno bueno para mi fue y es “Fundamentos de Programación” de Luis Joyanes Aguilar y tu libro “python para todos” xD

    Responder

  17. ZeratulMX

    Muchas gracias, ahora tengo mas motivacion para ir a mis clases de ingles *¬*

    Responder

  18. Hola,

    Me recomendáis alguno de c++??? En la carrera tuve un profesor incompentente y todavía tengo cosas que no me quedan claras!

    Gracias!

    Responder

    • antigravedad

      Es el libro del creador de C++,

      The C++ Programming Language – Bjarne Stroustrup

      Responder

      • El que te ha dicho ‘antigravedad’ es un gran libro… luego puedes continuar con los de Alexandrescu que son impresionantemente buenos (aunque tambien complejos).

        Responder

      • Mao

        para C++ hace falta antes saber C. Para aprender C++ hay que tener al lado siempre ese libro que han recomendado: “The C++ Programming Language” de Bjarne Stroustrup.
        En español traducido como “Lenguaje de programación C++” y publicado por Pearson Addison-Wesley.

        Un libro imprescindible.

        Responder

        • jacho

          El libro de Stroustrup lo recomendaría como referencia, no tanto para aprender C++ desde cero.

          En ese sentido, “Thinking in C++” de Bruce Eckel es inmejorable, muy didáctico, se lee del tirón. Además el autor es tan majo que lo ha puesto en su web para libre descarga:

          http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html

          Responder

        • dysoco

          Eso es un mito, el mismo creador de C++… Bjarne algo lo afirma.

          ¿ Porque hay que saber C antes ?

          Responder

  19. Tengo la mayoria de ellos, aunque creo que ahi faltan algunos fundamentales como “The art of computer programming” de Knuth (aunque se deben usar mucho mas como referencia), pero los considero fundamentales.

    De todos ellos, sin lugar a dudas tengo prioridad por el SICP (Structure and Interpretation of Computer Programs”) que no mucha gente lo conoce a pesar de su extrema calidad.

    Un saludo!

    B

    Responder

  20. Algunos de estos títulos u otros influenciados directamente por estos, podemos encontrarlos en OpenLibra:

    OpenLibra

    Algoritmia, metodologías, cuadernos de ejercicios sobre programación, etc…

    Todos los recursos del catálogo son libres, lo cual quiere decir que los podemos descargar gratis.

    Saludos y gracias por el post.

    Responder

  21. Uno que pasaba

    Te has dejado los mas importantes:
    Wardog y el mundo
    Fuckowski, memorias de un ingeniero

    Sin estos, no se puede trabajar en condiciones

    Responder

    • Yo mismo

      Mi mayor agradecimiento por presentarme a Wardog y a Fuckowski. Impagables.

      Responder

  22. magge

    Yo tengo el último y el de “C Programming” 🙂

    Responder

  23. parrimin

    Gracias por la lista, ya sé qué libros pedir pal cumple!

    Yo el Gang of Four (Design Patterns) lo leí, pero aunque pillé ideas, realmente tenía que volver a consultarlo continuamente, a parte que tenía que leer varias veces algún patrón para entenderlo. Más adelante pillé el Head First Design Patterns. Sí, es como para principiantes, pero qué queréis que os diga, a mí me ha ayudado muchísimo.

    Responder

  24. Morkeste

    Excelentes recomendaciones. Muchas gracias!

    Parrimin: Me apunto el de principiantes XD

    Responder

  25. Rayos! Y por qué la mayoría en inglés 🙁

    Responder

  26. Rudolf Flesch

    Creo que tendrías que agregar “Programming Pearls”, de Jon Bentley, y “Principles of Programming Design”, de Michael A. Jackson

    Responder

  27. tontainas_todos

    Se nota que sois todos unos novatos, pero muy muy verdes, ay… bendita ignorancia… cuando lleveis 10 añitos currando en España, vereis que con el manual “Java 6 SE” de Anaya Multimedia (ese que vale 14 euros) podrás ser incluso jefe de proyecto…y os sobrará mas de medio libro. Os recomiendo un libro “Cárnicas y Pancetas”, edición conjunta de Campofrío y El Pozo, para que vayais saliendo del huevo…

    Responder

  28. jcborras

    GoF out: Peter Norvig ya les dio una buena tunda en:
    http://www.norvig.com/design-patterns/
    “Clean Code” me parece más al día que “Code Complete”.

    Responder

  29. Sin pretenciones

    “Stack Overflow, EL sitio al que dirigirse cuando uno tiene alguna pregunta sobre programación.”

    Junto con Club Delphi, cuando de Iberoamérica se trata, claro está. 🙂

    Responder

  30. jcborras

    Y hecho de menos algo sobre programación concurrente: El PCDP de Ben-Ari, por ejemplo.

    Responder

  31. Oscar

    Falta todo lo relativo a programación no procedural, de la que sirve parqa programar DSPs, FPGAs y cosas así, que no todo es arquitectura VonNewman…

    Yo metería Digital System Designs and Practices, de Ming-Bo Lin

    Responder

  32. otro que pasaba

    Me han pasado el link, y voy a dejar otros dos muy interesantes (en Inglés):

    Write Great Code de Randall Hyde.

    Volume 1: Understanding the Machine
    http://nostarch.com/greatcode.htm

    Volume 2: Thinking Low-Level, Writing High-Level
    http://nostarch.com/greatcode2.htm

    Responder

  33. Armando

    gracias, justo los libros que hacian falta en mi carrera de autodidacta

    Responder

  34. Zeioth

    Pragmatic programmer tiene muy buena pinta, creo que voy a empezar por ahi.

    Responder

  35. Korso

    Yo después de haberlo visto tanto aquí como en coding horror como en otros sitios, al final me he pillado The Pragmatic Programmer a ver qué tal está. También le tengo ganas a Code Complete, pero esperaré hasta que me haya terminado éste.

    Responder

  36. wow, excelente articulo, los comenzare a buscar! Gracias!

    Responder

  37. […] no tienes más que vestirte completamente de blanco (FFFFFF, 11111111, 28), leer alguno de los clásicos, y programar, programar y programar… Etiquetas: celebraciones, conmemoraciones, desarrollo, […]

    Responder

  38. […] Sencillo, no tienes más que vestirte completamente de blanco (FFFFFF, 11111111, 28), leer alguno de los clásicos, y programar, programar y […]

    Responder

  39. muy buena recopilacion de libros

    Responder

  40. lenguaje c

    Responder

  41. G@BS

    Excelente aportacion, acabo de encontrar tu blog y esta genial.

    Sigue asi 🙂

    Responder

  42. aguilucho

    actualmente estoy empezado a aprender a programar. mi aporter para aquellas personas que estan empezando al igual que yo seria “como programar en C/C++” por H.M. Deitel & P.J. Deitel.
    Yo poseo la segunda edicion y me ha ido muy bien.

    Responder

  43. […] aquí y aquí enlazados algunos materiales que he encontrado por el camino en el último tiempo. Soy un […]

    Responder

  44. Perku

    Te falta “Clean Code”

    Responder

    • Perku

      Perdón! Ya he visto que te lo han dicho!

      Responder

  45. Carlos

    alguien tiene el libro “the art of programming computer” en algun formato digital (pdf, mobi), con buena calidad para lectura, ya que todos los libros que me he descargado estan mal escaneados.

    Responder

  46. German

    buena selección!. Uno que no debería entrar en la lista, ya que no es especificamente de programación, pero que todo programador debería leer es “Godel, Escher, Bach, an eternal golden braid”

    Responder

  47. seergeek

    la serie in a nutshell son muy buenos tambien

    Responder

  48. Juan

    .
    .
    .
    Nadie nombró, que es ventajoso conocer el KERNEL…
    .
    .
    .

    Responder

Deja un comentario