Verbesserung der Ebene meines C / C ++ - Codes


16

Ich programmiere jetzt seit 3-4 Jahren und habe das Gefühl, ich kann nicht länger als Anfänger bezeichnet werden, aber ich habe einige Fragen auf dieser Seite gelesen und denke, über WTF reden sie? Mir geht es genauso, wenn ich heutzutage Programmbücher kaufe.

Ich habe einige anfängliche Programmierbücher gelesen, einige über C / C ++ und andere über Spiele. Ich habe einige komplexere Dinge geschrieben, wie zum Beispiel sehr einfache AI-, serielle und TCP / IP-Schnittstellen.

Ich habe vor, ein Spielprogrammierer zu werden, habe mich aber in letzter Zeit ein wenig für eingebettete Systeme interessiert, nachdem ich die Gelegenheit hatte, daran zu arbeiten (die serielle Schnittstelle).

Ich habe es sehr schwierig gefunden, Materialien zu finden, mit denen ich nach Abschluss der Einführungs- und Anfängerbücher weiterlernen kann, da es keine C ++ - Bücher für Fortgeschrittene gibt, die ich finden kann.

Welchen Rat würden Sie geben, um mein Wissen und meine Fähigkeiten zu erweitern und zu verbessern? Spezifische Ressourcen wären sehr dankbar.


Für C ++ - Bücher siehe diese Frage: stackoverflow.com/questions/388242/…
Naveen

Antworten:


10

Wenn Sie über C / C ++ sprechen, könnten Sie definitiv zusätzliche Erfahrung gebrauchen. Der erste Hinweis, den ich Ihnen geben werde, ist, dass C und C ++ völlig unterschiedliche Sprachen sind . Die beste Ressource zum Erlernen von C ++ ist StackOverflow - es gibt viele Leute, die über eine enorme Menge an Erfahrung und Wissen verfügen.

Das nächste, was Sie tun müssen, ist, ein großes Projekt zu starten, beispielsweise den Versuch, eine 3D-Grafik-Engine in einer einfachen API wie DirectX zu schreiben. Wenn Ihr Design kläglich fehlschlägt, wie es bei allen ersten Projekten der Fall ist, erfahren Sie etwas darüber, wie nicht programmieren.

Sie können diesen Link auf StackOverflow überprüfen, um eine große Liste guter Bücher zum Erlernen von C ++ zu erhalten.


3
Nein, die beste Ressource zum Erlernen von C ++ ist ein gutes Buch oder vorzugsweise Bücher.
Neil Butterworth

+1 Zum Starten eines Großprojekts. Ich habe durch das Durcharbeiten einer 3D-Grafik-Engine mehr gelernt als alles, was ich in einem Buch gelesen habe. Es zwingt Sie, in ungewohnte Situationen zu geraten, deren Lösung Nachforschungen erfordert. Es ist nicht schön, es ist nicht effizient, aber Sie werden etwas lernen.
SC Ghost

+1 für "Wenn Sie über C / C ++ sprechen, könnten Sie definitiv zusätzliche Erfahrung gebrauchen." -1 für "Die beste Ressource zum Erlernen von C ++ ist StackOverflow", daher keine Abstimmung.
Residuum

5

Erhöhen Sie zunächst Ihren theoretischen Hintergrund in dem, was Sie noch nicht wissen. Studieren Sie die Theorie und schreiben Sie einige kurze Beispiele.

Ein Beispiel für einen grundlegenden theoretischen Hintergrund ist:

  • Algorithmen und Datenstrukturen
  • Software-Design (UML, Design Patterns, OOP)
  • Betriebssysteme und parallele Programmierung

