การสอน C ++ ให้กับนักเรียนมัธยมปลายเป็นครั้งแรก: จะวาดเส้นตรงได้อย่างไร


35

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

ฉันต้องการสอนพวกเขาอย่างถูกต้อง C ++ (เช่นหลีกเลี่ยงการใช้ภาษา C / C ++ แบบผสมเช่น C +) แต่ฉันไม่ต้องการทำให้พวกมันกลัวด้วยความซับซ้อนที่ไม่จำเป็น สำหรับเรื่องที่:

  • ฉันควรเริ่มใช้ STL ตั้งแต่วันแรกหรือไม่ vectorหรือเพียงแค่ติดกับอาร์เรย์มาตรฐาน? อาร์เรย์นั้นง่ายต่อการแนะนำ แต่ข้อผิดพลาดของตัวชี้อาจยากต่อการจับ
  • สำหรับ I / O ฉันควรยึดติดcoutฯลฯ หรือคุณคิดว่าprintfจะเรียนรู้ได้ง่ายขึ้น?
  • มีแหล่งข้อมูลออนไลน์สำหรับ C ++ ที่เหมาะสมที่จะใช้สำหรับผู้เรียนอายุน้อยหรือไม่?

ขอบคุณ!

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


52
โอ้พระเจ้าโปรดอย่าสอน javascript เป็นภาษาแรก!
SoapBox

26
@Sapap: ตรงข้ามกับอะไร ฉันคิดว่า Javascript ยอดเยี่ยมเป็นภาษาแรก คุณสามารถทำสิ่งที่น่าสนใจด้วยโค้ดไม่กี่บรรทัดไม่มีการเริ่มต้นโอเวอร์เฮดการเรียนรู้คอมไพเลอร์และ IDEs ฯลฯ มันง่ายต่อการทดสอบและตรวจแก้จุดบกพร่องและสนับสนุนทั้ง OO และการเขียนโปรแกรมการทำงาน อะไรจะดีไปกว่านี้?
kevin cline

7
ทำไมคุณถึงบอกว่าอาร์เรย์นั้นง่ายกว่าที่จะแนะนำ? ฉันคิดว่าเวกเตอร์นั้นง่ายกว่าสำหรับผู้มาใหม่เพราะคุณไม่ต้องคิดถึงพอยน์เตอร์หรืออะไรที่ซับซ้อนอย่างนั้น
Casey Patton

19
หากคุณกำลังสอน C ++ ให้กับนักเรียนมัธยมปลายคุณก็ผ่านพ้นเส้นนี้ไปแล้ว
tylerl

7
ทางเลือกในการสอน C ++ ไม่ใช่ภาษาโคบอล
jhocking

คำตอบ:


40

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

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

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

ผมไม่รู้สึกแบบเดียวกับที่และcout printfไม่เป็นระดับต่ำกว่าอื่นยกเว้นว่าcoutใช้ตัวดำเนินการมากไป

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

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

สำหรับหนังสือที่จะสอนผู้เริ่มต้นดูรายการหลักของหนังสือ C ++ ที่ดี


4
จริง ๆ แล้วฉันเป็นคนที่มีความคิดเห็นแบบเดียวกัน แต่ดูที่หนังสือการสอน C ++ ของStrousrup ( stroustrup.com/Programming ) และเขาสนับสนุนการใช้vectorอาร์เรย์อย่างชัดเจน ฉันฉีกขาด
recipriversexclusion

4
@recipriversexclusion: เพียงแค่ระบุชัดเจน แต่นาย Stroustrup คือไกลจากนักเรียนมัธยม;)
Demian เบรชต์

