Gefeuert, weil Ihre Fähigkeiten zu weit über denen Ihrer Kollegen liegen

Ich arbeite seit fünf Monaten für ein großes französisches Unternehmen, das großartige Dinge baut, ein gutes Produkt mit Trendmethoden.

Ich habe gerade von einem internen Mitarbeiter (technischer Experte) erfahren, dass ich wahrscheinlich entlassen werde, weil zwischen mir und anderen Entwicklern eine zu große Lücke in Bezug auf Programmierkenntnisse/-praxis besteht.

Er verrät mir, dass der Teammanager ihn oft gefragt hat:

"Ist der Code von Mik gut lesbar und verständlich?"

Er antwortete:

"Ja, aber man sollte ein gutes Niveau haben, um es zu verstehen, weil Komponenten intelligent entkoppelt sind."

Antwort des Teammanagers:

"Aber ist es wirklich gut, wie er vorgibt?"

Er antwortete:

„Mit freundlichen Grüßen, ja, ich habe früher seinen Code gelesen, um TypeScript/Node.js zu Hause zu lernen.“

Antwort des Teammanagers:

„Aber es ist ein echtes Problem, wenn das Team seinen Code nicht versteht … selbst wenn das Team weniger Wissen hat. Wir können uns langfristig nicht auf ihn verlassen.“

Ich bin verärgert.

Ich zweifelte an diesem Grund, aber ich fand diesen Artikel .

Es ist das dritte Mal, dass ich auf diese Situation stoße; wenn du wirklich guten Code produzierst und ohne Grund gefeuert wirst.

Es ist kein Scherz, ich könnte es nicht ertragen, dass das ein viertes Mal passiert, und es beeinflusst mich mental.

Wie kann ich das in Zukunft vermeiden?

Arrogant zu sein ist nicht meine Natur. Ich teile mein Wissen gerne.

Aktualisieren

Viele Antworten handeln davon, dass ich versuchen sollte, für das Team zu arbeiten, und nicht nur für mich.

Ich weise nur darauf hin, dass von mir nicht erwartet wurde, mit dem Team zu arbeiten.

In meinem Vertrag musste ich ALLEINE arbeiten, um eine komplette Software alleine zu bauen, mit meinen eigenen Programmierprinzipien.

Ich wurde eingestellt, WEIL das Team in den anspruchsvollen Bereichen überhaupt keine Fähigkeiten hat.

Das Team hat sich eines Tages (aus Neugier) nur 5 Minuten lang den Code angesehen und direkt mit meinem Manager gesprochen.

5 Minuten, wirklich, für etwa 10.000 Codezeilen nach 4 Monaten Arbeit.

Ja, die Unternehmen waren sich in dem Sinne ähnlich, dass von mir erwartet wurde, das Niveau der Fähigkeiten zu reduzieren, um zu meinem Team zu passen, und das möchte ich absolut nicht. Ich mag den IT-Bereich, weil er eine Herausforderung für das Gehirn ist. Ich brauche Herausforderungen.

Dreimal genügen, um mir zu bestätigen, dass ich mich mit leidenschaftlichen Menschen, die mich herausfordern, viel wohler fühle als normale Mitarbeiter, die nicht erwarten, sich zu verbessern. Ich bemerke nur, dass ihre Vorgehensweise nicht erfolgreich ist, warum also meine Meinung ändern, um sie an ihre anzupassen, um übrigens erfolglos zu sein. Diese typischen Großunternehmen, deren IT nicht die primäre Existenzgrundlage ist, sind nichts für mich.

Kommentare sind nicht für längere Diskussionen gedacht; Diese Konversation wurde in den Chat verschoben .
Nachdem Kommentare in den Chat verschoben wurden, wurden 33 weitere Kommentare gepostet. Diese können nicht automatisch zum Chatroom hinzugefügt werden und die ausführliche Diskussion in diesen Kommentaren gehört sicher nicht hierher, also sind sie jetzt weg. Wenn Sie diesen Beitrag diskutieren möchten, verwenden Sie den Chatroom. Kommentare sollen um Klärung bitten oder Verbesserungen des Beitrags vorschlagen, nicht um ... zu chatten.
In Bezug auf das Update sagten Sie, dass dies mehrmals passiert ist. Aber Sie sagten auch, Sie seien eingestellt worden, weil das Team keine Fachkenntnisse auf diesem Gebiet hatte. Ist das die anderen Male passiert? Oder nur die neuste?
Können Sie zum Beispiel 20-30 Zeilen posten? Und was ist die Programmiersprache?
Hallo @RobertHarvey, im Gegensatz zu Stack Overflow können Kommentare auf Workplace SE leicht zu ausgedehnten Diskussionen und hin und her führen, etwas, von dem wir auf einer Q&A-Site abraten möchten. Um die ausgedehnte Diskussion zu unterdrücken, bringen wir sie normalerweise zum Chatten und ermutigen die Leute, etwas Wertvolles als Antwort zu posten. Wenn Material als Antwort gepostet wird, kann darüber abgestimmt, in Suchmaschinen gesucht und nach Stimmen bewertet werden. Weitere Einzelheiten finden Sie in Robert Cartainos Beitrag What "comments" are not... . Hoffe das hilft.
Es könnte hilfreich sein, das Land zu markieren, in dem Sie arbeiten . Sie stellen fest, dass Sie für ein französisches Unternehmen arbeiten, aber sind Sie in Frankreich oder im Ausland?
Gibt es einen Grund, warum Sie nicht in einem Umfeld arbeiten, das Spitzentechnologie fördert? Die Wissenschaft könnte beispielsweise jemanden einsetzen, der neue Spitzentechnologien und -praktiken ausprobiert, aber in einem Geschäftsumfeld ist dies oft nachteilig, weshalb Sie gefeuert werden.
@Mik378 Wenn es Informationen gibt, die die Leute wissen sollen, bearbeiten Sie sie in Ihrer Frage. Schreiben Sie es nicht in Kommentare.
Sie müssen diesen Typen finden: workshop.stackexchange.com/questions/22559/…
In den Antworten auf Ihre Frage werden so viele Annahmen getroffen, dass es etwas lächerlich ist. Cort hat eine gute Antwort, die die Dinge aus der Sicht des Managers erklärt. Aber ich vermute, Sie müssen eine andere Art von Unternehmen finden, für das Sie arbeiten können. Ich habe für Organisationen als interner „Enterprise“-Entwickler und für produktproduzierende Unternehmen gearbeitet, bei denen richtiges „Engineering“ eine echte Sache war. Es scheint eine enorme Qualifikationslücke zwischen den Arten von Entwicklern zu geben, die in beiden Arten dieser Unternehmen arbeiten, und ich vermute, dass Sie in letzterem viel besser abschneiden würden.
Irgendein Update von dir?

Antworten (23)

Es ist kein Witz, ich könnte es nicht ertragen, dass das ein viertes Mal passiert, es beeinflusst mich mental.

Diese Zeile ist wichtig, weil sie zeigt, dass Sie das Gefühl haben, dass es an der Zeit ist, sich zu ändern. Es zeigt, dass Sie dies als Muster erkennen und möchten, dass das Muster aufhört. Dieser Wunsch ist wahrscheinlich der wichtigste Teil der Lösung. Um diese Art von Situationen zu beheben, muss man oft die Art und Weise ändern, wie man selbst denkt. Es ist unmöglich, dass jemand das für Sie tut, also wird Ihr Wunsch nach Veränderung das Einzige sein, was die Veränderung bewirkt.

Für einige Hintergrundinformationen war ich schon einmal in ähnlichen "zu gut im Programmieren für meinen Job" -Situationen, allerdings nie in dem von Ihnen beschriebenen Ausmaß. Ich könnte Krebs mit Template-Metaprogrammierung in C++ heilen, aber viele, mit denen ich arbeite, sind kaum mit den Grundlagen des objektorientierten Designs vertraut. Ich habe Code geschrieben, der SFINAE missbrauchte und direkt gegen den genauen Wortlaut der C++-Spezifikationen stieß, als viele Projekte, an denen ich arbeitete, noch veraltete und fehlerhafte Versionen von gcc verwendeten. Mein Ansatz bestand einfach darin, ihnen zu zeigen, wie erstaunlich diese Tools sind und welche Probleme sie lösen können. Ich habe es geliebt, Leuten kleine Programmiertipps zu erklären, und sie haben es sehr genossen.

Kommt Ihnen das bekannt vor?

„Ja, aber man sollte [Miks Code] gut verstehen können, weil die Komponenten intelligent entkoppelt sind.“

Betrachten Sie diese Aussage aus einer risikobasierten Perspektive. Ihr Chef muss die Dinge am Laufen halten, egal was passiert. Wenn Sie gehen, um ein tolles Jobangebot zu jagen, muss Ihr Chef trotzdem dafür sorgen, dass der Code gepflegt wird. Was Ihr Kollege gerade gesagt hat, war, dass er, wenn er Sie ersetzen muss , einen sehr erfahrenen Programmierer finden muss, weil jeder, der nicht so gut ist, nicht in der Lage sein wird, ihn zu warten. Dies ist ein Risiko. Was ist, wenn sie keinen Entwickler finden, der gut genug ist, oder es sich nicht leisten können, ihnen genug zu bezahlen?

Sie haben vielleicht etwas produziert, was Sie „guten Code“ nennen würden, aber die Definition von „gutem Code“ hängt sehr stark vom Kontext ab. Was bei Google mit seinen hochmodernen Denkweisen "guter Code" ist, kann für jemanden, der bei der FAA arbeitet, sehr schlechter Code sein, dem es hauptsächlich um Zuverlässigkeit geht, anstatt mit der Schneide Schritt zu halten. Die Definition Ihres Chefs von „gutem Code“ beinhaltet die Fähigkeit, ihn in allen möglichen Situationen aufrechtzuerhalten, auch ohne Sie. Wenn Ihre Mitarbeiter sich nicht wohl dabei fühlen, Ihren Code zu pflegen, sind Sie plötzlich eine Belastung für das Unternehmen, weil Sie Produkte produzieren, die sie nicht warten können, wenn Sie sich entscheiden, woanders hinzugehen.

Aus dieser Perspektive könnte man argumentieren, dass Sie sie zwingen, Ihre Definition von „gutem Code“ zu akzeptieren. Instinktiv mag dies eine gute Sache erscheinen, aber es ist mit Schwierigkeiten behaftet, wie zum Beispiel diese risikobasierte Denkweise, an die Sie vielleicht nicht gedacht haben.

Wir haben einen Ausdruck: „den Karren vor das Pferd spannen“. Eine der vielen Bedeutungen, die damit verbunden sind, ist, den Inhalt, der Ihnen am wichtigsten ist (in der Lage zu sein, Ihre fortgeschrittenen Techniken anzuwenden), über die Kräfte zu stellen, die ihn vorantreiben sollten (das Verständnis Ihres Kollegen für diese Techniken). Sie haben den Code in diesem fortgeschrittenen Stil geschrieben und dann die anderen Entwickler ermutigt, diesen Stil "einzuholen". Das kann effektiv sein, aber wenn Ihnen etwas passiert, bevor sie „aufholen“, ist das Unternehmen plötzlich in Gefahr, weil niemand den Code pflegen kann.

Wie kann ich das in Zukunft vermeiden?

