Best Practices für die Arbeit mit mehreren Programmierern

9

Ich denke, die meisten Programmierer arbeiten lieber alleine an Projekten, auch wenn dies nicht möglich ist. Ich arbeite lieber alleine, auch außerhalb von Programmierprojekten. Wenn ich mit anderen Entwicklern zusammenarbeite, finde ich das normalerweise

  • Ich mag ihre Formatierung oder Konventionen (wie Variablen- oder Methodennamen) nicht.
  • Ich habe kein gutes Verständnis dafür, wie der von ihnen geschriebene Code funktioniert, den ich hätte, wenn ich ihn selbst geschrieben hätte
  • Ich denke, es gibt einen besseren oder effizienteren Weg, etwas umzusetzen, was sie geschrieben haben

Was sind die besten Möglichkeiten, um diese Probleme und ähnliche Teamprobleme für ein Projekt mit 4-5 Programmierern zu lösen?


quelle
Sehr gute Frage. Ich habe das Gleiche gedacht; besonders wenn Sie jemanden über sich haben, der mangels vieler anderer Begriffe inkompetent ist.
"besser oder effizienter" - vielleicht, aber warum haben Sie es nicht herausgefunden, bevor sie mit der schlechteren, weniger effizienten Implementierung begonnen haben?
-1: Diese Frage ist sehr weit gefasst.
Jim G.
Beachten Sie auch, dass es IHRE Verantwortung ist, sich zu bemühen, den Code anderer Leute zu verstehen.

Antworten:

20

Es gibt nur einen Weg, diese Probleme zu überwinden. Es ist nämlich "Kommunikation". Die Probleme, die Sie beschreiben, sind darauf zurückzuführen, dass Ihre Programmierer nicht miteinander sprechen. Wenn Sie besprochen hätten, wie eine Aufgabe am besten oder effizientesten gelöst werden kann, wird sie auf die von Ihnen gewünschte Weise implementiert. Außerdem können Sie Formatierungen und Konventionen vereinbaren.

Um den Codeteil zu verstehen, müssen Sie wöchentliche Codeüberprüfungen durchführen, in denen Sie den Code aller diskutieren. Dann können Sie Fragen stellen, während sie ihre Arbeit präsentieren, und dies hilft enorm dabei, die Codequalität aller zu verbessern.

Mhenrixon
quelle
2
+1 für die Kommunikation. So viele Fragen hier könnten mit einem einfachen "Nun rede mit ihnen darüber" beantwortet werden
Ian
Mir scheint, dass OP nicht nur ein Kommunikationsproblem hat, sondern auch nicht akzeptieren kann, dass es andere Möglichkeiten gibt, Dinge zu tun, als die, die er bevorzugt, und sich weigert, mit einem anderen System als seinem bevorzugten zu arbeiten.
Jwenting
+1 Programmierung (oder jede mentale Arbeit) besteht zu 5% aus tatsächlicher Produktion, zu 35% aus logischer Problemlösung und zu 60% aus sozialer Problemlösung.
JF Dion
9

Ich liebe es, mit einem Team zu arbeiten. Die Schwierigkeit besteht darin, dass alle Teammitglieder tatsächlich zusammenarbeiten müssen, um effektiv mit einem Team zu arbeiten, und nicht nur alle separat an demselben Projekt arbeiten.

Sie müssen Dinge besprechen, z. B. warum Sie eine Codierungskonvention einer anderen vorziehen, und sich dann alle auf eine Reihe von Konventionen einigen, unabhängig davon, ob es sich um Ihre persönlichen Favoriten handelt oder nicht. Was auch immer sie sind, Sie werden sich an sie gewöhnen und die Konsistenz schätzen.

Sie sollten den Code des anderen überprüfen und kritisieren. Eigentlich sollten Sie wahrscheinlich die meiste Zeit paarweise programmieren, aber ich bezweifle, dass Sie mir das glauben werden. Überprüfen Sie also einfach den Code der anderen. Kein Code sollte als "erledigt" betrachtet werden, bis ein anderer Programmierer ihn überprüft und sichergestellt hat, dass er für die nächste Person, die ihn warten muss, verständlich ist.