14
โอ้พระเจ้า. ทุกคนในโลกคิดอย่างไรว่าการจัดการอาร์เรย์ที่จัดสรรด้วยตนเองอาจเป็นเส้นทาง "ที่ง่ายที่สุด" แรกไปยัง C ++ เมื่อมีstd::stringและstd::vector?! การเขียนโปรแกรม 32 C นั้นเป็นไปได้หรือไม่ ฉันสอน C ++ มาเป็นสิบปีแล้วสำหรับการเขียนโปรแกรมเบื้องต้นให้กับนักเรียนที่มี Java เป็นเวลาหนึ่งปีและผู้เชี่ยวชาญด้านการเขียนโปรแกรม ฉันใช้std::stringและstd::vectorจากวันแรก พวกเขาใช้งานง่ายไม่ว่าสิ่งที่อวัยวะภายในของพวกเขา (คุณจะไม่ขี้อายกลับมาจากการเรียนการสอนสตริง VB เพราะมันซับซ้อนเกินไปในภายใน?)
เอสบีไอ

18
นี่คือ downvote ของคุณ คุณไม่ต้องเรียนรู้การสร้างบ้านเพื่อรับสิทธิประโยชน์ในการอยู่อาศัยในบ้าน คุณไม่จำเป็นต้องเขียนstd::vectorเพื่อให้สามารถใช้งานได้ และคลาสเป็นส่วนพื้นฐานอย่างยิ่งของ C ++ สิ่งที่ไม่ได้พื้นฐานคือการแก้ไขข้อผิดพลาดทั้งหมดที่พวกเขาจะได้รับโดยใช้อาร์เรย์และตัวชี้แบบเนทีฟ
DeadMG

6
@DeadMG: metaphore บ้านไม่ทำงาน ในบ้านเมื่อสร้างรากฐานแล้วคุณไม่ต้องคิดอีกเลย คุณเพิ่งจะสร้างทุกอย่างอีกแล้ว ใน C ++ ทันทีที่คุณเห็นnewคำหลักคุณจะย้อนกลับไปยังอาณาเขตการจัดการหน่วยความจำ และบ่อยครั้งที่ห้องสมุดขอตัวชี้และคุณต้องถามตัวเองว่า "นั่นจะเป็นกรรมสิทธิ์หรือไม่หรือฉันต้องล้างมันด้วย" วางรากฐานเท้าของฉัน เหมือนเล็บหรืออุดรูรั่วหรืออะไรซักอย่าง
Chris Eberle

38

นี่เป็นประสบการณ์ของฉันเอง รับสิ่งที่มันคุ้มค่า

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

บทที่ 1:
นี่คือหน่วยความจำ 10 ไบต์ นี่คือตัวอักษร "a" ที่ใส่ลงในเซลล์หมายเลข 3 "a" คือค่าและ 3 คือที่อยู่ ตกลง? นี่คือหมายเลข 3 ที่ใส่เข้าไปในเซลล์ 5 ค่าของมันคือ 3 และที่อยู่คือ 5 ทีนี้เลข 3 จะมีความหมายว่าอะไร? มันอาจเป็นแค่ตัวเลข 3 หรืออาจเป็นการอ้างอิงไปยังที่อยู่ 3 เช่นเดียวกับ 1 อาจเป็นตัวเลขหรืออาจเป็นรหัสประเทศ มันเป็นเพียงตัวเลขทุกอย่างขึ้นอยู่กับว่าเราปฏิบัติต่อมันอย่างไร

บทที่ 2:
เรียนรู้การนับเลขฐานสอง ลองนับถึง 10 โดยใช้การนับนิ้วแบบไบนารี ไม่น่าสนใจ มาดูกันว่าต้องการเพียง 4 นิ้วเท่านั้น? ดังนั้นเราบอกว่าต้องการเพียง 4 บิต (1/2 เซลล์) อะไรที่สูงที่สุดที่คุณสามารถนับได้ในมือข้างหนึ่ง (คำตอบคือ 31) ประมาณ 2 มือ (คำตอบคือ 1,023) อธิบายว่าบิตหมายถึงช่วงจำนวนที่มากขึ้นได้อย่างไร เตือนพวกเขาว่าเซลล์หน่วยความจำคือ 8 บิต ถามว่าเกิดอะไรขึ้นเมื่อตัวเลขต้องการมากกว่า 8 บิต พวกเขาจะใส่ตัวเลขหลายไบท์ลงในหน่วยความจำได้อย่างไร (ในทางตรรกะ)? แนะนำให้รู้จักกับ chars, กางเกงขาสั้น, จำนวนเต็มและ longs

