Jak Mentor Junior Developer

99

Ten tytuł jest trochę obszerny, ale zanim będę mógł poprawnie zadać pytanie, być może muszę podać nieco tła.

Wiem, że podobne pytania zostały już tutaj zadane . Ale w moim przypadku nie pytam, czy powinienem kogoś mentorować, czy też dobrze nadaje się do bycia programistą. To nie jest moje miejsce do osądzania. Nie zapytano mnie wprost, ale oczywiste jest, że ja i inni starsi programiści powinni mentorować nowych programistów, którzy zaczynają tutaj. Nie mam z tym żadnego problemu, a w wielu przypadkach daje mi to nowe spojrzenie na sprawy i kończę proces uczenia się. Pamiętam też, jak korzystne było na początku mojej kariery, gdy ktoś poświęcił trochę czasu, aby mnie czegoś nauczyć.

Kiedy mówię „nowy programista”, mogą być w dowolnym miejscu, od świeżo po studiach po rok lub dwa doświadczenia.

Niedawno zaczęliśmy tutaj ludzie, którzy wydają się mieć podejście do programowania / rozwoju, które różni się od mojego i trudno mi się pogodzić; wydobywają tylko tyle informacji, aby wykonać zadanie, ale tak naprawdę nie uczą się z niego. Czuję, że ciągle powtarzam te same problemy z nimi. Rozumiem, że część tego może być sprawą osobowości, ale czuję, że moim obowiązkiem jest zrobić wszystko, co w mojej mocy, i wypchnąć je z gniazda, gdy są pod moim skrzydłem, że tak powiem.

Jak mogę przekazać wystarczającą ilość informacji, aby się uczyli, ale nie dawali tyle, by rozwiązać za nich problem?

A może:

Jaka jest odpowiednia odpowiedź na pytania, które zostały zaprojektowane tak, aby obrać ścieżkę najmniejszego oporu i, w gruncie rzeczy, zmusić je do nauki zamiast łatwego wyjścia?

Te pytania są prawdopodobnie bardziej ogólnymi pytaniami dydaktycznymi i nie mają tak wiele wspólnego z programowaniem.

Uwaga: nie mam wpływu na zadania, nad którymi pracują. Zarządzanie opóźnia zadanie i może to być wszystko od bardzo prostej naprawy błędu do samodzielnego uruchomienia całej aplikacji. Chociaż nie jest to w żaden sposób idealne i oczywiście stanowi własną wyzwanie, wydaje mi się, że najlepiej zostawić ten temat na inne pytanie. Więc najlepsze, co mogę zrobić, to pomóc im rozwiązać dany problem i spróbować pomóc im rozbić go na prostsze problemy, a także sprawdzić ich dzienniki zatwierdzeń i wskazać błędy, które popełnili.

Moimi głównymi celami są:

  • Pomóż im i daj im narzędzia, których potrzebują, aby zacząć bardziej samodzielne.
  • Kieruj je we właściwym kierunku i wcześnie przełam złe nawyki rozwojowe.
  • Zmniejsz ilość czasu, który spędzam z nimi (opisany powyżej typ osobowości zwykle wymaga dużo więcej czasu jeden na jeden i nie radzi sobie dobrze w przypadku wiadomości błyskawicznych lub poczty e-mail. Chociaż ogólnie jest to w porządku, nie zawsze mogę zatrzymać to, co ja ” pracuję nad tym, przerywam krok i pomagam w debugowaniu błędu natychmiastowo zauważam; mam własne projekty, które należy wykonać).
Josh Johnson
źródło
1
możesz tylko pomóc komuś stać się tym, kim on sam chce się stać. Prowadź tych, którzy chcą być prowadzeni.
Darknight
14
Masz rację, że jest dużo o tym, że nie jest specyficzna dla rozwoju oprogramowania, ale to jest o bycie dobrego nauczyciela (nawet jeśli nie jest to podstawowa praca). W kontekście nauczania napisałem mały artykuł w Chronicle of Higher Ed, który mówi, że sukces może się zdarzyć, gdy grasz trzy role: będąc dobrym wzorem do naśladowania, działając jako wsparcie techniczne (dopóki nie wymyślą, jak zadawać dobre pytania i gdzie ) i bądź cheerleaderką (cierpliwą i wspierającą).
jcmeloni,
1
Tutaj jest mnóstwo świetnych opinii na ten temat: programmers.stackexchange.com/questions/137708/…
KodeKreachor
Dlaczego kupujesz retorykę „mentorską”? Użyj słowa „szkolenie”: opisujesz „szkolenie do pracy” , to nie są rzeczy filozoficzne, twój sposób patrzenia na życie wszechświata i wszystko, tak właśnie powinno być w twojej firmie. (i twoja firma powinna pomyśleć trochę więcej o tym, aby dać im oficjalną)
ZJR
3
I ... upewnij się, że ich sześcian znajduje się w połowie drogi od twojej kostki do toalety ...
vrdhn

Odpowiedzi:

121

Kiedyś tutaj było pytanie, które zawierało tego rodzaju informacje, a najbardziej przykuł mnie fakt, że nie dotykałem ich klawiatury

