El arte de la programación de computadoras: ¿leer o no leer? [cerrado]

63

Hay muchos libros sobre programación, y parece que Code Complete está en la parte superior de la lista de "libros de programación de lectura obligada" de la mayoría de las personas, pero ¿qué pasa con The Art of Computer Programming de Donald Knuth? Soy una persona ocupada, entre el trabajo y una familia joven. No tengo mucho tiempo libre, así que tengo que ser exigente con respecto a cómo lo uso.

Me pregunto: ¿alguien ha leído 'TAOCP'? Si es así, ¿vale la pena dedicar tiempo a leer o algún otro libro o más programación paralela, como proyectos favoritos o contribuir al código abierto, sería un mejor uso de mi tiempo en términos de desarrollo profesional?

DESCARGO DE RESPONSABILIDAD: para aquellos de ustedes que lucen camisetas de "Knuth es mi amigo", no me malinterpreten, quiero leerlo, pero me pregunto si debería estar en la parte superior de mi lista de prioridades o si algo más debe venir primero.

Zannjaminderson
fuente
Quiero leerlo, pero es caro como el infierno, así que lo obtendré cuando termine la universidad y empiece a ganar algo de dinero. Además, necesito una estantería grande.
gablin
Llegué a la página 3 y lo escuché. Vendió el set en Amazon 6 meses después.
kirk.burleson

Respuestas:

72

TAOCP es una referencia de valor incalculable para comprender cómo funcionan las estructuras de datos y los algoritmos que utilizamos todos los días y por qué funcionan, pero comprometerse a leerlo de principio a fin sería una inversión extraordinaria de su tiempo.

Como un hombre de familia a otro, pase el tiempo con sus hijos.

Adam Crossland
fuente
34
+1 para niños: las computadoras son notoriamente buenas para esperar. Pueden esperar a que los niños sean mayores.
3
+1 para niños, aunque podrá leer el libro en cualquier momento de su vida, podrá jugar con su hijo de 4 años solo durante 1 año. Y con su niño de 5 años por sólo 1 año también ...
3
Gran respuesta. Hay un montón de cosas que nos harían mejores programadores, pero necesitamos ser inteligentes sobre dónde invertimos nuestro tiempo y también recordar que hay más en la vida que ser un gran programador.
Jon Hopkins
55
Todavía no tengo hijos y realmente quiero terminar de leerlo antes de morir. ¿No tendré hijos?
hundió el
1
@sank estás pensando como un programador ... :)
Angelin Nadar
23

Sustituya "la enciclopedia" en su pregunta por cada referencia a TAOCP, y creo que la respuesta debería ser obvia. Porque en muchos aspectos, eso es TAOCP.

Hay una historia (posiblemente apócrifa) sobre Steve Jobs conociendo a Knuth. Lo primero que Jobs le dijo fue "Es un placer conocerlo, Dr. Knuth. ¡He leído todos sus trabajos!". La respuesta de Knuth fue "Estás lleno de mierda": http://www.folklore.org/StoryView.py?project=Macintosh&story=Close_Encounters_of_the_Steve_Kind.txt

Jason Baker
fuente
1
La enciclopedia tiene una inmensa cantidad de cosas, en su mayoría no tan interesantes o relevantes para las personas con incluso una amplia gama de intereses. Los contenidos de TAOCP son al menos algo relevantes para cualquier desarrollador de software.
David Thornley
44
Re: la historia de Jobs: es una historia apócrifa. Knuth lo dijo en la charla tecnológica de Google de Randall Munroe.
greyfade
44
La "historia", sin embargo, me hizo sonreír. :)
MetalMikester
Puedo dar fe del humor del Dr. Knuth. Envié un correo electrónico a su dirección publicada. Me sorprendió que respondiera. Su respuesta fue una copia impresa marcada de mi correo electrónico, si él me dijo cortésmente que leyera el resto de la sección en TAOCP. Mi firma de correo electrónico es acerca de ser de Missouri (muéstrame), a lo que hizo un comentario sobre un tonto político de MO. Luego concluyó diciendo: "Solo bromeaba, no me culpen por el gobernador Schwarzenegger".
dbasnett
21

No, no debe estar en la parte superior de su lista de prioridades. Tengo un juego completo y NO lo he leído todo. Lo he usado (hasta ahora) como una buena referencia en ciertos problemas (fue invaluable en mi comprensión de la aleatoriedad y la prueba de generadores aleatorios, por ejemplo). Cada vez que surge un tema de CS que no tengo REALMENTE bien manejado, tiendo a tomar la parte relevante de TAOCP como un buen paso en mi comprensión.

