ฉันควรเรียนภาษา C ก่อนเรียน C ++ หรือไม่? [ปิด]


116

วันนี้ฉันไปเยี่ยมแผนก CS ของมหาวิทยาลัยและในการทัวร์ห้องแล็บเราได้นั่งลงเล่นกับโครงการปีสุดท้ายสองสามโครงการจากนักศึกษาระดับปริญญาตรี สิ่งหนึ่งที่ดีเป็นพิเศษ - เกมดาวเคราะห์น้อยประเภท FPS ฉันตัดสินใจที่จะดูในsrcไดเรกทอรีเพื่อพบว่ามันทำใน C ++ (โครงการอื่น ๆ ส่วนใหญ่เป็นแอป Java 3D)

ฉันไม่เคยทำ C มาก่อน แต่ฉันเคยดูรหัส C มาก่อนแล้ว จากที่ผมเห็นรหัส. cpp ในเกมนี้ดูไม่แตกต่างกันมาก

ฉันสนใจที่จะเรียนรู้ C หรือ C ++ แต่อาจจะเรียนรู้อย่างอื่นในภายหลัง มีข้อได้เปรียบสำหรับการเรียนรู้ก่อนอื่นหรือไม่และถ้าเป็นเช่นนั้นข้อใด



7
มันไม่ได้ซ้ำกันจริงๆ โดยปริยายคำถามนี้ยังถามว่า "ฉันควรเรียนรู้ OOP หรือการเขียนโปรแกรมขั้นตอนก่อน"
bobobobo

2
ก่อนที่จะลงไปที่คำตอบด้านล่าง (IMO พวกเขาอยู่ในวงกลม) ให้ฉันเสนอคำแนะนำบางอย่าง: TRUE : C ++ ยังคงรักษาคุณสมบัติและคุณลักษณะทั้งหมดที่ใช้กับ C ดังนั้น C จึง ' ล้าสมัย ' โดยปริยาย(คำตอบส่วนใหญ่ด้านล่างลอง เพื่อทำ). อย่างไรก็ตาม : C คือไม่ได้ , ไม่ได้ , ไม่ตาย ผู้คนดูเหมือนจะเข้าใจถึงสิ่งที่ ' ไม่จำเป็นต้องเรียนรู้ทั้งสองอย่าง ' เพื่อชีวิตที่รัก แต่ในความเป็นจริงสิ่งนี้ไม่มีพื้นฐาน เพื่อขอยืมไวยากรณ์ที่มาจาก C, C ++! = C การรู้ C ++ จะไม่ทำให้คุณเป็นนักพัฒนา C ที่มีคุณสมบัติเหมาะสมและเช่นเดียวกันการรู้ C จะไม่ทำให้คุณเป็นนักพัฒนา C ++ ที่มีคุณสมบัติเหมาะสม
Super Cat

4
ที่กล่าวว่า : ไม่มีอันตรายใด ๆในการที่ C ก่อนที่จะขุดคุ้ย c ++ - ยิ่งคุณรู้ดีกว่าคุณมี - แต่ในทางตรงกันข้ามมีความต้องการที่จะเรียนรู้ C ถ้าคุณกำลังเป้าหมายสูงสุดคือการเรียนรู้ C ถ้าคุณต้องการที่จะเรียนรู้ C ++ ไปเรียนรู้ภาษา C ++และถ้าคุณต้องการเรียนรู้ทีซีไปเรียนรู้ C ทั้งสองมีข้อดีและข้อเสีย (ความเรียบง่ายของ C และ -ultra ในเชิงลึก - คุณสมบัติของ C ++ เป็นทั้งคำสาปและพรในแบบของตัวเอง) และทั้งสองยังคงใช้อยู่ในปัจจุบัน (C สำหรับระบบฝังตัว, Unity, PHP ฯลฯ - C ++ สำหรับ Unity, Unreal ฯลฯ )
Super Cat

