Soy estudiante de CS y, sinceramente, no entiendo los libros de Knuth [cerrado]

52

Me topé con esta cita de Bill Gates: "Definitivamente deberías enviarme un currículum si puedes leer todo". Estaba hablando de los libros de El arte de la programación . Así que tenía mucha curiosidad y quiero leerlo todo. Pero, sinceramente, no lo entiendo.

Realmente no soy tan intelectual. Esta debería ser la razón por la que no puedo entenderlo, pero estoy ansioso por aprender. Actualmente estoy leyendo el Volumen 1 sobre algoritmos fundamentales. ¿Hay algún libro que sea amigable para los principiantes / personas lentas como yo, que pueda ayudar a desarrollar mi conocimiento para que pueda leer el libro de Knuth con facilidad en el futuro?

Rho
fuente
Humm digamos que lo entendería (y tú también, supongo), pero tomaría mucho tiempo y hay libros más fáciles hoy en día ...
Nils
22
Pueden ser difíciles de leer, y puede haber libros más fáciles, pero debe leerlos de todos modos. ¡Hasta ahora solo he leído el primer libro, y no entiendo todo en eso! pero vale la pena La informática es difícil . Cuanto antes se dé cuenta de que no es lo suficientemente inteligente como para comprenderlo, antes podrá comenzar a aprender cómo aprenderlo.
Michael K
2
Están inclinados a las matemáticas para los programadores matemáticos. CS ha evolucionado en los últimos años, y hay un montón de áreas beneficiosas que no son matemáticas. ¿Qué dirección quieres desarrollar más? Si se trata de algoritmos y tal, probablemente sean de buena lectura, si se trata de otras áreas, expandirán su horizonte, pero tanto como leer un libro sobre algún tema de biología. Entonces, dependiendo de su área, pueden estar en cualquier lugar, desde misión crítica hasta casi inútiles.
Codificador
1
¿Desde cuándo los programadores consideran que Bill Gates tiene autoridad?
Giorgio
2
Coursera tiene 6 cursos gratuitos sobre Algoritmos (Algoritmos Partes 1 y 2, Diseño y Análisis de Algoritmos Partes 1 y 2, y Combinatoria Analítica Partes 1 y 2).
Anthony

Respuestas:

39

Incluso creo que el libro de Knuth es un poco avanzado y difícil de entender. Esos libros son definitivamente para algoritmos de nivel de investigación en mi humilde opinión.

Entonces, ¿hay algún libro que sea amigable para principiantes / personas lentas como yo?

La introducción a los algoritmos por CLRS es mucho más simple.

EDITAR :

Aún así, si quieres leer el libro de Knuth, primero debes ir a través de Concrete Mathematics . Knuth quiere que sus alumnos sean conscientes de la parte matemática básica del análisis de algoritmos.

Prasoon Saurav
fuente
55
El manual de diseño de algoritmos es aún más fácil / más accesible - se acerca a ser divertido de leer
Martin Beckett
La introducción a los algoritmos es un gran libro. Usamos esto para nuestro primer curso de algoritmos CSE y me encantó. Aunque debo decir que pasé muchas iteraciones revisando los mismos ejemplos para decir realmente que los entiendo.
Chris
44
@SidCool: Hay una tercera edición de CLRS con una docena de nuevas secciones.
Bill the Lizard
10
Los libros de Knuth son Guerra y paz de programación. Son buenos, pero se usan principalmente para hacer que las estanterías se vean impresionantes.
Gaurav
66
"¿Incluso creo que el libro de Knuth está un poco avanzado"? modestia eh :)
oculto
57

Asegúrese de leer toda la cita de Gates, incluida esta:

"Me tomó una disciplina increíble, y varios meses, para leerlo. Estudié 20 páginas, lo guardé durante una semana y volví por otras 20 páginas. Si alguien es tan descarado que cree que lo sabe todo, Knuth lo sabrá". ayúdelos a comprender que el mundo es profundo y complicado ".

No son libros fáciles y no están destinados a serlo. Recuerde que uno de los objetivos de Knuth era aportar rigor matemático a la informática . Eso es genial si quieres probar algo sobre un algoritmo, pero no tan bueno si solo quieres saber cómo funciona.

Michael Dorfman tiene algunos buenos consejos para leer los libros en su respuesta a la pregunta (ahora eliminada) en Stackoverflow sobre ¿Qué puedo obtener al leer el lote? . Si no tiene 10k rep, aún puede ver la pregunta y su respuesta en la máquina de retroceso .

