Cuáles son los libros de lectura obligatoria para los ingenieros de software?

Aquí voy a suponer que estamos hablando de un ingeniero de software que logró la competencia técnica a través de la escuela, bootcamp o cualquier otra oportunidad de aprendizaje.

Los algoritmos son realmente importantes y el libro "Introducción a los algoritmos" es una lectura obligada. Creo que tener una sólida comprensión del diseño de software y del diseño orientado a objetos también es fundamental, y mi biblia sigue siendo el libro "Design Patterns: Elements of Reusable Object-Oriented Software". Sus ejemplos en Smalltalk no lo hacen el más fácil de leer hoy en día, sin embargo, no conozco ningún otro libro con tanta profundidad y amplitud sobre el tema.

He conocido a muchos ingenieros que se inician en el trabajo, y he notado algunas lagunas a lo largo de los años, por lo que me gustaría sugerir libros para cada una de estas áreas.

Los nuevos ingenieros tienden a no entender la concurrencia sin importar el lenguaje. El concepto de ejecutar múltiples hilos en paralelo mientras se proporciona el nivel adecuado de sincronización entre ellos no es fácil de entender. Personalmente, he aprendido mucho leyendo "Java Concurrency in Practice", ya que tengo experiencia en Java. También hay una buena sección sobre concurrencia en "Effective Java", la lectura obligada sobre cómo codificar adecuadamente en Java.

La ciberseguridad es finalmente un tema candente hoy en día. Por desgracia, los ingenieros noveles tienden a no conocer los conceptos de seguridad aplicables a su código. Un buen punto de partida es leer la lista OWASP top 10 y profundizar en cada vulnerabilidad de la aplicación. Soy un gran fan de "24 Deadly Sins of Software Security: Programming Flaws and How to Fix Them"

Los nuevos ingenieros tienden a centrarse en la codificación. Creen que la codificación es lo que importa, y quieren producir un buen código rápidamente, a veces confiando en un código difícil de leer porque pueden escribirlo de forma más concisa. Sólo hay dos problemas con esta forma de pensar: todos los ingenieros de software crean errores y los ingenieros de software trabajan mejor en equipo. La calidad es importante, pero también lo es la capacidad de mantenimiento. Personalmente, me gustan los libros "Working Effectively with Legacy Code" que hablan de las pruebas y de la necesidad de probar para mejorar el código. "Clean Code: A Handbook of Agile Software Craftsmanship" aborda el tema de la mantenibilidad, a veces con un punto de vista extremo, lo que lo convierte en un gran libro para leer y discutir en equipo.

Los nuevos ingenieros, especialmente los que salen de la universidad, pueden tener dificultades para adaptarse al lugar de trabajo y a su nuevo empleo. Esto es realmente cierto para cualquier ingeniero, en realidad cualquier persona, comenzando un nuevo trabajo también. Hay un gran libro "Los primeros 90 días: Proven Strategies for Getting Up to Speed Faster and Smarter" que me enseñó múltiples conceptos sobre cómo empezar en un nuevo trabajo, y en particular la necesidad de estructura. La estructura es genial. Es reconfortante, especialmente en un entorno nuevo. Consigo resultados consistentes aplicando la misma receta, como cuando hago un pastel con mi hija. Cuando empecé a trabajar en Wayfair hace once meses en el equipo de aplicaciones nativas, opté por hacer preguntas bastante genéricas pero consistentes a mi llegada para conocer el terreno. Estas preguntas no sólo me dieron una idea de lo que estaba pasando, sino que me dijeron mucho sobre las personas con las que me reunía. Me dediqué a mi misión de investigación durante aproximadamente un mes utilizando el mismo cuestionario en cada 1:1, y empecé a hacer una lista de mis áreas de enfoque en el primer día.

He estado en el desarrollo de software durante más de veinte años, leyendo libros de liderazgo durante los últimos diez años, así que siéntase libre de preguntarme acerca de los libros de liderazgo si prefiere lecturas más recientes!