บทที่ 3:
นี่คือโปรแกรมที่ฉันเขียนใน C ++ มันใช้จำนวนเต็ม 32 บิต และนี่ก็เป็นตัวเลขด้วย แต่นี่เป็นตัวเลขที่ใช้ในการชี้ การใช้เครื่องหมายดอกจันตัวน้อยนี้เรากำลังทำสัญญาว่าจะใช้ตัวเลขเพื่อชี้ และนี่คือวิธีที่เราชี้ไปที่หมายเลขแรก เครื่องหมายเล็ก ๆ น้อย ๆ เติมค่าในตัวเรา เรียบร้อยเหรอ

เป็นต้น เมื่อคุณได้รับหน่วยความจำขั้นพื้นฐานทุกอย่างอื่นเป็นเค้ก มันเป็นนักเรียนที่น่าสงสารที่คิดว่าคอมไพเลอร์กำลังทำสิ่งมหัศจรรย์ (หรือว่าพวกเขาไม่ต้องคิดเกี่ยวกับการจัดการหน่วยความจำ) ที่มักจะดิ้นรนมากที่สุด และ C ++ muddies น้ำเพราะบางสิ่งได้รับการทำความสะอาดโดยอัตโนมัติ (เช่นเวกเตอร์ปกติ) ในขณะที่สิ่งอื่น ๆ ไม่ได้ (เช่นเวกเตอร์ที่จัดสรรโดยใช้ "ใหม่") และอย่าแม้แต่จะให้ฉันเริ่มต้นกับสตริง (char * vs. std :: string - ลองอธิบายโดยไม่ใช้ตัวชี้)

ฉันไม่รู้ว่าแพลตฟอร์มการแข่งขันหุ่นยนต์ของคุณจะกำหนดเป้าหมายอย่างไร แต่ถ้าเป็นสภาพแวดล้อมที่ จำกัด หน่วยความจำทักษะการจัดการหน่วยความจำมีความสำคัญ

แก้ไข

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


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

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

+1 ฉันจำได้ว่าได้รวบรวมความเข้าใจเกี่ยวกับการทำงานของหน่วยความจำหลังจากที่ฉันได้รู้จักกับ C ++ ฉันไม่คิดว่าฉันจะเข้าใจมันได้ล่วงหน้า (ไม่ใช่ในทางปฏิบัติใด ๆ เช่นวิธีแสดงค่า)
คาเมรอน

+1 นี่คือสิ่งที่ฉันพยายามจะพูด แต่ดีกว่า เมื่อฝึกกลศาสตร์พวกเขาจะต้องเข้าใจเครื่องยนต์ก่อนที่จะทำให้พวกเขาเป็นผู้เชี่ยวชาญในการขับขี่
เซทคาร์เนกี้

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

31

ฉันควรเริ่มใช้ STL ตั้งแต่วันแรกหรือไม่ เวกเตอร์หรือเพียงแค่ติดกับอาร์เรย์มาตรฐาน? อาร์เรย์นั้นง่ายต่อการแนะนำ แต่ข้อผิดพลาดของตัวชี้อาจยากต่อการจับ

แน่นอนไปใช้ประเภทห้องสมุดมาตรฐาน a std::stringหรือstd::vectorเป็นสิ่งที่พวกเขาควรใช้บ่อย ๆ และ (การใช้งานส่วนใหญ่) ประเภทนี้มีรูปแบบของการตรวจจับข้อผิดพลาดและการจัดการข้อผิดพลาดในขณะที่สรุปความซับซ้อนมากมายจากนักเรียน

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

ไวยากรณ์ของstd::vector(สร้าง / อ่าน / เขียน) ไม่ซับซ้อนกว่าของอาร์เรย์ C ในการเปรียบเทียบการจัดการหน่วยความจำด้วยตนเองและข้อผิดพลาดทั่วไปที่ผู้เรียนใหม่ใช้กับอาร์เรย์ C นั้นยากต่อการเรียนรู้สอนและใช้งาน