Krótko mówiąc, powiedz młodszemu, jak osiągnąć to, co próbują zrobić, ale nie rób tego dla nich.

Oprócz tego oto kilka innych wskazówek:

  • Zachęcaj Google (lub dowolne inne narzędzie wyszukiwania). Jeśli wiesz, że odpowiedź można łatwo znaleźć w Internecie, powiedz im, by sprawdzili, zamiast podawać odpowiedź. Ostatecznie chcesz ich nauczyć, jak się uczyć , a nie uzależniać ich od ciebie.
  • Przygotuj się na odpowiedzi na pytania. Jeśli kiedykolwiek nie jesteś dostępny lub nie chcesz, aby ci przeszkadzano, powiedz im, że powinni zadawać pytania do określonego czasu.
  • Regularnie przeglądaj kod, aby powiedzieć im, co robią dobrze / źle. Wykorzystaj to jako okazję do wskazania najlepszych praktyk
  • Zacznij wcześnie od najlepszych praktyk. Lepiej poświęcić więcej czasu na nauczenie ich we właściwy sposób, niż później spróbować zmienić ich metody.
  • Zacznij je wcześnie od planowania / dokumentowania tego, co zamierzają robić, zamiast pozwolić im zacząć od pisania kodu.
  • Bądź otwarty na naukę od nich. Prawdopodobnie spędzają więcej czasu niż ty się uczysz i możliwe jest, że uczą się czegoś, o czym nie wiedziałeś.
  • Pomóż im uczyć się na błędach. Będą błędy, więc upewnij się, że pokazujesz im, że błędy są częścią uczenia się i że powinny wykorzystać je jako okazję do nauki.

  • (Z RuneFS poniżej) Zamiast mówić im, jak coś zrobić, spróbuj pomóc im to samemu rozwiązać. Pomoże to poprawić ich zdolność do logicznego rozwiązywania problemu i zwiększy ich zdolność uczenia się

  • (Z RuneFS poniżej) Zamiast mówić im, co zrobili źle, powiedz im, w jaki sposób mogą to poprawić. Pamiętaj, aby podać, dlaczego Twoja droga jest lepsza niż ich. Zwiększy to ich pewność siebie, zamiast go osłabić. Oczywiście, jeśli nie słuchają ciebie, nie bój się po prostu powiedzieć im, aby zrobili to we właściwy sposób :)
Rachel
źródło
68
+1 za nie dotykaj klawiatury. Częściowo dlatego, że uczenie ich, jak coś zrobić, jest ważniejsze niż robienie tego w sytuacji mentorskiej, ale tak naprawdę dlatego, że absolutnie nie znoszę ludzi kradnących klawiaturę.
fire.eagle
3
Wiem, że już zostało powiedziane, ale „nie dotykaj klawiatury”. To BARDZO dobry punkt
Tom Squires
3
Uderza mnie to, że wiele z nich po prostu uczy młodszego programistę zadawania mądrzejszych pytań. Świetne źródło informacji na ten temat: catb.org/esr/faqs/smart-questions.html
TALlama
4
Chociaż zgadzam się z większością twoich argumentów, są dwie części, których bardzo się staram uczyć trenerów i innych ludzi odpowiedzialnych za rozwój innych ludzi. Nigdy nie mów im, jak coś zrobić. Pomóż im to zrozumieć i nigdy nie mów im, co zrobili źle, powiedz im, jak mogą poprawić. Pierwsze, ponieważ zwiększa ich naukę, drugie, ponieważ zamiast osłabiać pewność siebie, może je zwiększyć
Rune FS
1
@Jae: radzi mentorowi, aby nie dotykał klawiatury juniora.
piątek
21

Mam około 4-letnie doświadczenie i mogę powiedzieć wam z mojego doświadczenia jako młodszego programisty, czego chciałbym mieć pod względem mentoringu. Wygląda na to, że tak naprawdę opisujesz typ programisty, jakim byłem, kiedy zaczynałem :)

Zasadniczo chcesz zachęcić ich do nauki. Niektórzy myślą, że po ukończeniu college'u nie muszą już czytać książek ani się uczyć. Takie podejście może prowadzić do szukania skrótów i po prostu „robienia tego”.
Zdobądź je „The Pragmatic Programmer” i poproś, aby je przeczytali. Ta książka pomoże im zrozumieć, że programowanie to rzemiosło / kariera, a nie tylko praca. Polecaj książki do przeczytania co około kwartał. Pomóż im zbudować „portfolio wiedzy” (jak wspomniano w Pragmatic Programmer). Bardzo polecam Safari Books Online, która zawiera wiele książek o CS / Programowanie.

Dzięki portfolio wiedzy będą wiedzieć, gdzie szukać, jeśli mają problemy. Naucz ich, gdzie szukać. Sam niedawno odkryłem przydatność StackOverflow (i jak wiecie, lepiej tutaj szukać niż tylko Google).

Wygląda na to, że nie możesz spędzać z nimi dużo czasu, ale programowanie w parach jest bardzo pomocne. Jeśli nie możesz tego zrobić, przynajmniej wykonaj recenzje kodu za pomocą CodeCollaborator lub innego podobnego narzędzia. Nie zajmują tyle czasu, ile myślisz.

