28 de febrero de 2010
Yo leo a Donald Knuth
Después del genial K&R sobre la programación en C, decidí hace dos semanas comprar The Art of Computer Programming de Donald Knuth. Este libro está considerado como una biblia de las verdades eternas de la informática, si bien a veces parece las pajas mentales de un pitagorín collejeable que viene de la olimpiada matemática. Está claro que complica por complicar, que busca la definición más obtusa posible, que nunca dice dos si puede decir ocho más dieciséis partido por doce. Siempre intenta arrimar el ascua informática a su sardina matemática; cuando no puede meterlas a base de sumatorios para calcular el rendimiento o el uso de memoria lo hace a través de los ejemplos. Cuando explicaba las listas enlazadas tuve que mirar en otro libro para no quedarme allí atascado dando vueltas y vueltas al mismo párrafo. La chorrada más grande la estira, la oscurece y le da un retruécano. Supongo que los lectores más formados en matemáticas no tendrán esos problemas.

He leído de momento el primer tomo y he aprendido algoritmos de entrada y salida con tarjetas perforadas y casetes, el concepto de "buffer" y lo jodido que era hacer un malloc antes de Dennis Ritchie. Otras cosas o ya las sabía o las he saltado. La introducción con las matemáticas del COU, la especificación de su propio lenguaje ensamblador y los ejercicios me los he saltado.

La parte en la que habla de los árboles es extensa en el primer volumen y luego tiene dedicada la mitad del tercer volumen. Parece que con eso ya sabes todo lo que hay que saber: árboles binarios y no binarios, secuencialización de esos árboles de tres maneras distintas, varias formas de representación gráfica, búsquedas, inserciones, borrados, etc. Pero si le pido que me indique las farmacias de guardia en un radio de diez kilómetros desde mi geoposición no lo va a saber hacer porque sólo trabaja con claves y no con rangos de búsqueda.

Se puede perder un año con este tío, acabar y no saber hacer un programa útil. Porque él tampoco ha hecho ningún programa de relevancia. Ni se preocupa por explicar los posibles usos de sus algoritmos.

Creo que el verdadero talento del informático que se forra es acercar las máquinas al ser humano y no intentarlo al revés. Claridad de pensamiento y capacidad de síntesis.

Una cosa buena sí que le voy a reconocer: cuando acabas un tomo coges un libro sobre Linux y parece el prospecto de una lavadora. El crecimiento conceptual que te propicia es innegable. Esto creo que es la razón del poderoso atractivo de este libro. Y supongo que también un cierto esnobismo a favor de lo sesudo.

Así que me he quedado un poco como Faemino y Cansado:
Qué va, qué va:
yo leo a Donald Knuth
Actualización:
Ya sabía yo que algo me recordaba la escolástica medieval:
The process should perhaps be called ordering, no sorting; but anyone who tries to call it "ordering" is soon led into confusion because of the many different meanings attached to that word. Consider de following sentence, for example: "Since only two or our tape drives were in working order, I was ordered to order more tape units in short order, in order to order the data several orders of magnitud faster".
"La razón de la sinrazón que a mi razón se hace, de tal manera mi razón enflaquece, que con razón me quejo de la vuestra fermosura".

No vale un pimiento este tío.

12:37:33 ---------------------  

2016 en Denia (Alberto Noguera)
El implacable retrato del desencanto y la corrosión de las ilusiones en la España de principios de siglo.
Comprar por 3,59€ en Amazon.

23 comentarios:

Emprendedor Compulsivo:
Coges ese libro, lo multiplicas por 10, y ya tienes lo que dan en las universidades de ingeniéría informática. Lo enrevesan todo de manera que parezca que estás estudiando algo complicado. Para mí hay 2 tipos de profesores: los que lo complican todo para hacer creer a sus alumnos que sus enseñanzas son "la ostia", y los tienen la habilidad de explicar algo complejo de forma sencilla y que pueda entenderse. En la universidad abundan los del primer tipo.
28 de febrero de 2010 a las 13:10.  

