Od czego zacząć?!
W ostatnim czasie (być może wcześniej też, ale nie zwróciło to wtedy mojej uwagi) zauważyłem na forum, na którym się udzielam, duży wzrost ilości pytań typu „Od czego zacząć naukę programowania?„, „Czy dam radę nauczyć się programować jeśli poświęcę temu X godzin dziennie?„, „Czy nadaję się na programistę?„. Głównie takie tematy pochodzą od osób młodych, młodszych ode mnie, które np. dopiero są na etapie liceum lub właśnie zaczynają studia. Zacząłem się wiec zastanawiać skąd to się może brać.
Z jednej strony pierwsze co przychodzi do głowy to to, że może nie zwiększyła się ilość osób chcących zadać te pytania, a jedynie dostali oni łatwą możliwość zrobienia tego? W końcu jeszcze kilkanaście lat temu osoby chcące zacząć swoją przygodę z programowaniem nie miały tak powszechnego dostępu do wszelkich forów i serwisów. Każda decyzja musiała być podejmowana samodzielnie lub po konsultacji jedynie z osobami z najbliższego otoczenia, które jakby nie patrzeć rzadko były związane z tematem, o który się pytało. Jednak w tym momencie zaczyna się rodzić inne pytanie. Skoro wtedy ludzie dawali sobie radę sami znajdując odpowiedzi na nurtujące ich pytania, lub próbując samodzielnie rozwiązywać problemy, korzystając z dostępnych książek, czasopism i metody prób i błędów, nie wspominając już o czasach kiedy nawet specjalistyczne książki były trudno dostępne to dlaczego teraz tyle osób potrzebuje prowadzenia za rękę i powiedzenia co, w jakiej kolejności mają robić?
Jedną z podstaw pracy programisty jest samodzielność w rozwiązywaniu często złożonych problemów. Dlaczego więc tyle osób już na początku kariery rezygnuje z tej samodzielności? Niby mógłbym przyjąć odpowiedź, że chcą po prostu zacząć od razu od najlepszej opcji, najbardziej przyszłościowej technologii itd. ale jednak nie zrobię tego. Jako osoba, która jednak jeszcze miała okazję zahaczyć o okres kiedy Internet nie był powszechny uważam, że takie podejście wcale nie oznacza, że ktoś będzie od razu startował z lepszej pozycji. Co więcej, myślę, że kiedy próbujemy się kierować jedynie sugestiami innych i wybieramy daną ścieżkę tylko dlatego, że kilka osób powiedziało nam, że przyniesie profity w przyszłości to możemy skończyć szybciej niż zaczęliśmy. O ile lepszy byłby temat typu „Kręci mnie pisanie aplikacji webowych, próbowałem Pythona, ale mi nie podszedł, czego mogę jeszcze użyć?”, które pokazuje, że pytający wybrał jakąś drogę i sam spróbował nią iść. Co prawda nadal nie jest to idealne podejście, ale już dużo lepsze (ideałów wszak nie ma), bo jednak nie można wymagać, że ktoś na początku kariery będzie potrafił wymienić wszystkie języki czy frameworki używane do aplikacji internetowych, mobilnych czy wbudowanych.
Inną sprawą jest to, czy pytający wie co właściwie chce robić, czy ma jakąś wizję swojej kariery. Bo najgorsze co może być to podejście „chcę zacząć programować bo podobno dużo płacą. Co polecacie i czy jak będę się uczył 10h dziennie to dostanę pracę za miesiąc?”. Podchodząc do programowania warto najpierw pomyśleć co chciałoby się robić, nawet najbardziej ogólne stwierdzenie „chcę robić gry” jest już pewnym ukierunkowaniem. A jeśli nie potrafisz od razu powiedzieć czym chcesz się zajmować to chociaż możesz odrzucić rzeczy, których na pewno nie będziesz chciał robić. Bo co z tego, że sporo osób poleci Ci programowanie systemów wbudowanych skoro nawet skonfigurowanie linuxa powodowało u Ciebie chęć odstawienia komputera na co najmniej kilka tygodni?
Ostatnia kwestia to pytanie o to czy poświęcając X godzin dziennie uda się nauczyć programować w 2 miesiące. Jedyna słuszna odpowiedź na takie pytania to „nie wiem„. Serio, szybkość przyswajania wiedzy jest tak różna u różnych osób, że nie sposób udzielić odpowiedzi bez dodawania „wg mnie„, „moim zdaniem” itp. Dlatego najlepszy sposób żeby dowiedzieć, się czy dasz radę nauczyć się programowania w danym czasie to po prostu siąść i zacząć się uczyć. Jeśli ktoś Ci powie, że nie, nie da się nauczyć to po prostu zrezygnujesz już na początku? Mam nadzieję, że nie, no a jeśli niezależnie od odpowiedzi będziesz próbował to po co pytać?
Żeby nie było nieporozumień, nie uważam, że jedyna słuszna droga to odłączenie się od Internetu i nauka z samego podpowiadania składni i helpa dołączonego do IDE, wręcz przeciwnie, Internet jest bardzo pomocny. Myślę jednak, że obecnie coraz więcej osób idzie na łatwiznę i myśli, że przechytrzy system ucząc się od razu tylko tego co jest popularne wśród ogłoszeń o pracę. Gówno prawda, nie jest to przechytrzenie systemu tylko ominięcie cennego doświadczenia jakim jest samodzielne spróbowanie kilku opcji i dojście do wniosku, która najbardziej nam odpowiada, i w której będziemy najchętniej pracowali. Technologie zmieniają się na tyle szybko, że nie ma znaczenia od czego zaczniesz mając 16 lat bo zanim zaczniesz studia będziesz już musiał uczyć się czegoś nowego żeby nie zostać w tyle, a w dodatku dopóki nie musisz utrzymać rodziny masz gigantyczny komfort przy przeskakiwaniu między technologiami i sprawdzaniu czy Ci odpowiadają. Moja rada jest taka, że zanim zacznie się uczyć programowania powinno się najpierw nauczyć korzystania z książek, wyszukiwarki i zasobów Internetu w postaci blogów, artykułów czy tutoriali. Bo szansa, że znajduje się tam odpowiedź na zadane przez początkującego pytanie jest dużo większa niż szansa na dostanie jednoznacznej odpowiedzi na forum.
„A fala hejtu popłynęła strumieniem szerokim” Ja
W samo sedno.
Tylko, że ludzie po prostu nie mają bladego pojęcia dokąd idą w życiu. Programowanie jest teraz na fali, więc młodzi ludzie idą w tę ścieżkę, ale trochę na oślep. No bo jak ktoś nigdy nie interesował się programowaniem i w zasadzie dalej się nie interesuje (a tylko usłyszał, że po tym jest kasa; ale to żadne zainteresowanie nie jest), to skąd ma wiedzieć od czego zacząć? Trochę to sztuczne jest i myślę, że większość tych wannabe koderów skończy marnie (np. w pracy za 2k netto i nad nędznymi kodami).
Co nie znaczy, że to negatywne zjawisko. Programistów nigdy za dużo. Nawet jeśli coraz więcej będzie koderów kiepskich jak barszcz (bo na to się zapowiada), to jakiś procent z nich osiągnie wysoki poziom, więc generalna liczba dobrych programistów powinna się zwiększyć (a więcej dobrych programistów w stawie to większy rozwój projektów open source, szybszy rozwój startupów itp.).
Pingback: Najlepsza technologia - Marek Zając - devblog