สำหรับ I / O ฉันควรยึดติดกับคอร์ทเป็นต้นหรือคุณคิดว่า printf จะง่ายต่อการเรียนรู้หรือไม่?

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

ในความเป็นจริงฉันคิดว่าคุณควรอ่านAccelerated C ++ โดย Koenig และ Moo และอาจใช้เพื่อการเรียนการสอน (ตอบคำถาม 3 ทางอ้อม) ในหนังสือพวกเขาแนะนำstd::coutก่อนreturnหน้า (หน้า 3) และบันทึกพอยน์เตอร์และอาร์เรย์จนถึงบทที่ 10 ถ้าฉันสามารถคัดลอกและวางคำนำหน้าของหนังสือเล่มนั้นเป็นคำตอบสำหรับคำถามของคุณได้ (หมายเหตุ: ฉันแนะนำให้คุณอ่านเพื่อมุมมองของการสอน c ++)

แก้ไข นี่คือคำนำ

มีแหล่งข้อมูลออนไลน์สำหรับ C ++ ที่เหมาะสมที่จะใช้สำหรับผู้เรียนอายุน้อยหรือไม่?

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


1
1 ... และฉัน LOL'd อย่างหนักเกี่ยวกับ "พวกเขาแนะนำมาตรฐาน :: ศาลก่อนที่จะกลับมา (หน้า 3)" ต้องแอบมองเข้าไปในที่หนึ่ง :)
เฟลิกซ์ Dombek

1
@Felix และstd::coutแนะนำก่อนโดยตรงจะมีการแนะนำเครื่องมือจัดฟันแบบโค้ง =) (มันเป็นการแยกส่วนที่เรียบง่ายของ "Hello, World")
justin

1
ฉันขอแนะนำหนังสือของนิกและหมูอย่างจริงจัง มันเป็นเป้าหมายการสอนทั้ง C ++ และการเขียนโปรแกรม ความคิดของ Bruce Eckle ในภาษา C ++ นั้นมีจุดประสงค์หลักในการสอนภาษาซีพลัสพลัสแก่ผู้ที่เคยมีประสบการณ์มาก่อนด้วยภาษาขั้นตอน (เช่น C หรือพื้นฐาน)
สตีเฟ่นซี. เหล็ก

11

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

แต่สิ่งที่ไม่มีบทบาทอย่างมากและสามารถมากยากที่จะเข้าใจทุกคนในรูปแบบที่แตกต่างกันของการควบคุมที่ไปใน

ดังนั้นฉันจึงให้ความสำคัญกับการควบคุมเป็นอย่างมาก ifเริ่มต้นด้วยพื้นฐาน: for, while, ให้พวกเขาฝึกเหล่านั้นอย่างมาก ทำให้พวกเขารู้จักคนเหล่านั้นดี ....

... แต่แล้วมันก็ยากขึ้น รหัสหุ่นยนต์ขนาดปานกลางในที่สุดก็ได้รูปแบบการควบคุมที่ซับซ้อนกว่า:

  • วงใหญ่ "หลัก" ที่เรียกทุกอย่าง

  • เครื่องจักรของรัฐ (แสดงได้มาก)

  • การบันทึกค่าก่อนหน้า / ตัวนับการทำงาน (เช่น PID)

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

นอกจากนี้โชคดี! หวังว่าฤดูกาลจะเป็นไปด้วยดี


2
+1; นี่ไม่ใช่สภาพแวดล้อมเดสก์ทอปปกติ แต่เป็นรหัสที่ฝังตัวจริง เครื่องจักรของรัฐมีความสำคัญมากกว่า std :: vector vs arrays
MSalters

