Was soll ich tun, wenn ich auf eine Bewertung warte?

32

Bevor ich meine Frage stelle, muss ich die Situation erklären.

Ich arbeite als Junior Software Engineer für ein Unternehmen. Einer der Senioren hält mich immer auf, wenn ich meine Entwicklung beendet habe und mich verpflichten möchte.

Er möchte immer, dass ich darauf warte, dass er es überprüft. Dies ist in Ordnung, da er normalerweise einige Fehler findet und einige Optimierungen vornimmt.

Ich muss meinen Code jedoch vor Ablauf der Frist festschreiben. Wenn ich fertig bin, rufe ich ihn an und sage, dass es fertig ist. Er kommt normalerweise zu spät. Also ist mein Code auch zu spät.

Meine Frage ist, was soll ich tun? Soll ich ihn auf eine Bewertung warten?

EDIT: Ergänzung zur Frage. Ich bin neugierig auf ein weiteres Problem.

Ich möchte beim Codieren frei sein. Wie könnte ich das Vertrauen in die Entwicklungsfreiheit gewinnen?

Einige Erklärungen: Ich habe mit ihm darüber gesprochen. Aber es hat nicht geholfen. Wir verwenden bereits einen Issue-Tracker, aber es gibt keine Aufgabe für Überprüfungen. Es gibt nur Entwicklungs- und Testaufgaben.

yfklon
quelle
10
Sprechen Sie mit ihm darüber.
Florian Margaine
18
Senden Sie ihm eine E-Mail, um mitzuteilen, dass der Vorgang abgeschlossen ist und Sie auf seine Bewertung warten. Sie können dann jederzeit auf diese E-Mail zurückgreifen, wenn jemand fragt, warum Sie eine Frist verpasst haben.
Dreza
5
Ein Issue Tracker ist nur ein Werkzeug, um Sie an wichtige Schritte zu erinnern, die das Team nicht vergessen möchte. Wenn Ihr Team Überprüfungen als einen dieser Schritte ansieht, sollten Überprüfungen wahrscheinlich als separate Aufgaben hinzugefügt werden. Wenn Ihr Team damit umgehen kann, welche Teile des Codes überprüft werden müssen, ohne dies explizit in den Issue-Tracker einzugeben, müssen Sie solche Aufgaben nicht hinzufügen. Das sollten Sie mit Ihrem Team besprechen.
Doc Brown
3
Seien Sie geduldig, Sie haben keine Ahnung, wie nützlich es ist, wenn ein zweites Paar Augen (insbesondere ein Senior) Ihren Code überprüft.
JeffO

Antworten:

70

Also ist mein Code auch zu spät.

Nein, es ist nicht dein Code, es ist der Code von dir und dem Senior. Sie arbeiten als Team, haben eine gemeinsame Verantwortung, und wenn Sie beide eine Frist verpassen, sind Sie beide schuld. Stellen Sie also sicher, dass derjenige, der die Fristen einhält, dies bemerkt. Wenn diese Person das auch als Problem ansieht, wird sie sicherlich mit Ihnen beiden zusammen sprechen - das kann mehr als ein einziges Gespräch mit Ihrem Kollegen helfen.

Und zu deinem EDIT:

Ich möchte beim Codieren frei sein. Wie kann ich das Vertrauen in die Entwicklungsfreiheit gewinnen?

Das Überprüfen von Code ist einer der wichtigsten Qualitätssparer. Es ist praktisch unmöglich, exzellenten Code ohne ein zweites Paar Augen zu schreiben, selbst wenn Sie über mehr als 20 Jahre Programmiererfahrung verfügen. In einem guten Team sollte daher jeder Code ständig überprüft werden - sowohl der Code Ihres Vorgesetzten als auch Ihr Code. Dies hat nichts mit Misstrauen gegen Sie persönlich zu tun (oder sollte es zumindest nicht sein). Solange Sie glauben, dass "freies Codieren" ohne ein zweites Augenpaar besser ist, sind Sie immer noch ein Junior-Programmierer.

Doc Brown
quelle
4
@blank: Sie haben meinen Standpunkt verfehlt - ich spreche über Verantwortlichkeiten und Ihren Standpunkt dazu. Sie glauben, dass Sie allein für die Einhaltung der Frist verantwortlich sind - das ist falsch, und Sie sollten sicherstellen, dass dies auch jeder andere in Ihrem Team weiß.
Doc Brown
Da hast du recht. Es besteht jedoch keine Verantwortung für den Senior. Es ist keine Aufgabe für ihn, den Code zu überprüfen. Aber er tut es immer.
Yfklon
27
@blank: das ist genau mein Punkt - wenn der Senior dir sagt, dass du warten sollst, übernimmt er die Verantwortung. Machen Sie dies für denjenigen transparent, der die Fristen definiert.
Doc Brown
27