Dies zu beheben, kann sehr schwierig sein, da Sie das Problem auf eine andere Weise angehen müssen, als Sie es normalerweise tun. Anstatt zuerst Code in diesem fortgeschrittenen Stil zu schreiben und dann Ihren Kollegen beizubringen, wie man so denkt, sollten Sie ihn umdrehen. Bringen Sie Ihren Kollegen bei, diesen Programmierstil zu mögen, und beginnen Sie dann, Code in diesem Stil zu schreiben. Es mag rückständig erscheinen, aber es ist viel stabiler. Aus Sicht des Chefs besteht wenig bis gar kein Risiko, dass das Team lernt, besser zu programmieren. Sobald sie besser codieren, ist der Stil, in dem Sie sich entwickeln möchten, plötzlich weniger riskant.

In der Zwischenzeit müssen Sie Code schreiben, der nach Ihren Maßstäben "weniger gut" ist, aber das ist in Ordnung. Ihr Code ist hier nicht Ihr einziges Produkt. Ihr anderes Produkt hilft dabei, die anderen Entwickler zu unterrichten, und der Wert davon kann leicht den Wert des Schreibens von "perfektem Code" übersteigen.

Natürlich kann es schwierig sein zu sagen, wann es sicher ist, Code in dem Stil zu schreiben, in dem Sie schreiben möchten. Wenn es einfach zu sagen wäre, hätten Sie es sicherlich schon herausgefunden! Eine leistungsstarke Technik, die Sie verwenden können, besteht darin, andere auf die fortgeschrittenen Codierungsstile drängen zu lassen, anstatt selbst darauf zu drängen. Es ist eine Sache, jemandem den Unterschied zwischen Vererbung und Zusammensetzung beizubringen. Es ist eine ganz andere Sache, sie so gut zu unterrichten, dass sie befürworten, Ihre vorhandene Codebasis zu ändern, um klarer zu sein, wann sie sie verwendet. Der letztere Fall lässt Sie wirklich wissen, dass sie das Konzept nicht nur verstehen, sondern es wirklich annehmen.

Ein Ideal, um solche Konzepte zu lehren, ist, nichts zu lehren. Lassen Sie die Schüler etwas entdecken, und zeigen Sie ihnen dann eine Richtung, in die diese Entdeckung gehen kann. Vielleicht entdeckt einer von ihnen etwas Nettes über Vererbung und Sie können ihn basierend auf dem, was er entdeckt hat, auf das Visitor-Entwurfsmuster verweisen. Geben Sie ihnen nicht nur Visitor, sondern geben Sie ihnen einen Orientierungssinn, damit sie hinausgehen und Visitor selbst finden können.

Es ist ein viel schwierigerer Ansatz, und Sie werden sicherlich einen guten Mittelweg zwischen diesem und Ihrem aktuellen Ansatz finden wollen, aber es kann sehr lohnend sein. Noch wichtiger für Ihre Antwort ist, dass es dem Unternehmen ohne Risiko einen Mehrwert bieten kann. Wenn Sie einem Unternehmen einen Mehrwert bieten und das Unternehmen nicht gefährden, werden Sie praktisch nie entlassen. Und in den wenigen Fällen, in denen Sie noch entlassen werden können, wird das Management einen Grund dafür angeben (z. B. ein Konjunkturabschwung oder eine Änderung der Ausrichtung des Unternehmens). Wenn Sie es sehr gut machen, werden Sie feststellen, dass das Management stattdessen damit beginnt, Ihren Weg zu formen, so wie Sie Ihre Kollegen formen, und Sie werden eine merkwürdige Tendenz feststellen, dass Sie genau dann genau die richtige Fähigkeit gelernt haben, wenn sie sie am dringendsten brauchen .

Ich lese deine Antwort sehr gerne. Einerseits verbrachte ich Zeit damit, Code von wirklich erfahrenen Leuten auf der ganzen Welt zu lesen. Mein Wunsch ist es, ständig zu versuchen, wie sie auszusehen, mich jeden Tag zu verbessern, Konzepte zu erwerben, die ich schnell praktiziere. Es ist schwer, dieses ständige Rennen zu stoppen, um nach der „perfekten Art der Codierung“ zu suchen (unter Beibehaltung des Pragmatismus), während man sich zurückzieht, um sich an (überhaupt) nicht leidenschaftliche Mitarbeiter anzupassen. Ich habe einen extremen Ehrgeiz.
@Mik378 Ich habe noch nie jemanden in meinem Leben gesehen, der mehr eine Codeüberprüfung brauchte. Schauen Sie, bei einer Codeüberprüfung geht es nicht nur um die Genehmigung (eigentlich sollte es nicht um die Genehmigung gehen). Es ist eine Gelegenheit, Leuten dabei zuzusehen, wie sie Ihren Code lesen und darüber reden. Es gehört dazu, ein sozialisierter Programmierer zu werden. Wenn Sie beim Programmieren wirklich weit kommen wollen, programmieren Sie nicht nur alleine. Setzen Sie sich mit diesen Jungs zusammen und programmieren Sie gemeinsam. Das nennt sich Pairing. Vielleicht lernst du auch etwas von ihnen.
Wer hat gesagt, dass ich nie intensiv Paarprogrammierung programmiert habe? nicht ich
@Mik378 Anscheinend hast du am Arbeitsplatz keine Paarprogrammierung ausprobiert, die dir Probleme bereitet hat. Wenn ja, warum sollte jemand Ihren Code schwer verständlich finden?
Ihrem Satz fehlt ein Wort nein?
Also, Ihr Kontakt sagt, dass Sie alleine arbeiten mussten, aber Sie machten umfangreiche Paarprogrammierung?
@Mik378 Hatte diese Erfahrung nie, aber ich stimme dieser Antwort zu, denn: Sie können die Perspektive des Managers nicht kontrollieren. Sie können nur Ihre Hälfte der Gleichung besitzen. (Dies gilt auch dann, wenn das Management falsch liegt.) Zu zeigen, dass Sie ein Teamplayer sind, ist ein klarer Gewinn für das Management (im Allgemeinen). Dies könnte bedeuten, dass die Bewerbung für Jobs mit Einzelentwicklerprojekten (mit Ihrer Kombination aus Geographie, Fähigkeiten und Qualifikationsniveau usw.) kurz- bis mittelfristig einfach zu riskant für Sie ist.
Hat jemand die Hypothese herausgefunden, dass meine Kollegen einfach keinen Code lesen können? Dass meine Kollegen den Vorgesetzten über ihre fiktiven Fähigkeiten täuschen? Glauben Sie mir, wenn ich den am besten lesbaren Code der Welt schreiben würde, könnte meine eigene Mutter ihn immer noch nicht lesen, weil sie nie gelernt hat, wie man Code liest. Diesen Mitarbeitern mangelt es an Programmierkenntnissen. Zum Beispiel HashMap in Java, sie wussten absolut nicht, wofür es war ... (sie haben 6 Jahre "Erfahrung"). Ich will nicht wegen dieser Realität streiten.
@Mik378: Das ist durchaus möglich. Es gibt Teams von "erfahrenen" Entwicklern, die sehr begrenzte Fähigkeiten haben und sich nicht überfordern wollen, und sie sind schwierige Arbeitsplätze für jemanden, der mehr als das will. Vielleicht erlebst du etwas davon. Aber Sie können trotzdem lernen, wie man mit dieser Art von Entwicklern zusammenarbeitet, und sogar etwas dabei gewinnen. Wenn es frustrierend ist, finden Sie in diesen Antworten ein oder zwei nützliche Hinweise, damit Sie den Job behalten können, bis Sie bereit sind, sich einer rein technischen Herausforderung zu widmen.
Ich würde hinzufügen, dass es auch Shops gibt, die Code Monkeys so billig wie möglich wollen. Ich war einer der Ersten und Letzten, die zu Marktpreisen eingestellt wurden. Die meisten anderen wurden als Praktikanten rekrutiert und dann nach dem College-Abschluss in Vollzeit eingestellt. Wenn dies das Ziel des Shops ist, möglichst billige Entwickler zu haben, können Sie nicht erwarten, dass sie den fortgeschrittenen Code verstehen. Ich versuche nur, ihnen bessere Praktiken für die Wartbarkeit beizubringen, und hoffe, dass sie den Wunsch haben, zu lernen.
@ Mik378 - Ihre Hypothese, dass Ihre Kollegen Code nicht lesen können, würde mehr Wasser enthalten, wenn dies nicht das "vierte Mal" wäre, dass es passiert ist. Ehrlich gesagt (und das sage ich als arbeitender Manager eines Entwicklungsteams) schreien Ihre Kommentare und Antworten hier nach einer Einstellung von „Ich bin ein Gott unter den Entwicklern. Ich schreibe großartigen, innovativen Code. Niemand sonst versteht es, weil sie dumm sind und/ oder faul." Das ist es, was mir in 10 Minuten beim Lesen Ihrer Frage und Ihrer Antworten auf nachfolgende Antworten/Kommentare auffällt.
@ Mik378 Wenn Ihr Code komplex ist und Sie der einzige erfahrene Programmierer im Unternehmen sind, würde ich dringend empfehlen, einen Job zu finden, bei dem es andere Programmierer gibt, die klüger/qualifizierter sind als Sie. Dann können Sie von ihnen lernen (Sie sagen, Sie lieben es, sich zu verbessern) und sie können Ihren komplexen Code verstehen.
@JohnP Ich habe Miks Namen aus früheren Beiträgen erkannt, die er auf dem Workplace Stack Exchange gemacht hat. Ihre Hypothese könnte richtig sein, wie aus Auszügen wie "Wie soll ich Chefs (Nicht-Programmierer) davon überzeugen, dass am Ende eine wirklich gute Software alle Methoden, die ich versucht habe, durchzusetzen, und gute Entwickler (ich wage es nicht zu offenbaren) erfordert ihnen meine Gedanken über die schlechten Fähigkeiten der anderen Entwickler)?"
@JohnP Du hast recht. Die Warnzeichen sind ziemlich stark sichtbar. Da ich jedoch weder seinen Code gesehen noch seine Kollegen getroffen habe, tendiere ich zu Lösungen, die in allen Fällen funktionieren. Wenn er wirklich so gut ist, wie er behauptet, dann wird ihm dieser Ansatz helfen, das Unternehmen voranzubringen. Wenn Ihr Instinkt richtig ist, hilft ihm dieser Ansatz, ihm zu folgen. Beides wird erreicht, indem man zuhört und versucht, die Wünsche seiner Kollegen zu verstehen. So können wir einen Weg finden, der gut ist, unabhängig davon, wie jemand seine Fähigkeiten wahrnimmt (einschließlich seiner eigenen, Ihrer und meiner).
„Wenn sie dich ersetzen müssen, müssen sie einen sehr erfahrenen Programmierer finden, denn jeder, der nicht so gut ist, wird es nicht aufrechterhalten können.“ So geht es nicht. Code, der von einem erfahrenen Programmierer geschrieben wurde, ist sowohl für erfahrene als auch für ungeübte Programmierer einfacher zu warten. Code, der von einem ungelernten Programmierer geschrieben wurde, ist sowohl für erfahrene als auch für ungelernte Programmierer schwieriger zu warten.
@ Mik378 Du hast hier eine wirklich nette Antwort, also möchte ich keine neue erstellen. Ich füge es einfach noch hinzu. Ich habe für eines der größten sozialen Netzwerke in der Tschechischen Republik gearbeitet und wir hatten auch einen Entwickler, der auf einem höheren Niveau war als der Rest von uns. Er schrieb den größten Teil des Back-Ends mit seinen eigenen Technologien (mono, c), ohne das Management zu konsultieren. Und als er ging (ohne logischen Grund), ging es zur Hölle, da wir nicht herausfinden konnten, wie die Plattform gebaut wurde. Jetzt denke ich, dass Sie dasselbe tun. Sie sollten IMMER mit mindestens 1 Entwickler zusammenarbeiten, der die Arbeit übernehmen kann.
Ich glaube, ich habe diese Lektion verstanden :) Danke für deinen Punkt @Marakoss
@TheMerryMisanthrope: Es gibt "geschickte" Programmierer und "clevere" Programmierer. Ich erinnere mich, dass ich mir einen C++-Code angesehen habe, der von einem „cleveren“ Programmierer geschrieben wurde, und nur gesagt habe: „WTF ist das“, ihn einem anderen hochqualifizierten Programmierer gezeigt hat, der ihn angeschaut und genau gesagt hat, was ich gerade gesagt habe. Da wir hochqualifiziert sind, hätte jeder von uns genau das gleiche Problem leicht lösen können, ohne etwas "Kluges" zu tun, das es schwer verständlich macht.
@gnasher729 Genau. Clever ist selten wirklich kompetent.

