Los mejores libros sobre desarrollo de software

En realidad el post debería titularse «Unos cuantos libros que me han gustado», pero bueno, todos sabemos cómo funciona eso de conseguir visitas poniendo títulos grandilocuentes.

Me han pedido unas cuantas veces que recomiende libros sobre desarrollo y, aunque suelo adecuar la recomendación al que me la pide, creo que no está de más hacer una pequeña lista con los libros que más me han gustado, influenciado o enseñado algo en determinados momentos. Es ésta una lista completamente subjetiva, así que no te sientas mal si alguno te parece horrible o tu libro favorito no aparece. Estaré encantado de recibir sugerencias en los comentarios.

Si estás esperando libros sobre una tecnología concreta, lo siento, son todos libros genéricos que tratan más de explicar principios que de proporcionar recetas mágicas para “Ser productivo en el lenguaje X en 21 días”. Tampoco esperes libros muy recientes, la mayoría son libros que leí hace casi 10 años, pero justo por eso creo que tienen más valor: si todavía me acuerdo de ellos será por algo.

Y sin más preámbulo, aquí está la lista:

Pragmatic programmer: from journeyman to master de Andrew Hunt y David Thomas

Probablemente el libro que más me influenció en su momento. Explica cómo enfocar de forma pragmática (palabra que tuvo su hype pero que empieza a estar de capa caída en algunos círculos) todo el desarrollo de software, desde la elección de herramientas, la forma de escribir el código, la gestión de errores, la captura de requisitos, el diseño. Muy recomendable si quieres dar el salto de «escribo código más o menos profesionalmente» a «quiero ser bueno en esto de desarrollar software».

Working Effectively with Legacy Code de Michael Feathers

Otro libro que me gustó mucho. Cuando lo leí ya tenía conocimientos sobre refactorización y testing, pero en este libro se explica muy bien cómo aplicar esas ideas para trabajar con sistemas ya existentes diseñados de aquella manera. Teniendo en cuenta que legacy es el código que escribiste antes de ayer, merece la pena conocer las técnicas que expone el libro.

Refactoring to Patterns de Joshua Kerievsky

Los patrones de diseño son una cosa sobrevalorada en nuestro mundo, pero eso no quita que tengan su valor. Es un buen libro que, junto con el de Working Effectively with Legacy Code, ayuda mucho a evitar complicarnos la vida innecesariamente. Cuando tienes herramientas para mejorar un diseño (y estos dos libros te las dan), es más fácil evitar la sobreingeniería y el exceso de análisis, porque sabes que puedes implementar una primera solución y luego mejorarla de una forma sensata.

Release It!: Design and Deploy Production-Ready Software de Michael T. Nygard

Me pareció interesante porque muchas veces tendemos a centrarnos en el desarrollo de la aplicación sin pensar mucho en lo que pasará cuando entre en producción, y este libro expone una serie de casos reales en los que hubo problemas en producción y cómo se podrían haber evitado con un diseño mejor. El hecho de mostrar casos reales ayuda a conectar mejor las «buenas prácticas» que lees por ahí, con las consecuencias directas de no aplicarlas. Está entre esos libros que te hacen dar el salto de pensar como un programador que pica código a pensar como alguien que está construyendo un producto que será usado en la vida real.

Domain-Driven Design: Tackling Complexity in the Heart of Software de Eric Evans

Viéndolo en perspectiva, este libro ha hecho casi tanto mal como bien, pero a mi me resultó muy útil porque me abrió los ojos a una nueva forma de desarrollar, centrándome más en un modelo de comportamiento que en un modelo de datos. Conforme avanza el libro se va haciendo más denso, y tal vez sea ese uno de sus problemas: muchos se han quedado con el principio (ya sabes, entidades, repositorios…) y se han perdido lo más importante.

Patterns of Enterprise Application Architecture de Martin Fowler

El título da un poco de miedo porque patrones, arquitectura y empresarial suena a «consultora líder en el sector con presencia internacional», pero la verdad es que el libro contiene una buena explicación de conceptos que hay manejar para comprender distintos tipos de arquitecturas y diseños a la hora de implementar aplicaciones. Son todos ideas muy genéricas (ORM, MVC, Pub/Sub, Domain Model, Transaction Script) y se tratan de forma somera, pero es importante conocerlas para tener alternativas a la hora de diseñar aplicaciones.

The Mythical Man Month: Essays on Software Engineering de Frederick P. Brooks

Un clásico entre los clásicos. Son varios ensayos sobre desarrollo de software de los que seguro que has oído citas, como «no hay balas de plata» o «añadir personal a un proyecto retrasado sólo ayuda a retrasarlo más». En general ha aguantado bien el paso del tiempo (la primera edición es de 1975) y merece la pena leerlo aunque sólo sea para darse cuenta de que, por mucha nube y muchas moderneces que oigamos, llevamos 40 años tratando de resolver los mismos problemas.

