trên nền tảng về sự tàn khốc của việc giảng dạy khoa học máy tính


33

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 ý.


2
Tôi khá chắc chắn rằng Dijkstra đang phê phán một phong cách đặc biệt về cách toán học đã được dạy (một thứ xây dựng mọi thứ, theo kiểu Bourbaki, từ các tiên đề) và điều này được dự định là châm biếm . Tuy nhiên, tôi không có bằng chứng để sao lưu điều đó (từ đó nhận xét thay vì trả lời).

lol "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ọ." có vẻ như anh ta đang đề cập đến một lớp học mà anh ta tự dạy / khái niệm hóa? nhắc nhở tôi về "dạy CS mà không cần máy tính"
vzn

4
@LoopSpace Tôi không nghĩ vậy Dijkstra nổi tiếng với những ý kiến ​​mạnh mẽ, và anh ấy chắc chắn đứng về phía toán học của CS.
Raphael

1
Bạn đã kiểm tra các khóa học mà chính mình đã đưa ra? Một tài liệu tham khảo không đặc biệt như thế có lẽ chỉ ra kinh nghiệm của chính mình.
Raphael

4
nó rõ ràng không phải là châm biếm. Dijkstra là một người ủng hộ / ủng hộ nói chung các ý tưởng được trích dẫn cụ thể ở đây. btw trùng lặp
vzn

Câu trả lời:


18

Đây là khá nhiều những gì giáo dục Khoa học máy tính của TU Eindhoven, được thiết kế và thực hiện bởi Dijkstra và các đồng nghiệp, giống như từ khi nó bắt đầu, khoảng năm 1980, cho đến khi ảnh hưởng của Dijkstra bắt đầu suy yếu, ở đâu đó trong suốt nửa thập niên 1990.

Tôi bắt đầu học CS tại Đại học Nijmegen năm 1982; một bạn cùng lớp đã làm điều tương tự tại TU Eindhoven. Mỗi mùa xuân, trường trung học cũ của chúng tôi sẽ có một ngày mà các cựu học sinh sẽ giới thiệu ngành học đã chọn của họ cho các học sinh hiện tại, và chúng tôi đều ở đó để giới thiệu CS, vì vậy chúng tôi đã so sánh kinh nghiệm của mình. Họ rất khác nhau. Trong Nijmegen, chúng tôi đã thu được kinh nghiệm thực tế với các ngôn ngữ lập trình thực tế, thực sự chạy các chương trình gán của chúng tôi trên một máy tính thực tế (chính xác là máy ảo VM / CMS). Không phải như vậy ở Eindhoven. Bạn học cũ của tôi nói với tôi rằng họ không được phép chạm vào máy tính trong năm đầu tiên. Lập trình, ở Eindhoven, có nghĩa là học cách xây dựng các thuật toán có thể chứng minh chính xác từ các định nghĩa bài toán đã nêu. Trên giấy.

Thái độ này có phần thoải mái sau khi Dijkstra rời đi, nhưng ngay từ đầu những năm 1990, các khóa học có tên là Lập trình viên (Lập trình), được đánh số từ 1 đến 9, và kéo dài vài năm, vẫn bao gồm hoạt động tương tự, và một điều đặc biệt là một trở ngại lớn cho những học sinh. Tôi chưa bao giờ tham gia bất kỳ khóa học nào trong số đó, nhưng tôi nghi ngờ bất kỳ việc sử dụng máy tính nào cũng có liên quan.

Trong trường hợp bạn đang tự hỏi: giáo dục khoa học máy tính ngày nay tại TU Eindhoven rất khác.


Câu trả lời tuyệt vời, tôi gần như đã mất hy vọng cho câu hỏi này nhưng có vẻ như bạn đã hiểu. Bất cứ ý tưởng nào tôi có thể tìm thấy nhiều hơn về khóa học CS TU TUFovenoven thập niên 80 mà bạn đang đề cập đến?
Tháp Matthew

Không chắc. Tôi cũng không chắc câu trả lời của mình là tốt nhất - lúc đó tôi cũng không có.
Revierpost

1
Tôi sở hữu một bản sao của giáo trình Lập trình 1 en 2 , ngày 8 tháng 8 năm 1982, xeroxed từ chữ viết tay của Dijkstra. Thư viện TU Eindhoven có quét trực tuyến. Năm 1984 Dijkstra và Feijen đã phát triển nó thành một cuốn sách, được phát hành bằng tiếng Anh năm 1988: Phương pháp lập trình .
Revierpost

Bạn có liên kết đến phiên bản trực tuyến, @reinierpost không?
adrianN


2

Hãy xem "Phương pháp lập trình của Edsger W. Dijkstra, WHJ Feijen, Joke Sterringa". Nó chứa các tài liệu gợi lên trong các trích dẫn. Một đọc thú vị.


Đây có phải là tài liệu thảo luận về nội dung của một khóa học như một khóa học được đề xuất bởi Dijkstra? Nếu vậy, vui lòng cung cấp một bản tóm tắt / giới thiệu về nguồn bạn cung cấp. Nếu không, bạn có chắc chắn rằng điều này trả lời câu hỏi?
Thằn lằn rời rạc

@Discretelizard: đó là khóa học.
Yves Daoust
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.