Testy jednostkowe są również bardzo ważne. Mogą szybko ujawnić złe praktyki programistyczne, zwłaszcza jeśli połączysz to z ciągłą integracją.

Atif
źródło
10

Zadawaj wiodące pytania z powrotem, aby skierować go na odpowiedzi, a nie po prostu powiedzieć mu (cóż, możesz powiedzieć mu kilka podstawowych rzeczy, takich jak nazwa serwera i baza danych przechowująca informacje). Pokaż mu, jak znaleźć odpowiedzi.

I nigdy nie przepisuj kodu, gdy jest nieprawidłowy, powiedz mu, co jest nie tak, i oczekuj, że go naprawi. Dostajesz to, czego oczekujesz. Nikomu nie pomagasz, uzależniając go od ciebie.

Przeglądy kodu są również krytyczne. A jeśli sparujesz program, pozwól mu często mieć klawiaturę. Nawet jeśli mówisz mu, co pisać, nauczy się, pisząc więcej, że nauczy się siedzieć obok ciebie podczas programowania.

Weź kilka przykładów z oprogramowania, które są typowe dla struktury aplikacji i przejrzyj je wraz z nim linia po linii, upewniając się, że rozumie, dlaczego każda linia jest potrzebna i co robi. Twoim zadaniem jest upewnić się, że zna standardy kodowania i sposób organizacji kodu oraz dlaczego (jako firma) postępujesz tak, jak Ty.

Jeśli ma inny sposób zasugerowania, słuchaj uważnie. Po pierwsze, może mieć rację. Po drugie, słuchanie powie ci, gdzie jest jego słabość rozumienia, jeśli to, co sugeruje, nie jest praktyczne. Ponadto ludzie bardziej cię szanują, jeśli ich słuchasz. Kiedy się myli, wróć do wiodących pytań, aby przekonać się, dlaczego ten pomysł jest zły. JEŻELI jest nawet bliski racji, czasami idź z jego pomysłami, nic nie jest bardziej zniechęcające niż zawsze, gdy mówi się, że twoje pomysły są bezwartościowe.

Zadawaj pytania dotyczące jego pochodzenia. Może wiedzieć pewne rzeczy, z którymi nie miałeś okazji pracować. Jeśli tak, pojawi się możliwość ich wykorzystania, zadaj mu pytania dotyczące jego wiedzy.

Jeśli twoja aplikacja jest w ogóle stara, prawdopodobnie ma jakieś podstępne „gotchas”, niż ktoś nowy nie będzie miał o czym wiedzieć. Więc kiedy zaczyna pracować w obszarach, w których masz jedną lub więcej takich gotchas, możesz mu powiedzieć o nich, gdy zaczyna kodować, a potem sprawdź, czy nie wpadł w gotcha podczas kodowania.

Wreszcie, zyskujesz szacunek częściowo przez okazywanie szacunku. Traktuj wszystkich swoich mentorów z szacunkiem. Nie zmuszaj ich, by czuli się poniżeni lub głupi. Będą cię lepiej słuchać, jeśli będziesz traktować ich z szacunkiem.

HLGEM
źródło
1
Prawie identyczna z odpowiedzią, którą sam bym sobie dał, ale dodam też: pozwól swoim młodym popełniaj błędy (daj im szansę na wyrównanie ich), ponieważ błędy zapewniają najlepszą okazję do nauki. Porażka wywołuje bodziec emocjonalny, który z większym prawdopodobieństwem wywołuje skojarzenie pamięci, które zachęca do nauki, i miejmy nadzieję, że juniorzy będą zachęcani przez to, że nie zadadzą więcej pytań. Często mówię moim juniorom, że na początku można próbować, ale nie powiodą się, jeśli próbują również uczyć się na swoich błędach, a ja używam testów i recenzji kodu, aby kierować ich wysiłkami w nauce.
S.Robins,
Zadawanie wiodących pytań jest jedną z najlepszych technik, które znalazłem, aby przenieść kogoś na inny poziom dojrzałości. Twoim głównym celem nie jest doprowadzenie ich do właściwej odpowiedzi, ale doprowadzenie ich do miejsca, w którym będą mogli rozpoznać właściwą odpowiedź, gdy ją znajdą (i jako taki, będą w stanie odrzucić nieprawidłowe odpowiedzi po drodze.)
konopie
1
@ S.Robins, odkryłem, że pomaga również wskazać, że znasz te rzeczy z powodu błędów, które popełniłeś.
HLGEM
8
  • Zawsze upewniam się, że programista chce mojej pomocy, i staram się nie wchodzić głębiej w wyjaśnienia, niż ich cierpliwość może znieść. Jak wszyscy, uwielbiam dźwięk własnego głosu!
  • Traktuję ich jak równych i upewniam się, że pytam o ich opinie tak często, jak się wydaje.
  • Złap ich, gdy robią coś dobrze i daj im znać.
  • Zawsze uczę się czegoś, kiedy robię to dobrze - o swoim rzemiośle, o moim zawodzie, o deweloperze i o nauczaniu.
  • Pierwsza lekcja zawsze jest taka: kiedy wiedzieć, że próbujesz tego zbyt długo sam. Wiele osób jest dumnych ze znalezienia własnych odpowiedzi i spędza cenny czas w kółko.
