การติวหนังสือนักเรียนที่กำลังดิ้นรนกับพื้นฐานใน C ++ [ปิด]


26

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

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

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


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

1
ทำไม่ได้? จากประสบการณ์ของฉันมีคนพอที่เขียนโปรแกรมและไม่ควร ...

คำตอบ:


42

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

  • ลักษณะตามลำดับของภาษาที่จำเป็น ผู้คนมีปัญหาในการเข้าใจว่ามีการใช้งานฟังก์ชั่นตามลำดับทีละรายการเช่นสูตร วิธีหนึ่งในการเอาชนะสิ่งนี้คือการแสดงรหัสบางอย่างที่ทำงานผ่านดีบักเกอร์
  • ผู้ดำเนินการที่ได้รับมอบหมาย ( =) ในภาษารูปแบบ C มีความเข้าใจผิดอย่างมาก คุณจะต้องอธิบายอย่างระมัดระวังว่าa = 5หมายถึง "กำหนด 5 ตัวแปรa, ไม่ 'เป็นเท่ากับ 5'
  • สำหรับผู้เริ่มต้นมันปลอดภัยที่จะอธิบายฟังก์ชั่นเป็นบล็อคของโค้ดที่ฟังก์ชั่นอื่น ๆ สามารถข้ามไปได้ นอกจากนี้ผู้เริ่มต้นมีปัญหาในการทำความเข้าใจว่าใน C ++ ฟังก์ชันอาร์กิวเมนต์จะถูกระบุตามคำสั่งไม่ใช่ตามชื่อ
  • ภาษาโปรแกรมที่มีความจำเป็นส่วนใหญ่มีส่วนประกอบที่เปิดเผยและส่วนประกอบของโพรซีเดอร์บางส่วนและ C ++ นั้นไม่มีข้อยกเว้น ตรวจสอบให้แน่ใจว่านักเรียนเข้าใจว่าบางส่วนของรหัสอธิบายโครงสร้างของโปรแกรมและส่วนอื่น ๆ (ฟังก์ชั่น) อธิบายสิ่งที่โปรแกรมควรทำ
  • การเริ่มโปรแกรมด้วยเครื่องมือดีบั๊กเป็นเครื่องมือการสอนที่สำคัญและไม่ได้รับการเอาใจใส่ก้าวผ่านโปรแกรมที่มีการดีบักเกอร์เป็นเครื่องมือการเรียนการสอนที่สำคัญมากและมักจะถูกละเลย
  • นิพจน์ที่มีประเภท 3+3เป็นจำนวนเต็ม3.5 + 3เป็นคู่"3" + "3"(ใน C #) คือสตริงx == 5 * 3 + 25เป็นบูลีน (หรือจำนวนเต็มใน C ++) ใช้เวลามากมายเพื่อให้แน่ใจว่านักเรียนนั้นสมบูรณ์ความสะดวกสบายกับความคิดนี้
  • ขอบเขตตัวแปรเป็นสิ่งที่ผู้เริ่มต้นสับสนตลอดเวลา อธิบายให้นักเรียนฟังว่าขอบเขตทำงานอย่างไรและตรวจสอบให้แน่ใจว่าพวกเขารู้ว่าxขอบเขตที่กำหนดไว้ในขอบเขตหนึ่งนั้นแตกต่างจากที่xกำหนดไว้ในขอบเขตอื่น
  • ทุกตัวแปรมีการอ้างอิงอย่างน้อยสามครั้งในช่วงอายุการใช้งาน: การประกาศการมอบหมาย (มักทำในบรรทัดเดียวกันกับการประกาศ) การบริโภค หากสิ่งเหล่านี้หายไปแสดงว่ามีความผิดพลาดทางแนวคิด ด้วยเหตุผลเดียวกันหากคุณกำลังวิเคราะห์โปรแกรมที่ทำงานอยู่คุณสามารถมองหาสามสิ่งนี้ในรหัสเพื่อหาจุดประสงค์ของตัวแปร
  • forไม่ควรสอนลูปจนกว่าตัวอย่างของการทำซ้ำโดยใช้whileลูปจะได้รับ ไวยากรณ์ชวเลขมีความสับสนและทำให้นักเรียนสงสัยว่าทำไมพวกเขาไม่สามารถใช้whileลูปได้ การมีชีตชีตที่อธิบายถึงforลูปในแง่ของการwhileวนซ้ำนั้นมีประโยชน์
  • อาเรย์และพอยน์เตอร์นั้นค่อนข้างง่ายต่อการสอน แต่เป็นฝันร้ายที่ต้องเรียนรู้ กล่าวอีกนัยหนึ่งจนกระทั่งมันคลิกการฝึกฝนก็มีความสำคัญ
  • แนวคิดที่ว่าโค้ดคือข้อความและโปรแกรมที่คอมไพล์แล้วจริงๆแล้วไฟล์นั้นยากที่จะเข้าใจ อย่าลืมแสดงไฟล์. cpp, .h และไบนารีในเชลล์

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


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

2
+1 สำหรับการก้าวไปพร้อมกับดีบักเกอร์เพื่อให้พวกเขาเข้าใจถึงความแตกต่างระหว่างตัวโปรแกรมเองกับการทำงานของมัน
Mike Dunlavey

4
@leftaroundabout คุณจะประหลาดใจ คณิตศาสตร์เป็นสิ่งที่เปิดเผยส่วนใหญ่ดังนั้นภาษาที่มีความจำเป็นสามารถทำให้ใครก็ตามที่เรียนรู้พีชคณิต
Rei Miyasaka

2
คำตอบนี้ดูเหมือนจะเป็นเพียงแค่ "กำจัดแนวคิด" แนวความคิดนั้นถูกต้องอย่างแน่นอนและมีความสำคัญอย่างแน่นอน แต่การสอนด้วยวิธีนี้เป็นเหมือนการพยายามสอนให้คนรู้จักวิธีการขับรถด้วยการขับไล่กฎของถนน
riwalk

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

19

คุณเคยสอนการเขียนโปรแกรมมาก่อนหรือไม่

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

สิ่งที่ดูเหมือนง่ายๆสำหรับฉันก็ไม่ง่ายเลยสำหรับผู้เริ่มต้น

ไม่ว่าจะใช้ภาษาใดคุณจำเป็นต้องวางกรอบความคิดไว้ในใจ - สิ่งที่ชัดเจนมากจนคุณไม่รู้ตัวเลยว่าคุณรู้จักพวกเขาเช่น:

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

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

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

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

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

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

หวังว่าจะช่วย


ฉันชอบความคิดคอมพิวเตอร์จำลอง คุณมีภาษาทางการหรือคุณเพียงแค่พูดคุยแนวคิดใน pseudocode / ภาษาอังกฤษธรรมดา?
Rei Miyasaka

@Rei: ฉันเขียน (ใน BASIC) โปรแกรมจำลองชื่อ Simple มันเป็นอินเตอร์เฟสคีย์บอร์ดทั้งหมด ผู้ใช้สามารถป้อนค่าลงใน "หน่วยความจำ"; จากนั้นพวกเขาสามารถขั้นตอนเดียวและตรวจสอบการสะสมและหน่วยความจำในแต่ละจุดถ้าพวกเขาต้องการ ฉันคิดว่าสิ่งนี้สำคัญมากเพราะทำให้พวกเขาทำมันไม่ใช่แค่พูดถึงมัน
Mike Dunlavey

อ่าโอเค ขอบคุณฉันควรลองทำสิ่งนี้
Rei Miyasaka

นี่ควรเป็นคำตอบ # 1 ในความคิดของฉัน
riwalk

12

ในความคิดของฉัน C ++ เป็น overkill เป็นภาษาแรก

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

เมื่อแนวคิดชัดเจนเช่นเมื่อพวกเขาพอใจกับโครงสร้างข้อมูลพื้นฐานทางอ้อมอัลกอริธึมพื้นฐาน ฯลฯ ฉันจะแนะนำ C ++ อย่างช้า ๆ และพวกเขาจะสามารถเชื่อมโยงกับสิ่งที่พวกเขาได้เรียนรู้ไปแล้วอย่างรวดเร็ว


2
ฉันเห็นด้วย แต่ผู้เชี่ยวชาญมักไม่มีสิทธิ์เลือกภาษาที่จะสอน
Rei Miyasaka

4
ฉันไม่เห็นด้วยกับ Python ฉันผ่านชั้นเรียน CS 101 ครั้งแรกของฉันบน C ++ จากนั้นเปลี่ยนเป็นโรงเรียนที่สอน CS 101 ใน Python นักเรียน Python สับสนมากแม้กระทั่งพื้นฐานเมื่อเราเรียนวิชา CS 201 เดียวกัน ... แต่นักเรียน C ++ ทุกคนเก่ง
OghmaOsiris

@OghmaOsiris ตรงไปตรงมาฉันไม่รู้เกี่ยวกับ Python มากพอ แต่อาจเป็นสิ่งที่คุณเห็นอาจเป็นการแสดงออกถึงอคติการเลือกตนเอง ท้ายที่สุด C ++ เป็นนรกที่น่ากลัวสำหรับนักเรียนบางคน (โดยเฉพาะอย่างยิ่งสำหรับนักเรียนที่ไม่มีประสบการณ์มากที่สุดในการเขียนโปรแกรม)
Stephan Branczyk

@Oghma คลาส 201 คืออะไร? ถ้ามันเป็นอะไรที่ต่ำระดับก็น่าจะเป็นสาขาของตัวเองที่มี C เป็นสิ่งที่จำเป็นต้องมี
Rei Miyasaka

1
@OghmaOsiris: อืมฉันต้องไม่เห็นด้วยไม่เห็นด้วยแบ่งปันประสบการณ์ที่แตกต่างกันในการเปลี่ยนไปใช้ python เป็นมหาวิทยาลัยที่ใช้ภาษาแรกได้พิสูจน์แล้วว่ามีประโยชน์มากเท่าที่ฉันรู้ (อันแรกคือ Java no C ++) ฉันไม่คิดว่าประสบการณ์ของแต่ละคนจะนับว่าเป็นคนที่ดีกว่าอีกคนนั่นคือสงครามเปลวไฟที่ไม่มีวันจบสิ้น ฉันอาจโต้แย้งว่า Python อาจเป็นภาษาการเขียนโปรแกรมที่ยอดเยี่ยมที่จะเริ่มต้นด้วยเพราะมันไม่ได้มาในแบบของคุณมันจริง ๆ แล้วมันจะดีกว่าที่ภาษาโปรแกรมส่วนใหญ่ที่ได้รับนักเรียนจำนวนมาก ....
Trufa

4

นี่คือสิ่งที่ฉันจะแนะนำ:

  1. ให้รายละเอียดทั้งหมดแก่พวกเขาที่พวกเขาต้องการ
  2. กระตุ้นให้พวกเขาพยายามทำความเข้าใจรายละเอียด
  3. ตรวจสอบให้แน่ใจว่ามีรายละเอียดเก็บไว้ในรูปแบบกะทัดรัดทุกครั้งที่ต้องการ

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


3

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

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


3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


2

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

เมื่อฉันเรียนรู้ "ปาสกาล" ในชั้นเรียนอินโทร CS-College ของฉันเราใช้เวลา 3 สัปดาห์แรกในการทำงานกับ " Karel the robot " นี่คือสภาพแวดล้อมการเขียนโปรแกรมแบบโลโก้เหมือน sandbox ที่เรียบง่ายซึ่งแนวคิดพื้นฐานทั้งหมด (รวมถึงการเรียกซ้ำ) ถูกสำรวจอย่างละเอียดก่อนที่จะทำใน Pascal ใน "Karel the robot" คุณสามารถควบคุมหุ่นยนต์ในพื้นที่ 2 มิติโดยใช้ชุดคำสั่งง่ายๆ สิ่งนี้จะช่วยให้นักเรียนมีพื้นดินที่เป็นรูปธรรมที่มีประโยชน์ซึ่งพวกเขาสามารถใช้ในสิ่งที่เกิดขึ้นต่อไป

บางทีตอนนี้มีภาษาการเขียนโปรแกรมการสอนที่ทันสมัยกว่าที่เติมเต็มบทบาทของ "Karel the Robot" หรือไม่? อาจจะสายเกินไปสำหรับนักเรียนของคุณตอนนี้อย่างไรก็ตาม


เรามีโปรแกรมที่คล้ายกันที่เรียกว่าอลิซ
OghmaOsiris

นี่คืออลิซ: " en.wikipedia.org/wiki/Alice_(software) "
OghmaOsiris

@OghmaOsiris ลิงก์ Alice เสีย เพิ่มส่วนท้าย "เข้าไปใน url แล้ว
Zoot

ใช่ไม่สิ้นสุด ')' ถูกตัดออกไป
OghmaOsiris

ลองen.wikipedia.org/wiki/Alice_(software%29การสนทนาเมตาที่เกี่ยวข้อง: meta.stackexchange.com/questions/25706/…
Zoot

2

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

0- ให้ปัญหาง่ายๆแก่พวกเขา (พูดประเมินนิพจน์)

1- ให้พวกเขามีเวลาคิดออก

2 - ให้คำตอบ

3 ผ่านบรรทัดคำตอบทีละบรรทัด

4 - ขอให้พวกเขาเปรียบเทียบคำตอบของคุณกับ attmpt ของพวกเขา

5- ขอให้พวกเขาได้รับบทเรียนจากปัญหานี้

เพิ่มอีก 6 ขั้นตอนในการแก้ไขปัญหาเดียวกันพูดเงื่อนไขที่ต้องใช้คำสั่ง IF

ทำซ้ำภารกิจข้างต้นในหลาย ๆ ปัญหา จากนั้นพวกเขาจะเข้าใจพื้นฐานของภาษาและวิธีการใช้สิ่งแวดล้อม จะพร้อมสำหรับสิ่งที่มาต่อไป

นอกจากนี้

- มีปัญหาง่ายๆสำหรับพวกเขาที่จะลองทำที่บ้านทุก ๆ 2 คลาสหรือมากกว่านั้น

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

- ให้วัสดุอ้างอิงที่ง่ายลืมหัวข้อที่ซับซ้อนและหนังสือที่ซับซ้อน

- รับข้อเสนอแนะของพวกเขาบ่อยครั้งและใช้มัน

- ขอให้พวกเขาเตรียมตัวสำหรับหัวข้อถัดไปก่อนมาชั้นเรียน


2

สิ่งที่ช่วยฉันได้เมื่อฉันผ่าน CS 101 คือการเรียนรู้ตรรกะก่อนที่จะดูรหัส เราผ่านตารางความจริงและแคลคูลัสบุพบทเพื่อที่เราจะเริ่มคิดว่า "นี่เป็นจริงหรือเท็จ" และไม่ใช่ "นี่เท่ากับหรือนี่"

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

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


2

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

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

แทนที่จะปล่อยให้นักเรียนพัฒนาวิธีปฏิบัติที่ไม่ดีพวกเขาจะอยู่ในตา (ฉันจะพลิก # 1 ด้วย # 2 ที่นี่และให้นักเรียนดูผู้สอน / TA FIRST )

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

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

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

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

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

สุดท้ายปุ่มลัดและเทคนิคการแก้ไขที่นักพัฒนามืออาชีพใช้ไม่ได้ "รบกวน" ต่อการเรียนรู้ของนักเรียน สิ่งสำคัญที่สุดคือพวกเขามีส่วนร่วมและความสนใจของนักเรียน ประการที่สองพวกเขาสร้างความตระหนักต่อความต้องการการพัฒนาร่วมกัน นอกจากนี้พื้นฐานที่สุดของการปฏิบัติเหล่านี้มักจะง่ายต่อการดำเนินการ แต่ไม่ชัดเจนในตอนแรก นักเรียนร้านขายไม้เล็กสามารถเรียนรู้วิธีถอดเล็บด้วยกรงเล็บของค้อนได้อย่างง่ายดาย แต่ในกรณีส่วนใหญ่ต้องบอกก่อนว่านั่นเป็นสิ่งที่กรงเล็บทำ บางสิ่งที่ง่ายที่สุดในการทำสิ่งต่าง ๆ ไม่ใช่เรื่องง่ายที่จะเรียนรู้โดยไม่ได้รับการสอน แม้แต่นักพัฒนามืออาชีพก็ยังลืม "เล่ห์เหลี่ยม" เหล่านี้ตลอดเวลาและได้รับประโยชน์จากเครื่องมือการรีแฟคเตอร์เช่น resharper เพื่อลบรหัสที่ซ้ำซ้อนหรือไม่ได้อ่าน ฯลฯ


1
btw หากมีคนสามารถชี้ให้ฉันไปที่ชื่อของบทความที่ฉันจะขอบคุณมัน!
David

2

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

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


2

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

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


0

คุณบอกว่า "นักเรียนเหล่านี้อาจรู้วิธีการเรียนรู้คณิตศาสตร์ชีววิทยาหรือฟิสิกส์ แต่เทคนิคเหล่านั้นไม่ทำงานเมื่อมาเขียนโปรแกรม"

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

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

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

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

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