(Ich spreche über HTML / CSS-Code (keine Programmiersprachen), aber ich denke, wir stehen auch vor dem gleichen Problem wie bei Programmierern.)
Ich bin der leitende Front-End-Designer in einem Team und muss die Ergebnisse meiner Junioren oft in engen Fristen überarbeiten.
Ich habe zwei Probleme:
- Ihr Codierungsstil ist ein bisschen chaotisch.
- Die Ästhetik ist nicht gut.
Ich finde, ihr Codierungsstil ist eine gemischte Tasche ohne angemessene Konvention / Norm. Ich bin hin- und hergerissen zwischen dem Aufräumen des Codes oder dem einfachen Umgang mit dem Code (sogar dem Kopieren, wie sie Dinge tun).
Ich finde es frustrierend, ihrem Codierungsstil zu folgen, da ich das Gefühl habe, schlechte Gewohnheiten zu lernen. Aber das ist der schnellste Weg, um die Frist einzuhalten.
Was ist für diejenigen mit viel mehr Erfahrung effektiver? Soll ich die Bereinigung für später aufheben? Oder aufräumen, während ich die Änderungen vornehme?
(Ich möchte zwar nicht arrogant klingen, aber das ist die Realität. Es wird mehr Jahre dauern, bis sie besseren Code schreiben. Ich weiß, ich habe chaotischen Code geschrieben, als ich anfing.)
quelle
Antworten:
Ich glaube, Sie sehen das Problem falsch - Sie verpassen eine großartige Gelegenheit, den Junioren beizubringen, wie man besseren Code schreibt.
Wenn Sie ihren Code gewohnheitsmäßig neu schreiben, können Sie Ihren Junioren den Eindruck vermitteln, dass Sie ihre Arbeit nicht schätzen, was ihre Moral mindert und ihnen beim nächsten Mal nicht hilft, besser zu programmieren.
Ich glaube, ein besserer Ansatz ist es, dem Entwicklungsprozess Ihres Teams eine Aufgabe zur Codeüberprüfung hinzuzufügen. Es muss sich nicht um jeden festgeschriebenen Code handeln, und er muss nicht (ich würde behaupten, dass er nicht sollte) nur von Ihnen durchgeführt werden - wann immer ein Mitglied Ihres Teams eine ausreichend große Aufgabe erledigt, sollte er es tun Verbinden Sie sich mit einem (oder mehreren) seiner Teamkollegen, erklären Sie ihnen den Code und erhalten Sie eine konstruktive Meinung und Kritik zu seinem Design, seinem Codierungsstil, möglichen Fehlern und Sicherheitsproblemen usw.
Wenn der Teamkollege, der den Code überprüft, Sie sind, wird er viel mehr aus Ihrem Fachwissen lernen, als wenn Sie einfach seinen Code neu schreiben (er hat die Möglichkeit zu hören, warum der Code geändert werden sollte), und wird möglicherweise weniger Anstoß nehmen.
Indem Sie ihnen die Möglichkeit geben, auch Code-Reviews durchzuführen, verbessern Sie ihre Fähigkeiten - sehen, wie andere Leute Code schreiben und warum - und steigern ihr Selbstwertgefühl.
Sie werden auch viel lernen, wenn Sie ihnen die Möglichkeit geben, Ihren Code zu überprüfen . Vielleicht lernst du auch etwas - also tu es nicht nur für die Show!
quelle
Ich habe das schon einmal gesagt und werde es noch einmal sagen: "Arbeitscode ist wertvoller als hübscher Code".
Wenn Sie den Code ändern, ist die Wahrscheinlichkeit groß, dass Sie sein Verhalten ändern. Wenn es sich um getesteten Code handelt, haben Sie gerade den gesamten Testaufwand ungültig gemacht und müssen die Tests wiederholen.
Ermutigen Sie auf jeden Fall Ihre Junioren, sauberen, verständlichen Code zu schreiben. Wenn Sie jedoch alles, was sie schreiben, neu schreiben, verschwenden Sie das Geld Ihres Arbeitgebers um ein Vielfaches. Sie müssen für Ihre Junioren bezahlen, dann für Sie, um das zu tun, wofür sie Ihre Junioren bereits bezahlt haben, und dann noch einmal für Sie, um den Job zu erledigen, für den sie Sie tatsächlich eingestellt haben.
quelle
Die kurze Antwort lautet: nein. In schwierigen Zeiten muss man manchmal nur den Kopf senken und die ästhetische Kugel nehmen. ;)
Eine pragmatischere Antwort ist es, die Zeit zu verkürzen. Planen Sie eine Stunde ein, um einen bestimmten Aspekt des Codes zu durchlaufen und zu bereinigen . Dann checke es ein und mache echte Arbeit. Aber seien Sie ehrlich zu sich selbst, wenn es darum geht, es zu beschränken.
Manchmal jedoch beschleunigt ein bisschen Aufräumen die Arbeit. Sogar einige schnelle Typänderungen beim Suchen und Ersetzen machen alles viel zugänglicher.
Seien Sie vorsichtig bei Stilkriegen. Insbesondere in einer Situation mit knappen Fristen sollten Sie warten, bis Sie Zeit haben, um wirklich herauszufinden, wie Sie diese ansprechen möchten, wenn Sie einige Stilvorgaben rückgängig machen möchten, die der andere Programmierer nur noch wiederholt Stilfragen kooperativ. (Was bedeutet, etwas zu geben und zu nehmen.)
Aber in der Antwort steckt ein Urteilswert. Ich würde sagen "mäßig" wichtig. Sauberer Code kann die Arbeit wirklich beschleunigen, und die Codequalität ist schließlich Teil des Ergebnisses. Ich glaube nicht, dass ich Code (auch meinen eigenen) anfassen kann, ohne etwas Zeit für die Bereinigung aufzuwenden. Aber stellen Sie sicher , dass mit Stil und Format Getue und Stil Kriege werden nicht mehr wichtiger als den Code Produktion zu bekommen.
quelle
Beim Korrigieren des Codes und bei der Einhaltung der Frist wende ich normalerweise zwei Regeln an:
Ich behebe ein Problem und lasse den Rest intakt .
Dann habe ich keine andere Wahl als neu zu schreiben / umzugestalten, bis der Code sauber genug ist, um den Fehler zu lokalisieren und zu beheben.
Der Grenzfall ist:
In diesem Fall muss der Code korrigiert werden, jedoch nur, wenn neue Funktionen implementiert werden sollen, und zwar in der Leerlaufzeit, niemals in der Fehlerbehebungszeit vor Ablauf der Frist!
quelle
Mich würde interessieren, an welchem Punkt in Ihrem Prozess Sie dieses Problem finden?
Streng genommen sollte in dieser magischen idealen Welt, in der keiner von uns lebt, jeder beworbene oder eingesetzte Code perfekt sein. Es ist nicht so, dass man manchmal pragmatisch sein muss.
Wenn Sie jedoch einen Codeüberprüfungsprozess durchführen, sollte dieser vor dem Testen hervorgehoben werden. Wenn Sie ständig mit Terminen konfrontiert sind, bedeutet das Problem, dass die Schätzungen für die Lieferung bedeuten, dass eine Schlüsselkomponente eines Entwicklungsprozesses - dh die Codeüberprüfung - erdrosselt wird?
Ihre Junioren werden niemals lernen, sich zurückzulehnen und bessere Wege zu beschreiten, wenn Sie sich nicht die Zeit nehmen, es zu einem Teil ihres Entwicklungsprozesses zu machen, um zu lernen. Es klingt für mich so, als würden Sie das nicht tun.
quelle
Kommt auf die Gesamtkultur an. Akzeptieren Sie, dass Sie später eine Bereinigung durchführen müssen, wenn sporadisch enge Fristen gelten. Wenn sie konstant sind, bauen Sie strukturell technische Schulden auf und sollten das Problem mit dem Management aufgreifen. Wenn sie nicht auf Ihre Bedenken eingehen, sollten Sie besser nach anderen Beschäftigungsmöglichkeiten suchen, da die Unternehmenskultur höchstwahrscheinlich bald den darwinistischen Grundsätzen entspricht.
quelle
Entwickeln Sie ein internes Coding Standards and Practices-Dokument, das von allen Mitarbeitern befolgt werden muss, um das Problem in Zukunft einzudämmen.
Bereinigen Sie für den aktuellen Stapel den Code gemäß dem S & P-Dokument, während Sie den Code umgestalten, jedoch nur dann, wenn Sie die Umgestaltung durchführen.
quelle
Ich bin mit Programmierung ziemlich unerfahren. Als Student engagiere ich mich jedoch häufig für Peer Review und Partnerschaften bei Projekten. Wenn genügend Zeit vorhanden ist, um ein Projekt abzuschließen, werde ich den Code eines Teammitglieds aus Gründen der Klarheit und Lesbarkeit bereinigen. Meistens fällt es mir schwer, die ersten 100 Zeilen oder so zu sichten. In diesen Fällen bin ich mehr als bereit, eine Hand zu reichen, um anderen Programmierern bessere Gewohnheiten und Codierungen beizubringen. Wenn die Zeit dafür nicht ausreicht, kopiere ich sie einfach, füge sie ein und bearbeite meine Projekte mit dem Gesamtbild der schlechten Benutzeroberflächen. Danach werde ich Ihnen sicher viele Tipps zur Codierungstechnik geben. Konstruktive Kritik (unabhängig davon, wie unerwünscht sie ist) kommt bei der Begutachtung durch Fachkollegen auf lange Sicht nur ihm und mir zugute.
Wenn Sie Zeit haben, sollten Sie Ihren Neuankömmlingen zeigen, wie sie ihre Arbeit so ausführen, dass alle davon profitieren. Nehmen Sie sich eine Minute Zeit und bringen Sie ihnen bei, was für Sie funktioniert hat und was nicht. Wenn Sie nicht die Zeit haben, lassen Sie die Arbeit fürs Erste hinter sich und melden Sie sich bei ihnen, wenn Sie die Gelegenheit dazu haben. Lassen Sie sie wissen, dass es bessere Möglichkeiten gibt, Dinge zu tun, besonders wenn Sie in Zukunft mit ihnen arbeiten werden.
quelle
Die Verbesserung der Gesamtqualität ist der Verwendung einer einzelnen Person als "Filter" für eine größere Gruppe bei weitem überlegen. In diesem Sinne:
quelle
Am besten ist es, einen Kodierungsstil-Leitfaden zu haben und regelmäßige Überprüfungen durchzuführen, damit Sie nicht mit diesem Problem konfrontiert werden, wenn Sie sich einer Frist nähern.
Ich empfehle Ihnen, die Führung zu übernehmen und die regelmäßige Überprüfung des Codes voranzutreiben. Das Management wird nicht von oben gedrängt, um sicherzustellen, dass regelmäßige Codeüberprüfungen stattfinden, aber meiner Erfahrung nach werden sie beeindruckt sein, wenn ein Programmierer die regelmäßigen Codeüberprüfungen plant und durchführt.
Es gibt viele Vorteile für Ihre Leute, die werden:
Und einige Vorteile für Sie selbst:
quelle
Ich kann den Grund in den Antworten "Nicht reparieren, was funktioniert" und "Verschwenden Sie Ihre Zeit nicht damit, was für den Kunden nicht wichtig ist" sehen. PMs sind besorgt über Risiken und das ist in Ordnung.
Ich verstehe auch, dass die meisten Leute diese Art von Lösung nicht gut finden. Ich verstehe das auch.
Ich glaube, dass die meisten Fristen künstlich sind. Reale Systeme leben immer mehr als die Fristen und das schlechte Design, das Sie heute tun, werden Sie für immer und ewig zurückschlagen. Die Leute versuchen in ein paar Monaten etwas zu liefern und verbringen Jahre danach damit, einige schlechte Entscheidungen in einem Code zu korrigieren, der in der Produktion ausgeführt wird.
Tech Schulden ist das Wort. Es wird eines Tages zurückkommen und jemand wird dafür bezahlen.
Also, IMO, ich denke, Sie sind genau richtig, um das kaputte Design zu reparieren, und professionell zu sein (speziell für die Junioren) bedeutet auch, dass Sie wissen müssen, wie man Kritik aufnimmt und daraus lernt, auch wenn es nicht höflich ist. Tatsächlich ist der Großteil des Lebens sowieso nicht höflich.
quelle
Jede klare Antwort wird extrem sein. Offensichtlich gibt es Fälle, in denen die Frist so kurz ist, dass Sie hässlichen Code verwenden müssen, und es gibt Fälle, in denen der Code so hässlich ist, dass es sich lohnt, die Frist zu verpassen, um ihn zu verbessern. Was Sie brauchen, sind Methoden, um zu beurteilen, in welchem Bereich Sie sich befinden, und vielleicht Methoden, um realistische Fristen festzulegen, die Zeit zum Schreiben von besserem Code lassen.
Bewahren Sie die Bereinigung nicht für später auf. Es gibt kein "späteres" Ereignis, in dem die Aufräumarbeiten für den Code eine höhere Priorität haben als im Moment, es sei denn, Sie haben normalerweise Zeiträume, in denen Sie nichts anderes zu tun haben als die Umgestaltung. Die Routine lautet "rot, grün, refaktorieren", nicht "rot, grün, zwei Wochen lang etwas völlig anderes tun, refaktorieren". Realistisch gesehen werden Sie den Code erst ändern, wenn Sie ihn das nächste Mal aus einem anderen Grund erneut aufrufen, und dann werden Sie wahrscheinlich auch eine Frist einhalten. Ihre wirklichen Optionen sind, es jetzt zu reparieren oder es zu lassen.
Natürlich ist gut gestalteter Code besser als schlecht gestalteter Code, vorausgesetzt, Sie planen, ihn jemals wieder zu lesen. Wenn Sie vorhaben, es nie wieder zu lesen, räumen Sie es nicht auf . Versenden Sie das erste, was die Tests besteht. Aber das ist ein ziemlich seltenes Szenario, für die meisten Programmierer passiert es ungefähr nie. Wenn Sie diesen Fall ignorieren, haben nur Sie die Details Ihres realen Falls, um zu beurteilen, wie viel es kostet, ihn zu reparieren, und wie viel es kostet (bei einer erhöhten zukünftigen Wartung), ihn nicht zu reparieren.
Es gibt bestimmte Dinge, die an dem Punkt, an dem der Code gewartet werden muss, nicht schwieriger zu beheben sind als jetzt. Diese Probleme können Sie jetzt nicht wirklich beheben. Die offensichtlichsten sind trivial zu beheben (Whitespace-Fehler und ähnliches) und so ist es schwer vorstellbar, dass Sie Zeit haben, diese Frage zu stellen, aber sie nicht zu beheben ;-) Für diejenigen, die nicht trivial sind und von dieser Art sind, dann OK Sie haben einen Code, der nicht ideal ist, aber Sie müssen pragmatisch sein. Es funktioniert und Sie haben eine Frist. Benutze es.
Es gibt bestimmte Dinge, die jetzt wesentlich einfacher zu beheben sind als später, wenn (a) sie in den Köpfen aller nicht so frisch sind; (b) andere Dinge wurden geschrieben, die sich auf sie stützen oder sie imitieren. Diese Probleme können jetzt viel besser behoben werden. Priorisieren Sie sie daher. Wenn Sie in Ihren Fristen keine Zeit haben, diese zu korrigieren, müssen Sie so viel Druck wie möglich auf längere Fristen ausüben, da Sie in Ihrer Codebasis Schulden aufbauen, die Sie wahrscheinlich beim nächsten Besuch bezahlen müssen der Code.
Die bevorzugte Methode zum Korrigieren von Code ist ein Überprüfungsprozess. Kommentieren Sie die Probleme, die Sie damit haben, und senden Sie sie an den Junior zurück, um sie zu ändern . Sie können Beispiele geben, was Sie meinen, und dem Junior überlassen, alle Fälle in dem Code zu finden, auf den er sich bezieht, aber den Code nicht einfach für ihn zu Ende bringen. Wenn du das tust, gibst du ihnen keine Möglichkeit, sich zu verbessern.
Sie sollten häufig auftretende Probleme in einen Styleguide schreiben, der besagt: "Mach das nicht, mach das stattdessen" und erklärt, warum. Letztendlich darf der Grund sein, "um unseren Code ästhetisch konsistent zu machen", aber wenn Sie nicht bereit sind, Ihre Regeln mit einer Begründung aufzuschreiben, sollten Sie sie wahrscheinlich auch nicht durchsetzen. Lassen Sie einfach jedem Programmierer die freie Wahl.
Achten Sie schließlich auf die Tendenz, Dinge auf unbestimmte Zeit zu optimieren. Die Renditen nehmen ab, und Sie müssen durch Erfahrung lernen, wo sie noch gut sind. Es ist absolut wichtig, dass Sie eine realistische Vorstellung davon haben, was gut genug ist. Andernfalls können Sie nicht die Verhandlung führen, bei der Sie sicherstellen, dass Ihre Fristen Ihnen Zeit geben, "gut genug" Code zu erstellen. Verbringen Sie Ihre Zeit mit Dingen, die nicht gut genug sind.
quelle
Wie schon so viele gesagt haben, wird alles, was Sie in die Luft werfen, immer wieder runterkommen. Ich glaube an starke Einheitlichkeit über eine Codebasis. Natürlich sind manche Dinge nicht so wichtig. Zum Beispiel Namenskonventionen für lokale Variablen innerhalb einer Prozedur. Für alles, was strukturell ist, sollte es jedoch sofort repariert werden, bevor es endgültig in den Hauptstamm übergeht. Wenn man sich die einzelnen Prozeduren oder Klassen ansieht, ist es vielleicht nur ein bisschen mies, aber wenn jeder "leicht hässlichen" Code schreibt, wird es sehr schnell wirklich hässlich.
Hässlicher Code, der oft funktioniert, funktioniert in 90% der Fälle einwandfrei, fällt jedoch an den Rändern auseinander. Stellen Sie sicher, dass dies normalerweise nicht einfach genug ist, indem Sie nur ein paar einfache Regeln befolgen. Erstens sollte es für jeden Programmierer obligatorisch sein, genaue Beschränkungen für jede Prozedur oder jeden Funktionsblock, die sie erzeugen, zu definieren und zu dokumentieren.
Zweitens sollte für jedes Verfahren ein Test gegen diese Einschränkungen durchgeführt werden. Dies sollte ein einfacher Komponententest sein, den der Programmierer vor dem Festschreiben lokal ausführen kann (und muss). Offensichtlich ist dies mit einer richtigen Testsuite einfacher zu verwalten, aber auch ohne Test sollte geschrieben und möglicherweise in einer Teilklasse festgeschrieben werden, die vom Build ausgeschlossen werden kann.
Drittens ist eine Reihe standardisierter Entwicklungsumgebungen mit vorkonfigurierten Tools von unschätzbarem Wert. Ein TS-Server ist hierfür hervorragend geeignet. Jeder Benutzer verfügt über dieselben Tools (und Versionen), dieselben Konfigurationen und dieselben Updates. Installieren Sie ein Refactoring-Tool wie CodeRush oder Resharper, das gemäß Ihren Standards vorkonfiguriert ist, und weisen Sie Programmierer an, Commits mit Warnungen abzulehnen. Jetzt können Sie die Codeüberprüfungszeit Ihres Teams nutzen, um das Feedback zu Ihrem Regelsatz tatsächlich zu verbessern, und Ihr Team korrigiert sich glücklich, ohne dass Sie danach ständig aufräumen müssen. Es ist für einen Programmierer auch viel einfacher, Code-Kritik von einem richtig konfigurierten Tool zu nehmen als von einem Kollegen oder Chef, bei dem die Standards willkürlich definiert zu sein scheinen oder nicht richtig verstanden werden. Wenn Ihnen die IDE mitteilt, dass Ihr Code schlecht ist, niemand wird sich damit streiten und es wird korrigiert. Sie werden feststellen, dass die Codequalität dramatisch steigen wird und das gesamte Team nach ein paar Wochen VIEL weniger Zeit für die Umgestaltung und Bereinigung aufwenden wird. Programmierer werden sich auch an die Regeln gewöhnen und aufhören, Mistcode zu schreiben.
Schließlich besteht die einfache Lösung darin, den Programmierern einen Anreiz zur Verbesserung zu geben. Programmierer sind per Definition wettbewerbsfähig. Jeder möchte den schönsten oder schnellsten Code haben. Eine gute Möglichkeit, alle zu motivieren, die Produktivität zu steigern und die Inkompetenz zu beseitigen, besteht darin, eine wöchentliche gewichtete Anzeigetafel für alle zu berechnen, in der beispielsweise Punkte für abgelehnte Commits und Terminüberschreitungen abgezogen werden. Zeigen Sie bei der wöchentlichen Teambesprechung die besten N, und zahlen Sie demjenigen, der im Monatsdurchschnitt den ersten Platz einnimmt, vielleicht sogar das Mittagessen.
quelle
Ich schlage vor, ein Überprüfungstool zu verwenden. Wenn Sie ein Git-basiertes Repository haben, können Sie das Gerrit- Überprüfungstool verwenden. Nach einigen abgelehnten Commits lernt das Team die Standards, denen Sie folgen möchten, und zukünftige Commits erfordern keine zusätzliche Arbeit von Ihnen.
Commits warten auf Ihre Annahme. Wenn Sie Zeilen sehen, die umgeschrieben werden sollten, können Sie Kommentare schreiben und Ihre Teamkollegen können den Code basierend auf Ihren Anforderungen selbst korrigieren. Es ist wirklich eine gute Möglichkeit, die Codierungsstandards von Teammitgliedern zu erlernen .
quelle