20 libros fundamentales para un informático
Acabo de hacer una lista con 20 libros que a mi juicio no pueden faltar en la estantería de un ingeniero técnico informático. La lista es totalmente subjetiva, así como los comentarios en las descripciones. A primera vista veo que se me ve mucho el plumero porque me he centrado bastante en las comunicaciones y en los entornos UNIX y como podéis ver no incluyo ni un solo libro relacionado con las matemáticas o la física ya que siempre he pensado que en la carrera no se debe de hacer tanto hincapié en esos campos. Si habéis leído algunos de los libros, os agradecería que comentaseis algo sobre ellos. ¿Que otros libros añadiríais? ¿Cuales quitaríais? ¿Que os parece mi elección?
ACTUALIZACION I: He añadido 5 libros más que habeis comentado por aquí, con sus portadas y descripciones, y una lista con casi todos los que han salido en la discusión de Barrapunto.
Título: The Art of Computer ProgrammingAutor: Donald E. Knuth
Editorial: Addison Wesley
Descripción: Es “la biblia” de la algoritmia. Knuth ha dedicado toda su vida al estudio de algoritmos y hace en sus 3 libros un profundo análisis sobre sus posibles implementaciones y su eficiencia, dándole en ocasiones un toque de humor al asunto. Son 3 tochos infumables, pero fundamentales para los que pretendan hacer las cosas de la manera más eficiente posible.
Título: Fundamentos de Algoritmia
Autor: Gilles Brassard, Paul Bratley
Editorial: Prentice Hall
Descripción: Es el complemento ideal para los libros de Knuth ya que para entenderlos es imprescindible leer este libro. Hace una introducción al mundo del diseño y análisis de algoritmos con un lenguaje asequible para los novatos.

