-
Introducción al libro
- Hay un libro que prestó a un estudiante para que lo leyera durante el verano
- Este libro es una de las obras más importantes de la ciencia de la computación y tuvo una gran influencia en su carrera e investigación
- El título del libro es Structure and Interpretation of Computer Programs (SICP), de Hal Abelson y Jerry Sussman
-
La importancia del libro
- Este libro tuvo un gran impacto cuando conoció por primera vez la ciencia de la computación
- Presenta los elementos básicos de la programación y explora diversos temas
- Entre los temas se incluyen abstracción lambda, computación de orden superior, estructuras de datos complejas, modularidad, streams, evaluación perezosa, construcción de intérpretes y compiladores, y gestión de almacenamiento
-
Enfoque de diseño de lenguajes
- Hal y Jerry veían todo como un ejercicio de diseño de lenguajes
- Introducen el concepto de estructurar sistemas complejos mediante un diseño en capas
- Cada capa se construye combinando las partes que se consideran primitivas en ese nivel
-
La esencia de la ciencia de la computación
- La revolución informática es una revolución en la forma de pensar y de expresarse
- Introduce el concepto de epistemología procedimental, que estudia la estructura del conocimiento desde una perspectiva imperativa
- La ciencia de la computación proporciona un marco para el "cómo"
-
Vigencia continua del libro
- Compró este libro en 1988 y sigue siendo relevante
- Es uno de los pocos libros de ciencia de la computación que conservan su valor con el paso del tiempo
- Al igual que Lectures on Physics de Feynman, captura muy bien la esencia de la ciencia de la computación
-
Actualización
- Actualizado el 27 de enero de 2024
- Este libro también está incluido en una bibliografía comentada de Lisp
1 comentarios
Comentarios de Hacker News
Se puede aprender el contenido del libro con los videos de las clases de 1986 de Abelson y Sussman. Su explicación sobre la estratificación de abstracciones me ha resultado útil tanto en lo personal como en mi rol de mentor
Los textos clásicos como SICP hablan sobre diseño de programas, pero hoy en día creo que el diseño de sistemas es más importante. No sé si los sistemas distribuidos forman parte de la informática, pero es un problema más general que hay que resolver. Hay que escribir los sistemas de la forma más simple posible y usar herramientas de observabilidad para detectar fallas en el diseño; después, resolver los problemas con estructuras de datos u otros métodos propios de la informática. En la mayoría de los casos, la notación Big O y la complejidad en tiempo de ejecución no importan tanto, y con arreglos y CPUs rápidas se pueden resolver la mayoría de los problemas. Cuando hay problemas de rendimiento, hay que perfilar el programa para encontrar los hotspots. La informática no enseña cómo funciona el caché de memoria de la CPU. Un algoritmo de grafos elegante puede tener buena complejidad temporal, pero destrozar por completo el caché de la CPU, cuando quizá se habría podido resolver más rápido usando arreglos. Los problemas más generales son la tolerancia a fallos, la corrección de los bloqueos distribuidos y de las colas, y la escalabilidad del sistema. Puede que esté sesgado por mi formación en ingeniería informática/eléctrica
El enlace a la copia gratuita está roto. Hacia 2001, solo la versión HTML se ofrecía gratis, y alguien la convirtió a TeXinfo. Si hoy quieres estudiar SICP, puedes ejecutar el código en MIT Scheme o en DrRacket
"The Elements of Programming Style" vale la pena leerlo tres veces, y yo lo he leído aún más veces y le he sacado mucho provecho. Se puede consultar la reseña de 2010
Quería que me gustara SICP, pero Lisp se me hizo difícil. Me gustan Haskell y Standard ML. Me pregunto si a otras personas les pasó algo parecido. Podría ser interesante leer un libro con un espíritu similar al de SICP en otro lenguaje. No me interesa hacer SICP en JavaScript
Me gustaría saber qué opinan de "Software Design for Flexibility: How to Avoid Programming Yourself into a Corner"
SICP me ayudó a entender que existen distintos modelos de programación. Este libro ayuda a leer la documentación de lenguajes, bibliotecas y frameworks y a orientarse
Llevo 25 años programando y tengo el libro desde hace unos 10 años. Hace poco empecé con Dr. Racket. Lo bueno de Dr. Racket es que, al pasar el mouse sobre una variable, puedes ver visualmente sus conexiones con otras partes del código. Pero me molestaba un poco que no fuera VS Code. Así que armé un entorno para resolver los ejercicios usando VS Code (en realidad, Cursor). La integración con LLM está genial: puedes darle tu código y la narrativa que escribiste, y pedir retroalimentación. Avancé un poco con los ejercicios, pero convertí el código, las respuestas que escribí y la retroalimentación que recibí del LLM en un sitio estático. Fue una forma divertida de pasar el tiempo. No creo que pudiera entender SICP por completo sin la ayuda de un LLM, pero me parece interesante ver cómo integrar los LLM en la práctica
En la segunda lectura empecé a explorar las notas al pie y la bibliografía, y descubrí que ahí hay un mundo hermoso. Hay un artículo en el que Sussman y su equipo diseñan un procesador programable a medida para calcular propiedades de cuerpos celestes. Siempre sorprende
Comparte enlaces a la versión original y a la versión en JavaScript