Vì sao "Structure and Interpretation of Computer Programs" lại quan trọng
Những đổi mới của SICP
- Nâng tầm trí tuệ: SICP đã nâng cao đáng kể trình độ tư duy trong giáo dục khoa học máy tính nhập môn. Trong khi các môn CS đầu tiên trước đây tập trung vào việc học các chi tiết của một ngôn ngữ lập trình cụ thể, SICP nhấn mạnh vào việc học bức tranh lớn của quá trình lập trình.
- Nhấn mạnh tính trừu tượng: Tác phẩm nhấn mạnh tầm quan trọng của việc tìm ra các mẫu hình tổng quát từ những vấn đề cụ thể, rồi tạo ra các công cụ phần mềm để hiện thực hóa từng mẫu hình đó.
- Xem hàm như dữ liệu: SICP tập trung vào ý tưởng rằng hàm có thể được sử dụng như dữ liệu. Đây là một ý tưởng khó học, nhưng khi đã nắm được thì là một khái niệm cực kỳ mạnh mẽ.
- Nhiều mô hình lập trình khác nhau: Tác phẩm tích hợp ba mô hình lập trình — hàm, hướng đối tượng và khai báo — vào môn CS nhập môn đầu tiên.
Lý do chọn ngôn ngữ Scheme
- Cú pháp đơn giản và nhất quán: Scheme có một cú pháp rất đơn giản và nhất quán cho mọi thứ. Trong khi các ngôn ngữ khác dùng những cú pháp khác nhau cho gán biến, thực thi điều kiện, lặp, gọi hàm, v.v., thì Scheme xử lý tất cả bằng một dạng cú pháp duy nhất.
- Có thể học nhiều mô hình khác nhau: Nhờ sự đơn giản của Scheme, người học có thể dễ dàng tiếp cận nhiều mô hình lập trình. Đặc biệt, nó giúp hiểu được cách lập trình hướng đối tượng được triển khai như thế nào.
- Chuẩn bị cho tương lai: SICP rèn cho sinh viên khả năng học các ngôn ngữ lập trình mới. Tác phẩm dựa trên triết lý rằng "ngôn ngữ bạn sẽ dùng trong tương lai vẫn chưa được phát minh".
Cách tiếp cận lạc quan của SICP
- Kỳ vọng cao: SICP đặt ra kỳ vọng lạc quan về những gì sinh viên năm nhất đại học có thể đạt được. Sinh viên thường sẽ viết cả một trình thông dịch ngôn ngữ lập trình — việc vốn thường dành cho sinh viên các năm trên.
- Học sâu: Bản thân văn bản không phải lúc nào cũng dễ đọc, nhưng mọi câu đều quan trọng và mỗi bài tập đều dạy một ý tưởng mới có giá trị.
Ảnh hưởng của SICP
- Ảnh hưởng bền bỉ: Các khóa học dựa trên SICP không nhiều, nhưng ảnh hưởng của chúng rất lớn. Nhiều giáo trình ra đời sau đó đã cố gắng đạt tới chuẩn mực mà SICP đặt ra.
- Mở rộng phạm vi của Scheme: Việc dùng Scheme như một ngôn ngữ học tập đã mở rộng từ bậc trung học cơ sở đến sau đại học.
- Khoa học máy tính lấy ý tưởng làm trung tâm: Quan niệm rằng khoa học máy tính nên xoay quanh các ý tưởng đã trở nên phổ biến rộng rãi.
Tính bền vững của SICP
- Sức sống lâu dài: SICP đã tồn tại hơn 25 năm và vẫn đang được in ấn. Dù môi trường điện toán đã thay đổi rất nhiều, những ý tưởng lớn phía sau nó thì không thay đổi.
- Sự thay đổi của khóa học: Các khóa học dựa trên SICP theo thời gian đã bổ sung thêm tính song song, kiểm soát đồng thời, thiết kế giao diện người dùng và mô hình client/server.
Thay đổi trong chương trình giảng dạy của MIT
- Chương trình giảng dạy thiên về ứng dụng: MIT đã chuyển từ chương trình giảng dạy xoay quanh chủ đề sang chương trình giảng dạy thiên về ứng dụng. Việc chọn ngôn ngữ lập trình chỉ là phần nhỏ nhất trong quyết định đó.
- Thách thức của cách tiếp cận mới: Cách tiếp cận mới khó giảng dạy hơn và đòi hỏi sự hợp tác giữa các giảng viên điện kỹ thuật và khoa học máy tính trong từng môn học.
Phản ứng của sinh viên
- Được yêu thích về sau: Trong lúc học, sinh viên thường không nhận ra mình đang học được nhiều đến mức nào, nhưng về sau họ đánh giá đây là một trong những khóa học được yêu thích nhất. Sau khi tốt nghiệp, nhiều phản hồi cho biết họ vẫn đang dùng những gì đã học trong công việc thực tế.
Ý kiến của GN⁺
- Triết lý giáo dục của SICP: SICP tập trung vào việc học những ý tưởng lớn thay vì các chi tiết của ngôn ngữ lập trình, từ đó giúp sinh viên phát triển khả năng học ngôn ngữ mới một cách dễ dàng.
- Ưu điểm của Scheme: Sự đơn giản và nhất quán trong cú pháp của Scheme rất có ích cho người mới học. Nó giúp việc hiểu các mô hình lập trình khác nhau trở nên dễ dàng hơn.
- Sự thay đổi ở MIT: Việc thay đổi chương trình giảng dạy tại MIT nhấn mạnh học tập thiên về ứng dụng, điều này có thể mang lại trải nghiệm gần với thực tế hơn.
- Tính bền vững của giáo dục: Sức sống lâu dài của SICP cho thấy triết lý giáo dục và nội dung của nó vẫn còn giá trị. Điều này nhấn mạnh giá trị cốt lõi của giáo dục.
- Liên hệ với thực tiễn: Giáo dục dựa trên SICP giúp rèn luyện những năng lực có thể áp dụng ngay trong công việc thực tế, và điều đó tiếp tục mang lại lợi ích lớn ngay cả sau khi tốt nghiệp.
1 bình luận
Ý kiến trên Hacker News
Có thể xem bài giảng của GS. Abelson trên YouTube, và rất đáng để đầu tư thời gian: chúng mang lại sự hiểu biết sâu sắc về khoa học máy tính và có thể giúp giảm bớt ảnh hưởng của những cơn sốt thổi phồng gần đây.
Nửa đầu cuốn sách là một trải nghiệm đọc khá nhẹ nhàng và thú vị: tôi gặp khó ở phần hướng đối tượng, và về mặt cá nhân thì lối tư duy hàm phù hợp với tôi hơn.
Có thể xem các bài giảng từ đầu thập niên 80 trên YouTube: có sự hài hước, những thử nghiệm đồ họa thời kỳ đầu và cả thời trang thập niên 70, nên rất bổ ích.
Tôi tự hỏi liệu cuốn sách này có còn đáng đọc ngay cả với những lập trình viên đã có nhiều kinh nghiệm hay không.
Tôi từng nghĩ mục tiêu của SICP là dọa những người không thích khoa học máy tính: thực ra đây là một khóa nhập môn nền tảng rất giá trị, nhưng với một số người thì nó cũng khiến họ chuyển sang ngành khác.
Tôi đã không thể vượt qua nổi vài trang đầu tiên: nếu đó là môn bắt buộc thì có lẽ giờ tôi đã làm việc khác rồi.
Tôi từng làm trợ giảng cho lớp CS 61A ở Berkeley: người ta cho rằng cú pháp đơn giản và thống nhất của ngôn ngữ Scheme có ích cho việc giảng dạy, nhưng trên thực tế sinh viên lại thấy bối rối. Tôi cho rằng đặc điểm mọi thứ trong Scheme trông đều giống nhau là một lỗi.
Bài học tuyệt vời nhất tôi học được từ SICP là ngay từ lúc viết hàm đầu tiên, bạn đang tạo ra một DSL để giải quyết bài toán miền: chính insight này đã nâng tầm tôi với tư cách một lập trình viên.
Mỗi lần đọc về SICP tôi lại thấy thất vọng với Javascript: giá mà Javascript là Scheme thì phát triển web đã tốt hơn nhiều.
Có yêu cầu so sánh SICP với PAIP: có vẻ SICP nói về lập trình hàm và các nền tảng của khoa học máy tính, còn PAIP tập trung nhiều hơn vào thực hành lập trình nói chung.