Jump to ratings and reviews

Structure and Interpretation of Computer Programs

Structure and Interpretation of Computer Programs has had a dramatic impact on computer science curricula over the past decade. This long-awaited revision contains changes throughout the text. There are new implementations of most of the major programming systems in the book, including the interpreters and compilers, and the authors have incorporated many small changes that reflect their experience teaching the course at MIT since the first edition was published. A new theme has been introduced that emphasizes the central role played by different approaches to dealing with time in computational models: objects with state, concurrent programming, functional programming and lazy evaluation, and nondeterministic programming. There are new example sections on higher-order procedures in graphics and on applications of stream processing in numerical programming, and many new exercises. In addition, all the programs have been reworked to run in any Scheme implementation that adheres to the IEEE standard.

657 pages, Paperback

First published January 1, 1984

Loading...
Loading...

About the author

Harold Abelson

34 books108 followers
Harold 'Hal' Abelson, Ph.D., is Class of 1922 Professor of Computer Science and Engineering in the Department of Electrical Engineering and Computer Science at MIT, a fellow of the IEEE, and a founding director of both Creative Commons and the Free Software Foundation.

Ratings & Reviews

What do you think?

Friends & Following

Create a free account to discover what your friends think of this book!

Community Reviews

5 stars
3,170 (64%)
4 stars
1,077 (22%)
3 stars
449 (9%)
2 stars
119 (2%)
1 star
64 (1%)
Displaying 1 - 2 of 2 reviews
Profile Image for Hưng Đặng.
137 reviews74 followers
December 13, 2020
<đang cập nhật>
Cuốn này tớ đọc lướt từ tháng 1. Mà do đọc lướt nên không làm bài tập. Rất nhiều các review khác tin rằng đây là một tội lớn và chắc là thế. Ý tưởng của tác giả đến với tớ rất mơ hồ.

Lý do review 4 sao ko phải do thiếu sót gì của tác giả mà phần nhiều là tớ ko chạy một dòng Scheme/Lisp nào cả nên bỏ lỡ rất nhiều những kiến thức ở đây.

Một lượng kha khá Toán được học và ôn tập như phương pháp Newton để ước lượng căn bậc 2. Nhắc lại phương pháp Euler để tìm UCLN. Lý thuyết của Lamé và Fermat. Số phức được áp dụng để mô tả data-directed programming. Một số từ vựng TA về Toán mà tớ ko biết "linear combination, polynomial, rational function and trigonometric function" là những thứ sẽ được đọc thêm.

Về lập trình tớ học được khái niệm Higher order procedure mà sau này đc áp dụng ở rất nhiều nơi như HOF hay HOC. Khái niệm về lamda có vẻ giống anonymous function. Tìm giá trị của phương trình bằng phương thức half-interval. Closure đc đề cập ngay ở dữ liệu phức tạp. Cấu trúc dữ liệu "pair" đc giới thiệu để xây dựng 1 cấu trúc phức tạp hơn "list".

Có một câu mà tớ thấy phản ảnh triết lý "single source of truth": It is better to have 100 functions operate on one data structure than to have 10 functions operate on 10 data structures.

Trong chương 2, tớ đc thấy biến đổi dữ liệu từ dạng list sang dạng binary tree. Tớ sẽ muốn tự triển khai dạng dữ liệu này sau khi đọc xong. Chương cũng đề cập đến module hóa code và cách thức dùng data direct programming tránh naming conflicts. Ngoài ra "message passing" là phương pháp hay khác đc sử dụng nhiều trong chương 3 mà tớ sẽ muốn được nghiên cứu sâu hơn.

Chương 3 tập trung nói về oop mà ở đây từ hay đc dùng là assignment. Oop mặc dù với khả năng module hóa cao nhờ các object lại gặp phải vấn đề rất lớn về sự phức tạp khi object biến đổi. Sự phức tạp này tăng gấp bội khi ta sử dụng đa nhiệm cùng oop. Cũng từ đây tớ nhận ra sự dễ hiểu của fp khi i/o nhất quán nhưng với lập trình hiện đại, ko thể tránh khỏi việc biến đổi state (thường là object). Về xử lý đồng thời là một thách thức lớn với oop mà một phương pháp đc đề cập đến ở đây là "serialization". Khái niệm "stream" - chia nhỏ dữ liệu lớn có gì đó tương đồng với Promise mà t học trong js. T ko tưởng đc sự phức tạp lớn đến đâu khi áp dụng stream cho state để xử lý đồng thời.

Chương 4 phát triển ý tưởng ngôn ngữ lập trình cần phù hợp với vấn đề mà nó giải quyết. Từ đó giúp ta suy nghĩ tốt hơn về vấn đề phải đối mặt. Trên ý tưởng này, chương dạy cách xây dựng "evaluator" cho một ngôn ngữ. Tới thời điểm này Lisp đc sử dụng khác đi cho công việc quản lý database.
Displaying 1 - 2 of 2 reviews