Operating Systems: Internals and Design Principles de William Stallings

Uno de los pocos libros que me compré durante la carrera. No es nada barato, pero explica muy bien conceptos sobre sistemas operativos. Procesos, hebras, gestión de memoria, entrada/salida, mecanismos de concurrencia… Son conceptos que muchos sólo conocen a través de las APIs del lenguaje que suelen usar, y en este libro se explican desde un punto de vista mucho más genérico, por lo que te permite hacerte una idea mejor de cómo funciona todo y cómo afecta a las aplicaciones que desarrollas.

Beautiful Code: Leading Programmers Explain How They Think de Greg Wilson

Porno, este libro es porno puro. Se basa en analizar código real en distintos lenguajes para masturbarse apreciar su belleza. Además del mero placer de ver código bien escrito, me gustó porque analiza implementaciones en distintos lenguajes a problemas de muy diversa índole, desde implementar un matcher de expresiones regulares en C hasta partes de un ERP en Python.

Refactoring: Improving the Design of Existing Code de Martin Fowler

Es EL libro sobre refactorización. Si tengo que ser sincero, no me aportó gran cosa cuando lo leí porque ya sabía bastante sobre el tema, pero si estás empezando en el mundo de desarrollo, es importante dominar las técnicas de refactorización y este libro es un catálogo muy completo para ello.

Code Complete: A Practical Handbook of Software Costruction de Steve McConnell

Al igual que Refactoring: Improving the Design of Existing Code, este es un libro que no me ayudó mucho por el momento en el que lo leí, pero si estás empezando merece la pena leerlo porque explica muchos conceptos básicos que debes tener en cuenta a la hora de escribir código de calidad y, en general, para desarrollar software. Si ya tienes cierta experiencia en el desarrollo, yo me inclinaría más por Pragmatic programmer: from journeyman to master porque hace menos hincapié en la parte de código (nombrado de variable, estructuras de control, etc.), pero si estás empezando, este libro es una muy buena opción porque engloba conceptos de los que te enseñan en primero de carrera y que no viene mal recordar.

Eso es todo…

… de momento. Tengo la intención de mantener el post actualizado con libros que me vayan gustando y crea que pueden ser útiles.

Por supuesto, si tienes alguna sugerencia, los comentarios están abiertos como siempre a todo tipo de opiniones.

