ฉันจะจัดการกับทัศนคติในการเขียนโปรแกรม Cargo-ลัทธิได้อย่างไร?


257

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

พวกเขามักจะคัดลอกโค้ดจากการมอบหมายหน้าที่คล้ายกันโดยไม่คำนึงถึงสาระสำคัญของปัญหา

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


8
ผู้แสดงความคิดเห็น:อย่าทิ้งคำตอบไว้ที่นี่ในความคิดเห็น เขียนคำตอบของคุณเอง ความคิดเห็นไม่ใช่สถานที่สำหรับพูดคุยคำตอบต่าง ๆ ที่เป็นไปได้สำหรับคำถาม: นำข้อเสนอแนะของคุณมาเป็นคำตอบหรือนำไปแชทกับเนื้อก่อน

50
เมื่อใดก็ตามที่สถาบันการศึกษาอยู่ที่นี่ - ฉันกลายเป็นห่วงอนาคตของฉัน ... ฉันแค่จินตนาการว่ากำลังอยู่บนเครื่องบินโบอิ้ง 7-28-7 และกังหันหมุนที่ 200,000 RPM ที่ใช้ซอฟต์แวร์ควบคุมที่เขียนใน C โดยนักเรียนคนหนึ่งที่เพิ่งผ่านมา .. อย่างไรก็ตามฉันพูดนอกเรื่อง
Ben DeMott

67
คุณคิดว่าพวกเขาล้มเหลวสองสามครั้งไม่ใช่ทุกคนที่ถูกตัดออกเพื่อการพัฒนาซอฟต์แวร์! พวกเขาไม่ใช่เกล็ดหิมะพิเศษ!

6
SICP มีชื่อเสียงในการกล่าวว่าการเขียนโปรแกรมนั้นคล้ายคลึงกับการร่ายคาถาหรือไม่? ฉันหมายถึงฉันสงสัยว่านักเรียนของคุณกำลังอ้างถึง SICP หรือแม้กระทั่งการเปรียบเทียบกับสิ่งที่ Abelson และ Sussman พยายามที่จะวาดภาพ แต่ฉันไม่เห็นว่ามันผิดโดยธรรมชาติที่มีคนเปรียบเทียบการเขียนโปรแกรมกับการสะกดคำเมื่อหนึ่งในชื่อเสียง หนังสือการเขียนโปรแกรมคอมพิวเตอร์ออกมีสิ่งเดียวกันในหน้าคู่แรก
Robbie

9
Eric Lippert มีเรื่องมากมายที่จะพูดเกี่ยวกับเรื่องนี้ และในวิธีที่สง่างามและกระชับกว่าที่ฉันสามารถทำได้: blogs.msdn.com/b/ericlippert/archive/2004/03/01/82168.aspx
P.Brian.Mackey

คำตอบ:


120

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

ความเป็นไปได้อีกอย่างหนึ่ง - แม้ว่าจะไม่ใช่งานเขียนโปรแกรมอย่างเคร่งครัด - คือขอให้พวกเขาประเมินสิ่งต่าง ๆ เช่นปริมาณน้ำไหลผ่านเดลต้ามิสซิสซิปปีต่อวินาที คำถามดังกล่าวไม่มีคำตอบที่กำหนดไว้โดยเฉพาะอย่างยิ่งเพราะเราจำเป็นต้องตั้งสมมติฐานบางอย่างเพื่อให้ได้มูลค่าที่น่าเชื่อถือ และถึงแม้ว่าคำตอบของคำว่า "คลาสสิค" เหล่านี้หลายคำสามารถ googled แน่นอน - คุณสามารถสร้างใหม่ได้อย่างง่ายดายซึ่งยังไม่ได้ (ยัง) พบที่ใดก็ได้ในอินเทอร์เน็ต

ตัวอย่างของแบบฝึกหัดทั้งสองประเภทนี้สามารถพบได้ในตัวอย่างเช่นProgramming Pearlsโดย Jon Bentley นอกจากนี้ยังโปรแกรมเมอร์ศาสตร์มีความท้าทายที่ดีบางอย่าง

งานประเภทที่สามคือการนำเสนอโค้ดบางส่วนที่มีข้อบกพร่อง (หนึ่งรายการขึ้นไป) ซึ่งพวกเขาจะต้องค้นหาและแก้ไข นี่เป็นการบังคับให้พวกเขาใช้ทักษะการวิเคราะห์และเหตุผลว่าโปรแกรมทำงานอย่างไร

ปรับปรุง

ข้อเสนอแนะจากความคิดเห็นโดย Billy ONeal:

ปัญหาของ "แบบฝึกหัด" คือนักเรียนที่มีปัญหากับแบบฝึกหัดก่อนหน้านี้จะถูกไขอย่างสมบูรณ์เพื่อการออกกำลังกายที่เหลืออยู่

คุณพูดถูก แต่ฉันรู้สึกว่านี่เป็นปัญหาทั่วไปของการตั้งค่าความยากของหลักสูตรให้อยู่ในระดับที่เหมาะสม / จัดกลุ่มนักเรียนที่มีทักษะระดับเดียวกันเข้าด้วยกัน ยิ่งไปกว่านั้นเราสามารถจัดนักเรียนเป็นกลุ่มย่อย ๆ เพื่อหารือและอภิปรายเกี่ยวกับปัญหาและแนวทางแก้ไขและแก้ปัญหาร่วมกัน ถ้ามีคนไม่เข้าใจคนอื่นก็สามารถช่วยได้ (การตั้งค่านี้จะช่วยพัฒนาทักษะการทำงานเป็นทีมด้วย) และถ้ามีคนพยายามขี้เกียจและปล่อยให้คนอื่นทำทุกอย่างครูก็จะสังเกตเห็น (ซึ่งควรจะเดินไปรอบ ๆ ดูแลและให้คำปรึกษานักเรียนไม่เล่น WoW บนแล็ปท็อปของเขาในมุม ;-)

และยังสามารถปรับแบบฝึกหัดเพื่อรองรับนักเรียนที่มีระดับความสามารถต่างกัน ผู้เริ่มต้นสามารถไปได้ช้าลงมีประสบการณ์เร็วขึ้น


ฉันจะเพิ่มคำตอบที่ดีลิงค์ไปยังเว็บไซต์ง่าย ๆ ที่ควรกำหนด IMHO เป็นส่วนประกอบของหลักสูตร: http://projecteuler.net/นี่คือเว็บไซต์เพื่อกระตุ้นความอยากอาหารของพวกเขาสำหรับรหัส มันเพิ่มปัญหาความยากลำบากที่ต้องแก้ไขด้วยภาษาที่พวกเขาต้องการ ขั้นแรกมันเป็นสิ่งเสพติดและยังกระตุ้นให้เกิดการแข่งขัน: คุณสามารถติดตามความคืบหน้าของพวกเขาผ่านทางบัญชีของพวกเขาพวกเขาสามารถทำได้เช่นกัน
Nicolas C.

142

คุณกำลังต่อสู้กับสมดุลของนักเรียนของพวกเขาจำเป็นที่จะต้องดูแลเกี่ยวกับเรื่องของคุณและพวกเขาจำเป็นต้องได้รับเกรดผ่าน นักเรียนหลายคนรู้สึกว่า:

(ทำให้มันผิด || การทดลอง) == (ความล้มเหลวของเกรด &&)

ทันทีที่นักเรียนรู้สึกว่าเวลาหรือเกรดของพวกเขาตกอยู่ในความเสี่ยงแม้ในเรื่องที่น่าสนใจพวกเขาหยุดเรียนรู้และกระโดดตรงไปที่ "ฉันไม่สนใจแค่ให้คำตอบที่ถูกต้องกับครู" นักเรียนของคุณกำลังพยายามตัดมุม(หรือเพื่อให้พวกเขาคิดว่า)โดยคิดให้น้อยที่สุดเท่าที่จะทำได้เกี่ยวกับปัญหาและเพียงแค่แฮ็คปัญหาโดยการคัดลอกและวาง