3
จุด: ต้องการเรียนรู้ C ++ หรือไม่? จากนั้นข้าม C. คุณไม่จำเป็นต้องใช้ ต้องการเรียนรู้ C? ถ้าอย่างนั้นดีไปเรียน C ถ้าอยากเรียนทั้งคู่ก็ไปหา C ก่อน ทั้งคู่มีสถานที่ในโลกดังนั้นอย่าคิดว่าทั้งสองอย่างเพียงพอสำหรับอีกฝ่าย
Super Cat

คำตอบ:


121

ไม่จำเป็นต้องเรียนรู้ C ก่อนที่จะเรียนรู้ C ++

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

เพียงเพราะ C ++ แบ่งปันไวยากรณ์เดียวกันและความหมายเดียวกันจำนวนมากไม่ได้หมายความว่าคุณต้องเรียนรู้ C ก่อน

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

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

โปรดดูเหตุผลเพิ่มเติมในคำตอบนี้นี้


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

24
@ แมท: ฉันเรียนรู้ C ++ ก่อนและฉันไม่ใช่โปรแกรมเมอร์ที่เข้าใจผิด ดังนั้นการอ้างสิทธิ์ของคุณจึงไม่เป็นความจริงพิสูจน์โดยการโต้แย้ง และใช่ฉันมีตราทองเป็น C ด้วย ความจริงของเรื่องนี้คือ 2 ภาษาที่แตกต่างกัน คุณไม่จำเป็นต้องมีภาษาใดภาษาหนึ่งเป็นที่พึ่งพาเพื่อเรียนรู้ภาษาอื่น นั่นเป็นเพียงความเข้าใจผิดโง่ ๆ
Brian R.Bondy

8
@Matt: นอกจากนี้จากโพสต์ที่เชื่อมโยงของฉัน: คุณควรเรียนรู้ C ++ ก่อนไม่ใช่เพราะการเรียนรู้ C ก่อนจะทำร้ายคุณไม่ใช่เพราะคุณจะต้องเรียนรู้อะไรเลย (คุณจะไม่ได้) แต่เนื่องจากไม่มีประโยชน์ในการเรียนรู้ C ก่อน ในที่สุดคุณจะได้เรียนรู้ทุกอย่างเกี่ยวกับ C อยู่ดีเพราะมีอยู่ใน C ++ มากหรือน้อย
Brian R.Bondy

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

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

77

ฉันชอบคำถามนี้เหมือนกับการถามว่า "ฉันควรเรียนรู้อะไรก่อนสโนว์บอร์ดหรือสกี" ฉันคิดว่ามันขึ้นอยู่กับว่าคุณต้องการเล่นสโนว์บอร์ดหรือเล่นสกี หากคุณต้องการทำทั้งสองอย่างคุณต้องเรียนรู้ทั้งสองอย่าง

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


70

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

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

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

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


18

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


13

ฉันคิดว่าคุณควรเรียนรู้ C ก่อนเพราะฉันเรียน C ก่อน C ทำให้ฉันเข้าใจไวยากรณ์และ gotchas ได้ดีด้วยสิ่งต่างๆเช่นพอยน์เตอร์ซึ่งทั้งหมดนี้ไหลเข้าสู่ C ++

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

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


ฉันไม่เห็นด้วย. หนังสือการเขียนโปรแกรม C ++ ใด ๆ ที่คุ้มค่ากับเกลือจะครอบคลุม "gotchas" เป็นอย่างน้อยเช่นการทำงานของอาร์เรย์ (และวิธีป้องกันการล้น)
moonman239

12

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

เลือก K&R และอ่านสิ่งนั้น มันสั้นและจะให้ความรู้สึกที่เพียงพอของภาษา เมื่อคุณมีพื้นฐานของพอยน์เตอร์และการเรียกฟังก์ชันแล้วคุณสามารถไปที่ C ++ ได้ง่ายขึ้นเล็กน้อย


15
ไม่ถูกต้อง. เกือบทุกอย่างที่ C สอนคุณเป็นแนวทางปฏิบัติที่ไม่ดีใน C ++ C ไม่ได้เป็นหัวใจสำคัญของ C ++ แต่เป็นเพียงการแบ่งปันไวยากรณ์จำนวนมาก ได้โปรดโลกนี้มีโปรแกรมเมอร์ "C พร้อมคลาส" มากเกินพอแล้ว เรียนรู้ C หรือ C ++ แต่อย่าทำเป็นว่า C เป็น C ++ lite
jalf

