Ich arbeite als "Full Stack Developer", d.h. ich entwickle Web-Anwendungen, kümmere mich aber auch um die ganze Infrastruktur, teilweise bis runter zur Hardware. Ein normaler Arbeitstag bei mir kann schon einmal so aussehen:
- Mir wurde vom Kunden ein Ticket erstellt. Darin steht geschrieben, dass ein generiertes PDF einen Darstellungsfehler hat. Ich schaue in den Code rein, und sehe, dass hier die PDF-Library zum Einsatz kommt, die ich zwar auch schon einmal verwendet, sie aber nicht so richtig verstanden habe. Mental notiere ich mir, dass ich mich mal ordentlich mit dieser Library befassen soll, und zwar von Grund auf. Aber jetzt muss ich halt eben den Darstellungsfehler beheben, wozu ich mit Google und StackOverflow schneller ans Ziel komme. Und der Kunde wartet ja auch. So kann ich das Problem lösen, aber ein ungutes Gefühlt bleibt, zumal ich nicht richtig verstehe, was ich getan habe.
- Im nächsten Ticket geht es um ein Frontend-Problem. Hier passiert etwas mit JavaScript. Das habe ich schon mehrmals angeschaut, aber ich programmiere darin eben nur jeweils im Abstand von vielen Monaten. So fange ich praktisch wieder bei null an. Mentale Notiz: Wieder mal von Grund auf mit JavaScript befassen.
- Im dritten Ticket geht es dann um einen Report, der nach einer etwas anderen Logik erstellt werden soll. Mit SQL könnte ich das recht unkompliziert lösen, denn das habe ich mit 16 von der Pike auf gelernt. Aber natürlich kommt ein ORM (SQLAlchemy) zum Einsatz, mit dem ich mich noch nie so richtig befasst habe. Mentale Notiz: Das SQLAlchemy-Buch aus dem Keller holen und endlich mal durcharbeiten.
- Als nächstes setze ich mir lokal eine VM auf, um ein paar Anpassungen auf einem Kundensystem zu testen. Dummerweise geht das heute ausnahmsweise nicht. Wenn ich mir doch mal richtig Vagrant angeschaut hätte, würde ich die Fehlermeldung jetzt verstehen, und ich könnte mir eine weitere Session auf Google und StackOverflow ersparen. Ich sollte mich endlich mal gründlich mit Vagrant auseinandersetzen, also wirklich...
- Das Konfigurationsmanagementtool Puppet kenne ich leider auch nur oberflächlich, und auch diese Fehlermeldungen muss ich wieder Googeln. Wie war noch einmal der Befehl, um einen Eintrag in die Hosts-Datei zu schreiben? Ach, die offizielle Doku ist mir zu umständlich, das finde ich besser bei Google. Oder auch nicht? Ich sollte mich doch einfach einmal von Grund auf mit Puppet befassen, denn mit diesem Grundlagewisssen würde ich doch schon schneller ans Ziel kommen.
- Jetzt läuft zwar alles, aber irgendwo hängt noch was im DNS-Cache fest, sodass der Test immer noch zur falschen Umgebung geht. Welchen DNS-Resolver setze ich eigentlich ein? Den von systemd? Ich habe doch erst gerade letzte Woche herausgefunden, wie man das herausfindet. Genau! lsof und dann auf Port 53 absuchen, welcher Daemon auf diesen Port hört. Wie war noch mal die Syntax dafür? Hurra, lsof habe ich mir mal einen Nachmittag lang angeschaut und mir die wichtigsten Anwendungsfälle rausgeschrieben! Die Dokumentation dazu finde ich sogar innert zehn Sekunden auf meinem GitHub-Account. Endlich komme ich mal einen Schritt vorwärts, systematisches Lernen zahlt sich eben doch aus! OK, jetzt weiss ich, welchen DNS-Resolver ich einsetze. Aber wie leere ich nun dessen Cache? Ich sollte mich mal grundlegend mit DNS auseinandersetzen, und wie das so mit meiner Netzwerkkonfiguration zusammenhängt. Aber jetzt ist es doch auch schon wieder Abend, und ich bin wirklich schon müde von der ganzen Googlerei...
Aber wann soll man sich diese Zeit nehmen? Im Studium? Da erhalte ich eine Einführung in Design Thinking und Blockchain, und was die beiden Hammer-Icons in der IDE für subtile Unterschiede haben. Am Wochenende? Ja schon, aber da möchte ich halt etwas für mich privat lernen, das ich vielleicht nicht 1:1 in der Firma einsetzen kann. Mal eines der BSD ausprobieren, oder sich mal LISP anschauen oder mit Go ein Hobbyprojekt vorantreiben. Am Abend? Da bin ich kaputt vom Tag. Auf der Arbeit? Da stapelt sich mein Backlog auf, und ich kriege nichts mehr erledigt.
Könnt ihr diese Situation nachvollziehen? Liegt es nur am Beruf des "Full Stack Developers", der eben alles können sollte? Oder geht es einem "Backend Developer" oder "System Administrator" da ganz ähnlich, da man im jeweiligen Bereich einfach noch mehr in die Tiefe gehen muss, und auch dort immer wieder an seine Grenzen stösst?
Was habt ihr für Lösungsstrategien? Zuerst einmal das alte lernen, dass sich nicht so schnell ändert (Shell-Skripte, Unix-Utilities, usw.)? Oder sich einfach einmal etwas rauspicken, und dann ein halbes Jahr dabei bleiben, egal ob man den direkten Nutzen spürt oder nicht? Oder einmal pro Woche einen halben Tag ein gerade aktuelles Thema systematisch aufarbeiten? Vielleicht braucht man ja wirklich nicht ein extrem tiefes Wissen, aber vier, fünf Stunden systematisches Lernen sind schon hundertfach besser als diese Zeit unter Druck zu vergooglen?