Overreacted

Was ich nich weiß 2018

28. Dezember 2018 • ☕️ 5 min read

Viele Leute glauben, ich wüsste mehr als ich tatsächlich weiß. Nicht wirklich etwas über dass ich mich beschweren will. (Einwanderer und Minderheiten haben oft das gegenteilige Problem, wenn angeommen wird Sie wüssten weniger als es tatsächlich der Fall ist. Wenn wir ehrlich sind ist es egal ob sie hart erarbeitete Referenzen vorlegen können, oder nicht.)

Dies ist eine unvollständige Liste an Dingen die ich nicht weß, und von denen oft angenommen wird ich wüßte davon. Das soll nicht heißen, es wären Themen über die man nicht bescheid wissen muss — oder dass es keine andere, sehr nützliche Dinge gibt über die ich bescheid weiß — aber da ich mich in einer Position befinde mein Nichtwissen mit Selbstsicherheit zugeben zu können, will Ich hier ehrlich zu euch sein.

Und hier will ich darüber sprechen, warum ich denke dass es wichtig Ahnungslosigkeit zuzugeben.


Allem voran, ich glaube in unserer Geselschaft haben wir die unrealistische Erwartung an erfahrene Entwickler, dass sie jede Technologie in ihrem Feld kenn müssen. Habt ihr schonmal einen Blick auf “learning roadmaps” die hunderte von libraries und tools enthalten geworfen? Oft sehr nützlich, aber wirken gleichzeitig auch sehr Einschüchternd.

Egal wie erfahren man ist, man befindet sich doch oft in einem Status zwischen “Ich kann das”, einem Gefühl der Unzulänglichkeit (Imposter Syndrom), oder Selbstüberschätzung (Dunning-Kruger Effekt), of abhängig von der Umgebung, dem Job, der Persönlichkeit, den Arbeitskollegen, der geistigen Verfassung, der Tageszeit oder anderen Umwelteinflüßen.

Erfahrene Entwickler öffnen sich durchaus öfter gegenüber Anfängern, aber es macht einen riesen Unterschied ob man die Rolle des erfahrenen Chirurgen einnimmt, der immer noch das Zittern bekommt, oder einem medizin Studenten, der das erste mal ein Skalpel hält!

Die Phrase “we’re all junior developers” (wir sind alle Anfänger) ist of schädlich für tatsächliche Anfänger und wirkt wie leeres Gescwaätz für jemanden der sich das erste mal mit einem Problem beschäftigt. Das ändert sich auch nicht durch gutgemeinte, frei heraus gesagte Zugeständnisse durch erfahrene Entwickler wie dieser Post.

Dennoch oder genau deswegen: Auch wir alt-gedienten Entwickler wissen nicht alles. In diesem Post will ich allen die sich in einer ähnlich komfortablen Position wie ich befinden nahelegen ihre Schwächen frei heraus zuzugeben, ohne unsere Position als Mentor aufgeben zu müssen.

Wir können unsere Schwächen zugeben, egal ob wir uns unzulänglich fühlen oder nicht, und trotzdem - aufgrund unserer Erfahrung und harter Arbeit - ein sehr wertvoller Beitrag zu unserem Team sein.