8
  • ฉันควรเริ่มใช้ STL ตั้งแต่วันแรกหรือไม่ vectorหรือเพียงแค่ติดกับอาร์เรย์มาตรฐาน? อาร์เรย์นั้นง่ายต่อการแนะนำ แต่ข้อผิดพลาดของตัวชี้อาจยากต่อการจับ

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

  • สำหรับ I / O ฉันควรยึดติดcoutฯลฯ หรือคุณคิดว่าprintfจะเรียนรู้ได้ง่ายขึ้น?

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

  • มีแหล่งข้อมูลออนไลน์สำหรับ C ++ ที่เหมาะสมที่จะใช้สำหรับผู้เรียนอายุน้อยหรือไม่?

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


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


7

หากคุณต้องการสอน C ++ ฉันจะเริ่มต้นโดยตรงกับ C ++ constructs เป็น vector และ cout แทนที่จะเป็นชุดย่อย C เช่น printf


7

ฉันควรเริ่มใช้ STL ตั้งแต่วันแรกหรือไม่?

ใช่. การใช้อาร์เรย์แบบเนทีฟใน C ++ นั้นเกิดข้อผิดพลาดได้ง่ายและมีการฝึกฝนที่ไม่ดี 99% ของเวลา

สำหรับ I / O ฉันควรยึดติดกับคอร์ ฯลฯ หรือไม่?

ใช่.

มีแหล่งข้อมูลออนไลน์สำหรับ C ++ ที่เหมาะสมที่จะใช้สำหรับผู้เรียนอายุน้อยหรือไม่?

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


5

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

ฉันคิดว่าวิธีที่มีประสิทธิภาพมากที่สุด (และอาจสนุก) ในการสอนพื้นฐานคือการใช้หลักสูตรที่มุ่งเน้นเป้าหมาย: เริ่มต้นด้วยการแสดงวิธีการแสดงผลสิ่งต่างๆจากนั้นป้อนข้อมูลด้วยแป้นพิมพ์จากนั้นป้อนไฟล์ I / O อย่างง่าย ฯลฯ เกมบนพื้นฐาน (หรือเทียบเท่ากับหุ่นยนต์) จากนั้นเมื่อพวกเขาถามว่า "ฉันจะทำ X ได้อย่างไร" คุณสามารถแยกแยะ X ในแง่ของตัวอย่างที่พวกเขาเคยเห็นมาแล้วเช่น "ก่อนอื่นคุณต้องได้รับข้อมูลจากผู้ใช้อย่างที่เราทำใน Z ... "(เห็นได้ชัดว่าไม่ใช่เรื่องง่ายในทางปฏิบัติเนื่องจาก X น่าจะเป็นสิ่งที่พวกเขาต้องการความรู้เพิ่มเติมเพื่อที่จะทำเช่น" กราฟิก 3D "แต่คุณยังสามารถอธิบายได้ว่ามันจะทำงานอย่างไรในระดับสูง เดียว)

ตัวอย่างที่คุณแสดงให้เห็นจะเริ่มจากการใช้เวทมนตร์คัดลอกวางกล่องดำซึ่งความลึกลับได้รับการคลี่คลายเนื่องจากชิ้นส่วนของปริศนาการเขียนโปรแกรมถูกคิดออกมาอย่างช้าๆ ตัวอย่างเช่นนักเรียนของคุณจะได้เรียนรู้พื้นฐานของifs อย่างรวดเร็ว แต่พวกเขาอาจไม่ทราบว่านิพจน์บูลีนไม่ได้ จำกัด เฉพาะที่จะใช้ภายใต้ifเงื่อนไขของ (นำไปสู่if (blah) return true; else return false;รหัสคลาสสิก)

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

โอ้และอย่ากลัวการทำซ้ำ "นี่เป็นเหมือนโปรแกรม Hello World ที่เราทำ - จำได้อย่างไรว่าเราเขียนข้อความลงในคอนโซล" (ไม่ ... ) "ลองอีกครั้งเพื่อให้แน่ใจ" ... และถามคำถาม! ให้นักเรียนมีส่วนร่วมกับตัวอย่างที่สนุกสนานและการมีปฏิสัมพันธ์มากมาย

