Home

Czy studia są potrzebne by być programistą

Na ten temat wypowiadał się chyba każdy. Ja mam swoje zdanie, a swoim zdaniem lubię się dzielić, no to się podzielę.

Postaram się podejść do tego tematu maksymalnie analitycznie, bez sięgania po dowody anegdotyczne. Najpierw jednak nieco kontekstu.

Pierwszą styczność z programowaniem miałem mając jakieś 10 lat, gdy robiłem pierwsze stronki na informatykę. Potem przez gimnazjum i liceum miałem kilka pomniejszych epizodów, gdzie zarówno próbowałem się uczyć (błędnie porywając się na C++) jak i korzystałem raczej nieświadomie, np. tworząc modyfikacje do gier (głównie Morrowind). Na serio uczyć się zacząłem na pierwszym roku studiów.

Na studiach uczyłem się pisać w C (standardowo chyba na każdej uczelni), robiąc dość głupie rzeczy (kalkulatory, algorytmy i sortowanie, jak to na studiach). Studiowałem dwa lata – najpierw na UJ w Krakowie a potem na UP, też w Krakowie. Byłem bliski do zrezygnowania, ale przypomniałem sobie że kiedyś robiłem stronki, więc uznałem że zanim nauczę się programować to sobie spróbuję dorobić… W ten sposób wpadłem w wir nauki, rzuciłem studia na dobre i pare miesięcy później już pracowałem.

Teraz mam około 4 lat doświadczenia, zrobiłem już całkiem dużo projektów, uczę się od tych 4 lat bardzo dużo i nie planuję przestać. Sam nie uważam się za „senior developera”, ale za „senior frontend developera” już raczej tak. Nie uważam się za informatyka, jednak bardzo intensywnie rozwijałem się w specjalizacji frontendowej – i już od jakiegoś czasu zarówno jestem zatrudniany jako senior jak i zarabiam jak senior.

A więc czy studia potrzebne są by być programistą? No raczej nie, ale spróbuję rozwinąć nieco więcej myśli na ten temat.

Co dają studia

Przede wszystkim niekończące się dyskusje na temat tego czy warto iść na studia (a ostatnio – czy zastąpić studia bootcampem) przeważnie nie mają rzeczowej merytoryki.

Żeby móc w ogóle zastanawiać się czy warto iść na studia, to wypadałoby wyklarować co daje ich skończenie (albo uczęszczanie). Postaram się poruszyć kilka popularnych przykładów i je potwierdzić lub obalić.

Nauka jak się uczyć

Nawet zwolennicy studiów nie uważają, że uczą one wiedzy potrzebnej w pracy. Branża rozwija się tak szybko, że zanim przestarzałe instytucje przygotowałyby nowy program, to byłby on już nieaktualny.

Wiele osób uważa jednak, że na studia się idzie po to, by nauczyć się samodzielnej nauki. Na uczelni nie będziemy mieć podkładane pod nos czego i skąd się uczyć, a raczej zostanie zostawione to studentom…

Uważam że ten argument jest bardzo nietrafiony i po prostu zły. Studia absolutnie nie uczą jak się uczyć, dlatego że ludzie nie umieją się uczyć, a nauczyciele nie umieją uczyć uczenia się. Polecam przeczytać Włam się do mózgu Radka Kotarskiego (napisałem recenzję), aby zobaczyć jak bardzo spaczony jest system edukacji. Uczniowie na studiach uczą się na zasadzie zakuj-zdaj-zapomnij, nie widzą w tej nauce sensu i robią to na siłę. Nie mają też podstaw jak to robić, a wielu z nich opiera się na żmudnym czytaniu notatek kogoś kto chodził na wykłady, by zaliczyć.

Czy więc studia pomogą nauczyć jak się uczyć? Moim zdaniem tak samo skutecznie jak liceum i gimnazjum – czyli nie.

Oczywiście żeby nie generalizować – są tacy co nauczą się wszędzie, nie muszą mieć do tego studiów (np. ja), a są tacy, których żadna instytucja nie nauczy, bo po prostu mnie lub bardziej świadomie nie chcą. Jednak zdecydowanie podważam argument że studia uczą się uczyć.

