Bei den Fremdsprachen hat sich ein gemeinsamer Referenzrahmen der Sprachfertigkeit durchgesetzt. Europaweit spricht man vom Sprachniveau, das sich zwischen A1 und C2 bewegt. Wie verhält es sich äquivalent mit der Programmierfertigkeit?
Eine entsprechend stringente Abgrenzung gibt es beim Programmieren nicht. Dabei entscheidet der Kenntnisstand maßgeblich, auf welche Jobs man sich am aussichtsreichsten bewirbt und nicht zuletzt das mittelfristige Gehalt. Ab wann kann ich mich also Junior, Intermediate oder Senior bezeichnen?
Junior, Intermediate und Senior haben sich bei Stellenausschreibungen durch ihre weite Verbreitung in englischsprachigen Firmen durchgesetzt. Mögen sie auch noch so offiziell klingen, diese Bezeichnungen sind genauso informell wie Einsteiger, Fortgeschrittener und Experte im Deutschen und sind in etwa mit ihnen gleichzusetzen.
Dabei beziehen sie sich auf den praktischen Erfahrungsschatz des jeweiligen Programmierers. Einsteiger ist man nicht, wenn man gerade seine erste Programmiersprache lernt. Der Junior Programmierer hat durchaus viele Fertigkeiten, sie jedoch bisher noch nicht nennenswert im Berufsleben eingesetzt.
Junior
Ein Junior Programmierer kommt direkt von der Schule, Universität oder aus dem anderweitigen Selbststudium. Als solcher kennt er zwar die Theorie, hat aber wie oben bereits geschrieben keine einschlägige Berufserfahrung. Das gilt ebenso für Quereinsteiger, die sich zwar bereits in anderen Branchen aber noch nicht in der Softwareentwicklung behauptet haben.
In diesem Sinne haben Junior Entwickler durchaus bereits solide Programmierkenntnisse erworben. Und sie haben sicher schon die ein oder andere App (im Falle des Mobile-Entwicklers) oder Webseite (als Webentwickler) zu Übungszwecken im Rahmen von Kursen oder zur Realisierung eigener Projektideen gebaut. Doch ist das noch längst nicht mit der Routiniertheit eines alten Hasen des Geschäfts vergleichbar.
Junior Entwicklern gibt man gerne noch Anleitung von einem erfahreneren Kollegen. Die benötigen sie zur optimalen Aufgabenerfüllen auch, denn Junior Entwickler sind oft noch nicht rundum versiert im Debuggen oder Testen, was einen Großteil des Programmierens leider ausmacht. Auch beim Troubleshooting können die Jungen noch fachkräftige Unterstützung gebrauchen und sich so Best Practices aneignen.
Als Junior stößt man sich halt während der ersten zwei bis drei Berufsjahren noch die Hörner ab und tritt sicherlich noch in das ein oder andere Fettnäpfchen. Aber dafür sind diese Lehrjahre auch da. Idealerweise ist der Erfahrungsaustausch in der Firma durch den Intermediate oder Senior Kollegen als handfestes Mentoring-Programm gestaltet.
Wenn man sich genug ins Zeug gelegt hat und praktische Erfahrung gesammelt hat, fühlt sich diese neue Welt schon viel vertrauter an und man kann sich nach diesen Lehrjahren durchaus Intermediate Programmierer nennen. Bald schon wechseln sich die Perspektiven und man findet sich immer häufiger darin wieder seinerseits Erfahrung an neuere Kollegen weiterzugeben.
Intermediate
Aus dieser Ausführung leitet sich ab, dass ein Intermediate Entwickler typischerweise zwei bis sogar vier Jahre Berufsjahre auf dem Buckel hat.
Das drückt sich in soliden Programmierkenntnissen aus. Der geschriebene Code führt regelmäßig zu den gewünschten Ergebnissen. Auch Debuggen und Testen sind bekannte Vorgänge geworden, die fachkundig durchgeführt werden. Mit Troubleshooting sind Intermediates auch vertraut genug, um alleine klar zukommen.
Recht charakteristisch bei den Intermediates ist die Faszination der 3rd-Party-Tools. Klar: sie nehmen dem Entwickler Arbeit ab und machen das Programmierer-Leben einfacher. Bekannte Probleme sind gelöst, der Code wird schlanker, und man kann sich auf den eigentlichen Entwickler-Job konzentrieren.
Allerdings neigen Intermediate Developer gern zu Overengineering: zu viel des Guten. Gern wird eine Abhängigkeit nach der Anderen zum Projekt hinzugefügt, was zu einer längeren Build- oder Kompilier-Zeit und zu mehr Boilerplate-Code führt. Design Patterns sind ebenso eine tolle Sache, aber zu schnell angewendet führen auch sie gern still und leise zu erhöhter Code-Komplexität, die sich im Nachhinein nur schwer wieder reduzieren lässt.
Die neuen Probleme, die die cleveren Lösungen mit sich bringen können, von denen sich Intermediate Entwickler schnell begeistern lassen, werden oft erst durch langjährige Erfahrung abschätzbar.
Kurzum, ein Intermediate Entwickler kann gut mit Routineaufgaben umgehen, sollte aber für Architekturentscheidungen noch mit einem Senior Entwickler Rücksprache halten.
Senior
Und damit sind wir beim Senior Entwickler angekommen. Dieser hat die genannten Entwicklungsschritte bereits hinter sich gebracht. Mit vier und noch vielen mehr Jahren Berufserfahrung ist er ein Experte auf seinem jeweiligen Technologie-Stack Gebiet geworden, hat aber oft auch einschlägige Erfahrung in weiteren Technologien und Sprachen.
Senior Developer können wie bereits die Intermediate Developer coden, testen, debuggen und troubleshooten, um es auf Neudeutsch zu sagen. Sie kennen viele Best Practices aus eigener Erfahrung. Anstatt bestehenden Code bei hinzukommenden Anforderungen lediglich zu erweitern, schauen sie sich den Code genau an, verbessern und vereinfachen ihn wo möglich, und ziehen eine simple Lösung einer auch noch so Cleveren vor.
Die langjährige Erfahrung ermöglicht es ihnen, bestimmte Probleme vorauszusehen. Dadurch fällen sie auch Architektur-Entscheidungen mit größerer Leichtigkeit und Sicherheit. Wenn neue Tools oder Libraries herauskommen, können sie deren Relevanz und Komplexität gut einschätzen und somit auch die Spreu vom Weizen trennen.
Was sie ebenfalls besser als die Intermediates können, ist das Einschätzen von Prioritäten und Komplexität der Aufgaben. Darüber hinaus verstehen sie es, mit Souveränität festzustellen und zu sagen, wenn eine Anforderung zurückgewiesen werden kann beziehungsweise muss, weil die Umsetzung mit den gegebenen Vorgaben nicht machbar ist oder zum Negativen wäre.
Falls sie nicht schon zu Beginn mit guten Kommunikationsfähigkeiten gesegnet waren, so haben die vielen Berufsjahre die Senior Entwickler in den Stand versetzt, technische Sachverhalte auch nicht-technischen Mitarbeitern und Kunden verständlich erklären zu können. So können sie auch bedenkenlos im Kundenkontakt und in der Beratung eingesetzt werden, ebenso wie den Nachwuchs, Junior und Intermediate Programmierer, kompetent anlernen.
Trainee
Eine weitere Gruppe wollen wir noch kurz besprechen, da sie weitläufig ins Thema passt: Trainees.
Trainees, Praktikanten oder Auszubildende sind noch nicht komplett berufsfertige Coder. Sie sind noch dabei, das Programmieren vollständig zu erlernen und haben insofern weniger Fachkenntnisse als der Junior und genauso wenig Berufserfahrung.
Ihre fachliche Ausbildung findet sozusagen on the job, im Job als Angestellter in der Firma, statt. Das hat den Vorteil, dass sie gleich handfeste Anwendungsfälle zu den jeweiligen Theorien mitbekommen, und so ihre Skills mitunter schneller lernen.
Kleine und schematische, oft leider aber auch lästige, da sich wiederholende und manuelle Tätigkeiten können sie mit Anleitung bereits gut erfüllen.
Die Qualität der Ausbildung steht und fällt mit der Kompetenz, Verfügbarkeit und Zugänglichkeit des Ausbilders beziehungsweise Mentors. Denn nur wenn der Trainee entsprechend gefordert aber auch gefördert wird, kann er sein volles Potential entfalten.
Natürlich macht einen guten Programmierer viel mehr als nur die Jahre der Berufserfahrung aus, wie beispielsweise Fachkenntnisse sowie strukturiertes und inspiriertes Denken. Daher verzage nicht völlig, wenn du nicht gleich als Senior Entwickler einsteigen kannst trotz guter Ideen. Jeder war einmal genau dort, wo du gerade stehst. Das ist das Demokratische am Berufsfeld des Entwicklers. Ebenso gewiss ist, dass du genau dort ankommen kannst, wo du hinwillst, wenn du dich genug ins Zeug legst.