C ++ เป็นภาษาที่ซับซ้อนและไม่ว่าคุณจะทำอะไรความซับซ้อนนั้นจำนวนมาก (และทักษะการเขียนโปรแกรมโดยทั่วไป) จะหายไปจากนักเรียนของคุณ ทุกสิ่งที่คุณแสดงจะเป็นสิ่งใหม่สำหรับพวกเขา ส่วนใหญ่จะไม่จมลงในความเข้าใจในระดับลึก (อย่างน้อยไม่ทันที) วิธีการทำงานของหน่วยความจำองค์ประกอบของพีซีโต้ตอบกันอย่างไรสแต็คและฮีปคือพอยน์เตอร์คลาสแม้แต่ลูปและโซ่อื่น ๆ หากส่วนใหญ่ไม่เข้าใจ ไม่เป็นไร! พวกเขาไม่จำเป็นต้องเข้าใจ - โปรแกรมที่ยอดเยี่ยมจำนวนมากสามารถเขียนด้วยฟังก์ชั่นสุดยอด 1,000 บรรทัดด้วยฟังก์ชั่นที่ซ้ำซ้อนifของquintuple-ซ้อนกันและตัวแปร 43 ตัวที่มีชื่อคล้ายx_2rกัน สิ่งสำคัญคือนักเรียนจะเรียนรู้และปรับปรุงอยู่ตลอดเวลา. กล่องดำนั้นจะปรับได้ตราบใดที่กล่องนั้นโปร่งใส (หรืออย่างน้อยก็เป็นสีเทาโปร่งแสง) ในระยะยาว ในตอนท้ายของการเรียนการสอนที่พวกเขาอาจจะไม่ทราบว่าสิ่งที่ patters ออกแบบมี แต่พวกเขาควรจะสามารถมองกลับไปที่โปรแกรมที่พวกเขาเขียนในไม่กี่สัปดาห์แรกและประจบประแจงที่รหัสของพวกเขา พวกเขาควรเข้าใจในรายละเอียดในระดับที่มีนัยสำคัญว่าโปรแกรมแรกที่พวกเขาเขียนนั้นใช้งานได้จริงอย่างไร แต่พวกเขาจะไม่ทราบทุกอย่าง - เลย


5

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

คำแนะนำของฉันในฐานะเด็กนักเรียนที่มีเพียงไม่กี่ปีที่ผ่านมามีงานจริงใด ๆ ที่เป็นนักพัฒนาคือการไม่ทำสิ่งที่น่าเบื่อ บอกพวกเขาว่าพวกเขากำลังทำอะไรและมันทำงานอย่างไรถึงระดับระบบปฏิบัติการ (ไม่จำเป็นต้องเข้าร่วม IMO)

ฉันคิดว่าการสอนพวกเขา C เป็นวิธีที่ดีกว่าที่จะทำเรื่องนี้ การสอนพวกเขาว่าเทอร์มินัลคืออะไรจริง ๆ แล้วโปรแกรมของพวกเขามีปฏิสัมพันธ์อย่างไรกับมันว่าสตริงนั้นคืออาร์เรย์ของตัวอักษรที่ลงท้ายด้วย \ 0 ในหน่วยความจำ malloc คืออะไรและ C ++ เป็นนามธรรมอย่างไร และอื่น ๆ ... สิ่งเหล่านี้เป็นสิ่งที่ทำให้บางคนรู้วิธีแก้ปัญหาเมื่อพวกเขาเจอกันในการพัฒนา

ฉันไม่สามารถเน้นความสำคัญของการให้โปรแกรมเด็ก ๆ และอยู่ที่นั่นเป็นหลักในการตอบคำถาม จากประสบการณ์ของฉันคุณเรียนรู้ภาษาโดยใช้มัน หนังสือและบทเรียนมีประโยชน์และจำเป็นต้องเริ่มต้น แต่ท้ายที่สุดฉันบอกว่าให้ไฟล์ C / C ++ และบอกว่า: นี่เป็นตัวอย่างของ X ฉันต้องการให้คุณทำ Y (ซึ่งสามารถทำได้ โดยแฮ็ค X) แสดงวิธีใช้ man pages (หากใช้ * NIX) หรือแสดงcplusplus.comและให้พวกเขาสำรวจ std libs เพื่อค้นหาสิ่งต่าง ๆ ด้วยตนเอง

