Skip to content

16 Jahre jung und gute C++-Erfahrungen

Gestern hat sich hier ein neuer Schulpraktikant vorgestellt. Bemerkenswert war, dass er gute C++-Kenntnisse hat, und das nicht nur auf dem Papier, sondern reell.

Daher hat er noch am Ende des Vorstellungsgesprächs eine Zusage und heute seinen Praktikumsvertrag per Post bekommen.

Ich bin sehr gespannt!

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Kai

Dabei kann es sich nur um eine Wiedergeburt handeln. 16 Jahre ...

Andreas

Gerade im dem Alter keine Kunst.
Mit 15 angefangen kann man da mit 16 schon verdammt fit sein.

Man lernt einfach viel schneller in so jungen Jahren.

Deswegen beeindrucken mich auch diese ganzen "Wunderkinder" die irgendwelche Instrumente nicht mehr im geringsten.

Theodore

Nach meiner Beobachtung gibt es beim Programmieren verschiedene Stadien, die jeder Programmierer durchmachen wird. Viele scheitern leider an Punkt 3 oder 4.

1. Programmieren
2. Programmieren, dass es funktioniert
3. Programmieren, dass es funktioniert und gut lesbar ist
4. Programmieren, dass es funktioniert, gut lesbar und effizient ist
5. Programmieren, dass es funktioniert, gut lesbar, effizient und wieder verwertbar ist.

Wie sonst könnte man erklären, dass sich Konstrukte wie

for (int i = 1; i < X.length; i++) {
...
}

so beharrlich halten.

hardwarefuzzi

Als Hardwarefreak, der keine Ahnung vom Programmieren hat (und daher zumindes Achtung vor allen, die wissen, wie das geht):

Was genau macht dein Codeschnipsel - und wie wäre es besser (und warum)?

Tetja Rediske

Ist eine einfache Schleife, es geht aber hier darum, dass i und X eben keine sprechende Namen haben, also durch Ihren Namen sagen was Sie sind.

tyler

Bei "i" würde ich zuerst an eine ansonsten irrelevante Schleifenvariable denken und siehe da: Genau das ist es in dem Beispiel auch!

=>Die Variable sagt unter Umständen schon genug über sich aus wenn sie ansonsten nicht benötigt wird.

Grundsätzlich zu "16 Jahre jung und gute C++-Erfahrungen":
So jung und schon so verdorben!

Theodore

Wer c++ kann, der hats doch eigentlich schon. Die restlichen Programmiersprachen sind nur Dialekte :-P

hans

das mag vielleicht für Objekt orientierte Programmiersprachen gelten. Aber für funktionale und logische (Haskell, Prolog) sicher nicht ;)

Christoph

Der Codeschnipsel iteriert von i = 1 bis zur Länge von X. Ohne X genauer zu kennen würde ich aber hier keine Aussage treffen wollen warum das hier schlecht ist.

Theodore

Generell ist es nicht schlecht so zu programmieren, allerdings erzeugt man hier durch das Postinkrement einen Zwischenwert, der sowieso verworfen wird. Darum sollte man hier kein Postinkrement (das den alten Wert und neuen Wert im Speicher hält) nutzen, sondern ein Preinkrement (also ++i) verwerden, das den Wert direkt zuweist.

Kleine Ursache große Wirkung: Je nachdem wie oft man diese Schleife durchläuft kann es eine signifikante Laufzeitverbesserung bewirken.

Beispielsweise bei Iteratoren: http://www.digitalpeer.com/id/where

Wenn der Compiler es erkennt, optimiert er es weg, aber man sollte sich generell angewöhnen effizient zu programmieren. Bei Embedded Systems ist das manchmal ein wichtiges Kriterium.

Christoph

Vorneweg: Ich kann nur C, kein C++

Ich würde mal vermuten das in den meisten Fällen der Compiler den Unterschied erkennt - und das bei dem von dir verlinkten Beispiel der unnötige ständige Aufruf der Methoden v.begin() sowie v.end() wesentlich größeren Einfluss auf die Laufzeit hat ;-)

Jens

Sowas erkennt ein Optimizer im Schlaf. Compiler dein Beispiel doch mal mit -O1 (also der kleinstmöglichen Optimierungsstufe) - ja, er hält i sogar im Register :-).

Christoph

Wobei man sich mit dem "im Register halten" durchaus auch in den Fuß schießen kann: wenn sich der Inhalt der Variablen während der Iteration z.B. durch einen Interrupt ändert und das Programm nichts davon mitbekommt...

Jens

Dann sollte mal die Variabel auch korrekterweise als volatile kennzeichnen. Es könnte ja auch sein das der Compiler die ganze Schleife einfach "unrolled".

Theodore

Stimmt, wobei volatile das ganze wieder extrem verlangsamen würde.

Peter

Ich denke in diesem Zusammenhang ist folgender Blogeintrag interessant, habe ich vor einiger Zeit auf Planet-Gnome entdeckt:
http://psankar.blogspot.com/2011/03/pre-vs-post-increment-performance.html

