เพิ่มระดับของรหัส C / C ++ ของฉัน


16

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

ฉันได้อ่านหนังสือเขียนโปรแกรมเริ่มต้นหลายเล่มบางเล่มใน C / C ++ และอื่น ๆ เกี่ยวกับเกม ฉันได้เขียนสิ่งที่ซับซ้อนมากขึ้นเช่นพื้นฐาน AI, อนุกรมและอินเตอร์เฟส TCP / IP

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

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

คุณจะให้คำแนะนำอะไรเพื่อพัฒนาและยกระดับความรู้และทักษะของฉัน ทรัพยากรที่เฉพาะเจาะจงจะได้รับการชื่นชมอย่างมาก


สำหรับหนังสือ C ++ ดูคำถามนี้: stackoverflow.com/questions/388242/…
Naveen

ดูเพิ่มเติมที่: programmers.stackexchange.com/questions/75173/…
พอลอาร์

คำตอบ:


10

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

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

คุณสามารถตรวจสอบลิงค์นี้ใน StackOverflow เพื่อดูรายการหนังสือดี ๆ มากมายเพื่อเรียนรู้ C ++


3
ไม่ทรัพยากรที่ดีที่สุดในการเรียนรู้ C ++ เป็นหนังสือที่ดีหรือหนังสือเด่นกว่า
Neil Butterworth

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

+1 สำหรับ "หากคุณกำลังพูดถึง C / C ++ คุณสามารถใช้ประสบการณ์พิเศษได้อย่างแน่นอน" -1 สำหรับ "ทรัพยากรที่ดีที่สุดในการเรียนรู้ C ++ คือ StackOverflow" ดังนั้นไม่ต้องลงคะแนน
Residuum

5

ก่อนอื่นให้เพิ่มพื้นฐานทางทฤษฎีพื้นฐานของคุณในสิ่งที่คุณยังไม่รู้ ศึกษาทฤษฎีและเขียนตัวอย่างสั้น ๆ

ตัวอย่างพื้นหลังทางทฤษฎีพื้นฐานรวมถึง:

  • อัลกอริทึมและโครงสร้างข้อมูล
  • การออกแบบซอฟต์แวร์ (UML, รูปแบบการออกแบบ, OOP)
  • ระบบปฏิบัติการและการเขียนโปรแกรมแบบขนาน

จากนั้นให้พิจารณาการเรียนรู้ภาษาเพิ่มเติม (เช่น Java หรือ C #) - การศึกษาภาษาเพิ่มเติมช่วยให้ดีขึ้นภายใต้ข้อดีข้อเสียของภาษาที่คุณใช้อยู่และช่วยให้คุณเรียนรู้วิธีปฏิบัติที่ดีที่สุดที่คุณอาจไม่ทราบ

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

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

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


โดยเฉพาะสำหรับการเขียนโปรแกรมเกมฉันขอแนะนำให้เลือกโดเมน / เทคโนโลยีต่อไปนี้:

  • พื้นฐานการประมวลผลภาพ
  • เทคโนโลยี UI ใด ๆ ที่เฉพาะเจาะจง
  • พื้นฐานคอมพิวเตอร์กราฟิกส์
  • เอ็นจิ้นกราฟิกเฉพาะใด ๆ (เช่น DirectX, OpenGL, OGRE, ODG, Java3D, ... )
  • พื้นฐานฟิสิกส์เครื่องกล
  • เอนจิ้นฟิสิกส์เฉพาะใด ๆ (เช่น PhysX, ... )
  • เอ็นจิ้นเกมเฉพาะใด ๆ (เช่น XNA, ... )
  • การเขียนโปรแกรมแบบมัลติเธรด
  • การเขียนโปรแกรมแบบกระจาย


แก้ไข:

วิธีการเรียนรู้:

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

ฉันรู้โดยตรงว่า x วินาทีฉันคิดเรื่องนี้ แต่ไม่สามารถหาทรัพยากรใด ๆ นอกเหนือจากพื้นฐานมาก ๆ คุณมีคำแนะนำเกี่ยวกับวิธีการเรียนรู้สิ่งต่าง ๆ หรือไม่?
Skeith

2
โดยการเขียนตัวอย่าง - การทดลองและข้อผิดพลาดเป็นวิธีที่ดีที่สุด ดูเพิ่มเติมที่การแก้ไข
Danny Varod

1

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

ฉันได้รับในกรณีของคุณและฉันยังคงเรียนรู้เกี่ยวกับภาษาเหล่านั้น ฉันเรียนรู้มากมายเกี่ยวกับระบบฝังตัว

นี่คือคำแนะนำของฉัน:

  • อ่านหนังสือเหล่านั้น: /programming/388242/the-definitive-c-book-guide-and-list -> เริ่มต้นด้วยหนังสือเกริ่นนำแม้ว่าคุณจะรู้สึกว่าคุณไม่ได้เริ่มต้นเพราะคุณมี เพื่อ solifidy ความรู้พื้นฐานของคุณมากก่อนที่จะไป จากนั้นเรียนรู้เกี่ยวกับข้อ จำกัด ของ metaprogramming แม่แบบและระบบฝังตัว
  • ฝึกฝนบ่อยๆ: ยิ่งคุณใช้สิ่งที่เรียนรู้มากเท่าไหร่ก็ยิ่งเข้าใจมากขึ้นเท่านั้น ในจุดนี้วิธีการของฉันคือการทดสอบมุมภาษาและบริบทในโครงการทดสอบเล็ก ๆ ฉันยังมีโครงการบ้าน "ใหญ่" ที่ฉันควบคุมทุกอย่างและฉันฝึกฝนเทคนิคใหม่ ๆ และผลักพวกเขาจนกว่าพวกเขาจะพัง

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

คุณเพิ่งเริ่มต้นการเดินทางของคุณ


3
ไม่พูดถึงว่า "ผู้ใหญ่" ในขณะที่คุณใช้มันอยู่ไกลจาก "ไม่มีอะไรเหลือให้เรียนรู้" ยิ่งคุณเรียนรู้มากเท่าไหร่คุณก็จะยิ่งรู้มากขึ้นเท่านั้น
David Thornley

0

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

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

  • ใช้พอยน์เตอร์และการอ้างอิง (และโดยทั่วไปชอบการอ้างอิง) เรียนรู้และใช้โครงสร้าง smart_ptr <> เพื่อให้ได้การจัดการหน่วยความจำ "อัตโนมัติ"

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

  • เรียนรู้ STL: ใช้ string, iostream, exception และคลาส container และเลือกพวกมันเหนือ char *, FILE * และ char [] ประเภทข้อมูลทุกครั้งที่ใช้งานได้จริง

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

  • มีความสุข! อย่างจริงจัง - เลือกโครงการสัตว์เลี้ยงที่จะเขียนโค้ดขึ้น บางทีคนจรจัดกับบอร์ด Arduino ถ้าคุณชอบโครงการการเขียนโปรแกรมฝังตัว

  • รับประสบการณ์ที่หลากหลาย - หากคุณใช้ Windows / Visual Studio C ++ เพียงลองเขียนโค้ดสำหรับ Linux / g ++ หรือ OS X / XCode (คุณสามารถใช้รหัส C ++ บน Mac หรือคุณสามารถขยายขอบเขตและไปได้จริง ๆ สำหรับ Objective-C เพื่อดูว่าสาขาภาษา OOP อื่น ๆ จัดการกับสิ่งต่าง ๆ ได้อย่างไร!)

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