Nun, ich hasse es, Ihre Blase zum Platzen zu bringen, aber wenn dies das dritte Mal ist, dass dies passiert, schließt das fast aus, dass "es nicht Sie, es sind sie". Ihr Titel besagt, dass Sie gefeuert wurden, weil Sie „unentbehrlich“ waren, aber abgesehen davon, dass es ein Oxymoron ist, ist es auch nicht das, was passiert ist. Sie wurden entlassen, weil Sie Code geschrieben haben, den Ihre Kollegen nicht verstehen können, was für einen Programmierer ein kritisches Leistungsproblem darstellt.

Guter Code ist lesbarer Code , also Code, der auch für Anfänger leicht verständlich ist . Die Situationen, in denen Sie komplexen und eng geschriebenen Code benötigen, der von echten Experten geschrieben und gepflegt werden sollte, sind heutzutage sehr selten, und Sie haben offensichtlich nicht für diese Art von Unternehmen gearbeitet. Was Sie beschreiben, klingt eher nach "ausgefallenem" Code, der normalerweise übermäßig komplex ist, voller esoterischer Programmiertricks und es dauert ewig, ihn herauszufinden und zu debuggen. Es ist ein häufiges Versagen von Menschen, die klassisch ausgebildet wurden, und ihnen steht normalerweise ein böses Erwachen bevor, sobald sie eine produktive Umgebung betreten.

Guter Code ist lesbarer Code, aber nicht, wenn die Lücke zu groß ist. Sie wussten zum Beispiel nicht, was der Unterschied zwischen Vererbung und Zusammensetzung ist. Sie können diesen tiefen Mangel an Wissen nicht innerhalb von Wochen/Monaten bekämpfen. Sie werden verwendet, um nur if/else überall im Code mit viel DRY-Breaking zu verwenden.
@ Mik378 Stimmt, aber ich habe meine Antwort auf die Tatsache gestützt, dass Ihnen dies bereits zweimal passiert ist, und das macht es unwahrscheinlich, dass es überhaupt keine Probleme mit Ihrem Programmierstil gibt, auch wenn diese letzte Entlassung hauptsächlich darauf zurückzuführen ist unfähige Kollegen. Es ist auch der einzige Aspekt Ihrer Frage, der wirklich beantwortet werden kann, da wir nicht wirklich feststellen können, ob Sie sich einfach bei den falschen Unternehmen bewerben oder nicht.
@Mik378, alle positiv bewerteten Antworten drehen sich um dasselbe Thema. Dies ist meiner Antwort ähnlich, vielleicht sogar besser, wie effizienter gesagt. Man muss sich fragen, was man falsch macht. Die meisten Kommentare weisen auf dasselbe hin, insbesondere die positiv bewerteten.
@Mik378: Haben Sie darüber nachgedacht, Ihre Mitarbeiter zu schulen? Wenn Sie sie betreuen (z. B. durch Code-Reviews), können sie sich nicht nur auf den neuesten Stand bringen, sondern Ihr Code fühlt sich ihnen auch nicht mehr fremd an.
Ja, ich habe viel Zeit damit verbracht, Konzepte zu erklären, Code-Kata mit ihnen zu üben usw., ihnen bei ihrem eigenen Code zu helfen, während ich jeden meiner Schritte detailliert beschrieben habe, um eine Lösung zu erreichen.
@Mik378: Der Compiler ist nicht Ihr Publikum, Ihre Teamkollegen sind es. Wenn Sie Ihr Schreiben nicht an Ihr Publikum anpassen können, versagen Sie bei der Kommunikation. Dass dies mehr als einmal passiert ist, scheint darauf hinzudeuten, dass Sie nicht in der Lage sind, an Ihr Publikum zu schreiben.
„Gefeuert, weil man unentbehrlich ist“ ist sicherlich kein Widerspruch in sich. Weinbergs Klassiker „Die Psychologie der Computerprogrammierung“ (veröffentlicht 1972!) enthielt bereits den hervorragenden Managementratschlag: „Wenn jemand in Ihrem Team unentbehrlich ist, sollte es Ihre erste Priorität sein, ihn so schnell wie möglich loszuwerden“. Natürlich ist es manchmal eine gute Möglichkeit, sie an anderer Stelle im Unternehmen einzusetzen - solange Sie nicht einfach einem anderen Teamleiter das gleiche Problem geben.
@alephzero Ich würde argumentieren, dass es sicherlich ein inhärenter Widerspruch ist und dass das Zitat eigentlich mit "mehr davon holen oder Leute schulen sollte, damit das nicht mehr der Fall ist" enden sollte. Es ist nicht so prägnant, aber es wäre auch nicht so unsinnig wie dieser Ratschlag. Bei einem Busfaktor von 1 ist es nicht die richtige Antwort, ihn auf 0 zu reduzieren.
„Guter Code ist … leicht verständlich, auch für Anfänger“ – das stimmt einfach nicht. Tatsächlich ist es urkomisch falsch und wertet diese Antwort erheblich ab. Eine gut geschriebene Arbeit über statistische Quantenmechanik wird für einen Anfänger ohne Hintergrundkenntnisse Kauderwelsch sein. Dasselbe gilt für Code, der ein komplexes System beschreibt. Ich bin mir nicht sicher, welchen Zweck es hat, so zu tun, als wäre dies nicht wahr (leider scheint dies in letzter Zeit ein weit verbreitetes Missverständnis zu sein).
Hinzu kommt, dass als jemand, der seit etwa 25 Jahren in der IT tätig ist, die durchschnittlichen Teamfähigkeiten gesunken sind. In manchen Unternehmen auf komischem Niveau - Senior-Entwickler, die vor 15 Jahren als Auszubildende gefeuert worden wären. Dieses Problem kann durchaus ein kulturelles sein.
@KonradRudolph Hast du den Rest der Antwort gelesen? Ich beziehe mich im zweiten Absatz auf diese Arten von Umgebungen. Ob es Ihnen gefällt oder nicht, diese Art der Programmierung ist heutzutage sehr selten und aus der Beschreibung von OP geht klar hervor, dass dies nicht die Art von Arbeit ist, die von ihm erwartet wird. Und obwohl dies nicht der Ort für eine technische Diskussion ist, würde ich auch argumentieren, dass es durchaus möglich ist, ein Modell für ein komplexes System zu erstellen, das leicht zu verstehen und zu lesen ist.
Wäre es besser, so etwas zu sagen wie: „Guter Code ist ... so geschrieben, dass er von Ihren Kollegen (in der Firma, in dem Bereich, in dem Sie arbeiten) leicht verstanden wird.“ Dies sollte zutreffen, unabhängig davon, ob die Kollegen Experten sind oder nicht, da Sie diesen Code als Team pflegen.
@Mik378 Vererbung und Komposition sind zwei ziemlich ähnliche Konzepte. Muss ein Entwickler wirklich den Unterschied kennen, um die Geschäftsanforderungen zu erfüllen? Wenn es 10 % mehr kostet, einen Entwickler einzustellen, der dies weiß, wird sich das Unternehmen dann aus dieser Investition im Vergleich zum Schreiben von Software, die Sprachfunktionen missbraucht, aber den Geschäftszweck erfüllt, amortisieren?
@thelem Wirklich? Ich würde sagen, dass das Nichtwissen dieser grundlegenden Konzepte auf lange Sicht mehr Probleme verursachen wird. Wir sprechen hier nicht über irgendeine esoterische Sprachfunktion, sondern über grundlegende Konzepte, die Teil des Wissens eines jeden Entwicklers sein sollten (zumindest Entwickler, die auf OO-Sprachen abzielen).
Guter Code ist für diejenigen lesbar, die die Grundprinzipien verstehen. Es hört sich so an, als würde er versuchen, richtigen objektorientierten Code für Dinosaurier zu schreiben, die nur prozeduralen Code kennen. Wenn es nicht so grundlegend ist, wird er wahrscheinlich zu süß.
@Mik378, "Du kannst diesen tiefen Mangel an Wissen nicht bekämpfen" - ja, das kannst du nicht. Finden Sie einen besseren Job oder gründen Sie Ihr eigenes Unternehmen.
Die Wahrheit liegt irgendwo in der Mitte der "extremen" Interpretationen von Lilienthals und Konrads Kommentaren. Ich habe mit vielen Leuten zusammengearbeitet, die sich für gute Entwickler hielten, die ein Händchen dafür haben, komplexe Software zu schreiben. Schließlich ist das Problem komplex. Ich war noch nie von diesen Leuten beeindruckt. Die beeindruckendsten Entwickler sind diejenigen, die das Komplexe einfach machen. Ich vermute, das OP fällt eher in die erste Gruppe als in die letztere. IMO, das blinde Befolgen der aktuellen Best-Practice-"Softwareprinzipien" führt fast immer zur Erstellung von komplexem Code. Vielleicht ist das das Problem des OP.
„Vererbung und Komposition sind zwei ziemlich ähnliche Konzepte, ist es wirklich notwendig, dass ein Entwickler den Unterschied kennt, um die Geschäftsanforderungen zu erfüllen? Wenn es 10 % mehr kostet, einen Entwickler einzustellen, der dies weiß … ein so grundlegendes Wissen, dass ein Programmierer, der den Unterschied nicht kennt, eine schreckliche Produktivität haben wird. Es wird leicht mehr als 10 % mehr kosten, diesen Programmierer einzustellen, da sie keine Ahnung haben, was sie tun.
@KonradRudolph Zwei Worte für dich "Feynman Lectures".
@Aron Hast du wirklich gerade eine Einführungsausstellung mit einer Forschungsarbeit zusammengeführt?
@KonradRudolph: Guter Code ist so einfach wie möglich zu verstehen. Ich gebe Ihnen ein Beispiel: Ich habe in einem Lehrbuch über lineare Algebra eine Beschreibung der linearen Programmierung gelesen und konnte nichts verstehen. Ich habe Dantzigs Buch von Anfang an gelesen, und er hat es geschafft, alles auf eine absolut offensichtliche Weise zu beschreiben. George Dantzig = Held. Unbekannter Lehrbuchautor = Null. Ein komplexes Problem zu nehmen und es so anzuordnen, dass man eine einfache und offensichtliche Lösung erhält, das macht einen guten Programmierer aus.
Softwareprobleme, die von Natur aus schwierig sind, sind äußerst selten. Softwareprobleme, die einfach, aber massiv sind, sind keine Seltenheit. Sie lösen sie, indem Sie einfachen Code schreiben .
@industry7 Es könnte auch der Fall sein, dass ein Programmierer weiß, wie man das Konzept anwendet, aber nicht mit der spezifischen Terminologie vertraut ist.

Es gibt immer Gründe.

Ein früherer Arbeitgeber hat dies mit einem Kollegen von mir gemacht. Sein Können lag weit über unserem Können. Also wurde er entlassen.