¿Qué obtendrás al leer el lote? Una excelente base en informática. Comprenderá cómo funcionan las computadoras, desde puertas lógicas hasta compiladores. Pensará en problemas que realmente nunca supo que eran problemas (es decir, ¿cuál es la forma más rápida de multiplicar?) Y verá conexiones algorítmicas entre cosas que nunca pensó que estaban relacionadas (cauces de ríos, ARN y paréntesis anidados, por ejemplo).

Estoy completamente en desacuerdo con la gente que dice "construir software en lugar de leer sobre software de construcción". Hay una diferencia entre las disciplinas de Ingeniería de Software y Ciencias de la Computación. TAOCP es sobre esto último.

Si aún no ha comenzado, tengo algunas recomendaciones.

Primero, es posible que desee comenzar con el Volumen 4. Es un material emocionante, muy actualizado, y el sentido del humor de Knuth brilla. Además, hay videos disponibles (en el sitio de Stanford SPCD o Stanford iTunes) donde Knuth discute varias secciones. Estos videos son muy recomendables. Los fascículos 0, 1, 2, 3 y 4 del Volumen 4 están disponibles como libros en rústica separados. Juntos, el material V4 publicado es más grande que cualquiera de los primeros 3 volúmenes, pero se divide en bocadillos del tamaño de un bocado. (Me pregunto si los volúmenes 1-3 parecerían menos terroríficos para las personas si cada volumen se hubiera publicado en forma de libro en rústica de un solo capítulo ...)

Dependiendo de sus antecedentes matemáticos, le recomendaría leer el Capítulo 1 la primera vez y volver a él según sea necesario. De hecho, es probable que desee leer cada sección (al menos) dos veces, rápidamente la primera vez, solo para obtener la intuición y la esencia de los argumentos, y luego, lenta y cuidadosamente, entender cada paso.

Asegúrese de leer el Volumen 1, Fascículo 1 en MMIX en lugar de las secciones anteriores en MIX. MMIX es mejor en muchos aspectos, y sería mejor convertir MIX en el texto a MMIX a medida que avanza que tratar de abarcar ambos mundos.

Una regla general: no te saltes los ejercicios. Hay mucho material bueno en las preguntas (y respuestas). Haz tantos ejercicios como puedas; pero léalos todos (y lea las respuestas, una vez que haya analizado el problema o haya decidido darle una oportunidad).

Finalmente, si realmente detecta el error: lea el índice. Muchos chistes escondidos allí.

Naturalmente, StackOverflow sería un buen lugar para publicar preguntas específicas en el texto, en caso de que surjan ...

Para otros recursos, he descubierto que es útil explorar los programas de estudios de las escuelas de informática bien consideradas. Por ejemplo, libros de texto para clases de algoritmos iniciales:

Corbin March
fuente
El enlace a SO estaba roto, pero encontré una publicación que imagino que es similar: stackoverflow.com/questions/1022167/…
asjohnson
+1 para la publicación original en Way Back Machine y la lista de libros de esas universidades
Anthony
+1 para recomendar comenzar con el Volumen 4, Fascículos 0, 1, 2, 3 y 4, y también para leer sobre MMIX en lugar de MIX. Como resultado, comenzaré con el Volumen 1, Fascículo 1, porque cubre MMIX.
Shaun Luttin
Como programador de Java / c, siento que <Estructuras de datos y análisis de algoritmos en Java> es muy fácil de entender y bastante práctica.
Eric Wang
29

Knuth es el autor de informática más venerado, citado, comentado y respetado de la historia. Sus libros adornan las estanterías de todos los desarrolladores de software serios, y se los menciona con el mismo nivel de respeto que las personas le dan a la Biblia y al Arte de la Guerra.

Incluso he escuchado que algunas personas han leído partes de los libros de Knuth.

La mayoría de la gente solo tiene la intención .

Personalmente, los estoy guardando para mi jubilación

Steven A. Lowe
fuente
22
¡Es por eso que las copias usadas gastadas valen más que las nuevas!
Martin Beckett
13
Si entiendes El arte de la guerra, te darás cuenta de que solo necesitas hacer que la gente piense que entiendes a Knuth cuando no lo entiendes y, a la inversa, que no entiendes a Knuth cuando lo entiendes. Si no, no lo haces. Y si comprende el libro 5 del Libro de los Cinco Anillos, ni siquiera tendrá que hablar de Knuth. Y si has leído la programación de ESR The Art of Unix y entiendes los koans, ni siquiera necesitarás Knuth, porque habrás trascendido la barrera de la complejidad.
Christopher Mahan
20

