¿Qué libro individual ha aumentado más tus habilidades de programación? ¿Por qué?

Para mí, definitivamente es Estructura e Interpretación de Programas de Computadora. Es un libro que está densamente lleno de pequeñas revelaciones de programación.

Este libro enseña que la programación sin estado mutable es bastante poderosa, independientemente de lo que su fondo imperativo le sugiera. Después de eso, usted comprende cuán poderosas son las funciones como mecanismo de abstracción y aprende a ver abstracciones más apropiadas en su código. Es sorprendente lo lejos que puede llegar con un simple mecanismo de abstracción que se utiliza correctamente.

Enseña que puede que no sea necesario aprender los rincones oscuros de una sintaxis de lenguaje de programación para usarla cómodamente (y enseña a apreciar una sintaxis buena y expresiva al mismo tiempo). Después de eso, todas las discusiones sobre las ventajas sintácticas de un idioma sobre otro generalmente parecen superficiales y aburridas.

Este libro le enseña a construir un sistema de objetos completo a partir de funciones y estados mutables. Después de eso, sabes que no hay magia profunda en OOP que deba ponerse en el lenguaje mismo.

Este libro enseña que los lenguajes de programación no son enormes mastodontes que generalmente se encuentran en el lugar de trabajo del programador. La idea misma de cambiar un lenguaje industrial “serio” es aterradora, pero no debería ser así. Los idiomas pueden ser pequeños, compactos, totalmente comprensibles, fáciles de modificar según sus necesidades. Los lenguajes no deben ser clavados a la misma semántica inflexible que casi todos los lenguajes de programación ampliamente conocidos son (por ejemplo, hay un lugar para la programación lógica / actor / no determinista cuando su tarea se ajusta).

Este libro enseña que todos sus conceptos de alto nivel no están tan lejos del hardware de la computadora. Escribir un compilador y un sistema de tiempo de ejecución para un lenguaje de programación de alto nivel puede ser bastante transparente y directo, no hay magia allí también.

Hay un libro que leí en mis años más jóvenes que sorprendentemente sigue dando y dando. Si pudiera elegir uno y solo un libro al que le atribuiría la mayoría de mis habilidades sería, sin dudarlo, este.

Permítanme agregar que no estoy siendo hiperbólico en absoluto cuando digo que cualquiera que lea este libro surgirá como un programador decididamente mejor, mejorando prácticamente todas las habilidades que un programador necesita en su vida profesional.

Sin más preámbulos:

Linux desde cero!

El software de código abierto es una de las mejores fuentes (juego de palabras) de aprendizaje disponible para un programador. Sin embargo, navegar en código abierto puede ser confuso y desalentador. Ahora probablemente le llevará unos meses leer este libro, pero una vez que haya terminado, estará familiarizado con todos los aspectos de OSS.

Lo que este libro esencialmente te enseña es construir una distribución completa de Linux desde cero. Pieza por pieza, haces tu propio Fedora / Ubuntu y poco a poco todo se desmitifica. Aquí hay una lista parcial de las razones por las cuales este libro es de rodillas:

  • Nivel moderado de complejidad

    Claro, puede recoger directamente un libro sobre el kernel o el servidor X window. Sin embargo, será confuso y desconcertante hasta el punto de ser inútil, especialmente para un principiante. LFS no se trata de comprender ningún componente en detalle, no le molestará cómo funciona Qt. Lo que te hará entender es cómo Qt encaja en la imagen más grande.
  • Mejora las habilidades básicas de programación

    Escribir código / escribir en un teclado en realidad consume muy poca porción del horario de un buen programador. La mayor parte de su tiempo se dedica a diseñar sistemas, comprender problemas, comparar soluciones o escribir discursos enojados en Slashdot. (¿Crees que Trump es un tema polémico? Intenta publicar un comentario allí a favor de systemd). LFS, casi inevitablemente, te atacará muchas veces. Cada vez aprenderás algo invaluable. Desde la depuración hasta el enlace a la carga de la biblioteca, estará expuesto a una gran cantidad de problemas que eventualmente enfrentará en su vida profesional de todos modos. El objetivo de este ejercicio no es hacer una computadora portátil de uso diario, sino comprender cómo los elementos básicos de una distribución Linux funcionan juntos. Estas partes internas apenas se mantienen juntas correctamente en una distribución oficial, su resultado final probablemente será peor que Windows 3.1 ejecutándose en una Raspberry Pi. Sin embargo, mejorará significativamente sus habilidades de programación fundamentales, por ejemplo, solucionar problemas desagradables de integración, piratear soluciones fugosas para que las cosas funcionen, navegar, a veces sin fin y a veces inexistente, información, obtener ayuda de la comunidad OSS y aprender a maldecir su máquina sin tirarla a la pared.

  • Enseña habilidades a largo plazo

    Si le preocupa si las cosas que construye en LFS serán relevantes para cuando termine, no se asuste. Si bien el código abierto se fragmenta a un ritmo vertiginoso, se sorprenderá de la cantidad de material actual que es lo mismo que antes (o al menos muy similar). En algún momento en el futuro, Wayland podría reemplazar X en todas partes, pero sabrá para qué sirve un servidor de visualización y en qué se diferencia de un kit de herramientas de widgets.

