Co zrobić, gdy masz do czynienia z zadaniem programowania, którego nigdy nie wykonałeś?

37

Swoją karierę jako programista .NET rozpocząłem 3 miesiące temu i po długim planie szkoleniowym na temat różnych technologii, wzorców i koncepcji programiści, którzy mnie nadzorowali, zdecydowali, że jestem gotów dołączyć do jednego z wielu projektów obsługiwanych przez firmę.

Jestem bardzo podekscytowany, że w końcu mogę zacząć kodować. Zespół, do którego dołączyłem, jest na razie raczej niewielki, ponieważ zaczynał od nowego projektu, co jest świetne, ponieważ biorę udział w całym cyklu życia projektu. Jest to internetowy projekt SPA z kopią zapasową, który wykorzystuje ASP.NET MVC / ASP.NET Web API, a także frameworkiem Durandal i powiązane biblioteki.

Mój problem polega na tym, że po spotkaniu z kolegami i ustaleniu zadań i szacunków na następny miesiąc znalazłem się w sytuacji, której nie wiem, czy jestem w stanie podjąć się któregokolwiek z zadań.

Nigdy nie wykonałem żadnego z utworzonych zadań i nie wiem, jak mam postępować.

Na przykład jednym z utworzonych zadań jest utworzenie ogólnego mechanizmu obsługi błędów dla całej aplikacji.

Jak zwykle postępuje się w obliczu zadań, których nigdy nie wykonywał?

aleczandru
źródło
7
Może to wydawać się wyjątkowe w programowaniu, ale wszystkie pierwsze prace, które wykonuje większość ludzi, czują się tak. Nie zatrudnili cię, ponieważ znasz odpowiedzi - to praca dla początkujących! - zatrudnili cię, bo będziesz w stanie je rozgryźć.
Marco

Odpowiedzi:

59

Jest kilka rzeczy, które możesz i powinieneś zrobić, aby przygotować się do zadania:

  • Pomyśl o problemie i narysuj kilka diagramów. Upewnij się, że wiesz, na czym polega problem, który próbujesz rozwiązać.
  • Przeprowadź badania dotyczące tego, co próbujesz zrobić. Internet jest cennym źródłem informacji. Nie mówię, że pytaj przepełnienie stosu - mówię, aby zbadać, w jaki sposób inni ludzie już rozwiązali problem taki jak twój lub do niego podeszli. Oto, co wymyślił Google: „Obsługa wyjątków jako problem ogólnosystemowy” . Osobiście zawsze staram się uczyć od innych.
  • Wreszcie, a to może być najważniejsze, porozmawiaj z innymi osobami w zespole, aby uzyskać więcej wyjaśnień i wskazówek, co robić. Zawsze chcę, aby nowi inżynierowie przychodzili z prośbą o wskazówki dotyczące projektów.

Nie wiedząc, jak coś zrobić, nigdy tak naprawdę się nie skończy. Każdego dnia napotykam problemy, z którymi nigdy wcześniej się nie uporałem. Umiejętność znalezienia sposobu rozwiązania nowych problemów jest niezwykle ważna. Nawet stare problemy nigdy nie są całkowicie stare - w programowaniu prawie zawsze pojawia się nowy zwrot lub prośba, aby twoje rozwiązanie działało w nowy lub inny sposób.

Właśnie dlatego jestem inżynierem; Uwielbiam wymyślać nowe rzeczy.

Nigdy nie przestawaj uczyć się nowych rzeczy. Uczenie się czyni cię lepszym.

barrem23
źródło
27

Nie ma idealnego rozwiązania, ale niektóre rzeczy, które mogą pomóc:

  • Rozbij zadania na możliwie najmniejsze jednostki - dziel je na części, dopóki nie będziesz mieć rzeczy do zrobienia.

  • Przypisz natychmiastowe zadanie lub problem, aby upewnić się, że naprawdę je rozumiesz. Następnie wykonaj analizę i powtórz.

  • Najpierw wybierz najprostsze zadanie, nawet jeśli wydaje się zbyt proste, aby nadać mu rozpęd . Niektórzy ludzie wolą najtrudniejsze zadanie, więc „ciężka praca” jest na uboczu. Przekonałem się, że „najprostsze zadanie” na ogół działa lepiej, ponieważ po prostu chcesz nabrać tempa i widziałem, że „najtrudniejsze najpierw” prowadzą do wstrzymania projektów, zanim zaczną działać.

  • Poproś o pomoc w wyborze właściwego zadania i podejdź do niego.

  • Poszukaj mentora, który może udzielać ci stałej (najlepiej codziennie) informacji zwrotnej przez tydzień lub dwa.

  • Zadawaj wiele pytań, ale skup się na uprzejmości wobec członków swojej drużyny. Zawsze pytaj, czy mają czas i zwracaj uwagę na zwykłe werbalne i niewerbalne znaki, że nie mają wtedy czasu.

  • Zachowaj bieżącą listę napotkanych problemów, a następnie albo codziennie, albo w zwykłym wybranym czasie, przejrzyj je z innymi.

  • Nie bój się zadawać najbardziej podstawowych pytań. Założenia innych mogą być trudne do zakwestionowania, ale jeśli nie możesz kontynuować tego, co ci dano, musisz ponownie zadać pytanie.

  • Jeśli znasz cel, rób tyle, ile możesz, aż utkniesz, a następnie opublikuj postęp i pytanie dotyczące przepełnienia stosu.