Nachdem wir das aus dem Weg geräumt haben, hier ein paar Dinge von denen ich keine Ahnung habe:

  • Unix commands und Bash. Ich weiß von ls und cd, alles andere muss ich nachschauen. Ich verstehe pipes, aber ich benutze sie nur in sehr einfachen Fällen. Ich habe keine Ahnung wie man xargs benutzt um komplizierte Ketten an Befehlen zu erzeugen, oder wie man damit Befehle weiterleitet oder verschiedene output streams erzeugt. Ich habe ausserdem nie gelernt wie man Bash scripts schreibt, die über simple (und oft fehlerhafte) shell scripts hinausgehen.
  • Low-level languages. Soviel ich weiss kann man mit Assembly Werte in memory speichern und im code herum springen, aber das wars auch. Ich habe ein wenig mit C gespielt und weiß was ein Pointer ist, aber fragt mich nicht wie man malloc oder andere manuelle memory Befehle anwendet. Von Rust hab ich auch keine Ahnung.
  • Networking stack. Computer haben IP Adressen und DNS kann hostnames auflösen. Ausserdem weiß ich dass low level Protokolle wie TCP/IP es einem ermöglichen Daten Pakete auszutauschen und dass sie (vielleicht?) Daten Integrität versichern. Das wars - bin mir nicht ganz sicher wie es genau funktioniert.
  • Container. Keine Ahnung wie man Docker oder Kubernetes benutzt (haben die miteinander zu tun?) Ich glaube dass ich damit verschiedene zuverlässig VMs starten kann. Hört sich toll an, aber ich hab es nie aus probiert.
  • Serverless. Hört sich auch toll an! Noch nie ausprobiert. Bin mir nicht ganz klar darüber wie dieses Model Backend Programmierung verändert (wenn überhaupt).
  • Microservices. Wenn ich das richtig verstehe sind das viele “API Endpoints die miteiner sprechen”. Ich weiß nicht was die tatsächlichen Vor-, oder Nachteile sind, weil ich damit noch nie gearbeitet habe.
  • Python. Tut mir leid das zugeben zu müßen - obwohl ich schon mehrere Jahre mit Python gearbeitet habe, habe ich mich nie wirklich tiefer damit beschäftigt. Viele Dinge wie imports sind komplett undurchsichtig für mich.
  • Node backends. Ich verstehe wie man Node benutzt, habe APIs wie fsfür building tools benutzt, und kann Express aufsetzen. Aber wie man Node mit einer Datenbank nutzt und wie man damit ein Backend schreibt weiß ich nicht. Wie man React frameworks wie Next für irgendetwas das über “hello world” hinausgeht benutzt weß ich auch nicht.
  • Native platforms. Ich habe versucht Objective C zu lernen, aber habe es nie wirklich zu Ende gebracht. Oder Swift. Oder Java (könnte ich vielleicht, imemrhin habe ich mit C# gearbeitet).
  • Algorithmen. Höchstens Bubble Sort und vielleicht - and guten Tagen - Quicksort. Ich kann vielleicht einfaches Graph Traversing implementieren, wenn ich ein tatsächliches Problem vorgelegt bekomme. Ich verstehe die O(n) Notation, aber nicht viel tiefer als “don’t put loops inside loops” (keine Schleifen in Schleifen).
  • Functional languages. Ausser man zählt Javascript dazu, bin ich nicht besonders bewandert in irgendeiner traditionellen funktionalen Programmier Sprache. Ich kann nur C# and JavaScript, und C# hab ich schon fast vergessen. Lisp (wie Closure), Haskell (wie Elm), oder ML (wie OCaml) inspirierte Sprachen kann ich kaum lesen.
  • Funktionale Terminologie. map und reduce, das wars. Keine Ahnung von monoids, functors, etc. Ich weiß was ein monad ist, aber vielleicht auch nicht.
  • Modernes CSS. Flexbox, Grid? Ich benutze Floats.
  • CSS Methodologies. Ich kenne BEM (den CSS Teil, nicht das tatsächliche BEM), das wars. OOCSS oder andere habe ich noch nie probiert.
  • SCSS / Sass. Hatte ich noch nie die Gelegenheit.
  • CORS. Lass mich damit in Ruhe! Ich weiß dass ich irgendwelche header setzen muss, aber daran habe ich schon Stunden verschwendent.
  • HTTPS / SSL. Musste es noch nie aufsetzen und habe keine Ahnung wie es wirklich funktioniert, außer dass es wohl private und public keys gibt.
  • GraphQL. Ich kann die queries lesen, aber ich wüsste nicht wie ich nodes, edges oder fragments benutzen kann. Oder wie pagination funktioniert.
  • Sockets. So wie ich mir das vorstelle können Computer darüber ausserhalb des Request/Response models kommunizieren. Mehr weiß ich nicht.
  • Streams. Noch nie damit ausserhalb von Rx Observables gearbeitet. Die guten alten Node streams habe ich benutzt, aber das error handling habe ich nie hin gekriegt.
  • Electron. Noch nie versucht.
  • TypeScript. Ich verstehe das Konzept von Types und kann die annotations lesen, aber ich habe es noch nie selber schreiben müssen. Ich habe es ein paar mal versucht, aber bin immer gescheitert.
  • Deployment and devops. Files über FTP schicken oder Prozesse killen bekomme ich hin, aber mehr auch nicht.
  • Graphics. Mit Canvas, SVG, WebGL, oder low level graphics bin ich nicht produktiv. Ich verstehe das generelle Konzept, aber bin nie wirklich tief eingestiegen.

Es gibt natürlich noch viele andere Dinge die ich nicht weiß…


Vielleicht wirkt es seltsam über diese Dinge zu reden, zumindest fühlt es sich seltsam an. Gebe ich hier damit an, dass ich keine Ahnung habe? Was ich eigentlich erreichen will ist folgendes:

  • Eure am meisten geschätzten Entwickler wissen nicht alles.
  • Selbstsicherheit hängt nicht davon ab wieviel man weiß.
  • Erfahrene Entwickler wissen vielleicht nicht alles, aber haben trotzdem wertvolles Wissen.

Ich bin mir über mein Nichtwissen im klaren (zumindest über ein paar davon). Wenn es mich interessiert oder ich an einem Projekt arbeite, kann ich es immer noch lernen.

Nichtwissen heißt nicht, dass mein Wissen wertlos ist. Es gibt vieles dass ich gut kann, zum Beispiel mir selbst neue technologien beibringen, wenn ich sie brauche.

Update: Es gibt auch ein paar Dinge die ich weiß.