Video bài giảng SICP (1986)
(ocw.mit.edu)- Có thể theo dõi toàn bộ mạch nội dung của MIT 6.001
Structure and Interpretation of Computer Programsqua 20 video bài giảng, rất phù hợp để ôn lại SICP một cách có hệ thống - Bài giảng được tổ chức vào tháng 7 năm 1986 dành cho nhân viên Hewlett-Packard, và do Hewlett-Packard Television sản xuất chuyên nghiệp
- Video có thể xem trên MIT OCW và một trang cung cấp riêng, đồng thời được phát hành theo giấy phép Creative Commons tương thích với mục đích sử dụng thương mại
- Nội dung bài giảng dựa trên ấn bản 1 của SICP năm 1985; đến ấn bản 2 năm 1996, một số chương trình đã được viết lại và có thêm tài liệu mới
- Chủ đề tổng thể và thứ tự trình bày vẫn được giữ nguyên, nên vẫn còn giá trị tham khảo với cả người học bằng ấn bản 2
Cấu trúc bài giảng và cách cung cấp
- Hal Abelson và Gerald Jay Sussman có 20 bài giảng bao quát trọn vẹn khóa MIT 6.001
Structure and Interpretation of Computer Programs - Bài giảng được tổ chức vào tháng 7 năm 1986 dành cho nhân viên Hewlett-Packard, và do Hewlett-Packard Television sản xuất chuyên nghiệp
- Video là tài liệu do Hal Abelson và Gerald Jay Sussman cung cấp, được sử dụng với sự cho phép
- Cùng những video này còn được cung cấp ngoài MIT OCW tại trang riêng, theo giấy phép Creative Commons tương thích với mục đích sử dụng thương mại
Lưu ý về phiên bản giáo trình
- Loạt bài giảng này được xây dựng dựa trên ấn bản 1 của Structure and Interpretation of Computer Programs xuất bản năm 1985
- Ở ấn bản 2 năm 1996, nhiều chương trình được đề cập trong bài giảng đã được viết lại và có thêm tài liệu mới
- Chủ đề tổng thể và thứ tự trình bày không thay đổi, nên loạt video bài giảng này vẫn hữu ích cho sinh viên dùng ấn bản 2
Danh sách bài giảng
-
Lisp và trừu tượng hóa thủ tục
- 1A: Overview and Introduction to Lisp: Tổng quan và giới thiệu về Lisp
- 1B: Procedures and Processes; Substitution Model: Thủ tục, tiến trình và mô hình thay thế
- 2A: Higher-order Procedures: Thủ tục bậc cao
-
Dữ liệu và xử lý ký hiệu
- 2B: Compound Data: Dữ liệu hợp thành
- 3A: Henderson Escher Example: Ví dụ Henderson Escher
- 3B: Symbolic Differentiation; Quotation: Vi phân ký hiệu và quotation
- 4A: Pattern Matching and Rule-based Substitution: So khớp mẫu và thay thế dựa trên luật
- 4B: Generic Operators: Toán tử generic
-
Trạng thái, đối tượng, stream
- 5A: Assignment, State, and Side-effects: Gán, trạng thái và tác dụng phụ
- 5B: Computational Objects: Đối tượng tính toán
- 6A: Streams, Part 1: Stream, phần 1
- 6B: Streams, Part 2: Stream, phần 2
-
Evaluator và lập trình logic
- 7A: Metacircular Evaluator, Part 1: Metacircular evaluator, phần 1
- 7B: Metacircular Evaluator, Part 2: Metacircular evaluator, phần 2
- 8A: Logic Programming, Part 1: Lập trình logic, phần 1
- 8B: Logic Programming, Part 2: Lập trình logic, phần 2
-
Mô hình máy và biên dịch
- 9A: Register Machines: Máy thanh ghi
- 9B: Explicit-control Evaluator: Evaluator điều khiển tường minh
- 10A: Compilation: Biên dịch
- 10B: Storage Allocation and Garbage Collection: Cấp phát bộ nhớ và garbage collection
1 bình luận
Các ý kiến trên Hacker News
Nếu muốn học SICP, bạn có thể dùng MIT Scheme, hoặc một lựa chọn khác là dùng Racket hay DrRacket kèm gói add-on này: https://docs.racket-lang.org/sicp-manual/
Những lựa chọn khác có quá nhiều tính năng xung quanh, dễ gây phân tán
MIT Scheme không được làm để chạy trên Apple Silicon; có thể dùng phiên bản amd64 trên các máy Mac mới bằng một chút mẹo, nhưng nếu Apple bỏ Rosetta2 thì khả năng cao nó sẽ biến mất
Vì vậy Racket có thể là lựa chọn tốt hơn
Gần như bất kỳ hiện thực Scheme tử tế nào cũng có thể dùng cho SICP, nhưng tôi không khuyến nghị, vì ngôn ngữ đã thay đổi ngay cả sau ấn bản thứ 2
Tuy nhiên, sau khi bắt đầu dự án riêng, bạn có thể dùng hệ thống khác, và có thể sẽ phải đọc tài liệu hướng dẫn để tìm các cách tương ứng hiện đại cho những idiom cũ
Mọi lập trình viên nên học LISP, hoặc ít nhất là nghiêm túc nghiên cứu nó
Phần lớn lập trình viên ứng dụng chỉ biết tư duy theo kiểu thủ tục như lập trình viên C
LISP là một ngôn ngữ “đẹp” xử lý các khái niệm chứ không phải phần cứng, và khi tôi dùng nó trong vài năm cho dự án sau đại học ở trường cũ vào năm 1990, nó đã thay đổi hoàn toàn cách tôi suy nghĩ
Trước đây tôi từng học SICP chỉ bằng sách, nhưng tôi thấy bài giảng tốt hơn nhiều, còn sách đóng vai trò tài liệu tham khảo bổ trợ
Bạn không nhất thiết phải làm bài tập hay học theo sát cuốn sách
Dù bạn mới bước vào lĩnh vực này hay đã có hàng chục năm kinh nghiệm, nếu chưa xem các video này hoặc chưa từng học lớp SICP, chúng gần như đều có thể hữu ích với bất kỳ ai
Tôi đã học hết các video này và toàn bộ cuốn sách, rồi còn lập một nhóm học offline qua newsgroup
Thật sự rất vui và là một bước đột phá lớn, nhưng khoảng giữa cuốn sách thì số người trong nhóm bắt đầu giảm
Lời khuyên hãy đọc SICP là lời khuyên hay nhất tôi từng nhận được trên /g/
Tôi đã học Lisp bằng cái này, rồi tiếp tục học Clojure và xây dựng sự nghiệp xoay quanh nó
Đó là một ngôn ngữ tôi khá thích
Thật sự rất khuyến nghị
Chỉ cần xem bài giảng đầu tiên là sẽ bị cuốn vào ngay
Người quan tâm đến lập trình hệ thống có thể thu được gì từ đây?
Vì vậy, chừng nào lập trình hệ thống chủ yếu xoay quanh quản lý trạng thái và trừu tượng hóa, tôi nghĩ nó có liên quan rất sâu sắc
Nhưng nếu “lập trình hệ thống” được hiểu là việc gượng ép ghép nối các hệ thống lộn xộn đã tồn tại, hoặc chỉ là xây dựng cảm giác về các thư viện bên thứ ba, thì có thể không liên quan lắm
Dù vậy, ở đây vẫn có những insight. Tôi từng xem một video trong đó Sussman giải thích lý do ông gác SICP lại và yêu cầu MIT tạo một khóa nhập môn mới; đó là cảnh ông lịch sự và thận trọng đặt sang một bên viên ngọc mà mình đã mài giũa
Điều đó có nghĩa là thời đại mà chúng ta có thể kỳ vọng nhìn xuyên suốt qua mọi tầng trừu tượng đã kết thúc
Các bài giảng này có chất lượng âm thanh quá tệ
Có cách nào chỉnh lại cho sạch không?