Warum ist das sinnvoll?

  1. Er war der Einzige, der seinen Code pflegen konnte
  2. Er war nicht kooperativ
  3. Er hielt sich nicht an die Geschäftsstandards
  4. Er lieferte zwar mehr als nötig, aber das war keine gute Sache
  5. Statt komplexer Lösungen waren einfache Lösungen gefragt.

Es wird so oft gesagt, dass es fast ein Klischee ist, aber man muss „gut passen“ ins Team.

Die Codierung ist nur ein Teil der Gleichung. Sie müssen sympathisch, kommunikativ, bis zu einem gewissen Grad bescheiden, bei Bedarf arrogant sein, sich an die Geschäftsstandards halten, mit Ihren Kollegen auskommen, aufgeschlossen sein und bei Bedarf schnell helfen können.

Alle diese Soft Skills sind wichtig, und wenn Sie sie nicht haben, werden Sie Probleme bekommen.

Kommentare sind nicht für längere Diskussionen gedacht; Diese Konversation wurde in den Chat verschoben .

Guter Code ist leicht verständlich, selbst für arme Ingenieure. Ein Rat, den ich oft erhielt, lautet: „Programmieren Sie, als ob die Person, die Ihren Code pflegt, ein mittelmäßiger Programmierer und ein gefährlicher Psychopath ist, der weiß, wo Sie leben“.

Und es ist wahr. Eine zu schlaue Programmierung ist schlecht, weil die Wartung länger dauert, wenn man den Code nicht kennt . Bei der Wartung haben Sie oft überall Feuer, Tausende von Kunden blockiert, und eine cleverere und effizientere Lösung kann den Betreuer sehr wohl länger festhalten als ein dummer skriptähnlicher Code voller Wiederholungen.

Natürlich ist auch total dummer Code schlecht. Zwischen Dummheit und Genie gilt es, eine feine Balance zu finden: effizient und dennoch lesbar. Es ist mehr eine Kunst als eine Wissenschaft. Deshalb ist von schlauen Konzepten wie Mehrfachvererbung meist abzuraten . Auch wenn sie rocken.

Sie müssen den Kontext berücksichtigen. Wenn Sie in einer kleinen Edge-Firma arbeiten, die nur die Besten einstellt, können Sie sich wahrscheinlich einige exotische, brillante Dinge leisten. Wenn Sie für eine französische Bank arbeiten, die sich nur auf Berater von, ähm, zufälliger Qualität verlässt (manchmal haben sie Glück, manchmal nicht) und wo jeder Berater eine Domain von Millionen von LOC zu pflegen hat, dann machen Sie es auf jeden Fall einfach genug für einen Mittelmäßigen auf den ersten Blick zu verstehen. Keine Zeiger, keine Mehrfachvererbung, keine schlauen Tricks, etc...

Kommentare sind nicht für längere Diskussionen gedacht; Diese Konversation wurde in den Chat verschoben .
„Guter Code ist leicht verständlich, selbst für arme Ingenieure.“ Ich glaube nicht, dass der Arbeitsplatz ein großartiger Ort ist, um über Softwareentwicklung zu sprechen. Ich sehe immer wieder solche naiven Kommentare, und das ist nicht die ganze Geschichte. Es ist eine vage Verallgemeinerung, die in einem Soundbyte für einen TED-Vortrag oder so großartig klingt, aber im wirklichen Leben nicht haltbar ist.
@Cypher: Der Kontext ist ein "großes französisches Unternehmen". Die kenne ich zufällig ein bisschen. Die meiste Arbeit in solchen Unternehmen wird aber von Beratern von, errrrrrm, willkürlicher Qualität geleistet. Deshalb ist die Lesbarkeit so wichtig. Was auch immer Sie in einem solchen Kontext tun, es muss für den nächsten Ahnungslosen, der Ihren Platz innerhalb von maximal 3 Jahren einnehmen wird, verständlich sein. Andere Kontexte können andere Regeln haben. Ich spreche über den Kontext des OP. (Und ja, die IT in großen französischen Unternehmen ist im Durchschnitt sehr schlecht - ihre Praxis, niemals Berater einzustellen und immer Berater einzusetzen, ist katastrophal - aber es ist die Realität).

Es ist unwahrscheinlich, dass Sie gefeuert werden, weil Sie zu gut sind. Ich denke, das ist nur eine Ausrede.

Es ist viel wahrscheinlicher, dass es sich um ein Verhaltensproblem handelt oder der Chef Sie einfach nicht mag, aus Gründen, die er Ihnen nicht sagen kann, ohne einen Grund für eine Klage zu schaffen. Es ist auch möglich, dass Sie am teuersten sind und sie an FTEs glauben (dh jeder Arbeitnehmer ist gleich).

Wenn Sie wirklich so gut sind, können Sie sich auf gute Weise unentbehrlich machen:

  • Mentor der Junior-Programmierer. Nennen Sie die Vor- und Nachteile verschiedener Ansätze und lassen Sie sie ihre Fehler machen, anstatt ihnen zu sagen, welchen Ansatz sie wählen sollen.
  • Schreiben Sie guten Code, der von anderen leicht zu warten ist.
  • Setzen Sie sich für Best Practices ein, die die Produktivität steigern, im Gegensatz zu Best Practices des Cargo-Kults , die auf dem Papier gut klingen, aber die Produktivität beeinträchtigen.
Hast du den Artikel gelesen, den ich in meinem OP verlinkt habe? Es scheint, dass es eine Art "Gewohnheit" für bestimmte Manager ist ...
Wie ich oben sagte, plante ich 8 Meetings von jeweils etwa 2 Stunden, um ihnen einige gute Code-Praktiken beizubringen. Kein Effekt.
@Mik378 Mentoring und Unterrichten in zweistündigen Vorlesungsslots sind sehr unterschiedliche Dinge. In Bezug auf den Artikel ist dies tatsächlich ein Fall von Cargo-Kult - es gibt sehr gute Gründe, jemanden zu feuern, der sich unentbehrlich macht, aber das ist etwas ganz anderes, als jemanden zu feuern, der nur auf einem höheren Skill-Level ist
Was ist "FTE"? "Vollzeitbeschäftigter" macht in diesem Satz keinen Sinn.
@EsotericScreenName Es steht für Full Time Employee, aber der Begriff wird verwendet, um die Arbeitsbelastung (oder manchmal die Bezahlung) zu beschreiben. Wenn es verwendet wird, geht es davon aus, dass jeder Arbeiter gleich ist. In der Softwareentwicklung ist diese Annahme normalerweise Unsinn.
@Peter Ich glaube, in dem Kontext, in dem Sie es verwenden, ist es "Vollzeitäquivalent " - das heißt, wenn Sie jemanden haben, der nur montags und dienstags arbeitet, und jemanden, der nur von Mittwoch bis Freitag arbeitet, machen sie zusammen 1 VZÄ. Es ist jedoch eine schlechte Organisation, die von zwei solchen Entwicklern die gleiche Leistung erwartet wie von einem Vollzeitentwickler, worauf Sie hinaus wollen.