In einem guten Team sollte Ihnen in einem Issue Tracker eine Reihe von Entwicklungsaufgaben zugewiesen sein .

Auf diese Weise können ( sollten ) Sie, während Sie auf einen Prüfer warten, an der nächsten Aufgabe arbeiten, die in dieser Warteschlange wartet. Sobald Sie sich an diese Arbeitsweise gewöhnt haben, haben Sie die Möglichkeit, Ihre Änderungen in "Batches" überprüfen zu lassen, wodurch Verzögerungen verringert werden.

  • Wenn Sie keine solche "Warteschlange" haben, besprechen Sie dies mit Ihrem Vorgesetzten oder noch besser mit dem Prüfer. Wenn Ihr Team nicht recht bequem issue tracker für solche Sachen, betrachten Jobbörsen studieren oder unternehmensinterne Arbeitsmöglichkeiten ein besseres Team zu finden (man könnte auch diesen diskutiert mit Manager / Rezensenten aber nicht erwarten , dass dies zu Hilfe - Mangel eines guten Issue Trackers ist oft ein Symptom dafür, dass etwas in einem Team schwer kaputt geht).

Ich möchte beim Codieren frei sein. Wie kann ich das Vertrauen in die Entwicklungsfreiheit gewinnen?

Um dies herauszufinden, müssen Sie zunächst den Zweck der Codeüberprüfung verstehen. Sie haben Vertrauen erwähnt - das ist eine gute "Annäherung", aber keine ganz genaue.

  • Zum Beispiel wurde in einem meiner letzten Projekte die Entwicklung von einem Miniteam von mir und meinem Kollegen durchgeführt. Wir haben uns gegenseitig voll vertraut und respektiert - aber trotzdem haben wir 100% des Codes überprüft. Wir haben es gemacht, weil wir auf diese Weise einige Fehler finden und schnell beheben konnten. Dies ist auch sehr wichtig, da die Überprüfungen nicht viel Zeit in Anspruch nahmen und unsere Arbeit nicht blockierten.

Sie sehen, es wäre genauer, an Codeüberprüfungen zu denken , um bestimmte Risiken zu vermeiden . In einem guten Team können Sie eine Art gemeinsames Verständnis davon erwarten, wie man dies "richtig ausbalanciert". Beachten Sie, dass es keine einheitliche Balance gibt, sondern dass dies stark von einem Projekt abhängt. Das Risiko und die Auswirkungen von Fehlern in einer unternehmenskritischen Software unterscheiden sich natürlich von denen in einer nicht-kritischen Anwendung.

Wenn Sie Ihr Beispiel verwenden, können Sie damit rechnen, Überprüfungen zu blockieren, solange der Aufwand Ihres Überprüfers durch das Auffinden von Fehlern und Verbesserungen gerechtfertigt ist , die vor dem Festschreiben Ihres Codes besser behoben werden können.

Sie erwarten wahrscheinlich, dass Sie mit der Praxis und den bei Überprüfungen erhaltenen Anleitungen die Codierung verbessern werden, so dass sie immer weniger Probleme finden, die es wert sind, vor dem Festschreiben behoben zu werden. Sobald sie feststellen, dass Ihr Code "sicher genug" ist, um weniger umständliche "Risikopräventionsmaßnahmen" zuzulassen, können Sie damit rechnen, dass sich der Prozess ändert, z. B. durch Überprüfungen nach dem Festschreiben .

Abhängig von einem Projekt kann Ihr Code sogar als sicher genug angesehen werden, um Überprüfungen zu überspringen, sodass die Entdeckung der Fehler den Testern überlassen bleibt (was jedoch nicht unbedingt der Fall sein muss, siehe mein Beispiel oben).