Tom McNamee
źródło
Re: „Złap ich, gdy robią coś dobrze”: Nie jestem pewien, czy się z tym zgadzam, ponieważ implikuje to, że zawsze patrzysz przez ramię, a przynajmniej regularnie je sprawdzasz. Mogą istnieć pewne relacje, w których jest to konieczne, ale nie sądzę, że relacja mentor / protegowany jest jedną z nich; i jest to sprzeczne z twoją doskonałą radą, by „traktować ich jak równych”.
ruakh
Ruak, robisz doskonały punkt. Nauczono mnie tego przez mojego kierownika, kiedy sam zostałem menedżerem (był moim mentorem, ale pochodził z Brooklynu ...) i do tej pory nigdy nie kwestionowałem tego sformułowania. Bardziej odpowiednio: „Zwróć uwagę na coś, co robią”. Prowadzę z tym. Kiedy nieuchronny problem „off by 1” pojawia się w przypadku programistów C, mogę zauważyć, że jej konstrukcja pętli była zwarta i dobrze skomentowana, a następnie poprosić ją, aby przeprowadziła mnie przez logikę. Dzięki.
Thomas McNamee,
OK, tak, jestem na pokładzie. +1. :-)
ruakh,
7

Jestem młodszym programistą i myślę, że mój mentor radzi sobie z tymi rzeczami bardzo dobrze. Generalnie powie mi kilka sposobów, aby coś zrobić, ale nie, jak to zrobić. Potem siedziałem tam i wypróbowywałem obie możliwości i decydowałem, które z nich jest najczystszym rozwiązaniem problemu.

Ponadto, jeśli kiedykolwiek robił coś, co może być dla mnie przydatne, zadzwoniłby do mnie po prostu, aby opowiedzieć, co robił i dlaczego.

Spowodowało to, że spędziłem ze mną niewielką ilość czasu, co w gruncie rzeczy oznaczało, że musiałem uczyć się właściwych odpowiedzi i jak wdrażać różne rzeczy. Oczywiście, jeśli kiedykolwiek utknęłbym, byłby tam, aby pomóc, ale to było kilka razy. Po zaledwie 5 miesiącach współpracy z nim prawdopodobnie poznałem więcej rzeczy niż cały kurs uniwersytecki.

Ważną rzeczą do zapamiętania jest to, że jestem tylko osobą i to działało dla mnie dobrze ze względu na to, jaki jestem i jaki on jest. Chodzi o znalezienie odpowiedniej struktury, która pomoże wam obojgu.

ediblecode
źródło
5
+1 Nauczyłem się więcej o pracy, którą mogłem kiedykolwiek mieć na uniwersytecie, tylko dlatego, że ludzie poświęcili mi czas na nauczenie mnie.
James Khoury
7

W zależności od podanego zadania pokusiłbym się na kilka różnych podejść:

  • Zapytaj ich, co by potem spróbowali wykonać zadanie. To może dać wyobrażenie o tym, skąd od „Nie wiem, co robić” do „Cóż, spróbowałbym tego, ale ...” czy są pod względem własnego pomysłu, który może być przydatny na początku .

  • Rzuć okiem na to, co chcą zrobić, i podpowiedzi, aby odkryli problem. Jest to raczej niż odpowiedź „Po prostu wyjmij ten wiersz kodu”, sugerują, aby spojrzeli na to, co tam jest i czy to wszystko jest konieczne.

  • Jeśli pierwsze pary nie zamierzają działać, postaram się, aby postąpiły zgodnie z moimi wskazówkami, co zrobić, aby rozwiązać problem. Jest to kolejny krok w rozwoju, jeśli jeśli nie mają pojęcia, od czego zacząć, a wskazówki nie działają, to jest następny punkt.

  • Wreszcie, jeśli nic innego nie działa, wykonałbym za nich pracę, ale starałem się tego uniknąć tak bardzo, jak to możliwe, ponieważ w ten sposób powstają problemy, takie jak jedna osoba, która wie, że system jest tworzony, ponieważ ktoś może spojrzeć na odciążenie pracy na mnie za ten system, który chyba tak dobrze znam.

JB King
źródło
+1 Chciałem coś napisać, ale podsumowuje to w moim podejściu.
Jason Sebring
5

Jedną z rzeczy, które zrobiłem tutaj w mojej pracy, które uznałem za naprawdę przydatne, było utworzenie forum (tj. PHPbb) do wewnętrznych pytań i odpowiedzi oraz przestrzeganie zasady, że jeśli pytanie i / lub odpowiedź zajmie więcej niż 5 minut, powinno to być zapytał i odpowiedział za pośrednictwem forum. Korzyści:

  • Zmusza młodszego programistę do wyraźnego sformułowania pytania, co ułatwia udzielenie odpowiedzi, nie wspominając już o czasach, w których sam znalazł odpowiedź, po prostu zastanawiając się trochę nad tym
  • Pozwala to uniknąć powielania pytań, ponieważ młodszy programista powinien zacząć od wyszukiwania podobnych pytań już zadanych
  • Pomaga w budowaniu bazy wiedzy, która będzie przydatna dla przyszłych pracowników i dokumentowaniu wielu drobiazgów, które mogą zostać utracone w czasie.