Post- und Preinkrement spielt beim Ueberladen der Operatoren in C++ eine Rolle im Bezug auf die Performance! Ansonsten hat sich die Situation durch Aenderungen am GCC beim Inkrementoperator fuer die einfachen Basisdatentypen (hier int) wohl geaendert.

Zitat:
/*Earlier, gcc used to generate sub-optimal code for post-increment and that is why pre-increment was used then. Compilers have come a long way and programmers don't need to think in weird way to outsmart the compilers anymore. */

Okay. Akzeptiert.
Etwas vorsichtig bin ich beim Genuss der Messergebnisse, laut dem Autor ist der Postinkrementoperator in C++ jetzt schneller als der Preinkrementoperator, bei Basisdatentypen. Und bei dem was Mono/C# da anstellt...

Bei Gelegenheit mache ich da selber mal ein paar Tests, ich will ja nicht einfach alles glauben ohne es ueberprueft zu haben.


Der Fetzen hier koennte auch zum Verstaendnis helfen (Ueberladener Inkrementoperator bei Objekten):
http://www.willemer.de/informatik/cpp/cppovrld.htm (runterscrollen bis zum Ueberladen des Inkrementoperators...)

Theodore

Werd ich mir mal zu Gemüte führen. Danke für die weiterführenden Infos =)

Carsten

Mir ist eher der Zugriff auf .length aufgefallen: Dies dürfte die teuerste Operation der Schleife sein. Bei 95% aller Schleifendurchläufe spielt die Reihenfolge aber keine Rolle, da ist es viel effizienter:

for ( i=X.length-1; i>=0 ;--i)

zu schreiben.

Was die Bezichner angeht: Für kurze Schleifen ok. Aber wenn die Schleife nicht mehr auf den Bildschirm passt, eine zweite Schleife dazukommt, dann hilft es den Kollegen schon, wenn sie der Variablen ansehen, wie das Objekt dazu heisst.

Theodore

Es kommt immer drauf an. Für MS VC++ wäre length ein Property, der nicht erst bei der Abfrage ermittelt wird, sondern immer den aktuellen Wert hat. Damit hat die Längenabfrage immer O(1). Kritischer wäre die Abfrage bei einem String mit length(). Das kommt immer "frisch" auf den Tisch und kostet richtig viel.

Bezeichner sind wichtig, ja. Man sollte sich daher einen eigenen Stil angewöhnen (oder sich an Teamvorgaben halten). Eindeutig Namen sparen oft eine Menge ärger. Bei sind Zählvariablen immer i oder j. Punkte im Koordinatensystem heißen x oder y... usw...

Anonym

Da ist aber das ursprüngliche Beispiel wesentlich angenehmer zu lesen

Anonym

Hätte das jetzt eigentlich eher unter "off by one" einsortiert...

LordOfVisualC

da gibts aber doch noch ein paar Steigerungen:

- Vorgaben machen, wie alle beteiligten Programmierer zu arbeiten haben, damit es funktioniert, gut lesbar, effizient und wieder verwertbar ist.
- Reviews durchführen, ob sich alle dran halten ;-)
- Prozesse so aufstellen, dass die lessons learned wieder in die Vorgaben münden
- Prozesse so aufstellen, dass die lessons learned wieder in die Prozessgestaltung fliessen
- die Einhaltung dieser Prozesse auch dokumentieren

Hört sich wahrscheinlich für die meisten sehr kompliziert an, aber wenn man's mal kann, dann bringt's wirklich was.

Code-inchen

Wenn man sich nur genug damit beschäftigt ist es wohl auch ein einfaches in den jungen Jahren gut zu werden :] .
Man muss wohl nur das nötige Interesse mitbringen :)

JoDerBaer

Ja, daran hapert es aber wohl. In der (9. Gymnasial-) Klasse meiner Stieftochter gibt es anscheinend nur Loser, da kann keiner auch nur "irgendwas" (und sei es Reiten, Stricken oder Lasercutten). Da hab ich schon quasi an meiner zweiten Jugend-Forscht-Arbeit gebastelt... und meine Klassenkameraden konnten zum Großteil auch in irgend einem Fach oder Hobby glänzen. Schöne neue Welt...

Verwunderter

Meine Schulzeit war vor rd. 20 Jahren vorbei und was uns damals als Informatik-Unterricht angeboten wurde, war eine Zumutung. Der Lehrer war halt Mathematiklehrer, seine "Basic"-Kentnisse hat er sich in der Freizeit angeeignet und der Unterricht war auf ziemlich niedrigem Niveau, hat aber gleichzeitig die Mehrzahl der Schüler entweder vollkommen verwirrt oder überfordert.

Irgend etwas sinnvolles hab ich jedenfalls dort nicht gelernt (meine Vorkenntnisse überstiegen seine um ein Vielfaches), außer seiner merkwürdigen Erkenntnis, alles was unter einer Million Dollar kostet ist kein Computer, sondern ein Rechner.

Arnim

So war das bei mir auch mal... Nur gab es damals keine Firmen die einem das geglaubt haben und man fing das Praktikum beim Windows-PCs installieren an.... Hat er Glück!

Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA

BBCode-Formatierung erlaubt
Formular-Optionen