
Techlead Skyeng Kirill Rogovoy ( flashhhh ) spricht auf Konferenzen über die Fähigkeiten, die jeder gute Entwickler entwickeln muss, um der Beste zu werden. Ich bat ihn, diese Geschichte mit den Lesern von Habra zu teilen. Ich gebe das Wort an Cyril weiter.
Der Mythos über einen guten Entwickler besagt, dass er:
- Schreibt sauberen Code
- Kennt viel Technik
- Codierungsaufgaben schneller
- Kennt eine Reihe von Entwurfsalgorithmen und -mustern
- Kann jeden Code mit Clean Code umgestalten
- Verschwenden Sie keine Zeit mit nicht programmatischen Aufgaben
- 100% Meister Ihrer Lieblingstechnologie
So sehen HRs ideale Kandidaten, und auch offene Stellen sehen so aus.
Aber meine Erfahrung sagt, dass dies nicht sehr wahr ist.
Erstens zwei wichtige Haftungsausschlüsse:
1) Meine Erfahrung sind Produktteams, d.h. Unternehmen mit ihrem Produkt, nicht Outsourcing; Outsourcing kann sehr unterschiedlich sein;
2) Wenn Sie ein Junior sind, sind nicht alle Tipps anwendbar, und ich würde mich immer noch auf das Programmieren an Ihrer Stelle konzentrieren.
Guter Entwickler: Realität
1: Codit ist 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 ist alles besser für ihn als der Durchschnitt, aber er gehört nicht zu den Top 1% der Spezialisten. Die meisten der coolsten Entwickler, die ich kenne, sind keine so großartigen Programmierer: Sie kennen sich auf ihrem Gebiet gut aus, aber sie können nichts Super-Super machen.
2: Löst Probleme, schafft sie nicht
Stellen Sie sich vor, wir müssen einen externen Service in ein Projekt integrieren. Wir bekommen die TK, schauen uns die Docks an, sehen, dass dort etwas veraltet ist, wir verstehen, dass wir zusätzliche Parameter übergeben, etwas krücken, versuchen, all dies irgendwie zu implementieren und eine Art Kurvenmethode nach ein paar Minuten endlich richtig funktionieren zu lassen Tage verstehen wir, dass es weiter unmöglich ist. Das Standardverhalten des Entwicklers in dieser Situation besteht darin, zum Geschäft zurückzukehren und zu sagen: "Ich habe dies und das getan, dieses funktioniert nicht so, und es funktioniert überhaupt nicht. Im Allgemeinen sollten Sie es selbst herausfinden." Das 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: "Du sagst ihm, ich werde ihr schreiben, schau, was sie geantwortet haben."
Ein guter Entwickler, der mit einer solchen Situation konfrontiert ist, wird die Kontakte selbst finden, abschreiben, anrufen, das Problem besprechen, und wenn alles andere fehlschlägt, wird er die richtigen Leute sammeln, alles erklären und Alternativen anbieten (höchstwahrscheinlich gibt es einen anderen externen Dienst mit besserer Unterstützung). Ein solcher Entwickler sieht ein Geschäftsproblem und löst es. Seine Aufgabe wurde geschlossen, als er das Geschäftsproblem löste und nicht, als er auf etwas stieß.
3: Versucht, minimalen Aufwand zu betreiben, um maximale Ergebnisse zu erzielen, selbst wenn Sie Krücken schreiben müssen
Softwareentwicklung in Lebensmittelunternehmen ist fast immer der größte Aufwand: Entwickler sind teuer. Und ein guter Entwickler versteht, dass ein Unternehmen den maximalen Geldbetrag erzielen möchte, indem es den minimalen Geldbetrag ausgibt. Um ihm zu helfen, möchte ein guter Entwickler den minimalen Teil seiner teuren Zeit aufwenden, um den maximalen Gewinn für den Arbeitgeber zu erzielen.
Hier ergeben sich zwei Extreme. Zum einen ist es möglich, alle Probleme in einer Krücke zu lösen, sich nicht mit Architektur zu beschäftigen, nicht umzugestalten usw. Wir alle wissen, wie das normalerweise endet: Nichts funktioniert, wir schreiben das Projekt von Grund auf neu. Die andere ist, wenn eine Person versucht, eine ideale Architektur für jede Schaltfläche zu finden, eine Stunde für eine Aufgabe und vier Stunden für das Refactoring verbringt. Das Ergebnis dieser Arbeit sieht gut aus, aber das Problem ist, dass der Button von der Geschäftsseite aus zehn Stunden dauert, was im ersten, im zweiten Fall einfach aus verschiedenen Gründen geschieht.
Ein guter Entwickler kann diese Extreme ausgleichen. Er versteht den Kontext und trifft die beste Entscheidung: Bei dieser Aufgabe werde ich eine Krücke sägen, da dies ein Code ist, der alle sechs Monate einmal berührt wird. Aber in dieser Hinsicht bin ich verwirrt und werde alles so richtig wie möglich machen, da hundert neue Funktionen, die noch entwickelt werden müssen, davon abhängen, was mir gelingt.
4. Verfügt über ein eigenes Unternehmensmanagementsystem und kann Projekte beliebiger Komplexität ausarbeiten.
Arbeiten Sie an den Prinzipien der Erledigung von Aufgaben - Wenn Sie alles in einem Textsystem aufschreiben, keine Vereinbarungen vergessen, alle pushen, überall rechtzeitig erscheinen, wissen, was wichtig ist, was im Moment wichtig ist, verlieren Sie nie Ihre Aufgaben. Das allgemeine Merkmal solcher Menschen ist, dass Sie sich niemals Sorgen machen, wenn Sie eine Einigung mit ihnen erzielen. und Sie wissen auch, dass sie alle aufschreiben und dann nicht tausend Fragen stellen werden, deren Antworten bereits besprochen wurden.
5. Zweifel und Klarstellung aller Bedingungen und Einleitung
Hier gibt es auch zwei Extreme. Einerseits können Sie allen einleitenden skeptisch gegenüberstehen. Vor Ihnen haben die Leute einige Lösungen gefunden, und Sie denken, dass Sie es besser machen und anfangen können, alles, was vor Ihnen lag, neu zu diskutieren: Design, Geschäftslösungen, Architektur usw. Dies verbringt viel Zeit sowohl mit dem Entwickler als auch mit anderen und wirkt sich negativ auf das Vertrauen in das Unternehmen aus: Andere Menschen möchten keine Entscheidungen treffen, weil sie wissen, dass dieser Typ wiederkommt und alles kaputt macht. Im anderen Extremfall beginnt ein Entwickler, wenn er Einführungs-, TK- und Hotelwünsche als etwas in Stein gemeißeltes wahrnimmt und nur auf ein unlösbares Problem stößt, zu überlegen, ob er es überhaupt tut. Ein guter Entwickler findet hier auch einen Mittelweg: Er versucht, die mit oder ohne ihn getroffenen Entscheidungen zu verstehen, bevor die Aufgabe in die Entwicklung geht. Was will das Geschäft? Lösen wir seine Probleme? Der Produktdesigner hat eine Lösung gefunden, aber verstehe ich, warum diese Lösung funktioniert? Warum hat sich der Teamleiter eine solche Architektur ausgedacht? Wenn etwas nicht klar ist, müssen Sie fragen. Während dieser Klarstellung kann ein guter Entwickler eine alternative Lösung sehen, die vor ihm einfach niemandem in den Sinn gekommen ist.
6. Verbessert Prozesse und Menschen in Ihrer Umgebung.
Unmengen von Prozessen laufen um uns herum - tägliche Kundgebungen, Besprechungen, Scrams, diese Überprüfungen, Codeüberprüfungen usw. Ein guter Entwickler wird aufstehen und sagen: Hören Sie, wir werden jede Woche das Gleiche besprechen. Ich verstehe nicht, warum Sie mit dem gleichen Erfolg diese Stunde mit "Contra" verbringen könnten. Oder: Bei der dritten Aufgabe in Folge kann ich den Code nicht eingeben. Nichts ist klar. Die Architektur ist voller Löcher. Vielleicht ist unser Überprüfungscode lahm und wir müssen Refactoring durchführen. Lassen Sie uns alle zwei Wochen ein Mitap-Refactoring durchführen. Oder während einer Codeüberprüfung stellt eine Person fest, dass einer ihrer Kollegen ein bestimmtes Tool nicht effektiv genug verwendet, was bedeutet, dass Sie später nachsehen müssen. Ein guter Entwickler hat diesen Instinkt, er macht solche Dinge auf der Maschine.
7. Verwaltet andere perfekt, auch wenn sie kein Manager sind
Diese Fähigkeit ist gut mit dem Thema „Lösen, keine Probleme schaffen“ verbunden. Oft wird im Text der Stelle, zu der wir kommen, nichts über das Management geschrieben, aber wenn Sie mit einem Problem konfrontiert werden, das außerhalb Ihrer Kontrolle liegt, müssen Sie andere auf die eine oder andere Weise verwalten und etwas von ihnen erhalten. Wenn Sie vergessen haben, zu pushen, stellen Sie sicher dass sie alle verstanden haben. Ein guter Entwickler weiß, wer an was interessiert ist, kann sich mit diesen Leuten treffen, Vereinbarungen aufschreiben, sie in Ruhe lassen, sie am richtigen Tag daran erinnern, sicherstellen, dass alles bereit ist, auch wenn er persönlich nicht direkt für diese Aufgabe verantwortlich ist, aber das Ergebnis hängt davon ab von seiner Umsetzung.
8. Nimmt sein Wissen nicht als Dogma wahr, das ständig kritisiert werden kann
Jeder kann sich an einen Kollegen aus einer früheren Arbeit erinnern, der mit seiner Technologie keine Kompromisse eingehen kann. Er ruft, dass jeder wegen falscher Mutationen in der Hölle brennen wird. Ein guter Entwickler, der seit 5, 10, 20 Jahren in der Branche tätig ist, weiß, dass die Hälfte seines Wissens schlecht ist, und in der restlichen Hälfte weiß er nicht zehnmal mehr als er weiß. Und jedes Mal, wenn jemand mit ihm nicht einverstanden ist und eine Alternative anbietet, ist dies kein Angriff auf sein Ego, sondern die Gelegenheit, etwas zu lernen. Dadurch kann er viel schneller wachsen als andere.
Vergleichen Sie meine Vorstellung von einem idealen Entwickler mit der allgemein akzeptierten:

