Wie werde ich ein guter Teamplayer? [geschlossen]

19

Ich programmiere (obsessiv) seit meinem 12. Lebensjahr. Ich kenne mich in allen Sprachen aus, von Assembler über C ++ und Javascript bis hin zu Haskell, Lisp und Qi. Aber alle meine Projekte waren von mir.

Ich habe meinen Abschluss in Chemieingenieurwesen gemacht, nicht in Wirtschaftsingenieurwesen oder Computertechnik, aber diesen Herbst arbeite ich zum ersten Mal mit anderen Leuten an einem großen Programmierprojekt, und ich habe keine Ahnung, wie ich mich vorbereiten soll. Ich benutze Windows mein ganzes Leben lang, aber dieses Projekt wird sehr unix-artig sein, deshalb habe ich kürzlich einen Mac gekauft, um mich mit der Umgebung vertraut zu machen.

Ich hatte das Glück, im vergangenen Jahr mit ein paar Freunden an einem Hackathon teilzunehmen - beide CS-Majors - und aufregender Weise haben wir gewonnen. Als ich mit ihnen zusammenarbeitete, wurde mir jedoch klar, dass sich ihr Arbeitsablauf sehr von meinem unterschied. Sie verwendeten Git für die Versionskontrolle. Ich hatte es damals noch nie benutzt, aber seitdem habe ich alles gelernt, was ich kann. Sie verwendeten auch viele Frameworks und Bibliotheken. Ich musste lernen, was Rails so ziemlich über Nacht für den Hackathon war (andererseits wussten sie nicht, was lexikalisches Scoping oder Closures sind). Unser gesamter Code hat gut funktioniert, aber sie haben meinen nicht verstanden, und ich habe ihren nicht verstanden.

Ich höre Hinweise auf Dinge, die echte Programmierer tagtäglich tun - Unit-Tests, Code-Reviews, aber ich habe nur einen sehr vagen Eindruck davon, was das ist. Normalerweise habe ich in meinen kleinen Projekten nicht viele Fehler, daher habe ich nie ein Fehlerverfolgungssystem oder Tests für diese benötigt.

Und das Letzte ist, dass ich lange brauche, um den Code anderer Leute zu verstehen. Variable Namenskonventionen (die mit jeder neuen Sprache variieren) sind schwierig (__mzkwpSomRidicAbbrev), und ich finde die lose Kopplung schwierig. Das soll nicht heißen, dass ich Dinge nicht locker kopple - ich denke, ich bin ziemlich gut darin für meine eigene Arbeit, aber wenn ich etwas wie den Linux-Kernel oder den Chromium-Quellcode herunterlade, um es mir anzusehen, verbringe ich Stunden damit, es zu versuchen um herauszufinden, wie all diese seltsam benannten Verzeichnisse und Dateien miteinander verbunden sind. Es ist eine Programmiersünde, das Rad neu zu erfinden, aber ich finde es oftmals einfacher, die Funktionalität selbst zu schreiben, als Stunden damit zu verbringen, eine Bibliothek zu sezieren.

Offensichtlich haben Leute, die dies für ihren Lebensunterhalt tun, diese Probleme nicht, und ich muss selbst auf diesen Punkt kommen.

Frage: Welche Schritte kann ich unternehmen, um mich in alle anderen zu "integrieren"?

Vielen Dank!

Nick
quelle
Ich würde sagen, der erste Schritt ist das Programmieren, damit Sie mindestens die gleiche Sprache sprechen können.
Rig
Besteht die Frage nicht mehr darin, wie Sie ein Projekt mit einer größeren Codebasis integrieren, als Sie es gewohnt sind?
Louis Kottmann
3
"... dieses Projekt wird sehr unix-artig sein, also habe ich einen Mac gekauft ..." Habe ich etwas falsch verstanden, oder ist das ein Tippfehler?
Stu Pegg
4
@StuartPegg: Mac OS X ist ein * nix mit einem eingebauten Shell-Terminal, obwohl ich empfehlen würde, MacPorts darauf zu installieren, wenn Sie die * nix-Seite stark nutzen möchten.
Dave Sherohman
1
Ich erinnere mich, dass ich dort im American Pie-Film einmal sagte: "Sie treffen erst, wenn Sie treffen". So wie tGilani sagte Werde Teil eines Teams. :)
Asakura89