Uno:
Pues yo *no* leo a Donald Knuth, con una n.

Si no recuerdo mal 'the art of computer programming' son tres tomos de algoritmos. Ponerse a leer un libro así, a palo seco, es como leerse una enciclopedia empezando por la a. Nada práctico.

Lo mismo si hubieras esperado a necesitar 'un algoritmo para...' te habría parecido menos inhumano.
28 de febrero de 2010 a las 13:37.  

 alberto 
:

De hecho sí que buscaba varios algoritmos para algo, parecidos a lo que se explica aquí. No aparecen en toda la obra.
28 de febrero de 2010 a las 14:09.  

Programador:
El término "informática" es quizá demasiado amplio. Por un lado hace referencia a la rama de las matemáticas iniciada por A. Turing, y sus finalidades son puramente teóricas. Por otro lado, hallamos la vertiente de técnica e ingeniería. Está claro que estas dos vertientes están profundamente relacionadas, pero uno puede ser un gran ingeniero de software sin haber leído en su vida "Los números computables, con una aplicación al Entscheidungsproblem" o puede ser un teórico en "algoritmos de decisión mediante redes neuronales" sin haber escrito un "HolaMundo" en su vida.
Cuando uno va a leer un clásico de la informática, se puede encontrar en un gran charco matemático sin ninguna aplicación técnica directa... es un riesgo de leer a los clásicos de este campo.
28 de febrero de 2010 a las 14:56.  

Taner:
Hay que tener mucha moral para leer "The Art of Computer Programming". Es infumable y, considerando el poco tiempo que has utilizado para leer el primer tomo, se puede decir que no has aprendido prácticamente nada.

Un libro como el de Donald Knuth se estudia, no es una novela. Por un lado el libro y por otro papel y boli.

Se recomienda analizar el pseudocódigo de los algoritmos e implementarlo en tu lenguaje de programación favorito. Si no lo has hecho puedes estar orgulloso de haber malgastado tu tiempo.

Si quieres aprender informática de verdad has empezado bien. El libro de programación en C que citaste es de lectura obligada. El siguiente debería ser "el Tanenbaum":

"Sistemas operativos: diseño e implementación"

Tanenbaum es la mayor eminencia en sistemas operativos y fue el creador de Minix, sistema operativo a partir del cual surgió Linux.

http://es.wikipedia.org/wiki/Andrew_S._Tanenbaum

Aquí tienes una excelente recopilación con los 20 mejores libros de Informática:

http://www.thefuckingshit.org/?p=376
28 de febrero de 2010 a las 16:11.  

yAhoraProfe:
Yo pasé por la facultad de informática, y ahora no lo recomiendo excepto a los muy motivados. Acabé odiando la universidad y solo pensaba en terminar y salir de allí.
Allí nos puteaban con matemáticas, con exámenes imposibles, te hinchabas a programar (yo lo he acabado odiando), todo el día de la clase a las prácticas.
Ahora cada vez hay menos matemáticas y lo ponen más fácil a los chavalines, que la generación actual es muy vaga.
El Knuth lo tengo, muy duro ponerse con eso. Pero, bien por tí. Disminuye tu riesgo de sufrir Alzheimer.
Ahora estoy de profe en los ciclos (pero en mecanizado) y me he escapado del cutre curro que tienen (casi todos) mis compis de facultad.
Ahora decir que eres informático es como decir que eres gilipollas y quieres que abusen de tí (¿eres informático? Aprovechemonos!).
El trabajo en la educación es muy fácil, aunque algunos días es como Vietnam, por los inevitables disgustos que tiene, como todo trabajo.
Claro, es jodido motivar a niñatos que no quieren currar y algunos están muy quemados, pero en general veo buenos profesionales.

Y para motivación informática, no sé tu nivel pero con de Knuth igual esto es muy básico...practicar inglés:

http://academicearth.org/lectures/programming-methodology-intro
28 de febrero de 2010 a las 17:46.  

 alberto 
:

Amigo Taner: no hay que sentirse inferior porque a ti te costó un huevo. No todos pueden tener 140 de CI. Yo los ejercicios me los salto en todos los libros, no he hecho ejercicios ni cuando estudiaba latín. Hay algo en mi fuero interno que se resiste a hacer nada que me mande nadie.

El libro de Knuth, del que reitero que sólo he leído el primer tomo en una semana y media, tiene muchas cosas que yo ya sabía, como por ejemplo casi todo lo que dice sobre estructuras de datos. Eso lo explican muy bien en un libro muy bonito Andrés Marzal e Isabel Gracia, de la UJI. Otras cosas están viejas, como reconoce el mismo Knuth, y otras faltan, como la programación concurrente. Como suele ocurrir con estos libros, no es que ahora sepa ponerme a programar a ciegas, pero conozco los conceptos y sé dónde encontrar cada cosa si me hiciese falta.

Pero te agradezco la lista de los 20 libros, porque ahora mismo me acabo de poner con "Advanced Programming in the UNIX Environment" (que comparado con Knuth parece el prospecto de una lavadora, lo siento por el señor Stevens), y tengo en la estantería otros tres de esa lista: "Unix Network Programming" tomos I y II, y "Programming Windows" de Charles Petzold. También aquí tardaré poco en leerlos porque la mitad ya me lo sé, porque antes de Knuth había estado leyendo otro libro sobre networking en Linux.
28 de febrero de 2010 a las 18:14.  

astronauta:
alberto,

Ni siquiera con "140 de CI" se asimilan determinados conceptos en una semana y media, otra cosa es quererse engañar a uno mismo. El trabajo de Knuth es muy bueno, no sólo por las estructuras de datos, sino por el tratamiento de la complejidad algoritmica. Parafraseando al un anuncio de hace alrededor de 15 años: si no eres consciente de la complejidad algoritmica, no has comprendido a Knuth. No sólo de árboles vive el hombre, también está la amortiguación de la explosión combinatoria mediante algoritmos aplicados a grafos, etc.
28 de febrero de 2010 a las 20:22.  

Taner:
No te equivoques Alberto, el señor Taner ni se ha molestado en leer el libro de Donald Knuth. Mi valioso tiempo no se malgasta.

La realización de ejercicios es fundamental durante el aprendizaje de cualquier tema de ciencias. Permite asentar los conceptos y adoptar buenas prácticas. Esto no es latín... paciencia, ya lo aprenderás.
28 de febrero de 2010 a las 20:41.  

EL_MALIGNO:
Hola Alberto.

Tiene mucho mérito que profundices en los entresijos de la informática cuando tu formación es de letras.

Tómatelo como un cumplido. Es algo digno de admiración porque a muy pocos de mis amigos de la rama de letras les interesa lo más mínimo la matemática o la algorítmica. Incluso gente con formación de economistas se asustan ante una lista enlazada o un árbol binario.

Estaría bien que un buen día nos hablaras sobre los detalles técnicos y empresariales de tu proyecto, entiendo que ya finado, "nuevosamigos.net".

No sé, si te parece, nos podrías explicar cómo montaste el sitio,los problemas técnicos que tuviste, la viabilidad comercial ... etcéeeeeeeetera.

Todo eso si quieres. Y si no, pues tan amigos.

Es que soy de un curioso que pa qué.
28 de febrero de 2010 a las 20:46.  

Manu (The Java Real Machine):
Como dice Taner, estos libros no se leen, se estudian.

Y no me refiero a que necesites un alto CI para entenderlo, sino a que no están pensados para ser leídos a la ligera.

En la Carrera, los buenos (y complejos) libros te los estudiabas, tomando tus apuntes a la par que te esforzabas en entenderlo.

yAhoraProfe, es que la Informática o te gusta o termina siendo un dolor. Especialmente el programar, donde ya se ve quién está por vocación y quien porque pensaba que era 'algo molón'.
De hecho, normalmente los segundos eran los que terminaban por tirar de prácticas ajenas para conseguir entregar algo medianamente puntuable.
28 de febrero de 2010 a las 21:28.  

