ใน“ ความโหดร้ายของการสอนวิทยาศาสตร์คอมพิวเตอร์จริงๆ”


33

Dijkstra ในเรียงความของเขาในความโหดร้ายของการสอนวิทยาศาสตร์คอมพิวเตอร์จริงทำให้ข้อเสนอต่อไปนี้สำหรับหลักสูตรการเขียนโปรแกรมเบื้องต้น:

ในอีกด้านหนึ่งเราสอนสิ่งที่ดูเหมือนว่าแคลคูลัสเพรดิเคต แต่เราทำแตกต่างจากนักปรัชญามาก ในการฝึกอบรมโปรแกรมเมอร์มือใหม่ในการจัดการสูตรที่ไม่ถูกตีความเราสอนมันมากขึ้นในฐานะพีชคณิตแบบบูลทำความคุ้นเคยกับนักเรียนเกี่ยวกับคุณสมบัติเชิงพีชคณิตของตรรกะเชิงเชื่อม เพื่อตัดการเชื่อมโยงไปยังปรีชาเพิ่มเติมเราเปลี่ยนชื่อค่า {true, false} ของโดเมนบูลีนเป็น {black, white}

ในทางกลับกันเราสอนภาษาการเขียนโปรแกรมที่ง่ายสะอาดและมีความจำเป็นโดยมีการข้ามและการมอบหมายหลายอย่างเป็นข้อความพื้นฐานพร้อมโครงสร้างบล็อกสำหรับตัวแปรท้องถิ่นเซมิโคลอนเป็นโอเปอเรเตอร์สำหรับองค์ประกอบคำสั่งโครงสร้างทางเลือกที่ดี การทำซ้ำและหากต้องการให้เรียกขั้นตอน ในส่วนนี้เราเพิ่มประเภทข้อมูลขั้นต่ำเช่น booleans, จำนวนเต็ม, อักขระและสตริง สิ่งสำคัญคือสำหรับสิ่งที่เราแนะนำความหมายที่สอดคล้องกันจะถูกกำหนดโดยกฎการพิสูจน์ที่ไปกับมัน

ตั้งแต่เริ่มต้นและตลอดหลักสูตรเราเน้นว่างานของโปรแกรมเมอร์ไม่เพียง แต่เขียนโปรแกรม แต่งานหลักของเขาคือให้การพิสูจน์อย่างเป็นทางการว่าโปรแกรมที่เขาเสนอนั้นตรงตามข้อกำหนดการทำงานที่เป็นทางการเท่ากัน ในขณะที่การออกแบบการพิสูจน์และโปรแกรมจับมือนักเรียนได้รับโอกาสที่เพียงพอที่จะสมบูรณ์แบบความคล่องแคล่วว่องไวกับแคลคูลัสภาค สุดท้ายเพื่อขับรถกลับบ้านข้อความที่หลักสูตรการเขียนโปรแกรมเบื้องต้นนี้เป็นหลักสูตรหลักในวิชาคณิตศาสตร์อย่างเป็นทางการเราจะเห็นว่าภาษาการเขียนโปรแกรมที่เป็นปัญหาไม่ได้ดำเนินการในมหาวิทยาลัยเพื่อให้นักเรียนได้รับการปกป้องจากสิ่งล่อใจเพื่อทดสอบโปรแกรมของพวกเขา .

เขาเน้นว่านี่เป็นข้อเสนอที่ร้ายแรงและสรุปการคัดค้านที่เป็นไปได้ต่างๆรวมถึงความคิดของเขาที่ว่า "ไม่สมจริงอย่างเต็มที่" และ "ยากเกินไป"

แต่ว่าวจะไม่บินทั้งสำหรับสมมุติฐานได้รับการพิสูจน์ผิด: ตั้งแต่ต้นปี 80 หลักสูตรการเขียนโปรแกรมเบื้องต้นดังกล่าวได้รับการประสบความสำเร็จให้กับนักศึกษาหลายร้อยคนในแต่ละปี [เพราะจากประสบการณ์ของฉันการพูดครั้งนี้ไม่พอประโยคก่อนหน้าควรทำซ้ำอย่างน้อยอีกสองครั้ง]