Antworten:

13

Ich denke, Sie werden sowohl ängstlich als auch aufgeregt, wenn Sie für eine Gruppe arbeiten.

Keiner von uns hat aus Büchern gelernt, in einer Gruppe oder einem Team zu arbeiten, oder hat Babyschritte oder "Dummies Guide to Working in Teams" erhalten.

Wir lernen nur, mit Gruppen zu arbeiten, indem wir in Gruppen arbeiten.

Alles, was Sie über professionelle Programmierer gehört haben, fügt sich im Laufe der Zeit in das Team ein. Sie lernen nacheinander alles, wie Versionskontrolle, Komponententests usw.

Für mich ist die Quintessenz

Werden Sie Teil eines Teams.

Gilani
quelle
8

Ich werde einige Ihrer Sätze herausgreifen und ein paar allgemeine Punkte ansprechen:

(Andererseits wussten sie nicht, was lexikalisches Scoping oder Closures sind). Unser gesamter Code hat gut funktioniert, aber sie haben meinen nicht verstanden, und ich habe ihren nicht verstanden.

...

Ich höre Hinweise auf Dinge, die echte Programmierer tagtäglich tun - Unit-Tests, Code-Reviews, aber ich habe nur einen sehr vagen Eindruck davon, was das ist. Normalerweise habe ich in meinen kleinen Projekten nicht viele Fehler, daher habe ich nie ein Fehlerverfolgungssystem oder Tests für diese benötigt.

...

Ich verbringe Stunden damit herauszufinden, wie all diese seltsam benannten Verzeichnisse und Dateien miteinander verbunden sind. Oft finde ich, dass es einfacher ist, die Funktionalität selbst zu schreiben, als Stunden damit zu verbringen, eine Bibliothek zu sezieren.

Ich denke, die größte Einzelheit, die Sie lernen müssen, ist Folgendes:

Bei einem bestimmten Standard an Entwicklerfähigkeiten leistet ein nEntwicklerteam weniger als die nHälfte der Arbeit, die einer der Entwickler alleine leisten könnte - aber er leistet immer noch mehr als jede andere Person .

Der Grund ist einfach: Wenn Sie mit anderen Menschen arbeiten, müssen Sie einen Teil Ihrer Zeit damit verbringen , Informationen mit diesen anderen Menschen auszutauschen . Wenn Sie alleine arbeiten, findet der Informationsaustausch in Ihrem Kopf statt. Welches ist natürlich schneller.

Das andere wichtige ist:

Einige Ihrer Mitarbeiter werden weniger fähig sein als Sie, sicherlich in einigen Fähigkeiten. Einige sind in allen Fertigkeiten sogar weniger fähig als Sie

In Anbetracht dieser beiden Ideen ist alles, was ich oben zitiert habe, sinnvoll. Viele Leute "kriegen" keine Abschlüsse. Die Tests und Codeüberprüfungen sollen die Qualität sicherstellen und das Risiko verringern, wenn Code von einer Gruppe von Leuten mit gemischten Fähigkeiten produziert wird. Die Fehlerverfolgung erfolgt, weil bei ausreichend großen Systemen Fehler unvermeidlich sind. Und die endlosen Bibliotheken mit ihren Konventionen sind, weil es ohne Konventionen einfach zu viel Code gibt , um ihn jedes Mal neu zu lernen oder zu schreiben, wenn Sie ihn brauchen.

Wirklich, ich denke, der einzige Weg zu lernen, wie man in einem Team arbeitet, ist, es tatsächlich zu tun. aber hoffentlich hilft dir das obige bei der mentalen Vorbereitung. Viel Glück!

AakashM
quelle
4

Am effizientesten ist es, Teil eines Teams zu werden.

Der Beitritt zu einem Team scheint schwierig zu sein, da ich verstehe, dass Sie noch nicht Teil eines Teams sind, wie viele Studenten und viele Leute, deren Aufgabe es ist, mit keinen anderen Entwicklern zusammenzuarbeiten.