TL; DR ให้เด็ก ๆ สอนตัวเอง อยู่ที่นั่นเพื่อเตรียมโครงสร้างและตอบคำถาม

นอกจากนี้: รายการที่เชื่อมโยงเป็นความจริง!


4

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

ก่อนอื่นฉันคิดว่าคุณควรตรวจสอบห้องสมุดที่คุณจะใช้และสิ่งที่คุณต้องการ

หากคุณมีห้องสมุด C ที่จะใช้หรือเหมือน C ที่มีพอยน์เตอร์และ C-arrays จำนวนมากฉันคิดว่าคุณต้องการวิธีสอนพวกเขาถึงวิธีใช้หรือทำไมคุณถึงใช้

แต่คุณสามารถแสดงรหัสง่ายๆเพื่อให้พวกเขาเริ่มต้นด้วยสตริงและเวกเตอร์นั่นคือวิธีการทำงานของ C ++ นั่นไม่ได้หมายความว่าคุณไม่สามารถสอนพอยน์เตอร์ได้

บางทีคุณควรทำให้ชัดเจนถึงความแตกต่างระหว่าง C ++ ระดับต่ำ (ซึ่งคล้ายกับ C) และ C ++ ระดับสูงด้วย STL หนึ่งในสิ่งที่ยากที่สุดใน C ++ สำหรับผู้เริ่มต้นคือการดูว่า C คืออะไร C ++ และ API ของระบบที่แตกต่างกันคืออะไร

เนื่องจากเป้าหมายที่นี่ไม่ใช่การเรียนรู้การเขียนโปรแกรมทั่วไป แต่เพื่อเข้าร่วมการแข่งขันหุ่นยนต์ฉันจึงมุ่งเน้นการสอนด้วยวิธีนี้


2

ฉันเริ่มสอนนักเรียน C ++ เมื่อปลายปีที่แล้วและฤดูร้อนนี้ก็ให้ทีมวิทยาการหุ่นยนต์ตัวแรกของเราด้วย

เราใช้ Stroustrup ของการเขียนโปรแกรม - หลักการและการปฏิบัติใช้ C ++ ฉันพบว่าหนังสือเล่มนี้เข้าถึงได้ง่ายอ่านง่ายและจัดระเบียบได้ดี เรามีนักเรียนประมาณ 6 คนอ่านบทด้วยตัวเอง ฉันอยู่ที่นั่นเพื่อช่วยพวกเขาด้วยคำศัพท์และคำถาม พวกเขาทำแบบฝึกหัดทั้งหมดในหนังสือ

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

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

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

โชคดี.


+1: คำตอบที่ดีที่สุด ทางเลือกที่ดีของหนังสือข้อความ ขอแสดงความยินดีกับความสำเร็จของคุณ
วินไคลน์

1

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

  1. นี่คือวิธีที่คุณสร้างโปรแกรม [int main (.. ) {return 0; }] ให้ภาพรวมพื้นฐานของสภาพแวดล้อมการเขียนโปรแกรมที่คุณต้องการให้พวกเขาลอง พวกเขาจะต้องรู้วิธีการสร้างโครงการและรวบรวม / เรียกใช้จริง

  2. นี่คือตัวแปร ตัวแปรสามารถเก็บข้อมูล (int, char, float, ฯลฯ )

  3. สตริง (C ++ สามารถใช้กับ cin ได้ง่ายกว่า)

  4. นี่คือวิธีที่คุณอ่านและเขียนข้อมูล (cin, cout) "สวัสดี% s!"

  5. เงื่อนไข (คอมพิวเตอร์จำเป็นต้องตัดสินใจ)

  6. ลูป (คอมพิวเตอร์ทำได้ดีในสิ่งเดียวกันซ้ำแล้วซ้ำอีก) แสดงในขณะและสำหรับลูป

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

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

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