Znajomości

Kolejnym argumentem, który pojawia się wśród zwolenników studiów jest zdobywanie znajomości. Mogą być to zarówno nauczyciele, którzy (jeśli mamy szczęście) mogą stać się poniekąd mentorami. Mogą być to inni studenci, którzy zarówno mogą kiedyś stać się naszymi pracodawcami lub załatwić nam pracę, ale też np. wciągnąć nas w jakiś studencki projekt jeszcze podczas trwania studiów. Na końcu można wymienić studenckie staże, które pomogą nam nawiązać kontakty z firmami.

I teoretycznie się z tym zgadzam, w końcu zawsze lepiej mieć znajomości niż ich nie mieć. Jednak czy 5 lat studiów jest warte żeby zdobyć te znajomości? 🙂 Uważam że jest to raczej efekt uboczny, szczególnie że to nie jest nic gwarantowanego. Kiedyś czytałem opinie by zawsze wybierać najlepsze możliwe uczelnie (nawet jak się ich nie da rady ukończyć), bo wtedy przebywamy wśród najbardziej ambitnych ludzi oraz najlepszych nauczycieli. Po drugiej stronie medalu możemy trafić na ludzi mało ambitnych, którzy „przedłużają sobie dzieciństwo„, a to będzie działać na nas gorzej niż ich brak (bo podświadomie przejmujemy wpływy grupy).

Czy trzeba iść na studia żeby nawiązać znajomości? Uważam że wręcz przeciwnie, bo są na to lepsze sposoby. Kiedyś, przed internetem, pewnie studia były jednym z lepszych rozwiązań, jednak dzisiaj Facebook czy Meetup łączą ludzi z branży. I w przeciwieństwie do studiów nikt nie przebywa tam na siłę. Spotykają się pasjonaci, którzy przy pizzy i piwie wymieniają się wiedzą i doświadczeniem.

Nic nie stoi na przeszkodzie żeby wkręcić się w środowisko programistów nie idąc na studia, ani nawet nie będąc programistą. Pod koniec wpisu wymienię inicjatywy (Krakowskie, jednak wiele z nich jest ogólnopolska), w które sam się angażuję.

Teoria, matematyka, algorytmika, fizyka

Mój pierwszy rok na UJ składał się z pięciu różnych matematyk (logika, analiza matematyczna, matematyka dyskretna i algebra) i tylko jednego przedmiotu związanego z programowaniem. Szczególnie na pierwszych latach jest wyjątkowo mało „branżowych” przedmiotów, a wyjątkowo dużo „podstaw teoretycznych”.

Nie będę tutaj rozpisywać się na temat sensu dydaktycznego by uczyć się od najtrudniejszych rzeczy – skwituję to tylko tym że nauka teorii bez praktyki jest wyjątkowo nieatrakcyjna i mało efektywna. Możemy jednak założyć, że duży nacisk na matematykę, algorytmikę i inne klasyczne przedmioty ścisłe jest duży oraz możemy założyć że po skończeniu studiów faktycznie będziemy taką wiedzę posiadać.

I tutaj pojawia się zasadniczo główna kość niezgody pomiędzy zwolennikami i przeciwnikami studiów. Ci pierwsi uważają że programista musi świetnie znać algorytmikę, a mocne podstawy teoretyczne sprawiają że jest się po prostu lepszym programistą. Przeciwnicy raczej jednogłośnie powtarzają, że przez całą swoją karierę nigdy nie musieli sięgać po matematykę, że w erze internetu obliczanie wszystkiego jest możliwe używając internetu (chociażby Wolfram Alpha), a algorytmu sortowania nie zaimplementowali nigdy w życiu.