17 comentarios en “Los mejores libros sobre desarrollo de software

  1. Estoy de acuerdo contigo, todos estos libros son una pasada y la mayoría de ellos deberían de ser de obligada lectura si te dedicas al desarrollo profesionalmente. No es que tengas que leerlos todos antes de empezar a trabajar, pero creo que uno debería leerlos durante su carrera profesional.

    El que más me impactó a mí de la lista fue «The pragmatic programmer». Fue también uno de los que leí primero. Quizá sea por eso. Pero despertó en mí muchos aspectos para avanzar en mi carrera.

    Si quieres alguna recomendación, recientemente he leído The passionate programmer, de Chad Fowler. Está muy en la línea de «The pragmatic programmer», y me ha gustado bastante. Se puede leer bastante bien.

    De la lista que expones en tu post, echo de menos alguno de Robert C. Martin: «Clean code» o «The clean coder». Cualquiera de los dos está muy bien. Hace tiempo que los leí, así que ahora mismo no me atrevería a decidirme por uno de los dos.

  2. Gracias por la recomendación, me la apunto :-)

    Lo de Robert C. Martin, lo pensé mientras elegía los libros para la lista, pero la verdad es que aunque he leído muchos artículos suyos y he visto unas cuantas charlas, no me he leído ninguno de sus libros y prefería hacer recomendaciones sólo de libros que me hubiese leído de verdad.

  3. Para mi, de los libros más aburridos que uno pueda leer. Mismamente (y como me pasa siempre) he dicho «venga, vamos a ojear Beautiful Code…» y efectivamente, una oda leeeeeeenta y repetitiva sobre lo maravilloso de dejar un espacio entre la variable y símbolo igual… :P

    A mi siempre me han gustado los libros de algoritmos, sin inútiles circunloquios; pero oye, sobre gustos no hay nada escrito!!!

  4. A lo mejor hablamos de distinto libro (o mi memoria falla mucho), pero precisamente Beautiful Code no habla mucho de ese tipo de cosas y trata más sobre analizar código real, explicar los algoritmos usados, decisiones de diseño, etc. No es de los que se centran en «pon un nombre bonito a la variable y escribe un comentario encima».

    Pero vamos, como bien dices, sobre gustos… ;-)

  5. Creo que sí hablamos del mismo libro y al vuelo

    https://books.google.es/books?id=gJrmszNHQV4C&lpg=PP1&hl=es&pg=PA262#v=onepage&q&f=false

    «For example, let’s look at the LU decomposition subroutine SGBTRF, which is in the second level of subroutines. To save space, I removed the initial comments in the header and other excepts that I do not directly discuss…

    …Again, the subroutine starts with argument verification and then proceeds to the problem solution. This is followed by an optimization check, which looks at the problem size to determine whether it can be solved in the «cache» arrays WORK13 and WORK31, or whether it needs to be sent to a lower level for more complicated operations. This is an excellent example of code that is built realistically, for a computer with inherent limitations. The work array can be adjusted for the standard memory of the computer that is solving the problem; in problems with a small enough size, this can prevent performance penalties from possible paging. Problems above that size are so large that that the performance penalty cannot be avoided.»

    ZZZZZzzzzzz…… XD XD XD

    Ya digo, si realmente el código merece la pena, con unos pocos apuntes sobre la solución adoptada, *PARA MI*, es suficiente. Este regodeo explanatorio sobre lo evidente hace que en lugar de 100 pág tenga 620… ¡siempre en mi opinión!.

  6. Hola Juan,

    ¿Sabes si alguno de esos libros esta en castellano?.

    Aprovecho y dejo mi pequeña aportación:
    – Clean code: A Handbook of Agile Software Craftsmanship
    – Patrones de Diseño – Erich Gamma

  7. Grcias por la aportación Ion. El de Design Patterns de la GoF es otro clásico entre clásicos, aunque no lo he incluído en la lista porque la verdad es que no lo he leído :-)

    Sobre lo del idioma, lo cierto es que no lo sé. Todos me los leí en inglés, así que no sé si hay ediciones en castellano, pero no suele fácil encontrar este tipo de libros en castellano.

  8. GABRIEL300487 dijo:

    Saludos.
    Me parece interesante la selección y el hecho de que mencionas que no son recientes.
    La reseña que haces del libro «Beautiful Code» me parece interesante, ya que al no ser un profesional desde hace tiempo he tenido un problema existencial cuando hago mis programitas, en lo personal me gusta complicarme la vida al programar ya que me gusta que si algo se puede hacer en en una linea de codigo para que hacerlo en varias y esto me ha generado una incertidumbre a la hora de saber si esto afecta el rendimiento de los programas (cosa que es sin importancia ya que los programas que hago son tan básicos que hasta el procesador del celular lo hace XD) pero la cuestión es que si sigo aprendiendo no se si esta formación afecte el futuro desempeño de mis programas, como dije me gusta complicarme la vida porque no creo nunca llegar a un nivel tan elevado como para que esto sea una preocupación real, pero así es como soy y es una de las cosas que no puedo cambiar XD.

    Quien sabe si entienda las cosas que hay en estos libros, pero por lo menos me darán mas interrogantes que me motivaran a buscar mas conocimiento.

    Gracias y espero seguir leyendo tus post.

  9. Hola Gabriel,

    Beautiful Code es un libro entretenido, pero contestando también tu comentario en el otro post (el de las 5 cosas…), yo te recomendaría leer el de Pragmatic Programmer. Me parece un libro muy bueno para casi todos los niveles y merece la pena.

    Un saludo,

    Juanma

  10. carem reyes dijo:

    Me parece interesante, lo que encontré en éste post. La verdad tuve curiosidad, sobre este tema y me ayudó muchísimo. Felicidades a su creador, siga adelante.

  11. Frankelin pichardo dijo:

    Primeramente muchas gracias Por tomarse su tiempo y brindarnos Estas sugerencias Pero mi Pregunta seria que estos libros se pueden dar a seguir osea se pueden leer inclusive si no Tienes mucha experiencia en el aspecto de programacion? Porque en mi caso me llama mucho la atencion aprender el arte de programacion Pero se puede decir que Ahora Es que Estoy entrando al mundo de programming.

  12. Hola Frankelin,

    La verdad es que ninguno es un texto introductorio como tal. Si no conoces nada de programación, tal vez haya libros mejores para empezar (aunque no conozco mucho ese área).

    Un saludo,

    Juanma

  13. Hola! Buena lista de libros…

    Añadiría uno sobre DDD:

    Implementing domain-driven design, de Vaughn Vernon.

    Me parece bastante bueno y práctico, y por lo que dicen menos denso que el de Eric Evans.

    Saludos.

  14. Marta Alvarez dijo:

    Hola Juan, soy Marta y quisiera que me recomendaras libros preferiblemente en Español para aprender a programar, ya me gradúe de una Carrera, muy diferente a programación y demás, pero en verdad tengo muchas ganas de aprender a desarrollar por mi cuenta ¿ sin tener que hacer una carrera de nuevo.

Comentarios cerrados.