Desafortunadamente, no es una tarea trivial. Necesitará mucho tiempo y una máquina de repuesto ( no intente construir LFS en una máquina que le interese). También necesita un conocimiento práctico de al menos C, C ++ y Python. Si lo logras, valdrá la pena. Estarás abriéndote camino a través de las bases de código que creías incomprensibles. Comenzará a ver código abierto como Neo ve Matrix. Te sentirás presumido hasta el punto de lo absurdo cuando alguien mire tu producto terminado y te pregunte …

“¿Qué distribución es esta?”

Traté de encontrar respuestas inteligentes a esta, pero debido a mi total falta de creatividad, usualmente digo “Ninguno, lo construí yo mismo”.

Gnome, KDE y Xfce: rodeado de miles de errores, mirándote en silencio, esperando tu próximo movimiento

Hay muchos buenos libros en esta lista, la mayoría de los cuales he recurrido en más de una ocasión: K&R, Dive Into Python (Mark Pilgrim), The Art of Computer Programming (Knuth). Para el entretenimiento me gusta Beautiful Code (Oram & Wilson). Todos estos han tenido un impacto positivo, pero con mucho los dos libros relacionados que tuvieron el mayor impacto en mi programación son:

  • Peter Norton Guía del programador para la PC IBM
  • Libro de lenguaje de ensamblaje de Peter Norton para la PC IBM

Estos libros fueron mi “StackOverflow” durante el curso de la escritura de un producto comercial en lenguaje ensamblador x86. Aunque puede que hoy no se consideren útiles, estos dos libros me ayudaron a comprender lo que realmente estaba sucediendo cuando se ejecutó un programa. Están estrechamente vinculados a un hardware específico, pero los principios aprendidos fueron invaluables.

Tengo que decir que el que tuvo el mayor impacto en mi programación es Clean Code de Uncle Bob (Robert C Martin)

http://www.amazon.com/Clean-Code

Al ingresar a mi primera pasantía tenía una buena comprensión de los algoritmos, la resolución de problemas, y aunque tenía una buena comprensión de la depuración … Hasta que tuve que depurar el código de otras personas. Eso puede ser una pesadilla o una bendición si la persona también escribió un código limpio.

Este libro cambió por completo la forma en que me acerqué y pensé en implementar soluciones a los problemas porque sabía que otras personas también verán y revisarán mi código. La legibilidad del código es muy importante.

Lo siguiente probablemente sería:
http://www.amazon.com/Design-Pat

Comúnmente conocido como el libro Gang of Four.

Más tarde compré Patrones de diseño de Head First y me pareció mucho más agradable de leer y consultar.

http://www.amazon.com/Head-First

Código limpio , por Robert Martin.

La edición rusa, sin embargo, no es exactamente la de la foto.

Este libro literalmente cambió mi vida como desarrollador de software. Me ayudó que lo leyera recién salido de la universidad.

  1. Primero se debe escribir el código para los otros desarrolladores. Los nombres legibles por humanos importan.
  2. Puede y debe tener confianza al realizar cualquier tipo de cambio en la base de código, y el conjunto de pruebas automáticas le proporciona exactamente eso. La disciplina adecuada de prueba primero lo lleva hasta las once.
  3. La mejor función es una función corta sin efectos secundarios.
  4. OOP no es “herencia, polimorfismo y encapsulación”. Se necesitó el Libro Azul y OOAD para comprender completamente los principios detrás de la OOP adecuada, pero Clean Code lo comenzó todo.
  5. El conjunto completo de terminología adecuada explicada y con ejemplos como olores de código, refactorizaciones, código heredado, patrones de diseño y demás.
  6. El ingeniero de software tiene responsabilidades en el mundo real que no deben pasarse por alto. A veces, el código que escribimos es crítico para la vida con todas las consecuencias posteriores.