Ten ostatni temat jest mój ulubiony. Na studiach uczy się różnych algorytmów sortowania – z jednej strony, jeżeli założymy że studia mają nas uczyć pracy programisty, jest to totalnie durne. W realnym świecie większość powtarzalnych problemów implementacyjnych została rozwiązana albo przez sam język (np. wbudowane metody .sort(), które zawsze dobiorą najlepszy algorytm i go zoptymalizują) albo przez biblioteki. Z drugiej strony „porusza” to mózgiem, aby nauczył się jak to działa i spróbował pogłówkować samemu.

A więc czy trzeba mieć te podstawy teoretyczne, żeby być programistą? Tutaj uważam że zależy.

Jeżeli chcemy zajmować się gałęzią programowania związaną z tworzeniem gier, animacji albo programowaniem niskopoziomowym lub takim gdzie szczególnie liczy się wydajność, uważam że zaawansowana matematyka i szczególnie algorytmika jest konieczna. Bez matematyki ciężko myśleć o jakichkolwiek animacjach, o AI, machine learningu itd. Znajomość algorytmiki, związana z niskopoziomową wiedzą na temat działania komputera pozwoli tworzyć wydajny kod – na przykład optymalizacja gier czy obliczeń.

Jest jednak ogromna ilość miejsca w innych dziedzinach programowania, a na dodatek tylko ta ilość cały czas rośnie. Właściwie cały web development, tworzenie aplikacji mobilnych i „zwykłego” oprogramowania dla „zwykłych” firm nie wymaga takiego zaplecza teoretycznego. Spora część pisania softwaru jest powtarzalna (CRUDy), korzysta się z bardzo wysokopoziomowych języków oraz abstrakcji, nawet coraz częściej nie trzeba używać SQL do baz danych, bo biblioteki ORM starczają do większości potrzeb.

Oczywiście fakt że na codzień tej wiedzy się nie używa, nie oznacza że ona szkodzi. Jednak czy jest obowiązkowa? Nie jest, jednak trzeba mieć świadomość swoich ograniczeń.

Studia a rekrutacja

W dzisiejszych czasach rynek IT pokazuje jak silnie działa podstawowe prawo popytu i podaży. Programistów jest wciąż dużo za mało względem zapotrzebowania, więc nie tylko stawki rosną bez przerwy, ale też obniżane są wymagania.

Podejrzewam że jeszcze 10 lat temu ogłoszenia o pracę dla programistów zawierały wymóg wykształcenia wyższego, szczególnie jeśli były to korporacje (tabelki się muszą zgadzać).

Dzisiaj nie tylko w IT wartość studiów się zdewaluowała. Tak naprawdę cała masa branż raz za razem potwierdza że studia nie uczą nic wartościowego i zachęcają ludzi by zaczęli jak najwcześniej pracę – 5 lat doświadczenia jest dużo bardziej wartościowe niż 5 lat studiów.

Ja sam dostaję praktycznie codziennie kilka ofert pracy. Może jedna na sto posiada wymóg wykształcenia informatycznego, okazjonalnie jest ono w kategorii „nice to have„. Co więcej rekruterzy zaznaczają że te warunki nie są traktowane poważnie 😉

Jestem w stanie w stu procentach stwierdzić że studia nie mają znaczenia w rekrutacji w Polsce. Niewiele osób o nie w ogóle pyta (mnie nigdy), tak samo jak często nie wymaga się nawet CV (bo broni się kod). Przy obecnym zapotrzebowaniu, jeżeli na rozmowę w ogóle ktoś przyjdzie, to jest sukces, a podważanie umiejętności kandydata jest wręcz ryzykowne. Ja sam bym się zaniepokoił, jeżeli firma uważa dyplom za coś ważniejszego niż moje umiejętności.

Z drugiej strony, jeżeli kiedyś hipotetycznie spadnie popyt na programistów, jest możliwe że powrócą „przesiewy” takie jak studia czy certyfikaty. Jednak uważam że osoba która obecnie wchodzi na rynek, powinna myśleć o tym co jest dzisiaj – bo nawet gdy sytuacja się zmieni, to wtedy będzie już mieć kilka lat doświadczenia.

