Warum ein bloßes Upgrade Ihrer Codierung Sie nicht zu einem besseren Entwickler macht

Warum ein bloßes Upgrade Ihrer Codierung Sie nicht zu einem besseren Entwickler macht

Techlead Skyeng Kirill Rogovoy (Blitzhhh) hält auf Konferenzen einen Vortrag, in dem er über die Fähigkeiten spricht, die jeder gute Entwickler entwickeln sollte, um der Beste zu werden. Ich habe ihn gebeten, diese Geschichte mit den Habra-Lesern zu teilen, ich erteile Kirill das Wort.

Der Mythos über einen guten Entwickler besagt, dass er:

  1. Schreibt sauberen Code
  2. Kennt viele Technologien
  3. Codierungsaufgaben schneller
  4. Kennt eine Reihe von Algorithmen und Designmustern
  5. Kann jeden Code mit Clean Code umgestalten
  6. Verschwendet keine Zeit mit Nicht-Programmieraufgaben
  7. 100 % Beherrschung Ihrer Lieblingstechnologie

So sieht die Personalabteilung ideale Kandidaten und dementsprechend sehen auch offene Stellen so aus.

Aber meine Erfahrung sagt, dass das nicht ganz stimmt.

Zunächst zwei wichtige Haftungsausschlüsse:
1) Meine Erfahrung sind Produktteams, d.h. Unternehmen mit eigenem Produkt, kein Outsourcing; Beim Outsourcing kann alles ganz anders sein;
2) Wenn Sie ein Junior sind, dann sind nicht alle Ratschläge anwendbar, und wenn ich Sie wäre, würde ich mich vorerst auf das Programmieren konzentrieren.

Guter Entwickler: Realität

1: Besser als der Durchschnitt

Ein guter Entwickler weiß, wie man eine coole Architektur erstellt, coolen Code schreibt und nicht zu viele Fehler macht. Im Allgemeinen schneidet er besser ab als der Durchschnitt, gehört aber nicht zu den besten 1 % der Spezialisten. Die meisten der coolsten Entwickler, die ich kenne, sind keine besonders guten Programmierer: Sie sind großartig in dem, was sie tun, aber sie können nichts Super-Außergewöhnliches tun.

2: Löst Probleme, anstatt sie zu schaffen

Stellen wir uns vor, wir müssen einen externen Dienst in das Projekt integrieren. Wir erhalten die technischen Spezifikationen, schauen uns die Dokumentation an, stellen fest, dass dort etwas veraltet ist, verstehen, dass wir zusätzliche Parameter übergeben müssen, nehmen einige Anpassungen vor, versuchen, alles irgendwie umzusetzen und sorgen dafür, dass eine krumme Methode schließlich nach ein paar Jahren korrekt funktioniert An manchen Tagen verstehen wir, dass wir so nicht weitermachen können. Das Standardverhalten eines Entwicklers in dieser Situation besteht darin, zum Geschäft zurückzukehren und zu sagen: „Ich habe dies und das gemacht, dieses funktioniert nicht so und das funktioniert überhaupt nicht, also finden Sie es selbst heraus.“ ” Ein Unternehmen hat ein Problem: Sie müssen sich mit dem Geschehen befassen, mit jemandem kommunizieren und versuchen, es irgendwie zu lösen. Das kaputte Telefon beginnt: „Sagen Sie es ihm, ich schreibe ihr eine SMS, schauen Sie, was sie geantwortet haben.“

Ein guter Entwickler findet in einer solchen Situation selbst Kontakte, kontaktiert ihn telefonisch, bespricht das Problem und wenn nichts klappt, versammelt er die richtigen Leute, erklärt alles und bietet Alternativen an (höchstwahrscheinlich gibt es noch eine andere). externer Service mit besserem Support). Ein solcher Entwickler sieht ein Geschäftsproblem und löst es. Seine Aufgabe ist abgeschlossen, wenn er ein Geschäftsproblem löst, und nicht, wenn er auf etwas stößt.

3: Versucht, minimale Anstrengungen zu unternehmen, um maximale Ergebnisse zu erzielen, auch wenn das Schreiben auf Krücken erforderlich ist

Die Softwareentwicklung in Produktunternehmen ist fast immer der größte Ausgabenposten: Entwickler sind teuer. Und ein guter Entwickler versteht, dass ein Unternehmen mit minimalen Ausgaben den größtmöglichen Geldbetrag erzielen möchte. Um ihm zu helfen, möchte ein guter Entwickler möglichst wenig seiner teuren Zeit aufwenden, um den maximalen Gewinn für den Arbeitgeber zu erzielen.

