admin 0Comment

Pytanie nasunęło się przy okazji przygotowywania listy, którą zamieściłem już jakiś czas temu w tekście Niezbędnik Junior Developera, gdzie starałem się zawrzeć te zagadnienia i narzędzia, które, jak sądzę, powinienem poznać, jako osoba aspirująca na stanowisko Junior back-end Web Developer, programując w języku Python. Sporządziłem tam listę, jednak pozostaje otwartą kwestią, jak głęboko powinienem zapuścić się w każde z wymienianych zagadnień, by móc w pewnym momencie powiedzieć, że je opanowałem. I czy w ogóle, aspirując na poziom juniora, jestem w stanie powiedzieć tak o jakimkolwiek zagadnieniu czy jednym z poznawanych przeze mnie narzędzi?

Nie jest to dla mnie coś zaskakującego, jednak ostatnie kilka miesięcy nauki w pełni potwierdza obserwację, że programowanie to cholernie rozległa i głęboka dziedzina, w dodatku nieustannie ewoluująca i rozwijająca się. Każde z zagadnień programistycznych może być rozwijane niemal do woli i, niezależnie od doświadczenia, nie da się być dobrym we wszystkim, czy nawet orientować się w każdym zagadnieniu związanym z programowaniem.

Z mojej perspektywy (i każdego, kto uczy się samodzielnie), muszę być w stanie spostrzec, w którym momencie powinienem przestać zagłębiać się w teorię i przejść do praktyki, a także, w którym momencie powinienem przejść do następnego elementu z listy zagadnień do opanowania.

Precyzując nawet bardziej – planując naukę musimy szczególnie zastanowić się nad dwiema kwestiami:

 

Jak głęboko sięgnąć do danego zagadnienia (dla przykładu – obsługa baz danych, wzorce projektowe, zasady OOP) aspirując na stanowisko juniorskie?

 

W jaki sposób zaplanować sam proces nauki – czy „rzeźbić” w danym zagadnieniu aż do momentu, w którym stwierdzimy, że opanowaliśmy je wystarczająco głęboko, czy też zastosować jakąś metodę równoległej nauki?

 

Ciężko precyzyjnie odpowiedzieć na pierwsze z zadanych tutaj pytań. W moim wcześniejszym tekście stwierdziłem, że na poziomie junior developera, mogę stwierdzić, że „poznałem” dany program, narzędzie czy zagadnienie w momencie, kiedy mogę stosunkowo swobodnie korzystać z jego podstawowych użyteczności i wiedzieć, jak praktycznie go zastosować w nieszczególnie skomplikowanych przypadkach. Oczywiście nadal wypadałoby określić, co oznacza „podstawowe” i „nieszczególnie skomplikowane”, ale nie ma to większego sensu. „Solidne podstawy” – to określenie, które ciśnie mi się na usta.

Warto też pamiętać, że to, co tak naprawdę pozwoli odpowiednio ukierunkować, a przede wszystkim zdynamizować nasz proces nauki, to praca nad REALNYMI, KOMERCYJNYMI projektami. Samodzielna nauka, nawet nakierowana na praktyczne umiejętności i bazująca na ćwiczeniowych projektach nadal będzie przegrywać z wiedzą zdobytą na podstawie tego, co będziemy robić zawodowo.

 

Jeśli chodzi natomiast o zaplanowanie nauki, po czasie wypracowałem następujący schemat – zamiast bez końca zagłębiać się w dane zagadnienie (więcej o nich w tym temacie), zaniedbując inne, określam (w miarę możliwości) zakres i czas, jaki poświęcę jednorazowo na nie, a następnie przechodzę do kolejnego. Mogą to być np. dwu, trzytygodniowe okresy, po których przychodzi czas na zgłębienie kolejnego zagadnienia. Dlaczego w taki sposób? Warto pamiętać, że do stworzenia większych projektów należy korzystać z wielu umiejętności. Dla przykładu, tworząc aplikację warto przez cały czas pamiętać o dobrych praktykach programistycznych, stosować Object Oriented Design w fazie projektowania programu oraz Object Oriented Programming w trakcie pisania kodu, być może zajdzie potrzeba wykorzystania jakiegoś wzorca projektowego, a także najpewniej będziesz musiał skorzystać z jakiejś bazy danych. W końcu, szczególnie w sytuacji samodzielnego tworzenia aplikacji webowych, nawet jako osoba ucząca się programowania back-end nie uciekniesz od front-endu, chociażby w zakresie niezbędnym do skorzystania z danego frameworka (np. Django), i tak dalej, i tak dalej.

 

Kluczem do sensownej samodzielnej nauki programowania wydaje mi się więc na tę chwilę, z jednej strony sprawne opanowanie danego zagadnienia lub narzędzia na podstawowym poziomie jego użytkowania, a z drugiej nauka oparta na praktycznych projektach, które same będą wymuszały poznawanie coraz to nowych zagadnień, i uczenie się ich właśnie w tym momencie, w którym okazują się one niezbędne (JIT – Just In Time learning!), a nie „na zapas”.

 

Te podejście wydaje się działać u mnie z perspektywy ostatnich kilku miesięcy, jeżeli więc chcesz zabrać się za naukę programowania, nie zaczynaj od obiecywania samemu sobie, że „nauczę się języka X na blachę” tylko zastanów się, co chciałbyś stworzyć by mieć frajdę z pracy nad tym, i zabierz się do tego, po drodze zdobywając niezbędną wiedzę, wtedy, kiedy okaże się to konieczne.

Dodaj komentarz