Ni siquiera puedo expresar con palabras cuánto el libro Clean Code destruyó mi comprensión de la “programación” construida por 5 años resolviendo problemas en la universidad. Sentía que no sabía nada de lo que significa desarrollar un programa de trabajo. Le debo mucho a ese libro. Gracias tío Bob.

Para mí, creo que fueron las muy conocidas “Perlas de programación” de Jon Bentley y la secuela “Más perlas de programación”, escrita a finales de los 80. En cada capítulo (que comenzó como columnas CACM, si la memoria sirve), Bentley repasaría una joya absoluta de una técnica de programación ampliamente aplicable. Incluso varias décadas después de leerlo, algunas de las cosas que escribió se han quedado conmigo. Algunos ejemplos:

Pequeños idiomas

A veces la mejor arquitectura es inventar un pequeño lenguaje de programación. El ejemplo de Bentley fue el lenguaje Pic, utilizado por Brian Kernighan como parte de los programas gráficos que vienen con UNIX. Su presentación clara de todas las partes de la implementación de un lenguaje ad hoc fue un verdadero momento de bombilla para mí.

Clasificación de mapa de bits

Bentley comenzó su libro con un problema práctico que involucraba la clasificación. Su viaje de exploración de las características del problema lo llevó a un algoritmo de clasificación de un solo paso que coincidía con el caso de uso de manera brillante, y clasificó la entrada en un solo paso.

Los ejemplos individuales son maravillosos, pero más importante, los libros de Bentley me ofrecieron una nueva forma de pensar acerca de la programación y me dieron el aliento que necesitaba para explorarlo y aplicarlo.

Para mí fue (y sigue siendo) el “diseño moderno de C ++” de Andrei Alexandrescu. C ++ es el lenguaje que he estado utilizando la mayor parte de mi carrera y me encanta mucho. Una de las principales razones por las que amo tanto este lenguaje es este libro. Este libro me reveló la magia que se puede hacer usando C ++, y vaya, oh, la magia que muestra en ese libro es rara. A pesar del hecho de que el lenguaje evolucionó enormemente desde que se publicó el libro, y de que muchas de las técnicas que muestra allí se pueden hacer de manera más eficiente utilizando las construcciones del lenguaje actual, este libro todavía se encuentra en mi estante y todavía leo de él ocasionalmente. La razón es que las técnicas que muestra allí son universales. Los patrones de diseño que describe pueden modificarse fácilmente para ser utilizados en el C ++ de hoy (11/14). La esencia sigue siendo muy relevante y he usado muchas de sus técnicas en el código de producción que he escrito a lo largo de los años. Por lo tanto, no solo este libro me ha convertido en un mejor ingeniero de software / programador de C ++ sino que este libro plantó el amor que tengo por la programación (en C ++).

El libro más destacado para mí fue “El zen del lenguaje ensamblador” de Michael Abrash (1990) http://www.jagregory.com/abrash-… . Solo otro libro se acerca, y eso se discute a continuación en este mensaje. Zen presentó el conjunto de instrucciones de Intel como una oportunidad para sorprenderse y jugar. Abrash me presentó el concepto (basado en Heinlein) de “No existe el código más rápido”. Abrash muestra docenas de formas diferentes de hacer lo mismo, mostrando las consecuencias de la elección. Cualquiera que no haya leído este libro probablemente esté sufriendo las limitaciones de las prácticas de programación estándar. Abrash claramente ama la programación, el ensamblaje y la optimización, y sus entusiastas. Si quieres experimentar la pasión de segunda mano (y si experimentas con su estilo, de primera mano), LEA ESTE LIBRO de principio a fin, guárdalo en tu biblioteca y léelo de vez en cuando.

El segundo libro más importante fue “Imperfect C ++” de Matthew Wilson (2005). Este libro ilustra cómo el lenguaje C ++ tiene innumerables problemas y rincones oscuros. La idea de que un lenguaje (C ++ en particular) tiene pureza es completamente desacreditada. La inferencia que extraigo es que uno siempre está en estado de combate con el lenguaje que elige, y que tanto la programación defensiva como la ofensiva tienen su lugar en el desarrollo.

