Was sollte ein C++ Lernprojekt auf jeden Fall beinhalten?
-
Hallo!
War die letzten Jahre hauptsächlich mit C und Java am Weg, möchte aber nun endlich auch vernünftig C++ lernen.
Ich bin gerade dabei, ein Projekt in C++ zu verwirklichen. Dabei geht es um einen evolutionären Algorithmus, bei welchem kleine Tiere mit künstlichen neuronalen Netzen als deren "Gehirn" durch eine Landschaft marschieren und fressen müssen. Das ganze visualisiere ich natürlich (wxWidgets und GDI, später vllt. SFML), um den Lernfortschritt von Generation zu Generation zu sehen.
Nun meine Frage: Was sollte ich auf jeden Fall ins Projekt einbauen, damit ich möglichst viel C++ typische Sachen lerne? Was erachtet ihr als besonders wichtig?
Stellt euch einfach vor, in eurem Unternehmen wird ein neuer C++ Programmierer aufgenommen, was sollte der auf jeden Fall können?
-
Glutamat schrieb:
möchte aber nun endlich auch vernünftig C++ lernen.
Und genau das geht so auf keinen Fall. Du mußt gute C++-Bücher wie "Effektiv C++ programmieren" (wozu einen C++ so zwingt, was man so nicht erwartet hätte, aber was man unbedingt wissen muß) lesen BEVOR Du Java durch den C++-Compiler jagst. Ansonsten gewöhnst Du Dir einen javaesken C++-Stil an, der Dir noch von großem Übel sein wird. Zwei Bücher sind besser als eins, sagen wir, nach "Modern C++-Design" (Template-Zeugs und Performance-Überlegungen weit jenseits von Java) tun wird und noch "Exceptional C++" (wozu einen sauberes C++ mit Exceptions-Handling zwingt, was gar nicht offensichtlich ist) rein und dann basteln wir das Programm.
Das Programm ist groß genug, um alles abzudecken, wenn Du auch mal dies oder das selber baust, nur um es mal gemacht zu haben, statt es aus der lib zu nehmen.
-
Poste einfach deinen Code hier, dann sagen dir die Leute schon was man in C++ anders macht.
-
Glutamat schrieb:
Nun meine Frage: Was sollte ich auf jeden Fall ins Projekt einbauen, damit ich möglichst viel C++ typische Sachen lerne?
Das ist der falsche Ansatz. Du solltest Sprachfeatures nicht benutzen, nur damit sie auch drin sind, sondern genau das, was in der jeweiligen Situation benötigt wird.
Wie die Sprachfeatures funktionieren und anzuwenden sind, lernst du am Besten, indem du sie erstmal einzeln jedes für sich betrachtest und analysierst (bzw. in einem Buch genügend drüber liest). In deinem größeren Projekt lernst du dann, wie du sie kombinierst - und das geht nur gut, wenn du sie schon kennst, sonst kommt Murks bei raus.Was erachtet ihr als besonders wichtig? Stellt euch einfach vor, in eurem Unternehmen wird ein neuer C++ Programmierer aufgenommen, was sollte der auf jeden Fall können?
Was ich für wichtig erachte, was in meinem Unternehmen gefragt ist, und was du können/lernen solltest, sind 3 ziemlich verschiedene Dinge. (Und was die 200 anderen User wichtig finden und was in deren Unternehmen gefragt ist sind vermutlich nochmal 400 andere Dinge...)
Ich persönlich bin Fan von Modellen, Modularisierung, Abstraktionsmöglichkeiten und (Compilezeit-)Sicherheit. Das heißt für mich sind Dinge wie Entkopplung, Kapselung, Templates, Typsicherheit, const-Correctness, RAII usw. wichtig. Speziellen Spaß hab ich an Template-Metaprogrammierung. Ich halte dagegen wenig von javaesken Monster-Klassenhierarchien (ich glaub Vererbungen mit mehr als 3 Ebenen hab ich bisher nur in Java produziert), C-Stil in C++-Code und wildem Pointergefrickel.
In meiner Firma wird relativ wenig mit Templates, der STL und Klassen überhaupt gearbeitet, da gehts eher um fachliche Korrektheit, ist aber auch von der Stelle abhängig (ich bin eher Techniker und hab Performance-Themen und ähnliches).
Was du brauchst und kennen/können solltest hängt davon ab, was du mit C++ machen möchtest. GUI-Programmierung? Embedded Systeme? Textverarbeitung?
Ich würd an deiner Stelle aber auf jeden Fall eins machen: Schreib dir einen großen Zettel, auf dem steht, dass du für C++ erstmal alles vergessen solltest, was du glaubst, von Java und/oder C auf die Sprache übertragen zu können. Den Zettel hängst du dir dann am Besten ins bad an den Spiegel. Wenn du das verinnerlicht hast, fängst du mit einem Einsteigerbuch an und lernst die Grundlagen von der Pike auf. Sonst passierts dir ganz schnell, dass du eine unmotivierte "C/C++"-Mischung oder Java für den C++-Compiler programmierst, und beides ist scheußlich