Título: Algoritmos + Estrucutras de Datos = Programas
Autor: Niklaus Wirth
Editorial: Prentice Hall
Descripción: Es el clásico de las estructuras de datos. Está escrito por Niklaus Wirth, el suizo que estuvo al frente del diseño de lenguajes de programación como Algol W, Pascal, Modula-2, etc y aunque el libro cuenta ya con 30 años de existencia, sigue siendo de lectura obligada para entender la programación con lenguajes “de bajo nivel”.
Título: El lenguaje de programación C
Autor: Brian W. Kernighan y Dennis Ritchie
Editorial: Prentice Hall
Descripción: Está escrito por Kernighan y Ritchie, los creadores del lenguaje C y personalmente el libro me encantó. No es la mejor elección para aprender C desde cero sino que conviene leerlo una vez se tengan unas nociones básicas sobre el lenguaje. Con él se aprende a programar con estilo, rigurosidad y eficiencia. Es de lectura imprescindible para todo aquel que pretenda desarrollar una aplicación en este lenguaje.
Título: The Practice of Programming
Autor: Brian W. Kernighan y Rob Pike
Editorial: Addison Wesley
Descripción: Es el manual del buen estilo de programación y leerlo ayudará sin duda a que cualquier programador de C/C++ o Java escriba código más rápidamente y de forma mantenible. El libro incluye muchos ejemplos de código incorrecto o difícil de entender y propone soluciones para convertirlos en código óptimo y legible.
Título: Sistemas Operativos: Diseño e Implementación
Autor: Andrew S. Tanenbaum y Albert S. Woodhull
Editorial: Prentice Hall
Descripción: Es el libro por excelencia para el estudio de los fundamentos de sistemas operativos. Está escrito por el prestigioso profesor holandés Andrew Tanenbaum y detalla los entresijos y principios de funcionamiento de los sistemas operativos. Además incluye como ejemplo el código en C de un sistema completo, el MINIX.
Título: Sistemas Operativos
Autor: William Stallings
Editorial: Prentice Hall
Descripción: Es “el otro” en sistemas operativos. Es un libro tan bueno como el de Tanenbaum, aunque no está acompañado del estudio de código de un sistema real. Su punto fuerte son los ejemplos explicativos que pone a la hora de explicar cosas como los interbloqueos o la inanición. No os perdais el ejemplo de los esquimales, la cena de los filósofos o el problema de la barbería ;-)
Título: Advanced Programming in the UNIX Environment
Autor: W. Richard Stevens
Editorial: Addison Wesley
Descripción: Es “la biblia” de la programación para sistemas UNIX. Detalla las diversas llamadas al sistema y pone al menos un ejemplo de uso de cada una de ellas. La última edición está actualizada con las ultimas versiones de BDS, Linux, OS X, etc, así como del estándar POSIX. El libro es muy bueno, pero no es apto para los que anden un poco flojos en lenguaje C o tengan pocos conocimientos sobre los sistemas UNIX ya que está escrito con un lenguaje bastante técnico y riguroso.
Título: The Art of Unix Programming
Autor: Eric S. Raymond
Editorial: Addison Wesley
Descripción: Escrito por el prestigioso gurú Eric S. Raymond, el libro intenta condensar toda la filosofía de diseño de los sistemas UNIX, de Linux y de la comunidad del Software Libre para hacer ver al lector la manera correcta de hacer las cosas en desarrollos para UNIX donde se vean involucrados varios programadores. Hay una versión libre online que puede consultarse en http://www.faqs.org/docs/artu/
Título: Linux Kernel Development
Autor: Robert Love
Editorial: Sams
Descripción: Es el mejor libro que conozco sobre el kernel de Linux. Robert Love, un activo programador del proyecto Gnome, explica de forma muy clara los entresijos del núcleo bajo dos perspectivas: por una parte explica la teórica de su funcionamiento (la gestión de memoria, la entrada/salida, el sistema de ficheros…) y por otra parte se mete en su implementación a fin de que el lector pueda modificarla a su gusto. El libro sirve también para conocer los conceptos básicos de diseño de un sistema operativo.
Título: Redes de Computadores
Autor: Andrew S. Tanenbaum
Editorial: Prentice Hall
Descripción: Es el libro por excelencia para el estudio de las redes de ordenadores. Está actualizado al máximo, con los últimos avances en redes 802.11, bluetooth, criptografía, ipv6, etc. Tambien está escrito por Tanenbaum y como siempre, consigue que su libro sea fácil de leer y sobre todo ameno. Siempre cuela un toque de humor por alguna parte ;)
Título: Comunicaciones y Redes de Computadores
Autor: William Stallings
Editorial: Prentice Hall
Descripción: Es “el otro” en redes. Stallings y Tanenbaum siempre se pican por ver quien hace el mejor libro sobre un tema y éste es el resultado de su pique sobre las redes :-) Es casi tan bueno como el de Tanenbaum pero a mi juicio, la división de los diferentes capítulos está muy mal hecha.
Título: Unix Network Programming: The Sockets Networking API
Autor: W. Richard Stevens
Editorial: Addison Wesley
Descripción: Es “la biblia” de la programación de aplicaciones cliente/servidor en entornos UNIX. Es un libro muy riguroso, no apto para novatos. Merece la pena leerlo una vez se tengan unos conocimientos básicos sobre los sockets de Berkeley ya que de lo contrario puede resultar algo difícil de seguir.
Título: TCP/IP Illustrated: The Protocols & The Implementation (2 libros)
Autor: W.Richard Stevens
Editorial: Addison Wesley
Descripción: Es un libro imprescindible para los que quieran meterse de lleno en el mundo de Internet y las comunicaciones. Cualquier hacker o desarrollador de aplicaciones de red debería leerlo para conocer los entresijos de la omnipresente pila de protocolos TCP/IP.
Título: Fundamentos de Bases de Datos
Autor: Abraham Silberschatz
Editorial: McGraw-Hill Publishing Co.
Descripción: Lo tiene todo. Es un tocho enorme que detalla de forma clara y sencilla todos los entresijos de un sistema gestor de bases de datos. Abarca desde los principios generales de diseño, como el álgebra relacional, los diseños E/R, gestión de transacciones, sistemas distribuidos, optimización de consultas… Es un libro muy completo que explica todo en un lenguaje fácil de entender.
Título: Fundamentos de Sistemas de Bases de Datos
Autor: C. J. Date
Editorial: Addison Wesley
Descripción: Parece un libro normal y corriente pero su interés radica en quién lo escribe. C. J. Date es una eminencia en lo que respecta al modelo relacional de bases de datos y el libro ha alcanzado las 700.000 copias vendidas de su versión anglosajona. Áltamente recomendado aunque personalmente si tuviera que poner dinero para comprarme un libro sobre bases de datos me quedaría con el Silberschatz.
Título: Introducción a la Teoría de Autómatas, Lenguajes y Computación
Autor: John E. Hopcroft
Editorial: Addison Wesley
Descripción: Este libro es excelente como introducción a la informática teórica. Trata los diferentes tipos de autómata, los lenguajes formales y los límites de la computación. Imprescindible para cualquiera que trabaje con expresiones regulares, desarrolle parseadores de información o quiera meterse en el campo de la inteligencia artificial o la construcción de compiladores.
Título: El Lenguaje Unificado de Modelado.
Autor: Booch, G., Rumbaugh, J., Jacobson, I.
Editorial: Addison Wesley
Descripción: Esta escrito por los creadores de UML y es la guía de referencia definitiva para el omnipresente UML 2.0. Este libro es una de las dos piezas fundamentales de la ingeniería del Software y debe ser leído por todo aquel que desarrolle aplicaciones de forma profesional o se llame a sí mismo ingeniero informático.
Título: . El Proceso Unificado de Desarrollo de Software.
Autor: Jacobson, I., Booch, G., Rumbaugh, J
Editorial: Addison-Wesley
Descripción: Es la otra pieza fundamental en el campo de la Ingeniería del Software. Trata sobre todo el proceso de desarrollo de una solución software a través de las metodologías más extendidas en el mercado. Leerlo es imprescindible si los términos actores, paquetes, clases, interfaces, procesos, etc, no son todavía familiares.
Título: Computer Architecture: A Quantitative Approach
Autor: D. A. Patterson y J. L. Hennessy
Editorial: Morgan Kaufmann Publihers
Descripción: Aunque no es apto para novatos, es uno de los libros más rigurosos en el campo de la arquitectura de computadores. Contiene una ingente cantidad de datos, consejos, técnicas y advertencias, que serán de gran utilidad para cualquier programador que tenga que lidiar a bajo nivel con el hardware subyacente. El libro de 1100 páginas de extensión, cuenta con 7 apéndices online que le añaden otras 250 páginas.
A continuación pongo una descripción de otros 5 libros citados en los comentarios de esta página y una lista varios de los libros que comentan en el post de barrapunto. Personalmente no he leído ninguno así que he tenido que basarme en las opiniones de los que los han comentado o en las descripciones de Amazon.
Título: The C++ Programming Language
Autor: Bjarne Stroustrup
Editorial:Addison Wesley
Descripción: Se le considera el santo grial de la programación en C++. Está escrito por el creador del lenguaje, Bjarne Stroustrup y en e? se presenta la especificación completa de C++ y su librería estándar. Yo no lo he leído pero he oído que se hace difícil de leer. Personalmente me recomendaron leer el “Thinking in C++” de Bruce Eckel en lugar de este.
Título: UML y Patrones (Applying UML and Patterns)
Autor: Craig Larman
Editorial: Prentice Hall
Descripción: Para hacer buen software se necesita un buen diseño y éste es el libro que enseña como conseguirlo. Tiene un enfoque muy práctico y aplicado y además, en su última edición, se tratan también metodologías ágiles como el Extreme Programming por lo que “UML y Patrones” se convierte en imprescindible para un cualquier ingeniero moderno.
Título: Programming Windows
Autor: Charles Petzold
Editorial: Microsoft Press,U.S
Descripción: Es un clásico en lo referente a la programación bajo Windows. El libro es una guía muy completa a la API de Win32 aunque personalmente (corregidme si no es así) sospecho que se ha quedado un poco desfasado ya que la ultima edición data de 1998. Existe otro libro más actualizado, también del mismo autor, titulado Programming Windows with C#, más adecuado a las nuevas tendencias en los entornos Windows.
Título: Writing Secure Code
Autor: M. Howard
Editorial: Microsoft Press,U.S.
Descripción: Este libro trata sobre la importancia de escribir código seguro en una época en la que la seguridad informática es tan vital. Cubre temas como la programación concurrente, la interacción con bases de datos, ataques de denegación de servicio, desbordamientos de buffer, criptografía, etc.
Título: Design Patterns: Elements of Reusable Object-oriented Software
Autor: Erich Gamma y Craig Larman
Editorial: Addison Wesley
Descripción: Es considerado por algunos como la biblia del diseñador. Existen multitud de problemas de diseño en la programación de la mayoría de las aplicaciones y este libro intenta identificar los más comunes y explicar la mejor manera (no siempre la más obvia) de solucionarlos. Ambos autores comparten su gran experiencia profesional para evitar que se pierda el tiempo en solucionar problemas que pueden prevenirse fácilmente.
Libros mencionados en la discusión de Barrapunto:
Título: The Design of the Unix Operating System
Autor: Maurice J. Bach
Editorial: Addison Wesley
Título: Compiladores: Principios, técnicas y herramientas
Autor: Alfred Aho, Ravi Sethi y Jeffrey D. Ullman
Editorial: Addison Wesley
Título: Code Complete: A Practical Handbook of Software Construction
Autor: Steve C. McConnell
Editorial: Microsoft Press,U.S.
Título: Introduction to Algorithms
Autor: Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Ronald Rivest
Editorial: McGraw-Hill
Título: Fundamentos de Programacion
Autor: Luis Joyanes Aguilar
Editorial: MC Graw Hill
Título: Estructuras de datos, algoritmos y programación orientada a objetos.
Autor: G. L. Heilman
Editorial: McGraw-Hill
Título: Data structures and algorithm analysis in C++.
Autor: M. A. Weiss
Editorial: Pearson
Título: Ingenieria del Software
Autor: Roger S. Pressman
Editorial: McGraw-Hill
Título: Artificial Intelligence : A Modern Approach
Autor: Stuart J Russell y Peter Norvig
Editorial: Prentice Hall
Título: Applied Cryptography
Autor: Bruce Schneier
Editorial: John Wiley & Sons
Título: Clear Thinking: A Practical Introduction
Autor: Hy Ruchlis, Hyman Ruchlis, Sandra Oddo
Editorial: Prometheus Books
Título: Graphics Programming Black Book
Autor: Michael Abrash
Editorial: Coriolis Group
Título: Razonando con Haskell. un Curso Sobre Programación Funcional
Autor: Blas C, Francisco Gutierrez, Pablo Guerrero, José E.
Editorial: Paraninfo
Título: Object Oriented Programming: An Evolutionary Approach
Autor: Brad J. Cox
Editorial: Addison Wesley Longman Publishing Co
Título: Object-oriented Software Construction
Autor: Bertrand Meyer
Editorial: Prentice-Hall
Título: Programming Challenges: The Programming Contest Training Manua
Autor: Steven Skiena y Miguel Revilla
Editorial: Springer-Verlag New York Inc.
Título: Software libre para una sociedad libre
Autor: Richard Stallman
Editorial: GNU Press
Título: Unix system administration handbook
Autor: Evi Nemeth, Garth Snyder, Scott Seebass y Trent R.Hein.
Editorial: Prentice Hall