Warto wspomnieć, że moje doświadczenia dotyczą rynku Polskiego, a z tego co wiem w USA studia warte są dużo więcej niż u nas. Tam studia reprezentują poziom (w przeciwieństwie do Polski), więc są zdecydowanie bardziej pożądane.

Ponadto, jeśli ma się ambicje startować do dużych firm, gdzie startuje więcej programistów niż jest miejsc, musimy pamiętać że to my będziemy musieli się starać a nie firmy. A one mogą robić (i często robią) sprawdziany z algorytmiki, znienawidzony whiteboard coding itd. Co kto lubi, ja nie rozumiem ludzi, którzy mają ambicje pracować dla wielkich korporacji, ale każdy musi prowadzić swoją karierę zgodnie ze swoimi potrzebami.

Alternatywy dla studiów

Alternatywą dla studiów jest nauka samemu lub ostatnio popularne bootcampy.

W erze internetu wiedza jest na wyciągnięcie ręki i wystarczy jedynie motywacja by nauczyć się programowania. Ja przy pomocy youtuba, kilku książek i kilku darmowych kursów online znalazłem pierwszą pracę od zera w pięć miesięcy. Oczywiście była to intensywna rzeźba po kilka godzin dziennie. Warto pamiętać że dzisiaj dużo trudniej dostać pracę jako junior, jednak nie ma znaczenia czy jesteśmy samoukiem czy po studiach, bo studia mogą nauczyć nas wspomnianej teorii, ale wciąż dają zerowe przygotowanie do pracy.

Nauka programowania by dostać pierwszą pracę niektórym zajmie miesiące, a innym lata. Bootcampy programistyczne (kilkumiesięczne intensywne kursy ukierunkowane na praktyczną wiedzę) zdecydowanie przyspieszą ten proces.

Sam przez pare miesięcy byłem nauczycielem w jednej z takich firm. Nie chcę poruszać tego tematu w tym wpisie (tldr nie polecam), jednak są dwie zasadnicze zalety takiego kursu: ukierunkowanie i mentoring.

Poprzez ukierunkowanie mam na myśli program przygotowany w określonej „ścieżce rozwoju”, np. Frontend Developer (z Reactem) czy Backend Developer (Ruby). Jest to pewna droga na skróty, która teoretycznie pozwala zminimalizować czas potrzebny by wejść w branżę. Uważam że człowiek najwięcej się uczy gdy już się znajdzie w swojej pierwszej pracy, więc uważam że jest to całkiem OK.

Poprzez mentoring rozumiem opiekę nad rozwojem przez kogoś kto jest czynnym programistą. Bootcampy posiadają tego typu mentorów, ja sam zajmuję się czymś takim prywatnie (jak coś to napisz). Tego typu osoba poprzez wskazywanie błędów pozawala wycisnąć maksymalne efekty, coś jak trener na siłowni.

Wadą bootcampów jest oczywiście cena – kosztują koło 10000zł, co dla większości ludzi jest dużym kosztem.

Temat jest kontrowersyjny, bo „miejsce” dla juniorów zdaje się być wypełnione (tylko kilka procent ofert dotyczy juniorskich stanowisk), a bootcampy obiecują ogromne pieniądze nawet ludziom którzy absolutnie nie mają do tego predyspozycji i raczej programistami nie zostaną.

Czy kandydat po pięciu latach studiów jest „więcej wart” niż taki po półrocznym kursie? Ciężko powiedzieć i chyba nie jestem w stanie na to odpowiedzieć. Ten pierwszy teoretycznie powinien coś umieć programować (chociaż znam takich co przeszli przez studia i nic nie umieją) i ma też solidne zaplecze teoretycznie, więc „jest z czego rzeźbić”. Ten drugi nie ma tego zaplecza, jednak potencjalnie można od razu wrzucić go do projektu i będzie wiedział jak pokroić stronkę w HTML, jak zrobić jakieś interakcje z jQuery itd – więc oferuje jakąś wartość biznesową.