Fabio Ceconello
źródło
4

Mam zamiar przełamać ten trend i sugeruję, abyś nie zachęcał młodszych programistów do samodzielnego uczenia się, jak znaleźć odpowiedzi. To wygląda jak gra „Mam, ale nie dam ci tego”.

Zamiast tego połącz się z nimi w poszukiwaniu odpowiedzi. I tak przejdziesz do google, więc rób to siedząc z nimi. Przekonają się, że to jest sposób na znalezienie odpowiedzi.

Jeśli będziesz z nimi ściśle współpracować, wybiorą, jak prawidłowo używać IDE; Jak znormalizować bazę danych; jak WYSUSIĆ swój kod ... cokolwiek wiesz, co warto wiedzieć.

Klucze są następujące: jeden - udostępnić się im, aby mogli zobaczyć, jak pracujesz. I dwa - powiedzieć głośno, dlaczego robisz to, co robisz. „Ten kod się powtarza, więc go przeredaguję”, „nie” użyj metody wyodrębniania w tych trzech wierszach ”.

Sean McMillan
źródło
Nie wierzę, że przełamujesz ten trend. To dobra wskazówka; z nimi pracować i pokazać im, jak Ci pójdzie o rozwiązanie problemu (choć może trzeba by udawać, że nie wiem już odpowiedź [Nie ukrywać go], aby pokazać proces znalezienia go).
Josh Johnson
Żeby było jasne, nie mam zamiaru ukrywać wiedzy. Ale stało się jasne, że to, co wiem, jest wykorzystywane (świadomie lub nieświadomie). I nie mówię o jakiejś głęboko ukrytej jaskini technologii, której używamy; Mówię o różnicy między prymitywem a obiektem, zmienną instancji i lokalną, lub o komunikacie o błędzie, który mówi dokładnie, jaki jest błąd i gdzie go szukać. (dla porównania, mój obecny uczeń ma 5-letnie doświadczenie zawodowe; nie sądzę, że jestem nierozsądny.)
Josh Johnson
4

Tylko raz musiałem trenować młodszego programistę. Miało to pomóc w utrzymaniu systemu, który zbudowałem. Celem było przekazanie mu całego systemu.

Po krótkim okresie, w którym mnie ocieniał, rzuciłem go w ogień. Przydzielę mu sprawy i oczekuję, że zostaną zakończone. Gdyby miał kłopoty, kazałbym mu wyjaśnić, na czym polegał problem i gdzie spojrzał. Następnie doradziłbym mu najogólniej, gdzie szukać dalej. (Która aplikacja, może moduł, na który należy spojrzeć itp.). Nigdy nie zostawiłbym go szalonego, ale też nigdy nie wykonałbym żadnej pracy. Podaj tylko kierunek. Gdyby nadal miał kłopoty, wzruszyłem ramionami i powiedziałem „Rozpocznij śledzenie kodu”. I za każdym razem, gdy to mówiłem, kulił się - wiedząc, że czeka go żmudne ćwiczenie. Doprowadziło go to do szału, ponieważ oboje wiedzieliśmy, że prawdopodobnie uda mi się znaleźć problem w ciągu 10 minut, jeśli po prostu zejdę z tyłka i pomogę.

Wiele lat później przeszedł do większych rzeczy, a teraz trenuje własnych juniorów. Jego ulubioną historią jest to, jak zawsze mówiłem mu, aby „śledził kod”, i jak te ćwiczenia śledzenia kodu były kluczowe, aby uczynić go programistą, jakim jest dzisiaj.

Brett
źródło
3

Ilekroć zadają mi znane pytanie, które można rozwiązać za pomocą szybkiego wyszukiwania w Google, znajdę dokumentację lub odpowiedni artykuł i przekażę ją osobie zadającej pytanie.

Wiedza, gdzie szukać rzeczy, jest ważną umiejętnością, a czasem jest trudniejsza niż myślisz dla nowego programisty. Mogą nawet nie wiedzieć, czego szukają, i właśnie tam musisz im pomóc.

Gdy znajdą się w ich rękach, artykuły i dokumentacja zmuszą ich do przeczytania o rozwiązaniu zamiast pazurowania u innych programistów w celu uzyskania szybkiej odpowiedzi.

Spowoduje to następujące działania:

  • Uwalniając część doświadczonych programistów.
  • Zmuszanie nowego programisty do nauki.
  • Szczęście dla wszystkich.

Czasami musisz po prostu dać im twardą miłość, szczególnie jeśli nie wydają się tak, jakby chcieli się uczyć. Nie udzielaj im odpowiedzi, ale upewnij się, że skierowałeś je we właściwym kierunku.

BrandonV
źródło
3

Poleciłbym zacząć dawać części prawdziwych zadań, które masz, i zrobić wszystko, aby móc użyć jego kodu. Innymi słowy, trenuj go jako zastępcę dla siebie.

W ten sposób poświęcisz czas na pracę z juniorem, a on będzie mógł zobaczyć „prawdziwe życie”. Pracując nad prawdziwymi zadaniami i słuchając żywych informacji zwrotnych, będzie w stanie dość szybko przyspieszyć.

