Modernes C++ programmieren
Modernes C++ programmieren erfordert eine laufende Weiterbildung. In diesem Beitrag gebe ich eine kurze Einführung in aktuelle C++ Themen und wie man seinen Code am besten auf einen aktuellen Stand bringt.
Modernes C++ programmieren
Der ein oder andere Leser mag an der Fülle meine C++ Artikel (wie zuletzt zum professionellen Logging oder dem XML Parser) bemerkt haben, dass C++ meine Lieblingssprache ist. C++ wird heute kaum noch gelehrt und die Zahl an qualifizierten Entwicklern sinkt! Die meisten Firmen setzen heute auf Sprachen mit einer virtuellen Maschine mit Garbage Collector wie C# oder Java die weitaus weniger performant sind. Alter Code wird meist entsorgt und in den neuen Technologien neu implementiert. Vielfach wird vergessen, dass C++ zwar alt ist, aber durch die laufenden Standards (zuletzt C++ 17) ständig modernisiert wird. So kommt 2020 der C++ 20 Standard, der aus heutiger Sicht gute Fortschritte bringen wird. Trotzdem werden zahlreiche Neuerungen nicht mit standardisiert und man darf auf mindestens noch einen weiteren Standard hoffen.
Standardisierungen
Eine Übersicht zu den ISO Standards von C++ findet man auf dieser Webseite. Es ist erstaunlich wie aktiv an der Programmiersprache gearbeitet wird. Neue Konstrukte aus anderen Sprachen werden mit den verfügbaren Schlüsselwörtern und Zeichen nachgebaut. So gibt es beispielsweise auch Lambdas, Collections und Algorithmen die von Java oder C# bekannt sind. Dank der Standards kann man heute quasi ohne Pointer C++ entwickeln. Falls nötig verwendet man Smartpointer. Das meist als Totschlagargument gegen C++ gehandelten Null Pointer Exceptions oder Memory Leaks sind bei moderner Programmierung gar nicht mehr möglich.
Lernen, lernen, lernen
C++ programmieren bedeutet stetig neues Lernen. Es gibt quasi keinen C++ Programmierer der behauptet 100% mit der Sprache vertraut zu sein. Es gibt so viele Details, dass es fast unmöglich scheint alle zu kennen. Noch dazu ändern sich diese laufend. Schlüsselwörter bekommen neue oder andere Bedeutungen und man müsste für jeden Compiler und jeden Standard alle Möglichkeiten kennen um tatsächlich ein Allround C++ Entwickler zu sein. C++ ist nur so gut wie dessen Compiler und der ist mittlerweile besser als jeder Mensch. Ich habe in meiner Ausbildung vor 15 Jahren noch gelernt, dass man struct zum Beispiel auf 32 oder 64 Byte auffüllen soll, notfalls mit Dummy Werten, da damit der Prozessor schneller arbeiten kann. Völliger Unfug aus heutiger Sicht. Heute gilt die Regel: mach keine Optimierungen, der Compiler wird diese immer besser machen.
Tipps: für Interessierte habe ich den Tipp mehrere unterschiedliche aktuelle C++ Bücher zu lesen. Erst wenn man die selben Themen aus Sicht unterschiedlicher Autoren kennt, kann man sich ein gutes Bild machen. Weiters macht es Sinn beim Standard die aktuelle Entwicklung zu verfolgen. Ein aktueller Compiler und Zeit zum Experimentieren damit schadet auch nicht.
Problem
C++ hat ein großes Problem. Es war lange Zeit die beliebteste Programmiersprache und auch zahlreiche wenig qualifizierte Entwickler haben sich daran versucht. In vielen Firmen existiert unwartbarer schlechter C++ Code. Aus diesem Grund wirft man diesen besser weg und entwickelt neu. Zusätzlich kommt hinzu, dass die Einarbeitung für neue Entwickler in C++ schwer ist. Es gibt im Internet viele Code Samples die uralt sind und so nicht mehr verwendet werden dürften bzw. sollten. Das erkennt man erst mit viel Erfahrung. Heraus kommt meist ein Mischcode aus C und C++ jeglicher Standards. Aktuelle Compiler zeigen Sicherheitswarnungen zu unsicheren Funktionen an, können aber eine schlechte Programmierung nicht ganz verhindern. Der kluge C++ Entwickler sucht also besser nach einer Möglichkeit immer dem aktuellsten C++ Standard zu folgen.
Fazit
Ein kurzer Ausflug ins Thema modernes C++ programmieren. Meiner Meinung nach die beste Programmiersprache. Hält man sich an aktuelle Standards sind bekannte Probleme von C++ Programmen fast auszuschließen. Mit der hardwarenahen Programmierung ist man immer performanter als mit C# oder Java. Meistens muss man relevante Teile sowieso in C++ entwickeln, warum also nicht gleich nur darauf setzen?
Was ist deine Meinung zu C++?