Czy zastanawialiście się kiedyś jaką drogę pokonuje każdy z nas podczas swojej programistycznej kariery? Kolejne jej etapy skojarzyły mi się ostatnio z nieuchronną podróżą od macicy do gleby, czyli zwykłym życiem. Oto co wyszło z pseudo-filozoficznych przemyśleń obserwatora programistycznej natury:
1) Narodziny
Wszyscy jesteśmy gdzieś dalej na naszej drodze, ale zaczynaliśmy we wspólnym momencie. Właśnie tu. Któregoś dnia coś zakrzyknęło z naszych trzewi: "będę programistą!" - i niemowlę developerem się stało.
2) Dzieciństwo
Drugi etap to poznawanie świata. Towarzyszą temu najbardziej podstawowe odczucia, kierowanie się prostymi instynktami. Ciekawość - jak to będzie? Strach - co, jeśli mi się nie uda? Niecierpliwość - tyle do poznania, a ja nic nie umiem!
Tyle języków, tyle technologii. Tyle wreszcie materiałów i możliwości. Niepewność - na co się zdecydować, jak podjąć prawidłową decyzję? Gdzie szukać autorytetów i porad?
Na tym też etapie zmagamy się z najcięższymi problemami. Trzeba umieć odnaleźć się w całkowicie obcym świecie. Trzeba nauczyć się nowego języka komunikacji, setek nowych pojęć, poznać ludzi i ich zwyczaje.
To właśnie tu sporo osób zmienia decyzję. "To jednak nie dla mnie, szukam czegoś innego". I bardzo dobrze, teraz jeszcze nie jest za późno.
Jeśli jednak pierwszy sprawdzian mamy za sobą, jeśli okaże się że wybraliśmy słusznie, że się do tego nadajemy - dalej jest już tylko lepiej.
Czas podążyć dalej w las zer i jedynek...
3) Dojrzewanie
Jak to w życiu, czas na... coś na drodze programisty zaiste ohydnego. Nie powoduje trądziku czy śmiesznych zmian w głosie, ale jest od nich stokroć gorsze.
Zazwyczaj etap ten przychodzi po napisaniu pierwszego programu większego niż "Hello World!". Mniej więcej zdefiniowaliśmy technologię w której chcemy działać, liznęliśmy podstawy programowania obiektowego, udało się napisać COŚ, z czego jesteśmy dumni... Hurra! Jestem wielki! Co idzie za tym?
Niestety, z moich obserwacji wynika, że prócz pozytywnej satysfakcji zazwyczaj towarzyszy temu ogromna PYCHA z kumplami takimi jak niesamowita pewność swoich przeszacowanych programistycznych umiejętności czy zastanawiająca wręcz zadziorność i przekonanie o własnej wszechwiedzy. Bezpośredni efekt to nieopamiętane krytykowanie wszystkiego i wszystkich, święte przekonanie że "ja napisałbym to lepiej". Że jestem programistycznym mesjaszem a ci wszyscy kretyni wokół niech się ode mnie uczą, póki mają taką szansę.
Naprawdę nie wiem skąd się to bierze. Powyższy opis jest może nieco przekolorowany, ale... zjawisko takie istnieje ponad wszelką wątpliwość. Najprostszym przykładem jest forum CodeGuru, gdzie zbyt łatwo można natknąć się na objawy tej choroby.
"Myśl i kombinuj, SYNUŚ". "Nie zadawaj banalnych pytań". "Nie chce mi się, ale (w domyśle - 'jestem tak wielki i zajebisty, że') łaskawie ci pomogę". To tylko kilka cytatów... Jak łatwo zapomnieć gdzie samemu było się jeszcze kilka miesięcy/lat temu.
Jednostkom udaje się ten etap przeskoczyć, inni przechodzą przezeń w sposób "normalny" (czytaj: nie trwa on zbyt długo). Niektórzy niestety pomimo wieloletniego doświadczenia i rozwiniętej kariery zawodowej cały czas trwają w tym bagnie po szyję. Rozpoznać to jest bardzo łatwo, ale wyrwać się... im później tym trudniej.
Ja załapałem się do drugiej grupy - szczęśliwie już kilka lat temu udało mi się w miarę bezboleśnie wskoczyć na następny poziom, nie czyniąc przy tym większych szkód. Szczególnie sobie - bo właśnie w samego siebie uderzamy taką postawą najbardziej.
4) Wkraczanie w dorosłe życie
Nadchodzi czas, gdy okazuje się, że niestety nie jest tak bosko jak sobie to wyobrażaliśmy. Do mistrzostwa trochę nam brakuje. Najwyższa pora przestać nieustannie łechtać swoje rozdęte różowe ego. Trzeba zrozumieć, że nie można ciągle skupiać się na tym co już umiemy, i odkryć znaczenie drugiej grupy: czego NIE UMIEMY.
Spuszczamy zatem trochę z tonu i zabieramy się do pracy. Najwyższa pora dogłębnie poznać mechanizmy rządzące programowaniem obiektowym. Zrozumieć NATURĘ wzorców projektowych. Zaznajomić się z różnymi frameworkami, bibliotekami, narzędziami. Wybrać źródła wiedzy, chłonąć opinie mądrzejszych od siebie. Uczyć się, uczyć, uczyć. I czerpać z tego radość. A do kolejnego "etapu dojrzewania" jest daleko. Trzeba po prostu cierpliwie, przez LATA, dążyć w wybranym kierunku.
Aha, i postanowić sobie: "NIGDY nie wrócę do poprzedniego etapu".
5) Dorosłość
I oto jesteśmy kilka kroków dalej... Mamy wiedzę dość rozległą. Nie boimy się wyzwań, ale podchodzimy do nich z szacunkiem. Zdajemy sobie sprawę, że nie ma "jedynej słusznej drogi". Umiemy wykorzystać gotowe rozwiązania i praktyki, jednak nie stosujemy wszędzie miliarda wzorców projektowych "bo tak trzeba". Zdajemy sobie sprawę, że "overengineering" nie oznacza szpanu, tylko problemy.
Zalety szeroko stosowanych praktyk (takich jak Dependency Injection czy testy jednostkowe) nie są nam obce. Staramy się być na bieżąco z trendami (przykładowo aktualnie - mocno zauważalny zwrot w stronę ponownego odkrywania i przybliżania "dla mas" programowania funkcyjnego).
Nie wierzymy jednak ślepo wszystkiemu co usłyszymy - WIEMY bo SPRAWDZAMY zastosowanie konkretnych zaleceń w konkretnych scenariuszach.
Doszliśmy do wniosku, że lepiej znać narzędzia i z nich korzystać niż pisać wszystko samemu.
Otwarci na nowe poglądy poszerzamy horyzonty, robiąc to co lubimy...
6) ...?
Ja bez kokieterii oceniam swoją aktualną pozycję gdzieś na początku punktu 5.
A gdzie Wy jesteście na tej ścieżce?
I pytanie do bardziej doświadczonych: co jest dalej? Jak wygląda "starość" programisty?:)