Suchen Sie nach Ausreden, sprechen Sie miteinander und stellen Sie Fragen, während Sie programmieren. Wenn Sie versuchen, zwischen zwei oder mehr Möglichkeiten zu wählen, um ein Problem anzugreifen, lassen Sie sich von einem der anderen Entwickler überprüfen, selbst wenn Sie der Meinung sind, dass Sie die wahrscheinlich beste Antwort kennen. Sie lernen beide etwas aus der Konversation und erhalten ein gemeinsameres Konzept für die Zusammenstellung des Codes.

Treffen Sie sich jeden Tag kurz, damit jeder sagen kann, was er getan hat und wie es läuft. Auf diese Weise hat jeder ein besseres Gefühl für den Status aller laufenden Arbeiten und deren Herangehensweise.

Steve Jorgensen
quelle
7

Sie besitzen den Code nicht - als Gruppe können Sie Codierungskonventionen auswählen oder nicht. Sie werden sich nicht immer durchsetzen, sondern nur lernen, sich anzupassen.

Sie werden sich mit dem Code anderer Leute nie so wohl fühlen. In XP ist dies der Grund für die Push-Pair-Programmierung. Aber normalerweise ist der beste Weg (wie bei allem anderen), sich darin zu vertiefen und es zu lernen.

Wenn Sie einen effizienteren oder besseren Code haben (Lesbar ist viel wichtiger als effizient - siehe vorherigen Punkt), sollten Sie ihn mit ihnen besprechen.

Dies ist eine Karriere und Sie besitzen nicht, was Sie tun. Sie müssen mit vielen Menschen zusammenarbeiten, sich daran gewöhnen oder so gut sein, dass Sie alles selbst tun und Ihre eigenen Projekte finanzieren können.

Es ist eine Karriere, die keinen Spaß macht - wenn Ihr Job mitten im Sommer Dächer repariert hat und Sie aufgefordert werden, dies auf eine Weise zu tun, die Sie nicht mögen, weil es als Crew einfacher ist, dies so zu tun, tun Sie es einfach es. Zeitraum.

Bill K.
quelle
Ich bin mit allem einverstanden, außer "Lesbar ist viel wichtiger als effizient". Dies gilt NICHT für Datenbank-SQL-Code. Effizient in einer Datenbank ist entscheidend. Wenn Sie es gewohnt sind, effizienten Code zu schreiben, wird dieser sehr schnell lesbarer.
HLGEM
@HLGEM Ineffizienter DB-Code ist schrecklich, aber muss der Code unlesbar sein, um effizient zu sein, oder können Sie ihn sowohl lesbar als auch effizient machen? Ich habe nicht in allen Fällen ignoriert, Effizienz zu ignorieren, und ich habe auch nicht gesagt, ein dummer Programmierer zu sein (wie die Verwendung eines Arrays für eine Einfügesortierung).
Bill K
Ich würde nicht sagen, dass es unlesbar ist, aber die meisten der effizientesten Methoden zum Schreiben von Abfragen erscheinen Personen, die keine Datenbankspezialisten sind, häufig komplexer. Daher schreiben sie tendenziell Code, der "eleganter" aussieht und Probleme mit der Leistung hat.
HLGEM
@HLGEM Ich mag den Begriff "Elegant" nicht, weil er im Allgemeinen knapp bedeutet, was überhaupt nicht mit Lesbarkeit zusammenhängt. Ich nehme an, es ist am besten zu sagen, es wäre "die am besten lesbare Lösung, die den Anforderungen des Problems entspricht", bei der die Leistung in den Anforderungen enthalten sein kann. Mein Punkt war, dass wenn die Leistung nicht den Anforderungen entspricht (wenn sie den Anforderungen entspricht), die Lesbarkeit Vorrang vor allem anderen haben sollte, aber natürlich die Anforderungen erfüllen muss.
Bill K
Komisch Ich mag den Begriff auch nicht elegant. Ich denke, wir opfern allzu oft die Effizienz und Effektivität der Benutzer, um die Vision von jemandem zu befriedigen, wie hübsch der Code sein sollte. Eleganz sollte Effizienz und Effektivität nicht übertreffen. Der Entwickler sieht sich diesen Code an, vielleicht mehrere Stunden im Jahr. Der Benutzer führt diesen Code jeden Tag mehrmals am Tag aus. Wir sollten nicht nur für die ästhetischen Werte des Entwicklers schreiben. Ich mag deine Definition viel besser. Mit Ihrer weiteren Erklärung stimme ich Ihnen voll und ganz zu.
HLGEM
5