En los años 70, se compararon dos idiomas (LISP y APL). Con gran reverencia, LISP se llamó “bola de lodo” y APL se llamó “cristal”. Ambos idiomas tienen descendientes modernos (commonlisp / clojure y R / MatLab entre otros). Aunque cristalina, APL también tenía esquinas oscuras.

Estoy de acuerdo con otras personas que respondieron que existen libros de programación muy valiosos. Entre estos, recomiendo “El lenguaje de programación C ++, edición especial” de Bjarne StrouStrup 2013. He dogered 3 copias al olvido, y estoy en mi cuarto.

Tan importante como el libro de Stroustrup es para mí, documenta una abstracción y no da los golpes duros, la sensación práctica del mundo real que dan los otros dos libros.

Como último empujón en las costillas, felicito a Intel por cambiar constantemente el chip iAPX86 de modo que ningún libro, ni siquiera el de Abrash, pueda hacerle justicia al loco mundo de la optimización de sus chips.

Para mí fue la programación de Perl. Perl de programación: potencia incomparable para el procesamiento de texto y secuencias de comandos: 9780596004927: Computer Science Books @ Amazon.com

En ese momento, alrededor de 1997 (la segunda edición salió en 1996), pensé que la programación simplemente tropezaba con punteros y golpeaba la cabeza contra los errores de compilación durante toda la noche. Una vez que elegí Programming Perl, comencé a usar las estructuras de datos desde el primer momento. Cómo usar hashes (estructuras de datos de pares de valores clave) y luego cómo acceder a las bases de datos y colocar esos datos en dichas estructuras de datos. Finalmente pude ver el valor. He estado programando todos los días desde entonces.

Mi respuesta sería Javascript Enlightenment. No por el contenido del libro (que es excelente por cierto) sino porque desbloqueó todos los temores y malentendidos que tenía, como programador de Java, con respecto al aprendizaje de Javascript. Después de eso, decidí aprender JavaScript. Entonces podría tener una opinión equilibrada de los pros y los contras de este idioma. Odiaba el 90% de eso. No quiero trabajar con eso. Pero el último 10% que aprendí y encontré interesante y nuevo para mí (programación basada en eventos, devoluciones de llamada, cierres) fue un cambio de juego. Hoy sigo siendo javaista, pero uso MUCHOS patrones de JavaScript en mi código Java.

Siguiente paso: Haskell !!!

¿Qué libro individual ha aumentado más tus habilidades de programación? ¿Por qué?

Han pasado muchos años para recordar. La primera vez que programé fue hace aproximadamente una década. Realmente no utilicé mucho el libro de todos modos. Creo que fue principalmente la clase. Originalmente aprendí que Java tenía una clase en C ++, C #.

Sin embargo, creo que cuando se trataba de una serie de clases, tomé un análisis numérico y luego álgebra lineal numérica. No recuerdo el libro exactamente aparte de estos libros. No soy un experto en informática, así que me perdí varias cosas.

  • estabilidad y precisión de algoritmos [1]
  • álgebra lineal numérica [2]

Notas al pie

[1] Precisión y estabilidad de los algoritmos numéricos

[2] Álgebra lineal numérica

Fue “Java efectivo”. Recuerdo en mi primer trabajo “real”, leer este libro físico, pero no recuerdo si estaba en inglés o traducido al rumano. Porque había una compañía editorial llamada Teora, que traducía libros importantes, y algunas frases traducidas palabra por palabra que sonaba muy tonto y al principio no las entendí aunque las sabía de memoria en inglés. Cada pequeño capítulo fue muy enfocado e esclarecedor en ese gran libro en ese momento, por Joshua Bloch, arquitecto principal de Java Collections Framework, y gran parte del JDK en ese período de tiempo. Desde entonces entendí cosas más profundas, como las de la programación funcional. Para FP había 3 cursos en línea que me abrieron el apetito, pero sí, ese libro apoyó mi joven carrera y me inspiró a buscar la calidad en toda la programación que hago;).