Ich würde Ihnen empfehlen, an einem Open-Source-Projekt teilzunehmen, das sehr aktiv ist und häufige Kommunikation auf modernen, für alle zugänglichen Kanälen (Issue-Tracker, Mailing-Liste, Wiki usw.) bevorzugt . Offene Kommunikation ist wichtig, da Sie wahrscheinlich zunächst beobachten werden, wie andere Personen interagieren. Vermeiden Sie daher Projekte, die auf E-Mails zwischen Kernentwicklern oder nicht archiviertem IRC beruhen.

Bevorzugen Sie ein Projekt, das einladend zu sein scheint und häufig Beiträge leistet , anstatt ein Projekt mit einer Person, die alles tut. Bevorzugen Sie auch Projekte, bei denen jeder alles anfassen darf (anstatt dass jeder Entwickler seinen abgegrenzten Bereich hat), da dies mehr Spaß macht und mehr Kommunikationsmöglichkeiten bietet.

Shameless Stecker: Sie sind sehr willkommen hier !

Nicolas Raoul
quelle
1

Ich werde nicht wiederholen, was alle anderen bereits gesagt haben "just do it", aber ich werde einen zusätzlichen Punkt hinzufügen, den ich nicht erwähnt habe: Ein guter Manager wird Ihnen wirklich dabei helfen, sich in das Team zu integrieren.

Während Sie vielleicht das richtige Zeug für den Programmierteil des Jobs haben, könnten Sie einige der mehr mit der zwischenmenschlichen Arbeit und der Softwareentwicklung zusammenhängenden Dinge vermissen. Ein guter Manager führt Sie in die Übungen des Teams ein (sowohl in Bezug auf Soft Skills als auch in Bezug auf Hard Skills), um Ihnen beim Gelieren zu helfen. weil du etwas nicht reparieren kannst, von dem du nicht weißt, dass es kaputt ist.

Andy Hunt
quelle
0

Ein weiterer Tipp, den ich Ihnen geben möchte, ist, dass keine zwei Teams gleich sind und dass sich sogar ein bestehendes Team ändert, wenn sich eine oder mehrere Personen dem Team anschließen.

Ein Team entsteht aus dem Zusammenspiel von Personen, die sich kennenlernen und versuchen, die Zusammenarbeit zu verstehen, bis sie einen gemeinsamen Weg gefunden haben (siehe z. B. Tuckmans Stadien der Gruppenentwicklung ).

Mein Rat wäre also, nicht zu versuchen, jetzt Antworten auf Ihre Fragen zu finden, sondern zu sehen, was passiert, wenn Sie tatsächlich anfangen, im neuen Team zu arbeiten. Einige Ihrer Probleme werden von Ihren Kollegen möglicherweise als nicht relevant eingestuft, andere werden als relevant eingestuft, und Sie haben die Möglichkeit, sie gemeinsam zu erörtern oder Ihre eigene Sicht auf das Thema zu fördern. Und schließlich werden Sie sich wahrscheinlich auch mit Aspekten befassen, an die Sie noch nicht gedacht haben.

Ich stimme ElYusubov zu, dass Sie viel Geduld brauchen und sich und den neuen Kollegen ein Team geben müssen, um zu lernen, wie man zusammenarbeitet, bis Sie ein Team werden. Wenn Sie Mannschaftssport betreiben, sollten Sie dies bereits erlebt haben.

Ein letzter Kommentar dazu, wie man viel Zeit damit verbringt, den Code anderer Leute zu verstehen. In einem Team zu arbeiten bedeutet, dass Sie an dem Code einer anderen Person arbeiten und andere Entwickler an Ihrem Code arbeiten. Manchmal ist der Code zu komplex, um von Grund auf neu geschrieben zu werden. Eine typische Lösung besteht darin, den Originalentwickler zu bitten, Ihre Änderungen zu überprüfen, damit Sie ein bisschen sicherer sind, dass Sie nichts in den Code einbauen.

Dies war für mich ein großer Schritt beim Übergang von einem Solo-Programmierer zu einem Team-Programmierer: Sie arbeiten an Code, den Sie nur teilweise verstehen und an den Sie sich erst gewöhnen müssen. Dies beinhaltet viel mehr Kommunikation mit Ihren Kollegen, viel Respekt (ja, die haben seltsame Namenskonventionen für ihre Variablen, na und?) Und gegenseitiges Vertrauen (auch wenn sie einen anderen Codierungsstil haben, ich weiß, dass sie Arbeitscode liefern). .