Fragen Sie sie "warum" , aber höflich. Programmierer sind normalerweise mehr als glücklich, ihre Argumentation zu erläutern, und wenn die Antwort nicht "So habe ich es immer gemacht" lautet, werden Sie wahrscheinlich etwas Nützliches lernen. Zum Beispiel der Unterschied zwischen "guter" und "schlechter" ungarischer Notation, die Vorzüge verschiedener Namenskonventionen und warum der gewählte Algorithmus für die jeweilige Aufgabe gut genug ist.

l0b0
quelle
3

Ich habe nur ein paar Gedanken. Die meisten anderen Antworten scheinen den Kommunikationsaspekt dieses Problems ziemlich gut abgedeckt zu haben, aber ich möchte jeden Punkt, den Sie gemacht haben, mit einem oder zwei eigenen Gedanken ansprechen:

Ich mag ihre Formatierung oder Konventionen (wie Variablen- oder Methodennamen) nicht.

Dies ist eine Einbildung, die Sie sich nicht wirklich leisten können. Es gibt wahrscheinlich 20 Leute da draußen, die Ihre Formatierung oder Konventionen nicht mögen. Wenn Sie bei der Entscheidung über diese Dinge nicht Teil des Prozesses waren, müssen Sie darüber hinwegkommen und lernen, sich anzupassen. Wenn Sie Teil des Prozesses sind (oder in Zukunft sein können), bringen Sie Ihre Bedenken zu den anderen Entwicklern. Beschwere dich aber nicht nur. Haben Sie bereits Lösungen / Alternativen ausgearbeitet und einsatzbereit.

Ich habe kein gutes Verständnis dafür, wie der von ihnen geschriebene Code funktioniert, den ich hätte, wenn ich ihn selbst geschrieben hätte

Nein, würdest du nicht. Wenn Sie diese Behauptung aufstellen, haben Sie nicht sehr viel in einem sich schnell verändernden Umfeld gearbeitet. Ich habe Code, den ich vor 6 Monaten geschrieben habe und den ich nicht verstehen kann, wenn ich ihn mir nur ansehe. Ohne die Tatsache, dass es mit ein paar meiner persönlichen Macken geschrieben wurde, würde ich nicht einmal wirklich wissen, dass es meins war. Es kann mehr Aufwand erfordern, die Arbeit eines anderen zu überarbeiten, aber machen Sie keinen Fehler. Sie werden sie überarbeiten, um sie später zu verstehen, unabhängig davon, wer sie geschrieben hat.

Ich denke, es gibt einen besseren oder effizienteren Weg, etwas umzusetzen, was sie geschrieben haben

Genial. Jedes Team liebt Verbesserungen und Effizienz. Bringen Sie es zu Ihren Mitentwicklern. Wenn über Ihnen ein leitender Entwickler oder Architekt ernannt wurde, lassen Sie es ihn wissen. Teilen Sie Ihre Ideen offen und frei mit dem Team. Seien Sie jedoch bereit, auch die Ideen anderer zu akzeptieren. Ich finde, viele Leute sagen die gleichen Dinge, die Sie hier sagen, aber ihre wahre Bedeutung ist: "Mein Weg ist besser und Sie können ihn alle einfach lutschen. Tun Sie es auf meine Weise, oder Sie sind alle Puddingköpfe." Sei nicht dieser Typ. Seien Sie so bereit, sich zu ändern, wie Sie es von anderen Menschen erwarten.

Joel Etherton
quelle
1