Los libros de Knuth cambiaron el campo de los algoritmos para siempre. Él mismo ha dicho que '2 páginas en mi libro es el trabajo profesional completo de alguien' y que sus libros eran difíciles de leer. El libro contiene material condensado de años de trabajo en informática.

No debes sentirte mal si no puedes entenderlo.

Como dijo Prasoon, CLRS es un libro más simple de leer.

También tiene Algoritmos de Rajasekaran, Sahni et al, que es fácil de entender.

Arjun J Rao
fuente
eso es increíble de escuchar ... pensé que soy el único que tiene problemas para leer este libro ... muchas gracias
Rho
77
@ Raymond Ho: No creo que a nadie le guste leer los libros de Knuth. Conozco al menos una persona que los tiene en la estantería solo por hacer que el estante se vea impresionante.
FrustratedWithFormsDesigner
12

Cuando me gradué, recogí los primeros tres volúmenes de TAOCP como un regalo de graduación y traté de leerlos directamente. Nunca lo logré. En estos días he superado quizás 1/3 de los primeros tres volúmenes (pensado sin ningún orden en particular). El material es definitivamente denso, pero he aprendido tres consejos que me ayudaron mucho.

Primero, no intentes leer de principio a fin. TAOCP es realmente un trabajo de referencia tanto como cualquier otra cosa, y he descubierto que es mejor leer una sección cuando es relevante para un problema que está tratando de resolver. Como muchas cosas en el mundo, comprender las soluciones es mucho más fácil una vez que ha encontrado los problemas que intentan resolver.

A continuación, ese diagrama de flujo en el frente del libro, no es solo un poco de humor, sino un consejo bastante útil. Lea las secciones en las que está trabajando de forma iterativa, comenzando primero con solo los conceptos generales y luego profundizando suavemente en las matemáticas.

Finalmente, tenga a mano un buen papel antiguo y un lápiz para trabajar con los algoritmos tal como se describen, y resuelva algunos de los problemas fáciles. Ayuda mucho a reforzar lo que estás leyendo.

Cercerilla
fuente
10

No se preocupe, la mayoría de las personas no entienden El arte de la programación de computadoras (TAOCP). Así que no te consideres lento o un novato por no entender, eres como el otro 99,99% de nosotros que no lo entiendo.

Eres bastante ambicioso si quieres llegar al nivel en el que puedas leer The TAOCP con facilidad . Yo solo he hojeado los libros antes de guardarlos. Probablemente solo haya un puñado de personas en este planeta que entiendan TAOCP.

Mira la publicación: Los programadores de libros no leen realmente por Bill the Lizard.

Hay muchos otros libros enumerados allí que son bastante legibles , comprensibles y de los que puede beneficiarse de inmediato .

Personalmente me gusta:

esponja
fuente
8

Tropecé con esta cita de Bill Gates: "Definitivamente deberías enviarme un currículum si puedes leer todo". Él estaba hablando de los libros de El arte de la programación ... Así que tenía mucha curiosidad y quería leerlo todo, pero honestamente, no lo entiendo en absoluto I'm really not that highly intellectual being... Así que esta debería ser la razón por la que no puedo entenderlo. , pero estoy ansioso por aprender ... Actualmente estoy leyendo el volumen 1 sobre algo fundamental ... Entonces, ¿hay algún libro que sea amigable para personas novatas / lentas como yo? Así que puedo construirme y espero poder leer el libro de Knuth en el futuro.

si se define a sí mismo como not a highly intellectual beingentonces, se está estableciendo con bajas expectativas. Tienes que romper esa mentalidad si quieres hacer algo que valga la pena. No debe haber ninguna duda en su mente de que puede lograr algo. Además, lograrlo no significa que lo lograrás fácilmente.

Las cosas que vale la pena perseguir son las que son difíciles ... y eso no es un cliché. En software, ingeniería, en la vida en general, si quieres lograr algo, tienes que ir por las cosas que son difíciles, las cosas que la gente evita y no conformarte con los denominadores comunes más bajos de las cosas.

