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. 🙂
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.
Ninguno está disponible en español?
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.
¡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.
Tambien The C Programming Language, con ese fue que aprendi C
Muy buena lista, aunque hecho de menos alguno como el Clean Code http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
En mi lista original sí que lo incluí 🙂
En español ISBN 978-84-415-3210-6 Código Limpio.
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
Pregunta:
«¿ ¿qué pautas sigue su pensamiento durante el proceso de programar?».
Respuesta:
La menor cantidad posible de wtf 😉
http://commadot.com/wtf-per-minute/
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.
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.
El lenguaje que menos líneas de codigo necesite
Tú no eres ingeniero informático, ¿verdad?
El de «The C Programming Language» ¿también debería leerlo un programador que no vaya a trabajar con C? 😛
Yo CREO que no lo he leído, pero sí que recomendaría a todo el mundo saber algo de C.
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…
Lo mismo podría decir yo del cobol no?
Lo mismo podría decir Bill acerca de Visual Basic 6.
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
Lo mismo se podria decir de no saber assembler?
totalmente de acuerdo.
todo se puede hacer mejor en C/C++
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.
Hay una razón por la que en algunos sitios se enseña todavía C, y es por el concepto de indirección, o lo que es lo mismo por como funcionan los punteros
Para más informacion: http://programmers.stackexchange.com/questions/105902/do-the-young-minds-need-to-learn-the-pointer-concepts
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…
Me uno a Quique, ¿hay alguno en castellano?. Es vagueza más que nada 🙁
Creo que Ingenieria de Software Un Enfoque Práctico (Pressman 5th Ed)tiene que entrar en esa lista, ustedes que dicen???. Saludos!!!!
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.
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 !
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.
Sólo tengo que decir que llevo todo el verano leyendo (relajadamente) «Code Complete» y que es un libro imprescindible a mi entender.
Les recomiendo 100 things every designer needs to know about people
Les faltó «The Art of computing programming» del gran Donald E. Knuth referencia obligada desde hace muuucho
Totalmente de acuerdo. Eso es clásico.
Pingback: Los 10 libros que todo programador debería leer, sin excusas
Pingback: GreatTweet.com - Lista de los 10 libros sobre programación que todo desarrollador ...
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.
«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.
El problema SICP es que ya es una vaca sagrada,cuando hay mejores lecturas.
Excelente, me vienen en un momento justo
hmm uno bueno para mi fue y es «Fundamentos de Programación» de Luis Joyanes Aguilar y tu libro «python para todos» xD
Muchas gracias por el cumplido, Miguel 🙂
Muchas gracias, ahora tengo mas motivacion para ir a mis clases de ingles *¬*
Hola,
Me recomendáis alguno de c++??? En la carrera tuve un profesor incompentente y todavía tengo cosas que no me quedan claras!
Gracias!
Es el libro del creador de C++,
The C++ Programming Language – Bjarne Stroustrup
El que te ha dicho ‘antigravedad’ es un gran libro… luego puedes continuar con los de Alexandrescu que son impresionantemente buenos (aunque tambien complejos).
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.
El libro de Stroustrup lo recomendaría como referencia, no tanto para aprender C++ desde cero.
En ese sentido, «Thinking in C++» de Bruce Eckel es inmejorable, muy didáctico, se lee del tirón. Además el autor es tan majo que lo ha puesto en su web para libre descarga:
http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html
Eso es un mito, el mismo creador de C++… Bjarne algo lo afirma.
¿ Porque hay que saber C antes ?
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
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.
Te has dejado los mas importantes:
Wardog y el mundo
Fuckowski, memorias de un ingeniero
Sin estos, no se puede trabajar en condiciones
Mi mayor agradecimiento por presentarme a Wardog y a Fuckowski. Impagables.
Yo tengo el último y el de «C Programming» 🙂
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.
Excelentes recomendaciones. Muchas gracias!
Parrimin: Me apunto el de principiantes XD
Rayos! Y por qué la mayoría en inglés 🙁
Creo que tendrías que agregar «Programming Pearls», de Jon Bentley, y «Principles of Programming Design», de Michael A. Jackson
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…
eres mi héroe.
GoF out: Peter Norvig ya les dio una buena tunda en:
http://www.norvig.com/design-patterns/
«Clean Code» me parece más al día que «Code Complete».
«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á. 🙂
Y hecho de menos algo sobre programación concurrente: El PCDP de Ben-Ari, por ejemplo.
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
Me han pasado el link, y voy a dejar otros dos muy interesantes (en Inglés):
Write Great Code de Randall Hyde.
Volume 1: Understanding the Machine
http://nostarch.com/greatcode.htm
Volume 2: Thinking Low-Level, Writing High-Level
http://nostarch.com/greatcode2.htm
gracias, justo los libros que hacian falta en mi carrera de autodidacta
Pragmatic programmer tiene muy buena pinta, creo que voy a empezar por ahi.
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.
wow, excelente articulo, los comenzare a buscar! Gracias!
Pingback: ¡Feliz día del programador!
Pingback: Feliz día del programador | EL BURRO GEEK
muy buena recopilacion de libros
lenguaje c
Excelente aportacion, acabo de encontrar tu blog y esta genial.
Sigue asi 🙂
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.
Pingback: ¿Se puede volver a amar la programación? « La senda del Ronin
Te falta «Clean Code»
Perdón! Ya he visto que te lo han dicho!
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.
Aquí falta el Gran libro de Debian GNU/Linux que esta demás de completo.
http://www.amazon.es/Gran-Libro-Debian-GNU-Linu/dp/8426718078/ref=sr_1_1?ie=UTF8&qid=1350327874&sr=8-1
http://www.amazon.com/GRAN-LIBRO-DEBIAN-GNU-LINUX/dp/8426718078
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»
la serie in a nutshell son muy buenos tambien
.
.
.
Nadie nombró, que es ventajoso conocer el KERNEL…
.
.
.
Sugiero El Libro Negro del Programador