หลักสูตรใดที่ Dijkstra อ้างถึงและมีวรรณกรรมอื่นอีกบ้างที่กล่าวถึงเรื่องนี้

เรียงความที่ปรากฏในปี 1988 เมื่อ Dijkstra อยู่ที่มหาวิทยาลัยเท็กซัสที่ออสตินซึ่งอาจเป็นเบาะแส - พวกเขาเป็นเจ้าภาพเก็บถาวร Dijkstra แต่มันมีขนาดใหญ่และฉันสนใจที่จะได้ยินจากคนอื่นเกี่ยวกับหลักสูตรนี้

ฉันไม่ต้องการที่จะพูดคุยว่าความคิดของ Dijkstra ดีหรือเหมือนจริงที่นี่ ฉันพิจารณาการโพสต์สิ่งนี้ใน cstheory.se หรือ cs.se แต่ตัดสินที่นี่เพราะ) ชุมชนการศึกษาอาจมีแนวโน้มที่จะมีคนที่สามารถตอบได้ง่ายขึ้นและ b) Dijkstra เน้นตัวเองว่าหลักสูตรของเขาคือ คณิตศาสตร์อย่างเป็นทางการ " คุณสามารถตั้งค่าสถานะเพื่อการโยกย้ายได้หากคุณไม่เห็นด้วย


2
ฉันรักแน่ใจว่า Dijkstra ถูกวิจารณ์ลักษณะเฉพาะของวิธีการทางคณิตศาสตร์ที่ได้รับการสอน (หนึ่งที่สร้างทุกอย่าง Bourbaki สไตล์จากสัจพจน์) และที่นี้มีวัตถุประสงค์เพื่อเป็นถ้อยคำ อย่างไรก็ตามฉันไม่มีหลักฐานที่จะสนับสนุน (ความคิดเห็นมากกว่าคำตอบ)

"เราเห็นว่าภาษาการเขียนโปรแกรมที่เป็นปัญหาไม่ได้ถูกนำไปใช้ในมหาวิทยาลัยเพื่อให้นักเรียนได้รับการปกป้องจากสิ่งล่อใจที่จะทดสอบโปรแกรมของพวกเขา" ดูเหมือนว่าเขาหมายถึงชั้นเรียนที่เขาสอน / คิดในใจ? ทำให้ฉันนึกถึง"การสอน CS โดยไม่ใช้คอมพิวเตอร์"
vzn

4
@LoopSpace ฉันไม่คิดว่า Dijkstra นั้นมีชื่อเสียงในด้านความคิดเห็นที่แข็งแกร่งและเขาก็อยู่ทางด้านคณิตศาสตร์ของ CS อย่างแน่นอน
กราฟิลส์

1
คุณได้ตรวจสอบหลักสูตรที่เขาได้ให้มาแล้วหรือยัง? การอ้างอิงที่ไม่จำเพาะเช่นนั้นอาจชี้ไปที่ประสบการณ์ของเขาเอง
กราฟิลส์

4
เห็นได้ชัดว่ามันไม่ใช่ถ้อยคำ Dijkstra เป็นผู้สนับสนุน / ผู้สนับสนุนโดยทั่วไปของความคิดที่ยกมาโดยเฉพาะที่นี่ สำเนา
vzn

คำตอบ:


18

นี่เป็นสิ่งที่การศึกษาวิทยาศาสตร์คอมพิวเตอร์ของ TU Eindhoven ออกแบบและดำเนินการโดย Dijkstra และเพื่อนร่วมงานนับ แต่นั้นมาเริ่มต้นขึ้นราวปี 1980 จนกระทั่งอิทธิพลของ Dijkstra เริ่มจางหายไปครึ่งทางผ่านทศวรรษ 1990

