Breite vs. enge Skillsets: Software-Engineering-Fähigkeiten entmystifiziert

Veröffentlicht: 2022-03-11

Jeder Softwareentwickler verfügt über ein Skillset, das sich aus den verschiedenen Fähigkeiten zusammensetzt, die er erworben hat. Ein Skillset ist „tief und eng“, wenn Sie ein bis zwei Skills beherrschen und sonst wenig; „breit und flach“ ist es, wenn man von allem ein bisschen kann, ohne auf irgendeinem Gebiet Experte zu sein.

Die meisten von uns befinden sich irgendwo in der Mitte mit ein paar starken Fähigkeiten, ein paar durchschnittlichen und vielen Lücken. In diesem Artikel möchte ich das breite und tiefe Spektrum diskutieren und argumentieren, dass die meisten Programmierer davon profitieren würden, sich dem breiten Ende zu nähern.

Software Engineer Skills: Grafische Darstellung eines Skillsets

Breite und Tiefe sind natürlich relativ. Sie könnten beispielsweise ein Experte für Webentwicklung oder nur für clientseitige Webentwicklung oder nur für JavaScript sein. All dies sind in gewissem Sinne „tiefe und enge“ Fähigkeiten, aber die letzte ist viel enger als die erste.

Außerdem sind sowohl „tiefe und breite“ als auch „flache und enge“ Skillsets möglich: Das erste bedeutet, dass jeder Sie einstellen möchte, und das zweite bedeutet, dass Sie noch überhaupt etwas Sinnvolles lernen müssen. Da sie nicht sehr verbreitet sind, sind sie auch nicht der Rede wert.

Arten von Fähigkeiten und Fähigkeiten des Softwareentwicklers

Tief und schmal

Wenn Sie über umfassende Fähigkeiten verfügen, sind Sie ein Experte auf mindestens einem Gebiet.

Nehmen wir SQL: Nehmen wir an, Sie wissen alles über die Theorie relationaler Datenbanken; die Vor- und Nachteile von MySQL, PostgreSQL, Oracle und SQLite; wie man Abfragen optimiert; wann und wie eine Datenbank denormalisiert wird usw. Kunden, die nach dieser speziellen Fähigkeit suchen, werden Sie so schnell wie möglich einstellen wollen, und das aus gutem Grund. Sie werden voll durchstarten und einen Mehrwert liefern, wie es nur wenige andere könnten.

Wenn sich das Projekt jedoch erweitert oder erheblich ändert, werden Sie durch Programmierer mit den Ihnen fehlenden Fähigkeiten ersetzt oder ergänzt. Wären Sie auch ohne größere Änderungen in der Lage, architektonische Änderungen vorzuschlagen? Der Kunde könnte mit einer NoSQL-Datenbank oder gar keiner Datenbank besser dran sein, aber Ihr begrenztes Fachwissen könnte Sie gegen diese ungewohnten Optionen voreingenommen machen.

Breit und flach

Wenn Sie jedoch ein Generalist sind, der kein Domänenexperte ist, benötigen Sie einige Zeit, um neue Projekte hochzufahren, bevor Sie die maximale Produktivität erreichen.

Um ein Beispiel zu geben: Vielleicht müssen Sie ein Python-Projekt durchführen und haben diese Sprache noch nie zuvor verwendet. Trotzdem haben Sie wahrscheinlich schon einiges darüber gehört (dynamisch, interpretiert, multiparadigmatisch) und Ihre Erfahrung mit anderen Sprachen wird den Übergang viel einfacher machen.

Der Code, den Sie anfänglich schreiben, ist vielleicht nicht pythonisch (mit Tupeln, Comprehensions oder Generatoren), aber Sie wissen, wo Sie anfangen müssen. Sie machen stetige Fortschritte und Ihre gut faktorisierten Module lassen sich später leicht verbessern. Ihre breite Perspektive auf Technologie wird Ihnen Ideen geben, die andere möglicherweise übersehen.