-
Danke für die Antworten!
Dann werd ich es einfach so machen, dass ich einerseits Bücher lese und parallel dazu an diesem oder anderen C++ Projekten arbeite.
Werd mir dann gleich morgen "Effektiv C++ programmieren" von der Uni Bib holen und es durcharbeiten anfangen!Ich muss halt auch dazu sagen, dass es auf der Arbeit (Ferialjob oder Nebenjob) mir leider nie möglich war, meine Programmiersprachen wirklich zu vertiefen, weil es immer nur drauf ankommt, möglichst schnell irgendeinen Code zu generieren, ob dieser nun "schön" ist war bis jetzt jedem egal. Und auf der Uni wird eher auf komplizierte mathematische Dinge geachtet, und nicht so auf den Programmierstil. Hab da z.B. mal die FFT in C++ implementiert, mathematisch gesehen echt super ausgearbeitet, programmiertechnisch so ein Mischmasch aus C und C++.
Daher möchte ich mir eben privat selber ein bisschen Nachhilfe geben, und gerade C und C++ vorweisen zu können ist schon mal nicht schlecht in einer Zeit, wo die meisten ihre Programme mit Java oder C# mehr oder minder zusammenklicken.
-
Glutamat schrieb:
Hallo!
Stellt euch einfach vor, in eurem Unternehmen wird ein neuer C++ Programmierer aufgenommen, was sollte der auf jeden Fall können?
Assembler
FFT in das Tierchenspiel intergrieren, etwa um Klangsynthese zu betreiben,(oder gehobene Ortungssymulation etc.) bzw. ein sich entwickelndes Kommunikationssystem unter den Tieren und alternative Möglichkeiten zur Klangsynthese miteingeben, möglichst Echtzeitfähig/performant.
Nettes performantes 64k oder 4k Demo mit besseren Sounds erstellen, als das was man so auf typischen Demos der Demoszener hören kann. Das dürfte nicht so schwer sein, aber ob der Bewerber das auch weiß? Zurück zum Tierchenspiel: Man sollte eine Soundengine in das Projekt einarbeiten können, eine Reihe von Hintergrundgeräuschen (auch Donner, Regen, Vogelgezwitscher, Warnrufe, Wasserfälle, Wind oder Hubschrauberüberflug simuliert, aber nicht mit Waves, sondern anhand von physikalischen Modellen, die z.T. mit den Tieren und deren Kommunikations und Aktionsgeräuschen interagieren, also z.B. ein Schwarm Vögel, der hoch in den gedachten Bäumen sitzt, und plötzlich auffliegt, was für die Tierchen ein Hinweis sein könnte, sich zu verstecken. Auch Tages und Jahreszeitenwechsel haben andere Hintergrundgeräusche, möglicherweise müsste man mehrere Soundengines kombinieren und gleichzeitig laufen lassen.
-
Glutamat schrieb:
Stellt euch einfach vor, in eurem Unternehmen wird ein neuer C++ Programmierer aufgenommen, was sollte der auf jeden Fall können?
Das ist so extrem abhängig von der Firma das du von jedem unterschiedliche Antworten hören würdest.
Bei uns wäre das wohl:
- Eigenständiges Arbeiten und logisches Denkvermögen (Mitdenken und Vorschläge einbringen schadet ebenso wenig)
- VCL-Kenntnisse (C++ Builder/Delphi)
- Mindestens grundlegende bis gute C++ Kenntnisse (mit zumindest einem groben Überblick über die Standardbibliothek).
- Mindestens grundlegende SQL-Kenntnisse, nach Möglichkeit aber auch hier mehr.
-
Glutamat schrieb:
Stellt euch einfach vor, in eurem Unternehmen wird ein neuer C++ Programmierer aufgenommen, was sollte der auf jeden Fall können?
Er sollte vor allem in der Lage sein, über den Tellerrand von C++ hinausschauen zu können. Bei uns wird nämlich nicht mit C++ entwickelt, sondern mit SAL (außerdem haben wir ein paar Anwendungen in C#, die ich von einem Kollegen "geerbt" habe, der Anfang des Jahres aufgehört hat).
Für einen Programmierer ist es imho wichtiger, bestimmte Grundkonzepte verstanden zu haben und prinzipiell anwenden zu können. Das Verständnis für die syntaktischen Feinheiten einer Sprache kommt dann von alleine.