Vang
źródło
1

W przeszłości uczyłem ludzi różnych przedmiotów, a najbardziej uderzyło mnie to, że większość ludzi nie ma umiejętności rozwiązywania problemów . Oznacza to, że jeśli pokażesz im dokładne rozwiązanie, będą mogli użyć go później, jeśli rozpoznają lub powiedzą, że go potrzebują.

Ale bardzo niewiele jest takich sytuacji życiowych. O ile twoja praca nie jest „fabryką umysłową” polegającą na przyklejaniu widżetu A do widżetu B za pomocą narzędzia C, musisz mieć kilka elementów:

  • Przybornik umiejętności i narzędzi
  • Metoda rozwiązywania problemów

Na przykład spójrz na zamieszczoną przeze mnie odpowiedź . Obejmuje to metodę rozwiązywania problemów, której wiele osób nie ma . College nie nauczył tego nikogo w programie CompSci, albo już to wiedziałeś, albo sam to wymyśliłeś.

Gdy junior dev zrozumie, jak przejść do rozwiązywania problemów, potrzebuje zestawu narzędzi, aby to zrobić.

  • Debugger (College nigdy o tym nie wspominał)
  • Profile
  • Edytor tekstu
  • Shell (i powiązane narzędzia)
  • Zasoby (książki, Google, SO, strony)

Określ, czego brakuje młodszemu twórcy, a możesz pomóc im poprawić. Pamiętaj tylko, że niektórzy ludzie naprawdę nie są zainteresowani nauką rozwiązywania własnych problemów i po prostu chcą otrzymać rozwiązanie „oczywiste krok po kroku”. To nie są dobrzy programiści.

Mam nadzieję, że nie będziesz mieć żadnego z nich. Jeśli to zrobisz, zdaj sobie sprawę, że bez względu na to, ile czasu spędzasz, nie wszyscy sobie pomogą. Wymagałoby to wysiłku i łatwiej jest po prostu poprosić o zrobienie tego za nich. Jest podobny do problemu dobrobytu i wyjaśniony przez teorię ekonomii.

Oświecony własny interes mówi, że ludzie wezmą to , co uważają za najkorzystniejszą opcję w danej sytuacji. Zauważ, że właśnie to oglądają. Najważniejszą rzeczą jest dla mnie samowystarczalność i uczenie się. Więc robię rzeczy sam. Ale inni mogą zobaczyć, że po prostu muszą dostarczyć działający kod przed upływem terminu. Szukają więc najmniej kosztownej metody. Zapewniając im „gratisy”, potrzebują najmniejszego wysiłku, aby zrealizować swój cel. Dopóki nie usuniesz tej kuli, nie będą rosły.

Spencer Rathbun
źródło
1

Twoja organizacja, jak ją opisujesz, bardzo różni się od mojej. Jestem w kontakcie z pracą juniorów i uważam to za moją rolę do osądzania. Więc wiele jest innych.

W każdym razie chciałbym ci doradzić, aby często odwiedzać ich biurko w ciągu pierwszych dwóch tygodni, szczególnie. Coś jak trzy razy dziennie w pierwszym tygodniu, stopniowo maleje.

Wiadomość, którą próbuję wysłać w ten sposób, jest taka, że ​​zależy mi na ich wydajności. Upewniam się, że nie utknęły. Zapewniam, że przestrzegają zasad i nie wymyślają koła na nowo. Uczę ich, aby popełnili tak często, jak to możliwe. Naucz się, jak stopniowo się rozwijać i pomyśl o projektowaniu stopniowo.

Moim najgorszym koszmarem są programiści, którzy każdego dnia mówią ci, że potrzebują tylko jednego dnia, aby wykonać swoją funkcję. Po tygodniach opóźnienia otrzymujesz skomplikowany projekt, który od samego początku jest hakowany przez jego autora. Dodatkowe niepotrzebne funkcje buggy zostały wrzucone do miksu, aby zrekompensować opóźnienie i ponieważ były one darmowym efektem ubocznym projektu.

Uważam, że wielu programistów jest skłonnych do takiego podejścia. Jeśli pozostawiasz sobie zadanie samodzielne, naturalną reakcją jest próba udowodnienia, że ​​możesz to zrobić samodzielnie. Ale to zła odpowiedź. Jakość to praca zespołowa, a im szybciej się nauczą, tym lepiej.

jdv-Jan de Vaan
źródło
1

Pozostałe odpowiedzi są bardzo dobre, ale chciałem skomentować to jedno zdanie.

Ostatnio i w przeszłości mieliśmy tu ludzi, którzy wydają się mieć nastawienie do rozwoju / programowania, które jest inne niż moje i trudno mi się pogodzić; wydaje się, że wydobywają one wystarczającą ilość informacji, aby wykonać zadanie, ale tak naprawdę nie uczą się z nich.

Większość ludzi chce wiedzieć, jak coś zrobić. Takie podejście jest dobre na początku, gdy jesteś przytłoczony nauką nowych rzeczy i uczeniem się, jak wykonywać swoją pracę.

