Woran erkennt man einen guten Entwickler und woher weiß ich, ob ich dazu in der Lage bin?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Der Programmiersektor ist ein breit gefächerter Bereich und mir ist bewusst, dass man unmöglich sagen kann, wo genau man steht.

Das Problem sind hierbei auch die Vorstellungen, die durch Drittparteien einfließen, welche letzten Endes aber auch ziemlichen Einfluss auf den Begriff des guten Programmierers haben. Ich meine hiermit die Unterscheidung zwischen Hobbysektor und professionellem Bereich, auf den der Markt (bzw. Kunden und Projektmanager) wirken.

Als Hobbyprogrammierer reicht es vielleicht schon aus, sich mit der Programmiersprache die man nutzt, gut auszukennen und selbstständig Probleme lösen zu können. Seine Anwendungen haben im Vergleich zum professionellen Gebrauch aber vielleicht nicht so große Chancen, wenn er sich nicht mindestens an deren Standards hält.

Als ersten Kritikpunkt würde ich sagen: Ein Programmierer weiß, wie er brauchbaren Code schreiben kann.

Dazu hatte ich vor ungefähr zwei Jahren schon einmal einiges geschrieben, daher verweise ich an dieser Stelle nur darauf: Was sind die Anforderungen an brauchbaren Code?

Das der Programmierer dafür auch die nötigen Tools ausreichend beherrscht, sodass das Ziel erreicht werden kann (also auch weiß, was er da tut), ist meines Erachtens eine Selbstverständlichkeit. Keine Voraussetzung ist hierfür ein Kenntnisstand von 100 Prozent. Code lässt sich oft noch und noch verbessern (deswegen gibt es Code Refactorings), Fehler sind natürlich. Ein Programmierer muss nicht jede Funktionalität kennen, die seine IDE (oder irgendein anderes Tool) integriert hat - er muss lediglich wissen, wie er für sich produktiv arbeiten kann.

Bei dem Wort produktiv kommt man soweit aber auch wieder zu dem Punkt, die heutige Vorstellung im professionellen Bereich einfließen lassen zu müssen, die ziemlich konträr zu der obigen Regel sein kann. Die der Kunden und (etwas abgeschwächter) der Projektmanager tendiert vor allem auf Schnelligkeit. Ein guter Programmierer löst Probleme in kurzer Zeit, denn es kostet ja sonst viel Geld. Rationalität wird in dem Sinn leider ab und an ausgeblendet. Das heißt, auch wenn der Entwickler sagt, dass er nicht einschätzen kann, wie schnell sich ein bestimmtes Problem beheben/sich etwas Bestimmtes implementieren lässt, wird jemand versuchen, es in eine Zahl zu packen, um die er dann auch noch mit dem Kunden feilscht.

Dieser Umstand hat so großen Einfluss auf die Tätigkeit des Entwicklers, sodass ihm manchmal nicht einmal die Zeit oder die Möglichkeit gegeben wird, brauchbaren Code zu produzieren. Es gibt noch genügend alte Software (basierend auf COBOL, Perl, PHP, JavaScript, etc.), der es nur zu gut tun würde, einmal entrümpelt zu werden. Stattdessen muss aber drumherum entwickelt werden oder selbst Entrümpelungsaktionen wird mittendrin der Hahn abgedreht.

Um jedoch nicht weiter vom Thema abzuschweifen, würde ich noch einen weiteren Punkt hinzufügen, der ebenso vorrangig die professionelle Entwicklung betrifft: Ein guter Programmierer muss teamfähig sein.

Meist arbeitet man nicht allein an einem Projekt (unabhängig davon, ob zeitgleich oder ob irgendwann später einmal jemand an das Projekt muss, was eigentlich so gut wie immer der Fall ist).

Die größte Auswirkung hat dies auf den Code. Wenn man bereits weiß, wie man brauchbaren Code entwickeln kann, ist ein wesentlicher Teil schon erfüllt. Deine Teamkollegen können deinen Code gut weiterverarbeiten, alle passen sich an bestimmte Konventionen an.

Was noch dazugehört ist:

  • Das man sich abspricht, was man tut. Selbst wenn du ein guter Programmierer bist, können andere Kollegen gute Punkte einbringen oder bessere Lösungen parat haben.
  • Das man Wissen teilt und einholt. Sei es allgemeines Wissen über die Programmiertools oder projektspezifisches Wissen (z.B. in Form von: Dokumentation).

