Wer definiert denn was schlechter Code ist? Mit wachsender Erfahrung wird man immer sagen dies oder jenes war schlecht.
Vollkommen richtig. Guten oder schlechten Code bemerkt man normalerweise erst nach ein paar Jahren, wenn man den Code immer wieder verändert.
Vor allem im professionellen Bereich fällt es auf.
Man hat z.B. 2 Programme, die beide 6 Jahre alt sind, und überlegt sich, in welchem man die neue Funktionalität abbilden soll, und lässt z.B. das Java und das C++ Team schätzen.
Erst dann fällts auf: Für die gleiche Funktionalität braucht das C++ Team 1 Woche, das Java Team 1 Monat.
Kleiner Tipp: der Unterschied liegt
nicht an der Programmiersprache :lol: (Man kann in jeder Sprache guten und schlechten Code schreiben)
Deshalb braucht man mMn auch Senior-Developer, die schon Software über den gesamten Lifecycle (Entwicklung, Wartung, Betrieb, Migration) hinweg betreut haben, um das Programm von Anfang an gut zu strukturieren.
Im privaten Bereich bleibt nur: learning by doing :-)
Und viel Refactoring. :D
Wenn man mehrere Dateien verwendet und versucht, den Code sinnvoll aufzuteilen, dann fallen einem die Unwegsamkeiten erstmals richtig auf.
Grundsätzlich würde ich sagen, je mehr Programmiersprachen man kennt und wirklich benutzt hat, um so mehr ändert sich der eigene Programmierstil; weil man neue Pattern und Denkweisen lernt.
Z.B. kann ich C++, D, Lisp, Java, C#, Go, Rust, PHP, Javascript, Typescript, uvm. und bin vor allem auch einigermaßen mit deren Denkweisen vertraut (nur die Syntax der Sprache lernen reicht nicht). Daher im obigen Post von mir auch die Beispiele aus anderen Sprachen.
Da der Code aber so einfach wie möglich bleiben soll, damit ihn auch jeder verstehen kann (bei einem Team halt super-wichtig; bei meinem Gedächtnis aber auch :lol: ), ist mein "Stil" quasi der "kleinste gemeinsame Nenner" aus einer Vielzahl an Sprachen.
Dann kann man entscheiden, was man benutzen will und was nicht.
"ooh, ich hätte gerne die CompileTimeFunctionExecution aus D in C++" => plötzlich gibts constexpr
"ooh, ich hätte gerne das MemoryManagement aus Rust in C++" => plötzlich gibts die GuidelineSupportLibrary für VisualStudio
"ooh, ich hätte gerne die Module aus Java in C++" => plötzlich gibts einen Module_TS
"ooh, ich hätte gerne das private aus C++ in Go..." => habe ich noch nie gedacht :lol:
Zu "private" gibts in vielen (vor allem neueren) Sprachen kein analoges Sprachkonstrukt. Ich sehe (zumindest im Moment) auch keinen "unschlagbaren Vorteil" an dieser Stelle.
Aber nur die Zeit wirds zeigen, vielleicht denke ich das ja doch irgendwann.
Entity Component Systeme ist auch ein sehr gutes Beispiel. Vor 10 Jahren hätte jeder gesagt: "WTF?!?? wie kann man so coden?!??".
Mittlerweile hat sich aber gezeigt, dass wenn man weniger Abhängigkeiten im Code hat, das doch ganz gut sein kann; und viele verzichten auf den reinen objektorientierten Ansatz und tiefe Hierarchien.
(Bis das aber bei manchen Firmen in den Coding-Guidelines erlaubt wird..., ich stelle mir gerade vor, wie ich einen Teil des Codes in einem ECS abbilde... meine Kollegen bringen mich sowas von um :lol: )
Außer Compiler-Entwickler, ASTs mit Visitor ist da eher dominierend - mal sehen, wie lange es dauert, bis sie drauf kommen, dass sich da ein ECS auch gut machen könnte, weil alle Visitors plötzlich 100 Mal schneller sind... :mrgreen:
Ich persönlich habe aber festgestellt, dass die Implementierungen alle noch eher experimentell sind, vor allem wenn es um den erhofften Geschwindigkeitsvorteil geht. Aber da wird in naher Zukunft einiges passieren, nehme ich an; besonders weil Unity3d da mittlerweile mitmischt, und die brauchen den Speed.
Links:
Anonyme namespaces:
https://www.youtube.com/watch?v=HrFtpSH-Eso
https://www.gamedev.net/forums/topic/66 ... namespaces
https://stackoverflow.com/questions/154 ... -functions
https://www.reddit.com/r/cpp/comments/4 ... namespaces
Module_TS:
https://www.youtube.com/watch?v=IA14LXnBcJg (Minute 31:00 zeigt auch anonyme namespaces als "common practice")
http://www.open-std.org/JTC1/SC22/WG21/ ... /n4465.pdf
Memory Management in C++ / GSL:
https://www.youtube.com/watch?v=JtMPGwA3MzQ
https://www.youtube.com/watch?v=JfmTagWcqoE