Rzadcy są ludzie, którzy chcą wiedzieć, dlaczego coś się dzieje. Są to ludzie, których chcą inteligentni menedżerowie, nawet jeśli czasami trudno nimi zarządzać.

Niektórzy kodują, aby dobrze zarabiać. Inni chętnie przyjmują pieniądze na kodowanie. O wiele przyjemniej jest pracować z ludźmi, którzy mają pasję do projektowania i kodowania. Niestety dla mnie było to dość rzadkie. Przynajmniej dopóki nie znalazłem Przepełnienia stosu.

Gilbert Le Blanc
źródło
1

Rzecz, na którą należy zwrócić uwagę, dla osób podekscytowanych perspektywą wykonania całego tego mentoringu dla młodszych programistów: upewnij się, że twoje kierownictwo rozumie, co się dzieje.

Nauczanie innych ludzi jest ogólnie ciężką pracą. Wymaga skupienia i koncentracji, planowania i wysiłku, a przede wszystkim wymaga czasu. Niezależnie od tego, jakie podejmiesz podejście, jeśli uczysz i mentorujesz w jakikolwiek poważny sposób, będzie to zjadało Twój czas.

  • Jeśli twoje kierownictwo zatrudnia mniej doświadczonych programistów, którzy oczekują, że wyżsi programiści podejmą obowiązki szkoleniowe, upewnij się, że jest to jednoznaczne. Dowiedz się, jakie będą ramy czasowe i upewnij się, że harmonogramy rozwoju odzwierciedlają czas i wysiłek poświęcony na szkolenie. Upewnij się, że kierownictwo ma jakieś plany dotyczące oceny sukcesu mentoringu w ustalonych terminach. (Oczywiście, jeśli zatrudniają programistów, którzy potrzebują nauczania i mentoringu, ale kierownictwo tego nie planuje, to oczywiście jest to poważny problem).

  • Nie każdy jest dobrym nauczycielem lub mentorem i nie każdy chce nim być. Nie chcę brzmieć chrupiąco lub gorzko; Bardzo lubię uczyć. Ale głupio jest oczekiwać, że wszyscy będą w tym dobrzy (pomimo własnych talentów), ani też nie możemy oczekiwać, że wszyscy będą zadowoleni z tego procesu (pamiętaj, że nie jest to łatwe). Ponadto, jeśli jesteś starszym programistą, który nie lubi mentoringu, lub jeśli naprawdę uważasz, że jesteś złym wyborem dla nauczyciela lub mentora, upewnij się, że kierownictwo rozumie, że plan obejmujący wykonywanie tych obowiązków jest planem obejmującym poważna wada. Z drugiej strony, jeśli chcesz stać się dobrym nauczycielem lub mentorem, to także coś do komunikowania.

  • Jeśli nauczanie i mentoring są nierównomiernie rozłożone na populację starszych programistów, upewnij się, że zadania te są uznawane za wartościowe dla firmy w taki sam sposób, jak osiągnięcia w zakresie rozwoju produktu.

Pointy
źródło
1

Dam ci na to moje spojrzenie.

Zasadniczo uczę się dobrze, gdy:

  1. Otrzymuję formalne wprowadzenie do tematu. Nigdy nie nauczę się czegoś nowego bez kogoś (tak, osoby), który odpowiedziałby na wszystkie pytania dotyczące nowych koncepcji. Kiedy to zrobię, ja ...
  2. Zdobądź książkę. Jako mój mentor powinieneś mieć dokładnie tę samą książkę, dzięki czemu zawsze mógłbym powiedzieć coś w stylu: „Hej, co to znaczy w rozdziale czwartym, stronie 72, paragrafie 6 ...” i będziesz wiedział dokładnie, o czym mówię o. Kiedy mam książkę, jestem bardziej niezależny i naprawdę zadaję tylko pytania. Potem ja...
  3. Rozpocznij projekt razem. To jest najważniejsza część tego procesu. Tutaj możesz zacząć uczyć mnie o najlepszych praktykach, algorytmach, trudnych (ale użytecznych) funkcjach językowych itp.

Teraz powiedziałeś, że masz własne projekty i że nie zawsze masz czas. Właśnie dlatego zostaliśmy pobłogosławieni StackOverflow . Jestem pewien, że chętnie pomogą mu w debugowaniu kodu. Jeśli chodzi o pytania, które nie są na ten temat, może zadać tutaj.

Powiedziawszy to, nadal musisz z nim regularnie pracować. Ogólna „oś czasu” powinna wyglądać następująco:

  • 1 miesiąc. Powinien znać podstawową składnię. Nadal nie jest niezależny podczas kodowania.
  • 3 miesiące. W tym momencie powinien znać składnię jak grzbiet dłoni i powinien być w stanie z łatwością rozwiązywać proste problemy. Jest o wiele bardziej niezależny, ale jeszcze nie całkiem.
  • 6 miesięcy. Powinni wiedzieć, oprócz wszystkiego innego: najlepszych praktyk, wspólnych algorytmów itp . Powinien być w stanie samodzielnie wykonać projekt, być może z niewielką pomocą SO.

Oprócz powyższego, najłatwiejszym sposobem na uniezależnienie kogoś jest udzielenie mu trudnego tematu do nauczenia się i udzielenie pomocy wyłącznie w Internecie. Będzie zmuszony uczyć się sam i pozna swoje rzeczy.

