Solo lo imprescindible y solo lo probado con el tiempo: para principiantes y profesionales.
Hemos seleccionado libros que no están vinculados a lenguajes de programación, tecnologías o herramientas específicas. Hablan sobre algoritmos y estructuras de datos, patrones de diseño y refactorización, te enseñan a pensar como un programador, te preparan para entrevistas y te ayudan a construir una carrera exitosa.
Calificamos la complejidad de los libros con emojis que van desde uno 🤯 (comprensible incluso para un novato) hasta 🤯 🤯 🤯 🤯 🤯 (no será fácil sin experiencia en programación o entrenamiento especial).
El Programador Pragmático: David Thomas, Andrew Hunt
- Título: El programador pragmático. Edición especial: Viaje a la maestría
- Autores: David Thomas, Andrew Hunt
- Páginas: 352 páginas
- Comprar en: Amazon
Por qué leer: para obtener una idea general del trabajo de los programadores.
Complejidad: 🤯 🤯
Parece que este libro tiene todo lo que un programador necesita: desde cómo ser responsable hasta analizar errores en algoritmos y cifrar datos.
Si discutiéramos todos estos temas de principio a fin, sería una obra inmanejable de 100500 volúmenes, no las 300 páginas de «El Programador Pragmático«. Así que el libro solo brinda una idea general, como un mapa sin detalles.
Notas al margen:
«El Programador Pragmático» amplía tus horizontes, te hace sentir como en casa en la comunidad de desarrolladores. Contiene muchas citas geniales y un sutil humor profesional, por ejemplo:
«Hay un viejo chiste sobre una empresa estadounidense que ordenó 100,000 chips a un fabricante japonés. La especificación de los chips indicaba, entre otras cosas, que los defectuosos debían ser 1 por cada 10,000 chips buenos. El pedido se entregó después de unas semanas y consistía en una gran caja que contenía miles de chips y otra, pequeña, que contenía solo diez chips. Esta caja tenía una etiqueta que decía «Chips defectuosos»: Sería bueno si nuestro control de calidad estuviera al mismo nivel».
Código Limpio: Robert Martin
- Título: Código Limpio: Manual de estilo para el desarrollo ágil de software
- Autor: Robert C. Martin
- Páginas: 464 páginas
- Comprar en: Amazon
Por qué leer: para aprender a notar errores típicos y no cometerlos tú mismo. Por ejemplo, no descuidar el nombramiento de variables, subprogramas y módulos, el formato del código, el manejo de condiciones límite, cosas que por separado parecen triviales, pero juntas arruinan terriblemente el código.
Complejidad: 🤯 🤯
A veces, a los programadores principiantes les parece que mientras el programa funcione, está bien. No hay necesidad de molestarse más con él: no hay razón para pensar cuidadosamente en la estructura de las clases, manejar todas las condiciones límite y mucho menos preocuparse por nombres de variables significativos, comentarios útiles y otros «detalles».
El tío Bob (‘uncle Bob’) cree que la atención a los detalles, la habilidad para distinguir entre buen y mal código y los hábitos de limpieza convertirán a un codificador en un verdadero programador.
Martin y sus coautores muestran con ejemplos cómo diseñar correctamente la arquitectura de una aplicación y escribir código limpio, y al final enumeran los signos de «código maloliente», errores típicos.
En general, para crear una buena aplicación, tienes que trabajar duro, pero luego será más fácil mantenerla tú mismo.
Notas al margen: si cada desarrollador leyera este libro al comienzo de su carrera, el mundo sería mejor y la gente más amable. La mayoría de los consejos de Martin han sido relevantes durante los últimos veinte años y seguramente serán útiles por mucho tiempo más.
Code Complete, Second Edition: Steve McConnell
- Título: Code Complete, Second Edition: A Practical Handbook of Software Construction
- Autor: Steve McConnell
- Páginas: 752 páginas
- Comprar en: Amazon
Por qué leer: para aprender cómo llevar cualquier programa a la perfección. O al menos intentarlo 🙂
Complejidad: 🤯 🤯 🤯
La construcción competente es el secreto del éxito. Esa es la idea principal del autor del libro. Y la construcción incluye planificación, codificación y prueba del programa terminado.
Del libro aprenderás:
- qué métodos de diseño existen;
- cómo mejorar la calidad de los métodos en el código;
- cómo depurar código y cómo mejorarlo (refactorizar);
- e incluso por qué un programador necesita curiosidad.
Notas al margen: si te llevas bien con el inglés, te sugiero que leas el libro tal cual. Entonces no tendrás que adivinar durante mucho tiempo de qué está hablando el traductor. Convéncete tú mismo con una cita de la edición en inglés:
«Un rasgo común de todos los programadores que crean software de alta calidad es el uso de métodos de alta calidad que enfatizan la calidad del software al principio, en el medio y al final del proyecto».
Patrones de Diseño (Design Patterns): Erich Gamma
- Título: Design Patterns: Elements of Reusable Object-Oriented Software
- Autor: Erich Gamma, Ralph Johnson, John Vlissides, Richard Helm
- Páginas: 416 páginas
- Comprar (español) en: Amazon
- Comprar (original inglés) en: Amazon
Por qué leer: para aprender sobre patrones de programación de la fuente original.
Complejidad: 🤯 🤯 🤯 🤯 🤯
El cuarteto de autores, también conocido como la «Pandilla de los Cuatro», no es menos famoso entre los programadores que los «Beatles» en todo el mundo. Y son famosos precisamente porque fueron los primeros en describir en detalle los 23 patrones de diseño principales: mostraron cómo organizar la interacción de clases y objetos para resolver tareas típicas de programación.
Muchos creen que este libro está desactualizado: la primera edición se publicó hace 25 años y desde entonces se han escrito muchos otros libros sobre patrones. Sin embargo, los principios de clasificación, y los propios patrones, siguen siendo relevantes.
Notas al margen: leer el libro de la «Pandilla» es como dominar a Shakespeare en el original: un poco difícil, pero entrena muy bien el cerebro. Además, siempre puedes actualizar el conocimiento adquirido con un libro más simple y más nuevo 🙂
Head First Design Patterns: A Brain-Friendly Guide: Eric Freeman
- Título: Head First Design Patterns: A Brain-Friendly Guide
- Autor: Eric Freeman, Elisabeth Robson, Kathy Sierra, Bert Bates
- Páginas: 638 páginas
- Comprar en: Amazon
- Comprar (nueva versión) en : Amazon
Por qué leer: para dejar de odiar los patrones y finalmente empezar a aplicarlos en la práctica 🙂
Complejidad: 🤯 🤯
Este es el caso cuando más simple no significa peor. En este libro de la serie Head First de la famosa editorial O’Reilly, parece que se ha alcanzado el equilibrio perfecto entre la complejidad de los conceptos explicados y la simplicidad de la presentación del material.
Crear un programa para trabajar con datos de una estación meteorológica o escribir código para calcular el costo de una bebida en una cafetería Starbuzz: con tales tareas lúdicas, los autores explican cómo aplicar los principales patrones de diseño y enseñan a construir la arquitectura correctamente, observando todos los principios importantes. Por ejemplo, abrir las clases para extensión pero cerrarlas para modificación.
Notas al margen: después de leer este libro, no solo comprenderás los patrones, sino que durante algún tiempo te convertirás en su ardiente fanático y asustarás a tus colegas tratando de usar un patrón incluso para la tarea más pequeña 🙂
Patterns of Enterprise Application Architecture: Martin Fowler
- Título: Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series (Fowler))
- Autor: Fowler Martin
- Páginas: 560 páginas
- Comprar en: Amazon
Por qué leer: para aprender cómo se resuelven los problemas de aplicaciones grandes y muy grandes.
Complejidad: 🤯 🤯 🤯 🤯
Una vez más sobre patrones, pero sobre otros diferentes: patrones de alto nivel. Las aplicaciones empresariales automatizan procesos comerciales complejos y a menudo trabajan con volúmenes de datos bastante grandes. Al mismo tiempo, por regla general, se integran e intercambian datos con otros sistemas. Todo esto genera dificultades y problemas específicos.
De qué capas puede constar una aplicación, cómo se representan los datos en la web, cómo administrar el estado del sistema: estas son solo algunas de las decenas de preguntas que responde este libro.
En la primera parte, hay una breve descripción general de los problemas típicos, y en la segunda, Fowler cuenta cómo elegir una solución arquitectónica. El autor ofrece más de 40 enfoques, ilustrándolos con ejemplos de la vida real y fragmentos de código.
Notas al margen: han pasado más de 20 años desde la primera edición del libro, han aparecido nuevas herramientas y tecnologías, pero los problemas típicos de las aplicaciones empresariales no han disminuido mucho, por lo que el libro sigue siendo relevante.
Presos de La Tecnología: Alan Cooper
- Título: Presos de La Tecnología: Por Que Los Productos Tecnológicos Nos Vuelven Locos y Como Podemos Recuperar La Cordura
- Autor: Alan Cooper
- Es difícil encontrarlo, tal vez tengas suerte. En inglés sí lo encuentras.
- Páginas: 261 páginas
- Comprar en: Amazon
- Comprar (inglés) en: Amazon
Por qué leer: para entender mejor al público objetivo, qué necesita, y no discutir en vano con los colegas diseñadores 🙂
Complejidad: 🤯 🤯
Arquitectura flexible, algoritmos elegantes, patrones y principios de nomenclatura: con todo esto, el programador a veces olvida que el software no solo debe ser de calidad, sino necesario, útil y comprensible para los consumidores.
Es bueno si la empresa tiene diseñadores UX/UI que analizan las necesidades de los usuarios, sus escenarios de trabajo y diseñan una interfaz competente. Pero a veces, los mismos programadores son responsables de esta parte del trabajo.
Si te tomas el diseño con demasiada frivolidad, el programa puede resultar innecesario para nadie. El autor confirma esto con muchas historias sobre el fracaso de pequeñas empresas y grandes corporaciones. Vale la pena leer a Cooper al menos para no ser el culpable de otro de estos fracasos.
Notas al margen: el libro no te quitará mucho tiempo, pero te ahorrará tiempo cada vez que necesites hacer un formulario funcional según un breve documento técnico, sin la ayuda de un diseñador y ayer.
Art of Computer Programming, Volume 4B: Donald Knuth
La tercera (actual) edición en inglés tiene siete volúmenes.
- Título: Art of Computer Programming
- Autor: Knuth Donald
- Páginas: 714 páginas
- Comprar Volumes 1-4A en: Amazon
- Comprar Volume 4B en: Amazon
- Comprar versión español (Algoritmos Fundamentales: Vol.1): Amazon
Por qué leer: para mejorar en matemáticas computacionales y análisis de algoritmos.
Complejidad: 🤯 🤯 🤯 🤯 🤯
El trabajo más clásico y fundamental en nuestra selección: un trabajo de varios volúmenes de un gurú mundialmente reconocido en el campo de la programación, autor de 19 monografías y más de cien artículos.
El trabajo es tan fundamental que en el primer libro hay más matemáticas que programación: inducción matemática, potencias y logaritmos, matrices y determinantes, todo eso. Se encuentran tareas como «probar una afirmación» o «encontrar un reemplazo simple para una fórmula compleja»: Knuth cree que antes de usar las soluciones listas de otros, es necesario comprender los conceptos básicos.
Luego, en este y los siguientes volúmenes, el autor enseña a analizar y evaluar algoritmos, da «soluciones de oro» a problemas clásicos (ordenamiento, búsqueda, recorrido de árboles) y compara qué tiene de bueno y malo cada uno. Todo esto ayuda a elegir estrategias computacionales óptimas en proyectos reales.
Notas al margen: no es fácil de leer, pero es necesario. Especialmente porque los clásicos de la algoritmia y la complejidad computacional todavía se preguntan en entrevistas serias. E incluso el primer volumen termina con una cita de Bill Gates:
«Si pudiste leer esto hasta el final, definitivamente debes enviarme tu currículum».
¿Lo intentarás? 🙂
Algoritmos. Guía Ilustrada para Programadores y Curiosos: Aditya Y. Bhargava
- Título: Algoritmos. Guía ilustrada para programadores y curiosos
- Autor: Aditya Y. Bhargava
- Páginas: 256 páginas
- Comprar en: Amazon
Por qué leer: para entender que los algoritmos no son aburridos en absoluto. Y también para entender la evaluación de su complejidad, si después de Knuth aún no entiendes cómo determinarla.
Complejidad: 🤯 🤯
Este libro también trata sobre algoritmos, pero se lee como una historia fascinante. En un lenguaje sencillo, el autor escribe sobre grafos, ordenamiento y búsqueda, algoritmos voraces y programación dinámica, con muchos ejemplos.
Si te interesa cómo funciona el algoritmo de recomendación de Netflix o cómo el bot de búsqueda de Google entiende si una página web ya ha sido indexada, lee este libro.
Notas al margen: ¡ten cuidado! Al leer el libro, puedes desarrollar un interés serio en la programación dinámica, y entonces tendrás que buscar un trabajo donde sea relevante. El software de aplicación común y muchas áreas como las finanzas quedarán fuera.
Introduction to Algorithms: Thomas Cormen
- Título: Introduction to Algorithms, third edition
- Autores: Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein
- Páginas: 1320 páginas
- Comprar en: Amazon
Por qué leer: nunca hay demasiados libros sobre algoritmos 🙂 Hay muchos algoritmos en sí mismos, y no es fácil entenderlos a la primera (está bien, tampoco a la segunda y tercera).
Así que es mejor absorber de todas las fuentes: un libro explicará mejor la clasificación, otro los algoritmos voraces, un tercero colocará estructuras de datos complejas en tu cabeza 🙂
Complejidad: 🤯 🤯 🤯
El libro de Cormen y compañía es casi tan completo como la obra de Knuth: se puede usar como referencia para las principales estructuras de datos y algoritmos. Solo que aquí hay menos matemáticas y más ejemplos prácticos. E «Introduction to Algorithms» es más universal, porque no es necesario conocer un lenguaje de programación específico: los ejemplos están escritos en pseudocódigo.
Notas al margen:
Con cada nueva edición, los autores actualizan y complementan el material: por ejemplo, en la tercera aparecieron capítulos sobre los algoritmos multihilo que son relevantes hoy en día. Así que busca la versión más reciente.
The Mythical Man-Month: Frederick Brooks
- Título: Mythical Man-Month, The: Essays on Software Engineering, Anniversary Edition
- Autor: Brooks Frederick
- Páginas: 336 páginas
- Comprar en: Amazon
Por qué leer: para aprender sobre el ciclo de vida de un proyecto de software, entender por qué los plazos se incumplen con tanta frecuencia en TI y cómo combatirlo.
Complejidad: 🤯 🤯 🤯
Este libro será útil para:
- el programador, a quien a menudo se le pide que estime los plazos (para que dé una estimación más precisa);
- y el gerente del proyecto, que tortura a los programadores con tales preguntas (para hacer planes adecuados).
Pero el libro no se trata solo de estimaciones. Esta guía ha estado en las listas de los que deberías leer durante más de 40 años. Enseña a resolver problemas que los equipos de proyecto todavía enfrentan: estimaciones poco realistas, dificultades debido al crecimiento del equipo, etc.
Notas al margen: recuerda que el libro fue escrito hace mucho tiempo (los dinosaurios en la portada claramente no están ahí por nada). Y si estás pensando seriamente en una carrera como gerente de proyecto, lee sobre metodologías ágiles. Además, el autor cambió de opinión sobre algunos temas, lo que reconoce en el decimonoveno capítulo de la última edición.
Refactoring: Martin Fowler
- Título: Refactoring. Improving the Design of Existing Code
- Autor: Martin Fowler
- Páginas: 448 páginas
- Comprar en: Amazon
Por qué leer: para entender cuándo aplicar la refactorización, y lo más importante, cómo hacerlo sin desmoronar todo el proyecto.
Complejidad: 🤯 🤯 🤯
La refactorización es, en esencia, mejorar el proyecto después de que se haya escrito el código. Sin embargo, el credo de trabajo de muchos programadores (y sus jefes) es: «Si funciona, no lo toques«. No quieren gastar dinero y tiempo en cambiar el programa si el resultado no es visible desde el exterior. Así es como aparecen proyectos con numerosos parches y remiendos en lugares críticos, acumulando deuda técnica. Con el tiempo, todo esto se vuelve inviable.
Fowler escribe sobre problemas típicos en el código y cómo solucionarlos: paso a paso, comenzando con la escritura de pruebas y terminando con la mejora secuencial del código fuente.
Notas al margen: este es uno de esos libros que dan forma a la conciencia del desarrollador. Veredicto: leer y releer si es posible.
Working Effectively with Legacy Code: Michael Feathers
- Título: Working Effectively with Legacy Code, 1/e
- Autor: Michael C. Feathers
- Páginas: 456 páginas
- Comprar en: Amazon
Por qué leer: para corregir los errores de otros y no cometer los tuyos.
Complejidad: 🤯 🤯 🤯 🤯
El adjetivo en el título sería mejor dejarlo sin traducir: legacy-code. Porque es en esta forma que el concepto es familiar para cualquier programador profesional. ¡Familiar hasta el dolor! ¡En el sentido literal! Evoca en la memoria sábanas de código enredado, intentos agonizantes de entender qué está pasando allí, y una impotencia maliciosa, porque hacer una corrección rápida o agregar una característica en tal desorden es una tarea con un asterisco. En general, sobre noches sin dormir y un ojo tembloroso 🙂
Si los autores del «legacy» hubieran realizado la refactorización a tiempo siguiendo los preceptos de Martin Fowler (hablamos de su libro un poco más arriba), los herederos no habrían tenido que hacer una limpieza general en el «vertedero municipal». Pero en realidad, los programadores a menudo tienen que hurgar en el código de otras personas y cambiarlo. Así que Michael Feathers escribió un libro sobre cómo hacerlo de manera eficiente y con menos sufrimiento.
Notas al margen: los profesionales pueden leer el libro directamente desde el segundo capítulo. Está escrito en forma de respuestas a preguntas típicas que surgen durante la reorganización del código:
- qué hacer si la clase es demasiado grande y ya da miedo expandirla más;
- cómo introducir una nueva propiedad;
- qué hacer cuando las dependencias de bibliotecas de terceros se han vuelto terriblemente numerosas.
Además de las soluciones que los autores desarrollaron en la lucha contra el código de terceros, el libro describe cómo es mejor organizar la refactorización y por qué se necesitan todos estos cambios en absoluto.
El Limpiador de Código: Robert Martin
- Título: El limpiador de código: Código de conducta para programadores profesionales
- Autor: Robert C. Martin
- Páginas: 232 páginas
- Comprar en: Amazon
Por qué leer: para conocer qué habilidades, además de las técnicas, necesita un programador y cómo desarrollarlas.
Complejidad: 🤯
Este es el segundo libro de Robert Martin en nuestra selección. Muchas ideas en él parecen triviales. Por ejemplo, el consejo «si estás cansado o no puedes concentrarte, no escribas código» o el capítulo sobre la necesidad de ser responsable de tus palabras y decisiones.
Algunos consejos parecen discutibles. Por ejemplo, «en cualquier situación incomprensible, practica la programación en parejas«. Otros, como la afirmación de que «cada programador debe ser capaz de trabajar con redes de Petri«, simplemente están desactualizados.
Pero estos pequeños detalles no impiden que el libro sirva como una guía sensata para un programador profesional en situaciones en las que necesita evaluar la complejidad de una tarea o encontrar un compromiso con el gerente, para explicar que no se puede obtener un proyecto en un día si se necesitan dos semanas para implementarlo.
Notas al margen: el libro se basa en historias de la vida del tío Bob, y bastante reales. Así que los lectores aprenderán cómo se escribían y depuraban los programas antes: tarjetas perforadas, cintas magnéticas, todo eso.
Think Like a Programmer: Anton Spraul
- Título: Think Like a Programmer: An Introduction to Creative Problem Solving
- Autor: V. Anton Spraul
- Páginas: 256 páginas
- Comprar en: Amazon
Por qué leer: para aprender enfoques simples para resolver problemas complejos.
Complejidad: 🤯
Programar no es solo aprender un par de docenas de palabras clave y aprender a combinarlas correctamente. Los desarrolladores necesitan ser capaces de pensar de manera no convencional, encontrar soluciones a tareas creativas complejas y solo entonces implementarlas en código.
Este libro tiene muchos acertijos con soluciones: hay clásicos como cruzar un lobo, una cabra y una col a través de un río, y hay grupos enteros de tareas, por ejemplo, fácilmente resolubles recursivamente o en un procesamiento típico de arreglos.
Spraul enseña a pensar como un programador, a usar tus fortalezas y debilidades, a encontrar analogías y necesariamente hacer un plan antes de empezar a hacer algo.
Notas al margen: el autor ha estado enseñando programación durante muchos años y, aparentemente, lo hace bien. El libro está escrito de una manera tan accesible que incluso es adecuado para un niño que recientemente comenzó a aprender programación.
Cracking the Coding Interview: Gayle Laakmann McDowell
- Título: Think Like a Programmer: An Introduction to Creative Problem Solving
- Autor: V. Anton Spraul
- Páginas: 256 páginas
- Comprar en: Amazon
Por qué leer: para prepararse para una entrevista para un puesto de desarrollador, y al mismo tiempo sistematizar conocimientos, ver y eliminar posibles lagunas.
Complejidad: 🤯 🤯
Este es el «+1» y, posiblemente, el libro más práctico de nuestra selección. Recopila 189 preguntas de las que se hicieron a los candidatos en entrevistas en Google, Microsoft, Amazon y otras grandes empresas de TI. Por supuesto, con respuestas.
También se discuten temas de los candidatos:
- ¿Cómo hacer el currículum perfecto?
- ¿Cómo responder a preguntas de comportamiento: sobre los problemas que enfrentó, sus fortalezas y debilidades?
- ¿Cómo comportarse si recibió una oferta de trabajo o un rechazo?
Gayle analiza los errores típicos y las estrategias para prepararse para una entrevista, e incluso habla sobre el trasfondo de algunas empresas, por ejemplo, cuántas y qué etapas debe pasar un candidato.
Notas al margen: este libro no ayudará solo en caso de una completa falta de conocimientos básicos. En todos los demás casos, peinará y vestirá tanto su currículum como sus respuestas para un empleador potencial.
Fundamentos de Programación: Luis Joyanes Aguilar
- Título: Fundamentos de Programación: Algoritmos, Estructuras de Datos y Objetos
- Autor: Luis Joyanes Aguilar
- Páginas: 744 páginas
- Comprar en: Amazon
Por qué leer: Para adquirir una base sólida en programación, desde los algoritmos hasta la programación orientada a objetos.
Complejidad: 🤯 🤯 🤯
El libro abarca desde los principios básicos de la algoritmia hasta las técnicas avanzadas de programación orientada a objetos. Se exploran conceptos como estructuras de control, funciones, arreglos, punteros y estructuras de datos fundamentales. El autor utiliza ejemplos en pseudocódigo y lenguajes de programación populares para ilustrar los conceptos.
Notas al margen: «Fundamentos de Programación» es un libro completo y bien estructurado que sienta las bases para una carrera exitosa en el desarrollo de software, y es una excelente referencia para cursos universitarios y autodidactas.
Momento de Reflexión
Todos estos son los mejores libros y, sin duda, útiles. Pero si de repente volviera al pasado para aconsejarme a mí misma los mejores de los mejores, estos serían:
- «Código Limpio» de Martin;
- «Refactoring» de Fowler;
- «Head First Design Patterns» de Freeman y Robson;
- «Algoritmos» de Bhargava
- y «Cracking the Coding Interview» de McDowell (especialmente si estuvieras buscando trabajo).
Estos libros me fueron de mayor utilidad. Están llenos de consejos útiles, escritos en un lenguaje accesible y ayudan a mejorar la calidad del código en cualquier lenguaje de programación.
Si aún no has leído nada de nuestra selección, comienza con estos cinco. Y nos vemos en los comentarios del código 😉