Si decides leerlo, más poder para ti, y definitivamente recomiendo tomarlo en pequeños trozos. No tengas miedo de saltar y mirar lo que sea más interesante primero.

Michael Kohne
fuente
1
Le diste al clavo.
kirk.burleson
9

TOACP es una lectura esencial, en algún momento. Dependiendo de lo que haga a diario, puede que no sea la más urgente.

Es uno de esos libros (bueno, colecciones de libros) que es bueno leer al principio de tu carrera porque realmente te da buenas ideas que normalmente no llegarías hasta más tarde, pero no es esencial para la supervivencia hasta que te gradúes para esa parte de su carrera donde no solo codifica, elige la caja de herramientas. Este es el punto en el que realmente desea estudiar algoritmos, es de esperar que ya comprenda un poco el diseño del lenguaje y tenga una comprensión muy amplia de las herramientas, los idiomas y los sistemas que existen, y cómo cada uno encaja en el ecosistema de cosas que puede recurrir a un proyecto en particular.

En otras palabras: es un aprendizaje general, así que si eres obsesivo como yo, léelo ahora, si no lo estás, está bien posponerlo hasta que comiences a anhelar subir en la escalera y convertirte en un tipo de gran imagen.

HedgeMage
fuente
6

Habiendo emprendido recientemente esta misma tarea, puedo decir que la forma en que escribe es muy agradable y los problemas están etiquetados (según la dificultad) de manera muy acertada. Obtenga el primer volumen y lea los capítulos 1 y 2 y vea cómo le gusta.

sova
fuente
6

TAOCP es un gran trabajo, pero leerlo sería una inversión de tiempo terrible para un desarrollador de software en ejercicio. Si lo hace, estará sacrificando un par de años (es decir, cuánto tiempo tomará) de su presupuesto profesional de superación personal para aprender demasiado sobre muy poco.

Recomendaría trabajar en uno o varios libros menos "últimos" sobre algoritmos, mi favorito en esta área es el Manual de diseño de algoritmos de Steven S. Skiena

Entonces, si sientes que necesitas / quieres más, sube al Knuth.

Al mismo tiempo, puede comprar uno o varios volúmenes de TAOCP, revíselo para comprender qué áreas cubre Knuth en él y guárdelo en su biblioteca en caso de que realmente necesite alguna información en su día a día. trabajo. Mi conjetura es que no lo harías y esa es otra razón por la que no te aconsejo que intentes leer. Pero si se encuentra haciendo referencia a él con la frecuencia suficiente, sabrá que vale la pena leerlo de principio a fin.

kdubinets
fuente
6

El trabajo seminal de Knuth es la referencia más popular que los programadores pretenden leer o terminar de leer. Algún día.

Steven A. Lowe
fuente
2
Es como "Una breve historia del tiempo" de Hawking para programadores.
Jon Hopkins
1
Poco me he leído ABHIT. La radiación de Hawking me parece extraña. ¿Un agujero negro se encoge porque cae algo más? Consigo la conservación de la masa y la cosa de las dos mitades de cada par virtual que nunca se puede encontrar para destruir, pero la idea sigue siendo extraña.
Steve314
@ Steve314: lo que es aún más extraño es que los agujeros negros muy pequeños explotan violentamente. Teóricamente
Steven A. Lowe,
2
ABHOT es corto y está destinado al público en general. TAOCP no es ninguna de esas cosas.
Sean McMillan
3

+10 en el comentario de familia / niños. Trato de leer la mayoría mientras aguanto en los vuelos de ojos rojos a los clientes.

Pero ... sí, vale la pena leerlo. No hay razón para leer de forma lineal, en cambio, hojear y elegir algunos temas de interés.

Jé Queue
fuente
3

Estoy firmemente en el campo de la gente que siente que cada desarrollador debería hacer la inversión para obtener los libros en algún momento (y se está volviendo más fácil ahora que parece que están siendo reimpresos en rústica ) pero en el mismo token, lo haría También es difícil creer que alguien se siente y los lea de principio a fin.