TeX, TeX !!:
Alberto, qué cosas escribes...

"Porque él tampoco ha hecho ningún programa de relevancia."

http://en.wikipedia.org/wiki/TeX

Saludos,
Enrique.
28 de febrero de 2010 a las 23:06.  

Impedido mental:
Alberto, ¿eres superdotado o algo así?
1 de marzo de 2010 a las 12:40.  

jinetepalido:
Hola Alberto y compañia, yo de informatica lo basico a nivel de usuario, resumiendo: 0 patatero vaya.
Y "abusando" de ti y de otros internautas (joder que buenos soys cabrones parezco un tio de las cavernas a vuestro lado) me podriais decir con que libro empiezo.
Pero pensar que mi Ci es mas bien bajito, para que nos vamos a engañar a estas alturas ¿verdad? supongo que rozo el minimo jejejeje bueno ¿con cual empiezo? que libro me recomendais para empezar desde el principio.
Nada de linux que me mareo, yo trabajo con el mircrosoft y el windows.
Gracias maestros.
saludos.
1 de marzo de 2010 a las 12:56.  

EL_MALIGNO:
Hola jinetepalido, nos deberías decir que tipo de perfil quieres tener. Me explico.

Es posible que te interese sólo ser un buen usuario: dominar el SO Windows, navegar por Internet, la ofimática de Microsoft, algunos programas de dibujo y retoque fotográfico y herramientas relacionadas con algún hobby tuyo (por ejemplo la edición de vídeo)

Quizás quieras iniciarte en la programación y crear tus propias aplicaciones.

Podría ser que tus intereses estuvieran más ligados al hardware y al funcionamiento de los diversos periféricos y dispositivos de un PC.

Concreta un poco más tu perfil y creo que te podremos ayudar entre todos sin más problemas.
1 de marzo de 2010 a las 20:41.  

Informático:
Manu (The Java Real Machine), no puedo estar más de acuerdo contigo.
La Informática es una Ingeniería y como tal, sus libros, no se leen, se estudian.
Y efectivamente, es un trabajo muy "cansino", de hecho, a los 5 años la mayoría de los que no tienen esa vocación acaban de policías o en otro tipo de funcionariado.
Por último, a mi me motiva programar, pero no hay ni una práctica que no copiase en la Facultad... ;-)
1 de marzo de 2010 a las 20:41.  

Spartan:
No conozco el libro de Knuth que mencionas, pero si a el de Ritchie que comentaste en otra entrada. Al principio, en los albores de la informática, las publicaciones era mucho mas escasas y de mas calidad, y tenian un enfoque mas academico (en el mejor sentido de la palabra). Hoy en día, la mayoría de las plataformas de desarrollo de software están orientadas a la productividad en el sentido mas peyorativo de la palabra.

Soy ingeniero informático y empecé estudiando C y escribiendo los programas en papel. Esto tenia algo muy positivo: para empezar aprendías los fundamentos de la programación (busquedas, manejo de listas, arboles, etc.) y por otro lado, al escribir en papel, te veias obligado a conocer a fondo la sintaxis del lenguaje.

Hoy en día todos los estudiantes empiezan con Java o .Net, que son plataformas mas que leguajes; que vienen con editores potentisimos y con glosarios de funciones y de clases, y casi casi escriben solos, con lo cual pocos estudiantes (y profesionales) saben hoy lo que es una lista ni un arbol, ni maldita la falta que les hace de cara a su labor profesional

Lo que ocurre es que la programación, el desarrollo de software, ha cambiado. Eso también tiene cosas buenas; imagínate que te piden construir un sistema de gestión documental en C, te puede dar un mal. Java, C# y demás tienen largas colecciones de clases que te permitirán hacerlo en 20 veces menos tiempo que si lo escribieras en C o en Pascal.

A lo que voy, es que, hoy por hoy, las diferentes plataformas de desarrollo de software facilitan mucho la vida a tanto a empresas como a clientes. El precio a pagar es dejar que la API haga mucho trabajo por ti, y muchas veces la API no es todo lo eficiente que debe ser, cuando no directacmente ineficiente, como en la gestión de punteros en Java, por ejemplo.
1 de marzo de 2010 a las 21:06.  