Unentbehrliche Leute zu feuern ist eigentlich eine vernünftige Managementstrategie. Wenn sich Ihr Unternehmen darauf verlässt, dass eine einzelne Person weiterhin ihre Arbeit erledigt und niemand sonst im Unternehmen über ihr Wissen und/oder ihre Fähigkeiten verfügt, entsteht eine enorme Haftung: Was ist, wenn diese Person von einem Bus angefahren wird und stirbt (daher der Begriff „Bus Faktor') oder entscheidet sich einfach dafür, das Unternehmen für eine neue Herausforderung zu verlassen? Jetzt steckt Ihr Unternehmen in einer schlimmen Situation, weil niemand den unverzichtbaren Mitarbeiter sofort ersetzen kann und Sie keine Kontrolle über das Timing hatten!

Um dieser Situation vorzubeugen, hat das Unternehmen zwei Möglichkeiten. Entweder können sie versuchen, das Wissen zu verbreiten und/oder die Fähigkeiten der Mitarbeiter der unentbehrlichen Person zu verbessern, oder sie können das Pflaster auf einen Schlag abziehen, indem sie die unentbehrliche Person zu einem Zeitpunkt ihrer Wahl feuern und sich von dem Verlust erholen des besagten Arbeiters, wenn sie auf diesen Prozess vorbereitet sind.

Da es nicht immer praktikabel ist, eine große Wissens- und insbesondere eine Fähigkeitslücke zu schließen, kann eine Entlassung die logischere Wahl sein.

Als Arbeitnehmer sollten Sie immer versuchen, nicht unentbehrlich zu werden. Teilen Sie Ihr Wissen mit Ihren Kollegen und stellen Sie sicher, dass es Menschen gibt, die Ihre Arbeit erledigen können, wenn Sie nicht da sind. Stellen Sie sicher, dass Ihre Praktiken für die Arbeitnehmer mit dem durchschnittlichen Qualifikationsniveau in Ihrem Unternehmen geeignet sind. Wenn Sie der Meinung sind, dass das durchschnittliche Niveau zu niedrig ist, arbeiten Sie mit dem Management zusammen, um zu versuchen, dieses Niveau zu erhöhen. Stellen Sie sicher, dass alles, was Sie erstellen, gut dokumentiert ist und dass diese Dokumentation von einem hohen Standard ist, damit jeder Ihrer Kollegen sie verwenden kann, um Ihre Arbeit fortzusetzen.

Aussagekräftige Antwort
+1 Wissen zu horten, sich absichtlich über Ihre Kollegen zu stellen, verursacht nur Ärger. "Sei nicht unersetzlich, wenn du nicht ersetzt werden kannst, kannst du nicht befördert werden"
Nein, jemanden zu feuern, weil er unentbehrlich ist, ist keine gute Strategie. Wirklich? Sie würden einen Mitarbeiter entlassen, weil er/sie einen Job zu gut gemacht hat? Es ist eine gute Strategie, sie zu fördern oder zu anderen Herausforderungen zu bewegen und so anderen die Möglichkeit zu geben, die Lücke zu füllen und die Abhängigkeit von der Einzelperson zu verringern (auf die sich der Artikel bezieht). Das Gegenteil, jemanden zu behalten, der gefeuert werden sollte, weil er oder sie unentbehrlich zu sein scheint, ist das eigentliche Problem.
Dies wurde auch in einem Kommentar angesprochen, und ich muss die Vernunft der Leute in Frage stellen, die denken, dass dies ein solides Management ist. Was um alles in der Welt könnte Sie glauben machen, dass es ein großartiger Plan ist, „es aus dem Weg zu räumen“ und Leute zu streichen, die per Definition entscheidend für die Ziele des Unternehmens sind? Menschen, die mit ziemlicher Sicherheit hervorragende und wertvolle Mitarbeiter sein werden. Abgesehen von der rein unsinnigen Idee, dass "die Kontrolle des Timings" irgendwie eine gute Sache ist, geschweige denn den Kompromiss wert, welche Art von Botschaft würden Sie an den Rest Ihrer Mitarbeiter senden?
Ja, Sie sollten daran arbeiten, niedrige Busfaktoren zu vermeiden. Ja, Sie sollten sicherstellen, dass Menschen, die unentbehrlich geworden sind, ihr Wissen und ihre Fähigkeiten teilen. Was Sie vorschlagen, ist vergleichbar mit dem Abschneiden Ihres Arms, weil ein Kratzer an Ihrer Hand sich entzünden könnte.
Wenn es einen „unentbehrlichen Programmierer“ gibt, feuern Sie den Manager. Niemand entlässt hochqualifizierte Mitarbeiter, weil sie gut genug sind, um unentbehrlich zu werden.
@SteveJ Um der Antwort willen habe ich offensichtlich einige Abkürzungen genommen. Wenn jemand in der realen Welt unentbehrlich geworden ist, hat das Management schon lange vorher versagt. Der Trick besteht darin, dass die meisten Menschen unentbehrlich werden , indem sie Wissen horten und Barrieren schaffen, um ihre Kollegen daran zu hindern, ihre Arbeit zu verstehen. Dies ist offensichtlich ein unerwünschtes Verhalten und sollte aktiv unterbunden werden. Die Botschaft, die dies an Ihre Mitarbeiter sendet, zeigt, dass sie sich nicht einfach mit Arbeitsplatzsicherheit verschleiern können.

Wenn die einzige Gemeinsamkeit zwischen den drei Situationen Sie sind, dann müssen Sie bedenken, dass etwas, das Sie tun, ein Problem darstellt.

Haben Sie mit Ihren ehemaligen Kollegen gesprochen und sie gebeten, Sie zu kritisieren? Nicht Ihr Code, sondern Ihr Verhalten im Büro. Die Art und Weise, wie Sie mit Ihren Kollegen kommunizieren, die Art und Weise, wie Sie mit Ihrem Chef kommunizieren, die Art und Weise, wie Sie Dokumentationen erstellen, wie Sie sich in Besprechungen verhalten usw.

Versetzen Sie sich in die Lage Ihres Vorgesetzten? Wirklich darüber nachgedacht, was sie tun müssen, was ihre Aufgaben sind, was ihnen ein gutes Gefühl gibt, wenn sie das Bürolicht ausschalten und nach Hause gehen? Es gibt viele, viele Beispiele, wo jemand erstaunlichen Code aus der Perspektive anderer Softwareentwickler schreibt , aber das Unternehmen scheitert.

Tatsächlich bin ich es gewohnt, oft Strategien vorzuschlagen, bestehende schlechte Strategien höflich zu kritisieren. Vielleicht interpretieren sie das als "arrogant" oder "Lektionsgeber". Aber Kritik gehört zu meinem Beruf als Ingenieur.
Die Hierarchie will diese Kritik nicht immer hören. Du sagst "wir sollten X statt Y machen"; Was der Chef hört, ist: "Du bist dumm, weil du dich in der Vergangenheit für Y entschieden hast. Wenn ich damals hier gewesen wäre, hätten wir uns für X entschieden." Egal wie höflich es formuliert ist.
Kritik zerstört Beziehungen. Zeitraum.
Mangelnde konstruktive Kritik tötet Unternehmen.

Ich habe mir Ihr Profil angesehen, da steht "Ihr Code sollte sauberer sein als Sie selbst". Auch aus Ihren Kommentaren, dass Sie "viel Zeit damit verbracht haben, Konzepte zu erklären" und "Kritik gehört zu meinem Job als Ingenieur" ... Ich denke, Sie geben gerne Ratschläge und Ihre Ratschläge werden von Ihnen einfach nicht geschätzt Teamkollegen.

Dies kann an dem liegen, was Sie sagen, oder an der Art und Weise, wie Sie es sagen, wahrscheinlich an beidem.

Das Schreiben von produktivem und wartbarem Code führt nicht dazu, dass Sie gefeuert werden. Sie werden gefeuert, wenn Sie mit dem Team nicht zurechtkommen. Das ist Ihr Problem, nicht (wie Sie es sich vorstellen) Ihr Code ist zu gut. Ihr Code könnte wirklich gut sein - aber VIEL wahrscheinlicher ist dies ein Persönlichkeitskonflikt.

Mein Rat an Sie ist, seien Sie nicht der Schwanz, der versucht, mit dem Hund zu wedeln. Halten Sie den Kopf unten, hören Sie auf, den Leuten zu sagen, wie sie programmieren sollen, folgen Sie den Anweisungen, arbeiten Sie gut mit anderen zusammen, schreiben Sie wartbaren Code. Und dann wirst du nicht gefeuert.

Ich nehme auch mit Interesse diesen aufschlussreichen Kommentar Ihres Vorgesetzten zur Kenntnis:

"Aber ist es wirklich gut, wie er vorgibt?"

Das sagt Ihnen, dass Ihr Vorgesetzter Ihnen nicht vertraut , Ihr Vorgesetzter Sie für unauthentisch und arrogant hält und/oder Ihre eigenen Fähigkeiten höher einschätzt, als Sie tatsächlich haben. Beziehungen sind auf Vertrauen angewiesen, um zu überleben. Beachten Sie, dass Ihr Problem kein technisches Problem ist. Ihr Problem hat sehr wenig mit der Qualität Ihres Codes zu tun. Was Sie haben, ist ein Problem mit der Art und Weise, wie Sie mit Ihren Kollegen und Ihrem Vorgesetzten umgehen.

Menschen werden nicht oft gefeuert, weil sie unentbehrlich sind ( warum Menschen gefeuert werden ); Das ist eine lächerliche Behauptung. Der Artikel, auf den Sie verweisen, qualifiziert eindeutig, dass "Feuer" nicht unbedingt bedeutet, sie gehen zu lassen, sondern sie nicht unverzichtbar zu machen (indem Sie sie verschieben, sie zwingen, nicht an einem bestimmten Projekt beteiligt zu sein usw.).

Überqualifiziert wird Sie zwar manchmal nicht einstellen, aber auch selten entlassen. Gute Mitarbeiter sind sehr schwer zu finden; Keine vernünftige Firma wird einen loswerden, weil sie zu gut sind (es sei denn, Sie arbeiten nur für einen Idioten – dann tun sie Ihnen einen Gefallen).

Menschen werden gefeuert, weil sie DENKEN, dass sie unverzichtbar und besser als ihre Kollegen sind, und sich daher weigern, die Änderungen vorzunehmen, die am Mann im Spiegel vorgenommen werden müssen, um in einem Team gut zu funktionieren. ( gefeuert wegen schlechter Einstellung )

Wenn Sie mit einem Haufen Eingeborener eine Brücke bauen und einen Laptop zücken, während der Rest Seile bindet, sind Sie vielleicht klüger oder gebildeter, aber Sie sind zu einem Nachteil für das Team geworden, und das Problem sind SIE.

Wenn Sie wirklich so großartig sind, wie Sie sich darstellen, wären Sie schlau genug, Ihre eigenen Handlungen anzupassen, um ein möglichst produktives TEAM zu bilden, anstatt dogmatisch Ihre eigene Agenda voranzutreiben (was Sie wahrscheinlich tun). Wenn Sie das tun würden, hätten Sie wahrscheinlich sehr lange einen Job.

Als jemand, der regelmäßig am Einstellungsprozess beteiligt ist, ziehe ich jeden Tag jemanden, der gut und sympathisch ist, einem großartigen und potenziellen Krebs vor.

Jedes Programm ist eine Kommunikation mit zwei Zielgruppen: einem Compiler oder Interpreter, der es ausführen wird, und einigen Menschen, die es gelesen und verstanden haben. Möglicherweise kommunizieren Sie sehr gut mit dem Compiler und schreiben dennoch schlechten Code, weil er von den anderen beteiligten Personen nicht ohne weiteres verstanden werden kann.

Typischerweise verfügt ein Programmierteam über eine Reihe von Sprachen, Frameworks, Techniken usw., die jedem im Team bekannt sind. Neue Mitarbeiter, denen einige dieser Teile fehlen, absorbieren sie schnell, weil jeder im Team sie erklären kann.

Die Verwendung von etwas außerhalb dieses Sets ist mit Kosten für den Arbeitgeber verbunden. Angenommen, Sie sind der einzige Programmierer in der Gruppe, der mit Framework X vertraut ist, und alle anderen sind mit einem älteren Framework Y vertraut, das für einen vorhandenen Code verwendet wird und fast so gut wie X ist.

Die Verwendung von Framework X wäre ein Fehler, es sei denn, es ist so viel besser als Y, dass das Management zustimmt, dass die technischen Vorteile aus der Verwendung ausreichen, um den Schulungsaufwand zu rechtfertigen, um alle mit X vertraut zu machen.

Eine Technik, die Sie verwenden könnten, besteht darin, Ihren Code von einigen der am wenigsten erfahrenen Personen überprüfen zu lassen, die ihn lesen können müssen. Sehen Sie, worüber sie zu fragen haben, und überlegen Sie, wie Sie diese Teile umschreiben könnten, um ihnen klarer zu sein. Je mehr Sie das Nichtverstehen Ihres Codes als Fehler im Code und nicht als Fehler der Leser behandeln, desto besser wird das Feedback, das Sie erhalten.

Ich glaube nicht, dass Sie es weit genug treiben – ich schlage vor, dass die Leute sich ein Programm als eine Unterhaltung zwischen einer Gruppe von Programmierern vorstellen, die zufällig maschinenausführbar ist. Die Fähigkeit der Maschine, ihn auszuführen, ist zweitrangig gegenüber der Fähigkeit, den Code zu warten – oder man könnte sogar sagen, dass fehlerhafter wartbarer Code behoben werden kann, während „perfekter“ Code, der vom Team nicht verstanden/gepflegt werden kann, schließlich ersetzt werden muss. Beachten Sie, dass unterschiedliche Situationen unterschiedliche Anforderungen haben - die ursprüngliche Architektur von Twitter war eine Sackgasse, aber sie verschaffte ihnen den Marktanteil und die Zeit, um sie komplett neu zu schreiben, Erfolg!
Für mich ist dies ein einzigartiger Blickwinkel, den ich schätze. Ich habe Rückmeldungen zu dem Effekt "ist nicht reflexionslangsam" oder "es ist optimaler, native Strukturen zu verwenden" erhalten. Darauf wäre meine ideale Antwort "Lass es uns in Montage schreiben", denn wenn es bei ihrer Kritik wirklich um Effizienz und Leistung geht, dann sollten wir einfach aufhören, "Schuhgrößen" zu messen und es am nächsten zum Metall schreiben.
Heutzutage wird für die meisten Entwicklungsarbeiten, mit Ausnahme von Big Data, die Optimierung auf Leistung überbewertet. Wartbarkeit und Lesbarkeit sind viel wichtiger.

Beschlossen, meinen Kommentar zu einer Antwort zu aktualisieren:

Dokumentieren Sie Ihren Code sehr gut.

Eine ordnungsgemäße Codedokumentation verwandelt schlechte Erfahrungen, bei denen ein Junior-Entwickler stundenlang mit dem Kopf gegen eine unverständliche Wand schlägt, in potenzielle Lernerfahrungen.

Denken Sie daran, guter Code sollte sich selbst dokumentieren :)
BDD/Unit Tests mit aussagekräftigen Namen sind die beste Dokumentation aller Zeiten.
@ Mik378 Das setzt voraus, dass Ihre Mitarbeiter tatsächlich loslegen, die Unit-Tests lesen und verstehen - soweit ich weiß, ist das nicht der Fall. Guter Code ist selbstdokumentierend, aber das setzt eine gewisse Vertrautheit mit den verwendeten Konventionen voraus. Sie sollten sich immer fragen: „Werden meine Kollegen diesen Code verstehen?“. Wenn nicht, kommentieren Sie es, bis sie es tun. Und dich abzuschneiden, "na ja, sie würden, wenn sie ..." schneidet es nicht ab. Sie dokumentieren es für Ihre aktuellen Mitarbeiter – wie sie derzeit existieren – nicht für einige hypothetische Mitarbeiter mit idealem Verhalten und Wissen.
@ Mik378: Gehen Sie nicht davon aus, dass es genug ist. Natürlich sollten Sie einen Code anstreben, der keine Kommentare benötigt. Und kommentiere trotzdem. Und für einen Code, der keine Dokumentation benötigt. Und sowieso dokumentieren. Das ist das Maß an Lesbarkeit, das in einem solchen Shop erforderlich ist.
Die Selbstdokumentation hat ihre Grenzen. Es ist sehr wichtig, die Regeln für Schnittstellen zwischen Modulen zu dokumentieren. Ich musste mich einmal durch etwa 7 Ebenen der Aufrufhierarchie arbeiten, um herauszufinden, ob ein Null-Argument zulässig ist oder nicht.
@ Mik378: Als jemand mit viel Erfahrung, der in einer Umgebung arbeitet, in der frühere Ingenieure darauf bestanden haben, dass die BDD-Tests die Dokumentation sind, also das ist alles, was wir hatten, kann ich Ihnen sagen, dass dies einfach nicht der Fall ist. Dass die Tests genauso nützlich sind wie die Dokumentation, ist reines Wunschdenken. Das Problem liegt in der Organisation und im Fokus – Tests erzählen die Benutzeroberfläche nicht auf zugängliche Weise, um daraus zu lernen, und sie erklären nicht, warum Dinge auf eine bestimmte Weise funktionieren.
Beste Antwort. Umfangreiche Kommentare würden die meisten Probleme lösen. Schreiben Sie Kommentare als Erzählung. Stellen Sie sich vor, Sie sitzen neben einem neuen Mitarbeiter und gehen mit dieser Person Ihren Code durch. Oder stellen Sie sich vor, Ihren eigenen Code mit einem großen Kater und wenig Schlaf zu lesen. Geben Sie oben einen allgemeinen Überblick, der das gegebene Problem und Ihre Strategie zusammenfasst. Verwenden Sie einen Konversationston, während Sie nach und nach jeden Gedanken und jeden Schritt abdecken. Verwenden Sie „wir“ und „unser“: „Wir sortieren die Wombats in ihre biologischen Kategorien, wie sie von Dr. Adèle Mercier definiert wurden.“ & „Wir haben uns für ArrayList statt LinkedList entschieden, da unsere Sammlung eingefroren und nicht geändert wird.“
@Peter Ich habe noch kein praktisches Beispiel für selbstdokumentierenden Code gesehen.
@RichardU Aber ich bin sicher, Sie haben praktische Beispiele gesehen, bei denen die Dokumentation weniger hilfreich war als keine Dokumentation. ;)
@Peter touché. Ein kürzlich erwachter Alptraum von mir ist ein gutes Beispiel. 4 Amateur-Programmierer, von denen ich annehme, dass jeder einen Blick auf ein Programmierbuch geworfen oder zumindest das Cover gelesen hat, haben diese Monstrosität geschaffen, die in den letzten Monaten der Fluch meiner Existenz war.