Ich habe selbst eine Weile über diese Fragen nachgedacht. Ich bin ein Teamleiter und arbeite mit 2 anderen Programmierern. Einer der Programmierer hat einen sehr ähnlichen Stil wie ich - nicht der gleiche, aber nah genug. Ich glaube nicht, dass es Änderungen von seiner Seite rechtfertigt. Was bringt es, etwas zu beginnen, um verschiedene Tab-Konventionen oder Variablennamen zu erreichen?

Der andere Entwickler ist ein AC-Programmierer (wir sind vb.net-Programmierer, die an einem .net-Projekt arbeiten). Er schreibt VB-Code, als wäre es C-Code (ich nehme an, wenn die Rollen vertauscht würden, würden wir C-Code schreiben, als wäre es VB). Ich hatte einige Probleme damit. Aber nachdem ich eine Weile darüber nachgedacht hatte. Die Probleme, die ich hatte, waren wirklich nur ein unangenehmes Gefühl, das mir dieser seltsam aussehende Code gab. An seinem Code war wirklich nichts auszusetzen. Sein Code ist sauber und funktioniert sehr gut. Außerdem wird der Code hinter der Klassenschnittstelle abstrahiert, die er dem Rest des Programms zur Verfügung stellt. Am Ende spielt der Codierungsstil für uns also keine Rolle. Solange das Programm korrekt ist und die Kommentare angemessen sind. Wir sind alle klug genug (zumindest hoffe ich), dass das Debuggen nicht so schwierig sein sollte.

Jetzt wäre es eine andere Geschichte, wenn er in c # codieren würde und wir in vb.net codieren würden. Wir könnten es noch schaffen, aber es wäre schwieriger.

Persönlich denke ich, dass es viel wichtiger ist, dass die einzelnen Teammitglieder eine Codierungskonvention verwenden, mit der sie zufrieden und zufrieden sind. Dies bedeutet, dass sie produktiv codieren, anstatt sich auf einen Styleguide zu beziehen, der ihnen sagt, wie viele Registerkarten sie zum Einrücken einer Funktion benötigen.

Das bedeutet nicht, dass sie mit den Anwendungsfällen oder -anforderungen der Anwendung frei tun können, was sie möchten - sie werden von den Kunden festgelegt.

Bluebill
quelle
1

Oh bitte! Codierungsstandards sind wie Abtreibungsargumente: Jeder hat eine (außer mir, ich habe keine wirkliche Meinung zur Abtreibung, außer wenn Sie keine wollen, haben Sie sie nicht), jeder denkt, dass ihre absolut korrekt ist, und jeder denkt Alle anderen stinken.

Ich benutze verschiedene Methoden, weil ich festgestellt habe, dass sie leichter zu lesen sind. Zum Beispiel schreibe ich einen Testblock in PHP wie folgt:

if (Bedingung) {
  Anweisungen;
} [optional else oder elseif]

Aber wenn ich einen Block in Pascal schreibe, mache ich das:

wenn (Bedingung)
  beginnen

  Ende;