Y sí, de hecho, mi primer y primer libro fue cuando estaba en la escuela primaria, era un gran libro rojo y azul, en la Asamblea Z80, de Padrubany. Mi cabeza se abrió y pude absorber todas esas cosas que eran un misterio para mí hasta entonces, cuando no entendía nada que mi madre y mi maestro de matemáticas tratarían de enseñarnos sobre informática, así es como llamamos a la programación.

Cuando era un programador principiante en la década de 1970, necesitaba desarrollar un programa que atravesara una red de estructuras y realizar un seguimiento de ellas e imprimir el resultado. Aprendí a programar haciendo métodos numéricos para cálculos numéricos en Fortran. Programación de fuerza bruta bastante directa. Fortran no era capaz de manejar esto. Entonces, el único otro idioma disponible (era un proyecto militar) era JOVIAL (un despegue de Algol). Necesito entender la recursividad, las estructuras de datos y cómo encajan entre sí. Entonces, encontré el libro de Nicholas Wirth Algorithms and Data Structures: Niklaus Wirth: 9780130220059: Amazon.com: Books. Este fue mi primero. Introducción REAL a lo que yo llamaría Informática. Me encantó. Los ejemplos se escribieron en Pseudocódigo, pero se describieron todas las principales estructuras de datos y los algoritmos asociados con ellos. Ha habido muchos más, pero para un chico sin entrenamiento formal en CS, este fue mi primero y cambió radicalmente la forma en que veía la programación … comenzó mi carrera de más de 40 años en software y computadoras.

Por cierto … El libro todavía está en mi estante ……

Efectivo C ++ de Scott Meyers, es el libro que más significó para mí, ya que enseñó, en resumen, con profundidad y humor, el por qué detrás de las lecciones.

http://www.amazon.com/Effective-…

Programación: principios y práctica usando C ++ Este no es un libro que lo llevará a la luz de los trucos y trucos directos sobre cómo convertirse en un “Programador de C ++” con un montón de código sobre cómo hacer cosas. Es mucho más profundo, lo que para ser sincero, me tomó un tiempo comprender esa idea. Realmente te enseña cómo implementar la solución correcta para un determinado problema, STL, pero sobre todo te enseña cómo pensar, cómo hacerte la pregunta correcta y guiarte a la solución correcta, cómo realizar ingeniería inversa de las funciones STL y cómo codificar en un buen estilo C ++ 11. Lo cual creo que es una habilidad realmente valiosa en la industria.

En la escuela, era Conceptos del sistema operativo de Avi Silberschatz (eso fue hace mucho tiempo, pero el libro, actualizado desde entonces, todavía se usa principalmente en las escuelas).

Para C # fue probablemente un libro de Deitel llamado C # para programadores. Los libros de Deitel realmente enseñan y lo leí cuando comencé a aprender C # prob alrededor de 2008.

C # In a Nutshell también es bueno y el autor Joseph Albahari crea un buen material para aprender C #.

Quiero leer el Código Limpio pero no lo he logrado.

Éste. Hofstadter abrió mi mente y me ayudó a pensar usando diferentes patrones de pensamiento, diferentes hilos de razonamiento y, en última instancia, me enseñó que la programación no es solo una cuestión de traducción de comandos, sino un grupo entero de universos axiomáticos concéntricos, cada uno definido por la metalogía del uno encima de él.

Con la advertencia de que no he leído muchos libros de programación, diría que mi favorito fue The Pragmatic Programmer, de Andrew Hunt y Dave Thomas. Me encanta que sea casi independiente del lenguaje y del sistema, y ​​que se centre en cosas que hacen que la programación sea más fácil y mejor sin ser demasiado técnico, y que no sea pretencioso ni predicador.

He visto otros buenos libros (algunos de los cuales fueron mencionados por otros aquí), y disfruto cosas como patrones de diseño, OOA / D / P, trucos específicos del lenguaje y la belleza del diseño del lenguaje, la programación funcional, los sistemas de tipos, etc. Pero en términos de impacto e impresión duradera, para mí nada mejoró el efecto que este libro tuvo en mi pensamiento y mi enfoque de programación.

Plantillas C ++ la guía completa. Tomó alrededor de un año, pero estoy muy satisfecho con los resultados. Estudiar Haskell ATM, BTW y tengo la sensación de que será una revolución.

Lo más probable es que K&R.

No porque sea el mejor libro, sino porque ha sido el único libro de programación al que tuve acceso durante los primeros años de aprender a programar.