Giorgio
quelle
0

Ein gutes Teammitglied zu sein bedeutet, furchtlos zu kommunizieren, Ihren Hochschulen zu vertrauen und Hindernisse in einem Projekt als Team zu überwinden unddeliver project as a team.

Es braucht Zeit , braucht Geduld und muss gelernt werden, um sich als Programmierer wohl und sicher zu fühlen. Es ist auch wahr, dass NICHT jeder Programmierer ein guter Teamplayer ist , und Teamplayer teilen ihren Erfolg und lernen Lehren aus Fehlern.

Es wäre hilfreich, einige Charaktere eines guten Teammitglieds hervorzuheben .

a) Ein gutes Teammitglied ist eine Person, die zielorientiert statt selbstorientiert ist.

b) Qualitäten: Mehr über das Gesamtbild als über die Selbstzufriedenheit nachdenken. Das ist der entscheidende Punkt. Alle anderen Eigenschaften (wie Zuverlässigkeit, konstruktive Kommunikation) stammen von dieser

c) So verbessern Sie sich : Versuchen Sie zu qualifizieren, wie Sie tagsüber mit Ihrem Team interagieren, definieren Sie gute und schlechte Punkte und achten Sie bei den nächsten Besprechungen auf sie. Versuchen Sie auch, Teamentscheidungen aus verschiedenen Blickwinkeln zu betrachten. Versetzen Sie sich in die Rolle des anderen und überlegen Sie, wie Sie die Arbeit anderer beeinflussen können.

EL Yusubov
quelle
0

Zunächst einmal herzlichen Glückwunsch zu dieser Art von Person, die es zu mögen scheint, wirklich zu programmieren. Die Programmierung ist jedoch nicht der Anfang und das Ende der Bereitstellung nützlicher Systeme. Sie werden eine Herausforderung vor sich haben, und es liegt an Ihnen, ob Sie wieder zu Hobbyprogrammen zurückkehren oder eine Karriere antreten, in der Sie das tun können, was Sie lieben, und dafür bezahlt werden.

Sie haben den Nachteil, dass Sie keine Ausbildung in der Erstellung von Software haben. In dieser Ausbildung werden verschiedene Dinge gelehrt (nicht nur das Programmieren), die für CS-Absolventen und erfahrene Softwareentwickler selbstverständlich sind. Nicht, dass es am Arbeitsplatz häufig vorkommt (obwohl es bei mir einmal vorkam), aber NP-hard ist ein Beispiel für einen Begriff, den sie vielleicht verstehen und den Sie vielleicht nicht. Wahrscheinlich fehlt Ihnen der Hintergrund für die formale Theorie der Berechnung, aber das ist in Ordnung, solange Sie bereit sind, etwas darüber zu lernen. Vielleicht ein Master in CS in Ihrer Zukunft? Es hört sich so an, als ob ein Teil Ihres Codes in dem Sinne idiomatisch wäre, dass Sie einen Programmierstil haben, der Ihnen klar erscheint, anderen jedoch nicht. Achten Sie bei Code-Reviews darauf und nehmen Sie Kritik an und lernen Sie. Dies wird Arbeit in Anspruch nehmen, und Sie können frustriert werden,

Was Sie für Ihre haben, ist von unschätzbarem Wert. Sie scheinen wirklich Spaß am Programmieren zu haben. Ich denke, Sie werden auch die anderen Aspekte der Entwicklung von Systemen, wie Design, Architektur, Testen, Optimierung usw., genießen. Die Programmierung ist ein Teil des Puzzles und Sie müssen andere Fähigkeiten erlernen, um ein Softwareentwickler zu sein. Abgesehen von den Hackathons beinhaltet ein Großteil des Geschäfts Kommunikation, voneinander lernen, zuhören und planen. Ich habe mit vielen Leuten zusammengearbeitet, die CS-Absolventen sind und lieber Software entwickeln als Autos zu verkaufen oder Häuser zu streichen, hatte aber keine wirkliche Liebe dafür.

ipaul
quelle