In diesem Bild können Sie sehen, wie viele Punkte von oben mit dem Code zusammenhängen und wie viele nicht. Die Entwicklung in einem Lebensmittelunternehmen macht nur ein Drittel der Programmierung aus, die restlichen 2/3 haben wenig mit dem Code zu tun. Und obwohl wir viel Code schreiben, hängt unsere Effektivität stark von diesen zwei Dritteln ab, die nicht miteinander zusammenhängen.
Spezialisierung, Generalismus und die Regel "80-20"
Wenn eine Person lernt, einige enge Probleme zu lösen, lernt sie lange und hart, löst sie dann aber leicht und einfach, verfügt jedoch nicht über Fachkenntnisse in verwandten Bereichen - dies ist eine Spezialisierung. Generalismus ist dagegen, wenn die Hälfte der Ausbildungszeit in eine Zone eigener Kompetenz und die andere Hälfte in verwandte Bereiche investiert wird. Dementsprechend mache ich im ersten Fall eine Sache perfekt und im Rest - schlecht und im zweiten - 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 werden von 20% der Kunden erzielt, 80% des Gewinns werden von 20% der Mitarbeiter erzielt und so weiter. Im Training bedeutet dies, dass wir in den ersten 20% der aufgewendeten Zeit 80% des Wissens erhalten.
Es gibt eine Idee: Codierer sollten nur codieren, Designer sollten entwerfen, Analysten sollten analysieren und Manager sollten verwalten. Meiner Meinung nach ist diese Idee giftig und funktioniert nicht sehr gut. Es ist nicht so, dass jeder universelle Soldaten sein sollte, es geht darum, Ressourcen zu sparen. Wenn ein Entwickler auch nur ein wenig mit Management, Design und Analyse vertraut ist, kann er viele Probleme lösen, ohne andere Personen einzubeziehen. Wenn Sie eine Funktion erstellen und dann überprüfen müssen, wie Benutzer in einem bestimmten Kontext damit arbeiten, für den zwei SQL-Abfragen erforderlich sind, ist es großartig, Analysen nicht ablenken zu können. Wenn Sie einen Knopf analog zu den vorhandenen drücken müssen und die allgemeinen Prinzipien verstehen, können Sie dies tun, ohne einen Designer einzubeziehen, und das Unternehmen wird sich dafür bedanken.
Insgesamt: Sie können 100% der Zeit damit verbringen, eine bestimmte Fähigkeit bis zum Limit zu erlernen, oder Sie können dieselbe Zeit in fünf Bereichen verbringen und jeweils 80% pumpen. Nach dieser naiven Mathematik können wir gleichzeitig viermal mehr Fähigkeiten erwerben. Dies ist eine Übertreibung, aber es veranschaulicht die Idee.
Benachbarte Fähigkeiten können nicht zu 80%, sondern zu 30-50% trainiert werden. Nachdem Sie 10 bis 20 Stunden verbracht haben, werden Sie spürbar in verwandten Bereichen pumpen, viel Verständnis für die in ihnen ablaufenden Prozesse bekommen und viel autonomer werden.
In einem modernen IT-Ökosystem ist es besser, so viele Fähigkeiten wie möglich zu haben und in keinem von ihnen Experte zu sein. Denn erstens verschwinden all diese Fähigkeiten schnell, insbesondere beim Programmieren, und zweitens, weil wir in 99% der Fälle nicht nur grundlegende, sondern sicherlich nicht die ausgefeiltesten Fähigkeiten verwenden, und dies reicht sogar beim Codieren aus. auch in coolen Unternehmen.
Und schließlich ist Training eine Investition, und Diversifikation ist wichtig für Investitionen.
Was zu lehren
Was soll man also unterrichten 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, Einstellung, Mentoring und viele andere Fähigkeiten
Und praktisch keine dieser Fähigkeiten überschneidet sich in irgendeiner Weise mit dem Code selbst. Sie müssen separat trainiert und gepumpt werden. Wenn dies nicht erfolgt, bleiben sie auf einem sehr niedrigen Niveau, wodurch sie nicht effektiv eingesetzt werden können.
Welche Bereiche sind es wert, entwickelt zu werden?
Soft Skills - das ist alles, was nicht für das Drücken von Tasten im Editor gilt. So schreiben wir Nachrichten, wie verhalten wir uns bei Besprechungen, wie kommunizieren wir mit Kollegen. Es scheint wie all die offensichtlichen Dinge, aber sehr oft werden sie unterschätzt.
Selbstorganisationssystem. Für mich ist dies im vergangenen Jahr ein sehr wichtiges 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 das, was sie sagen, sie wissen genau, was sie morgen, in einer Woche, in einem Monat tun werden. Es ist notwendig, ein System um sich herum aufzubauen, in dem alle Angelegenheiten und alle Fragen aufgezeichnet werden. Dies erleichtert die Arbeit selbst erheblich und hilft erheblich bei der Interaktion mit anderen Menschen. Nach meinen Gefühlen hat mich die Entwicklung in diese Richtung im letzten Jahr viel mehr gepumpt als technische Fähigkeiten. Ich begann viel mehr pro Zeiteinheit zu arbeiten.
Proaktivität, Offenheit und Planung. 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 zu warten, um Maßnahmen zu ergreifen. Sie sind die Quelle von Ereignissen, keine Reaktionen darauf. Aufgeschlossenheit - die Fähigkeit, sich objektiv auf neue Informationen zu beziehen und die Situation isoliert von ihrer eigenen Weltanschauung und alten Gewohnheiten zu bewerten. Planung ist eine klare Vorstellung davon, wie die heutige Aufgabe das Problem für eine Woche, einen Monat oder ein Jahr löst. Wenn Sie die Zukunft über eine bestimmte Aufgabe hinaus sehen, ist es viel einfacher, das zu tun, was Sie brauchen, und Sie müssen keine Angst haben, im Laufe der Zeit zu erkennen, dass sie verschwendet wurde. Diese Fähigkeit ist besonders wichtig für eine Karriere: Sie können jahrelang erfolgreich Ergebnisse erzielen, aber nicht dort, wo Sie sie benötigen, und verlieren dadurch das gesamte angesammelte Gepäck, wenn klar wird, dass Sie sich in die falsche Richtung bewegt haben.
Alle verwandten Bereiche zur Grundstufe. Jeder hat seine eigenen spezifischen Bereiche, aber es ist wichtig zu verstehen, dass Sie durch 10 bis 20 Stunden Zeit, in denen Sie eine Art „fremde“ Fertigkeit pumpen, viele neue Möglichkeiten und Gemeinsamkeiten in der täglichen Arbeit entdecken können, und diese Stunden können ausreichen, um dies zu tun Karriereende.
Was zu lesen
Es gibt viele Bücher über Selbstorganisation. Dies ist eine ganze Branche, in der einige obskure Leute eine Sammlung von Tipps schreiben und Schulungen sammeln. Es ist jedoch nicht klar, was sie selbst im Leben erreicht haben. Daher ist es wichtig, Filter auf die Autoren zu setzen, um zu sehen, wer sie sind und was sie hinter sich haben. Vier Bücher haben vor allem meine Entwicklung und meinen Ausblick beeinflusst, alle auf die eine oder andere Weise im Zusammenhang mit dem Pumpen der oben beschriebenen Fähigkeiten.
1. Dale Carnegie „Wie man Freunde findet und Menschen beeinflusst . “ Ein Kultbuch über Soft Skills. Wenn nicht klar ist, wo man anfangen soll, ist die Auswahl eine Win-Win-Option. Es basiert auf Beispielen, ist leicht zu lesen, erfordert nicht viel Aufwand, um zu verstehen, was gelesen wurde, und die erworbenen Fähigkeiten können sofort angewendet werden. Im Allgemeinen enthüllt das Buch das Thema Kommunikation mit Menschen.
2. Stephen R. Covey, „7 Fähigkeiten hochwirksamer Menschen“. Eine Mischung aus verschiedenen Fähigkeiten, von Proaktivität bis zu Soft Skills, mit dem Schwerpunkt auf Synergieeffekten, wenn Sie ein kleines Team in eine große Kraft verwandeln müssen. Einfach zu lesen.
3. Ray Dalios Prinzipien . Es enthüllt die Themen Offenheit und Proaktivität, basierend auf der Geschichte des Unternehmens, das der Autor aufgebaut hat und das er 40 Jahre lang geleitet hat. Viele hart erkämpfte Beispiele des Lebens, großartige Shows, wie voreingenommen und abhängig eine Person sein kann, wie man sie loswird.
4. David Allen "Wie man Dinge in Ordnung bringt" . Erforderliche Lektüre zum Erlernen der Selbstorganisation. Das Lesen ist nicht so einfach, bietet jedoch umfassende Tools für die Organisation von Leben und Arbeiten, untersucht alle Aspekte im Detail und hilft Ihnen bei der Entscheidung, was Sie benötigen. Mit seiner Hilfe habe ich mein System aufgebaut, mit dem ich immer das Wichtigste tun kann, ohne den Rest zu vergessen.
Sie müssen verstehen, dass nur Lesen nicht ausreicht. Sie können sogar ein Buch pro Woche schlucken, aber der Effekt bleibt mehrere Tage lang bestehen, und dann kehrt alles an seinen Platz zurück. Bücher sollten als Ratgeber verwendet werden, der sofort in der Praxis getestet wird. Wenn dies nicht getan wird, geben sie nur eine Erweiterung des Horizonts.