Nie jestem w stanie porównać dwóch czysto hipotetycznych modeli (bo wszystko jest indywidualną kwestią każdej osoby), ale jeżeli spojrzę z perspektywy takiego kandydata (a nie rekrutera), to na pewno zadam sobie pytanie – czy skoro zarówno 5 lat studiów jak i 6 miesięcy kursu daje mi pracę, to czy nie warto mieć te ekstra 4.5 roku „życia” więcej? Pięć lat doświadczenia w branży dla większości programistów (oczywiście takich którzy się rozwijają, a nie zasiadują się w korpo) jest wystarczającym czasem by stać się seniorem z 15k.

Często pyta mnie młodzież o to jak zacząć, więc spróbuję odpowiedzieć na pytanie:

Co robić po skończeniu szkole średniej?

Jeżeli ktoś już w szkole średniej jest zdecydowany by zostać programistą, to jest szczęśliwcem. Niewiele osób w tym wieku jest świadoma tego co chce robić w życiu, a zamiast iść do pracy, zdobyć doświadczenie (gdziekolwiek) a potem zdecydować czy rozwijać swoją edukację w tym temacie, to decyduje się iść na randomowe studia by rodzice dali im spokój.

Jeżeli w szkole średniej miało się styczność z programowaniem (lub po prostu się już w liceum programowało – znam takich), uważam że droga jest tylko jedna – iść do pracy. Wtedy kiedy rówieśnicy będą kończyć studia, taka osoba będzie już bardzo doświadczona. Nic nie stoi na przeszkodzie, by mając już pracę i dobre zarobki iść na studia zaoczne lub zredukować etat i studia skończyć (jeśli czujemy taką potrzebę).

Jeżeli za to chcemy iść w tym kierunku, ale nie mieliśmy styczności z programowaniem, uważam że warto iść na studia, ale tylko dlatego że w Polsce są darmowe i po prostu nic nie stracimy. Nie nastawiałbym się jednak absolutnie na to by je kończyć. Zastanowiłbym się nad jakimiś w miarę „nowoczesnymi” kierunkami / wydziałami, które redukują nieco matmy i w zamian oferują programowanie w środowiskach zbliżonych nieco do XXI wieku. Na prywatnych uczelniach często można spotkać wykładowców którzy nawet są programistami (jak wiem jak to absurdalnie brzmi, ale w większości programowania uczą matematycy i fizycy, którzy nigdy nie pracowali jako programiści…).

Czy można nauczyć się teorii bez studiów?

Fakt że studia uczą nas teorii, nie oznacza że mają one wyłączność do przekazywania tej wiedzy. Nie tylko możemy własnoręcznie przerobić materiał uczelni sami (we własnym tempie, godząc go z praktyczną wiedzą), ale możemy wręcz uczyć się od najlepszych wykładowców – wykłady z Harvardu czy MIT są dostępne online i jest to oznaka prestiżu dla amerykańskich profesorów (polski powie że nie wolno… kompleksy). Oczywiście wszelkie książki czy szkolenia są dla nas dostępne, z dyplomem czy bez.

Sam uważam że każdy, kto kocha programować i to jego pasja i tak sięgnie po tego typu wiedzę. Ja sam mimo że nie muszę wychodzić poza frontend, staram się na bieżąco uczyć teorii, a w tym roku planują nauczyć się innego, niskopoziomowego języka by zdobyć nową perspektywę.

Jeżeli się chce i ma ambicje, to wiedza stoi przez każdym otworem. Jeżeli się nie chce, to nawet najlepsze studia nic nas nie nauczą, więc po co na nie iść?

Ja miewam okresy gdy myślę by iść na studia zaocznie i teraz, mając już kilka lat doświadczenia rozszerzyć swoją wiedzę, jednak zawsze gdy myślę o ich poziomie i tym kto będzie mnie uczył i jaki jest program, to mi się odechciewa. Staram się jednak czytać książki, które budują moją wiedzę teoretyczną.

Czy warto iść na studia?

