มีความเป็นไปได้ไหมที่ใครบางคนที่เรียนรู้ทุกแง่มุมที่สำคัญของ C ++ และรู้พื้นฐานของภาษาเป็นอย่างดีจะเรียนรู้ภาษาอื่น ๆ (เช่น Python, Perl, Java) เร็วขึ้นและง่ายขึ้นหรือไม่
มีความเป็นไปได้ไหมที่ใครบางคนที่เรียนรู้ทุกแง่มุมที่สำคัญของ C ++ และรู้พื้นฐานของภาษาเป็นอย่างดีจะเรียนรู้ภาษาอื่น ๆ (เช่น Python, Perl, Java) เร็วขึ้นและง่ายขึ้นหรือไม่
คำตอบ:
ความรู้ที่ลึกซึ้งของภาษาการเขียนโปรแกรมใด ๆ มีแนวโน้มที่จะช่วยคุณในการเลือกภาษาอื่น ๆ ได้เร็วขึ้น นั่นเป็นเพียงบางส่วนเนื่องจากการเขียนโปรแกรมเป็นวิธีคิดมากกว่าการเรียนรู้ไวยากรณ์ วิธีปฏิบัติทางการเขียนโปรแกรมส่วนใหญ่จะเป็นจริงของภาษาโปรแกรมส่วนใหญ่ นั่นคือเหตุผลที่ผู้คนพูดว่าคุณเรียนรู้ภาษาการเขียนโปรแกรมที่สองเร็วกว่าภาษาแรกเสมอ
C ++ เป็นภาษาที่ช่วยให้ 'ควบคุม' ได้ดีกว่าภาษาอื่น ๆ นี่อาจเป็นได้ทั้งดีและไม่ดี ตัวอย่างเช่นปืนจริงดีกว่าปืนลมเมื่อคุณเข้าไปในป่า (เพราะคุณสามารถยิงอะไรบางอย่างลงไปได้ด้วย) แต่มันก็อันตรายยิ่งกว่าสำหรับคุณและคนรอบข้าง C ++ มีแนวคิดเช่นการจัดการหน่วยความจำซึ่งคุณไม่จำเป็นต้องกังวลในภาษาอื่น ๆ ส่วนใหญ่ การเข้าใจแนวคิดเหล่านี้อย่างแน่นหนาอย่างไรก็ตามอยู่ไกลจากไร้จุดหมายแม้เมื่อทำงานกับภาษาการจัดการหน่วยความจำอัตโนมัติ นอกจากนี้คุณยังสามารถดำเนินการระดับบิตและลดลงไปที่ 'โลหะ' ด้วยภาษาเช่น C ++ แม้แต่ความเข้าใจพื้นฐานในเรื่องเหล่านี้ก็สามารถช่วยคุณได้มากในฐานะโปรแกรมเมอร์ในภาษาใดก็ได้
ฉันเรียนรู้ Java เป็นครั้งแรกเป็นเวลาเกือบ 3 ปีก่อนที่จะเรียนรู้ C ++ และฉันควรจะบอกว่าฉันเสียใจ (หลักสูตร uni ... ) สิ่งนี้ทำให้การเรียนรู้ C ++ (ฉันยังคงเรียนรู้อยู่ห่างไกลจากความรู้ที่ลึกซึ้ง: D) ไม่ตรงไปตรงมาเท่าที่ฉันต้องการ ถ้าฉันทำมันด้วยวิธีอื่นฉันจะบอกว่ามันจะง่ายกว่านี้สำหรับฉัน โดยเฉพาะอย่างยิ่งเมื่อคุณรู้ว่าทำไมบางสิ่งบางอย่างเกิดขึ้นในวิธีที่เฉพาะเจาะจงและไม่เพียงแค่วางใจในความมหัศจรรย์อัตโนมัติของภาษา ถ้าฉันได้รับอนุญาตให้แสดงความคิดเห็นฉันอยากจะแนะนำ: C (สำหรับกระบวนทัศน์การเขียนโปรแกรมพื้นฐานและสากล) -> C ++ (สำหรับความเข้าใจพื้นฐานของ OOP พร้อมกับการจัดการหน่วยความจำ) -> จากนั้นคุณสามารถไปสู่ภาษา OOP ที่ 'จริง' ด้วย รากฐานที่ดีหรือคุณสามารถดำเนินการต่อด้วยหัวข้อขั้นสูงเพิ่มเติมใน C ++ ขึ้นอยู่กับสิ่งที่คุณต้องการ
OR
และAND
น่าเสียดายที่ไม่มี นี่เป็นปัญหาใหญ่เมื่อสอน C ++ ในคลาสการเขียนโปรแกรมโดยเฉพาะคลาสระดับเริ่มต้น: คุณสามารถเรียนรู้หลักการเขียนโปรแกรมหรือคุณสามารถเรียนรู้ภาษา C ++ ได้ แต่ภาษา C ++ มีข้อผิดพลาดมากเกินไปและ gotchas ตัวเล็ก ๆ ขอบเขตของคลาสหนึ่งภาคเรียน!
มีหลายสิ่งหลายอย่างที่ถูกลองใช้ใน C ++ และในที่สุดก็กลายเป็นสำนวนในภาษาผ่านความเฉื่อยที่แท้จริงซึ่งเป็นภาษาอื่นทุกภาษาตั้งแต่มองและปฏิเสธเพราะมันกลายเป็นความผิดพลาดครั้งใหญ่ สิ่งที่สำคัญคือเทมเพลตของ C ++ และโมเดลวัตถุของ C ++ (ออบเจกต์เป็นประเภทของค่าไม่เคยเป็นสิ่งที่ดีเพราะมันจะทำลายการทดแทน Liskov และ OOP นับพันตัว)
ดังนั้นหากคุณมีความรู้อย่างลึกซึ้งเกี่ยวกับภาษาซีพลัสพลัสก่อนแล้วคุณต้องการเรียนรู้ภาษาการเขียนโปรแกรมอื่น ๆ คุณจะต้องมีความรู้ที่เป็นอันตรายและต่อต้านการต่อต้านคุณจะต้องเรียนรู้ภาษาของโปรแกรมอื่น ๆ
ไม่การรู้ C ++ เป็นอย่างดีจะทำให้การเรียนรู้ภาษาอื่นง่ายขึ้นเช่น C ++ แต่นั่นจะน่าเบื่อ ทำไมคุณถึงอยากรู้สองภาษาที่เหมือนกัน นั่นไม่ได้ซื้ออะไรให้คุณเลย (โปรดทราบว่าสิ่งนี้ไม่ได้มีความเฉพาะเจาะจงสำหรับ C ++) ใช้กับภาษาใด ๆ เปรียบเทียบกับภาษาธรรมชาติ: การเรียนรู้ภาษาอิตาลีจะไม่ทำให้การเรียนรู้ภาษาอื่นง่ายขึ้นมันจะทำให้เรียนรู้ภาษาสเปนฝรั่งเศสหรือโปรตุเกสได้ง่ายขึ้น ของเหล่านั้นจะทำให้ง่ายต่อการเรียนรู้ที่สี่ แต่แม้การเรียนรู้ภาษาโรแมนติกทั้งหมดจะไม่ช่วยให้คุณเรียนรู้ภาษาฟินแลนด์, จีน, ฮินดี, ฮิบรู, ฮิบรู, อาหรับ, Pashtu, กรีกและอื่น ๆ )
ภาษาโปรแกรมใช้กระบวนทัศน์ ปีเตอร์แวนรอยได้รวบรวมโปสเตอร์ 34 หลักกระบวนทัศน์การเขียนโปรแกรม
กระบวนทัศน์ในที่สุดก็ประกอบด้วยแนวคิด โปสเตอร์นั้นแสดงรายการแนวคิด 18 เรื่อง
กระบวนทัศน์ทั้งหมด (หรืออย่างน้อยที่สุดในโปสเตอร์) นั้นประกอบขึ้นจากแนวคิดเหล่านั้น ทุกภาษาใช้กระบวนทัศน์หนึ่งอย่างหรือมากกว่านั้นซึ่งประกอบด้วยแนวคิดเหล่านั้น ดังนั้นหากคุณเรียนรู้แนวคิดเหล่านี้คุณจะได้เรียนรู้ภาษาการเขียนโปรแกรมทั้งหมดในครั้งเดียว
แน่นอนว่ายังมีเรื่องแปลก ๆ ที่เฉพาะเจาะจงเกี่ยวกับภาษา ยิ่งไปกว่านั้นโปสเตอร์นั้นไม่สนใจการพิมพ์อย่างสมบูรณ์และแน่นอนว่ามีความแตกต่างอย่างมีนัยสำคัญระหว่างระบบ F <: ω - ระบบสไตล์สไตล์, ระบบพิมพ์สไตล์สกาล่าหรือระบบพิมพ์เป็ดแบบไดนามิก à la Idris, Agda, Coq, Guru หรือ ATS
ฉันจะบอกว่ารู้ภาษาการเขียนโปรแกรมใด ๆอย่างลึกซึ้งจะช่วยให้มีการเรียนรู้ผู้อื่นอย่างน้อยภาษาอื่น ๆ ในครอบครัวเดียวกัน ตัวอย่างเช่นความรู้ C ++ จะไม่ช่วยอะไรมากกับ LISP หรือ Haskell แต่สำหรับภาษาเชิงโพรซีเดอร์เชิงวัตถุ วิธีการของฉันคือการลองและเรียนรู้ภาษาจากแต่ละตระกูลที่แตกต่างกัน (ขั้นตอนการทำงานเชิงวัตถุ ฯลฯ ) ของภาษาได้ดีจากนั้นความรู้นั้นสามารถนำไปใช้เป็นภาษาอื่นในครอบครัวนั้นได้ ในทางกลับกันความรู้เชิงลึกของ APL จะไม่ช่วยอะไรอีกแล้ว ...
ฉันจะตีความที่แตกต่างที่นี่
C ++ เป็นภาษาที่ดีสำหรับการเรียนรู้เกี่ยวกับโครงสร้างหน่วยความจำและข้อมูลเนื่องจากมันบังคับให้คุณคิดอย่างรอบคอบเกี่ยวกับแนวคิดเช่นการเป็นเจ้าของวัตถุและอายุการใช้งาน และการเรียนรู้เกี่ยวกับโครงสร้างหน่วยความจำและข้อมูลเป็นส่วนสำคัญของหลักสูตรวิศวกรรมซอฟต์แวร์ใด ๆ
แต่คุณต้องเรียนรู้เกี่ยวกับโครงสร้างข้อมูล หากคุณเพียงแค่ "เรียนรู้ C ++" คุณจะไม่ได้รับประโยชน์มากนักและอาจทำให้กระบวนการเรียนรู้ภาษาอื่นช้าลงในระยะสั้น
เมื่อฉันอยู่ในวิทยาลัยโครงสร้างข้อมูลเป็นหลักสูตรน้องใหม่ที่ต้องดำเนินการหลังจาก CS1 (ซึ่งอย่างน้อยครึ่งหนึ่งของชั้นเรียนได้นำออกไป) มันยาก. รูปแบบของหลักสูตรโดยทั่วไปคือ "นี่คือโครงสร้างข้อมูลที่คุณไม่เคยเห็นมาก่อน [เช่นกองซ้ายฝ่ายซ้าย ] นำไปใช้ใน C ++ ต่อสัปดาห์และทำให้ผลลัพธ์ของคุณตรงกับผลลัพธ์ที่เราคาดหวังไบต์สำหรับไบต์ดังนั้นเรา สามารถให้คะแนนโดยอัตโนมัติ " จากนั้นในสัปดาห์หน้าคุณจะได้รับโครงสร้างข้อมูลใหม่และการบ้านใหม่ ฉันอาจเรียนรู้เพิ่มเติมในหลักสูตรหนึ่งที่มากกว่าที่ฉันทำในหลักสูตรอื่น ๆ ของฉันทั้งหมด
นั่นคือประเภทของการเรียนรู้ที่คุณต้องทำเพื่อให้ C ++ มีคุณค่า
ทุกภาษาที่คุณเรียนรู้ทำให้ง่ายต่อการเรียนรู้โดยเฉพาะอย่างยิ่งในกระบวนทัศน์เดียวกัน พวกเขายืมจากกันอย่างหนักและหลังจากนั้นไม่นานคุณก็มาถึงจุดที่ภาษาใหม่ดูเหมือนจะเป็นเพียงชุดของคุณสมบัติจากภาษาอื่น ๆ ที่มีการบิดที่ไม่ซ้ำกันไม่กี่
ฉันไม่คิดว่าภาษา C ++ ดีกว่าหรือแย่กว่าภาษาอื่น ๆ ในเรื่องนั้น มันเป็นอีกคนหนึ่งที่ verbose ภาษาฉันรู้และทำให้บางสิ่งบางอย่างที่ยากที่จะง่ายในภาษาอื่น ๆ มากที่สุด แต่ที่ไม่จำเป็นต้องแปลภาษาในการทำต่อไปง่ายต่อการเรียนรู้ มันไม่ทั่วไปให้ความรู้สึกต่อไปภาษาที่ง่ายต่อการใช้งานแม้ว่า มีความแตกต่าง
ไม่ได้ความรู้ที่ลึกซึ้งของCหรือส่วนย่อยของ C ++ นั่นคือ "โดยทั่วไป C" จะช่วยเมื่อเรียนรู้ภาษาอื่น ๆ อย่างน้อยที่สุดเมื่อนึกภาพการใช้งานของพวกเขาจะต้องทำ ความรู้ที่ลึกซึ้งของC ++ในทางกลับกันส่วนใหญ่จะเป็นข้อมูลที่สับสนหรือไม่เกี่ยวข้องเมื่อเรียนรู้ภาษาอื่น ถ้าคุณเรียนรู้การวางแนววัตถุของ C ++ มากกว่าระดับพื้นผิวเช่นเมื่อคุณไปยัง Perl / Python / Ruby คุณจะเสียเวลาเรียนรู้สิ่งที่คุณรู้มากกว่าการใช้เพราะวัตถุในภาษาเหล่านั้นถูกนำมาใช้ในวิธีที่แตกต่างอย่างสิ้นเชิงกว่าใน C ++ สิ่งเดียวกันนี้เป็นจริงในขอบเขตที่มากขึ้นหรือน้อยลงสำหรับภาษาอื่น ๆ ส่วนใหญ่และสำหรับคุณสมบัติภาษาอื่น ๆ (ตัวอย่างเช่นเทมเพลต C ++ และ Haskell polymorphism นั้นโดยทั่วไปแล้วเป็นคุณลักษณะเดียวกัน ดังนั้นความรู้เชิงลึกของ C ++ ส่วนใหญ่จะเป็น C ++ ที่เจาะจง