Michael Durrant
źródło
11
W większości się zgadzam, oprócz „najpierw wybieraj najprostsze zadanie” . Z punktu widzenia ryzyka projektu lepiej może być najpierw wykonać najtrudniejsze niezbędne zadania. Lepiej jest uczyć się wcześnie, jeśli twarde części są w rzeczywistości zbyt trudne. Następnie możesz (być może) wrócić do prostszego projektu ... lub renegocjować wymagania.
Stephen C
18

Oczywiście nie masz pojęcia, jak napisać „ogólny mechanizm błędu”. Nikt nie wie, jak napisać „ogólny mechanizm błędu”, dopóki nie zostaną określone pewne wymagania. Wygląda na to, że wszystko, co masz, to czyjaś opinia, że ​​„ogólny mechanizm błędu” jest w jakiś sposób wymagany do rozpoczęcia tego projektu.

Osobiście odrzuciłbym to pojęcie. Pisanie „ogólnych” czegokolwiek przed wdrożeniem rzeczywistych wymagań użytkownika jest prawie zawsze stratą czasu. A ponieważ jest ogólny , z definicji nie jest specyficzny dla Twojej firmy lub aplikacji, więc prawdopodobnie jest już coś, co zaspokoi około 95% twoich potrzeb.

Ale ponieważ jesteś młodszym członkiem, odpychanie może nie być świetnym pomysłem. Musisz więc porozmawiać z ludźmi, którzy uważają, że potrzebują „ogólnego mechanizmu błędu” i dowiedzieć się, jakich usług oczekują od tego mechanizmu. Następnie przeszukaj sieć, aby sprawdzić, czy coś już wystarczy. Jeśli coś znajdziesz, zaproponuj po prostu użycie tego. Prawdopodobnie nie zgodzą się, ponieważ każdy, kto prosi o „ogólny mechanizm błędu”, prawdopodobnie cierpi na zły przypadek, który nie został wymyślony tutaj.

Jeśli to się nie powiedzie, następnym krokiem jest zdefiniowanie interfejsu dla mechanizmu błędu i zatwierdzenie go przez interesariuszy. Po tym implementacja będzie prawdopodobnie trywialna.

=================

PS Niektórzy programiści uważają, że sposobem na rozpoczęcie każdego projektu jest napisanie „platformy” zapewniającej wszystkie typowe usługi, które będą potrzebne modułom aplikacji. Zwykle przekłada się to na miesiące trywialnej pracy, która wymyśla rzeczy już dostępne za darmo. Dopóki nie osiągniesz limitów wydajności dostępnych rozwiązań, nie ma powodu, aby pisać usługi „platformy”. Nie ma też żadnego powodu, aby pisać opakowania wokół istniejących interfejsów API. Jeśli dokonasz refaktoryzacji w sposób ciągły, magicznie pojawi się dokładnie opakowanie wymagane dla twojej aplikacji.

Kevin Cline
źródło
5
Myślę, że spędzam prawdopodobnie większość czasu na usuwaniu funkcji, które ludzie myśleli, że są im potrzebne, podczas gdy w rzeczywistości okazuje się, że było to tylko lekko przydatne i problematyczne, jeśli chodzi o szybkie dostosowanie się do nowych potrzeb. Twoje ostrzeżenie jest na miejscu!
Eamon Nerbonne
11

Myślę, że cierpisz bardziej z powodu lęku niż deficytu umiejętności. W pewnym momencie nie było wszystko nowe? Czy kiedykolwiek otrzymałeś zadanie i nie byłeś w stanie go rozwiązać do pewnego stopnia? Zarabiasz na rozwiązywaniu problemów.

Wykorzystaj swój zespół - jeśli masz dobry zespół, powinieneś poprosić o pomoc. Są rzeczy, o których wiesz, że nawet najbardziej zaawansowani nie będą wiedzieć. Proszenie o pomoc nie jest oznaką słabości (niczym więcej niż bieganiem do jakiejś strony z pytaniami).