Die meisten Antworten behandelten Ihren Beitrag unter dem Gesichtspunkt, ob Ihr Code lesbar war oder nicht oder so gut, wie Sie sagen, dass er ist. Aber diese Situation kann und kommt in allen Lebensbereichen vor. Ich nahm einen Job auf dem Las Vegas Strip als 21 Dealer und Floorman an. Meine Techniken und meine Geschwindigkeit waren dem Rest ihres Personals so weit voraus, dass die Leute, die mich überwachen sollten, nicht mithalten konnten. Mit anderen Worten, sie konnten meinen Entscheidungen nicht folgen. Da große Geldbeträge innerhalb von Minuten abgewickelt wurden, fühlten sie sich oft verwirrt und meldeten mich ihrem Vorgesetzten und behaupteten, ich hätte einen Fehler gemacht. Ich würde meine Handlungen dieser Person gegenüber immer rechtfertigen, aber das Misstrauen mir gegenüber vertiefte sich.

Mein Ego und ich vermute, Ihres hat die Warnzeichen nicht gesehen und tatsächlich habe ich in meiner Überlegenheit geschwelgt, sie sozusagen ausgegossen. Mir wurde gekündigt und ich verlor eine extrem gut bezahlte Position.

Die Lektion ist einfach, Sie müssen auf das Niveau der anderen herunterdummyen. Wenn sie nur 15 Hände pro Stunde bekommen und Sie 100 bekommen, dann inspirieren Sie kein Lob. Sie wecken Eifersucht und sogar Hass. Wenn Ihr Stolz dies nicht kann, müssen Sie einen anderen Weg finden, Ihren Lebensunterhalt zu verdienen, denn alle Orte sind im Wesentlichen gleich. Menschen sind Menschen, man kann sie nicht ändern. Ich habe mich schließlich in anderen Arbeitsbereichen niedergelassen, in denen ich ebenfalls mittelmäßig war und daher nicht auffiel. Ich hoffe, Sie können das zu Ihrem Vorteil klären.

Ausgezeichnete Beratung. Ich habe das selbst auf die harte Tour gelernt. Eine kleine Einschränkung. Du musst die Dinge nicht immer verdummen, aber du musst gut passen.
Eine gute Passform – das gefällt mir. Ich musste mich an die Regeln halten. Ich hatte das Gefühl, dass die Regeln eingeführt wurden, damit sie mittelmäßige Leute einstellen konnten, um andere mittelmäßige Leute zu beobachten. Angeblich wurde die QWERTZ-Tastatur ursprünglich implementiert, um zu verhindern, dass die Leute zu schnell für die Maschine tippen.
Ihre Erfahrung ist sehr interessant. Du erwähnst nicht, wie du in Bezug auf den House's Cut abgeschnitten hast. Haben Sie mehr oder weniger als den Durchschnitt verdient? Ein Casino ist ein Geschäft und jede Entscheidung wäre sehr stark von den Umsatzkennzahlen beeinflusst worden.
@bobbym, aber die Regeln wurden für Medicore aufgestellt, um Medicore zu sehen. Es ist expebsive, das Beste und Bessere als das Beste einzustellen, um superweise zu sein.
@ joojaa, wahr genug. Aber wenn ein überdurchschnittlich guter Kerl versehentlich an einen solchen Ort gerät, sollten sie ihn pflegen und nicht feuern. @ CyberFonic, es gab keinen Haushaltsschnitt. Ich arbeitete für den Mindestlohn als Agent des Casinos. Die Dealer in 21 müssen das Spiel nach einem festen Satz von Regeln austeilen.
@bobbym vielleicht, aber pragmatisch gesehen ist diese Fähigkeit aus geschäftlicher Sicht nicht unbedingt besser. Wir verwechseln technische Finessen oft mit besser, aber die Umsetzung dieser Finessen in handfesten Nutzen für das Geschäft ist nicht unbedingt groß. Aus geschäftlicher Sicht sind Sie also nicht unbedingt besser.
@bobbym Mindestlohn oder gut bezahlter Job? Ich habe das Gefühl, dass diese selten gleich sind. Wie auch immer, ja, das sind die Regeln von Blackjack, aber der Punkt von cyberfonic ist immer noch gültig. Wenn Ihre Geschwindigkeit im Durchschnitt in einer Stunde dazu führt, dass Sie mehr Geld verlieren als ihre „mittelmäßigen Mitarbeiter“ (oder weniger gewinnen. Casinos neigen dazu, nicht oft Geld zu verlieren, obwohl für das Management nicht erzielte Einnahmen möglicherweise als verlorenes Geld angesehen werden), dann alles Ihre überlegene Technik zählt nichts. Wenn Sie mit Ihrer überlegenen Technik deutlich MEHR Geld verdienen würden, wäre ich überrascht, wenn sie Sie feuern würden.
@Patrice: Ich war auch überrascht. Natürlich macht ihnen mehr Arbeit mehr Gewinn, dafür garantiert die mathematische Erwartung. Wenn das Management irgendetwas davon verstehen könnte, wären sie nicht mittelmäßig gewesen. Ja, der Mindestlohn ist und war niedrig, aber das Trinkgeld, das wir gegeben haben, war es nicht.

Ich habe gelesen, dass Sie vom ersten Tag Ihrer Arbeit an für diese Behandlung bestimmt waren. Sie sagten, Sie wurden eingestellt, weil Sie Fähigkeiten haben, die sonst niemand in der Organisation hat (TypeScript, Node). Und jetzt, wo Sie sich abgemüht haben, ganz allein eine elegante, fachmännisch gefertigte, komplexe Lösung zu produzieren , versteht niemand, was Sie getan haben, und deshalb werden Sie vom Management als Belastung angesehen.

Wenn das alles stimmt, hätte es wirklich nicht anders kommen können.

Aus meiner Sicht ist das Problem strukturell, nicht persönlich, und daher liegt die Schuld in der Situation und im Prozess, nicht in der Person:

  • Die Organisation stellte eine einzelne Person mit völlig anderen Fähigkeiten als alle anderen und auf einem fortgeschrittenen Niveau dieser Fähigkeiten ein, um eine entscheidende Funktion zu erfüllen. Dies garantiert, dass Sie bei guter Leistung der einzige sind, der Code versteht, der für die Mission der Organisation entscheidend ist. (Es ist völlig unvernünftig, von einer hochrangigen Ressource zu erwarten, dass sie Code produziert, der für Personen, die die verwendete Sprache nicht kennen, sofort Sinn ergibt.)
  • Die Organisation hat Sie nicht regelmäßig dem Codeüberprüfungsprozess unterzogen. Wenn dies der Fall gewesen wäre, wäre Ihr Code abgelehnt worden, bis Sie ihn in Übereinstimmung mit ihren Lesbarkeitsstandards gebracht hätten. Da Sie der einzige Mitwirkende am Code sind, mit Ihrem eigenen Stil und einem anderen Tech-Stack, ist es praktisch garantiert, dass der Code mit der Zeit für andere immer weniger verständlich wird. Die einzige Möglichkeit für Sie, dies zu verhindern, besteht darin, andere ständig außerhalb des Prozesses um eine Codeüberprüfung zu bitten und möglicherweise den Vorwurf zu erheben, die Zeit anderer zu verschwenden. Ein fehlender Code-Review-Prozess bereitet Sie somit auf ein Scheitern vor.

Ich habe ähnliche Erfahrungen in meinem Hintergrund. Ich wurde einmal eingestellt, um eine Qualifikationslücke zu schließen. Niemand sonst im Unternehmen hatte eine Fähigkeit, die er plötzlich brauchte. Ich habe meine Arbeit gut gemacht und nach ein paar Monaten begannen Konflikte. Ich war der einzige, der mit bestimmten Komponenten der Anwendung arbeiten konnte. Ich wurde zu einem Engpass, als sich Arbeit anhäufte, die nur ich erledigen konnte. Eines Tages wurde ich ins Abseits gedrängt, als das Unternehmen beschloss, alles, was ich produziert hatte, durch komplett neuen Code zu ersetzen. Mein Stolz war damals verletzt, aber im Nachhinein war es die richtige Entscheidung für das Unternehmen. Nach einer Weile war es für mich an der Zeit, weiterzumachen, und das tat ich.

Wenn Ihnen das bekannt vorkommt, ist es vielleicht an der Zeit, dass Sie weitermachen. Vielleicht wird Ihnen das Management sogar etwas anderes zuweisen, wenn es Ihre Fähigkeiten weiterhin schätzt. Oder wenn Sie es ertragen können, können Sie vielleicht helfen, alles, was Sie getan haben, in den Standard-Technologie-Stack des Unternehmens umzuschreiben. Wenn das nicht möglich ist, gehen Sie einfach. In jedem Fall ist Ihr Code wahrscheinlich auf dem Weg in den Mülleimer. Das ist wahrscheinlich das Richtige für sie, wenn es sonst niemand versteht. Und überhaupt ist es die natürliche Folge ihrer Entscheidungen.

