Vorbereitung auf das Technical Interview? „Ich schreibe Crappy Code ohne jede Scham“
Programmieren erfordert neben einer hohen Frustrationstoleranz logisches Denken und ausgeprägte Problemlösungsfähigkeiten. Um sich für ein sogenanntes Technical Interview – gemeint ist der Teil des Bewerbungsprozess, in dem Entwickler und Entwicklerinnen quasi auf Herz und Nieren auf ihre Programmierfähigkeiten geprüft werden – vorzubereiten, wird oft empfohlen, sich an gängigen Problemstellungen zu versuchen – ohne die Lösung zu googeln. Die Begründung: Sich selbst die Lösung zu erschließen, schult die eigene Problemlösungskompetenz – in sogenannten Whiteboard-Interviews habt ihr schließlich oft auch nicht die Möglichkeit, Google zu fragen. Potenziellen neuen Arbeitgebern geht es darum, zu sehen, wie ihr an ein solches Problem herangeht. Aaron Abramov – nicht zu verwechseln mit Dan Abramov – ist Entwickler bei Facebook. Zur Vorbereitung auf den Einstellungsprozess hat er eine andere Taktik gewählt, die sich im Wesentlichen wie folgt zusammenfassen lässt: Fällt ihm die Lösung nicht innerhalb einer Minute ein, googelt er sie.
„Keine Copypasta“ 🍝
Anstatt die Lösung dann einfach zu kopieren, tippt er sie allerdings händisch ab. Auf diese Weise könne er 20 bis 30 solcher Aufgaben täglich bearbeiten, schreibt er. Bei einer Anzahl von etwa 100 gelösten Aufgaben löscht Abramov seine Lösungen aus dem Übungsordner und beginnt von vorn. An die meisten der Lösungen erinnere er sich bereits aus dem ersten Durchgang, einige müsse er erneut googeln. Der Entwickler wiederholt dieses Vorgehen, bis er in der Lage ist, alle in dem Ordner befindlichen Aufgaben ohne Google zu lösen. Auf diese Weise schreibe er in relativ kurzer Zeit sehr viel Code; deutlich mehr als jemand, der versucht, auf eigene Faust ohne Hilfe des Internets zu coden.
Das bewirke zum einen, dass sich eine gewisse mechanische Routine beim Tippen der sich irgendwann wiederholenden Code-Strukturen einstelle, so Abramov. Zum anderen gewinne er so eine Vertrautheit mit der Programmiersprache, die es irgendwann ermögliche, „den for-Loop einfach hinzuschreiben, ohne groß zu überlegen, wie das geht“. Nach Bearbeitung von etwa 200 bis 300 solcher Programmier-Challenges stelle sich dann der Effekt ein, dass es eigentlich keine Aufgaben mehr gäbe, die ihn wirklich überraschten, schildert Abramov auf Twitter. Vielleicht gehe es dann im Einzelnen darum, Münzen innerhalb eines Arrays zu sortieren, anstelle von Gegenständen, die in einen Rucksack gepackt werden müssen, oder um negative Zahlen anstelle von positiven, am Ende sei das zugrundeliegende Prinzip aber dasselbe. Im Job selbst verfolgt Abramov offenbar einen ganzen ähnlichen Ansatz. Im selben Thread gibt er ganz offen zu: „Ich schreibe Crappy Code ohne jede Scham.“ 100 Iterationen später würde dann schon etwas Vernünftiges dabei herauskommen. Seit er sich von dem Gedanken verabschiedet habe, auf Anhieb perfekten Code liefern zu wollen, sei er sehr viel produktiver.
Das sagt der Bildungsexperte
André Niedostadek ist Professor für Wirtschafts-, Arbeits- und Sozialrecht an der Hochschule Harz in Halberstadt; er weiß, welche Rolle die Fähigkeit zum Finden einer geeigneten Strategie beim Lernen spielt. Programmieren sei eine Tätigkeit, bei der sowohl Kreativität, logisches Denkvermögen und eine gewisse Vertrautheit mit der betreffenden Programmiersprache gefordert seien. Es sei zwar richtig, dass, wer eigenständig zur Lösung eines Problems finde, gar keine andere Wahl habe, als eine Fragestellung in Gänze zu durchdringen. Abramov schreibt in seinem Thread, um eine Aufgabe, deren Lösung ihm nicht sofort einfiele, zu vollenden, würde er ansonsten locker zwei bis drei Stunden benötigen. Zeit, die er zum Großteil damit verbringen würde, auf den Bildschirm zu starren und nachzudenken.
Lies auch: E-Learning: Ohne diese Fähigkeit wird es nicht klappen – laut Bildungsexperte
Logisches Denken, Routine und Kreativität
„Ein solches Vorgehen fordert und fördert zwar logische Denk- und Problemlösungsfähigkeiten und erfordert natürlich auch Kreativität.“ Routine im Schreiben von Code in der gewählten Programmiersprache gewinne man dadurch allerdings nicht. Auch Problemlösungskompetenzen werden unter anderem trainiert, indem man sich bereits vorhandene Problemlösungen aneigne und im Einzelfall dann entscheide, welche das richtige Tool zur Lösung des gestellten Problems sei, so Niedostadek. Abramovs erweiterter Abschreibe- und Auswendiglern-Ansatz, bei dem die mehrmalige Wiederholung und die schiere Menge der bearbeiteten Aufgaben schließlich bewirkt, dass Challenges ihn nicht überraschen können, decke diese beiden Punkte erfolgreich ab, sagt der Experte.
Lernen ist individuell
„Was mir besonders gut an dem Thread gefallen hat, ist, dass der Entwickler für sich ein ganz eigenes System entwickelt hat, sich die geforderten Kompetenzen anzueignen. Ob das für andere Programmierer genauso gut funktioniert, lässt sich so pauschal nicht sagen“, sagt Niedostadek. Am Ende komme es beim Lernen neben anderer Faktoren eben genau darauf an: „verschiedene Methoden zur Aneignung von Wissen und Kompetenzen auszuprobieren und für sich zu entscheiden, welche am besten funktioniert.“
Passend dazu:
- Programmieren lernen – die besten Quellen für den Einstieg
- Dein erstes Coding-Projekt? So fragst du das Internet um Hilfe