Hier gibt es zwei Extreme. Einer davon ist, dass man im Allgemeinen alle Probleme mit einer Krücke lösen kann, ohne sich um die Architektur zu kümmern, ohne Umgestaltung usw. Wir alle wissen, wie das normalerweise endet: Nichts funktioniert, wir schreiben das Projekt von Grund auf neu. Eine andere Möglichkeit besteht darin, dass eine Person versucht, eine ideale Architektur für jede Schaltfläche zu entwickeln, indem sie eine Stunde für die Aufgabe und vier Stunden für die Umgestaltung aufwendet. Das Ergebnis einer solchen Arbeit sieht großartig aus, aber das Problem besteht darin, dass auf geschäftlicher Seite die Fertigstellung eines Buttons sowohl im ersten als auch im zweiten Fall zehn Stunden dauert, einfach aus unterschiedlichen Gründen.

Ein guter Entwickler weiß, wie er zwischen diesen Extremen balanciert. Er versteht den Kontext und trifft die optimale Entscheidung: Bei diesem Problem werde ich eine Krücke abschneiden, denn es handelt sich um Code, der alle sechs Monate einmal berührt wird. Aber in diesem Fall werde ich mir die Mühe machen und alles so richtig wie möglich machen, denn hundert neue Funktionen, die noch entwickelt werden müssen, werden davon abhängen, was mir gelingt.

4. Verfügt über ein eigenes betriebswirtschaftliches System und ist in der Lage, darin Projekte beliebiger Komplexität zu bearbeiten.

Nach Prinzipien arbeiten Getting Things Done – Wenn du alle deine Aufgaben in einer Art Textsystem aufschreibst, keine Absprachen vergisst, alle drängst, überall pünktlich erscheinst, weißt, was gerade wichtig ist und was nicht, verlierst du nie Aufgaben. Das allgemeine Merkmal solcher Menschen ist, dass man, wenn man sich mit ihnen auf etwas einigt, nie Angst hat, dass sie es vergessen; Und Sie wissen auch, dass sie alles aufschreiben und dann nicht tausend Fragen stellen, deren Antworten bereits besprochen wurden.

5. Hinterfragt und klärt alle Bedingungen und Einführungen

Auch hier gibt es zwei Extreme. Einerseits kann man allen einleitenden Informationen skeptisch gegenüberstehen. Die Leute vor Ihnen haben einige Lösungen gefunden, aber Sie glauben, dass Sie es besser machen können und beginnen, alles, was vor Ihnen lag, noch einmal zu diskutieren: Design, Geschäftslösungen, Architektur usw. Dies verschwendet viel Zeit sowohl für den Entwickler als auch für seine Umgebung und wirkt sich negativ auf das Vertrauen innerhalb des Unternehmens aus: Andere Leute wollen keine Entscheidungen treffen, weil sie wissen, dass dieser Typ zurückkommen und alles kaputt machen wird. Das andere Extrem ist, wenn ein Entwickler alle einleitenden, technischen Spezifikationen und geschäftlichen Wünsche als etwas in Stein gemeißeltes wahrnimmt und erst bei einem unlösbaren Problem anfängt, darüber nachzudenken, ob er das, was er tut, überhaupt tut. Auch hier findet ein guter Entwickler einen Mittelweg: Er versucht, die vor oder ohne ihn getroffenen Entscheidungen zu verstehen, bevor die Aufgabe in die Entwicklung geht. Was will das Unternehmen? Lösen wir seine Probleme? Der Produktdesigner hat eine Lösung gefunden, aber verstehe ich, warum die Lösung funktionieren wird? Warum hat sich der Teamleiter diese besondere Architektur ausgedacht? Wenn etwas nicht klar ist, müssen Sie nachfragen. Im Zuge dieser Klärung kann ein guter Entwickler eine alternative Lösung finden, die bisher einfach niemandem in den Sinn gekommen ist.

6. Verbessert Prozesse und Menschen um Sie herum