นี่คือคำแนะนำของฉันเกี่ยวกับวิธีจัดการกับสิ่งนี้:

  1. ใช้วิธีการ Bob Ross: พิสูจน์ให้พวกเขาเห็นว่าเป็นไปได้และเร็วกว่าในการเริ่มต้นใหม่เทียบกับการคัดลอกและการวาง สร้างโปรแกรมใหม่ต่อหน้าต่อตาในชั้นเรียน - แสดงให้พวกเขาเห็นว่าการเขียนโปรแกรมสามารถเหมือนการวาดภาพ
  2. ให้ได้รับมอบหมายที่ต้องใช้ความคิดสร้างสรรค์ ตัวอย่างเช่นให้นักเรียนแต่ละคนสร้างโครงสร้างข้อมูลของตนเอง (สิ่งที่เป็นวัตถุที่จำเป็นในการสร้าง Zoo, Pet Store, Town, College ฯลฯ ) บนกระดาษเพื่อใช้ตลอดหลักสูตร การมอบหมาย # 2 สามารถแปลงโครงสร้างเหล่านั้นเป็นคลาสหรือวัตถุ ฯลฯ โดยทั่วไปดึงดูดพวกเขาให้คิดอย่างเป็นนามธรรม - ให้รางวัลพวกเขาสำหรับการสร้างสรรค์แล้วให้รางวัลพวกเขาสำหรับการเปลี่ยนความคิดสร้างสรรค์เป็นโปรแกรมคอมพิวเตอร์
  3. ใช้ไวยากรณ์น้อยที่สุดเท่าที่จะเป็นไปได้ การสร้างชั้นเรียนและไวยากรณ์ภาษานั้นแพร่หลายมากในการแนะนำการเขียนโปรแกรมซึ่งมักทำให้เข้าใจผิดว่านักเรียนคิดว่าการเขียนโปรแกรมทั้งหมดรู้แค่ว่าจะใส่วงเล็บปีกกาไว้ที่ไหน - พวกเขาไม่รู้ว่าอะไรอยู่ตรงกลางของลอน การจัดฟันเป็นที่ที่ความคิดสร้างสรรค์ไหล เลือกภาษาที่ง่ายและให้ไฟล์ตัวอย่าง (เช่นไฟล์คลาสว่าง) สำหรับนักเรียนที่ยังต้องการคัดลอกและวางบางสิ่ง คุณสามารถค่อยๆเข้มงวดมากขึ้นเกี่ยวกับไวยากรณ์และการมอบหมายที่คอมไพล์ได้เมื่อหลักสูตรดำเนินไป

ที่ควรจะเป็น&&- แม้ว่าฉันสงสัยว่ามันอาจประสบความสำเร็จเช่นเดียวกับการดำเนินการระดับบิต
tvanfosson

ฉันไม่รู้จริงๆว่าข้อมูลมีลักษณะอย่างไร แต่ใช่การดำเนินการระดับบิตคือสิ่งที่ฉันตั้งใจไว้ Good catch :-)
Kevin McCormick

3
"สิ่งที่อยู่ตรงกลางของเครื่องมือจัดฟันแบบโค้งคือที่ความคิดสร้างสรรค์ไหล" ==> อุ๊ปส์เขา / เธอจะไม่สอนพวกเขาว่า Python แล้ว ...
Olivier Pons

3
ปัญหาอีกประการหนึ่งของการพยายามให้คำตอบที่ถูกต้องกับครูแทนการเรียนรู้คือผู้คนมักคิดว่าเป็นการเรียนรู้ เช่นlesswrong.com/lw/iq/guessing_the_teachers_password
Wilka

6
แล้วฉันจะเพิ่มเซมิโคลอนสองสามอันที่นี่ ...
VirtuosiMedia

44

หลายสิ่งที่อยู่ในใจของฉัน:

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

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

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

  • จากนั้นคุณสามารถให้การมอบหมายให้พวกเขาเขียนโค้ดจากศูนย์ด้วยตนเอง ณ จุดนี้พวกเขาควรมีความเข้าใจที่ดีขึ้นเกี่ยวกับรหัสที่แท้จริง พวกเขาอาจพบว่าทำเองได้ง่ายขึ้นเล็กน้อย

แนวคิดพื้นฐานคือการเขียนโปรแกรมไม่ได้เป็นเพียงการเขียนโค้ด แต่เป็นการอ่านด้วย ควรสอนรหัสการอ่าน


4
ความคิดไข่อีสเตอร์ดูเหมือนจะเป็นวิธีที่ดีในการสอนการทดสอบ / การตรวจสอบ ตามแนว "วัดสามารถลบออกได้โดยไม่ทำลายสัญญาใด ๆ "
Neil N

3
+1 ถึงการอ่านรหัส ฉันเห็นคนจำนวนมากกำลังแก้ไขข้อผิดพลาดโดยทำการเดาตามสัญชาตญาณแล้วหาทางพิสูจน์มัน ฉันพบว่าการอ่านโค้ดให้เบาะแสที่จะนำคุณไปสู่ทางออกที่ถูกต้อง ฟังดูชัดเจน แต่ฉันเห็นว่าถูกทอดทิ้งมาก
Chris

38

ลองดูอีกทางหนึ่ง ปรากฏการณ์การขนส่งสินค้าลัทธินี้เป็นขั้นตอนที่สามเณรของเดรย์ฟัรูปแบบของการเข้าซื้อกิจการทักษะ นี่คือวิธีที่เราเรียนรู้ เมื่อฉันเรียนรู้ที่จะเขียนโปรแกรมครั้งแรกสิ่งที่ฉันทำก็คือพิมพ์หน้าโค้ดจากด้านหลังของการคำนวณ! นิตยสาร. การทำซ้ำเป็นกุญแจสำคัญ ทารกเรียนรู้ที่จะพูดคุยโดยการคัดลอกเสียงที่พวกเขาได้ยินจากพ่อแม่ ทุกสิ่งที่เราเรียนรู้คือการเลียนแบบ เราเพียงแค่ต้องได้รับการสอนวิธีการจากการเลียนแบบไปสู่การเรียนรู้

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

ทางเลือกหนึ่งคือจัดโครงสร้างห้องปฏิบัติการของคุณเป็นโค้ดโดโจ ให้นักเรียนผลัดกันจับคู่กับปัญหาเดียวกัน เลือกปัญหาที่ใช้เวลาประมาณ 10 ถึง 15 นาทีเพื่อแก้ไข ทำซ้ำปัญหานั้นในห้องแล็บไม่กี่แห่งและแนะนำวิธีใหม่ในการแก้ปัญหาเมื่อความสามารถของชั้นเรียนเพิ่มขึ้น อาจเริ่มต้นห้องปฏิบัติการโดยให้นักเรียนดูโปรแกรมของคุณและให้นักเรียนทำซ้ำ สลับคู่กับการวนซ้ำแต่ละครั้ง

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


"เมื่อฉันเรียนรู้ที่จะเขียนโปรแกรมครั้งแรกสิ่งที่ฉันทำก็คือพิมพ์หน้าโค้ดจากด้านหลังของนิตยสาร Compute!": นี่เป็นช่วงแรกของฉันเมื่อฉันใช้ Commodore Vic20 ในการรันโปรแกรมของเล่นขนาดเล็กและในไม่ช้า น่าเบื่อมาก. ในไม่ช้าฉันก็พัฒนาทัศนคติตรงกันข้าม: เขียนตัวเองแม้แต่รหัสที่คุณสามารถคัดลอกมาจากที่อื่นไม่เช่นนั้นคุณจะไม่แน่ใจว่าเกิดอะไรขึ้นกับรหัส
Giorgio

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

1
ฟุ้งซ่านสภาพแวดล้อมฟรีเช่นจอนของ Jagger Cyberdojoสามารถที่ยอดเยี่ยมสำหรับการนี้และการตั้งค่าเซิร์ฟเวอร์ของคุณเองเป็นง่ายๆเป็นดาวน์โหลดเครื่องเสมือนหรือแหล่งที่มาจากGitHub
Mark Booth