Wenn sich das Projekt ändert, sind Sie für Ihr Team eher eine Bereicherung als eine Belastung.

Skillsets in der realen Welt

Aus geografischer Sicht sehen schmale Skillsets aus wie hohe Berge und breite Skillsets sind wie Hochebenen. Wenn man diese Analogie anwendet, weisen typische Skillsets wahrscheinlich ein paar Berge, hier und da einen Hügel und viele Ebenen auf.

Grafische Darstellung von Bergen, Hügeln und Ebenen

Ein zufälliger Programmierer ist vielleicht großartig in SQL und Python, gut in der Webprogrammierung und in Algorithmen und wirklich besorgt über die meisten anderen Dinge, wie Core-Dumps, OAuth-Server oder native Apps. Ein solcher Programmierer sollte seine Fachgebiete weiter ausschöpfen und gleichzeitig Wissenslücken finden und füllen.

Diese Strategie wird ihnen im Laufe der Jahre wahrscheinlich am besten dienen.

Warum Programmierer ihre Fähigkeiten diversifizieren müssen

Viele Projekte erfordern voneinander unabhängige Fähigkeiten, die auf unvorhersehbare Weise kombiniert werden. Während allgemein qualifizierte Ingenieure zu den meisten von ihnen einen nützlichen Beitrag leisten könnten, werden die Fähigkeiten eines Experten den genauen Anforderungen weniger Arbeitgeber entsprechen. Das ist kurzfristig kein Problem, da Sie nur einen Job benötigen, um die Rechnungen zu bezahlen.

Aber…

Überspezialisierung ist riskant. Es mag in Ordnung sein, Ihre Eier in einen Korb zu legen, wenn Sie die Zukunft besser vorhersagen können als alle anderen, aber diese Fähigkeit ist selten und hat nichts mit technischen Fähigkeiten zu tun. Betrachten Sie die Nachfrage nach Windows-Programmierkenntnissen in unserem Jahrtausend. Oder fragen Sie sich selbst: Hätten viele von uns vor einem Jahrzehnt die jeweiligen Flugbahnen von Android, Flash, Nokia oder Blackberry erraten können?

Schließlich legen Top-Arbeitgeber großen Wert auf vielfältige Fähigkeiten. Facebook weist Teams erst sechs Wochen nach ihrem Start neue Mitarbeiter zu. Google fördert interne Versetzungen und führt mehrere Rotationsprogramme durch. Auch wenn Sie gerne freiberuflich tätig sind, kann es nicht schaden, sich alle Optionen offen zu halten. Wenn Sie jemals in Betracht ziehen, für diese Unternehmen zu arbeiten, müssen Sie zumindest ein bisschen Generalist sein.

Angenommen, Sie sind überzeugt und möchten Ihre Fähigkeiten diversifizieren, wie würden Sie das tun?

Wie man technische Fähigkeiten diversifiziert und verbessert

Du könntest Geld gegen Fähigkeiten eintauschen:

  • Akzeptieren Sie eine niedrigere Rate, während Sie in ein unbekanntes Gebiet wechseln. Wenn Sie zu 75 % so produktiv sind wie sonst, ist eine vorübergehende Gehaltskürzung von 25 % nur fair. Du wirst es früh genug wieder auf die Beine stellen.
  • Führen Sie unbezahlte Demo-Arbeiten mit den gewünschten Fähigkeiten durch, während Sie sich auf Jobs bewerben, die diese erfordern. Wenn sich herausstellt, dass Sie nicht bereit für die Veränderung sind, ist dies immer noch eine nützliche Lektion, die Sie gelernt haben.