Um uns herum laufen viele Prozesse ab – tägliche Meetings, Meetups, Scrums, Tech Reviews, Code Reviews usw. Ein guter Entwickler wird aufstehen und sagen: Schauen Sie, wir treffen uns jede Woche und diskutieren das Gleiche, ich verstehe nicht warum, wir könnten diese Stunde genauso gut mit Contra verbringen. Oder: Bei der dritten Aufgabe in Folge komme ich nicht in den Code, nichts ist klar, die Architektur ist voller Lücken; Vielleicht ist unser Überprüfungscode lahm und wir müssen ihn umgestalten. Lassen Sie uns das Treffen alle zwei Wochen umgestalten. Oder jemand stellt bei einer Codeüberprüfung fest, dass einer seiner Kollegen ein bestimmtes Tool nicht effektiv genug nutzt, sodass er später vorbeikommen und Ratschläge geben muss. Ein guter Entwickler hat diesen Instinkt; er macht solche Dinge automatisch.

7. Hervorragend im Umgang mit anderen, auch wenn er kein Manager ist

Diese Fähigkeit passt gut zum Thema „Probleme lösen statt schaffen“. Im Text der Stelle, auf die wir uns bewerben, steht oft nichts über Management, aber wenn Sie mit einem Problem konfrontiert werden, das außerhalb Ihrer Kontrolle liegt, müssen Sie andere auf die eine oder andere Weise führen und etwas von ihnen erreichen, wenn Sie es tun vergessen - drücken Sie, stellen Sie sicher, dass sie alles verstanden haben. Ein guter Entwickler weiß, wer sich für was interessiert, kann ein Treffen mit diesen Leuten einberufen, Vereinbarungen aufschreiben, sie an Slack schicken, sie am richtigen Tag daran erinnern und sicherstellen, dass alles bereit ist, auch wenn er nicht persönlich direkt dafür verantwortlich ist diese Aufgabe, aber sein Ergebnis hängt von seiner Umsetzung ab.

8. Nimmt sein Wissen nicht als Dogma wahr, ist ständig offen für Kritik

Jeder kann sich an einen Kollegen aus einem früheren Job erinnern, der bei seiner Technologie keine Kompromisse eingehen konnte und schreit, dass alle wegen falscher Mutationen in der Hölle schmoren werden. Ein guter Entwickler versteht, wenn er 5, 10, 20 Jahre in der Branche arbeitet, dass die Hälfte seines Wissens faul ist und dass er in der restlichen Hälfte nicht zehnmal mehr weiß, als er weiß. Und jedes Mal, wenn jemand anderer Meinung ist und eine Alternative anbietet, ist das kein Angriff auf sein Ego, sondern eine Gelegenheit, etwas zu lernen. Dadurch kann er viel schneller wachsen als die Menschen um ihn herum.

Vergleichen wir meine Vorstellung eines idealen Entwicklers mit der allgemein akzeptierten:

Warum ein bloßes Upgrade Ihrer Codierung Sie nicht zu einem besseren Entwickler macht

Dieses Bild zeigt, wie viele der oben beschriebenen Punkte mit dem Code zusammenhängen und wie viele nicht. Die Entwicklung in einem Produktunternehmen besteht nur zu einem Drittel aus Programmierung, die restlichen 2/3 haben wenig mit Code zu tun. Und obwohl wir viel Code schreiben, hängt unsere Effektivität stark von diesen „irrelevanten“ zwei Dritteln ab.

Spezialisierung, Generalismus und die 80-20-Regel

Wenn eine Person lernt, einige eng gefasste Probleme zu lösen, lange und intensiv studiert, sie dann aber leicht und einfach löst, aber keine Fachkenntnisse in verwandten Bereichen besitzt, handelt es sich um eine Spezialisierung. Von Generalismus spricht man, wenn die Hälfte der Ausbildungszeit in den Bereich der eigenen Kompetenz investiert wird, die weitere Hälfte in angrenzende Bereiche. Dementsprechend mache ich im ersten Fall eine Sache perfekt und den Rest schlecht, und im zweiten Fall mache ich alles mehr oder weniger gut.

Die 80-20-Regel besagt, dass 80 % des Ergebnisses durch 20 % des Aufwands erzielt werden. 80 % des Umsatzes stammen von 20 % der Kunden, 80 % des Gewinns stammen von 20 % der Mitarbeiter und so weiter. In der Lehre bedeutet das, dass wir 80 % des Wissens in den ersten 20 % der aufgewendeten Zeit erwerben.