@giorgio ฉันอายุ 8 ปี ระดับความสามารถของฉันคือ "พิมพ์สิ่งนี้ในเกมฟรี"
Michael Brown

25

ฉันได้สอนชั้นเรียนเบื้องต้นในอดีตและเมื่อฉันจำได้มองย้อนกลับไปในขณะนี้:

นักเรียนบางคนคิดว่าการเขียนโปรแกรมเป็นเช่นนั้นด้วยเหตุผลที่แตกต่างกัน ฉันจำได้ว่าครั้งหนึ่งเคยเป็นเด็กดีที่บรรทุกสินค้ามากในสิ่งที่ฉันทำ:

เชื่อว่ามันไม่ใช่ปัญหาที่แยกได้ แต่นักเรียนคนอื่น ๆ ในชั้นเรียนเดียวกันอาจมีพฤติกรรมที่คล้ายกันหรือเข้าใกล้ปัญหาและไม่แสดงออกมาฉันมักจะพูดกับชั้นเรียนเสมอ

  1. บางครั้งก็ใช้เวลาอธิบายบางอย่างเช่นดีกรีซึ่งมีความหมายสำหรับพวกเขาว่าในสภาพแวดล้อมเดียวกันกับข้อมูลและรหัสเดียวกันพวกเขาจะได้ผลลัพธ์เดียวกัน (ปัดเป่า "การสุ่ม")

  2. เนื่องจากการแก้ปัญหาขึ้นอยู่กับการกระทำของนักเรียนและไม่ใช่สิ่งอื่นความสนใจควรอยู่ในการแก้ปัญหาและไม่ค้นหาคาถาที่ถูกต้อง

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

  4. ฉันคิดว่ามันอยู่ในรหัสเสร็จสมบูรณ์: "แม้ว่าคุณจะคัดลอกและวางรหัสเป็นของคุณ" หากมีคนทำมันก็ไม่ควรเป็นแบบขนส่งสินค้า ทุกบรรทัดต้องอธิบายให้ฉัน (เป็นรายบุคคล) หรือกับนักเรียนคนอื่น (เหมือนกัน) หรือในชั้นเรียน


23

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

เมื่อฉันเข้าสู่ช่วงแนะนำการเขียนโปรแกรมงานมอบหมายครั้งแรกของเราถูกเรียกว่า ' Rick the Robot ' เรามีกระดาษแผ่นหนึ่งพร้อมแผนที่ทางอากาศของเมืองที่มีจุดน่าสนใจเช่นธนาคารร้านขายของชำ ฯลฯ ... เรามีเพื่อนคนหนึ่งชื่อ 'ริค' และมีการดำเนินการเช่น 'ก้าวหนึ่ง' 'ดูซ้าย' 'ดูสิ', 'ข้ามถนน' และเราสามารถใช้สิ่งต่าง ๆ เช่น 'ทำซ้ำ' และ 'ถ้ามีอะไรสักอย่างแล้วทำอะไร' (นี่ไม่ใช่ 100% เนื่องจากฉันไม่สามารถหางานนี้ได้) ความคิดคือริคสามารถใช้สิ่งที่เขาได้รับเท่านั้นและเขาต้องไปยังสถานที่ต่าง ๆ บนแผนที่

นี่คือการออกกำลังกายที่สนุกสนานและบางสิ่งที่แนะนำให้คุณรู้จักกับพื้นฐาน (ซึ่งบางครั้งก็ยากที่จะเข้าใจกับผู้มาใหม่) ไม่มีคำตอบที่ดีสำหรับปัญหานี้ (เป็นเกม) และไม่มีวิธีแก้ไขคัดลอกและวาง บางอย่างเช่นนี้อาจทำให้คุณเล่นกับความคิดสร้างสรรค์ของพวกเขามากขึ้นโดยไม่ต้องข่มขู่พวกเขาด้วยรหัส

ในที่สุดความคิดคือการที่คุณเริ่มต้นด้วยการที่เป็นนามธรรมและย้ายไปทางคอนกรีต พวกเขาไม่สามารถคัดลอกวางนามธรรม พวกเขาต้องเข้าใจเพื่อแก้ปัญหา


3
ลูปและเงื่อนไข? ฉันจะเริ่มด้วยตัวแปรการกำหนดและการแสดงออก ให้พวกเขาอ่านตัวเลขสองตัวนอกบรรทัดคำสั่งแล้วเพิ่มเข้าไปแล้วพิมพ์ผลลัพธ์ บ่อยครั้งที่การทำสิ่งที่เห็นได้ชัดอย่างเจ็บปวดทำให้นักเรียนมั่นใจว่าพวกเขาสามารถเข้าใจสิ่งที่เกิดขึ้นและกระตุ้นให้พวกเขาทดสอบ
TMN

2
@c_maker: การมอบหมายของคุณดูเหมือนเกมสำหรับเด็กก่อนวัยเรียน การให้งานที่ง่ายเกินไปแก่นักเรียนของคุณสามารถลดความสนใจในหัวเรื่องได้เท่านั้น
Goran Jovic

2
@c_maker: ฉันคิดว่าคำตอบของคุณมีข้อดีฉันไม่เห็นวิธีการเปลี่ยนจากwhile not at-corner do take-one-step endเป็นรหัสจริงโดยไม่ต้อง "backfilling" กับสิ่งต่าง ๆ เช่นตัวแปรและชนิดข้อมูล ขออภัยการตอบสนองของฉันดูเหมือนจะรุนแรงเล็กน้อยในการสะท้อน
TMN

7
ฉันคิดว่าค่านิยมหลักของ Rick the Robot ไม่ได้ช่วยในการทำความเข้าใจลูปหากมีคำสั่ง ฯลฯ ค่าหลักคือการช่วยให้พวกเขาเข้าใจกระบวนการทั่วไปของวิธีการเขียนโปรแกรม มันช่วยให้พวกเขาเห็นปัญหาในแบบเฉพาะขั้นตอนวิธีอัลกอริทึม เมื่อพวกเขาเข้าใจกระบวนการเขียนโปรแกรมเป็นภาษาอังกฤษด้วยตัวอย่างเช่นนี้แล้วคุณสามารถกรอกรายละเอียดโดยการสอนให้พวกเขาทราบว่าโค้ดมีลักษณะอย่างไร นี่เป็นความคิดที่ยอดเยี่ยม +1
Phil