ฉันเริ่มเรียน CS ที่ Nijmegen University ในปี 1982 เพื่อนร่วมชั้นทำแบบเดียวกันกับ TU Eindhoven ทุก ๆ ฤดูใบไม้ผลิโรงเรียนมัธยมเก่าของเราจะมีวันที่นักเรียนเก่าจะแนะนำสาขาการศึกษาที่ตนเลือกให้กับนักเรียนปัจจุบันและเราทั้งคู่ก็มีการแนะนำ CS ดังนั้นเราจึงเปรียบเทียบประสบการณ์ของเรา พวกเขาแตกต่างกันอย่างมากมาย ใน Nijmegen เราได้รับประสบการณ์จริงกับภาษาการเขียนโปรแกรมจริงเรียกใช้โปรแกรมที่ได้รับมอบหมายของเราบนคอมพิวเตอร์จริง (เครื่องเสมือน VM / CMS เพื่อความแม่นยำ) ไม่เช่นนั้นใน Eindhoven เพื่อนร่วมห้องในอดีตของฉันบอกฉันว่าพวกเขาไม่ได้รับอนุญาตให้สัมผัสคอมพิวเตอร์ในปีแรก การเขียนโปรแกรมใน Eindhoven หมายถึงการเรียนรู้ที่จะสร้างอัลกอริทึมที่ถูกต้องทางคณิตศาสตร์จากคำจำกัดความปัญหาที่ระบุทางคณิตศาสตร์ บนกระดาษ.

ทัศนคตินี้ค่อนข้างผ่อนคลายหลังจาก Dijkstra ออกไป แต่แม้กระทั่งในช่วงต้นทศวรรษ 1990 หลักสูตรที่เรียกว่าProgrammeren (Programming) หมายเลข 1 ถึง 9 และทอดยาวเป็นเวลาหลายปียังคงประกอบไปด้วยกิจกรรมเดียวกัน นักเรียน. ฉันไม่เคยเข้าเรียนหลักสูตรใดเลย แต่ฉันสงสัยว่ามีการใช้คอมพิวเตอร์เข้ามาเกี่ยวข้อง

ในกรณีที่คุณสงสัย: การศึกษาด้านวิทยาการคอมพิวเตอร์ในปัจจุบันของ TU Eindhoven นั้นแตกต่างกันมาก


คำตอบที่ดีฉันเกือบหมดความหวังสำหรับคำถามนี้ แต่ดูเหมือนว่าคุณได้รับมา ความคิดใดที่ฉันสามารถค้นหาเพิ่มเติมเกี่ยวกับหลักสูตร TU Eindhoven 80s ที่คุณพูดถึง
Matthew Towers

ไม่แน่ใจ. ฉันไม่แน่ใจว่าคำตอบของฉันดีที่สุดเช่นกัน - ฉันไม่ได้อยู่ที่นั่นในเวลานั้น
reinierpost

1
ฉันเป็นเจ้าของหลักสูตรProgrammeren 1 en 2ซึ่งลงวันที่สิงหาคม 2525 xeroxed จากลายมือของ Dijkstra ห้องสมุด TU Eindhoven มีการสแกนออนไลน์ ในปี 1984 และ Dijkstra Feijen พัฒนานี้เป็นหนังสือที่ออกในภาษาอังกฤษในปี 1988: วิธีการเขียนโปรแกรม
reinierpost

คุณมีลิงค์ไปยัง @reinierpost เวอร์ชันออนไลน์หรือไม่?
เดรียน


2

ดูที่ "วิธีการเขียนโปรแกรมโดย Edsger W. Dijkstra, WHJ Feijen, Joke Sterringa" มันมีวัสดุที่ปรากฏในการอ้างอิง การอ่านที่น่ายินดี


วรรณกรรมนี้เกี่ยวข้องกับเนื้อหาของหลักสูตรเช่นที่ Dijkstra แนะนำหรือไม่ หากเป็นเช่นนั้นโปรดให้ข้อมูลสรุป / แนะนำแหล่งข้อมูลที่คุณระบุ ถ้าไม่คุณแน่ใจหรือไม่ว่านี่เป็นคำตอบของคำถาม
จิ้งจกที่ไม่ต่อเนื่อง

@Discretelizard: มันแน่นอน
Yves Daoust
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.