Du könntest auch Zeit gegen Fähigkeiten eintauschen:

  • Tragen Sie zu einem Open-Source-Projekt bei. Sie erhalten Ratschläge und Bestätigung, geben der Gemeinschaft etwas zurück und werden möglicherweise von potenziellen Arbeitgebern oder Kollegen wahrgenommen.
  • Machen Sie ein persönliches Projekt für Freude, Inspiration und Abwechslung zum Arbeitsalltag. Zum Beispiel habe ich das Schlangenspiel vor dem Smartphone geklont, während ich React lernte.

Sie müssen nach Lernmöglichkeiten suchen, aber das können Sie nicht ständig tun. Für mein Toptal-Interviewprojekt habe ich Node.js und Backbone verwendet, mit denen ich beide nicht viel Erfahrung hatte. Es hat Spaß gemacht, aber das erforderliche Lerntempo konnte nicht über Monate aufrecht erhalten werden.

Idealerweise wechseln Sie zwischen langen Perioden der Stabilität (mit konstantem Output und Einkommen) und kurzen Intervallen, in denen Sie sich herausfordern, etwas Neues zu lernen. Wie oft Sie Letzteres tun, hängt von mehreren Faktoren ab, wie Ihren aktuellen Fähigkeiten, der Marktnachfrage und Ihren persönlichen Zielen.

Warum Breite gut für Arbeitgeber ist

Aus Sicht der Arbeitgeber sind in einigen Szenarien immer tiefe Fähigkeiten erforderlich:

  • Wenn es wenig Vertrauen oder zeitliche Verpflichtungen zwischen Arbeitgeber und Arbeitnehmer gibt.
  • Wenn katastrophale Folgen (wie Datenschutz- oder Sicherheitsvorfälle) wahrscheinlich sind.
  • Wenn esoterische Fähigkeiten gefragt sind.
  • Wenn die Fristen dringend und nicht verhandelbar sind.

Dennoch kreuzen viele Projekte keines dieser Kästchen an, und ihre Personalchefs sollten vielseitige Ingenieure in Betracht ziehen. Viele technische Fähigkeiten, wie Testen und Codedokumentation, und alle Soft Skills (wie Kommunikation) werden übertragen. Widerstandsfähigkeit spielt auch dann eine Rolle, wenn sich Produkte nicht vollständig ändern; Wenn das von Ihnen gemietete Teil für Stallungen steht, kann ein Generalist mit der nächsthöheren Priorität arbeiten.

Grafische Darstellung eines Arbeitgebers, der einen Entwickler mit einem breiten und flachen Skillset einem mit einem tiefen und schmalen Skillset vorzieht

Angesichts der Bedeutung umfassender Fähigkeiten sollten wir Entwickler ermutigen, sich zu diversifizieren, und wir sollten Arbeitgebern, die sich möglicherweise zu sehr auf „jahrelange Erfahrung“ mit verschiedenen Bereichen und Fähigkeiten konzentrieren, die Bedeutung eines breiten Wissens vermitteln.

Das Endziel ist eine Erfolgsbilanz zufriedener Kunden; neben Hard- und Softskills beweist das die Fähigkeit des Ingenieurs, in unbekannte Bereiche zu wechseln. Es ist auch ein starker Anreiz für Freiberufler, sich nicht in neue Bereiche vorzuwagen, bevor sie dazu bereit sind.

Die richtige Balance finden

Wenn umfassende Fähigkeiten unterbewertet werden, sind einige gute Entwickler untätig und einige gute Projekte sind unterbesetzt oder über dem Budget. Die Forderung nach einer perfekten Übereinstimmung der Fähigkeiten ist wie die Forderung nach Arbeit vor Ort, da es schwieriger wird, das Angebot (qualifizierte Arbeitskräfte) mit der Nachfrage (lohnende Arbeit) in Einklang zu bringen.

Nichts davon ist ein Argument gegen Domänenexpertise; es wird immer wichtig sein und großzügig belohnt werden. Wir sollten nur bedenken, dass auch breite Fähigkeiten wichtiger sind, als es den Anschein hat.