Es gibt eine Idee: Programmierer sollten nur programmieren, Designer sollten nur entwerfen, Analysten sollten analysieren und Manager sollten nur verwalten. Meiner Meinung nach ist diese Idee giftig und funktioniert nicht sehr gut. Dabei geht es nicht darum, dass jeder ein Universalsoldat sein muss, sondern darum, Ressourcen zu schonen. Wenn ein Entwickler zumindest ein wenig über Management, Design und Analyse Bescheid weiß, kann er viele Probleme lösen, ohne andere Personen einzubeziehen. Wenn Sie eine Funktion erstellen und dann überprüfen müssen, wie Benutzer damit in einem bestimmten Kontext arbeiten, wofür zwei SQL-Abfragen erforderlich sind, ist es großartig, den Analysten damit nicht ablenken zu können. Wenn Sie eine Schaltfläche in Analogie zu vorhandenen Schaltflächen einbetten müssen und die allgemeinen Prinzipien verstehen, können Sie dies ohne Einschaltung eines Designers tun, und das Unternehmen wird es Ihnen danken.

Insgesamt: Sie können 100 % Ihrer Zeit damit verbringen, eine Fertigkeit bis zum Äußersten zu erlernen, oder Sie können die gleiche Zeit in fünf Bereichen verbringen und in jedem bis zu 80 % aufsteigen. Nach dieser naiven Rechnung können wir in der gleichen Zeit viermal so viele Fähigkeiten erwerben. Das ist übertrieben, aber es veranschaulicht die Idee.

Verwandte Fähigkeiten können nicht zu 80 %, sondern zu 30-50 % trainiert werden. Nach 10-20 Stunden werden Sie sich in verwandten Bereichen spürbar verbessern, viel Verständnis für die dort ablaufenden Prozesse gewinnen und deutlich autonomer werden.

Im heutigen IT-Ökosystem ist es besser, über möglichst viele Fähigkeiten zu verfügen und kein Experte in einer davon zu sein. Denn erstens lassen all diese Fähigkeiten schnell nach, insbesondere wenn es ums Programmieren geht, und zweitens, weil wir in 99 % der Fälle nicht nur grundlegende, sondern sicherlich nicht die ausgefeiltesten Fähigkeiten verwenden, und das reicht sogar beim Codieren aus, sogar in coole Unternehmen.

Und schließlich ist Ausbildung eine Investition, und Diversifizierung ist bei Investitionen wichtig.

Was zu lehren ist

Was soll man also lehren und wie? Ein typischer Entwickler in einem starken Unternehmen verwendet regelmäßig:

  • Kommunikation
  • Selbstorganisation
  • Planung
  • Design (normalerweise Code)
  • und manchmal Management, Führung, Datenanalyse, Schreiben, Rekrutierung, Mentoring und viele andere Fähigkeiten

Und praktisch keine dieser Fähigkeiten überschneidet sich mit dem Code selbst. Sie müssen separat erlernt und verbessert werden. Geschieht dies nicht, bleiben sie auf einem sehr niedrigen Niveau, sodass sie nicht effektiv genutzt werden können.

In welchen Bereichen lohnt es sich weiterzuentwickeln?

  1. Unter Soft Skills versteht man alles, was nicht mit dem Drücken von Knöpfen im Editor zu tun hat. So schreiben wir Nachrichten, so verhalten wir uns in Besprechungen, so kommunizieren wir mit Kollegen. Dies alles scheint offensichtliche Dinge zu sein, aber sehr oft werden sie unterschätzt.

  2. Selbstorganisationssystem. Für mich persönlich ist das im letzten Jahr zu einem superwichtigen Thema geworden. Unter all den coolen IT-Mitarbeitern, die ich kenne, ist dies eine der am weitesten entwickelten Fähigkeiten: Sie sind super organisiert, sie tun immer, was sie sagen, sie wissen genau, was sie morgen, in einer Woche, in einem Monat tun werden. Es ist notwendig, um sich herum ein System aufzubauen, in dem alle Angelegenheiten und alle Fragen festgehalten werden; das erleichtert die Arbeit selbst enorm und hilft ungemein bei der Interaktion mit anderen Menschen. Ich habe das Gefühl, dass mich die Entwicklung in diese Richtung im letzten Jahr viel mehr verbessert hat als meine technischen Fähigkeiten; ich habe begonnen, deutlich mehr Arbeit pro Zeiteinheit zu leisten.

  3. Proaktiv, aufgeschlossen und planend. Die Themen sind sehr allgemein und wichtig, nicht nur für die IT, und jeder sollte sie entwickeln. Proaktivität bedeutet, nicht auf ein Signal zum Handeln zu warten. Sie sind die Quelle von Ereignissen, nicht die Reaktionen darauf. Aufgeschlossenheit ist die Fähigkeit, neue Informationen objektiv zu behandeln und die Situation unabhängig von der eigenen Weltanschauung und alten Gewohnheiten zu bewerten. Planung ist eine klare Vorstellung davon, wie die heutige Aufgabe das Problem für die Woche, den Monat oder das Jahr löst. Wenn Sie die Zukunft über eine bestimmte Aufgabe hinaus sehen, ist es viel einfacher, das zu tun, was Sie brauchen, und keine Angst zu haben, nach einiger Zeit zu erkennen, dass es verschwendet wurde. Diese Fähigkeit ist besonders wichtig für eine Karriere: Sie können jahrelang erfolgreich Ergebnisse erzielen, aber am falschen Ort, und am Ende das gesamte angesammelte Gepäck verlieren, wenn klar wird, dass Sie sich in die falsche Richtung bewegt haben.

  4. Alle verwandten Bereiche zur Grundstufe. Jeder hat seine eigenen spezifischen Bereiche, aber es ist wichtig zu verstehen, dass Sie in Ihrer täglichen Arbeit viele neue Möglichkeiten und Kontaktpunkte entdecken können, wenn Sie 10 bis 20 Stunden Zeit damit verbringen, einige „fremde“ Fähigkeiten zu verbessern bis zum Karriereende ausreichen.