Erwägen Sie dann das Erlernen einer weiteren Sprache (z. B. Java oder C #). - Das Erlernen zusätzlicher Sprachen hilft Ihnen dabei, die Vor- und Nachteile der von Ihnen verwendeten Sprache besser zu verstehen und bewährte Methoden zu erlernen, die Sie möglicherweise nicht kennen.

Wählen Sie als nächstes eine neue Domain (Webprogrammierung, Computergrafik, Bildverarbeitung, Computer Vision, Datenzugriff, ...). Studieren Sie die Theorie und schreiben Sie einige kurze Beispiele.

Erstellen Sie als Nächstes ein umfangreiches Beispiel, das eine mehrschichtige Anwendung enthält, die den Datenzugriff, die Benutzeroberfläche und eine bestimmte von Ihnen ausgewählte Domäne verwaltet. Legen Sie Wert auf die Architektur der Anwendung (stellen Sie sicher, dass die Teile so lose wie möglich miteinander verbunden sind).

Hoffentlich lernen Sie, neue Ansätze und Technologien zu erlernen und in eine gute Architektur zu integrieren.


Speziell für die Spieleprogrammierung empfehle ich die Auswahl der folgenden Domänen / Technologien:

  • Grundlagen der Bildverarbeitung
  • Beliebige spezifische UI-Technologie
  • Grundlagen der Computergrafik
  • Beliebige Grafik-Engine (zB DirectX, OpenGL, OGRE, ODG, Java3D, ...)
  • Grundlagen der mechanischen Physik
  • Beliebige Physik-Engine (zB PhysX, ...)
  • Beliebige Spiele-Engine (zB XNA, ...)
  • Multithread-Programmierung
  • Verteilte Programmierung


Bearbeiten:

Wie lernt man:

  • Lesen Sie Beispiele aus CodeProject und führen Sie sie aus.
  • Durchsuchen Sie einige Bücher in einer Buch- / E-Book-Bibliothek oder einem E-Book-Geschäft, bis Sie einige Bücher finden, die Ihnen gefallen (die zu Ihrem Lesestil passen + die Themen abdecken, über die Sie lesen möchten).
  • Blogs lesen.
  • Probieren Sie es aus und fragen Sie bei StackOverlow, wenn Sie nicht weiterkommen.

Ich kenne direkt x. 2. Ich habe darüber nachgedacht, kann aber keine Ressourcen finden, die über die Grundlagen hinausgehen. Haben Sie einen Rat, wie Sie die Dinge lernen können?
Skeith

2
Durch das Schreiben von Beispielen - Versuch und Irrtum ist der beste Weg. Siehe auch Bearbeiten.
Danny Varod

1

Wenn Sie C ++ (in Kombination mit C) verwenden, haben Sie in der Regel mehr zu lernen, um die WTF zu verstehen, über die sie sprechen. C ++ besteht aus mehreren Sprachen, mehreren Abstraktionsebenen, die an einem Ort leben, und es braucht viel Zeit, um alles einmal zu untersuchen und dann zu verstehen, was Sie gerade gesehen haben.

Ich war in deinem Fall und lerne immer noch über diese Sprachen. Ich lerne auch viel über eingebettete Systeme.

Hier ist mein Rat:

  • Lesen Sie diese Bücher: /programming/388242/the-definitive-c-book-guide-and-list -> Beginnen Sie mit den Einführungsbüchern, auch wenn Sie sich nicht als Anfänger fühlen, denn Sie haben Um Ihre Grundkenntnisse zu festigen, bevor Sie weitermachen. Erfahren Sie dann mehr über Vorlagen-Metaprogrammierung und Einschränkungen für eingebettete Systeme.
  • Übe viel: Je mehr du anwendest, was du lernst, desto mehr verstehst du es. In diesem Punkt gehe ich so vor, dass ich in kleinen Testprojekten jede Ecke der Sprachen und des Kontexts teste. Ich habe auch "große" Heimprojekte, bei denen ich alles unter Kontrolle habe, neue Techniken übe und sie pushe, bis sie brechen.

Gehen Sie nicht davon aus, dass Sie bereits viel über Programmierung wissen. Die meisten Entwickler werden erst nach mehr als 10 Jahren Praxiserfahrung mit unterschiedlichen Kontexten und Arten von Projekten, Plattformen usw. in der Programmierung reif.

Du beginnst gerade deine Reise.


3
Ganz zu schweigen davon, dass "ausgereift", wie Sie es verwenden, bei weitem nicht "nichts mehr zu lernen" ist. Je mehr Sie lernen, desto mehr Dinge, die Sie kennen, wissen Sie nicht.
David Thornley

0

Aufgrund Ihres Interesses an eingebetteten Programmen und Spielen würde ich Ihnen auch Folgendes empfehlen: Sie können die Buchlisten der oben genannten Beiträge durchsuchen, um gutes Quellenmaterial zu all diesen Themen zu finden. Ein Buch, das ich für wesentlich hielt, war The C ++ Standard Library: Ein Tutorial und eine Referenz

  • Wenn Sie mit den Grundlagen von OOP nicht vertraut sind, lernen Sie diese zuerst. Verstehen Sie die Grundlagen der Vererbung und Kapselung. Wissen, wie sich die virtuellen, öffentlichen / geschützten und privaten Schlüsselwörter sowie die statischen Schlüsselwörter verhalten.

  • Seien Sie mit Zeigern und Referenzen vertraut (und bevorzugen Sie im Allgemeinen Referenzen). Lernen Sie das Konstrukt smart_ptr <> kennen und verwenden Sie es, um eine "automagische" Speicherverwaltung zu erreichen.

  • Erfahren Sie, wie Sie C ++ - Vorlagen verwenden - zunächst nur als Container-Datentypen. Sie werden ständig neue und leistungsstärkere Techniken entdecken, die C ++ - Vorlagen über die Metaprogrammierung ausführen können.

  • Erlernen Sie die STL: Verwenden Sie Zeichenfolgen, iostream, Ausnahmen und die Containerklassen und ziehen Sie sie den Datentypen char *, FILE * und char [] vor, wann immer dies sinnvoll ist.

  • Beginnen Sie mit der Verwendung von Teilen der Boost-Bibliothek. Ich empfehle Ihnen, zuerst deren Asio und Thread-Bibliothek zu lernen, je nach Ihren Interessen. Dies ist eine sehr leistungsstarke, plattformübergreifende Open-Source-C ++ - Quellbasis, mit der Sie hochwertigen Code schreiben können, der auch portabel ist. (Viele Ergänzungen des C ++ - Kernstandards haben ihren Ursprung in Boost-Beiträgen.)

  • Habe Spaß! Im Ernst - such dir ein paar Lieblingsprojekte aus, um sie zu programmieren. Vielleicht mit Arduino-Boards basteln, wenn Sie eingebettete Programmierprojekte mögen.

  • Machen Sie sich ein wenig Erfahrung - wenn Sie nur Windows / Visual Studio C ++ verwendet haben, versuchen Sie, Code für Linux / g ++ oder OS X / XCode zu schreiben (Sie können C ++ auf dem Mac codieren oder Ihren Horizont erweitern und loslegen) für Objective-C, um zu sehen, wie ein anderer Zweig der OOP-Sprachen die Dinge angeht!)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.