Programista samouk i z dyplomem - który lepszy?
O micie, że programista musi ukończyć studia, napisaliśmy już w jednym z naszych artykułów. Formalne wykształcenie ma jednak swoje atuty. Warto studiować, ponieważ programista z dyplomem zyskuje umiejętności, których brakuje bardzo wielu samoukom.
Patrząc na zatrudnienie w niektórych firmach z branży IT, można by dojść do wniosku, że studia to zbędny luksus dla programistów, ponieważ w wielu przypadkach nawet jedna trzecia zespołu nie ma wykształcenia informatycznego. To jednak pogląd daleki od myślenia młodych Polaków. Potwierdzają to dane Ministerstwa Nauki i Szkolnictwa Wyższego, według których informatyka, obok medycyny i filologii, to najbardziej oblegany kierunek studiów w 2019 roku. Według danych, na inżynierię i analizę przypada średnio 17 kandydatów na jedno miejsce. W tej sytuacji trudno sądzić, że osoby chcące zostać programistami nie stawiają na formalne wykształcenie. Jak wynika natomiast z badania portalu Stack Overflow, Około 72% zawodowych Software Developerów na świecie ukończyło studia. Z zeszłorocznego badania z kolei wynikało, że blisko 16% programistów uważa formalne wykształcenie za bardzo ważne, a 25% - za ważne. Tylko nieco ponad 11% jest zdania, że ukończenie studiów nie ma żadnego znaczenia. Takie dysproporcje to nie przypadek. Chociaż samouk może mieć szeroką wiedzę, często brakuje mu jednak tego, co zyskuje się w formalnej edukacji. Postaramy się tutaj zidentyfikować te braki.
Umiejętności samouka i dyplomowanego programisty – porównanie
Samouk musi posiadać pewne cechy charakteru, które pozwolą mu zdobyć odpowiednią wiedzę. Jeśli napiszemy o byciu konsekwentnym, systematycznym, o wykazywaniu uporu w zdobywaniu wiedzy, to takie cechy można z powodzeniem odnieść zarówno do samouka, jak i do programisty z formalnym wykształceniem. Tyle że ten pierwszy musi wykazać się większym uporem, konsekwencją czy systematycznością, ponieważ nikt go nie mobilizuje (czytaj: nie wyznacza mu terminu egzaminu czy zaliczenia). Samouk musi poświęcić więcej czasu i wysiłku na zdobycie odpowiednich informacji i wiedzy. Jednak programista posiadający formalne wykształcenie zyskuje coś więcej. Wielu Software Developerów po studiach podkreśla, że nauczyli się uczyć efektywnie. To kluczowa umiejętność, jeśli weźmie się pod uwagę fakt, że dobry programista powinien nastawiać się na nieustanny rozwój i poszerzanie swojej wiedzy. Studenci uczą się tego na pozornie nieprzydatnych przedmiotach, takich jak matematyka. Teoretycznie może się ona przydać w niektórych gałęziach informatyki, jednak większość nie znajdzie dla niej zastosowania w całej swojej karierze. Podobnie sytuacja wygląda z zajęciami laboratoryjnymi, z których trzeba przygotowywać wielostronicowe raporty spełniające określone kryteria. To wszystko jednak procentuje w późniejszej karierze i objawia się w metodycznym podchodzeniu do kolejnych problemów.
Z cytowanych już tutaj badań Stack Overflow wynika, że co najmniej 90% Software Developerów regularnie dokształca się samodzielnie, korzystając przy tym bardzo często z oficjalnej dokumentacji i internetu.
“Domowa” nauka programowania różni się od tej formalnej stylem. Na uczelni studenci dowiadują się o tym jak zbudowane są kolejne komponenty, a dopiero po opanowaniu tej wiedzy przystępują do ich wykorzystania. Samouk postępuje odwrotnie - wiedząc, że chce zbudować X musi jak po nitce do kłębka dowiedzieć się, jakich komponentów potrzebuje do konkretnego projektu. Programiści po formalnej edukacji często lepiej rozumieją różne złożone problemy i ich istotę niż koderzy-samoucy. Często bywa tak, że ci ostatni znają różne frameworki i technologie, a także potrafią zrealizować jakąś funkcjonalność czy zadanie, tak aby oprogramowanie działało, jednak nie zawsze wiedzą, dlaczego działa. Nierzadko brakuje im podstaw programowania, które zdobywa się na studiach. Software Developer po technicznej uczelni ma świadomość, dlaczego coś jest realizowane w taki, a nie inny sposób, wie, jak poprawnie coś zaprojektować. W takiej konfrontacji zdarza się, że zarówno samouk, jak i programista z formalnym wykształceniem dochodzą do właściwego rozwiązania, ale ten ostatni odnajduje drogę krótszą i bardziej trafną. Samoucy często po prostu pomijają tego rodzaju informacje, nie zawsze znają algorytmy czy wzorce projektowe, a te braki wychodzą potem w praktyce zawodowej. Niewątpliwą zaletą studiów programistycznych jest usystematyzowana wiedza, do której łatwo potem coś “dodać”.
Dostęp do narzędzi edukacyjnych
Niestety, najczęściej samouk jest w gorszej sytuacji niż student, jeśli chodzi o dostęp do narzędzi edukacyjnych. Mamy tu na myśli nie tylko rozwiązania technologiczne. Przykładem jest chociażby kontakt z profesorami, rozmowy z nimi, odkrywanie bardziej zaawansowanych koncepcji na bazie tego, co zostało przerobione na zajęciach. Samouk przeważnie nie ma szansy być w ten sposób nakierowywany. Taki człowiek musi sam szukać narzędzi edukacyjnych, zaczynając od internetu i takich portali jak na przykład Stack Overflow, GitHub czy Quora, aż po książki i dokumentacje poszczególnych technologii. Może poszukać też swoich mentorów (np. na blogach i w książkach), którzy przeprowadzą go przez proces rozwoju.
Problem z wiedzą na studiach jest taki, że programy poszczególnych przedmiotów nie są aktualizowane co roku, a co kilka lat. To wystarczy, by przekazywana wiedza była nieaktualna. Czasem jest nieco gorzej w tym aspekcie i uczenie się Assemblera na kontrolerach z lat 70 na polskich uczelniach nie jest rzadkością (w zasadzie nie było by w tym nic złego, gdyby nie to, że ten sprzęt trzyma się już “na taśmę klejącą”). Cenne jednak jest to, że podstawy informatyki pozostają niezmienne, tak więc wiedza z nich będzie aktualna jeszcze przez długi czas. Natomiast zdobywanie formalnego wykształcenia to możliwość czerpania z wiedzy i doświadczenia wykładowców. Taka edukacja to nie tylko przekazywanie wiedzy, ale przede wszystkim tworzenie mocnych podstaw pod przyszłe sukcesy.
Nie można także zapominać, że wiele firm z branży IT ściśle współpracuje z uczelniami, zapewniając studentom staże i umożliwiając poznanie pracy Software Developera „od podszewki”. To pozwala zdobyć absolwentom nowe doświadczenia, rozwija ich kompetencje miękkie i zwiększa ich pewność siebie na przykład w czasie rekrutacji (przychodzą do pierwszego pracodawcy, wiedząc, czego się spodziewać na stanowisku, które ich interesuje). Samouk wybierze raczej juniorską posadę w mniejszej firmie. Komercyjne rozwijanie software’u szczególnie w większym zespole, z bardziej doświadczonymi programistami to droga do bardzo szybkiego rozwoju. Nauka w takiej atmosferze jest szybka, bo wynika z dużej ilości praktyki. Nie ma w zasadzie czasu na uczenie się teorii w oderwaniu od praktyki. Weryfikacją będzie ocena zespołu na code review, a nie natomiast ocena z kolokwium czy raportu.
Dwie strony medalu
Zarówno samodzielne uczenie się programowania, jak i studiowanie mają zalety i wady. Osoby uczące się samodzielnie często stawiają na praktykę, której przeważnie brakuje osobom kończącym studia. Te ostatnie za to dysponują najczęściej solidną podstawą teoretyczną. Samouk to zwykle pasjonat, który szuka wiedzy także w kontaktach z innymi, szybciej niż student staje się aktywnym uczestnikiem społeczności technologicznej. Mało tego, bywa, że samouk ma szybciej kontakt z nowinkami technicznymi, ponieważ program na studiach nie zawsze nadąża za błyskawicznie rozwijającą się branżą IT.
Luka edukacyjna może pojawić się zarówno u człowieka z formalnym wykształceniem, jak i u samouka. Wydaje się jednak, że to właśnie ten ostatni jest bardziej narażony na braki w dziedzinie programowania. Powodem tego może być chociażby konieczność samodzielnego doboru materiałów do nauki, które nie muszą wcale obejmować wszystkich najważniejszych zagadnień. Oczywiście nie jest to reguła. Dlatego na koniec warto podkreślić, że brak formalnego wykształcenia nie musi przeszkadzać w karierze czy w byciu dobrym programistą. Nie zapominajmy, że wielu wybitnych programistów XX i XXI wieku nie posiada formalnego wykształcenia, a dokonali przełomu w IT.
Wszystkie plusy i minusy różnych sposobów zdobywania wiedzy programistycznej, które przedstawiliśmy to czysto teoretyczne rozważania. Ostatecznie to osobowość każdego decyduje o tym, jaki model nauki będzie najbardziej efektywny. Jedni wolą korzystać ze wskazówek bardziej doświadczonych, dla drugich liczy się dreszczyk emocji w samodzielnym poszukiwaniu rozwiązań. Niektórzy potrzebują rygoru uczelni, aby systematycznie się uczyć, a innych ten rygor może ograniczać i “obrzydzać” im zdobywanie wiedzy. Najważniejsze to znaleźć system odpowiedni dla siebie.