Ich programmiere in Java, in einem sehr OO-Stil, von mir. Ich hatte noch nie die Gelegenheit, mit anderen Programmierern zusammenzuarbeiten (zumindest bin ich noch kein Profi).
Aus Neugier wollte ich fragen: Wie funktioniert es, mit einem Team an einem Projekt zu arbeiten, besonders wenn man an einem OO-Projekt arbeitet?
Wie funktioniert das Aufteilen von Aufgaben? Wie entwickelt man etwas, das mit etwas, das ein anderer Programmierer entwickelt hat, erfolgreich funktioniert? Wie und wann kommunizieren Programmierer?
Vielen Dank
object-oriented
teamwork
Aviv Cohn
quelle
quelle
Antworten:
Hoffentlich kann ich dir ein bisschen helfen oder dich zumindest in die richtige Richtung weisen!
Als eine Art Haftungsausschluss ist es jedoch ein riesiges Thema - und eines, von dem ich wirklich denke, dass es " hineingeworfen werden " muss, um ein tiefes Verständnis dafür zu erlangen. Trotzdem werde ich einen kurzen Überblick über die beiden Hauptprobleme geben:
In Bezug auf OOP-Projekte kann ich ehrlich gesagt nicht viele OOP-spezifische Probleme erkennen, die an keiner anderen Stelle vorhanden sind.
Tatsächlich denke ich, dass die Programmierung im OOP-Stil unglaublich gut für die Teamentwicklung geeignet ist. Ein Grundprinzip von OOP ist, dass ich nicht alle Details zu jedem Objekt, mit dem ich interagiere, kennen sollte: Ich muss nur wissen, was es kann und wie ich es dazu bringen kann, das zu tun.
Die Abstraktionen, die OOP bereitstellen kann, sind in einem Team fantastisch.
Quellcodeverwaltung
Es muss einen zentralen Speicherort für das Projekt geben, an dem mehrere Entwickler gleichzeitig auf die Codebasis zugreifen können. Hier kommen Systeme wie Git (oder SVN) ins Spiel.
Ich kann nur spezifisch über Git sprechen, da ich SVN noch nie benutzt habe - wie auch immer ich sehe, sie sind ähnlich, aber mit unterschiedlicher Terminologie.
Mit Git kann ich ein Repository mit dem gesamten Quellcode für ein bestimmtes Projekt erstellen und dann meinem Team den Zugriff auf das Repository gewähren. Für jedes Feature oder jede Fehlerbehebung, die dann vorgenommen wird, können einzelne Entwickler ihre eigene "Verzweigung" erstellen, was bedeutet, dass die Entwicklung auf parallelen Spuren erfolgen kann.
Sobald ein Merkmal oder fix abgeschlossen ist, kann es dann „sein verschmolzen “ in Code - Basis in das Hauptprojekt zurück. Alle " Konflikte " können dann von Git erkannt und auf der Quellebene vom zuständigen Entwickler behoben werden.
Ich bin mir nicht sicher, ob Sie Git schon einmal verwendet haben, aber es kann auf den ersten Blick recht komplex erscheinen - aber dank seiner jüngsten Beliebtheit (zum Teil von Github ) gibt es eine Fülle von Tutorials und Ressourcen.
Wenn du es noch nicht benutzt hast, empfehle ich dir, dich bei GitHub anzumelden und dir ein Gefühl dafür zu verschaffen! (Alternativ ist Bitbucket eine ähnliche Alternative, aber Sie können damit kostenlos private Repositorys einrichten.)
Git Flow ist ein exzellenter Git-basierter Workflow, der für Teams unglaublich nützlich ist. Wie Git im Allgemeinen wird es schwierig, sich vorzustellen, dass man ohne Git eine Weile im Team arbeitet.
Mitteilungen
Wenn Sie alle technischen Barrieren überwunden haben, kommen Sie wirklich zu dem Grundproblem, das die meisten Projekte (technisch oder nicht) plagt - und das ist Kommunikation.
Das gesamte Team muss sich darüber im Klaren sein, wer was tut, wann sie es tun und was davon betroffen ist.
Verantwortung muss klar definiert sein
Dies liegt auf der Hand, aber die meisten Projekte verwenden ein Ticketing-System, bei dem alle Funktionsanforderungen oder Fehler protokolliert und anschließend einem bestimmten Mitarbeiter zugewiesen werden. ( JIRA , Unfuddle usw.) Oft sind diese in das Quellcodeverwaltungssystem integriert, was das Leben ein wenig vereinfacht. (BitBucket und GitHub bieten beide Problemverfolgung für mit ihnen gehostete Git-Repositorys.)
Dadurch wird verhindert, dass Entwickler versehentlich an denselben Problemen arbeiten.
Dies ist jedoch keine vollständige Lösung. Sie müssen weiterhin sicherstellen, dass sich Entwickler der Verantwortlichkeiten anderer Entwickler bewusst sind. Ich weiß in der Vergangenheit, dass ich andere Probleme behoben habe, auf die ich bei der Behebung eines bestimmten Fehlers gestoßen bin, nur weil es Sinn macht. (" Nun, ich bin bereits hier. Dies könnte einen Refaktor gebrauchen und vielleicht kann ich nach anderen Problemen suchen. ") Dann musste ich mich bei anderen Entwicklern entschuldigen, die an den anderen Problemen gearbeitet haben, die ich habe Behoben - Verschwenden unserer beiden Zeit.
Im Allgemeinen können diese Probleme durch ...
Reguläre Treffen
Einige Projektmanagement- / Entwicklungsmethoden schreiben bestimmte Kommunikationsmethoden oder Besprechungsintervalle vor. Im Allgemeinen waren die produktivsten Systeme, die ich je gesehen habe, morgendliche Stand-up-Meetings, bei denen jeder in einem Team einen kurzen Überblick darüber gibt, was er tut - wenn Sie dies auf Mitglieder des Entwicklungsteams beschränken und klare Richtlinien dazu haben zu kommunizieren kann dann unglaublich effektiv sein. Ich habe immer versucht, mich an Folgendes zu halten:
Andere Teammitglieder können sofort erkennen, dass " Fergus daran arbeitet, den Fehler zu beheben, der kürzlich protokolliert wurde. Das bedeutet jedoch, dass er an einem Code arbeitet, den ich mir ansehen muss. Ich werde ihn kontaktieren, bevor ich Änderungen vornehme. ".
Architektonische Treffen
Ich habe kürzlich mit einem großartigen Team zusammengearbeitet, das alle zwei Wochen einen " Tech-Chat " hatte, in dem größere / architektonische Probleme besprochen wurden. Jedes Mitglied des Teams hatte Zeit, die größeren Probleme des Projekts zu verstehen und mögliche Korrekturen zu besprechen.
Ich persönlich habe das geliebt, ich habe nicht viel dazu beigetragen, da ich ziemlich neu in dem Projekt war - aber die Möglichkeit, den Diskussionen zuzuhören, gab mir viel Einsicht; Schon bald konnte ich das Projekt und die individuellen Denkstile verstehen.
Kommunikation ist das eine Problem, das jedes Team zum Absturz bringen kann . Technisch oder nicht, wenn die Leute das Gesamtbild nicht kennen, ist die Wahrscheinlichkeit größer, dass sie scheitern.
Andere Probleme
Es ist gut, sicherzustellen, dass jeder die gleiche Konfiguration oder den gleichen Stil hat, wenn er in einem Team arbeitet. Was meine ich?
Aufbau
Wenn Sie an einem Java-Projekt arbeiten, ist es möglicherweise eine gute Idee, sicherzustellen, dass (zumindest für Entwicklungsumgebungen und nicht zum Testen) JVM-Versionen im Team üblich sind. Dann IDEs. Dies ist vor allem dann hilfreich, wenn das gesamte Team Eclipse oder NetBeans oder eine IDE Ihrer Wahl verwendet.
In einem Webprojekt benötigen möglicherweise alle Entwickler einen bestimmten Stapel. mit bestimmten Apache- oder PHP- Versionen.
Wenn ich an solche Faktoren denke, kann das Team in meinem Kopf etwas schneller "gelieren".
Stil
Tabs vs Leerzeichen? CamelCase oder Abstand_mit_Unterstrichen? So klein diese Fragen auch sein mögen, wenn Sie alleine arbeiten, wenn Sie mit einem größeren Team arbeiten, möchten Sie wirklich einen gemeinsamen Stil anstreben.
Eigentlich sollte man nicht wirklich sagen können, wer einen bestimmten Codeabschnitt geschrieben hat - man sollte nur wissen, dass er dazu gehört .
Aus diesem Grund veröffentlichen viele Open Source-Projekte offen Richtlinien / Styleguides für das Quellcode-Format. Eine Vorstellung davon, was diese enthalten, finden Sie in den Google StyleGuides für ihre eigenen Open Source-Projekte.
Aufgaben und Unit-Tests
Dies ist nicht auf Teams beschränkt, aber ich werde dies aus einem besonderen Grund schnell ansprechen: Es macht das Teamleben viel einfacher.
Wenn Sie einen komplexen Workflow mit vielen Abhängigkeiten oder einen langen Erstellungsprozess haben, ist es oft nützlich, dies mithilfe eines Task-Runners zu automatisieren. Für Webprojekte ist GruntJS fantastisch, obwohl Apache Ant von Java kommt, denke ich, dass es ziemlich ähnlich sein könnte.
Als Einzelperson verwende ich GruntJS , um meine Site zu erstellen, bevor ich sie auf meinem FTP-Server bereitstelle. Ein Grunt-Befehl reicht aus, um mein CSS / Sass zu kompilieren und zu minimieren , meine Assets zu komprimieren und dann meine Dateien hochzuladen .
Als Teammitglied kann ich mit GruntJS überprüfen, ob ich keine Tests gebrochen habe - und dass ich keine Fehler eingeschleust habe, indem ich andere Teile des Projekts nicht vollständig kenne. Dies ist natürlich zusätzlich zu den Vorteilen, die ich als einzelner Entwickler habe.
Ich kann es auch verwenden, um ein Projekt mit meinem ausgefallenen Quellcodeverwaltungspaket (Git) zu klonen - und einen Befehl auszuführen, um alle meine Abhängigkeiten zu installieren. Dies ist ein großes Plus, da die Zeit, die aufgewendet wird, um einen neuen Entwickler in die Position zu bringen, in der er tatsächlich mit der Entwicklung beginnen kann, ziemlich groß sein kann - ohne die Zeit in Betracht zu ziehen, die erforderlich ist, um sich an eine unbekannte Codebasis zu gewöhnen.
Dokumentation
Die besten Projekte, die ich je gesehen habe, waren dokumentiert (und oft ziemlich übertrieben) und richteten sich an Entwickler. Diese Art von Dokumenten kann Dinge erklären wie:
1. Die Entwicklungsumgebung:
2. Arbeitsablauf
3. Verantwortlichkeiten im Team:
4. Eine " Pipeline " für die Zukunft
Beispiele
Es kann sich lohnen, sich den Arbeitsablauf eines Open Source-Projekts anzuschauen, um ein Gefühl dafür zu bekommen, wie es funktioniert - sei es ein etablierter mit eigenem Arbeitsablauf (oft stark dokumentiert) oder eines der vielen Beispiele auf GitHub.
Ein letztes Wort zur Warnung
Wenn Sie sich in einem Team wiederfinden, das all dies richtig macht, werden Sie es hassen , irgendwo anders zu sein. Nimm es von mir, wenn du einmal ein gutes Team erlebt hast, können dich plötzlich Probleme an anderer Stelle wirklich runterziehen. (Das ist aber eine Geschichte für einen anderen Beitrag!)
quelle