Es kommt auf die Sprache an, für mich ist es für beide einfacher, so zu lesen. Aber wenn jemand das {nach dem if in PHP in die Leitung setzen möchte, habe ich kein wirkliches Problem.

Paul Robinson
quelle
1
Sie möchten, dass alle Mitglieder Ihres Teams denselben Standard verwenden, um zu vermeiden, dass die Versionskontrollunterschiede durch Klammern zwischen den Zeilen verschmutzt werden.
0

Obwohl ich die Frustration verstehen kann, die mit "fremdem" Code verbunden ist, gibt es zwei Möglichkeiten für Sie, mit diesem "Hindernis" zu reifen.

  1. Jeder Entwickler muss lernen, den "Curly Brace War" zu überstehen, und damit meine ich, einen Weg zu finden, um einen gemeinsamen Codierungsstandard zu erhalten. Lernen, klar zu artikulieren, warum Sie bestimmte Techniken bevorzugen, aber was noch wichtiger ist, zu hören, warum jemand anderes eine andere Sichtweise hat. Dann lernen Sie, einige von Ihnen zum Wohle des Teams / Projekts niederzulegen.

  2. Was jedoch auf lange Sicht für Sie von viel größerem Wert sein wird, wird das Lernen sein, den Code anderer Leute zu lesen. Für diesen muss man sich nur durchsetzen und es nicht vermeiden. Vielleicht stellen Sie sogar fest, dass Sie viel lernen.

Stephen Bailey
quelle
0

Ich glaube, je größer ein Team wird, desto wichtiger werden Unit-Tests.

  • Stellen Sie sicher, dass der Code, den Sie selbst schreiben, durch Unit-Tests abgedeckt wird.
  • Versuchen Sie, die anderen Teammitglieder davon zu überzeugen, Tests zu schreiben.

Das Leben mit (Ihrem eigenen und dem anderer) Code ist einfacher, wenn Sie Tests haben, die den Code abdecken. Dies gilt auch für Code, den Sie nicht mögen.

Codeape
quelle
0

Die beste Antwort ist, ein Team zu finden, dessen Denkprozess Ihrem eigenen entspricht, damit Sie keine Kompromisse eingehen müssen.

Eine realistische Antwort ist, so gut wie möglich damit umzugehen. Wenn es sich nur um einen anderen Codestil handelt (z. B. gleiche Zeilenklammern im Vergleich zur nächsten Zeile), ist dies keine große Sache, obwohl ich verstehe, wie frustrierend es ist, wenn die Leute die Richtlinien für die von ihnen verwendete Sprache nicht befolgen. Wenn es sich um völlig unsinnige Codierungsstandards handelt, die keinen Sinn ergeben (z. B. ungarische Notation, wenn sie nicht benötigt wird, SoMeWeIrDnAmInGsTyLe, alle Variablen dürfen nicht länger als 8 Zeichen sein usw.), versuchen Sie, sie zu ändern, da es offensichtlich ist, dass die Person schreibt Der Code hat keine Ahnung oder nur Frachtkult mit dem, was vorher da war, anstatt intelligent genug zu sein, um ihn verbessern zu wollen.

Wayne Molina
quelle
-1

Passen Sie zunächst meinen Codierungsstil an: Leerraum an. Vor langer Zeit schrieb ein Clown einen Scherzartikel über Best Practices mit Codebeispielen mit etwa 12 vollständigen Leerzeichen, wo immer er konnte. Code kann ohne einen 12 Fuß breiten Bildschirm oder in der Schriftgröße .0001 nicht gelesen werden. Viele Programmierer gingen davon aus, dass dies glaubwürdig ist, und begannen damit - obwohl es offensichtlich keine gute Praxis war. Es macht mich verrückt. Komm schon Leute, ich sage, du bist schlauer als das. 50% oder mehr Leerraum auf der 240-Spalten-Seite macht keinen Sinn. Setzen Sie die erste geschweifte Klammer in dieselbe Zeile wie die Funktions- oder Klassensignatur (mit ein oder zwei Leerzeichen, nicht ein oder zwei Tabulatoren dazwischen). Verwenden Sie 3 Leerzeichen, um Codeebenen einzurücken (5, wenn Sie ein teilweise blindes Teammitglied haben). Verwenden Sie dann hier und da eine leere Zeile im Code, um die Dinge in kleinere logische Blöcke zu setzen.

Hier ist ein weiteres Beispiel für etwas, das knochenköpfig ist. Ich werde Ihnen zuerst sagen, dass dies nicht von einem unerfahrenen Trottel kommt. Es ist in einem sehr guten Code von einem Mann, der in der Lage war, eine sehr fortgeschrittene Technik zum Laufen zu bringen, während der größte Teil der Welt sich immer noch am Kopf kratzt. Das ist es, was mich frustriert. Warum sind gute Programmierer so nervös, wenn es darum geht, ihren Code zu formatieren?

    for (Iterator<Byte> iterator = collection.iterator(); iterator
            .hasNext();) {
        byteArray[i++] = iterator.next();
    }

Schauen Sie sich nun das Format der for-Bedingung an. Wenn Sie tatsächlich darüber nachdenken, ist das nicht ein völlig unlogischer Ort, um einen Zeilenumbruch zu setzen? Zum einen hatte ich viel Platz, um das Ganze für ... {in einer Zeile zu sehen. (Glücklicherweise verwendet dieser Typ nicht mehrere Tabulatoren zum Einrücken.) Aber wenn er absolut nicht leben konnte, ohne es aufzubrechen, warum dann mitten in einer Funktionsspezifikation? Kurz davor gibt es ein perfektes Trennzeichen - das Semikolon -, das als Haltepunkt sinnvoller gewesen wäre. Meine Stimme ist es, die gesamte Bedingung und die Eröffnung (die zum for gehört) in dieselbe Zeile zu setzen. Er endet auch gut - einfach, die schließende Klammer mit dem geöffneten "für" abzugleichen. (Einige Leute - und Werkzeuge (Ist das überflüssig?) - stellen das auch gerne an seltsame Orte.)

Zweitens: Notieren Sie sich den Fokus des Fachwissens jedes Programmierers. Wenn es einen signifikanten Unterschied gibt, stellen Sie sicher, dass sich dies in dem Teil des Codes widerspiegelt, an dem jeder Programmierer arbeitet. Ein Experte für industrielle Steuerung in der Robotik, ein Ingenieur, der hauptsächlich an den komplexen mathematischen Bits arbeitet, und der Typ mit dem CS-Abschluss, der sich durch eine völlig obskure Codekonstruktion beeindruckt (je weniger verständlich, desto ausgefeilter, oder?), Sind alles Code anders schreiben. Wenn es diese signifikanten Unterschiede gibt, teilen Sie die Arbeit so auf, dass jede einzelne Stärke zum Job passt.

Wenn es keine solchen Unterschiede gibt, vereinbaren Sie den Codierungsstil und auf jeden Fall - Codeüberprüfung, Codeüberprüfung, Codeüberprüfung. Ehrlich gesagt habe ich in meinem Leben eine Menge schlampigen Spaghetti-Codes durchlaufen (12 Mal auf der ganzen Linie beim Debuggen und Ändern durch die Wartungsgruppe oder das Ergebnis der Integration mit großen Augen) und war auf dem besten Weg, ein zu werden Experte für den Code nach 2 Minuten Gespräch mit dem letzten Mann, der daran gearbeitet hat. (Randnotiz: Es gibt tatsächlich einen Punkt, an dem es besser ist, den Code neu zu schreiben, als die Anpassung fortzusetzen.)

Ich persönlich arbeite lieber auch alleine zu Hause. Ich habe noch nie einen Programmierer getroffen, der es bevorzugt oder besser in einem Kubikraum arbeitet, der von vielen anderen Programmierern, Diskussionen und Unterbrechungen umgeben ist. Aber man muss sich daran gewöhnen, in einem Team zu arbeiten, und das bedeutet, sich die Zeit zu nehmen, um zusammenzukommen und zu diskutieren (nicht zu kämpfen), was man tut. Das ist eigentlich Teil des Jobs - es ist wirklich so. Es ist viel besser, es zu akzeptieren und systematisch, effizient und effektiv durchzuführen. Und wenn wir schon dabei sind, gehört es auch dazu, Zeit damit zu verbringen, Wissen und Informationen an die Personen zu übertragen, die die Dokumentation schreiben (von denen einige möglicherweise selbst geschrieben werden müssen). Und wenn Sie genug Erfahrung haben, um Ihr Verantwortungsniveau zu erhöhen, können Sie sogar häufiger mit Managern und Mitarbeitern im Marketing usw. chatten.

Codieren allein ist ein Hobby. Professionelles Software-Engineering ist ein facettenreicher Beruf.

Roger F. Gay
quelle
Und außerdem; Wenn Sie nur eine Reihe von schließenden Klammern haben, ist es nicht sinnvoll, Leerzeilen dazwischen zu setzen.
Roger F. Gay
1
"eine Reihe von schließenden Klammern" -> Kandidat für das Ausklammern der benannten Methode.
Warum? Es ist sehr einfach, mit 3 zu enden; Zum Beispiel, wenn das letzte Bit einer Methode eine Bedingung ist, und schließen Sie dann Ihre Methode und Klasse.
Roger F. Gay
@ Roger, würdest du "drei in einer Reihe" eine Serie nennen?
Ja, und das habe ich schon.
Roger F. Gay