El mejor enfoque para ellos, si no tiene un viaje diario al trabajo donde tiene tiempo libre para sentarse y leer, es leer lo suficiente para saber dónde encontrar cosas en ellos y luego leer un capítulo completo cuando quiera. te encuentras usándolos como libros de referencia para un problema dado. Con Google y Stack Overflow, no es tan común buscar libros de referencia, pero en algunos casos puede encontrar que los libros brindan una idea de que tendría que enviar algo de tiempo extra buscando en Internet.

rjzii
fuente
1
¿Leer un capítulo completo? Eso es aproximadamente medio volumen, y no son volúmenes pequeños. Creo que podría significar una unidad de texto más pequeña.
David Thornley
3

No olvides que al principio, Knuth quería escribir algo sobre cómo escribir un compilador.

Puede obtener mucha información en la red con wikipedia, por ejemplo, pero si no es algún tipo de investigador, solo lea el resumen, obtendrá satisfacción.

Todavía puedes obtener el primer tomo para que puedas leerlo cuando estés aburrido ...

jokoon
fuente
2

Probablemente sea más importante que solucione esos problemas en el libro que simplemente leerlo. Eso requerirá mucho tiempo.

Le gustan 4 volúmenes y 5 fascículos (cualesquiera que sean), por lo que completar los libros probablemente sea mejor que un curso universitario sobre los fundamentos de la informática y convertirlo en el mejor programador de la historia.

Como tienes una familia joven, como yo, me diste una idea genial. Compraría los libros uno a la vez y se los enseñaría a sus hijos.

Peter Turner
fuente
1
"así que completar los libros probablemente sería mejor que un curso universitario": los volúmenes 1-3 se usaron como libros de texto en varios cursos cuando obtuve mi título de CS, y gastaríamos un curso completo en solo la mitad de uno de los volúmenes por ejemplo, "Volumen 3, clasificación y búsqueda" se enseñó como dos cursos separados.
tcrosley
2
Punto menor, pero en este momento solo hay tres volúmenes publicados con el cuarto en progreso. Los fascículos son una preimpresión de lo que se convertirá en el cuarto volumen. www-cs-faculty.stanford.edu/~uno/taocp.html
rjzii
1

Si tiene curiosidad, hágalo, pero toma bastante tiempo digerirlo, por lo que debe tomarse su tiempo.

¿Tiene un viaje diario donde pueda leer? Eso sería perfecto.


EDITAR: Puede encontrar interesante esta vista previa de una pequeña parte del Volumen 4: http://www-cs-faculty.stanford.edu/~uno/fasc1a.ps.gz

(nota: PostScript comprimido)

usuario1249
fuente
1
Desafortunadamente (en este caso, muy afortunado de lo contrario) teletrabajo, así que esa no es una opción.
Zannjaminderson
1

No es algo que la mayoría de la gente quiera sentarse y leer de principio a fin, no. Es una referencia increíblemente invaluable, y ciertamente es bueno recogerla, elegir una sección interesante, leerla y hacer algunos ejercicios. Pero las comparaciones de la enciclopedia hechas anteriormente son bastante adecuadas ... es grande, extensa y detallada. Y algunos de los "ejercicios" son problemas de investigación que pueden llevar años resolver.

Si solo desea un mejor conocimiento de los algoritmos de bajo nivel, podría ser mejor comenzar con los libros de Robert Sedgewick (por ejemplo, "Algoritmos en C", "Algoritmos en Java", etc.).

crimen mental
fuente
1

Si quieres cambiar el mundo, entonces léelo. Si quieres aprender nuevos hacks, entonces no lo leas.

muy tonto
fuente
1

Knuth's TAOCP es una obra maestra. Pero, al igual que cualquier obra maestra (como "Illiad", "Guerra y paz" o "En busca del tiempo perdido" de Proust), no es para todos ni para el tiempo extra.

El libro está muy bien escrito y muy bien investigado. Los problemas son geniales y la explicación de los algoritmos está bien hecha.

El gran problema del libro es el hecho de que Knuth muestra un código para un lenguaje ensamblador ficticio para una computadora ficticia. Entiendo por qué lo hizo, pero el hecho es que apesta.

Recomiendo usar este libro como una biblia. Cuando lo necesites, búscalo. Encontrarás la respuesta. ¡Me pasó más de una vez!

Eduardo
fuente
3
¿Ayudaría si hubiera utilizado el ensamblador real para IBM360 o PDP8?
Martin Beckett
1
Nunca podría haber soportado estos 50 años con un lenguaje ensamblador no ficticio. ¡Pone a todos en desventaja igual!
luser droog