4 điểm bởi GN⁺ 2024-11-17 | 1 bình luận | Chia sẻ qua WhatsApp
  • Giới thiệu sách

    • Có một cuốn sách từng được cho sinh viên mượn để đọc trong mùa hè
    • Cuốn sách này là một trong những tác phẩm quan trọng nhất của khoa học máy tính và đã ảnh hưởng lớn đến sự nghiệp cũng như nghiên cứu của cá nhân tác giả
    • Tên sách là của Hal Abelson và Jerry Sussman: Structure and Interpretation of Computer Programs (SICP)
  • Tầm quan trọng của cuốn sách

    • Cuốn sách này tạo ảnh hưởng lớn khi lần đầu tiếp cận khoa học máy tính
    • Giới thiệu các yếu tố cơ bản của lập trình và khám phá nhiều chủ đề khác nhau
    • Các chủ đề bao gồm trừu tượng lambda, tính toán bậc cao, cấu trúc dữ liệu phức tạp, tính mô-đun, stream, đánh giá lười, xây dựng trình thông dịch và trình biên dịch, quản lý lưu trữ, v.v.
  • Cách tiếp cận thiết kế ngôn ngữ

    • Hal và Jerry xem mọi thứ như một bài tập về thiết kế ngôn ngữ
    • Giới thiệu khái niệm cấu trúc hóa các hệ thống phức tạp bằng thiết kế phân lớp
    • Mỗi lớp được xây dựng bằng cách kết hợp những phần được xem là nguyên thủy ở cấp đó
  • Bản chất của khoa học máy tính

    • Cuộc cách mạng máy tính là một cuộc cách mạng về cách tư duy và cách biểu đạt
    • Giới thiệu khái niệm nhận thức luận thủ tục, tức là nghiên cứu cấu trúc tri thức từ góc nhìn mệnh lệnh
    • Khoa học máy tính cung cấp một khuôn khổ cho câu hỏi "làm thế nào"
  • Tính còn nguyên giá trị của cuốn sách

    • Cuốn sách được mua vào năm 1988 này đến nay vẫn còn nguyên giá trị
    • Đây là một trong số ít cuốn sách trong khoa học máy tính vẫn giữ được giá trị theo thời gian
    • Tương tự như Lectures on Physics của Feynman, cuốn sách nắm bắt rất tốt bản chất của khoa học máy tính
  • Cập nhật

    • Đã được cập nhật vào ngày 27 tháng 1 năm 2024
    • Cuốn sách này cũng được đưa vào thư mục tài liệu tham khảo Lisp có chú giải

1 bình luận

 
GN⁺ 2024-11-17
Ý kiến trên Hacker News
  • Có thể học nội dung của cuốn sách qua các video bài giảng năm 1986 của Abelson và Sussman. Cá nhân tôi thấy cách họ giải thích việc phân tầng trừu tượng rất hữu ích, cả cho bản thân lẫn khi làm mentor

  • Những văn bản kinh điển như SICP nói về thiết kế chương trình, nhưng tôi nghĩ ngày nay thiết kế hệ thống còn quan trọng hơn. Tôi không chắc hệ thống phân tán có được xem là một phần của khoa học máy tính hay không, nhưng đó là một vấn đề tổng quát hơn cần giải quyết. Hãy viết hệ thống đơn giản nhất có thể, rồi dùng công cụ quan sát để phát hiện khuyết điểm trong thiết kế, sau đó dùng cấu trúc dữ liệu hoặc các phương pháp khoa học máy tính khác để xử lý vấn đề. Trong đa số trường hợp, ký hiệu Big O và độ phức tạp thời gian chạy không quá quan trọng; mảng và CPU nhanh là đủ để giải quyết hầu hết vấn đề. Khi có vấn đề về hiệu năng chạy, bạn nên profile chương trình để tìm hotspot. Khoa học máy tính không dạy cách bộ nhớ đệm của CPU vận hành. Một thuật toán đồ thị nghe rất hay có thể có độ phức tạp thời gian chạy tốt, nhưng lại phá hỏng hoàn toàn cache CPU, trong khi dùng mảng có lẽ còn nhanh hơn. Những vấn đề tổng quát hơn là khả năng chịu lỗi, tính đúng đắn của khóa phân tán và hàng đợi, cũng như khả năng mở rộng của hệ thống. Có thể tôi hơi thiên lệch vì xuất thân từ ngành kỹ thuật máy tính/điện

  • Liên kết tới bản miễn phí đã bị hỏng. Khoảng năm 2001 chỉ có bản HTML được cung cấp miễn phí, và ai đó đã chuyển nó sang TeXinfo. Nếu muốn học SICP ngày nay, bạn có thể chạy mã bằng MIT Scheme hoặc DrRacket

  • "The Elements of Programming Style" đáng đọc đến ba lần, và tôi đã đọc hơn thế nữa, thu được rất nhiều lợi ích. Có thể tham khảo bài review năm 2010

  • Tôi rất muốn thích SICP, nhưng lại thấy Lisp khó tiếp cận. Tôi thích Haskell và Standard ML. Không biết có ai khác cũng có trải nghiệm tương tự không. Có lẽ sẽ thú vị nếu đọc một cuốn sách có tinh thần giống SICP nhưng viết bằng ngôn ngữ khác. Tôi không muốn học SICP bằng JavaScript

  • Tôi muốn nghe ý kiến về "Software Design for Flexibility: How to Avoid Programming Yourself into a Corner"

  • SICP đã giúp tôi hiểu rằng có nhiều mô hình lập trình khác nhau. Cuốn sách này giúp ích khi đọc tài liệu của ngôn ngữ, thư viện và framework để định hướng

  • Tôi đã lập trình 25 năm và sở hữu cuốn sách này khoảng 10 năm. Gần đây tôi mới bắt đầu với Dr. Racket. Điểm hay của Dr. Racket là khi rê chuột lên một biến, bạn có thể thấy trực quan mối liên kết của nó với các vị trí khác trong mã. Nhưng tôi hơi khó chịu vì nó không phải VS Code. Vì vậy tôi đã thiết lập một môi trường để có thể giải bài tập bằng VS Code (thực ra là Cursor). Tích hợp LLM rất hay, và bạn có thể đưa cho nó mã cùng phần diễn giải mình viết rồi xin phản hồi. Tôi đã làm một chút bài tập, rồi chuyển đổi mã, các câu trả lời mình viết và phản hồi nhận được từ LLM thành một trang tĩnh. Đó là một cách khá thú vị để giết thời gian. Tôi không nghĩ mình có thể hiểu hoàn toàn SICP nếu không có sự trợ giúp của LLM, nhưng việc xem cách tích hợp LLM vào quá trình luyện tập cũng rất thú vị

  • Ở lần đọc thứ hai, tôi bắt đầu đào sâu vào các chú thích và tài liệu tham khảo, và nhận ra ở đó có cả một thế giới tuyệt đẹp. Có một bài báo trong đó Sussman và nhóm của ông đã thiết kế một bộ xử lý lập trình được tùy biến để tính toán các thuộc tính của thiên thể. Lúc nào cũng đầy bất ngờ

  • Có cung cấp liên kết tới bản gốc và bản JavaScript