ตัวอย่างที่ดีที่ช่วยให้ฉันติดตามแนวคิดบางอย่างคือสร้างเครื่องโค้ก:

  • ส่งออกเมนูของรายการและราคา (การจัดเก็บเมนูเป็นอาร์เรย์ของโครงสร้างที่ผู้ใช้กำหนดอาจเป็นคลาสใน C ++) เอาท์พุทมันต้องมีวง
  • อ่านในการเลือกของผู้ใช้
  • ขอเงินจากผู้ใช้ พวกเขาสามารถป้อนเหรียญเป็นเซ็นต์ (1, 5, 10, 20, 50, 100, 200 ใน Aus) ดูรายชื่อที่ไม่รู้จัก ในขณะที่ผู้ใช้ไม่มีเงินเพียงพอให้ถาม (ลูป)
  • คำนวณการเปลี่ยนแปลงที่จำเป็น (แผนกโมดูโล) โดยให้จำนวนเหรียญน้อยที่สุด พิมพ์ผลลัพธ์ไปยังหน้าจอ
  • รอผู้ใช้คนต่อไป

หลังจากนั้นคุณสามารถย้ายไปยังโครงสร้าง C ++; คุณไม่ต้องการดำน้ำลึกเกินไปก่อนที่อย่างน้อยพวกเขาจะสามารถสร้างโปรแกรมพื้นฐานได้

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


1

ฉันคิดว่าคุณไม่ควรสอนสิ่งต่าง ๆ จากมุมมอง C ++ ("C ++ hello world") แต่จากโดเมนปัญหา - ในกรณีนี้หุ่นยนต์ - มุมมอง ดังนั้นสวัสดีชาวโลกของคุณจะกระพริบตานำหรือขับมอเตอร์

แน่นอนว่าคุณสามารถ / ควรย่อยสลายงานหุ่นยนต์เล็ก ๆ ในชุดย่อยของการเพิ่มการกระทำ C ++ ที่มีความหมายเกี่ยวกับแนวคิดที่เกี่ยวข้องกับประเภทฟังก์ชั่นและการดำเนินงาน IO

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

ดังนั้นฉันจะแนะนำ: อย่าอ่านคู่มือภาษา แต่ควรเรียนรู้ที่จะทำสิ่งต่างๆด้วยภาษาที่คุณเลือก นั่นคือสิ่งที่ทำให้คนมีแรงบันดาลใจฉันคิดว่า


0

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

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

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


0

มันไม่ใช่ซีรีย์การบรรยาย C ++ แต่ริชาร์ดบั๊กแลนด์ของ COMP1917เป็นซีรีย์การบรรยายที่ยอดเยี่ยมในการเขียนโปรแกรมใน C (ตามด้วยCOMP1927โครงสร้างข้อมูล)

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


0

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

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

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

  • ทำอะไร "ดูดี" ถ้าสวิตช์อยู่ในการตั้งค่าเฉพาะ?
  • บอกให้วาล์วลมเปิดหรือปิด (เช่น: ตัวยึด Grabber)?
  • เปิดและปิดมอเตอร์สว่าน (สำหรับระบบขับเคลื่อน)
  • เปลี่ยนทิศทางของหุ่นยนต์หากเซ็นเซอร์ตรวจจับสิ่งกีดขวางทำงานหรือไม่?
  • ทำให้หุ่นยนต์สลับระหว่างโหมดขับเคลื่อน 2 ล้อกับ 4 ล้อหรือไม่
  • ปรับความไวของจอยสติ๊กหรือไม่?
  • เป็นต้น

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


0

ใช้วิธีการเขียนโปรแกรม C ++โดย Deitel และ Deitel ตำราที่ดีเยี่ยมในความคิดของฉัน

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

อยู่ห่างจาก STL สำหรับชั้นเรียนเริ่มต้น

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

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

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

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

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