Wyszukiwanie - wyszukiwarka internetowa dotycząca ogólnej obsługi błędów nie przyniosła nic? Możesz nie znaleźć całego rozwiązania. Będziesz musiał nad tym popracować i dostosować go do swojej aplikacji.

Prototyp - zmień swoje spojrzenie na zadanie z produkcji na prototyp. Po prostu stwórz coś do pracy i buduj stamtąd. Gdy dojdziesz do tego stopnia, że ​​możesz go użyć, zacznij myśleć o nim jak o produkcji. Teraz nie zobaczysz zadania jako czegoś, czego nawet nie wiesz od czego zacząć.

Przezwycięż to - tylko robienie rzeczy, które wiesz jak robić, będzie nudne. Prowadzi cię również do pułapki brutalnego wymuszania pewnych rozwiązań przez powtarzanie tych samych rzeczy w kółko (jeśli lubisz powtarzać, idź pracować na linii montażowej). Przygotuj się na błędy. Ci, którzy mówią ci, że wiedzą wszystko, nigdy nie proszą o pomoc ani nie szukają, po prostu kłamią.

To stary żart o lekarzach wciąż „praktykujących” medycynę; nie mają też wszystkich odpowiedzi.

JeffO
źródło
Zgadzam się na wykorzystanie twojego zespołu. Czy byliby otwarci na programowanie sparowane przez jakiś czas, aby przyspieszyć?
neontapir
Nie wszystkie zespoły / deweloperzy są zainteresowane programowaniem w parach, ale to nie znaczy, że nie możesz usiąść i spojrzeć przez ramię lub odwrotnie.
JeffO
6

Raduj się, że nie robisz czegoś, co zrobiłeś sto razy wcześniej. Odkryłeś radość z tworzenia oprogramowania (w każdym razie dla mnie, YMMV) - uczysz się, jak prowadzić, gdy pędzisz autostradą z niezwykłą prędkością. Jest to coś, dla czego żyje świetny programista i w którym się wyróżnia.

Mój osobisty proces wygląda mniej więcej tak:

  • Badania. Dowiedz się, czy i jak ten problem lub podobny problem został wcześniej rozwiązany. Nawet jeśli możesz znaleźć tylko informacje o rozwiązaniach dla różnych języków lub platform, może to być bardzo pouczające.
  • Prototyp. Absolutnie najlepszy sposób, aby zrobić coś dobrze, to najpierw zrobić to źle. Zbuduj rozwiązanie, które składa się na bieżąco, na podstawie twoich badań. Staraj się, aby był on zgodny z głównymi wymaganiami, z uwzględnieniem wymagań dodatkowych. Nie przejmuj się, że jest ładny, idealny, rozszerzalny, elastyczny lub wydajny, po prostu spraw, aby działał. Zanotuj zdobyte doświadczenia - co zadziałało, a co nie, potencjalne przeszkody itp. Następnie wyrzuć kod. Jeśli martwisz się, że szukasz głupca za długo, zrób to w swoim własnym czasie. To przynosi korzyści osobiście pod względem wiedzy.
  • Projekt. Połącz swoją wiedzę zewnętrzną (badania) z wiedzą osobistą (wyciągnięte wnioski z prototypów) i sformułuj projekt, który Twoim zdaniem byłby właściwy.
  • Współpracować. Znajdź starszego członka zespołu, pokaż mu proponowany projekt i uzyskaj informację zwrotną. Pokaż to komuś innemu, uzyskaj jego opinię. Udoskonal swój projekt.
  • Powtarzać. Jeśli nadal nie masz pewności co do rozwiązania, upewnij się, że recenzje użytkowników są częścią cyklu iteracji. Regularnie przedstaw swoje wdrożenie starszemu członkowi zespołu w celu uzyskania opinii.
  • Bądź szczęśliwy - poszerzyłeś swoją wiedzę i karierę i musisz zrobić coś nowego i interesującego zamiast czegoś starego i nudnego, co robiłeś tysiące razy wcześniej. Postaraj się, aby Twój kolejny projekt stał się jeszcze większym wyzwaniem.

I na koniec, nie przejmuj się zbytnio wyglądem. Jako kierownik zespołu programistów wolę kogoś, kto może udowodnić, że może nauczyć się wszystkiego, czego potrzebuje, tak jak tego potrzebują, niż kogoś, kto może udowodnić, że już wie, co jest jedną rzeczą, którą próbujemy teraz zrobić. Ten pierwszy będzie bardziej przydatny do wszystkiego, co skończymy jutro, w przyszłym miesiącu lub w przyszłym roku.

Adrian
źródło