Programuję (obsesyjnie) od 12 roku życia. Mam dość dużą wiedzę na temat różnych języków, od asemblera, przez C ++, aż po Javascript, a także Haskell, Lisp i Qi. Ale wszystkie moje projekty zostały wykonane przeze mnie.
Uzyskałem dyplom inżynierii chemicznej, a nie CS lub inżynierii komputerowej, ale po raz pierwszy tej jesieni będę pracować nad dużym projektem programistycznym z innymi ludźmi i nie mam pojęcia, jak się przygotować. Korzystam z systemu Windows przez całe życie, ale ten projekt będzie bardzo uniksowy, więc niedawno kupiłem komputer Mac, mając nadzieję na zapoznanie się ze środowiskiem.
Miałem szczęście uczestniczyć w hackathonie z kilkoma przyjaciółmi w ubiegłym roku - z obu kierunków CS - i co ciekawe, wygraliśmy. Ale zdałem sobie sprawę, że pracując z nimi, ich przepływ pracy był bardzo różny od mojego. Użyli Git do kontroli wersji. Nigdy tego nie używałem, ale od tego czasu dowiedziałem się o tym wszystkiego. Użyli również wielu frameworków i bibliotek. Musiałem się dowiedzieć, czym Rails był z dnia na dzień podczas hackatonu (z drugiej strony nie wiedzieli, co to jest leksykalne określenie zakresu lub zamknięcie). Cały nasz kod działał dobrze, ale nie rozumieli mojego, a ja nie rozumiałem ich.
Słyszę odniesienia do rzeczy, które robią prawdziwi programiści na co dzień - testy jednostkowe, recenzje kodu, ale mam tylko niejasne pojęcie o tym, co to jest. Zwykle nie mam wielu błędów w moich małych projektach, więc nigdy nie potrzebowałem systemu śledzenia błędów ani testów dla nich.
A ostatnią rzeczą jest to, że dużo czasu zajmuje mi zrozumienie kodu innych ludzi. Zmienne konwencje nazewnictwa (które różnią się w zależności od każdego nowego języka) są trudne (__mzkwpSomRidicAbbrev) i uważam, że luźne sprzęganie jest trudne. Nie oznacza to, że nie luźno łączę różne rzeczy - myślę, że jestem w tym całkiem dobry do własnej pracy, ale kiedy pobieram coś takiego jak jądro Linuksa lub kod źródłowy Chromium, żeby na to spojrzeć, spędzam godziny próbując aby dowiedzieć się, w jaki sposób łączą się te wszystkie dziwnie nazwane katalogi i pliki. Grzechem programistycznym jest odkrywanie koła na nowo, ale często uważam, że szybsze jest samodzielne napisanie tej funkcji niż spędzanie godzin na analizie biblioteki.
Oczywiście ludzie, którzy zarabiają na życie, nie mają tych problemów i sam muszę do tego dojść.
Pytanie: Jakie kroki mogę podjąć, aby rozpocząć „integrację” ze wszystkimi innymi?
Dzięki!
Odpowiedzi:
Myślę, że jesteś trochę zaniepokojony i podekscytowany pracą w grupie.
Nikt z nas nie nauczył się pracować w grupie lub w zespole z książek ani nie otrzymał żadnych kroków dla dzieci ani „Poradnika dla manekinów w pracy w zespołach”.
Po prostu uczymy się pracy z grupami, pracując w grupach.
Wszystko, co słyszałeś o profesjonalnych programistach, będzie stopniowo układać się podczas pracy w zespole. Dowiesz się o nich wszystkich, takich jak kontrola wersji, testy jednostkowe itp.
Dla mnie najważniejsze jest:
Zostań częścią zespołu.
źródło
Wybiorę niektóre z twoich zdań i przedstawię kilka ogólnych uwag:
...
...
Myślę, że najważniejszą rzeczą, której musisz się nauczyć, jest:
Dla danego standardu zdolności programistycznych zespół
n
programistów wykonuje mniej niżn
razy pracę, którą jeden z programistów mógłby wykonać sam - ale nadal wykonują więcej niż jakakolwiek jedna osoba .Powód jest prosty: pracując z innymi ludźmi, musisz poświęcić trochę czasu na wymianę informacji z tymi innymi ludźmi; podczas gdy pracując samemu, wymiana informacji odbywa się w twojej głowie. Co oczywiście jest szybsze.
Inną ważną rzeczą jest:
Niektórzy z twoich współpracowników będą mniej zdolni od ciebie, z pewnością w niektórych umiejętnościach; niektórzy będą nawet mniej zdolni od ciebie we wszystkich umiejętnościach
Mając na uwadze te dwa pomysły, wszystko, co cytowałem powyżej, ma sens. Wiele osób nie „zamyka się”. Testowanie i przeglądy kodu mają zapewnić jakość i zmniejszyć ryzyko, gdy kod zostanie dostarczony przez grupę osób o różnych umiejętnościach. Śledzenie błędów polega na tym, że gdy produkujesz wystarczająco duże systemy, błędy są nieuniknione. Niekończące się biblioteki z ich konwencjami są dlatego, że bez konwencji jest po prostu zbyt dużo kodu, aby nauczyć się go lub pisać od nowa za każdym razem, gdy jest potrzebny.
Naprawdę uważam, że jedynym sposobem na nauczenie się pracy w zespole jest faktyczne wykonanie pracy; ale mam nadzieję, że powyższe pomoże ci przygotować się mentalnie. Powodzenia!
źródło
Najbardziej efektywnym sposobem jest dołączenie do zespołu.
Dołączenie do zespołu może wydawać się trudne, ponieważ rozumiem, że nie jesteś jeszcze częścią zespołu, jak wielu studentów i wiele osób, których zadaniem jest praca bez innych programistów w pobliżu.
Poleciłbym ci wziąć udział w projekcie open source, który jest bardzo aktywny i sprzyja częstej komunikacji na nowoczesnych kanałach typu open-to-all (tracker problemów, lista mailingowa, wiki itp.). Otwarta komunikacja jest ważna, ponieważ prawdopodobnie zaczniesz od obserwowania interakcji innych osób, więc unikaj projektów, które opierają się na e-mailach między głównymi programistami lub niezarchiwizowanym IRC.
Wolę projekt, który wydaje się przyjemny, z kilkoma dość częstymi współpracownikami , niż projekt z 1 osobą, która robi wszystko. Preferuj także projekty, w których każdy może dotykać wszystkiego (zamiast każdego dewelopera z wyznaczonym obszarem), ponieważ jest to bardziej zabawne i oferuje więcej możliwości komunikacji.
Wtyczka bezwstydny: jesteś bardzo mile widziane tutaj !
źródło
Nie powtórzę tego, co wszyscy już powiedzieli na temat efektu
"just do it"
, ale dodam jeszcze jeden punkt, o którym nie wspomniałem: dobry menedżer naprawdę pomoże ci zintegrować się z zespołem.Chociaż możesz mieć wszystkie odpowiednie rzeczy na temat programowania w części pracy, możesz stracić niektóre z bardziej osobistych i związanych z rozwojem oprogramowania rzeczy. Dobry menadżer poprowadzi cię przez trening drużynowy (zarówno w zakresie umiejętności miękkich, jak i twardych), aby pomóc ci żelować, a także, mam nadzieję, powie ci, czy zrobiłeś lub zrobiłeś coś, co jest sprzeczne z tymi praktykami; ponieważ nie możesz naprawić czegoś, o czym nie wiesz, że jest zepsute.
źródło
Kolejną wskazówką, którą chciałbym ci dać, jest to, że nie ma dwóch takich samych zespołów i że nawet istniejący zespół zmieni się, gdy dołączy do niego jedna lub więcej osób.
Zespół powstaje z interakcji osób, które się poznają i starają się zrozumieć, jak współpracować, dopóki nie znajdą wspólnej drogi (patrz np . Etapy rozwoju grupy Tuckmana ).
Dlatego radzę nie szukać teraz odpowiedzi na pytania, ale zobaczyć, co się stanie, kiedy zaczniesz pracę w nowym zespole. Niektóre z twoich problemów mogą zostać uznane przez twoich współpracowników za nieistotne, inne zostaną uznane za istotne, a ty będziesz mieć możliwość ich wspólnego przedyskutowania, a nawet promowania własnego poglądu na dany temat. I na koniec prawdopodobnie poradzisz sobie z aspektami, o których nawet nie myślałeś.
Zgadzam się z ElYusubovem, że potrzebujesz dużo cierpliwości i daj sobie i nowym kolegom trochę zespołu, aby nauczył się współpracować, aż staniesz się zespołem. Jeśli ćwiczysz sport zespołowy, powinieneś już tego doświadczyć.
Ostatni komentarz na temat spędzania dużo czasu na zrozumieniu kodu innych osób. Praca w zespole oznacza, że będziesz pracował nad kodem innej osoby, a inni programiści będą pracować nad twoim kodem. Czasami kod jest zbyt skomplikowany, aby można go było przepisać od nowa. Typowym rozwiązaniem jest poproszenie oryginalnego programisty o przejrzenie zmian, abyś miał większą pewność, że nic nie łamiesz ich kodu.
Był to dla mnie duży skok w przejściu od programisty solowego do programisty zespołowego: pracujesz nad kodem, który tylko częściowo rozumiesz i musisz się do niego przyzwyczaić. Wymaga to dużo większej komunikacji z kolegami, dużo szacunku (tak, mają dziwne konwencje nazewnictwa dla swoich zmiennych, więc co?) I wzajemnego zaufania (nawet jeśli mają inny styl kodowania, wiem, że dostarczają działający kod) .
źródło
Bycie dobrym członkiem zespołu oznacza komunikowanie się bez strachu, ufanie kolegom i pokonywanie przeszkód w projekcie jako zespół i
deliver project as a team.
To wymaga czasu , cierpliwości i wymaga nauki , aby czuć się komfortowo i pewnie jako programista. Prawdą jest również, że NIE każdy programista jest dobrym graczem zespołowym , a gracze zespołowi dzielą się swoim sukcesem i uczą się na błędach.
Pomocne byłoby wyróżnienie niektórych postaci dobrego członka zespołu .
a) Dobry członek zespołu to osoba zorientowana na cel, a nie na siebie.
b) Cechy: myślenie bardziej o dużym obrazie niż o samozadowoleniu. To jest kluczowy punkt. Wszystkie inne cechy (takie jak niezawodność, konstruktywna komunikacja) dziedziczą po tym
c) Jak poprawić: Postaraj się określić, w jaki sposób współpracujesz ze swoim zespołem w ciągu dnia, określ dobre i złe punkty, zwróć na nie uwagę podczas następnych spotkań. Spróbuj także spojrzeć na decyzje zespołu pod wieloma kątami. Postaw się na rolach drugiej osoby, zastanów się, jak możesz wpłynąć na pracę innych.
źródło
Po pierwsze, gratuluję bycia osobą, która wydaje się naprawdę lubić programować. Jednak programowanie nie jest początkiem i końcem dostarczania użytecznych systemów. Będziesz miał przed sobą wyzwanie i to od Ciebie zależeć będzie, czy wrócisz do programów hobbystycznych, czy do kariery, w której możesz robić to, co kochasz i otrzymywać za to wynagrodzenie.
Jesteś w niekorzystnej sytuacji, ponieważ nie masz wykształcenia w zakresie tworzenia oprogramowania. W tej edukacji naucza się kilku rzeczy (nie tylko programowania), że dla absolwentów CS i doświadczonych programistów będzie to druga natura. Nie chodzi o to, że często pojawia się w miejscu pracy (chociaż kiedyś tak się stało), ale NP-hard jest przykładem terminu, który mogą zrozumieć, a ty nie. Prawdopodobnie brakuje ci wiedzy teoretycznej na temat obliczeń, ale jest to w porządku, o ile chcesz się o tym dowiedzieć. Może w przyszłości jesteś mistrzem CS? Wygląda na to, że część twojego kodu może być idiomatyczna, w tym sensie, że masz styl programowania, który wydaje ci się jasny, ale nie dla innych. Uważaj w recenzjach kodu i bądź gotów zaakceptować krytykę i uczyć się. To wymaga pracy i możesz się sfrustrować,
To, co wybierasz, jest bezcenne. Naprawdę lubisz programować. Myślę, że spodoba ci się również inne aspekty tworzenia systemów, takie jak projektowanie, architektura, testowanie, optymalizacja itp. Programowanie jest jedną z części układanki i będziesz musiał nauczyć się innych umiejętności, aby zostać programistą. Oprócz hackathonów, duża część biznesu wymaga komunikacji, uczenia się od siebie nawzajem, słuchania i planowania. Pracowałem z wieloma osobami, które są absolwentami CS i lubiły tworzyć oprogramowanie bardziej niż sprzedawać samochody lub malować domy, ale nie miałem do niego prawdziwej miłości.
źródło