Gdy się dowie, co chcesz, żeby wiedział, uwolnij go. Pozwól mu odejść i naucz się tego, czego chce się nauczyć (zawsze możesz powiedzieć, że chcesz, żeby nadal pracował w tym języku).

Mam nadzieję, że to pomoże! Nawiasem mówiąc, niech to przeczyta: Naucz się programowania za dziesięć lat .

dynamiczne
źródło
0

Rozróżnij niższe i wyższe poziomy uczenia się. Jeśli chodzi o wiedzę, rozumienie lub aplikację, nie mam problemów, po prostu udzielając odpowiedzi, z krótkim wyjaśnieniem, jak mogą to sprawdzić następnym razem. To nie jest szkoła, to nie oszustwo i nie będą polegać na tobie w ten sposób na zawsze. Po prostu nie planuj robić niczego innego przez pierwszy tydzień lub dwa, więc nie będzie cię to denerwować, kiedy tego nie zrobisz.

Po pierwszych kilku tygodniach, jeśli zbyt często przeszkadzają ci tego rodzaju pytania, użyj timera pomodoro i nie odpowiadaj na żadne pytania do końca pomodoro. Google jest teraz dla Ciebie łatwy, ponieważ wiesz, czego szukać. Często tego nie robią, więc jeśli musisz im powiedzieć, aby coś wyszukiwał w Google, powiedz im, jakich wyszukiwanych haseł użyć, aby uzyskać najlepsze wyniki.

Jeśli problem dotyczy analizy, syntezy lub oceny, spędzam więcej czasu na ten temat. Tutaj podajesz uzasadnienie swoich decyzji i pomagasz im dojść do takich samych wniosków. Pojawia się to najczęściej w kwestiach wzornictwa i stylu. Nie mów im tylko, aby użyli określonego projektu, pokaż im, dlaczego jest lepszy od pierwszego wyboru. Pozwól im popełniać błędy i pozwól im naprawić własne błędy.

Karl Bielefeldt
źródło
0

Nie widziałem tu nikogo, kto wspominałby o moim osobistym bohaterze, Randy Pausch .

Myślę, że może to być korzystne dla każdego, kto faktycznie zajmuje się programowaniem, nauczaniem lub mentoringiem (a nawet dla każdego, kto chce prowadzić sensowne życie). Ty i / lub twoi koledzy możecie oglądać te wykłady warte czasu, tak jak ja

Lorand Kedves
źródło
-4

Ja, jako młodszy programista, uważam, że gdybym natknął się na jakiś problem, lepiej byłoby natychmiast uzyskać odpowiedź i poświęcić czas na zrozumienie, jak został rozwiązany.

Jestem opłacony. mój pracodawca nie spodziewa się zapłacić mi za naukę. Spodziewam się, że wykonam pracę pod koniec dnia. Nie ma sensu marnować czasu w działającym środowisku, próbując znaleźć rozwiązanie. To coś, co podniosę na czas, mam nadzieję, że szybko, jeśli będę w tym dobry.

MaxSan
źródło
9
Tak czy inaczej twój pracodawca płaci ci za naukę
smp7d
13
Jesteś mniej wartościowy dla swojego pracodawcy, jeśli nigdy nie będziesz lepszy niż byłeś w dniu, w którym zostałeś zatrudniony jako młodszy programista.
10
Max, mylisz się, chyba że masz gównianego pracodawcę. Dobrzy pracodawcy zapłacą ci za naukę, w pracy, a nawet wysyłając cię na konferencje lub zajęcia. Jeśli pozostaniesz przy obecnym nastawieniu, nie oczekuj, że kiedykolwiek zrezygnujesz z bycia młodszym programistą. Tytuły takie jak junior / senior nie są wydawane wyłącznie na podstawie czasu, który coś robiłeś; jeśli robiłeś to samo przez długi czas, ale nie nauczyłeś się, nadal będziesz uważany za młodszego.
Andy,
5
@MaxSan Problem polega na tym, że starsi programiści rzadko chcą nakarmić cię łyżką. Nie zatrudniliśmy stażystów jako pełnoetatowych, ponieważ nie byli w stanie samodzielnie rozwiązać rozwiązania. Oczekujemy, że poświęcisz trochę czasu, aby to rozgryźć, i tylko wtedy, gdy spędzisz rozsądną ilość czasu, by przyjść i poprosić o pomoc. Od seniorów oczekuje się, że rozwiążesz problemy, których nikt inny nie może zrobić, i nie będziesz w stanie tego zrobić, jeśli karmisz łyżeczką.
Andy,
6
Jeśli szukasz rozwiązania „na talerzu”, nigdy nie wyrosniesz ze statusu młodszego programisty. Uczenie się na podstawie dostarczonych ci kompletnych rozwiązań może być możliwe, ale z pewnością nie jest skuteczne . Oto jak działa mózg: jeśli doświadczysz drogi do rozwiązania, a nie tylko samego rozwiązania, nauczysz się o wiele więcej niż tylko studiowanie rozwiązania, które ktoś ci przedstawił.
Perdian