1
เตือนฉันเกี่ยวกับหลักสูตรเบื้องต้นของฉัน (30 ปีที่แล้ว!) ซึ่งมีพื้นฐานมาจาก [Karel the Robot] ( en.wikipedia.org/wiki/Karel_(programming_language) (หมายเหตุ: ลิงก์ล้มเหลวเนื่องจาก URL ที่แท้จริงมีค่าอยู่ในนั้น . คลิกตัวเลือกแรกบนหน้าเว็บที่ไม่เกิดขึ้น) อย่างไรก็ตามคาเรลใช้ไวยากรณ์ Pascal เหมือน แต่ไม่มากเกินไปของมัน..
JeffK

20

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

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

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


2
บิตที่น่าสนใจมากเกี่ยวกับอนุกรมวิธานของบลูม ในความคิดของฉันมันสำคัญมากที่จะให้นักเรียนเข้าใจรหัสมากกว่าการคัดลอก / วางในชั้นเรียนอินโทร พวกเขาจำเป็นต้องรู้ว่าifงบทำงานอย่างไรและสามารถเขียนได้เองตั้งแต่ต้นก่อนที่จะดำเนินการต่อไป ทำให้ส่วนความรู้ความเข้าใจทำงานได้จากนั้นไปยังแอปพลิเคชัน
ฟิล

ฉันเพิ่งเข้าร่วมหลักสูตรที่เกี่ยวข้องกับการสอนที่ยอดเยี่ยมโดย Richard Felder ความคิดเห็นของเขาคือคุณไม่จำเป็นต้อง "จัดการ" ระดับล่างของอนุกรมวิธานของ Bloom ก่อนที่จะก้าวขึ้น ตัวอย่างเช่นเขาบอกว่าเด็กอนุบาลกำลังฝึกวิเคราะห์เมื่อพวกเขาถูกขอให้เปรียบเทียบว่ารายการโทรทัศน์ไหนดีกว่า - เซซามีสตรีทหรือ [... ?] และทำไม
Aivar

11

คุณมีการพิจารณาการจัดหาพวกเขาด้วยรหัสบางอย่างที่จะเริ่มต้นด้วย? ไม่ว่าจะนั่งร้านแบบง่ายๆที่ต้องการงานมอบหมายเช่นฟังก์ชั่นหลักที่ว่างเปล่า (ฉันไม่รู้ว่าคุณใช้ภาษาอะไร) สิ่งที่รวบรวมและทำงานและไม่ทำอะไรเลย จากนั้นพวกเขาสามารถเริ่มเพิ่มรหัสด้วยความมั่นใจในระดับที่อย่างน้อยก็ส่วนหนึ่งของมันทำงาน

นี่เป็นเรื่องปกติธรรมดาใน "โลกแห่งความจริง" IDEs และเครื่องมืออื่น ๆ จำนวนมากสร้างโครงการที่ว่างเปล่าโดยมีไลบรารี / แม่แบบ / ไฟล์กำหนดค่าที่มีอยู่แล้ว


อีกวิธีในการจัดหารหัสคือต้องการให้พวกเขามีปฏิสัมพันธ์กับชั้นเรียนที่คุณเขียน (ที่ไม่ทำงานกับรหัสก่อนหน้า) และกำหนดข้อกำหนดของการมอบหมายให้รหัสของคุณไม่สามารถเปลี่ยนแปลงได้และพวกเขาจะต้องแก้ไขด้วยตนเอง รหัสเพื่อให้การมอบหมายงาน
Zoot

หรือแม้กระทั่งให้รหัสเพื่อให้มันทำงานในทิศทางเดียวและทำการมอบหมายให้เปลี่ยน / เพิ่มลักษณะการทำงาน ด้วยวิธีนี้พวกเขามุ่งเน้นไปที่พฤติกรรมเฉพาะมากกว่าพื้นฐานเพื่อให้ทำงานได้
JohnMcG

สำหรับภาษาแรกลองใช้ภาษาที่ไม่ต้องใช้ต้นแบบเริ่มต้น Python นั้นดีในเรื่องนี้ C / C ++ / Java นั้นแย่มาก
Lie Ryan

หากมีสิ่งใดความสมบูรณ์ของรหัสและแม่แบบของ IDE จะส่งเสริมความคิดเกี่ยวกับการขนส่งสินค้า หากนักเรียนใช้เวลาในการทำความเข้าใจว่าทำไมต้องมีรหัสเทมเพลตและพวกเขาจะได้เรียนรู้มากกว่าการทำตามสูตร
Mark Booth

8

ความคิดเกี่ยวกับลัทธิการขนส่งสินค้าใด ๆ (รวมถึงลัทธิบรรทุกสินค้าเอง) มาจากการขาดความเข้าใจพื้นฐานของเทคโนโลยีที่เกี่ยวข้อง

การเขียนโปรแกรม Cargo-ลัทธิไม่ควรคิดว่าเป็นนิสัยที่มีปัญหา แต่เป็นอาการของความสับสนพื้นฐานที่โปรแกรมเมอร์กำลังเผชิญอยู่

ที่สำคัญกว่านั้นคือการสันนิษฐานว่าการขาดความเข้าใจของนักเรียนเป็นเพียงผลพลอยได้จากการขาดความเชื่อมั่นของเขาเท่านั้นที่เป็นความเข้าใจผิดขั้นพื้นฐานและไม่ได้แก้ปัญหาพื้นฐาน

รูปแบบการเขียนโปรแกรมคัดลอกวางของนักเรียนควรเป็นธงสีแดงเพื่อบอกคุณว่านักเรียนคนนี้มีความซับซ้อนในสิ่งที่เขาคาดหวังไว้

เขาใช้สัญชาตญาณในอดีตเป็นโครงงานที่จะสร้างโครงการปัจจุบันของเขาโดยพยายามสร้างวิธีการแก้ปัญหาโดยใช้ปัญหาที่แก้ไขก่อนหน้านี้เป็นหน่วยการสร้าง เราทุกคนทำสิ่งนี้ในระดับหนึ่ง แต่พวกเราส่วนใหญ่ทำสิ่งนี้โดยใช้ความรู้ที่ได้จากงานที่ผ่านมาเป็นหน่วยการสร้างของเรา นักเรียนคนนี้ใช้งานแทนซึ่งหมายความว่าเขาไม่เข้าใจบล็อกที่เขาทำงานด้วยจริงๆ เขาแยกงานเท่าที่ความเข้าใจของเขาอนุญาตและรักษารหัสขนาดใหญ่เป็นหน่วยอะตอมเพราะเขาไม่เข้าใจว่าพวกเขาทำงานอย่างไร เขารู้แค่ว่าพวกเขาทำอะไร


ขอบคุณ! คุณให้อาหารฉันมากสำหรับความคิด ตอนแรกฉันคิดว่าบางทีพวกเขาอาจนึกภาพไม่ออกเลยว่ามีความหมายของโครงสร้างและองค์ประกอบประกอบในโค้ด ตอนนี้ฉันคิดว่าบางทีพวกเขาอาจพยายามเข้าใจ แต่ล้มเหลวและใช้ copy-paste เป็นทางเลือกสุดท้าย
Aivar

7

เปลี่ยนคุณความคิดของโครงการ!

ในโลกแห่งการเขียนโปรแกรมเราแทบจะไม่ได้สร้างโครงการใหม่สำหรับทุก ๆ โซลูชันที่เกิดขึ้น เวลาส่วนใหญ่เราปรับเปลี่ยนเก่า

เปลี่ยนแนวคิดของโครงการจากโซลูชันหนึ่งสำหรับแต่ละการมอบหมายเป็นโซลูชันเดียวสำหรับภาคการศึกษาทั้งหมด การมอบหมายแต่ละครั้งจะสร้างตามการมอบหมายครั้งก่อน

ตัวอย่าง

โครงการ: สร้างระบบลิฟต์

  • การบ้าน 1: พิมพ์งานพื้นปัจจุบัน
  • การบ้าน 2: สร้างโครงสร้างข้อมูลสำหรับคลาสลิฟต์และพิมพ์พื้นตามลิฟต์
  • การบ้าน 3: สร้างรหัสที่ "ย้ายลิฟต์" โดยพิมพ์พื้น ยอมรับอินพุตคีย์บอร์ด (> ป้อนพื้น:)
  • การบ้าน 4: จัดการลิฟต์หลายตัว

ประเด็นก็คือคุณสร้างงานที่มอบหมายก่อนหน้านี้แทนการรีไซเคิลงานที่ได้รับมอบหมายเก่าสำหรับงานใหม่


2
การคัดลอกวางไม่ใช่ปัญหาปัญหาคือพวกเขาไม่เข้าใจสิ่งที่กำลังคัดลอก
Aivar

1
ปัญหาอย่างหนึ่งของการมอบหมายที่เพิ่มขึ้นคือถ้านักเรียนทำสิ่งที่ผิดพลาดไป แต่เนิ่นๆพวกเขาจะติดอยู่กับรหัสที่ไม่ทำงานสำหรับส่วนที่เหลือของพวกเขา ผู้สอนหลายคนจะให้รหัสการทำงานที่เป็นประโยชน์เพื่อใช้เป็นพื้นฐานสำหรับการมอบหมายในภายหลัง แต่แล้วพวกเขาก็กลับไปที่ปัญหาเดิม: แก้ไขรหัสของผู้อื่นที่พวกเขาไม่เข้าใจ
Barry Brown

จริงๆ? หากผู้สอนไม่เป็นประโยชน์เพียงพอที่จะช่วยให้นักเรียนทำงานรหัสได้จริง ๆ พวกเขาทำงานจริง ๆ หรือไม่?
Richard

ไม่ใช่ทุกคนที่จะทำงานที่ได้รับมอบหมายภายในวันที่กำหนด
Barry Brown

@Barry นี่ไม่ใช่กรณีที่มีทุกวิชาที่สร้างขึ้นอย่างมีเหตุผลตลอดหลักสูตร? ตัวอย่างเช่นหากคุณไม่เคยเรียนรู้การตั้งค่าของยูเนี่ยนและทางแยกคุณจะรู้สึกอึดอัดใจสำหรับหลักสูตรคณิตศาสตร์ไม่ต่อเนื่องที่เหลือของคุณ หรือถ้าคุณไม่เคยเรียนรู้ตารางธาตุคุณจะต้องเรียนวิชาเคมีที่เหลืออยู่ ความคิดคือการบังคับให้นักเรียนเรียนรู้แนวความคิดในลำดับที่ถูกต้องและทำงานลาของพวกเขาจนกว่าพวกเขาจะเชี่ยวชาญ หากพวกเขาไม่สามารถใช้เวลาทั้งคืนเป็นเวลาหนึ่งสัปดาห์เพื่อเตรียมโปรแกรมให้พร้อมสำหรับการเรียนในวันรุ่งขึ้นพวกเขาไม่จำเป็นต้องประกอบอาชีพด้านการพัฒนาซอฟต์แวร์
Jonathan Henson

7

ลองใช้ภาษาระดับสูงมากที่ต้องใช้รหัสสำเร็จรูปขั้นต่ำ

สำหรับฉันมันมักจะเป็นรหัส boilerplate ในกรอบขนาดใหญ่หรือภาษา verbose ที่รู้สึกเหมือนเวทมนตร์คาถาและขัดขวางความเข้าใจ

ฉันสอนMLเป็นการส่วนตัวในหลักสูตรการเขียนโปรแกรมเบื้องต้น CS ของฉัน เป็นเวลาหลายปีที่Lispได้รับการสอนให้รู้จักกับการเขียนโปรแกรมเบื้องต้นที่ MIT ทั้งคู่เป็นตัวเลือกที่ยอดเยี่ยม ประโยชน์บางอย่างที่พวกเขามี

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

ML น่าจะเป็นทางเลือกที่ดีทีเดียว! แต่งูใหญ่ยังเหมาะกับสองจุดแรกของคุณและใช้งานง่าย (หมายถึงไม่ยุ่งยากทางเทคนิคขนาดใหญ่)
Aivar

ฉันขอแนะนำ Python โดยเฉพาะเมื่อรวมกับ IDE ที่ดีเช่น Wing IDE
เคน

6

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

การเขียนโปรแกรมต้องการแบ่งงานที่เป็นธรรมชาติออกเป็นขั้นตอนเล็ก ๆ ที่ผิดธรรมชาติ เนื่องจากสามเณรไม่ได้จัดการกับความละเอียดที่ละเอียดเช่นนี้ในชีวิตประจำวันมันยากสำหรับพวกเขาที่จะเข้าใจว่าควรจะมีขั้นตอนเล็ก ๆ โดยเฉพาะอย่างยิ่งเมื่อไม่ชัดเจนว่าขั้นตอนเล็ก ๆ ที่ทำให้เครื่องมี แต่แม้ว่าพวกเขาจะจัดการกับสิ่งนั้นพวกเขาก็จะเผชิญหน้ากับไวยากรณ์ที่หยิ่งทะนงและความหมายที่ จำกัด ของภาษาโปรแกรม (ภาษาที่ผิดธรรมชาติที่ปลอมแปลงเป็นเสมือนกึ่งธรรมชาติ) ที่ควบคุมเครื่องลึกลับโดยการควบคุมระยะไกล

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

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


5

คุณสามารถถามคำถามเกี่ยวกับชิ้นส่วนของรหัสที่ต้องการคำตอบเป็นลายลักษณ์อักษรได้ไหม เช่นเดียวกับ "รหัสนี้ทำอะไรอยู่" "ทำไมโปรแกรมเมอร์ถึงแก้ปัญหาอย่างนี้?" "มีวิธีที่ดีกว่านี้ไหม" ฯลฯ ?

ที่จริงแล้วพวกเขาจะคิดเกี่ยวกับปัญหาซึ่งเป็นสิ่งที่พวกเขาสามารถทำได้โดยไม่ต้องสัมผัสรหัส


5
  • ท้าทายพวกเขาเพื่อสร้างวิธีการแก้ปัญหาที่สั้นที่สุดเท่าที่จะทำได้
  • ให้รางวัลโซลูชั่นที่กระชับยิ่งขึ้นด้วยสิ่งจูงใจ
  • สร้างแบบฝึกหัดที่หมุนรอบรหัสการเปลี่ยนโครงสร้างใหม่ทั้งหมด
  • ให้นักเรียนแลกเปลี่ยนงานมอบหมายและจำลองคะแนนเพื่อประสิทธิภาพและความสะอาดของรหัสและใช้ตัวอย่างที่มีประสิทธิภาพน้อยที่สุดเป็นเครื่องฉายภาพข้ามศีรษะ

2
การปรับโครงสร้างเป็นสิ่งสำคัญอย่างยิ่งในการฝึกฝนอย่างแท้จริง อย่างไรก็ตามโปรดจำไว้ว่าวิธีแก้ปัญหาที่สั้นที่สุดนั้นไม่จำเป็นต้องสะอาดที่สุดและไม่มีประสิทธิภาพมากที่สุด (ขึ้นอยู่กับคำจำกัดความของคำศัพท์เหล่านี้)
PéterTörök

ในโรงเรียนฉันพยายามเขียนวิธีแก้ปัญหาที่มีความยาวอักขระน้อยกว่าโซลูชันของเพื่อน นั่นหมายถึงการใช้ชื่อตัวแปรแบบสั้นและในการเขียนโค้ดทั่วไปที่อ่านไม่ออก
คริสเตียน

@ คริสเตียนโดยย่อฉันไม่ได้หมายถึงความยาวตัวอักษรสั้นจริงๆเนื่องจากคอมไพเลอร์ไม่สนใจชื่อตัวแปร ผมกำลังพูดถึงความซับซ้อนรหัส ... อาคาKISS
Lynn Crumbling

4

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


4

ฉันจะสมมติว่าโดย 'ลัทธิลัทธิขนส่งสินค้า' คุณหมายถึงว่าพวกเขากำลังแทรกสิ่งที่คิดว่าจำเป็น แต่จริงๆแล้วไม่ได้ทำอะไรเลยเพื่อแก้ไขปัญหา

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

พวกเขาจะถูกตัดสินในลักษณะคล้ายกันในแบบฝึกหัดการเขียนในชั้นเรียนภาษาอังกฤษ - ไม่มีใครต้องการสิ่งของที่ดับไปด้วยการสุ่มสัมผัสหรือโดยทั่วไปแล้วการท่องเที่ยวโดยไม่ต้องไปถึงจุดนั้น

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

...

หากพวกเขากำลังคัดลอกและวางรหัสจากการมอบหมายที่คล้ายกันก่อนหน้านี้และจริงๆแล้วมันเป็นสิ่งที่จะแก้ปัญหาใหม่ ... ดีนั่นเป็นเพียงการใช้รหัสซ้ำและถ้าพวกเขาไม่ได้ตั้งสมมติฐานที่ไม่ดีเกี่ยวกับความเหมาะสมสำหรับรหัสสำหรับการใช้งานซ้ำ ฉันคิดว่ามันสมเหตุสมผลอย่างยิ่งสำหรับพวกเขาที่จะทำ (เช่นการอ่านจากไฟล์เพื่อหาอินพุต ... ชิ้นส่วนโมดูลาร์ทั้งหมดที่สามารถนำมาใช้ซ้ำได้หากคุณไม่ต้องการให้พวกมันทำคุณต้องทำให้แบบฝึกหัดแตกต่างกัน


ปัญหาคือพวกเขากำลังคัดลอกโดยไม่เห็นโครงสร้างของรหัส - พวกเขาแค่คิดว่ารูปแบบนี้มีประโยชน์ในครั้งที่แล้วดังนั้นหวังว่ามันจะเหมาะกับที่นี่ พวกเขาหวังและลองแทนที่จะมีความมั่นใจ
Aivar

4

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

โดยไม่ต้องรู้เพิ่มเติมเกี่ยวกับบริบทของชั้นเรียนฉันจะบอกว่าให้ความสำคัญกับนักเรียนที่มีปัญหาเกี่ยวกับโครงสร้างพื้นฐาน - ง่าย ๆถ้า / แล้ววนรอบ ฯลฯ งานประจำง่าย ๆ ในการพิมพ์เลขคี่เลขสิบทุกเลข ฯลฯ แต่ละรหัสมีมากกว่า 10 บรรทัด หากพวกเขาเป็น 'การคิดแบบเวทย์' พวกเขายังไม่สามารถเข้าใจพื้นฐานเหล่านั้นได้ ให้พวกเขาทำกิจวัตรง่าย ๆ ที่แตกต่างกันมากมายจนกระทั่งพวกเขาเข้าใจว่าเกิดอะไรขึ้น มีคนพูดถึงการเขียนรหัสลงบนกระดาษ - ฉันคิดว่านั่นเป็นวิธีที่ยอดเยี่ยมในการทำกิจวัตรง่ายๆเหล่านี้

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


3

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

ช่วยบอกพวกเขาว่าคำแนะนำเหล่านี้จะถูกติดตามโดยหุ่นยนต์อย่างแท้จริงซึ่งไม่รู้วิธีอนุมานสิ่งต่าง ๆ มันจะต้องเป็นกิจกรรมที่ต้องทำในสิ่งที่คุณต้องรับผิดชอบในการชี้นำพวกเขา


จุดดี! ฉันทำสิ่งนี้แล้วและฉันเชื่อว่าสิ่งนี้ได้ชี้นำนักเรียนหลายคนให้ถูกทาง แต่ไม่ใช่ทั้งหมด
Aivar

3

อลิสแตร์เบิร์นพูดเกี่ยวกับแนวคิดของ Shu-Ha-Ri และวิธีที่จะนำไปใช้กับการเขียนโปรแกรมhttp://alistair.cockburn.us/Shu+Ha+Ri ฉันคิดว่ามันเป็นสิ่งสำคัญที่จะต้องจำไว้ว่านักเรียนของคุณอยู่ในความต่อเนื่องนี้ ครั้งแรกที่จะช่วยบรรเทาความขุ่นมัวของคุณ การคัดลอก / เลียนแบบเป็นการตอบสนองที่เป็นธรรมชาติและเป็นที่ยอมรับเมื่อคุณเริ่มเรียนรู้บางสิ่ง ประการที่สองมันอาจช่วยให้คุณได้แนวคิดเกี่ยวกับวิธีก้าวไปข้างหน้า ตัวอย่างเช่นคุณอาจต้องการพิจารณาเลือกปัญหาที่สามารถแก้ไขได้หลายวิธี (ลูปเทียบกับการเรียกซ้ำ, คอนโซลกับเว็บ / กุย) จากนั้นให้พวกเขาแก้ปัญหาด้วยวิธีแรกอย่างใดอย่างหนึ่งแล้วอีกวิธี - โบนัสที่พวกเขาสามารถเรียนรู้ เกี่ยวกับการใช้ซ้ำรหัสอย่างถูกต้องการจัดองค์ประกอบการสร้างไลบรารีที่ใช้ซ้ำได้ ฯลฯ

อีกวิธีหนึ่งที่ประสบความสำเร็จที่ฉันเคยเห็นคือการมีชุดของโครงการที่สร้างต่อกันทำให้ค่าเริ่มต้นเวอร์ชันการทำงานพร้อมใช้งานในแต่ละขั้นตอนหลังจากที่ได้รับมอบหมายมอบให้เพื่อป้องกันไม่ให้ผู้คนล้มเหลว แต่ละขั้นตอนของกระบวนการควรแนะนำสิ่งใหม่ ๆ ฉันจะให้คุณว่านี่อาจจะง่ายกว่าที่จะทำในคลาสการออกแบบมากกว่าคลาสการเขียนโปรแกรม แต่ควรจะทำได้ สิ่งหนึ่งที่ดีเกี่ยวกับเรื่องนี้คือคุณให้การดำเนินการที่ดี (หวังว่า) กับพวกเขาอย่างชัดเจนเพื่อเปรียบเทียบกับพวกเขาในแต่ละขั้นตอน เปิดเผยการเปรียบเทียบนี้เป็นการกำหนดเช่นทำการตรวจทานโค้ดขนาดเล็กของโค้ดของตนเองเทียบกับความพยายาม คุณอาจต้องการเลือกตัวเลือกเครดิตเพิ่มเติมนี้

แม้ว่าโดยทั่วไปแล้วฉันจะไม่ใหญ่ใน "ความคิดเห็น" คุณอาจต้องการจัดทำเอกสารของรหัสหนึ่งในรายการเกรด ให้พวกเขาจัดทำเอกสาร "ทฤษฎีการปฏิบัติงาน" สำหรับแต่ละโครงการที่อธิบายวิธีการของพวกเขาแต่ละองค์ประกอบประกอบกันอย่างไรและพวกเขาร่วมกันแก้ปัญหาอย่างไร โดยปกติฉันต้องการให้โค้ดทำสิ่งนี้ด้วยตัวของมันเอง แต่มันจะช่วยให้พวกเขาใส่แคปคิดของพวกเขาและวางมันลงบนกระดาษ

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


3

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


ฉันแนะนำให้พวกเขาทำเช่นนี้ แต่ฉันเดาว่าบางอย่างมันช้าเกินไปและเกิดข้อผิดพลาดได้ง่ายพวกเขาตัดสินใจข้ามมัน
Aivar

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

3

ฉันสอนการเขียนโปรแกรมเบื้องต้นในระดับวิทยาลัย มันเป็นหลักสูตรขนมปังและเนยคณะทั้งหมดทำมันและฉันคิดว่าเราทำได้ค่อนข้างดี เราติดตามข้อความทั่วไปและมีการสอบทั่วไป แต่เราแต่ละคนมีวิธีการสอนในห้องเรียนที่ใช้งานได้ มันเป็นเวลานานมากแล้ว แต่ในบางครั้งฉันก็ได้รับการติวเด็ก ๆ ในการเขียนโปรแกรมและภาพรวมก็เหมือนกัน

วิธีที่ฉันทำก็คือเริ่มต้นที่ก้นคอนกรีตให้ได้มากที่สุด สิ่งที่นักเรียนรู้คือโครงสร้าง พวกเขามีแนวคิดมากมายอยู่แล้ว ฉันกำลังสร้างแนวคิดเพิ่มเติมเกี่ยวกับสิ่งเหล่านี้และฉันตัดทอนแนวคิดที่อาจก่อให้เกิดการต่อต้าน ในเวลาเดียวกันก็ทำให้พวกเขาได้เรียนรู้โดยการทำ

ฉันสร้างคอมพิวเตอร์เล็ก ๆ ด้วยชิป Intel 8008, EPROM บางตัวและวงจรไม่กี่ตัว ฉันตั้งโปรแกรมให้เล่นเพลงคู่น้อยเมื่อชิป I / O เชื่อมต่อกับลำโพงคู่ ฉันจะอธิบายวิธีการทำงานของโปรแกรมเล็ก ๆ น้อย ๆ กับวงในเพื่อนับตัวนับ ที่จะทำหน้าที่ล่าช้า จากนั้นมันจะสลับบิตเอาต์พุตและทำอีกครั้ง มันจะทำเช่นนั้นชั่วครู่หนึ่งแล้วสลับไปยังการหน่วงเวลาอื่นให้อีกระยะห่างและอื่น ๆ ชิปหน่วยความจำมีการจับเวลาเล็ก ๆ น้อย ๆ และถ้าผมซุกนำตัวเก็บประจุภายใต้หนึ่งของปัจจัยการผลิตจับเวลาโปรแกรมจะทำงานVeeeeery ช้า ชั้นเรียนได้ยินเสียงลำโพงกำลังคลิกคลิกคลิกใช่ ... ฉันต้องการให้ชั้นเรียนเข้าใจว่าคอมพิวเตอร์กำลังทำสิ่งที่ง่ายมากทีละขั้นตอน. จากนั้นฉันก็จะปลดตะขอตัวเก็บประจุออกและ "เพลง" ก็จะแตกออกมา (เสียงปรบมือ)

จากนั้นฉันสร้างเครื่องจำลองสำหรับคอมพิวเตอร์ทศนิยมที่ง่ายมากมีหน่วยความจำ 1,000 ตำแหน่งแต่ละแห่งมีเลขทศนิยม 4 หลักที่ลงชื่อ มันมี opcodes ง่าย ๆ อย่าง "add to accumulator", "jump if negative" และอื่น ๆ ฉันจะให้พวกเขาเขียนโปรแกรมเล็ก ๆ ใน "ภาษาเครื่อง" นี้เช่นเพิ่มตัวเลขสองตัวหรือเพิ่มรายการของตัวเลข จากนั้นพวกเขาสามารถดูได้ด้วยการกดปุ่มเดียวหรือกดปุ่ม Enter ค้างไว้เพื่อดูว่า "เร็ว"

ประเด็นนี้คือการวางแนวคิดที่ว่าคอมพิวเตอร์สามารถดำเนินการขั้นพื้นฐานที่แตกต่างกันจำนวนน้อยมากเท่านั้นและพวกเขาทำสิ่งเหล่านี้ทีละครั้ง นี่คือการต่อต้านการแสดงผลที่พวกเขามีคอมพิวเตอร์ที่ซับซ้อนและพวกเขาทำทุกอย่างในเวลาเดียวกันและอ่านความคิดของคุณในการต่อรอง

จากนั้นเราไปที่การเขียนโปรแกรมในภาษา "ของจริง" (BASIC :) เริ่มต้นด้วยโปรแกรมที่เรียบง่าย แต่น่าสนใจทำงานผ่านเงื่อนไขเงื่อนไขลูปอาร์เรย์อาร์เรย์ไฟล์การรวมและอื่น ๆ เป้าหมายคือการวางทักษะที่เพียงพอเพื่อให้พวกเขาสามารถทำโครงการที่ตนเองเลือกเพราะนั่นเป็นสิ่งเดียวที่ทำให้การเขียนโปรแกรมน่าสนใจ - การใช้งานที่คุณสามารถทำได้ ฉันจะทิ้งความคิดบางอย่างสำหรับโครงการแล้วพวกเขาก็จะเอามันไปจากที่นั่น ฉันจะขอแนวคิดที่เป็นลายลักษณ์อักษรจากนั้นรายงานความคืบหน้าเพื่อป้องกันไม่ให้พวกเขาเลื่อนออกไปเป็นนาทีสุดท้ายจากนั้นก็ตื่นตระหนก ฉันคิดว่าโครงการเป็นส่วนที่ดีที่สุดเพราะพวกเขาเรียนรู้ภายใต้อำนาจของตัวเอง

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


3

saself - สอนโปรแกรมเมอร์ผมเชื่อว่าการเคลื่อนไหวจะเป็นสิ่งที่ท้าทายมากที่สุดในแง่ของการรู้ว่ารหัสจะทำ เมื่อโปรแกรมมีอัลกอริทึมและการแปลงทางคณิตศาสตร์ที่ดำเนินการบิดเบือนนามธรรมวิธีเดียวที่จะเข้าใจว่าคณิตศาสตร์ทำอะไร ณ จุดใดก็ตาม (เว้นแต่คุณเป็นอัจฉริยะ) ต้องเข้าใจการประมวลผลของโค้ดเอง

แก้ไขฉันหากความคิดที่ไร้เดียงสาของฉันไม่ถูกต้อง สิ่งที่คุณต้องการทำคือnotป้องกันนักเรียนของคุณจากการใช้ "รูปแบบการออกแบบ" แต่เพื่อหาวิธีที่จะทำให้แน่ใจว่าพวกเขาเข้าใจสิ่งที่พวกเขาเป็น CnP จากนั้นท้าทายนักเรียนของคุณให้จัดการภาพเคลื่อนไหว เพื่อปรับแต่งเอาต์พุตในแอนิเมชั่นมันจำเป็นต้องเข้าใจสิ่งที่เกิดขึ้นในแต่ละขั้นตอน สำหรับความกังวลที่คุณระบุไว้ฉันจินตนาการว่าโครงการแอนิเมชั่นที่เข้าใจได้ดีจะแสดงออกมาในรูปแบบที่ชัดเจนเมื่อนักเรียน "เข้าใจ" - เมื่อพวกเขาตระหนักถึงการเปลี่ยนแปลงที่คุณไม่ได้คาดหวังหรือปรับแต่งตัวแปรที่เกี่ยวข้อง

ฉันไม่สามารถพูดได้ว่าอนิเมชั่นเป็นคำตอบที่สมบูรณ์ หลักสูตรอนิเมชั่นที่นอกเหนือจากอาชีพอนิเมชั่นคือฉันควรที่จะเดาจากคำถาม บางโครงการอาจไม่มีผลลัพธ์ที่น้อยลงในสิ่งที่เก่งและยอดเยี่ยมซึ่งก็ไม่เลว

ในบันทึกอื่นฉันอ่านบทความหนังสือพิมพ์ (ใช่กระดาษ!) เกี่ยวกับการแข่งขันกีฬาโอลิมปิกระดับสูงการเข้ารหัสระดับมัธยมปลาย- การแข่งขันสำหรับนักเขียนโปรแกรมระดับวิทยาลัย คำอธิบายของความท้าทายของพวกเขาคือเสียงที่ชัดเจนที่สุดของการเข้ารหัสที่บริสุทธิ์ที่ฉันจำได้เมื่ออ่าน คู่แข่งถูกตัดสินซึ่งกันและกันและตามมาตรฐานการปฏิบัติที่ดี สำหรับการแข่งขันเหล่านี้นักเรียนจะต้องวางแผนแก้ปัญหาและเขียนโค้ดด้วยมือว่า "รูปแบบการออกแบบ" ที่เป็นองค์ประกอบซึ่งปัญหาต้องการให้เสร็จภายในเวลาที่กำหนด ดังนั้นวิธีแก้ปัญหาข้อกังวลของคุณเกี่ยวกับการเขียนโปรแกรม CnP คือการทดสอบว่านักเรียนสามารถเขียน "โค้ดชิ้นเดียว" ที่พวกเขาเป็น CnP'n!

ฉันแน่ใจว่าเป็นใน NY Times การค้นหาอย่างรวดเร็วไม่พบ ตัวอย่างที่คล้ายกันคือการประกวดการเขียนโปรแกรม International Collegiate Programming ของ ACM การประกวดครั้งนี้เน้นการเขียนโปรแกรมที่รวดเร็ว: "การเขียนโปรแกรม Lightning-quick ในการแข่งขันแบบทีมเป็นทักษะที่แปลกประหลาดอย่างแท้จริง ดังนั้นฉันอยากจะแนะนำสิ่งที่เป็นนามธรรมจากปัญหาในโลกแห่งความจริงคือคำตอบ

นอกจากนี้

HP Code Wars


2

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


1
ฉันไม่กังวลเกี่ยวกับพวกเขาที่จะคัดลอกงานของคนอื่น แต่งานของพวกเขาเองหรือตัวอย่างบางส่วนซึ่งไม่สามารถใช้ได้ในสถานการณ์ที่กำหนด
Aivar

2

คุณสามารถปฏิบัติต่อพวกเขาอย่างหนักหน่วง

ค้นหาวิธีการทำสำเนาวางที่เป็นอันตรายต่อพวกเขา ฉันไม่มีตัวอย่างที่ชัดเจน แต่ถ้าคุณสร้างแบบฝึกหัดแรกที่มีวิธีแก้ปัญหาหากวางในแบบฝึกหัดที่สองที่คล้ายกันให้พานักเรียนลัทธิคาร์โก้มาด้วยข้อผิดพลาด ในขณะเดียวกันความคิด 2 ล้านที่ไม่ใช่ "การขนส่งสินค้าทางศาสนา" จะนำวิธีการแก้ปัญหาที่ชัดเจนมาสู่นักเรียนที่แย่ที่สุด จากนั้นอาจมีความเป็นไปได้ที่พวกเขาจะสามารถเรียนรู้บทเรียนและคิดสองครั้งก่อนที่จะคัดลอกรหัสลงในแบบฝึกหัดที่สาม


1

ฉันสงสัยว่าพฤติกรรมนี้เป็นเพราะความเชื่อที่ว่าโปรแกรมเป็นเวทย์มนตร์ - มีแนวโน้มที่จะเป็นคนเกียจคร้านและขาดแรงจูงใจ

ดังนั้นฉันคิดว่างานของคุณในฐานะครูคือการกระตุ้นนักเรียนของคุณ - ไม่มีนักเรียนที่มีแรงบันดาลใจอย่างแท้จริงจะตัดและวางวิธีแก้ปัญหา (นั่นเป็นเพียงสำหรับโปรแกรมเมอร์ที่ทำงานด้วยกำหนดเวลาและบรรทัดล่างเพื่อตอบสนอง ... )


สำหรับนักเรียนบางคนความขี้เกียจและ / หรือกำหนดเวลาเป็นสาเหตุ แต่บางคนกำลังทำงานอย่างหนักจริงๆ ...
Aivar

@Aivar - ในฐานะผู้สอนคุณอาจมีความรู้มากขึ้นเกี่ยวกับจุดแข็งและจุดอ่อนของนักเรียน จากความอยากรู้คุณคิดว่าอะไรเป็นอุปสรรคต่อนักเรียนเหล่านั้นที่ "ทำงานหนัก"?
Leigh

@Leigh - ฉันคิดว่าพวกเขาไม่ได้ฝึกฝนส่วนวิเคราะห์ของสมองของพวกเขาเพียงพอและพวกเขากำลังเข้าใกล้งานที่มอบหมายด้วยกำลังดุร้าย - วิธีการทำงานของพวกเขาอยู่ไม่ไกลจากการค้นหาที่ละเอียดถี่ถ้วน และการอธิบายวิธีการทางเลือกให้กับพวกเขานั้นเป็นเรื่องยาก
Aivar

@Aivar - บางทีควรมีการเน้นการวิเคราะห์ในระยะแรก ตัวอย่างเช่นการออกแบบการออกกำลังกายสองส่วน ส่วนแรกมุ่งเน้นไปที่หน่วยการสร้างของรหัส ในขณะที่ deconstructs ที่สอง debugs และวิเคราะห์ตัวอย่างเดียวกัน เช่นถามคำถาม "ทำไม" และกล่าวถึงวิธีการปรับปรุงรหัสที่มีความสัมพันธ์ในโลกแห่งความจริงกับวิธีการที่แตกต่างกัน (กำลังดุร้าย ฯลฯ .. ) ทำเร็วและบ่อยครั้งที่จะช่วยเสริมความรู้และสนับสนุนให้พวกเขาดูการเขียนโปรแกรมมากกว่าสร้างไวยากรณ์ที่ถูกต้องในภาษาใดภาษาหนึ่ง
Leigh

1

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


มันไม่ได้แก้ปัญหาจริงๆ
Pubby

ฉันคิดว่ามันทำ Cargo ลัทธิคือการรวมของรหัสที่ไม่ได้มีวัตถุประสงค์ หากพวกเขาแบ่งรหัสของพวกเขาออกเป็นรูทีนย่อยและบันทึกสิ่งที่รูทีนย่อยเหล่านั้นควรทำ การวิเคราะห์เป็นส่วนสำคัญของการเรียนรู้และการวิเคราะห์จำเป็นต้องแบ่งสิ่งต่าง ๆ ออกเป็นส่วน ๆ
Tony Topper

1

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


1

อย่าให้การมอบหมายที่ฟังดูคล้ายกัน

หรือยิ่งเรียนรู้เรื่อง TDD ตั้งแต่ต้น มันผลักดันการเขียน (ไม่ใช่การคัดลอกการเขียน) โค้ดจำนวนมาก (เช่นการทดสอบ) ที่จริงแล้วช่วยในการกำหนดปัญหาที่จะแก้ไข


การทดสอบการเขียนมักจะยากกว่าการเขียนโค้ดตั้งแต่แรก ฉันขอแนะนำว่าบางทีครูอาจจะเขียนแบบทดสอบจากนั้นให้นักเรียนทำงานกับงานที่มอบหมาย
TMN

@TMN: นั่นอาจย้อนกลับมา นักเรียนจะได้รับการสนับสนุนโดยปริยายให้เปลี่ยนรหัสแบบสุ่มจนกว่าการทดสอบจะผ่าน
Goran Jovic

@GoranJovic: ไม่แน่ใจว่าฉันเห็นด้วยกับ "ได้รับการสนับสนุนโดยปริยาย" แต่ฉันจำได้ว่าไม่มีวิธีง่ายๆในการแยกแยะระหว่างโค้ดที่เขียนด้วยเจตนาและโค้ดที่แฮ็คเข้าด้วยกันเพื่อผ่านการทดสอบ แน่นอนว่าปัญหานี้ไม่ได้ จำกัด อยู่ที่สถาบันการศึกษาอย่างใดอย่างหนึ่ง ... ;)
TMN

@TMN: และขั้นตอน "ขั้นตอนเดียว (ง่ายอย่างที่ผู้พัฒนาต้องการ)" จะหายไป
herby

วิธีแก้ปัญหา: เตรียมชุดการทดสอบขั้นต่ำที่นักเรียนสามารถใช้ในขณะที่เขียนโปรแกรม แต่เตือนพวกเขาว่าโปรแกรมของพวกเขาจะถูกให้คะแนนกับชุดการทดสอบที่ครอบคลุมมากขึ้นและจะทดสอบกับการทดสอบที่นักเรียนเขียน
Barry Brown

1

สิ่งที่ฉันพบว่ามีประโยชน์มากสำหรับคนในชั้นเรียนของฉันคือการเขียนโครงการเล็ก ๆ เกี่ยวกับพวกเขาในเรื่องที่พวกเขาสามารถเลือกได้เอง

เมื่อฉันเริ่มเขียนโปรแกรมมันก็ยากสำหรับฉันเช่นกันและฉันก็คัดลอกจำนวนมากในชั้นเรียน จากนั้นที่บ้านฉันเริ่มทำเกมเล็ก ๆ น้อย ๆ เนื่องจากฉันต้องการเป็นโปรแกรมเมอร์เกมและฉันพบว่าพวกเขาทำง่ายขึ้นมาก แม้ว่าพวกเขาจะยากขึ้นมากแล้วสิ่งที่เราเห็นในชั้นเรียน เพียงเพราะมันสนใจฉัน

มีคนอื่นในชั้นเรียนของฉันเพิ่มขึ้นจากการสอบ 40-50% เป็น 90-100% เพราะพวกเขาทำสิ่งเดียวกัน


1

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

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