Do napisania tego posta wprost umotywował mnie wpis Oskara Dudycza na podobny temat - nauki uczenia się. Jest to temat bardzo ciekawy i od dawna na mojej liście "to do". Zatem napisałem, w końcu!
Pytanie, na które chciałbym odpowiedzieć jest proste - jak się właściwie uczyć technologii w naszym dev-świecie? Jak się rozwijać, by nie wypaść z obiegu? By wiedzieć co się dookoła nas dzieje? Prezentuję swoją garść pomysłów, z lepszym lub gorszym skutkiem stosowanych przeze mnie.
Po co się rozwijać?
No właśnie. Podstawowa kwestia, którą należy rozważyć, to po co się w ogóle mamy uczyć. Odpowiedź rzutuje na pozostałe pytania. Przy czym pomijam tu oczywistą sytuację pośród studentów, którzy muszą (powinni?) choć trochę się pouczyć by zakończyć studia. Mówimy o czasach "post-akademickich", naszej codziennej, żmudnej pracy zawodowej.
Ja widzę dwa powody. Uczyć się czasem musimy, bo wymaga tego nasz projekt zawodowy - być może wkraczamy w nową technologię, używamy nieznanej biblioteki, architektury, czegokolwiek. Musimy wtedy "przysiąść" i nauczyć się czegoś nowego. Druga sytuacja, to ogólnie pojęty rozwój - uczenie się mniej więcej na bieżąco tego, co się w dev-świecie dzieje. Dzięki temu nie damy się ugotować - jak to określili organizatorzy konferencji BoilingFrogs. Może to nam też po prostu sprawiać frajdę, co jedno drugiemu nie przeczy. Albo pomóc w wyjściu ze stagnacji, o czym pisałem w "Angażuj się". Bardzo często takie pytanie usłyszymy w trakcie rekrutacji - "jak się Pan/Pani rozwija, uczy, co robi w tym kierunku?".
Dlaczego tak wyraźnie rozgraniczam te dwa powody? Moim zdaniem bardzo rzutują one na sposób jak się uczyć. Ogólny rozwój wymaga innego podejścia niż potrzeba szybkiego wejścia w temat. W niniejszym poście koncentruję się właśnie na owym ogólnym rozwoju. "Ostrzeniu piły", jak to się mawia. Na propozycje sposobów szybkiej nauki przeznaczę kiedyś osobny wpis.
Jak się uczyć - ogólny rozwój?
Przechodząc do sedna, poniżej moje propozycje. Nie wszystko musi się Wam spodobać, nie wszystko trzeba stosować, bo jest to moja subiektywna lista. Kolejność nie jest przypadkowa bo wskazuje mniej więcej znaczenie poszczególnych elementów ogólnego "rozwoju", od tego najważniejszego.
Social media
Główny, codzienny kanał informacji to różnego rodzaju media społecznościowe. Od prawie roku mogę powiedzieć, że genialnie sprawdza się na tym polu Twitter. Możemy śledzić profile interesujących nas osób i tematów. Każdy bardziej popularny framework, technologia, firma, czy bardziej znani developerzy, mają tam swój profil. Twitter jest dla mnie obecnie nowym wcieleniem RSS, tylko lepszym. Przykładowo śledzę tak różnorodne profile jak: frameworki (@knockout_js, @angularjs), organizacje (@w3c), technologie (@dotnet, @html5), konferencje i grupy (@velocityconf, @warsawjs), konkretnych developerów (dłuuga lista) itd. itp. Każdy dobierze to co mu potrzebne. Oczywiście możemy się przesycić, dodać tysiące obserwowanych i obawiać, że coś nam umknie. Jednak w praktyce ciekawsze wydarzenia są co jakiś czas "retwitowane" przez innych więc nawet zerkając na Twittera 2-3 razy dziennie, nie powinniśmy wiele stracić. Sami zresztą kontrolujemy kogo obserwujemy, więc może to być kilkanaście szczególnie nas w danej chwili interesujących profili. Możemy też organizować listy tematyczne itp.
Blogi to kolejne świetne źródło wiedzy. Wybieramy te, których tematyka nas interesuje i... jeśli się da, dodajemy je do naszego Twittera. Większość mają taką możliwość. Jeśli nie, na pewno mają kanał RSS. Możemy wtedy go sobie dodać do ulubionego czytnika. Jednak od czasu ubicia Google Readera, popularność RSSów znacznie spadła. Podobnie u mnie, praktycznie już tam nie zerkam. Jeśli już, jako czytnik polecam Feedly.
Obok lub zamiast blogów warto śledzić różnego rodzaju agregatory blogów i wiadomości. Nie znam wielu, ale ze świata .NET zdecydowanie wystarczają trzy: The Morning Brew, Dotnetomaniak oraz Dotnetblogs. Co więcej, wszystkie trzy mają profile na Twiterze, więc znów...
Jeśli mamy Facebooka, tam też znajdziemy ciekawe kanały. Dla .NETowca zdecydowanie polecam grupę .NET Developers Poland, jest to miejsce ciekawych dyskusji, pytań i linkowania ciekawych artykułów. Każda grupa zapewne znajdzie coś dla siebie. Można też śledzić strony blogów (np. devStyle Maćka Aniserowicza albo mój!) lub konkretnych grup pasjonatów (np. WarsawJS, Białostocka Grupa .NET).
No dobrze. Za pomocą powyższych źródeł mamy zapewniony stały strumień wiadomości i aktualności, dzięki któremu będziemy wiedzieć co w trawie piszczy. Nowe wersje bibliotek, frameworków, publikacje książek, zbliżające się konferencje - jak sobie wszystko odpowiednio skonfigurujemy, raczej nic nam nie umknie. Tylko co z tym wszystkim zrobić? Przeczytać się na raz nie da. Tworzyć zakładki "na później" zapcha nam RAM, a i tak skończy się tym, że któregoś dnia stwierdzimy, że nie da się tego przeczytać i wszystko zamkniemy.
Zainspirowany propozycją Scotta Hanselmana, wypracowałem sobie następujące postępowanie:
- Gdy trafiam na ciekawy artykuł, a nie mam czasu go akurat przeczytać, dodaję go do Instapaper jako swoistego rodzaju cache "to read".
- Gdy trafiam na ciekawy artykuł i akurat potrzebuję/mam czas go przeczytać, czytam go. Jeśli uważam za wartościowy, dodaję do Delicious, jako osobistego repozytorium ciekawych artykułów. Z Instapaper kasuję.
- W wolnej chwili, po pracy, przeglądam Instapaper i to co udaje mi się przeczytać i uważam za wartościowe, również przerzucam do Delicious, kasując z Instapaper. Do tego zadania świetnie nadaje się tablet.
- Co jakiś czas robię wiosenne porządki i czyszczę stare wpisy w Instapaper. Jeśli nie przeczytałem czegoś przez wiele iteracji, najwyraźniej przestało mnie to interesować.
Ponadto, ponieważ głównym źródłem ciekawych artykułów jest Twitter, można sobie za pomocą IFTT dodać regułę "jeśli polubiłem tweeta z linkiem, dodaj go do Instapaper".
Grupy pasjonatów
Drugim, bardzo wartościowym według mnie źródłem wiedzy jest bywanie od czasu do czasu na wybranych przez siebie grupach pasjonatów, tudzież "user group" po zagranicznemu. Zaletą jest to, że poświęcając 2-3 godziny miesięcznie (albo wielokrotność, jeśli wybierzmy kilka) dostajemy wszystko na tacy. Idziemy, siadamy, słuchamy i wychodzimy z głową wypełnioną wiedzą na konkretny temat. Nie musimy więc poświęcać czasu na szukanie i selekcję materiałów. Zrobi to za nas prelegent. I do tego podzieli się swoim doświadczeniem. Ponadto, co równie cenne, możemy podyskutować z innymi uczestnikami, podzielić się uwagami oraz zadać pytania prelegentom. Dlatego uważam ten sposób za jeden z najłatwiejszych i najkorzystniejszych.
Jak szukać grup w swojej okolicy? Nie znam lepszego sposobu niż posłużyć się Meetupem. Obecnie chyba większość grup jest tam zarejestrowanych, więc nie tylko znajdziemy tam taką, która nas interesuje ale również będziemy później informowani o zbliżających się spotkaniach. Na pewno najwięcej spotkań odbywa się w Warszawie, ale chyba w każdym większym mieście da się coś znaleźć.
Szkolenia online
Inną bardzo cenną formą nauki, nie wymagającej wychodzenia z domu, są różnego rodzaju szkolenia on-line. Wygodnie siedząc w kapciach i sącząc ulubione napoje, posłuchamy najlepszych ekspertów ze swoich dziedzin. Jedyna wada, to potrzeba większej samodyscypliny - takie szkolenie znacznie łatwiej przerwać niż wyjść z wykładu na grupie. No i nie podyskutujemy od razu z innymi uczestnikami oraz autorami.
Moje zdecydowanie ulubione źródło, niestety płatne, to Pluralsight. Jednak miesięczny koszt abonamentu to 29 dolarów, więc nie jest to aż taka tragedia, biorąc pod uwagę jak duży zasób wiedzy zyskujemy. Warto też pomęczyć pracodawcę o wykupienie dostępu. Zaskakująco dużo świetnej treści znajdziemy również w darmowych źródłach takich jak YouTube (nagrania z konferencji), Channel9 (konferencje, szkolenia) oraz Slideshare (prezentacje). A gdzie się dowiemy co akurat warto obejrzeć? Oczywiście z twitterowych profili odpowiednich konferencji lub grup użytkowników!
Książki
Osobiście jestem wielkim fanem zwykłych, klasycznych książek. Najlepiej czytanych, może niemodnie, od deski do deski*. Lepięj wtedy "poczujemy" temat, niż jeżeli potraktujemy książkę wybiórczo pod kątem tego, co nas akurat najbardziej interesuje. Wybierając książkę mamy pewność poznania tematu szeroko i warto z tego skorzystać. Czytając książkę, nie wszystko musimy od razu przelewać na projekt. Czasem wystarczy nam to, że dzięki temu poszerzymy horyzonty. Wszystko zależy jakie znaczenie ma dla nas konkretny temat. Jest to zdecydowanie najbardziej pracochłonny sposób, bo w miarę uważne przeczytanie książki może zająć tygodnie. Jednak właśnie dzięki temu, że temat nam będzie tyle towarzyszył, mamy szansę bliżej się z nim zaprzyjaźnić. Nie lekceważmy potęgi klasycznej książki!
Jeśli chodzi o źródła, to przede wszystkim, jestem zdecydowanym przeciwnikiem "ściągania ebooków". Jeśli ktoś poświęcił rok lub więcej na napisanie książki zarywając noce, to czy naprawdę nie możemy zapłacić tych 50-100 zł za oryginał? Zwłaszcza, że chyba specjalnie programiści nie biedują. Żeby było jasne, długo też tak robiłem. Ale w końcu przychodzi pora dojrzeć i przestać się usprawiedliwiać...
Książki IT bardzo szybko się deaktualizują. Sam mam na półce kilka cegieł o ASP.NET 2.0, z którymi nie wiem co zrobić. I choć bardzo lubię papierowe wydania, od jakiegoś czasu przerzuciłem się na ebooki. Po pierwsze, nie liczę specjalnie na polskie tłumaczenia, ponieważ są na ogół sporo opóźnione i mocno niezręcznie przetłumaczone. Sprowadzanie jednak papierowych oryginałów z zagranicy jest dość drogie i potrafi kosztować tyle, co sama książka. A nie bywam za granicą na tyle często, by je sobie samemu kupować. Zresztą, jak już wspomniałem, w przypadku zdecydowanej większości książek po prostu nie opłaca się inwestować w wersję papierową, bo za rok/dwa będzie do spalenia. Ebooki są natomiast tańsze same w sobie, a ponadto nie są obarczone kosztami wysyłki. Bardzo często da się wyłowić ciekawe promocje i są to właśnie najczęściej promocje na ebooki. Ja regularnie śledziłem ulubione wydawnictwa i obserwowałem ich Deal of the day, promocje specjalne itd. Daje się czasem kupić ebooka za 5 albo 10$. Apress, Packtpub, O'Reilly, Manning - takie wydawnictwa śledziłem. Co więcej, np. obecnie Packtpub ma akcję Free Learning Forever i codziennie publikuje jednego ebooka całkowicie za darmo!
Zauważcie, że w poprzednim akapicie pisałem w czasie przeszłym. Już nie śledzę promocji w poszczególnych wydawnictwach by wyławiać "perełki". A to dlatego że znalazłem kilka miesięcy temu prawdziwe, legalne Eldorado - abonament Safari Books Online. Tanio nie jest, bo to 39$ miesięcznie. Możemy go opłacać co kilka miesięcy z przerwami. Tak czy inaczej, gdy zdecydujemy się na Safari, zyskamy dostęp do wszystkich książek IT jakie sobie wymarzycie. Wszystkie najważniejsze wydawnictwa są tam obecne, książki pojawiają się szybko po premierze. Być może dla osoby, która ściąga ebooki (czyli kradnie...), nie jest to wielka nowość. Ale dla "legalnych" to genialne narzędzie. Poza tym, możemy używać wyszukiwania w treści wszystkich książek i od razu mamy dostęp do wyników online. Taki wewnętrzny Google obejmujący treść wszystkich książek IT, nieźle!
New project factor
Ok, do tej pory było łatwo. Czasem przejrzeć Twittera, poczytać wpisy na blogach, pogapić się na video, a nawet przejść się od wielkiego dzwonu na jakąś grupę - pikuś. Kolejny element układanki to jednak grubsza sprawa. Trzeba będzie zacząć coś robić! Jeśli zależy nam na przyswojeniu wiedzy, o której tyle czytamy i słuchamy, to niestety nie ma innej drogi, niż zastosowanie jej w praktyce. Trudno liczyć, by nasz pracodawca rzucał nas non stop w ciekawe projekty, w których idealnie i bez przeszkód zastosujemy właśnie poznane rozwiązania. Dlatego drogą do naszego rozwoju muszą być małe, poboczne, prywatne projekty - tzw. pet projects.
Ukułem na te potrzeby nowe pojęcie - tytułowy "new project factor". Chodzi o odpowiedź na proste pytanie - kiedy ostatnio klikaliśmy w naszym ulubionym IDE opcję File -> New Project...? Moją teorię ilustruje poniższy wykres, efekt wieloletnich badań, analizy wielowymiarowych przestrzeni nieliniowych i kwantowej teorii pola.
Jeśli odpowiedź na powyższe pytanie brzmi "tak dawno, że nie pamiętam" - grozi Ci stagnacja. Prawdopodobnie tkwisz w supporcie jakiegoś projektu i od dawna nie stworzyłeś nic nowego, nie mając okazji nauczyć się i wykorzystać wiedzy, o której być może nawet sporo czytasz. Jesteś po stronie wykresu "nie pamiętam" i Twój rozwój jest prawie zerowy. Prawie, bo być może próbujesz stosować coś nowego w projekcie, z którym jesteś tak związany.
Z drugiej strony, jeśli odpowiedź brzmi "codziennie", prawdopodobnie wpadłeś w chorobę zwaną Developaralysis. Nakręca Cię każdy nowy framework i pojęcie, natychmiast próbujesz coś z tym zrobić. Zaczynasz kolejne tutoriale i projekty, które otwierasz kilka razy i na tym koniec. Pozostawiasz zatem po sobie długie pasmo lekko dotkniętych tematów, co sumarycznie nic nie wnosi w Twój rozwój, bo niczego dobrze nie poznajesz. Aż wszystko się zaczyna mieszać, stąd nawet ujemny czynnik rozwoju w skrajnych przypadkach.
Najlepiej oczywiście znaleźć się w środku wykresu, znaleźć rozsądny kompromis. Jako że to nie jest teoria naukowa, nie muszę na szczęście podawać co to znaczy "rozsądny". Mi się na przykład wydaje, że będzie to jakiś niewielki projekt napisany raz na pół roku, przy użyciu kilku sensownie połączonych i nowych dla nas technologii.
Konferencje, warsztaty
Można je traktować jako grupy pasjonatów na sterydach. Więcej prelekcji, więcej możliwości porozmawiania z innymi i zawarcia ciekawych znajomości, fajna atmosfera na before lub after party. Wymagają na ogół więcej zachodu, bo są to wydarzenia całodniowe lub kilkudniowe, często w trakcie dni roboczych. Ponadto na ogół są płatne, choć często raczej symbolicznie. Można je lubić lub nie. "Co kto lubi", jak to mawiają. Przykład kalendarza konferencji na rok 2016 dla programisty .NET opublikowałem niedawno. Ja je lubię, bo świetnie ładują "dev akumulatory" mnóstwem ciekawych treści i spotkań. Inną formą spotkań są hackatony - np. HackWaw lub warsztaty - np. devWarsztaty. To już każdy musi zdecydować sam, która forma go bardziej interesuje.
Szkolenia
Na końcu umieszczam najmniej cenioną przez mnie formę rozwoju. Chodzi mi o szkolenia "pudełkowe", według narzuconego przez firmę X (p. Microsoft, Cisco) szablonu. Nie dlatego że sam program jest do bani. Ale dlatego że nie przekonują mnie szkoleniowcy, którzy mają całą ścianę wypełnioną certyfikatami od Sasa do Lasa, a na wszystkie trudniejsze pytania odpowiadają "to ja się dowiem". Pisał o tym trafnie Maciej Aniserowicz. A propos - firmę Bottega, w której jest szkoleniowcem, polecam. Pewnie są inne dobre, traktujące temat z prawdziwie eksperckiego punktu widzenia. Takie dostosowane pod klienta szkolenia są warte rozważenia. Ale to już musicie bardziej męczyć swojego pracodawcę, nie sadzę by ktoś się szarpał na coś takiego indywidualnie.
Podsumowanie
Jestem związany ze światem .NET, więc siłą rzecz proponowane przeze mnie linki, grupy itd. dotyczą tej rzeczywistości. Jednak nie zmienia to nijak sensu listy wymienionych punktów. Jeśli czytacie to i pochodzicie z innych "światów", piszcie swoje propozycje, będziemy artykuł wspólnie uzupełniać!
Co do słów końcowych. Moim zdaniem, starając się rozwijać, nie powinniśmy zaczynać za dużo wątków na raz - dopadnie nas Developaralysis. Programowanie funkcyjne, aplikacje na Androida, Unity3d i Node.js na raz? Nie... Przeznaczmy sobie pet project na coś konkretnego, potem na coś innego itd.
Poza tym, nie ma lepszego sposobu nauki, niż dzielić się tym czego się uczymy. Gdy już czegoś się nauczymy, napiszmy o tym na blogu. Albo zgłośmy się na grupę i powiedzmy o tym! Np. napisaliśmy coś sensownego w F#? Seria postów o przykładowym programie, trudnościach w nauce, ciekawych znaleziskach. Nie dość, że będziemy mieć świetny notatnik z naszej nauki, to jeszcze inni na tym skorzystają. Możemy też wykorzystać naszą nową wiedzę i udzielać się na portalach typu StackOverflow. Świetna okazja by doszlifować umiejętności.
I to tyle. I tak sporo. Mam nadzieję, że dzięki temu postowi odpowiedź na rekrutacyjne pytanie "jak Pan/Pani się uczy/rozwija?" przestanie być groźne i tajemnicze. Oczywiście, jeśli coś zaczniemy faktycznie wcielać w życie. Czego i Wam i sobie życzę!
* Z wyjątkiem "cegieł" w rodzaju Windows Internals. Wybacz Michał i Sebastian!