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. 🙂

90 pensamientos en “Los 10 libros que todo programador debería leer, sin excusas”

  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.

    1. 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.

      1. ¡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.

  2. 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

    1. 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.

      1. 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.

    1. 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…

          1. 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

      1. 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.

      1. 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…

    1. 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.

  3. 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 !

    1. 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.

  4. Pingback: Los 10 libros que todo programador debería leer, sin excusas

  5. Pingback: GreatTweet.com - Lista de los 10 libros sobre programación que todo desarrollador ...

  6. 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.

    1. “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.

      1. 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.

  7. 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

  8. 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.

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

    Sin estos, no se puede trabajar en condiciones

  10. 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.

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

  12. 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…

  13. “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á. 🙂

  14. 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

  15. 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.

  16. Pingback: ¡Feliz día del programador!

  17. Pingback: Feliz día del programador | EL BURRO GEEK

  18. 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.

  19. Pingback: ¿Se puede volver a amar la programación? « La senda del Ronin

  20. 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.

  21. 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”

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.