Zu guter Letzt sollte ein guter Programmierer darum bemüht sein, ein guter Programmierer zu bleiben. Wenn man es darauf bezieht, im technologischen Wandel aktuell zu bleiben, ist das zugegebenermaßen nicht immer einfach. Vor allem, wenn man an Projekten festhängt, die halt noch auf Technologien anno Lochkarte bauen. Dennoch gibt es ab und an neue Erkenntnisse, die auch für diese Anwendungsfälle brauchbar sein können. Wie man bspw. Software anders testen oder anders strukturieren kann. Möglicherweise kann man als Entwickler doch gewissen Einfluss auf Entscheidungsträger ausüben, Software an gewisser Stelle zu aktualisieren. Dies muss sich allerdings gut argumentieren lassen.

Sollte ich nun noch etwas vergessen haben... entweder mir oder jemand anders fällt es ein und es findet sich in den Kommentaren wieder oder du wirst irgendwann einmal mit der geringschätzigen Frage konfrontiert werden, wieso du denn XYZ nicht kannst, weil es doch eine Kernkompetenz eines guten Entwicklers sei. 😜

Woran erkenne ich, ob ich das Zeug dazu habe?

Ein Punkt auf der Liste ist die eigene Motivation, sich verbessern zu wollen. Es ist natürlich, dass man sich nicht kontinuierlich steigern kann. Es gibt auch Phasen, in denen das nicht so einfach möglich ist. Doch man sollte nicht dauerhaft stagnieren.

Der zweite Punkt ist Reflexion, die sich nicht nur auf sich selbst bezieht, sondern ebenso auf das, was andere tun oder vorgeben. Ein spontanes Beispiel hierfür: Das Singleton-Pattern.

  • Ist es gut oder schlecht, dieses anzuwenden?
  • Passt es, wenn ich es in meinem Projekt verwende?
  • Wofür brauche ich es?
  • Inwiefern wiegen hier Vor- und Nachteile?

Es kann ziemlich unpassend sein, muss es aber nicht. Selbst denken ist wichtig.

Darauf basierend folgt ein dritter Punkt: Es bringt nichts, sich mit Problemen stunden-/tagelang zu quälen. Du wirst nur ein guter Programmierer, wenn du auch erkennst, wann du Hilfe brauchst / ob du dich mit jemanden beraten musst.

Selbsteinschätzung hilft dir generell. Um dies zu üben, kann man Events wie den Game Jam nutzen. Einige Hochschulen veranstalten auch Codecamp-Prüfungen (die Prüflinge müssen hierfür in 24-48h eine Programmieraufgabe lösen).

Immer wieder lese ich darüber, dass das Erkennen von Problemen und Algorithmen zur Lösung zu erschaffen einen guten Programmierer ausmachen.

Ja, das sollte mit drin sein. Vielleicht formt man den zweiten Punkt noch etwas um: Recherchieren / mit Dokumentationen umgehen können, gehört auch dazu. Viele Dinge muss man ja nicht einmal mehr via Algorithmus lösen, sondern es reicht aus, irgendein Property / Setting zu setzen oder vielleicht das Problem lediglich weiter zu delegieren, weil man nicht für dessen Lösung zuständig ist.

Ich habe auch das Gefühl von Programmierbereich zu Programmierbereich zu pendeln. Dabei bleibt das Gefühl zurück, etwas angefangen zu haben, aber nicht richtig gelernt zu haben.

Nun, dagegen kannst du ja angehen, indem du dir einfach mal einen bestimmten Bereich herausnimmst und dich diesem wirklich längere Zeit widmest. Du hast in deiner Liste ja z.B. Spring, HTML, CSS und SQL als Technologien angegeben. Das heißt, Java solltest du in den Grundlagen bereits beherrschen? Wie viel hast du mit all diesen Kenntnissen bisher gemacht?

Du kannst viele Projektideen zur Webentwicklung sammeln oder ein zentrales Projekt bauen, welches du immer weiter erweiterst.

Ansonsten kannst du an Events (wie oben genannt: Dem Game Jam, und es gibt noch viele andere) teilnehmen, um dort mit anderen Entwicklern in Kontakt zu kommen und so einmal zu testen, wie weit du denn in deinem Kenntnisstand ungefähr stehst.

An sich kann ich nur sagen, dass du an sich nicht unbedingt einen Teilbereich brauchst, indem du dich gut auskennst, generell geht es schon um das Verständniss der Algorithmen. An sich gibt es sehr viele Entwickler, die garnicht unbedingt selbst Code schreiben, sodnern nur Algorithmen entwickeln.

Dass du dich mit vielen programmierbereichen auseinandersetzt ist sicherlich nicht falsch. Damit hast du schon vieles gesehen und Erfahrungen gesammelt.