ฉันสอนการเขียนโปรแกรมเบื้องต้นในระดับวิทยาลัย มันเป็นหลักสูตรขนมปังและเนยคณะทั้งหมดทำมันและฉันคิดว่าเราทำได้ค่อนข้างดี เราติดตามข้อความทั่วไปและมีการสอบทั่วไป แต่เราแต่ละคนมีวิธีการสอนในห้องเรียนที่ใช้งานได้ มันเป็นเวลานานมากแล้ว แต่ในบางครั้งฉันก็ได้รับการติวเด็ก ๆ ในการเขียนโปรแกรมและภาพรวมก็เหมือนกัน
วิธีที่ฉันทำก็คือเริ่มต้นที่ก้นคอนกรีตให้ได้มากที่สุด สิ่งที่นักเรียนรู้คือโครงสร้าง พวกเขามีแนวคิดมากมายอยู่แล้ว ฉันกำลังสร้างแนวคิดเพิ่มเติมเกี่ยวกับสิ่งเหล่านี้และฉันตัดทอนแนวคิดที่อาจก่อให้เกิดการต่อต้าน ในเวลาเดียวกันก็ทำให้พวกเขาได้เรียนรู้โดยการทำ
ฉันสร้างคอมพิวเตอร์เล็ก ๆ ด้วยชิป Intel 8008, EPROM บางตัวและวงจรไม่กี่ตัว ฉันตั้งโปรแกรมให้เล่นเพลงคู่น้อยเมื่อชิป I / O เชื่อมต่อกับลำโพงคู่ ฉันจะอธิบายวิธีการทำงานของโปรแกรมเล็ก ๆ น้อย ๆ กับวงในเพื่อนับตัวนับ ที่จะทำหน้าที่ล่าช้า จากนั้นมันจะสลับบิตเอาต์พุตและทำอีกครั้ง มันจะทำเช่นนั้นชั่วครู่หนึ่งแล้วสลับไปยังการหน่วงเวลาอื่นให้อีกระยะห่างและอื่น ๆ ชิปหน่วยความจำมีการจับเวลาเล็ก ๆ น้อย ๆ และถ้าผมซุกนำตัวเก็บประจุภายใต้หนึ่งของปัจจัยการผลิตจับเวลาโปรแกรมจะทำงานVeeeeery ช้า ชั้นเรียนได้ยินเสียงลำโพงกำลังคลิกคลิกคลิกใช่ ... ฉันต้องการให้ชั้นเรียนเข้าใจว่าคอมพิวเตอร์กำลังทำสิ่งที่ง่ายมากทีละขั้นตอน. จากนั้นฉันก็จะปลดตะขอตัวเก็บประจุออกและ "เพลง" ก็จะแตกออกมา (เสียงปรบมือ)
จากนั้นฉันสร้างเครื่องจำลองสำหรับคอมพิวเตอร์ทศนิยมที่ง่ายมากมีหน่วยความจำ 1,000 ตำแหน่งแต่ละแห่งมีเลขทศนิยม 4 หลักที่ลงชื่อ มันมี opcodes ง่าย ๆ อย่าง "add to accumulator", "jump if negative" และอื่น ๆ ฉันจะให้พวกเขาเขียนโปรแกรมเล็ก ๆ ใน "ภาษาเครื่อง" นี้เช่นเพิ่มตัวเลขสองตัวหรือเพิ่มรายการของตัวเลข จากนั้นพวกเขาสามารถดูได้ด้วยการกดปุ่มเดียวหรือกดปุ่ม Enter ค้างไว้เพื่อดูว่า "เร็ว"
ประเด็นนี้คือการวางแนวคิดที่ว่าคอมพิวเตอร์สามารถดำเนินการขั้นพื้นฐานที่แตกต่างกันจำนวนน้อยมากเท่านั้นและพวกเขาทำสิ่งเหล่านี้ทีละครั้ง นี่คือการต่อต้านการแสดงผลที่พวกเขามีคอมพิวเตอร์ที่ซับซ้อนและพวกเขาทำทุกอย่างในเวลาเดียวกันและอ่านความคิดของคุณในการต่อรอง
จากนั้นเราไปที่การเขียนโปรแกรมในภาษา "ของจริง" (BASIC :) เริ่มต้นด้วยโปรแกรมที่เรียบง่าย แต่น่าสนใจทำงานผ่านเงื่อนไขเงื่อนไขลูปอาร์เรย์อาร์เรย์ไฟล์การรวมและอื่น ๆ เป้าหมายคือการวางทักษะที่เพียงพอเพื่อให้พวกเขาสามารถทำโครงการที่ตนเองเลือกเพราะนั่นเป็นสิ่งเดียวที่ทำให้การเขียนโปรแกรมน่าสนใจ - การใช้งานที่คุณสามารถทำได้ ฉันจะทิ้งความคิดบางอย่างสำหรับโครงการแล้วพวกเขาก็จะเอามันไปจากที่นั่น ฉันจะขอแนวคิดที่เป็นลายลักษณ์อักษรจากนั้นรายงานความคืบหน้าเพื่อป้องกันไม่ให้พวกเขาเลื่อนออกไปเป็นนาทีสุดท้ายจากนั้นก็ตื่นตระหนก ฉันคิดว่าโครงการเป็นส่วนที่ดีที่สุดเพราะพวกเขาเรียนรู้ภายใต้อำนาจของตัวเอง
การเริ่มต้นด้วยการทำความเข้าใจอย่างเป็นรูปธรรมว่าคอมพิวเตอร์ทำอะไรได้ง่ายกว่ามากในการสอนแนวคิดในภายหลังว่าอาจจะเป็นการเพิ่มความเร็วจริงเช่นอาเรย์หรือตัวชี้ (ในภายหลัง) เรามักจะเชิดชูแนวคิดของ "นามธรรม" เป็นสิ่งที่ยอดเยี่ยมนี้ แต่มันต้องถูกสร้างขึ้นบนรากฐานที่เป็นรูปธรรมไม่ใช่ในอากาศ