Czy programowanie jest trudne?
Wokół branży IT krąży wiele mitów. Wiele z nich wzajemnie się wyklucza, co nie przeszkadza w ich powtarzaniu i rozprzestrzenianiu. Z jednej strony słyszymy, że na każdego, kto ukończy podstawowy kurs programowania, czekają ogromne pieniądze i splendor do końca życia. Co ważniejsze, sama robota jest prosta, a większość dnia spędza się przy automacie z kawą i rozmawie ze współpracownikami.
Pytając osoby głoszącej taką tezę, dlaczego sama nie pójdzie na taki kurs, dowiadujemy się natomiast czegoś innego, a mianowicie, że programowanie to jednak bardzo trudna rzecz i sam kurs nie wystarczy, a tak poza tym to w szkole z matematyki zawsze była trójka.
Zastanówmy się zatem, czy programowanie rzeczywiście jest tak trudne (lub łatwe) jak zwykło się je przedstawiać. Czy wymaga nadludzkich zdolności i doktoratu z nauk ścisłych, czy może jest czymś, co każdy po trzech miesiącach może zrozumieć? Jak to często ze stereotypami bywa, w każdej z tych opinii jest ziarenko prawdy. W tym artykule odkryjemy, co jest tym ziarenkiem.
Krótka odpowiedź na tytułowe pytanie
Programowanie nie jest trudne. Zanim jednak zainwestujesz swoje oszczędności w najbliższy kurs programowania, doczytaj artykuł do końca. Programowanie nie jest trudne i każdy może zacząć programować. Nie ma żadnych wymagań określających, kto się nadaje, a kto nie. Wiedza matematyczna nie jest w żaden sposób potrzebna, by programować. Jeżeli rozumiesz zależności przyczynowo-skutkowe (np. że kopnięcie piłki powoduje jej toczenie się po murawie), będziesz w stanie pisać programy.
Z faktu, że programowanie nie jest trudne, nie należy błędnie wyciągać wniosku, że programowanie jest dla każdego. Gotowanie czy kopanie piłki także do trudnych nie należy. Mimo tego nie wszyscy pragną kariery szefa kuchni czy piłkarza (szczególnie po osiągnięciu pewnego wieku).
Programowanie jako zdolność automatyzacji pewnych czynności jest łatwe. Jednak jako ścieżka kariery może okazać się trudne.
Dlaczego nie jest trudne?
Jestem w stanie zaryzykować stwierdzenie, że każdy jest w stanie nauczyć się gotować, tak samo, jak każdy jest w stanie nauczyć się programować. Jeśli jednak te czynności nie będą przynosić nam satysfakcji, taka nauka może być dla nas niesamowicie wyczerpująca.
Programowanie jako koncept wyewoluowało z obliczeń matematycznych. Zanim powstały maszyny liczące, słowo “komputer” oznaczało zawód polegający na przeliczaniu ogromnej liczby równań potrzebnych np. do projektowania trajektorii lotu na Księżyc. Prawdopodobnie z racji swojej historii, wiele osób kojarzy programowanie właśnie jako zajęcie dla matematyków. Często powtarzana opinia “jeśli nie umiesz matematyki, nie będziesz w stanie programować” pomogła rozpowszechnić ten stereotyp.
Warto zauważyć, że to, co mogło być prawdą w latach 50-tych XX wieku, nie musi się sprawdzać w dzisiejszych czasach. Na koncerty muzyki rozrywkowej przestaliśmy chodzić w sukniach i garniturach, więc może i w dziedzinie programowania nastąpił jakiś przełom?
Tak się składa, że technologia rozwija się bardzo szybko. Kiedyś, by zaprogramować maszynę, potrzebna była ogromna wiedza techniczna i dogłębna znajomość działania tej maszyny. Dziś programowalne elementy znajdują się choćby w klockach LEGO czy innych interaktywnych zabawkach dla przedszkolaków.
Jeśli uważasz, że to nie jest prawdziwe programowanie, to, niestety, jesteś w błędzie. Zabawki edukacyjne dla dzieci uczą dokładnie tych samych konceptów programowania (zmienne, pętle, warunki), z których powstają popularne aplikacje mobilne czy pojazdy autonomiczne.
Nowoczesne języki programowania stawiają na produktywność programisty, co oznacza ukrywanie “nudnych” elementów wnętrza komputera i dostarczenie jak najprostszej formy wyrażania swoich zamiarów.
Kontynuując nasza analogię kuchenną, przygotowywanie posiłków także składa się z kilku prostych konceptów: krojenie, gotowanie, smażenie, pieczenie. Znając te podstawy jesteśmy w stanie stworzyć w zasadzie dowolne danie. Jeśli jesteśmy zainteresowani tematem, szukamy nowych przepisów i interesujemy się tym, jak w ciekawy sposób łączyć nowe smaki, gotowanie będzie nam przychodzić z pewną łatwością. Jeśli jednak naszym jedynym celem jest dostarczenie organizmowi niezbędnej energii, dużo lepiej spożytkujemy czas kupując gotowe danie.
Dlaczego jest trudne?
O ile zdobycie podstawowych umiejętności programowania jest łatwe, nie znaczy to jeszcze, że rozwijanie się w tej dziedzinie będzie tak samo łatwe. Czym innym jest przygotowanie sobie schabowego, a czym innym jest praca w restauracji i wymyślanie własnych dań.
Nauczenie się programowania pozwala nam tworzyć proste programy i czasami to jest dokładnie to, co nam wystarcza do szczęścia. Jeśli jednak chcemy robić to zawodowo, musimy pamiętać o tym, że aplikacje rzadko składają się z trzech pętli i dwóch warunków, a używana przez nas technologia ciągle się rozwija. Do tego nie jestem pewien, czy istnieje jakakolwiek inna branża, w której wiedza tak szybko traci wartość. Umiejętności, które nabyliśmy dwa lata temu, dziś mogą być już absolutnie bezużyteczne.
Z tego powodu w branży IT nie tyle liczy się wiedza, jak coś zrobić, co umiejętność ciągłego zdobywania wiedzy i rozwiązywania problemów, które jeszcze nie zostały rozwiązane.
Jeśli lubisz się rozwijać i pasjonuje Cię świat nowych technologii, prawdopodobnie odnajdziesz się w tym świecie. Jeśli jednak liczysz na to, że po ukończeniu kursu (lub kilku kursów) złapiesz dobrze płatną pracę i przeczekasz tam do emerytury, muszę Cię rozczarować. Ciągła nauka i ciągła zmiana to jedyne stabilne rzeczy w branży.
Programowanie jako kariera wiąże się także z innymi trudnościami. W porównaniu z wieloma innymi branżami, programiści mają zwykle dużo większą swobodę w podejmowaniu decyzji. Nikt nie narzuca Ci, w jakich godzinach masz pracować, jakiego rozwiązania masz użyć, czy w jakiej kolejności masz wykonać zadania. Dla osób przyzwyczajonych do sztywnych struktur takie stwierdzenie może wywoływać skojarzenie z rajem na Ziemi. Prawda jest jednak taka, że wykonywanie czyichś poleceń jest dużo prostsze niż zarządzanie swoją własną pracą.
Droga naznaczona wybojami
Jeden z najgorszych mitów dotyczących programowania, jakie znam, brzmi następująco: “Zrobię kurs w dwa miesiące i znajdę wymarzoną (finansowo) robotę”. Jesteśmy w stanie nauczyć się podstaw języka obcego w dwa miesiące. Jesteśmy w stanie nauczyć się w dwa miesiące gotować czy grać w piłkę nożną. Jeśli jednak wydaje nam się, że takie przygotowanie to wszystko, czego potrzebujemy, by wejść na rynek pracy i konkurować z innymi kandydatami, to warto się zastanowić jeszcze raz.
Niezależnie od tego, jakimi zdolnościami intelektualnymi dysponujemy, by zostać programistą potrzebujemy się uczyć i rozwijać. Powtarzałem już to kilka razy w tym artykule, bo chciałbym byście właśnie to zapamiętali. Nauka nowych zdolności ma to do siebie, że długoterminowych sukcesów nie osiąga ten, kto ma najlepsze predyspozycje. Osoba o atletycznej budowie z łatwością przetrwa pierwszy trening gry w piłkę, a ktoś dobrze znający matematykę szybciej zrozumie znaczenie funkcji w programowaniu. Łatwiejszy start nie spowoduje natomiast automatycznie łatwiejszego rozwoju. Proces nauki programowania (jak i każdej innej zdolności, jeśli chcemy ją wykonywać na wysokim poziomie) to nie sprint, a raczej maraton.
Żeby zdobyć naszą wymarzoną pozycję, potrzebować będziemy sporej dozy samozaparcia, pokory i dyscypliny. Jeśli jesteśmy w stanie podnieść się po początkowych porażkach i zamiast poddawać się, zaczniemy szukać przyczyn tych porażek, jesteśmy na dobrej drodze do osiągnięcia mistrzostwa.
Wiecie w jaki sposób najłatwiej zagwarantować sobie sukces? Zarówno samozaparcie, jak i dyscyplina, będą dla nas bardziej osiągalne, jeśli potraktujemy programowanie jako coś fascynującego, a nie jako przymus. Nad pokorą musimy jednak pracować samodzielnie.
Jak ułatwić sobie podróż?
To, co zaraz powiem, może Cię zdziwić. By nauczyć się programowania, nie musisz iść na studia informatyczne (które swoją drogą nie uczą programowania), zapisywać się na kurs prowadzony przez trenera, czy oglądać materiałów wideo na popularnych platformach. Najlepszą formą nauki programowania jest sama praktyka programowania - tworzenie własnych programów, rozwiązywanie istniejących problemów, eksperymentowanie i szukanie lepszych rozwiązań.
Czy to oznacza, że wszystkie te kursy są bezużyteczne? Wręcz przeciwnie! Żeby nasza praktyka przyniosła korzyści, potrzebujemy także informacji zwrotnej. Bardzo często informacji zwrotnej dostarcza nam samo środowisko: gdy kopniemy piłkę tysiąc razy zauważamy, jaki wpływ ma ułożenie naszej stopy na tor lotu piłki.
Czerpanie informacji ze środowiska wiąże się niestety z dwoma problemami. Po pierwsze, jest niesamowicie czasochłonne. Po drugie, możemy wyciągnąć błędne wnioski i utwierdzić się w nich, tym samym pogarszając swoje wyniki.
Jeśli zastanawiasz się, dlaczego atleci zatrudniają trenerów, odpowiedzią na to pytanie jest właśnie informacja zwrotna. Wyszkolony trener potrafi natychmiast wychwycić popełniane przez nas błędy i zwrócić nam na nie uwagę przy pierwszej okazji. Nie musimy błądzić setki razy, by na końcu dojść do poprawnego rozwiązania.
Z tego właśnie powodu kursy programowania cieszą się popularnością. Trenerzy nie tylko przekazują nam wiedzę, która zwykle jest dostępna za darmo w Internecie, ale przede wszystkim oszczędzają nam mnóstwo czasu, pomagając odróżnić złe rozwiązania od dobrych.
Praca programisty to nie tylko programowanie
Wracając do tematu programowania jako ścieżki kariery, nie zapominajmy, że nie samym programowaniem programista żyje. Jak opisywałem w jednym z poprzednich artykułów, “Jak zdobyć doświadczenie w IT”, samo programowanie jest zwykle końcowym etapem długiego procesu. To, że umiesz programować, nie znaczy, że będziesz w stanie wykonywać także inne opisane tam obowiązki.
Między programowaniem hobbystycznie a pracą zawodową, są pewne znaczące różnice i warto o nich pamiętać. Nawet jeśli programowanie jest nasza pasją i z zaciekawieniem śledzimy rozwój nowych technologii, niekoniecznie znaczy to, że odnajdziemy się w zawodzie programisty. Zwłaszcza, że zawodowi programiści nieczęsto mają okazję sami wybierać technologie czy zadania, nad którymi będą pracować. Dotyczy to w szczególności osób na początku swojej kariery.
A co z mitycznym spędzaniem czasu pracy przy automacie z kawą? Dla osoby, która nie jest przyzwyczajona do tego typu pracy, widok osób dyskutujących dość swobodnie w czasie pracy może być oznaką nieróbstwa. Biorąc pod uwagę fakt, iż wymiana wiedzy jest jedną z podstaw wydajnego programowania, takie swobodne dyskusje także są częścią pracy programistów. Do tego, jak wspomniałem wyżej, praca programisty to rozwiązywanie problemów. Istnieje więc całkiem spore prawdopodobieństwo, że to, co ktoś z zewnątrz wziął za niekończącą się przerwę, w rzeczywistości było szybką burzą mózgów i próbą rozwiązania skomplikowanego problemu.
Pamiętaj, także Ty możesz się nauczyć programowania i nie jest to tak trudne, jak niektórzy przedstawiają. Sama umiejętność nie uczyni jednak z Ciebie programisty. I dobrze, bo świat byłby nudny, gdyby wszyscy robili to samo. Zwłaszcza, że IT to znacznie więcej niż tylko programiści.