Mücke
quelle
1
Klingt so, als würden Sie eine technische Lösung für ein organisatorisches Problem vorschlagen. Nach meiner Erfahrung funktioniert das selten.
Doc Brown
5
@ DocBrown Ich glaube nicht, dass sich diese Antwort wirklich auf eine technische Lösung konzentriert. Der Kern der Lösung lautet "Ihnen sollte eine Reihe von Aufgaben zugewiesen sein". Das ist eine organisatorische Lösung für ein organisatorisches Problem. Es ist nur ein Detail, ob diese Warteschlange in einem Issue Tracker, in E-Mails, einer Tabelle, einem Whiteboard oder einem Stapel von Post-It-Notes verwaltet wird.
Carson63000
@ Carson63000 genau so. Ich würde auch hinzufügen, dass Aufgaben in einem Issue Tracker zu haben, damit man nicht zum Manager / Senior laufen muss, um nach neuen Aufgaben zu fragen, auch ein organisatorisches Detail ist (und meiner Erfahrung nach nicht ganz unbedeutend)
gnat
1
@gnat: Nun, du hättest "zum Beispiel in einen Issue Tracker" schreiben können, um das klarer zu machen. Ich bin mir jedoch nicht sicher, ob die Frage, die Sie beantworten (die aus dem Titel), der Kernpunkt der OP-Frage ist, die im folgenden Text geschrieben wird (der eine andere ist).
Doc Brown
@DocBrown Ich habe das nicht absichtlich gemacht, weil ich glaube, dass es zu wichtig ist, organisatorische Details als "zum Beispiel" zu bezeichnen (der Gedanke an Junior-Teamkollegen, die zu mir kommen, um nach der nächsten Aufgabe zu fragen, wenn sie mit Strom fertig sind, lässt mich erschaudern )
Mücke
9

Hier gibt es mehrere mögliche Antworten, je nachdem, um welches Problem es sich handelt.

  • Wenn Ihr Hauptanliegen "Ich vermisse Termine" ist, nein. Ihnen beiden fehlen gemeinsam die Fristen. Können Sie (mit Zuversicht) sagen "Ich bin in einer Stunde fertig, können wir dann die Codeüberprüfung durchführen"? Das könnte reichen. Können Sie den Code am Tag vor Ablauf der Frist vervollständigen? Das sollte ein reichlicher Puffer sein. Vervollständigen Sie Ihren Code mit viel Puffer zwischen "Bitte überprüfen" und der Frist? Wenn letzteres nicht einmal ein gemeinsamer Fehler ist, würde ich sagen.

  • Code sollte immer überprüft werden. Ich kann nichts einchecken, ohne dass (mindestens) ein zweiter Satz Augen und ein anderer Mensch "das ist OK" sagen. Dies gilt sowohl für Projekte, bei denen ich der leitende Programmierer bin, als auch für Projekte, bei denen ich normalerweise keinen Beitrag leiste (es ist mir jedoch gelungen, einen Fehler zu finden, der mich betrifft und den ich beheben möchte). Die Strenge einer Überprüfung beruht jedoch in hohem Maße auf Vertrauen. Wenn ich vertraue, dass die Person, die den Code einreichen möchte, die Codebasis gut kennt, bin ich nicht so streng wie wenn ich nicht weiß, wie gut die Person die Codebasis kennt.

Vatine
quelle
5

Meine Frage ist, was soll ich tun? Soll ich ihn auf eine Bewertung warten?

Nein, du solltest nicht nur untätig sitzen. Es gibt immer was zu tun. Wie Gnat vorschlug , sollte es eine Reihe von Aufgaben geben. Oder in einer agilen Art der Entwicklung eine Liste der Aufgaben, die Ihnen für die aktuelle Iteration zugewiesen wurden. Wenn Sie untätig sitzen, stimmt etwas in der Organisation Ihres Unternehmens oder Ihres Teams nicht.

Eine andere Sache ist: Überprüft Ihr leitender Vorgesetzter wirklich jeden Code, den Sie tun? Wenn ja, können Sie auch eine Paarprogrammierung durchführen.


Ich möchte beim Codieren frei sein. Wie kann ich das Vertrauen in die Entwicklungsfreiheit gewinnen?

Es gibt einige Vorschriften, die vorschreiben, dass Senioren die Arbeit von Junioren überprüfen müssen (ich denke, dass Medical ISO 62304 dies erfordert). Wenn es so ist, können Sie nichts tun.

Was Sie ändern können, ist Senior zu bitten, nicht buchstäblich alles zu überprüfen. Sie können den Codeüberprüfungsprozess einstellen und wichtige Dinge überprüfen.

BЈовић
quelle
3

Verwenden Sie Git lokal, übertragen Sie Ihre Änderungen in einen Zweig und beginnen Sie mit Aufgabe 2, während Sie warten. Wenn er fertig ist, können Sie seine Änderungen in Ihre neue Arbeit einbinden und sind bereits bei der nächsten Aufgabe der Kurve voraus.

Tun Sie dies lange genug und ziemlich bald kann er zwei oder mehr Dinge in einer Sitzung wiederholen. Wählen Sie Dinge, bei denen es unwahrscheinlich ist, dass sich die Linien überlappen, um Konflikte zu minimieren.

Bootskodierer
quelle
2

Eine Lösung hierfür könnte darin bestehen, den Senior-Entwickler viel früher durch Pair Programming in Ihre Arbeit einzubeziehen.

