Dijkstra, trong bài tiểu luận về sự tàn khốc của việc thực sự giảng dạy khoa học máy tính , đưa ra đề xuất sau đây cho một khóa học lập trình giới thiệu:
Một mặt, chúng tôi dạy những gì trông giống như tính toán vị ngữ, nhưng chúng tôi làm điều đó rất khác với các nhà triết học. Để đào tạo lập trình viên mới làm quen với các công thức chưa được giải thích, chúng tôi dạy nó nhiều hơn như đại số boolean, làm quen với học sinh với tất cả các tính chất đại số của các kết nối logic. Để tiếp tục cắt các liên kết đến trực giác, chúng tôi đổi tên các giá trị {true, false} của miền boolean thành {black, white}.
Mặt khác, chúng tôi dạy một ngôn ngữ lập trình đơn giản, gọn gàng, đơn giản, bỏ qua và gán nhiều lần như các câu lệnh cơ bản, với cấu trúc khối cho các biến cục bộ, dấu chấm phẩy làm toán tử cho thành phần câu lệnh, một cấu trúc thay thế đẹp, đẹp sự lặp lại và, nếu muốn, một cuộc gọi thủ tục. Để làm điều này, chúng tôi thêm tối thiểu các loại dữ liệu, giả sử booleans, số nguyên, ký tự và chuỗi. Điều cốt yếu là, đối với bất cứ điều gì chúng tôi giới thiệu, ngữ nghĩa tương ứng được xác định bởi các quy tắc chứng minh đi kèm với nó.
Ngay từ đầu, và trong suốt khóa học, chúng tôi nhấn mạnh rằng nhiệm vụ của lập trình viên không chỉ là viết ra một chương trình, mà nhiệm vụ chính của anh ta là đưa ra một bằng chứng chính thức rằng chương trình mà anh ta đề xuất đáp ứng các đặc tả chức năng chính thức không kém. Trong khi thiết kế các bằng chứng và chương trình trong tay, học sinh có nhiều cơ hội để hoàn thiện sự nhanh nhẹn thao túng của mình với tính toán vị ngữ. Cuối cùng, để lái xe về nhà thông điệp rằng khóa học lập trình giới thiệu này chủ yếu là một khóa học về toán chính thức, chúng tôi thấy rằng ngôn ngữ lập trình trong câu hỏi đã không được thực hiện trong khuôn viên trường để sinh viên được bảo vệ khỏi sự cám dỗ để kiểm tra chương trình của họ .
Ông nhấn mạnh rằng đây là một đề xuất nghiêm túc và nêu ra những phản đối khác nhau có thể có, bao gồm cả ý tưởng của ông là "hoàn toàn phi thực tế" và "quá khó khăn".
Nhưng con diều đó sẽ không bay theo định đề đã được chứng minh là sai: từ đầu những năm 80, một khóa học lập trình giới thiệu như vậy đã được trao thành công cho hàng trăm sinh viên đại học mỗi năm. [Bởi vì, theo kinh nghiệm của tôi, nói điều này một lần không đủ, câu trước nên được lặp lại ít nhất hai lần nữa.]
Dijkstra đang đề cập đến khóa học nào, và có tài liệu nào khác có sẵn để thảo luận về nó không?
Bài tiểu luận xuất hiện vào năm 1988 khi Dijkstra ở Đại học Texas ở Austin, đây có lẽ là một đầu mối - họ lưu trữ kho lưu trữ Dijkstra nhưng nó rất lớn và tôi đặc biệt thích nghe người khác nói về khóa học này.
Tôi không muốn thảo luận liệu ý tưởng của Dijkstra là tốt hay thực tế ở đây. Tôi đã cân nhắc việc đăng bài này lên cstheory.se hoặc cs.se nhưng đã giải quyết ở đây vì a) một cộng đồng các nhà giáo dục có thể có nhiều người có thể trả lời dễ dàng, và b) Bản thân Dijkstra nhấn mạnh rằng khóa học của anh ta "chủ yếu là một khóa học trong toán học chính quy. " Vui lòng gắn cờ để di chuyển nếu bạn không đồng ý.