Stellen Sie sicher, dass andere in Ihrem Team bei Ihrem nächsten Job im Wesentlichen die gleichen Fähigkeiten anwenden wie Sie, und insbesondere, dass sie einen Code-Review-Prozess haben. Wenn sie Sie bitten, Ihren Code auf bestimmte Weise zu ändern, tun Sie es. Betrachten Sie den Code nicht als geliefert, bis er die Codeüberprüfung bestanden hat und Ihre Kollegen dem Management mitteilen (falls Sie danach gefragt werden), ja, der Code ist gut. Dann gibt es kein Problem. Es ist völlig in Ordnung, in einem technischen Interview Fragen zu solchen Dingen zu stellen. Ich habe es so oft getan. Hoffentlich gibt Ihnen dieser andere Entwickler, der Ihren Code studiert hat, eine gute Referenz.

Als Fußnote: Wenn Sie zumindest teilweise für Ihre Umstände verantwortlich sind, ganz alleine zu arbeiten, ohne Unterstützung durch andere Teammitglieder, dann verdienen Sie auch zumindest einen Teil der Verantwortung für das Ergebnis. (Haben Sie darauf gedrängt, TypeScript / Node zu verwenden, wenn andere etwas anderes verwenden wollten? Haben Sie die neueste, coolste Bibliothek oder Technik verwendet, obwohl etwas Grundlegenderes gut getan hätte? Ich habe mich auch ein- oder zweimal dafür schuldig gemacht. ) Wenn ja, ziehen Sie unbedingt eine Lehre aus diesem Ergebnis. Aber wenn nicht, nehmen Sie diese Erfahrung mit hoch erhobenem Haupt in Ihre nächste Position mit.

Was für eine Antwort! Es ist völlig in Phase mit der Realität, großartig!

Es ist möglich, dass Sie einfach nicht so gut sind, wie Sie denken, aber der Höflichkeit halber gehe ich davon aus, dass Sie wissen, wie man die richtige Menge an komplexem Code schreibt, um die Komplexität und den Zeitbedarf der gesamten Codebasis um ein zu reduzieren Größenordnung. Dass dies überhaupt möglich ist, überrascht viele Idioten. Sie finden es ein ungläubiges Angebot, und der einzige Weg, sie zu überzeugen, besteht darin, es ihnen zu zeigen.

Aber das erfordert Fingerspitzengefühl, Mut und Selbstbeherrschung. Sie müssen sich vor allen anderen auf drei Dinge konzentrieren: beweisen, dass Sie keine Bedrohung darstellen, die Idioten schlau aussehen lassen und niemals einen einzigen Idioten erkennen lassen, dass Sie wissen, dass er ein Idiot ist. Wenn Sie sich nicht dazu bringen können, diese drei Dinge zu tun, werden Sie scheitern, und es wird Ihre Schuld sein. Pragmatismus ist ein Muss, und für Stolz ist kein Platz.

Obwohl ich diesen Ansatz nicht jedem empfehlen kann, hat es bei mir immer funktioniert, manchmal zu ignorieren, was feindselige Idioten mir sagen. Stattdessen finde ich Wege zu dem, was ich tun möchte, produziere in kürzester Zeit die beste Software, deren Code viele von ihnen je gesehen haben, und ich präsentiere sie so, dass ihre Chefs sie mit glühendem Lob belohnen. Auch wenn sie bei der Entstehung keine Rolle gespielt haben. Auch wenn sie sich aktiv dagegen wehren.

Ist es richtig? Sollte ich nicht die volle Anerkennung für meine Arbeit bekommen? Sollte ich wirklich um die Gefühle aller herumtanzen müssen? Irrelevant. Das ist die Realität. Wenn ich mich nicht daran anpasse, dann bin ich der Idiot.

Code, den fünf Personen verstehen und pflegen können, ist besser als Code, den nur einer pflegen kann. (Vorausgesetzt, es erfüllt die Anforderungen.)
Daniel, es sieht so aus, als hättest du zwei Konten. Sie können den Link „Kontaktieren Sie uns“ unten auf der Seite verwenden, um zu beantragen, dass sie zusammengeführt werden, sodass alle Aktivitäten auf einem Konto stattfinden.

Es gibt viele kluge Leute , die denken, dass hochqualifizierte Entwickler unersetzlich sind und dass Sie sie deshalb wollen . Aber Sie haben die anderen Antworten auf Ihre Frage gesehen – die meisten Manager wollen sich nicht mit den Problemen eines Teams mit sehr unterschiedlichen Qualifikationsniveaus befassen und haben nicht die Möglichkeit, rein hochqualifiziert zu werden. Sie liegen auch nicht unbedingt falsch, die Probleme sind real, und die Vorteile von hochwertigem Code, der die Fähigkeiten der meisten Leute, die sie einstellen können, übersteigen, werden stark verringert.

Wenn Sie auch nur annähernd so gut sind, wie Sie sagen, dann passen Sie nicht zu Ihrem Job. Es hört sich so an, als sollten Sie sich bemühen, an einem Ort zu arbeiten, an dem Sie von Ihren Kollegen lernen können und Ihre Kollegen Ihren Code verstehen können.

Wenn Sie dadurch ein paar Jobs verloren haben, werden Sie bei HR, Personalvermittlern und Managern ziemlich schlecht aussehen. Hoffentlich können Sie sich in einen Job vernetzen, indem Sie Entwickler mit ähnlichen Fähigkeiten treffen, die bestätigen können, dass das Problem wirklich darin besteht, dass Ihre Fähigkeiten zu hoch sind.

Abschließend muss ich hinzufügen, dass Sie Ihr Bestes tun sollten, um ehrlich zu beurteilen, ob Ihr Können wirklich so hoch ist. Es klingt, als gäbe es Beweise dafür, aber die meisten Menschen glauben, dass sie besser sind, als sie sind. Auch durchlaufen viele Entwickler eine Phase, in der sie in einem Ansatz sehr gut werden, aber noch nicht immer alles zu einer global optimalen Lösung zusammenfügen und es ihnen immer noch an Flexibilität mangelt. Manchmal ist es beispielsweise am besten, sich für eine minderwertige Lösung zu entscheiden, von der Sie wissen, dass Ihre Mitarbeiter sie warten können, wenn Sie wissen, dass sie keine anspruchsvollere Lösung warten können, und wahrscheinlich niemanden einstellen werden, der dies kann.

Die Probleme, mit denen ein Team mit sehr unterschiedlichen Fähigkeiten konfrontiert wird, sind fast ausschließlich zwischenmenschlich und emotional und nicht technisch.

Um konkret auf die Frage einzugehen,

Wie kann ich das in Zukunft vermeiden?

  • Finden Sie ein lokales Toastmasters-Kapitel, nehmen Sie aktiv teil und verdienen Sie sich die Errungenschaften. Etwas, das als Feedback so offensichtlich erscheint, wird hoffentlich geschätzt und zu einer Ihrer wertvollsten Fähigkeiten geschärft.

  • Üben Sie sich darin, der Student statt der Experte zu sein. Haben Sie diesen Vortrag von Jon Skeet über die Grundlagen gesehen ? Können Sie sich vorstellen, wie viel mehr Verständnis erreicht werden kann, wenn wir alle eine solche Dokumentation erstellen würden, es würde allen auf allen Ebenen eines Teams zugute kommen!

  • Ein Team ist nicht ein Individuum. Ihr Team wird gemeinsam wachsen und sich verbessern. Du musst helfen. Es ist kein Team, wenn jedes Mitglied eine Zelle ist, die in verschiedene Richtungen geht (z. B. Sie höher und das neueste Mitglied stagniert). 2-Stunden-Meetings sind ein guter Anfang. Ich würde noch die N-Tage-Paarungsrotation hinzufügen. Dies ist die 1:1-Zeit, die Sie Ihren Teamkollegen schenken UND sie Ihnen schenken . Lehnen Sie sich in Ihrem Fall in Richtung der Navigatorrolle und lassen Sie Ihren Partner fahren. Üben Sie, den Code nicht zu schreiben, so seltsam das auch klingen mag.

  • Arbeite ehrenamtlich bei einem lokalen Meetup und bei Hack-A-Thons. Es kann Sie zwingen, Ihren Code zu destillieren, weil der Zweck darin besteht, zusammenzuarbeiten und kein fehlertolerantes Energieversorgungsnetz aufzubauen, richtig?

  • Probieren Sie in jeder dieser Übungen dieses Konzept aus: Führen durch Dienen. Wie können Sie eine Aufgabe erledigen oder etwas erreichen, um den Bedürfnissen eines anderen Teammitglieds zu helfen?

  • Wie bereits erwähnt, tragen Sie zu Open-Source-Projekten bei, um mehr Einblicke in Ihren Code zu erhalten. Sie können bestätigen, dass Sie brillant sind, aber sie können auch die Vorschläge verstärken, die Sie von Ihrem derzeitigen Chef hören. Im besten Fall gibt Ihnen eine Überprüfung eine neue Idee.

  • Finden Sie einen Ingenieur, der besser ist als Sie. Es geht nicht darum, sich selbst zu verbessern, um der klügste Typ im Raum zu sein. Es gibt ein Zitat (mein Googeln ist zwischen Olgivy / Ford / Sorkin aufgeteilt), das umschrieben lautet: "Sie können nicht mehr lernen, wenn Sie sich mit schlechtem Talent umgeben".

Ich habe mein OP aktualisiert.
Glaubst du, dass das gleiche erreicht werden kann, indem man Patches an ein größeres FLOSS-Projekt sendet?
Toastmasters passen besser in die Menge als alles andere. Für Leute, die das nicht anstreben, könnte es nicht die beste Idee sein. Ich habe auch nicht herausgefunden, dass das Feedback immer ehrlich war, zB wird für meinen Geschmack mit zu viel Diplomatie und Samthandschuhen umgegangen.
@Nemo Ich wünschte, ich hätte mich erinnert, ja! Zu offenen Projekten beizutragen, die mehr Augen zum Überprüfen bekommen, eine super Idee, um mir zu helfen, meinen Code zu verbessern.
@RuiFRibeiro Das ist wahr. Es ist auch wichtig zu lernen, Feedback zu filtern. Es ist kein kleiner Punkt. Es gibt ein Buch „Danke für das Feedback“ von Stone & Heen, an dem ich gearbeitet habe, um daran zu arbeiten. Meine Empfehlung ist, sich zu üben, sei es in einer sicheren Umgebung wie TM oder auf andere Weise, gehen Sie bitte in Ihre Praxis.

TL;DR : Finden Sie einen geeigneteren Arbeitsplatz und seien Sie ehrlich in Bezug auf die Fähigkeiten, die Sie noch lernen müssen.

Sie klingen für mich nach dem „Software-Handwerksstil“ des Entwicklers – interessiert an Best Practices und immer auf der Suche und Befolgung guter Wege, Dinge im Code zu erledigen. Vielleicht wären Sie in einem Umfeld glücklicher, in dem sich andere Entwickler mehr für solche Dinge interessieren - und solche Arbeitsplätze gibt es viele.

Einige der Dinge, die Sie gesagt haben, erwecken jedoch den Eindruck, dass Sie manchmal denken, dass es einen einzigen „besten Weg“ gibt, Dinge im Code zu tun, die immer befolgt werden sollten. Vielleicht liege ich da falsch – aber wenn ich richtig liege, müssen Sie möglicherweise etwas lernen, wenn es darum geht, die Vor- und Nachteile alternativer Entscheidungen zu untersuchen und den Weg zu finden, der die beste Balance für das Unternehmen darstellt. Tatsächlich werde ich sagen, dass Sie sich dort definitiv verbessern müssen - denn das tun wir alle !