Wikipedia-Seite über Pair Programming

Der offensichtlichste Vorteil für Sie ist, dass die Überprüfung viel früher im Prozess stattfindet, sodass Sie nicht mehr auf den Senior-Entwickler warten müssen.

Darüber hinaus können Sie die Denkprozesse und -techniken des leitenden Entwicklers beim Schreiben des Codes sehen und daraus lernen.

Möglicherweise besteht das Problem, dass der Senior-Entwickler keine Verbindung mit Ihnen herstellen möchte. Das kann schwierig sein, aber meine eigene Erfahrung ist, dass sowohl Senior- als auch Junior-Entwickler viel Erfahrung mit der Paarprogrammierung sammeln.

Oft besteht auch die Sorge, dass Sie die halbe Produktivität erzielen, wenn 2 Entwickler an derselben Arbeit arbeiten. Es ist schwierig zu messen, wie sich die Pair-Programmierung auf die Produktivität auswirkt. Die häufigste Reaktion, die ich gehört habe, ist, dass die Produktivität von Teams, die Pairing durchführen, und von Teams, die es nicht tun, in etwa gleich ist. (Wenn jemand eine gute Recherche darüber hat, würde ich gerne davon hören.)

Andy Lowry
quelle
2

Keine vollständige Antwort für sich, nur eine Ergänzung zu den hervorragenden Antworten oben ...

Überprüfen Sie Ihren eigenen Code, bevor Sie ihn einchecken? Ich weiß, es macht nicht den meisten Spaß, aber ich versuche, mich die meiste Zeit dazu zu bringen, es zu tun. Ich programmiere seit 20 Jahren professionell (insgesamt 34 Jahre), aber normalerweise finde ich mindestens einen Fehler und / oder eine Sache, die ich vergessen habe oder die ich zumindest verbessern könnte. Ich stimme der Ansicht zu, dass Ihr Code immer überprüft werden sollte und dass ein zweiter Satz Augen besser ist als ein Paar. Aber selbst das gleiche Paar, das zweimal über den Code geht, ist besser als einmal.

Schreiben Sie Komponententests für Ihren Code? Neben Unit-Tests habe ich auch ein kleines Shell-Skript, das nach den häufigsten Fehlern sucht, die ich persönlich mache. Ein Teil davon ist englische Grammatik und Rechtschreibung, ein Teil sind Codierungsprobleme, die der Compiler nicht erfasst. Ich führe es aus, bevor ich große Änderungen einchecke.

Normalerweise lasse ich Leute ihren Code schreiben und beschwere mich gelegentlich später darüber, aber ich überprüfe nicht jeden einzelnen Check-in. Ich habe einmal mit einem sehr jungen Programmierer gearbeitet, dessen Code ich überprüfen und normalerweise rückgängig machen musste, weil sie so viele Fehler gemacht haben. Das endete nicht gut. Sie sind in einem Beruf, in dem es oft wichtiger ist, alles richtig zu machen, als es pünktlich zu machen. Wenn Sie aus Ihren Fehlern lernen, werden Sie weit kommen.

Wenn Sie die Anzahl der Änderungen minimieren können, die Ihr Prüfer an Ihrem Code vornehmen muss, maximieren Sie die Wahrscheinlichkeit, dass er Ihnen vertraut, um Code zu schreiben, der nicht immer so sorgfältig überprüft werden muss. Wenn Sie frei von Überprüfungen sein möchten, übernehmen Sie die maximale Verantwortung für die Qualität Ihrer eigenen Ausgabe.

Einige oder alle dieser Vorschläge könnten gemacht werden, während darauf gewartet wird, dass jemand anderes Ihren Code überprüft.

GlenPeterson
quelle
1

Ich denke, manuelle Codeüberprüfungen sind ... na ja ... ein bisschen 80er Jahre. Na ja, vielleicht in den 90ern.

In dieser modernen Ära kontinuierlicher Integration und Online-Codeüberprüfungssysteme möchten Sie keine Code-Commits mehr zurückhalten, nur weil Sie befürchten, dass "die Quellcodeverwaltung dadurch möglicherweise außer Kraft gesetzt wird".