Spartan (otra vez):
Completamnete con lo que ha dicho, "programador", el comentario mas sensato de todos. Lo que se conoce como "informática" va camino de ser una ambiguedad. El tratamiento de la información mediante computadores es algo que engloba una cantidad ingente de lenguajes, sistemas, disciplinas, concepctos...
1 de marzo de 2010 a las 21:28.  

Un estudiante:
Bueno, hacía mucho que no escribo (soy de esos que leen pero no comentan) pero quiero suscribir algo como estudiante de ingeniería (aunque no sea informática y ese libro no esté en los que manejo): los ejercicios en este tipo de cosas son fundamentales.

Yo también era de saltarme los ejercicios pero la carrera me ha enseñado a valorarlos. La universidad (al menos en su versión politécnica) y los libros como esos no son para estudiantes de la LOGSE donde se da todo mascado y se repite cien mil veces lo mismo. El libro tiene la teoría necesaria normalmente, es al tratar de hacer los ejercicios cuando aprendes a convertir eso en algo aplicable. Si ya sabes hacer algo, sí, es una pérdida de tiempo, pero muchas veces no te das cuenta de que no lo sabes hacer hasta que lo intentas y te percatas de como se puede complicar. Pero es que esto son libros para mayores, donde no te mandan hacer nada. Lo haces si quieres. Eres tú el que mira si luego con esa teoría ha aprendido algo que pueda usar o es necesaria la fase de ponerlo a prueba.
1 de marzo de 2010 a las 23:34.  

Anónimo:
EL_MALIGNO: Pues si, dominar el SO windows y la ofimatica base no estaria mal pero mi meta es la programacion basica. ¿Imposible? bueno si un tipo como ZP es presidente de España, jinetepalido puede llegar a programar "algo" con un par.
Muchas gracias por responder ¿por donden empezamos?
Un saludo.
2 de marzo de 2010 a las 10:39.  

JesusBarbas:
Para el anónimo que quiere empezar:
NO te lances con lenguajes cuya memoria debas administrar manualmente (punteros, etc) como C plano o C++.
Empieza con lenguajes administrados, como JAVA o C# .NET. Un buen entorno de desarrollo te ayudará muchísimo, como Eclipse o Visual Studio. Es fundamental para que el tiempo te cunda.

Un buen lugar donde trastear online sin instalar nada es este: http://code.google.com/apis/ajax/playground/, en el apartado "javaScript API".
2 de marzo de 2010 a las 19:50.  

Improductivo:
Knuth es un científico teórico. Kernighan es ingeniero. A mi modesto entender, ni el objetivo ni la audiencia a la que va dirigido TAOCP son comparables a los del libro de C.

Salvando las distancias, es como comparar un tratado de álgebra con el manual de una calculadora científica. Posiblemente lo segundo sea bastante más útil para el común de los mortales que lo primero.

Desde luego, Knuth no está utilizando su talento al escribir los tomos con el objetivo de "forrarse" con la informática :).
2 de marzo de 2010 a las 20:27.  

 alberto 
:

Knuth es mediocre como un catedrático. Equivaldría a esos que en mi disciplina se dedican a la crítica académica en sesudo lenguaje y notas al pie de novelas que ellos ni han escrito ni nunca escribirán (demostrando que no las entienden de verdad). La verdadera inteligencia debe de ser creativa.

En todo caso, sigo leyéndolo porque el libro es un buen compendio de cosas que conviene saber al que programa.
2 de marzo de 2010 a las 22:50.  



© A. Noguera

"Mirar el río hecho de tiempo y agua
y recordar que el tiempo es otro río,
saber que nos perdemos como el río
y que los rostros pasan como el agua".
Jorge Luis Borges


Leer los archivos

Entradas destacadas:
Pepito Relámpago - Pepita Nuncabaja - Seis meses en meetic - Etapas de la burbuja