13
ฉันยืนตามคำพูดของฉัน C ++ ถูกสร้างขึ้นบน C ดังนั้น C จึงเป็นหัวใจสำคัญ สำนวนที่ใช้ใน C ++ แตกต่างจากที่ใช้ใน C มาก แต่ไวยากรณ์เหมือนกัน เราสามารถเรียนรู้วิธีการเขียนโปรแกรม C ++ ที่ถูกต้องโดยเริ่มต้นด้วย C ดูที่ C ++ Primer โดยทั่วไปจะทำเช่นนั้น
Steve Rowe

6
+1 C เป็นภาษาที่เล็กกว่าจึงเรียนรู้ได้ง่ายกว่า ความพยายามในการเข้ากันได้กับ C แบบย้อนกลับเป็นสาเหตุหนึ่งของปัญหาสำคัญของ C ++ อีกประการหนึ่งคือระบบเทมเพลตที่ซับซ้อนเกินไปสำหรับ 90% ของโปรแกรมเมอร์ C ++ ที่จะใช้
hillu

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

1
คุณมีจุด จริงๆแล้วอาจเป็นการดีที่จะเรียนรู้ C เพื่อที่คุณจะได้ไปสู่ ​​C ++ โดยมีความรู้เกี่ยวกับรากของมัน
Daniel Daranas

10

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


8

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


4
ในสถานการณ์การประมวลผลประสิทธิภาพสูงหลาย ๆ รอบนาฬิกาไม่กี่ร้อยรอบนั้นมีความสำคัญอย่างแท้จริง
Scottie T

1
@ScottieT: เนื่องจากนอกเหนือจากตัวrestrictระบุ C แล้วไม่มีโครงสร้างทางวากยสัมพันธ์ / ความหมายอื่น ๆ ที่เกี่ยวข้องกับประสิทธิภาพมากกว่าที่ C ++ มีด้วยเหตุใดคุณจึงคิดว่ารหัส C ++ ที่มีไวยากรณ์ที่สมบูรณ์ยิ่งขึ้นและเช่นการเขียนโปรแกรมเมตาควรให้รหัสที่ช้าลง คุณรู้จักเทมเพลตนิพจน์หรือไม่?
Sebastian Mach

1
@phresnel: ความเกี่ยวข้อง C ++ เป็นภาษาที่ซับซ้อนมากที่มีคุณสมบัติที่มักจะไม่คุ้มค่าในการซื้อ. ตามกฎทั่วไป, C ให้เดียวกันโอกาสที่ผลการดำเนินงานเป็น C ++ ค่าใช้จ่ายที่มีขนาดเล็กลงอย่างมีนัยสำคัญในความซับซ้อน
Matt Joiner

1
@MattJoiner: การบำรุงรักษา / ความสามารถในการขยายเป็นปัจจัยด้านประสิทธิภาพแม้ว่าฉันจะรู้ว่ารหัสทางวิทยาศาสตร์มักเป็นเพียงภาพเดียว อย่างไรก็ตามการทำนิพจน์ - เทมเพลต - อาร์กิวเมนต์ซ้ำ (ตามตัวอย่าง) ฉันบอกว่า C ++ มีโอกาสในการปรับให้เหมาะสมมากกว่า (เนื่องจากการเขียนนิพจน์แม่แบบ - โค้ดง่ายกว่ารหัสภายใน) โดยมีข้อยกเว้นหนึ่งข้อ ( restrictซึ่งอย่างไรก็ตาม คอมไพเลอร์ C ++ ที่สำคัญทั้งหมดให้เป็นส่วนขยาย) และคุณคิดว่าจริงๆแล้วเมื่อใช้รหัสเดียวกันจะมีความแตกต่างในประสิทธิภาพระหว่าง C ++ และ C เนื่องจากคอมไพเลอร์เดียวกันหรือไม่? [... ]
Sebastian Mach

