Um das zu erläutern, bin ich daran interessiert zu wissen, was die Leute denken, dass Sie in einem Ein-Mann-Projekt implementieren müssen (Team-Quellcodeverwaltung, Dokumentation, Builds usw.) und welche Dinge erst zu dem Zeitpunkt erledigt werden müssen, zu dem die zweite Person kommt auf das Projekt.
Jeder, der Erfahrung mit diesem Szenario hat, wird seine Einsichten zu schätzen wissen.
Antworten:
Was ich gelernt habe (Ich habe eine andere Reihenfolge versucht. Ich habe mich geirrt. In dieser Reihenfolge werden die Dinge relevant.)
Alles in die Quellcodeverwaltung stecken. Verwenden Sie etwas, auf das jeder Zugriff hat, und beginnen Sie sofort . Keine Ausnahmen. Keine Verspätungen. Keine Ausreden.
Erstellen Sie einen QS / Test-Bereich, der völlig unabhängig von Ihrer persönlichen "Arbeits" - oder "Entwicklungs" -Umgebung ist. Mindestens eine separate Benutzer-ID. Idealerweise auf einer separaten VM.
Völlig getrennt. Keine möglichen Überschneidungen mit Ihrer aktuellen Arbeitsumgebung.
Hören Sie auf, über den Unit-Test hinaus in Ihrer eigenen Arbeitsumgebung zu testen. Code und Unit Test machen Sie "wie Sie". Alle anderen Tests (Integration, Leistung usw.) werden auf der separaten VM durchgeführt. Niemals als Sie selbst testen. Testen Sie immer als separater QS-Benutzer. Idealerweise auf einer separaten VM.
"Funktioniert für mich" ist eine schlechte Sache, die Sie Ihren Teammitgliedern sagen müssen. Sehr schlecht. Sie müssen herausfinden, was sie falsch machen. Mehrmals am Tag.
Planen Sie, alles aufzuschreiben. Verwenden Sie ein Nur-Text-Markup-Tool (RST oder Markdown oder so), damit die gesamte Dokumentation im Versionskontroll-Repository nur aus Text besteht. Mit einem Tool können HTML-Seiten (z. B. Docutils für RST) oder PDF-Dateien erstellt werden. Verwenden Sie keine proprietären Dokumentformate (zB MS-Word). Sie können mit einigen Quellcode-Kontrollsystemen nicht gut funktionieren.
Die ersten Dinge, die Sie aufschreiben müssen, sind die folgenden.
So erstellen Sie eine funktionierende Entwicklungsumgebung. Erstellen Sie im Zweifelsfall eine virtuelle Maschine und führen Sie den gesamten Vorgang auf dieser virtuellen Maschine aus. Stellen Sie sicher, dass die Schritte wirklich funktionieren und die Dokumentation klar ist . Tatsächliche Zeilen, die in der tatsächlichen Befehlszeile eingegeben wurden.
So führen Sie die Unit-Testsuite aus. Nochmal. Stellen Sie sicher, dass die Anweisungen funktionieren und kein Nachdenken erforderlich ist. "Tippe dies:" "Bestätige das:" Art von Zeug. Es ist nicht so, dass deine Teammitglieder dumm sind. Es ist so, dass Sie sich nicht daran erinnern, was Sie annehmen, es sei denn, Sie schreiben alles auf.
Ausführen der Integrationstestsuite
Verschwenden Sie nicht viel Zeit damit, die Architektur oder die Designprinzipien zu beschreiben. Sie müssen zuerst jemanden zum Laufen bringen. Du kannst das später erklären.
Die nächsten zu dokumentierenden Dinge sind die User Stories. Und die Testfälle, die diese Geschichten unterstützen. Und die Daten, die für die Testfälle benötigt werden, die diese User Stories unterstützen.
Sie werden dies teilen. Es geht unter Quellcodeverwaltung.
Schließlich können Sie die anderen 4 Ansichten dokumentieren.
Die logische Sicht ist hilfreich, um Dinge zu dokumentieren. Bilder sind hier akzeptabel. Dies kann sich schnell entwickeln, nehmen Sie sich also keine Zeit, um die Altdaten zu erfassen. Erarbeiten Sie einen Weg, um mit Ihren Teammitgliedern zusammenzuarbeiten.
Prozesssicht ist oft hilfreich. Wie wichtig dies ist, hängt von der Gesamtanwendung ab.
Die Entwicklungsansicht - Module, Bibliotheken, Frameworks usw. - wird häufig informell beschrieben. Ein Bild mag helfen, aber es ist bekanntermaßen schwierig, es so vollständig zu machen, dass jemand ein Dokument aufheben und Kopf oder Zahl daraus machen kann. Sogar lange etablierte, sehr öffentliche Projekte haben Bibliotheksdokumentationen, die einfach ignoriert werden. (Dies führt zu vielen Fragen zum Stapelüberlauf.)
Dies ist nicht nur akzeptabel, um informell zu sein, sondern ändert sich auch schnell.
Bereitstellungsinformationen. Server. IP-Adressen. Datenbankanmeldeinformationen. All das Zeug muss aufgeschrieben werden. Schließlich.
quelle
Tools und Methodik
Was ist notwendig, um erfolgreich zusammenzuarbeiten und produktiv zu sein?
Management / Teamarbeit
... oder irgendetwas anderes auf der zwischenmenschlichen Ebene
Buchreferenzen
Ich werde einige der allgemein erwähnten Bücher auflisten, die ich tatsächlich gelesen habe und die es meiner Meinung nach wert sind, gelesen zu werden. Für eine detailliertere Beschreibung oder für weitere Bücher möchten Sie vielleicht einige der Fragen zu SO lesen, die genau danach fragen, wie dies oder diese Frage.
Diese Bücher sind in Bezug auf Teams, Organisationen und Programmierprojekte wirklich lesenswert:
Keines davon ist ein praktischer Leitfaden für die Implementierung der Methode X (mit Ausnahme der Softwareschätzung hilft Ihnen dieses Handbuch bei der Auswahl eines geeigneten Schätzprozesses). Natürlich sind auch Bücher, die sich mehr auf das Programmieren konzentrieren, wie Code Complete, sehr bereichernd.
quelle
Ich werde aus der Erfahrung sprechen, aber denken Sie daran, dass jeder anders ist. Diese Dinge sind nicht universell.
Eine Sache ist, es persönlich gehen zu lassen. Mit diesem Projekt haben Sie 18 Monate lang zusammengelebt - Sie möchten natürlich, dass jede Veränderung so ist, wie Sie es tun würden. Geben Sie einem Kollegen einen Puffer, um Fehler zu machen und zu lernen. Schaffen Sie einen Raum, in dem sie nützlich sein können. Und denken Sie daran, es könnte nicht sofort passieren. Es wäre auch großartig, wenn es etwas gäbe, einen Teil des Codes, von dem sie glauben, dass er es schafft, ihn zu verbessern oder zu erstellen, der sich nach Erfolg in kurzer Zeit anfühlt. Geduld und Toleranz zahlen sich hier aus. Versuchen Sie nicht, Mikromanagement zu betreiben, und wenn Sie kritisieren wollen, "Sie liegen falsch" zu sagen, stellen Sie sicher, dass Sie ein Verdienst haben, Sie können es beweisen, es ist kein "religiöser" Kampf.
Ein weiteres wichtiges Anliegen ist es, die richtige Person für Sie zu finden. Im Idealfall ist es besser, jemanden zu finden, der klüger ist als Sie. Es ist subjektiv und relativ, aber wenn Sie das Gefühl haben, dass eine Person über etwas Wissen und Fähigkeiten verfügt, über das Sie nicht verfügen, ist es das Beste. Es wird eine für beide Seiten lohnende Zusammenarbeit.
Es gibt zwei Möglichkeiten: Der Kollege ist ein Hindernis, und Sie werden das, was er oder sie getan hat, am Ende wiederholen, oder die Fähigkeiten von zwei von Ihnen werden sich vervielfachen, nicht nur addieren, und Sie werden es wirklich zu schätzen wissen, zusammenzuarbeiten.
Zu einem Thema "Sauberer, schneller, wiederverwendbarer Code" - Ich schlage vor, in einem Interview einen kleinen Mikrokernel / Service Manager und / oder Job Executor zu schreiben. Sehen Sie, wie steckbare Komponenten angegeben und konfiguriert werden. Muss nicht fertig sein, es ist ein Gedanke, der zählt. Und außerdem lernst du schnell Leute, die wissen, wie man es macht ;-) Viel Glück!
quelle
Meine Einstellung: Beginnen Sie damit, die Architektur Ihres internen Projekts für jemanden zu dokumentieren, der sich dessen nicht bewusst ist. Versuchen Sie zu erklären, welche Annahmen vorhanden sind und wann / wo Sie von den üblichen Praktiken abgewichen sind und warum.
Build-Automatisierung: Tolle Idee, kann ich eine Konfigurationsautomatisierung für einen Dev-Rechner hinzufügen? Je einfacher das Erstellen ist, desto mehr wird es sein (also mehr / schnellere Testbereitstellung).
Eine weitere Idee (die mir einmal sehr geholfen hat): Bitten Sie den neuen Entwickler, einige kleinere Bereinigungsaufgaben in verschiedenen Bereichen Ihrer Codebasis auszuführen, damit er sich an die Layout-Tools usw. gewöhnt. Eine gute Idee ist, sie zu entfernen Obskure Bereiche, die später Verwirrung stiften könnten (Beispiel: Wenn Sie emmm python für zwei Zeilen eines Shell-Skripts irgendwo verwendet haben und Ihr Projekt auf Java basiert, bitten Sie die Entwickler, diese beiden Zeilen in Java umzuschreiben, damit # 3 dies muss weniger wissen, um zu arbeiten)
quelle
Ich würde mich darauf konzentrieren, alles zu automatisieren, was manuelle Arbeit erfordert und daher von einer unerfahrenen Person vermasselt werden kann . Was, basierend auf Ihrem kurzen Kommentar oben, Folgendes beinhaltet:
Wenn Sie dies nicht tun, werden Sie entweder angekettet, um diese Aufgaben für immer zu erledigen, oder (ein Teil von) der neuen Person (en) wird irgendetwas früher oder später unvermeidlich vermasseln.
Die andere wichtige Aufgabe ist, wie @dimitris feststellte, die Dokumentation. @S. Lott hat viel mehr Details hinzugefügt, also nur +1 für ihn anstatt zu wiederholen :-)
quelle
Hier einige Gedanken, die teilweise auf persönlichen Erfahrungen beruhen:
Dokumentieren Sie Ihr Projekt. Konstruktionsspezifikationen, Diagramme, Handbücher und Kommentare helfen dem neuen Mitarbeiter, sich auf den neuesten Stand zu bringen. Ein komplexes System nur mündlich zu erklären, kann sich als langsam und frustrierend erweisen. Bei Ein-Mann-Projekten wird die Dokumentation häufig vernachlässigt. Stellen Sie sicher, dass Ihre Ausnahme ist.
Konzentrieren Sie sich zunächst auf den Code auf API- / Core-Ebene, und geben Sie dem neuen Mitarbeiter einige "Application Layer" -Aufgaben oder Fehlerbehebungen, um ihn schrittweise mit dem Code vertraut zu machen. Im Allgemeinen beginnt mit einfacher , aber dennoch sinnvoll und damit belohnen Aufgaben .
Kommunikation ist wichtig. Reagieren Sie auf die Fragen, Kommentare und Ideen der neuen Mitarbeiter. Erklären Sie, warum Sie denken, dass eine Idee nicht gut ist, wenn Sie dies tun. Ein frisches Paar Augen kann überraschend gut Verbesserungspotential erkennen. Wenn Ihr neuer Mitarbeiter ein anständiger Mitarbeiter ist, kann er Ihren Code einer Peer-Review unterziehen und schließlich an Architekturentscheidungen teilnehmen. Diskutieren, Ideen austauschen. Dies ist einer der größten Vorteile, wenn Sie einen Mitarbeiter für Ihr Projekt haben.
Definieren Sie Verantwortlichkeiten klar , sobald Sie wissen, welche Aufgaben Ihr neues Teammitglied erledigt. Richten Sie Dokumentationsmethoden und Kodierungskonventionen ein , um reibungslose Abläufe zu gewährleisten.
Verwenden Sie ein Revisionskontrollsystem . Pflegen Sie ein logisches Quelldatei-Layout und bauen Sie Disziplin auf .
Was das Interview betrifft, ich bin kein großer Fan von künstlichen Codierungstests oder Trickfragen, es sei denn, Sie möchten die Belastbarkeit des Kandidaten testen. Selbst die klügsten Problemlöser können sich in einer solchen Situation einschließen. Die Eigenschaften, nach denen Sie suchen, sind unter anderem: Ehrlichkeit , Fachkompetenz , technologische Kenntnisse / Einsicht , Begeisterung und gegenseitige Kompatibilität . Arbeitsklima kann viel bedeuten; Es ist nicht ratsam, einen Teamkollegen auszuwählen, den Sie nicht mögen. Stellen Sie Ihre Fragen richtig und führen Sie eine informelle Diskussion, um sich ein gutes Bild von Ihrem Kandidaten zu machen. Viel Glück!
quelle
Technologie
Wenn Sie jemanden als Entwickler mit einbeziehen, gibt es drei wichtige Dinge, die ich empfehlen würde, bevor sie gestartet werden.
Wenn diese drei Dinge richtig funktionieren, beseitigen Sie 75% des allgemeinen Problems, das auftritt, wenn Sie ein neues Teammitglied einstellen. Der Sinn dieser Technologie ist es, eine Menge dessen, was nur in Ihrem Kopf passiert, zu erfassen und herauszufinden, wo Ihr Teammitglied damit interagieren kann.
Die Quellcodeverwaltung stellt sicher, dass Sie beide an der gleichen Sache arbeiten. Mit Issue Tracking behalten Sie beide den Überblick über die zu erledigenden Aufgaben und können leichter erkennen, woran sie arbeiten und was sie leisten. Kontinuierliche Integration und Tests stellen sicher, dass Sie einen wiederholbaren Erstellungsprozess haben und dass neue Verbesserungen andere Teile des Codes nicht beschädigen.
Pragmatic Programmer hat einige ziemlich gute Bücher dazu. Hier sind ein paar, die ich empfehlen würde. Sie haben ähnliche Titel, je nachdem, welche Programmiersprache Sie verwenden oder welche Versionskontrolle Sie verwenden möchten:
http://www.pragprog.com/titles/tpp/the-pragmatic-programmer http://www.pragprog.com/titles/tsgit/pragmatic-version-control-using-git http: //www.pragprog. com / title / auto / pragmatic-project-automation
persönlich
Oftmals sind die Schwierigkeiten, denen Sie gegenüberstehen, weniger auf der technischen Seite der Dinge als vielmehr auf dem Lernen, loszulassen. Es kann schwierig sein, jemand anderem die Kontrolle über bestimmte Aspekte des Projekts zu geben - insbesondere, wenn Sie es gewohnt sind, alles selbst zu tun und jede einzelne Entscheidung zu treffen. Sie werden sich etwas Kummer ersparen, wenn Sie einen Bereich finden, in dem die neue Person zu Beginn mit einem angemessenen Maß an Freiheit arbeiten kann, damit Sie eine Vertrauensbasis aufbauen können. Wenn Sie eine gute Person einstellen, lernen Sie wahrscheinlich vor allem, wie Sie der anderen Person vertrauen können, dass sie gute Arbeit leistet, auch wenn ihre individuellen Entscheidungen nicht mit den Entscheidungen übereinstimmen, die Sie getroffen hätten.
Sie möchten Ihrem neuen Mitarbeiter die Freiheit geben, Probleme so zu lösen, wie es für ihn funktioniert, und gleichzeitig die Sicherheitsvorkehrungen einhalten, damit Sie Probleme frühzeitig erkennen können.
quelle
Diese Punkte sind meiner Meinung nach am wichtigsten:
Und zu guter Letzt: Holen Sie sich ein Versionskontrollsystem. Subversion ist in Ordnung. Fügen Sie jedoch keine Eclipse-Dateien (oder was auch immer) hinzu, die benutzerspezifisch sind und daher ständig geändert werden. Sie bringen Sie dazu, Stunden zu verschwenden. Zögern Sie nicht, bei Stackoverflow nachzufragen, wenn Sie Probleme damit haben.
quelle