Kommt schon Leute. Dafür gibt es das Änderungsset (oder die Änderungslisten). Sie bringen Ihre Programmierer dazu, die hungrigen Mäuler Ihres Versionsverwaltungssystems zu füttern. Dann setzt Ihr Continuous Integration Server mit einer Litanei gezielter Builds ein (hoffentlich nur mit dem täglichen Build, aber einige von uns werden mitgerissen). Wenn etwas kaputt geht, legen Sie die Code-Affen-Trophäe (normalerweise ein Plastikspielzeug, das jemand aus einer Müslischachtel mit Glücksbringern gefunden hat) auf den Schreibtisch des Täters und rollen die Liste mit den Änderungen zurück. Nun, einige kontinuierliche Integrationssysteme senden automatisch E-Mail- / IM- / Desktop-Benachrichtigungen an alle Mitarbeiter / Abteilungen / Organisationen, die den Build als fehlerhaft eingestuft haben, zusammen mit einem nützlichen Hyperlink, der jedem anzeigt, wer den Build in welcher Datei oder in welchem ​​Test genau gebrochen hat. Es ist jetzt der unglückliche Programmierer

Während dieser Prozess abläuft, wird das Codeüberprüfungssystem aktiviert (wiederum ausgelöst durch das Einchecken). Eine Liste qualifizierter Teammitglieder wird benachrichtigt, wenn die Änderungsliste der Quellcodeverwaltung übergeben wird, eine Überprüfung im Überprüfungssystem gestartet wird und jeder beginnt, Anmerkungen zu den Änderungen in der Änderungsliste zu machen. Hoffentlich sagt jeder "LGTM". Wenn der Programmierer klug ist, wird er daran denken, zu beten / zu bestechen / zu verstecken. Bei schwerwiegenden Problemen können die Prüfer einen Fehler erstellen (der in das Fehlerverfolgungssystem eingebunden werden kann) oder sogar das Zurücksetzen der Änderungsliste verlangen. Ja, rückgängig gemachte Veränderungen verletzen nicht nur das Ego, sondern auch den Verstand, das ist wahr. Es ist ein gutes Gewürz für die Nachwuchsentwickler, abgelehnte Änderungslisten wieder zu integrieren.

Wenn in Ihrer Entwicklungsumgebung ein CI oder ein Codeüberprüfungssystem fehlt, sollten Sie diese ernsthaft untersuchen. Ein paar Links könnten Ihnen helfen:

Atlassian Crucible
JetBrains TeamCity
überprüft die
Geschwindigkeitsregelung

Wenn Sie einen CI-Server erwerben möchten, sollten Sie auch ernsthaft über Unit-Test-Frameworks nachdenken. Wenn Sie ein C # -Entwickler sind, schauen Sie sich etwas wie NUnit an, um zu beginnen.

code4life
quelle
Ich weiß nicht, wer diese Antwort abgelehnt hat, aber ich stimme ihm nicht zu. Ich bin mit code4life völlig einverstanden, dass die Codeüberprüfung über die Quellcodeverwaltung und nicht über eine lokale Kopie erfolgen sollte. Eine Änderung, die einige Tage in Anspruch nimmt, sollte jeden Tag, möglicherweise in einer Zweigstelle, festgeschrieben werden, sie sollte jedoch weiterhin täglich festgeschrieben werden. Von hier aus kann die Codeüberprüfung bei teilweisen Änderungen durchgeführt werden, und CI-, tägliche Build- und Integrationstests können auf diesen Zweig angewendet werden, wenn er stabil genug ist.
jfg956
Jep. Und Code-Reviews werden heutzutage gegen eine Änderungsliste durchgeführt. Abgelehnte Änderungslisten werden zurückgesetzt (das ist die nukleare Option) oder es werden Fehler gemeldet. Wir wollen die Commits so schnell wie möglich gegen das CI werfen, gemäß McConnells Code Complete.
Code4life
Ich denke, wer auch immer die Antwort abgelehnt hat, hat sie nicht über die erste Zeile hinaus gelesen. Ich denke, die erste Zeile ist etwas irreführend.
Vitalik
LOL, nun, die 2010er ... es ist die Ära des ADHS-Ismus ...!
Code4life
Erstens: Warum führen Sie ein neues Wort " manuelle Code-Überprüfung" ein? Wie würde eine automatisierte Codeüberprüfung aussehen? Nach meinem Verständnis ist Code-Review manuell. Eine Person liest Code vor, um zu bestätigen, dass sie genau das tut, was sie tun soll (nicht weniger und nicht mehr). Jede Automatisierung wie Fusseln oder automatisiertes Testen ist keine Codeüberprüfung. (Fortsetzung folgt)
try-catch-finally
-1

Sie teilen ihm im Voraus mit, wann Ihr Code fertig sein wird, nicht im Moment, in dem er fertig ist. Sie sollten feststellen können, dass ca. eine Woche vor. Das gibt ihm Zeit, die Überprüfung so vorzubereiten und zu planen, dass sie in Ihre beiden Planungen passt.

Jan Doggen
quelle