Ich gehe davon aus, dass Ihre Beschreibung der Situation so ist, wie Sie sagen. Ich kann nicht sagen, dass ich genau diese Erfahrung gemacht habe, aber es gibt Aspekte davon, die mir vertraut sind.

Sie sagen, dies sei ein „großes“ Unternehmen. Ich weiß nicht, wie es in Frankreich ist, aber oft legen größere Unternehmen keinen Wert auf interne Entwicklerfähigkeiten, insbesondere wenn es sich nicht um technologieorientierte Unternehmen handelt. Ich führe das vor allem darauf zurück, dass Manager in solchen Unternehmen oft keinen technischen Hintergrund haben oder aus der Entwicklung weggezogen sind, weil sie nie so gut darin waren.

Es gibt auch einen historischen Aspekt von Anbietern, die Tools verkaufen, die den Bedarf an talentierten Entwicklern beseitigen sollen. Selbst wenn Ihr Team eines dieser schrecklichen Dinge nicht verwendet, besteht die Möglichkeit, dass das Management des Unternehmens mit einer anti-intellektuellen Vorstellung von Entwicklungsteams indoktriniert wurde. Ich hatte tatsächlich einen Manager, der mir ins Gesicht sagte, dass ich schlau genug sei, eine bestimmte Lösung zu bauen, aber dann würde niemand sonst in der Lage sein, sie zu warten, also mussten wir etwas kaufen (Regalware). Ich glaube also, dass dies passieren kann .

Möglicherweise müssen Sie sich nach einer anderen Art von Unternehmen umsehen. Einer, der hochqualifizierte Entwickler schätzt. Möglicherweise müssen Sie sich jedoch damit auseinandersetzen, dass Sie dort nicht der beste Entwickler sind. Wenn Sie ein aufstrebender Koch wären, wären Sie wahrscheinlich unglücklich bei McDonald's zu arbeiten. Sie brauchen keine Köche. Sie brauchen Menschen, die einem Rezept folgen. Sie können Chefkoch sein und diese Firma (und andere ähnliche) ist McDonald's. Die Frage, die Sie sich stellen müssen, ist, warum Sie dies noch nicht getan haben.

Schöne Koch/McD-Analogie - ja, oder "zu viele Köche verderben den Brei"
Ihre Hypothese über Frankreichs "Grands Comptes" (große Fische, insbesondere Banken) ist absolut wahr. Ich habe dort drüben nur "klugen" Code geschrieben, wenn ich keine Wahl hatte. In den meisten Fällen reichte es aus, es wie andere zu tun, nur sauberer, um die Arbeit zu erledigen - und lesbar zu sein. Und ich hatte nicht erwartet, dass meine wenigen schlauen Programme von irgendjemandem gewartet werden könnten.

Manchmal, wenn Sie mit anderen sprechen, müssen Sie es "verdummen", damit Sie die Leute nicht beleidigen. Besonders wenn Sie den anderen, mit denen Sie zusammenarbeiten, weit überlegen sind, sind sie wahrscheinlich beleidigt, wenn Sie über Tipps und Fakten sprechen, die sie wahrscheinlich kennen sollten, aber nicht kennen.

Ich würde sagen, kommentieren Sie Ihre Arbeit wirklich gut, damit die Leute, die sie überprüfen, sie verstehen können. Möglicherweise müssen Sie sogar in Ihren Kommentaren „begründen“, warum Sie diese Codierungsmethode einer anderen vorziehen. Sie sind vielleicht der beste Programmierer, aber wenn Sie Teil eines Teams sind, müssen Sie als Team arbeiten.

Wenn die Arbeit im Team bedeutet, mit einer Hand hinter dem Rücken zu arbeiten (damit meine ich, ihrer Programmierpräferenz zu folgen), dann tun Sie es. Zumindest können sie es dann lesen, verstehen und das Team selbst ist besser dran (auch wenn das bedeutet, dass Sie innerlich schreien).

Fast überall, wo Sie Teil eines Teams sind, gibt es Richtlinien darüber, wie Dinge codiert werden sollen – und Sie müssen diese Richtlinien befolgen.

Wie kann ich das in Zukunft vermeiden?

Arbeiten Sie mit niemandem zusammen, von dem Sie nicht hinreichend sicher sind, dass dessen Codierungsstandard mit Ihrem übereinstimmt. Das bedeutet, dass Sie jeden Job ablehnen, wenn keiner der folgenden Punkte zutrifft:

  • Sie stellen Ihnen während ihres Interviewprozesses Programmierfragen
  • Sie haben Peer-Programming-Übungen
  • Sie fragen nach einem Codebeispiel und sind damit einverstanden
  • Sie können einen Teil des Codes sehen, den sie erstellt haben

Wie kann ich das in der Gegenwart vermeiden?

Dies wurde durch andere Antworten abgedeckt.

Wenn Sie nur so viel besser sind, erreichen Sie ihr Niveau und bringen Sie ihnen langsam bei, bessere Programmierer zu werden. Als ich das erste Mal einen Praktikanten leiten musste, habe ich fast den gesamten Code, den er produziert hat, ausgelöscht. Ich war buchstäblich wütend, als ich sah, was begangen wurde (zum Glück hatte ich keine Zeugen :P ) .

Sie müssen Peer-Programmierung und Code-Reviews fördern. Setzen Sie sich mit einem anderen Programmierer zusammen und versuchen Sie, 2 oder 3 Stunden lang gemeinsam zu programmieren. Lassen Sie Konzepte fallen, die möglicherweise zu schwer zu erklären sind (z. B. neue erweiterte Java 8-Funktionen), und erklären Sie diejenigen, die einfacher sind (Vererbung).

Ja, die Sache ist, dass ich all dies vorgeschlagen habe. Antwort war: "Wir haben keine Zeit zum Lernen".
dann stimmen ihre Kultur und deine nicht überein. An anderen Stellen ist es eine gute Möglichkeit, zu sagen: „Ich habe keine Zeit zum Lernen“.
Stimme zu :) Ich werde nächsten Freitag abreisen.

Sie klingen, als wären Sie ein guter Programmierer, um sich an viele Situationen anpassen zu können. Sehen Sie sich an, wie andere codieren, und verhalten Sie sich entsprechend. Fragen Sie gelegentlich, ob Sie verschiedene Möglichkeiten ausprobieren können, und stellen Sie sicher, dass es nicht zu weit über das hinausgeht, was alle anderen verstehen können.

Normalerweise würde ich diesen Rat nicht geben, aber dieses Problem scheint Sie zu verfolgen, wohin Sie auch gehen, also hören Sie auf, dagegen anzukämpfen, bis Sie einen Job finden, bei dem dies kein Problem ist. Sie können in Betracht ziehen, sich an einem Projekt zu beteiligen, bei dem es eine kleine Anzahl anderer Entwickler gibt, die Sie mitbringen könnten, damit es nicht so aussieht, als ob nur Sie so "abnormal" programmieren.

Es ist eine Schande, dass andere Ihre Arbeit nicht schätzen oder daraus lernen wollen, wenn das der Fall ist. Hör auf, mit dem Kopf gegen die Wand zu schlagen. Wer weiß, es wird ein Projekt/eine Aufgabe auftauchen, bei der Sie die einzige Hoffnung sind, es zum Laufen zu bringen. Niemand wird sich darum kümmern, wie kompliziert Ihr Code auf lange Sicht ist, wenn Sie ihn einfach zum Laufen bringen, wenn es sonst niemand kann.

Wir waren 3 Entwickler im Team.
Jeden Tag erkläre ich ihnen einige Programmiertipps, und sie haben es sehr genossen. Das Problem ist, dass sie sich zwar darüber freuen, mich darüber sprechen zu hören, aber in ihrem Kopf eine Art Minderwertigkeitskomplex installiert haben. Das war der Beginn meiner Managerreaktion.
@Mik378 Alltäglich ist viel, viel zu oft. Wählen Sie eine einfache Änderung, die eine große Auszahlung bringen würde. Demonstrieren Sie den Unterschied zwischen dem Code, der auf übliche Weise vom Team geschrieben wurde, und Ihrem Vorschlag. Lassen Sie das eine Weile wirken, bevor Sie etwas anderes ausprobieren.
"und sie haben es sehr genossen" - sind Sie sich da sicher? vielleicht sind sie nur höflich. Wie kann jemand, der sich minderwertig fühlt, "weitgehend genießen". Deine Aussage ist nicht konsistent.
@ Mik378 Wenn Sie aus dieser Frage nichts anderes entnehmen, sollten Sie Brad Thomas 'Kommentar glauben - es ist wahrscheinlich der Schlüssel zu Ihrer Situation.

Wir können uns nicht langfristig auf ihn verlassen

Das ist das Hauptproblem. Sie wollen nicht von Ihnen abhängig sein, aber Sie wurden eingestellt, weil sie tatsächlich von Ihnen abhängig sind.

Sie können das Management entweder beruhigen mit:

  • Sie denken sowieso nicht daran, woanders hinzugehen, damit sie sich langfristig auf Sie verlassen können.

Ich denke, ich werde mit Problemen herausgefordert, die meine Fähigkeiten nutzen, also denke ich, dass ich endlich einen Arbeitsplatz finde, an dem ich lange Freude haben kann

  • Sie sind bereit, andere Teammitglieder zu schulen, um dem Team einen Mehrwert zu bieten.

Mir ist aufgefallen, dass der Code anderer nicht wirklich auf dem neuesten Stand der Softwareentwicklungstechniken ist, das ist kein Problem, ich kann diese Techniken ganz einstellen, aber es wäre von Vorteil, wenn alle anfangen würden, diese Techniken allmählich zu verwenden, um die Leistung des Teams zu verbessern. Ich kann dabei helfen.

  • Sie wurden gebeten, die Funktionen XY zu implementieren, da die innerhalb der Zeit gelieferten Funktionen Ihre Fähigkeiten erforderten, hätten die Dinge auf andere Weise erledigt werden können, aber in viel mehr Zeit und mit dem Risiko zusätzlicher Fehler.

Darf ich etwas mehr Zeit haben, um die nächsten Features fertigzustellen? Ich habe wirklich hart gearbeitet, um die Dinge richtig zu erledigen, ich habe es geschafft, aber ich fürchte, nicht jeder kann das verstehen, stattdessen möchte ich mir etwas Zeit nehmen, um die Dinge für andere verständlich zu machen.

Seien Sie ehrlich, wenn eine Aussage nicht zutrifft (ich weiß jetzt nicht, woran Sie gearbeitet haben), lügen Sie niemals.

Wenn sie dich feuern, dann sind sie nicht wirklich von dir abhängig. Auf jeden Fall verstehen mindestens 2 Personen im Team Ihre Arbeit: Sie und Ihr Kollege. Und die Chancen stehen gut, dass es in Zukunft mehr Menschen verstehen werden. Grundsätzlich bist du kein Engpass in deinem Team, sie befürchten jedoch, dass du es später werden könntest. Sie sollten sowieso etwas Zeit in die Ausbildung investieren.

Lesen Sie „ Der Wagen, die Amsel und der Saab“ . Es sollte bei dir ankommen.

Ich hatte in der Vergangenheit ähnliche Probleme; Ich habe einiges über Coping gelernt, aber wir haben beide mit Mopp und Eimer versucht, den Ausfluss eines Feuerwehrschlauchs zu reinigen.

Ich schlage hier nicht vor, dass Sie eine DSM-V-Diagnose für psychische Gesundheit verdienen, aber ich schlage vor, dass Sie gut beraten sein könnten, einen guten Berater zu finden und an nicht bedrohlichem Verhalten und sozialen Fähigkeiten zu arbeiten. Sie könnten auch Theory of Alien Minds lesen .