Was zu lesen

Es gibt sehr viele Bücher über Selbstorganisation; es ist eine ganze Branche, in der einige seltsame Typen Ratgebersammlungen schreiben und Schulungen sammeln. Gleichzeitig ist unklar, was sie selbst im Leben erreicht haben. Daher ist es wichtig, die Autoren zu filtern und zu betrachten, wer sie sind und was sie hinter sich haben. Meine Entwicklung und Einstellung wurden am stärksten von vier Büchern beeinflusst, die alle auf die eine oder andere Weise mit der Verbesserung der oben beschriebenen Fähigkeiten zu tun hatten.

Warum ein bloßes Upgrade Ihrer Codierung Sie nicht zu einem besseren Entwickler macht1. Dale Carnegie „Wie man Freunde gewinnt und Menschen beeinflusst“. Ein Kultbuch über Soft Skills. Wenn Sie nicht wissen, wo Sie anfangen sollen, ist die Auswahl eine Win-Win-Option. Es basiert auf Beispielen, ist leicht zu lesen, erfordert keinen großen Aufwand, um das Gelesene zu verstehen, und die erworbenen Fähigkeiten können sofort angewendet werden. Insgesamt behandelt das Buch das Thema der Kommunikation mit Menschen.

Warum ein bloßes Upgrade Ihrer Codierung Sie nicht zu einem besseren Entwickler macht2. Stephen R. Covey „7 Gewohnheiten hocheffektiver Menschen“. Eine Mischung verschiedener Fähigkeiten, von Proaktivität bis hin zu Soft Skills, mit Schwerpunkt auf der Erzielung von Synergien, wenn Sie ein kleines Team in eine große Truppe verwandeln müssen. Es ist auch leicht zu lesen.

Warum ein bloßes Upgrade Ihrer Codierung Sie nicht zu einem besseren Entwickler macht3. Ray Dalio „Prinzipien“. Enthüllt Themen wie Aufgeschlossenheit und Proaktivität, basierend auf der Geschichte des Unternehmens, das der Autor aufgebaut und das er 40 Jahre lang geleitet hat. Viele hart erkämpfte Beispiele aus dem Leben zeigen, wie voreingenommen und abhängig ein Mensch sein kann und wie man sich davon befreien kann.

Warum ein bloßes Upgrade Ihrer Codierung Sie nicht zu einem besseren Entwickler macht4. David Allen, „Dinge erledigen“. Pflichtlektüre zum Erlernen der Selbstorganisation. Es ist nicht so einfach zu lesen, bietet aber umfassende Werkzeuge zur Organisation von Leben und Angelegenheiten, untersucht alle Aspekte im Detail und hilft Ihnen bei der Entscheidung, was genau Sie brauchen. Mit ihrer Hilfe habe ich mein eigenes System aufgebaut, das es mir ermöglicht, immer die wichtigsten Dinge zu erledigen, ohne den Rest zu vergessen.

Sie müssen verstehen, dass das bloße Lesen nicht ausreicht. Sie können mindestens ein Buch pro Woche schlucken, aber die Wirkung hält mehrere Tage an und dann kommt alles wieder an seinen Platz. Bücher sollten als Ratgeber genutzt werden, der sofort in der Praxis erprobt wird. Wenn Sie dies nicht tun, wird Ihr Horizont lediglich etwas erweitert.

Source: habr.com

Kommentar hinzufügen