Konkludując, moim zdaniem:

  • Jeżeli chcemy zajmować się gamingiem, AI, machine learningiem, nisko-poziomowym programowaniem – warto
  • Jeżeli chcemy jak najszybciej wejść do branży – nie warto
  • Jeżeli źle znosiliśmy w szkole średniej masę „niepotrzebnych” przedmiotów, możliwe że studia szybko nas sfrustrują i nie wytrzymamy – nie warto
  • Jeżeli jesteśmy „mózgowcami”, kochamy matematykę, fizykę itd – studia będą dla nas przyjemnością, więc warto.
  • Jeżeli chcemy zostać programistą ale nie czujemy się „jajogłowym” – nie warto.
  • Jeżeli chcemy zajmować się „lekkim” programowaniem (frontend, wysokopoziomowe języki), studia mogą nas zniechęcić – raczej nie warto

Czy warto kończyć studia?

Jeżeli kolidują z pracą, to moim zdaniem nie. Jeżeli jesteśmy już pod koniec i niewiele nam zostało, to czemu nie?

Ale papier – na 99% nikt o niego nie zapyta.

Czy studia zniechęcają do programowania?

Na sam koniec chciałbym poruszyć temat który wyjątkowo mnie drażni. Uważam że w przypadku nauki bardzo ważna jest indywidualizacja, a osobiste predyspozycje są bardzo ważne i decydują o tym czy skończymy studia jako programiści, czy zniechęcimy się na dobre.

Sam mam (anegdotyczny) przykład z mojego gimnazjum. Mimo że wcześniej byłem dobry z matematyki i raczej ścisły, to w gimnazjum miałem wyjątkowo złą nauczycielkę matematyki i wyjątkowo dobrych nauczycieli polskiego i historii. Zmieniło to moje życie do tego stopnia, że znienawidziłem matematykę i poszedłem do klasy humanistycznej w liceum. Wystarczyło do tego trzech nauczycieli.

Programowanie jest trudne i jest to niezaprzeczalne. Przy deficycie programistów uczelnie powinny motywować i zachęcać ludzi by zaczęli programować. Jak robią? Bombardują uczniów przedmiotami, które dla większości są bardzo trudne i tworzą ogromny przesiew (na mojej uczelnie po pierwszym roku odpadało jakieś 70% osób). Nie zachęcają do programowania, lecz wręcz przeciwnie, uczą przestarzałych, beznadziejnych i trudnych języków, których nie używa się nigdzie poza uczelniami.

Czy jest warto odrzucać całą masę potencjalnych programistów, którzy nie musieli zostać algorytmikami, ale mogli być dobrymi frontendowcami czy backendowcami?

Niestety studia uczą w kolejności od najtrudniejszych, do najłatwiejszych. Od najniższej abstrakcji (matematyka i close to the metal), dopiero kończąc na zrozumiałych dla człowieka abstrakcjach (programowanie obiektowe, języki wysokopoziomowe).

Czy gdyby uczelnie zaczęły od drugiej strony – od zainspirowania studentów prostymi językami typu Python, pokazania im że programowanie może być przyjemne i wciągające, a dopiero potem schodzić do coraz trudniejszych tematów?

Obecny program studiów informatycznych mogę porównać do nauki czytania – zaczynając w przedszkolu od Lema, a kończąc w liceum na Janie Brzechwie. Moim zdaniem to jest po prostu bez sensu.

I żeby być uczciwym – znam osoby, które uważają że lepiej im się uczyć w tej kolejności. Ale jestem pewien że są oni mniejszością – w końcu ilu mieliście w klasie „nerdów„, którzy w przeciwieństwie do reszty klasy mieli szóstki z matematyki? To właśnie dla nich zdaje się być stworzony program studiów… Szkoda pozostałych.

A na koniec dowód anegdotyczny (więc się nie liczy) – absolutna większość znajomych programistów, których pytam o studia, mówi że żałuje i by na nie nie poszła.

Linki

Temat jest wrażliwy, więc podkreślam że jest to moja opinia oparta na moich obserwacjach. Nie robiłem na ten temat specjalnych badań na większej grupie ludzi, chociaż pewne wnioski można wyciągnąć np z ankiet Stack Overflow.