กลยุทธ์และเคล็ดลับในการสอนการดีบัก
โดยไม่คำนึงถึงระดับทักษะของโปรแกรมเมอร์การดีบักเป็นส่วนที่หลีกเลี่ยงไม่ได้และเป็นส่วนสำคัญของการเข้ารหัส ” 1.
นี่อาจดูเหมือนเป็นคำพูดที่ค่อนข้างชัดเจนอย่างไรก็ตามการดำเนินการในลักษณะที่สะดวกสบายและมีประสิทธิผลอาจเป็นเรื่องที่ท้าทาย ในสถานศึกษาอย่างเป็นทางการหลายแห่งมุ่งเน้นไปที่ผลิตภัณฑ์การเรียนรู้ที่สมบูรณ์และถูกต้อง ในขณะที่เราอาจใช้ความซ้ำซากจำเจเช่น “ความผิดพลาดของฉันคือครูที่ยิ่งใหญ่ที่สุดของฉัน” ไม่ค่อยมีความรู้สึกเหล่านั้นที่มีคุณค่าในทางที่ทำให้นักเรียนคิดถึงความผิดพลาดและการแก้ปัญหาที่มองเห็นได้จริงและเป็นส่วนหนึ่งของวัฒนธรรมของห้องเรียน อย่างไรก็ตามโดยเฉพาะอย่างยิ่ง STEM และการเขียนโค้ดและหุ่นยนต์เสนอวิธีที่แท้จริงในการฝึกฝนสิ่งที่เราสั่งสอน นักเรียนจะมีข้อบกพร่องในโค้ดของพวกเขาข้อผิดพลาดเชิงตรรกะในการออกแบบโปรแกรมและข้อผิดพลาดอื่นๆขณะที่พวกเขาเรียนรู้ที่จะเขียนโค้ดและทำสิ่งที่ท้าทายในห้องเรียน ดังนั้นเราจะใช้โอกาสนี้ให้เกิดประโยชน์สูงสุดได้อย่างไรเพื่อไม่เพียงแต่สอนแนวคิดการเข้ารหัสให้กับนักเรียนเท่านั้นแต่ยังรวมถึงวิธีการเฉลิมฉลองความผิดพลาดของพวกเขาในฐานะก้าวสำคัญบนเส้นทางสู่การเรียนรู้ด้วย? การทดสอบและการดีบักจะเป็นกระบวนการที่ตอบสนองได้ดีซึ่งไม่มีสูตรที่ชัดเจนและเป็นรูปธรรม อย่างไรก็ตามมี ‘ขั้นตอน‘ ทั่วไปและกลยุทธ์ที่สามารถนำไปใช้กับนักเรียนเพื่อช่วยให้พวกเขามีส่วนร่วมกับกระบวนการนี้ในรูปแบบที่มีประสิทธิผลและการทำงานร่วมกัน
มันเริ่มต้นด้วยวัฒนธรรมในชั้นเรียนที่เป็นบวกเกี่ยวกับการดีบักและการคิดเชิงแนวคิดเกี่ยวกับโค้ดการ มีวัฒนธรรมในห้องเรียนที่กว้างขึ้นซึ่งกำหนดกรอบข้อผิดพลาดว่ามีประสิทธิผลไม่ใช่การลงโทษเป็นสิ่งสำคัญอย่างยิ่งหากเราต้องการให้นักเรียนมีส่วนร่วมอย่างแท้จริงในกระบวนการทดสอบและดีบัก หากพวกเขาพยายามซ่อนข้อผิดพลาดหรือกลัวที่จะพูดคุยผ่านตรรกะของพวกเขากับผู้อื่นกระบวนการดีบักจะยากขึ้นและมีประโยชน์ต่อการเรียนรู้น้อยลง มีหลายวิธีในการทำเช่นนี้ตั้งแต่การเฉลิมฉลองข้อผิดพลาดกับสิ่งต่างๆเช่น “พิพิธภัณฑ์แมลง” หรือ “หอเกียรติยศแมลง”1 ที่นักเรียนและครูโพสต์ข้อผิดพลาดในการเขียนโค้ดและการแก้ไขเพื่อให้ทุกคนใคร่ครวญ ครูได้ให้รางวัลนักเรียนสำหรับการหาข้อบกพร่องโดยการแจกของเล่นข้อบกพร่องพลาสติกทุกครั้งที่มีการ ‘ประกาศ‘ ข้อบกพร่องให้กับชั้นเรียนทำให้การดีบักไม่เพียงแต่จำเป็นเท่านั้นแต่ยังสนุกอีกด้วย!
นอกจากนี้การกล่าวถึงเป้าหมายทางแนวคิดของโครงการหรือความท้าทายอย่างต่อเนื่องจะช่วยให้นักเรียนนึกถึงภาพรวมของโครงการขณะทำงาน โดยการพูดบ่อยๆเกี่ยวกับสิ่งที่พวกเขาพยายามทำตามแนวคิดหรือการเขียนรหัสเทียมนักเรียนสามารถจับข้อบกพร่องที่อาจเกิดขึ้นได้ก่อนที่พวกเขาจะเติบโตในขนาดหรือขอบเขต กลยุทธ์เช่น ‘การมีส่วนร่วมใหม่ของกลุ่ม’ อาจเป็นประโยชน์สำหรับทั้งชั้นเรียนในการดูโครงการที่มีข้อบกพร่องร่วมกันระบุสิ่งที่ทำงานเกี่ยวข้องกับเป้าหมายของโครงการและเหตุผลจากนั้นข้อบกพร่องคืออะไร นักเรียนสามารถเห็นโปรเจกต์การเขียนโค้ดเฉพาะผ่านสายตามากมายและเรียนรู้ที่จะพูดคุยเกี่ยวกับองค์ประกอบที่น่าสนใจของโค้ดและกลยุทธ์ที่สร้างสรรค์เพื่อแก้ปัญหาที่พวกเขาสามารถนำไปใช้กับโปรเจกต์ของตนเองได้
‘ขั้นตอนแรก’ ในการดีบักคือการระบุว่ามีปัญหาในโครงการ นักเรียนไม่สามารถแก้ไขปัญหาได้หากพวกเขาไม่รู้ว่ามีปัญหาอยู่และในการทำเช่นนั้นพวกเขาจะต้องสามารถอธิบายได้ว่าเป้าหมายของโครงการคืออะไรและเปรียบเทียบกับสิ่งที่โครงการกำลังทำอยู่ ในโปรเจกต์ง่ายๆเช่นการเขียนโค้ดหุ่นยนต์ให้ขับเป็นสี่เหลี่ยมจัตุรัสซึ่งทำได้ง่ายกว่า เมื่อโปรเจกต์มีความซับซ้อนมากขึ้นเช่นการเข้ารหัสหุ่นยนต์เพื่อระบุและเคลื่อนย้ายลูกบาศก์สีแดงสิ่งนี้อาจดูน่ากลัวมากขึ้น ในด้านบวกมีสัญญาณที่มองเห็นได้และจับต้องได้ว่าโครงการไม่ทำงานตราบใดที่นักเรียนรู้ว่าโครงการนั้นตั้งใจจะทำอะไร
- การใช้ซูโดโค้ดเป็นประจำอาจเป็นกลยุทธ์ที่เป็นประโยชน์เมื่อนักเรียนต้องเผชิญกับโครงการที่ “ไม่ได้ผล” การเขียนคำศัพท์ที่ชัดเจนเป้าหมายของโครงการและสิ่งที่หุ่นยนต์หรือรหัสต้องทำเพื่อให้บรรลุเป้าหมายนั้นสามารถให้จุดเริ่มต้นแก่นักเรียนเพื่อให้แน่ใจว่าโครงการและรหัสของพวกเขาอยู่ในหน้าเดียวกัน ตัวอย่างเช่นหากการเข้ารหัสหุ่นยนต์เพื่อขับเป็นสี่เหลี่ยมจัตุรัสและหุ่นยนต์ขับเป็นเส้นเท่านั้นจะมีข้อผิดพลาดที่ชัดเจนและมองเห็นได้
‘ขั้นตอนต่อไป’ คือการค้นหาข้อบกพร่องในโค้ด ตอนนี้นักเรียนรู้แล้วว่ามีปัญหาพวกเขาสามารถทำตามขั้นตอนเพื่อค้นหาปัญหาภายในรหัสได้ นักเรียนควรดูว่าส่วนใดของรหัสทำงานตามที่ตั้งใจไว้ก่อนโดยใช้สิ่งที่พวกเขารู้เกี่ยวกับเป้าหมายของโครงการ นี่เป็นสิ่งสำคัญอย่างยิ่งสำหรับงานหลายส่วนเช่นการเข้ารหัสหุ่นยนต์เพื่อระบุลูกบาศก์สีแดงและเคลื่อนย้าย ต่อไปนี้เป็นกลยุทธ์หลายประการที่สามารถนำมาใช้เพื่อสนับสนุนนักเรียนในการค้นหาข้อบกพร่อง:
- ดูการดำเนินโครงการทีละช่วงตึก – สิ่งนี้จะเป็นประโยชน์สำหรับโครงการระยะสั้นซึ่งลำดับและขั้นตอนของโครงการนั้นง่ายกว่าและนักเรียนสามารถสังเกตเห็นความผิดปกติใดๆได้ง่ายขึ้น เพื่อช่วยในกระบวนการนี้ฟีเจอร์ ‘ขั้นตอน’ ใน VEXcode 123, VEXcode GO และ VEXcode VR สามารถใช้เพื่อดำเนินการโครงการทีละบล็อกหรือทีละขั้นตอนได้ เมื่อดำเนินโปรเจกต์ด้วยวิธีนี้โปรเจกต์อาจมีความชัดเจนมากขึ้นเมื่อใดและเมื่อใดที่โปรเจกต์เกิดข้อผิดพลาด สำหรับโปรเจกต์ที่ยาวขึ้นฟีเจอร์การไฮไลต์ใน VEXcode 123, VEXcode GO และ VEXcode VR จะไฮไลต์แต่ละบล็อกในขณะที่หุ่นยนต์ทำงานเพื่อช่วยให้การเชื่อมต่อระหว่างบล็อกกับพฤติกรรมของหุ่นยนต์มองเห็นได้ชัดเจนยิ่งขึ้น นักเรียนสามารถดูหุ่นยนต์และการไฮไลต์และหยุดโปรเจกต์ชั่วคราวหรือรอบๆข้อผิดพลาดเมื่อเห็นว่าเกิดขึ้น
- การทดสอบและดีบักโครงการเป็นส่วนๆ – นี่เป็นกลยุทธ์ที่มีประโยชน์เมื่อพัฒนาโครงการที่ยาวขึ้นหรือซับซ้อนขึ้นและเป็นวิธีที่ดีสำหรับนักเรียนในการพัฒนาและสร้างโครงการของพวกเขา นักเรียนควรได้รับการทดสอบและดีบักตั้งแต่เนิ่นๆและบ่อยครั้งในขณะที่เขียนโค้ดเพื่อที่ว่าเมื่อแต่ละพฤติกรรมหรือชุดของพฤติกรรมได้รับการเขียนโค้ดก็จะได้รับการทดสอบ ด้วยวิธีนี้ข้อบกพร่องในรหัสจะถูกจับได้เร็วขึ้นและแก้ไขได้ง่ายขึ้น การทำงานเป็นชิ้นเล็กๆจะช่วยให้นักเรียนหลีกเลี่ยงความหงุดหงิดและไม่ท้อแท้เมื่อ 'โครงการทั้งหมด‘ ไม่ได้ผลตามที่ตั้งใจไว้ทำให้ครูและนักเรียนสามารถรักษาแรงจูงใจและระดับการมีส่วนร่วมให้อยู่ในระดับสูงได้ง่ายขึ้น หากนักเรียนทำการทดสอบโปรเจกต์ที่ซับซ้อนทั้งหมดในครั้งเดียวจากนั้นพวกเขาสามารถแบ่งโปรเจกต์ออกเป็นชิ้นเล็กๆเพื่อเรียกใช้และดีบักโค้ดทีละส่วน
ตัวอย่างเช่นการใช้ตัวอย่างการเข้ารหัสหุ่นยนต์เพื่อตรวจจับและเคลื่อนย้ายลูกบาศก์สีแดงนักเรียนสามารถทดสอบแต่ละส่วนของงานทั้งหมดนั้นได้เช่นการขับรถไปที่ลูกบาศก์การรายงานสีของลูกบาศก์อย่างถูกต้องด้วยเซ็นเซอร์การจับลูกบาศก์เป็นต้น สิ่งนี้จะเสร็จสมบูรณ์เมื่อโครงการกำลังถูกสร้างขึ้นแต่ถ้าพวกเขาไปถึงจุดสิ้นสุดการแบ่งโครงการออกเป็นส่วนๆจะช่วยให้นักเรียนประมวลผลได้น้อยลงในครั้งเดียวและพวกเขาสามารถย้ายผ่านโครงการเพื่อแก้ไขได้อย่างมีระบบ - ใช้รหัสข้อผิดพลาด – นี่เป็นกลยุทธ์ที่มีประโยชน์เมื่อจัดการกับโครงการที่ใช้ข้อความเช่น VEXcode VR Python ซึ่งข้อผิดพลาดของบรรทัดจะถูกพิมพ์ลงบนหน้าจอ นักเรียนสามารถใช้ข้อมูลนี้เช่นบรรทัดรหัสที่มีปัญหาเพื่อจำกัดข้อผิดพลาดของพวกเขา โปรดทราบว่านี่เป็นสิ่งที่ดีสำหรับข้อผิดพลาดทางไวยากรณ์แต่จะไม่จำเป็นต้องระบุข้อผิดพลาดเชิงตรรกะในการออกแบบโปรแกรม
ตอนนี้ ‘ขั้นตอนสุดท้าย’ คือการแก้ไขข้อผิดพลาดในโครงการ หลังจากที่นักเรียนระบุว่าโปรเจกต์ของพวกเขาไม่ได้ดำเนินการตามที่ตั้งใจไว้และระบุสิ่งที่ผิดพลาดในรหัสแล้วตอนนี้พวกเขาสามารถค้นหาว่าเหตุใดจึงมีข้อบกพร่องนั้นอยู่ มันเป็นข้อผิดพลาดทางไวยากรณ์ง่ายๆเช่นส่วนการสะกดผิดของคำสั่งหรือไม่? หรือเป็นข้อผิดพลาดทางตรรกะที่การออกแบบหรือการไหลของโปรแกรมไม่ถูกต้อง? ซึ่งอาจต้องใช้ความพยายามหลายครั้งในการหาวิธีแก้ปัญหาที่ได้ผลและนั่นไม่ใช่แค่ไม่เป็นไรแต่สามารถกระตุ้นให้นักเรียนเข้าใจแนวคิดและโครงสร้างการเขียนโค้ดอย่างลึกซึ้งยิ่งขึ้น อีกครั้งด้วยทัศนคติเชิงบวกเกี่ยวกับการดีบักทุกส่วนของกระบวนการเป็นประสบการณ์การเรียนรู้ ต่อไปนี้เป็นกลยุทธ์บางประการที่ท่านสามารถใช้เพื่อช่วยให้นักเรียนทราบวิธีแก้ปัญหาที่เป็นไปได้:
- อ่านรหัสสำหรับความผิดปกติ – สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อทำงานกับรหัสข้อผิดพลาดหรือข้อผิดพลาดทางไวยากรณ์ การใส่ใจรายละเอียดอย่างใกล้ชิดเช่นการสะกดเครื่องหมายวรรคตอนและการเยื้องจะช่วยให้นักเรียนแก้ไขข้อบกพร่องด้วยแป้นพิมพ์ไม่กี่จังหวะ ใน VEXcode นักเรียนสามารถใช้ความช่วยเหลือในตัวเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับวิธีเขียนและใช้คำสั่งแต่ละคำสั่งในโครงการได้เสมอ
- มองหาชิ้นส่วนที่ขาดหายไป – กลยุทธ์ที่มีประโยชน์สำหรับการระบุข้อผิดพลาดเชิงตรรกะในโครงการมาจากการถามคำถามง่ายๆว่า "คุณพลาดขั้นตอนใดไปหรือไม่" นักเรียนอาจข้ามขั้นตอนที่ดูเหมือนจะเข้าใจง่ายแต่จำเป็นสำหรับหุ่นยนต์ (ซึ่งไม่สามารถเข้าใจได้) ในการทำงานให้เสร็จสมบูรณ์ การกลับไปที่รหัสเทียมที่สอดคล้องกับส่วนนี้ของรหัสอาจเป็นประโยชน์เพื่อให้แน่ใจว่านักเรียนย่อยสลายโครงการเป็นขั้นตอนที่เล็กที่สุดเท่าที่จะเป็นไปได้ การพูดคุยผ่านพฤติกรรมดังๆในกลุ่มหรือกับครูจะช่วยให้นักเรียนระบุ ‘รู‘ ใดๆในตรรกะหรือโครงการของพวกเขาได้
- เปรียบเทียบโค้ดกับตัวอย่างการทำงาน – นักเรียนสามารถใช้โปรเจกต์ที่ประสบความสำเร็จก่อนหน้านี้หรือตัวอย่างโปรเจกต์ที่สร้างไว้ใน VEXcode เพื่อดูวิธีการสร้างและเปรียบเทียบกับโค้ดที่มีอยู่ การทำงานร่วมกันเป็นกุญแจสำคัญที่นี่ – กระตุ้นให้นักเรียนดูโครงการของนักเรียนคนอื่นในชั้นเรียนเพื่อเรียนรู้จากวิธีที่กลุ่มอื่นเข้าใจงานและโครงการของพวกเขา หากหลายกลุ่มมีปัญหาเดียวกันอาจเป็นเวลาที่ดีที่จะใช้การประเมินเชิงรูปแบบนี้เพื่อสนทนาทั้งชั้นเรียนและดีบักร่วมกัน
- ‘ซูมออก’ และถอยหลังออกไป – หากนักเรียนประสบปัญหาในการหาทางออกอาจเป็นประโยชน์สำหรับพวกเขาที่จะก้าวออกไปจากโค้ดและดูเป้าหมายที่ใหญ่ขึ้นของโครงการและวิธีที่พวกเขาออกแบบโครงการของพวกเขาเพื่อให้บรรลุภารกิจนั้น “การย้ายระหว่างระดับของนามธรรม [สามารถ] ช่วยให้นักเรียนเห็นข้อผิดพลาดในรหัสที่พวกเขามองข้าม [และ]... พวกเขาอาจพบว่าข้อบกพร่องไม่ได้อยู่ในรหัสแต่อยู่ในแนวทางของพวกเขาในการแก้ปัญหา”1.
เช่นเดียวกับสิ่งใดก็ตามยิ่งนักเรียนฝึกฝนกับการทดสอบและการดีบักและพูดคุยเกี่ยวกับกระบวนการในทางบวกสร้างสรรค์มากเท่าใดความสะดวกสบายและความมั่นใจของพวกเขาก็จะยิ่งมากขึ้นเท่านั้น การให้นักเรียนฝึกฝนเพิ่มเติมนอกเหนือจากการดีบักที่เกิดขึ้นตามธรรมชาติในการท้าทายการเขียนโค้ดช่วยสร้างขีดความสามารถร่วมกันไม่เพียงแต่สำหรับกลยุทธ์และทักษะเกี่ยวกับการดีบักแต่ยังสำหรับการเติบโตวัฒนธรรมเชิงบวกเกี่ยวกับการแก้ปัญหาร่วมกัน โดยไม่คำนึงถึงกลยุทธ์ที่คุณใช้การหาวิธีส่งเสริมและรวมการเฉลิมฉลองการเรียนรู้แม้จะเป็นเรื่องง่ายเช่นเดียวกับการดีบักโครงการช่วยให้นักเรียนมีส่วนร่วมและภาคภูมิใจในกระบวนการเรียนรู้ไม่ใช่แค่ผลิตภัณฑ์