1
@MattJoiner: [... ] และเมื่ออ่านข้อความเช่น "เท่าที่ฉันไม่ชอบ C ++" ช่วยให้ฉันสร้างสมมติฐานที่คุณมีอคติเล็กน้อยในการสนทนานี้ คุณคิดว่าอะไรทำให้โค้ด C ++ ทำงานได้ไม่ดี? ถ้า C มีเดียวกันประสิทธิภาพโอกาสเป็นสิ่งที่เทียบเท่าของแม่แสดงออกแม่โดยทั่วไปการคำนวณเวลารวบรวมเกี่ยวกับประเภทข้อมูลที่ไม่ใช่เนื้อแท้ functors หรือไม่ และการเพิ่มค่าใช้จ่าย / ปัจจัยการบำรุงรักษา: RAII, ตัวดำเนินการ / การทำงานเกินพิกัด, คอนเทนเนอร์มาตรฐานทั่วไป, เธรดมาตรฐาน, อัลกอริทึมมาตรฐานทั่วไป, การอ้างอิง?
Sebastian Mach

8

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

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

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


8

ฉันคิดว่าการเรียนรู้ C ก่อนเป็นความคิดที่ดี

มีเหตุผลที่หลักสูตร comp sci ยังคงใช้ C.

ในความคิดของฉันคือเพื่อหลีกเลี่ยง "ความแออัด" ทั้งหมดของเนื้อหาที่เป็นภาระผูกพันที่จะต้องดำเนินการ OOP

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

ตำราหลายเล่มในปัจจุบันกำลังผลักดันแนวทาง "วัตถุมาก่อน" และเริ่มพูดถึงรถยนต์และคันเกียร์ก่อนที่จะแนะนำอาร์เรย์


4
ดูเหมือนว่าหลักสูตร comp sci จำนวนมากในปัจจุบันใช้ Java ซึ่งทำให้ปัญหาที่คุณกำลังพูดถึงรุนแรงขึ้น
Dima

2
คุณสร้างจุดที่ดีมาก นอกจากจะซับซ้อนเกินไปสำหรับภาษาแรกแล้ว C ++ ส่วนใหญ่ยังสนับสนุนให้ซ่อนการโต้ตอบในระดับต่ำกับระบบปฏิบัติการและหน่วยความจำที่มีความสำคัญต่อค่าเล่าเรียนด้านวิทยาการคอมพิวเตอร์ที่ดี ควรสอนอาร์เรย์ก่อนวัตถุ
Matt Joiner

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

2
"มีเหตุผลที่วิชาคอมพ์วิทย์ยังคงใช้ค." ใช่เพราะหลักสูตรวิทย์คอมพ์ส่วนใหญ่สอนไม่ดี
Lightness Races ใน Orbit

8

เลขที่

โดยทั่วไปการเรียนรู้ C ++ จะมีประโยชน์มากกว่าเพราะใกล้เคียงกับภาษาที่ใช้ OO ที่ทันสมัยที่สุดเช่น Eiffel หรือ C #

หากเป้าหมายของคุณคือการเรียนรู้ C ++ ให้เรียนรู้ C ++ มาตรฐานที่ทันสมัยตั้งแต่แรก ทิ้ง mallocs ไว้ข้างๆ


แต่Steve Rowe มีประเด็น ...


C ++ ในปัจจุบันไม่ได้ใกล้เคียงกับภาษา OO เช่น C # หรือ Eifel
einpoklum

7

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


6

สองเซ็นต์ของฉัน:

ฉันขอแนะนำให้เรียนรู้ C ก่อนเพราะ:

  • เป็นภาษาพื้นฐาน - หลายภาษาสืบเชื้อสายมาจาก C
  • แพลตฟอร์มอื่น ๆ รองรับคอมไพเลอร์ C มากกว่า C ++ ไม่ว่าจะเป็นระบบฝังตัวชิป GPU และอื่น ๆ
  • ตามดัชนี TIOBE C ยังคงได้รับความนิยมมากกว่า C ++ ประมาณ 2 เท่า

3

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

โชคดี.

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