Primero, no está claro cuál es su experiencia en CS. El libro de Knuth requiere un cierto grado de madurez. Pocas personas con un título de CS pueden superarlo con facilidad. No esperaría que un estudiante de CS que acaba de terminar su primer curso de algoritmos pueda leer incluso un solo libro de Knuth. La madurez necesaria para obtenerla simplemente no está allí, y eso no tiene nada que ver con la capacidad mental del estudiante.

Necesitas tener tus algoritmos básicos fríos y claros, y necesitas tener una buena cantidad de programación (trabajo y / o escolástica) en tu haber - Yo diría, 40 créditos en programación al menos. También necesita tener sus matemáticas CS en terreno firme.

No puede avanzar mucho sin tener una buena comprensión de las matemáticas discretas (y posiblemente la teoría de la computación).

No es que necesite ese conocimiento para trabajar en los problemas de Knuth, sino que necesita una madurez para poder atravesar ese tipo de material.

Primero elija un libro y un solo libro (el libro de CLRS como se sugirió anteriormente), y trabaje de principio a fin. Cuando sea posible, haga programas que implementen los algoritmos. No use Java o C #, ni siquiera C ++. Vaya a los huesos desnudos C y tenga la sensación de construir cosas a partir de restos de metal desnudos.

También obtenga el libro de Knuth sobre "Matemáticas concretas" si no ha realizado un curso de matemática discreta y teoría de la computación. Sería bueno para ti leer ese libro también.

Luego aborde la enciclopedia de Knuth, un tomo, un capítulo a la vez. No vaya a otro capítulo sin tener una buena comprensión del primero.

Te sugiero que primero revises el volumen I (algoritmos fundamentales), luego el volumen III (búsqueda y clasificación). Esos deberían ser tus objetivos inmediatos. Luego, más tarde (mucho más tarde), aborde el volumen IV (Algoritmos combinatorios) y luego el Volumen II (Algoritmos semi-numéricos).

No te sientas mal si no lo entiendes al principio. He estado tratando de pasar el volumen I y III durante años (10 años ahora).

Y tampoco deberías ponerle tanto peso. No lo hagas para demostrar algo a alguien o a ti mismo. Hazlo porque estás intelectualmente interesado en hacerlo. Puede dominar los algoritmos simplemente usando el libro de CLRS (o cualquiera de los excelentes libros de nivel de posgrado).

Sé pragmático y date un descanso. Trate de leer el libro de Knuth como una ambición personal a largo plazo, no como una prueba inmediata de que usted es material de CS;)

Hay otras cosas más importantes (en cuanto a la carrera) para suicidarse;)

luis.espinal
fuente
2
Nota: Usted se refiere al Volumen III dos veces y nunca al Volumen II, nombrando al Volumen III dos nombres diferentes.
alternativa
Gracias por hacérmelo saber (+1). El orden al que me refería era el siguiente: primer volumen I (algoritmos fundamentales), luego volumen III (búsqueda y clasificación), luego volumen IV (algoritmos combinatorios) y luego volumen II (algoritmos semi-numéricos).
luis.espinal
66
+1 No es porque las cosas son difíciles que no nos atrevamos; es porque no nos atrevemos a que sean difíciles. - Seneca
mouviciel
4

Incluso antes de comenzar con Knuth, tuve que recorrer cuatro libros diferentes. Los dos primeros son los libros de Sedgewick sobre Algoritmos. Estos resumen de la mayoría de los algoritmos y estructuras de datos en una forma implementada real, para que pueda ver qué son y cómo funcionan. Estos libros vienen en diferentes versiones de lenguaje: leí los de C, pero iirc se escribieron originalmente en Pascal, y hay versiones de C ++ y Java.

Después de eso, trabajé en una buena parte del libro de Cormen sobre Algoritmos y usé la Introducción al análisis de algoritmos de Sedgewick y Flajolet como texto complementario, ya que está más en la línea del rigor matemático de Knuth que el libro de Cormen. Todavía tengo que terminar cualquiera de estos, principalmente seleccionando las partes que siento que necesito.

Después de leerlos y obtener un título en Matemáticas, puedo leer algunos de TAOCP, pero es una lectura difícil. Eso no quiere decir que no sea útil. Los TAOCP son algunos de los mejores manuales de referencia de algoritmos, pero pensar que puede usarlos para comprender "completamente" cualquier cosa es algo problemático.

Justin Hamilton
fuente