Czy programiście potrzebne są studia?

Cześć,
dziś będzie trochę mniej technicznie – dziś zdecydowałem że dołożę swoje zdanie na temat tego czy programiście potrzebne są studia. Temat ten doczekał się wielu wpisów i jeszcze większej ilości opinii popieranych przeróżnymi argumentami. Spędziłem 5 lat na studiach i wypracowałem, wkładając w to sporo pracy, tytuł magistra inżyniera. W momencie pisania tego artykułu mam ~4,5 roku doświadczenia zawodowego zdobywanego w 3 firmach i takich technologiach jak Java, JS, PHP, Python, SQL z dodatkami Lua, .NET’a czy C. Dotknąłem ogromną ilość bibliotek i framework’ów – jQuery, ExtJS, Zend, Kohana, SqlAlchemy, Symfony, Celery, Django, Flask, Hibernate, Spring, Git, Mercurial, Gevent.. No, ogólnie nie sposób wymienić je wszystkie. Ogólnie – trochę pochodziłem na studia i trochę kodu napisałem w swoich życiu. Więc imho – mam praktyczny pogląd na zadane w tytule posta pytanie;)

Zacznijmy od tego jak wyglądają studia informatyczne.

Zazwyczaj pierwsze dwa-trzy semestry to matematyka i podstawy programowania. Z tym że proporcje są mocno zaburzone – znacznie więcej matematyki niż programowania i to matematyki w różnej formie, od tej czysto „teoretycznej” gdzie liczysz przebieg zmienności funkcji, „bawisz się” macierzami, statystyką, prawdopodobieństwem itp. do nieco bardziej praktycznej – zazwyczaj wykorzystanej zgodnie z profilem wydziału na którym studiujesz. Natomiast samo programowanie to zabawa w piaskownicy z pętlami, instrukcjami warunkowymi, funkcjami a na sam koniec – obiektami.

Czy to stracony czas?

Raczej nie, mimo wszystko tutaj uczysz się też myślenia specyficznego dla problemów matematyczno-programistycznych. Już tłumaczę co mam na myśli…

Żeby sprawnie liczyć całki, pochodne czy granice musisz wysiedzieć swoje godziny. No nie ma innej możliwości.
Ale!
Jeśli świetnie liczysz granice to znacznie szybciej i sprawniej zaczniesz liczyć całki. Nie przez to że algorytm jest podobny ale przez to że pewien zestaw potrzebnych umiejętności już nabyłeś przy granicach.

Podobnie jest z programowaniem – jeśli świetnie poznasz jeden język to próg wejścia w inny jest znacznie mniejszy. Nie oznacza jednak że zerowy. Nie będziesz znał dobrych praktyk. Kod który będziesz tworzył w nowym języku nie będzie wykorzystywał potencjału tego języka a w dodatku na 99% wynajdziesz „koło na nowo” – czyli napiszesz coś co już istnieje. Tak czy siak – gołym okiem widać analogię do matematyki.

Ponad to – złożona matematyka na pewnym stopniu abstrakcji nadal jest zestawem podstawowych operacji matematycznych – dodawania, odejmowania, mnożenia i dzielenia. I znów analogicznie jest w programowaniu – na pewnym poziomie abstrakcji – jest ono zestawem podstawowych działań – ifów, pętli itp a na jeszcze niższym poziomie (maszynowym) – odejmowaniem, mnożeniem, dzieleniem i dodawaniem.

To o czym napisałem wyżej ja osobiście nazywam mindset’em. Czyli sposobem myślenia, czuciem tematu, płynnym poruszaniem się pomiędzy zagadnieniami pokrewnymi.

Dodatkowo pierwsze trzy semestry uczą Cię czytać te dziwne szlaczki które wykładowcy nazywają wzorami;) Co daje Ci wiedzę że np taki wzór:

możesz zapisać w Pythonie tak:

1
2
3
4
import math

def sigmoid(x):
  return 1 / (1 + math.exp(-x))

A to już jest przydatne chociażby przy sieciach neuronowych.

Innym przykładem może być:

i odpowiednik w pythonie:

1
2
def f(x):
  return -1 if x < 0 else 1

oczywiście dla a = 0. I ta funkcja może być funkcją aktywacji w sieciach neuronowych. Oczywiście te przykłady są bardzo proste, ale chodzi mi ogólnie o matematyczny zapis który mimo wszystko jest często spotykany w informatyce.

Więc przez pierwsze trzy semestry – zdobywamy mindset.

Im dalej w las tym proporcje się zmieniają – zaczyna być coraz mniej matematyki a coraz więcej programowania. Aczkolwiek od matematyki nie uciekniesz na studiach informatycznych – zawsze będzie jej jakiś element w siatce godzin. Poziom programowania się zwiększy dość szybko, nagle zaczną wymagać znacznie więcej niż „wypisz na ekranie sumę liczb wprowadzonych przez użytkownika”. Tutaj pojawia się problem że uczelnia zazwyczaj uczy technologii których się nie używa. To dość duży problem – uczelnie po prostu nie nadążają nad rozwojem technologii. Wykładowcy piszą ogromną ilość publikacji i fizycznie nie starcza im czasu na to być chociaż w miarę na bieżąco z technologią. Jeśli trafisz na profesora który chce się przebić przez gruby mur wytartego planu zajęć i wprowadzić coś świeżego – to jest to skarb.

Ludzie mówią że studia to ogromna ilość pracy wrzuconej w błoto – i trochę racji mają. Pewną cześć swoich godzin poświęcisz na rzeczy które faktycznie są bez sensu jak podstawy prawa, psychologia, jakieś rzeczy związane typowo z profilem wydziału. Na szczęście zazwyczaj łatwo takie przedmioty zaliczyć:)

Ten proces wieńczy tytuł inżyniera. Jest to tytuł zawodowy więc praca powinna być „inżynierska” czyli rozwiązywać problem raczej w sposób znany, ewentualnie go optymalizując, rozszerzając itp. Stopień ten dostajemy po 3,5 roku.

I teraz absolwent ma dwie opcje – albo iść na studia drugiego stopnia tj magisterskie lub zakończyć naukę.

Studia magisterskie to dla wielu studentów coś na co decydują się bo to taka wisienka na torcie;) i szczerze powiem – chyba nic poza tym. Całe studia magisterskie czyli 3 semestry a więc 1,5 roku minęło na rzeczach które już znałem lub łatwo przyswoiłem. Jedyną ciekawą rzeczą były techniki kompilacji.

Uff, przeszliśmy szybkim tempem przez 5 lat studiów. I co teraz? Idziemy do pracy…

Praca wygląda inaczej niż studia (łał!). Ocena Twoich umiejętności jest znacznie bardziej ciągła w czasie – a nie jak na uczelni – nauka co sesję. Sposób pracy jest trochę inny – zazwyczaj masz projekty które wykonujesz zgodnie z jakąś tam specyfikacją i wybraną metodyką pracy. Szybkość rozwoju – znacznie większa. Mogę powiedzieć że przez rok w pracy nauczysz się więcej niż przez 5 lat studiów. Ale to też kwestia tego że w pracy musisz pracować w na studiach.. Zaśpisz.. Kac nie pozwoli ogarniać rzeczywistości.. Uznasz że ten i ten przedmiot jest bez sensu i zaliczysz go na 3. Studia nie wymagają od Ciebie pełnego zaangażowania żeby je ukończyć.

I wracając do pytania zadanego w tytule wpisu – czy studia pomagają w pracy? Czy są niezbędne by być dobrym programistą?

A więc.. Nie są niezbędne. Ale nie są też czasem straconym. Mimo że z perspektywy studenta większość rzeczy jest bez sensu – to jednak mają one sens i tworzą jakąś tam całość. Nieocenioną wartością jest ten mindset o którym napisałem wcześniej.

Studia stają się straconym czasem tylko wtedy jeśli jesteś słabym studentem i nie pracujesz. Bardzo ważnym elementem tego zdania jest łącznik „i”. Studia są ok jeśli nie pracujesz ale serio przykładasz się do studiowania – bo to Cię nadal rozwija – ewentualnie jeśli pracujesz a więc się i tak rozwijasz a studia traktujesz jako papierek który będzie świetnie wyglądał w CV. No i dodatkowo będziesz mógł powiedzieć rodzicom przyszłej żony że masz tytuł mgr inż. Rzecz jasna wizerunek bycia magistrem inżynierem, mimo że już trochę stracił blask, to nadal jest obecny w świadomości społeczeństwa.

Ponad to – jeśli jesteś słabym studentem – przyciągasz słabych studentów. Jeśli dobrym – dobrych studentów. Twój poziom zaangażowania odpowiednio ciągnie Cię w górę lub w dół. Bycie dobrym, ogarniającym studentem powoduje też że zaczynasz dostawać niezerową ilość propozycji udziału w projektach poza uczelnią – od doktorantów czy innych studentów. To też tworzy kontakty. Kontakty zaś tworzą możliwość rozwoju.

I wchodzimy teraz w temat ludzi. Większość osób które mogą Ci przeszkadzać na studiach odpada już po pierwszych dwóch semestrach. Efektem tego jest to że studia to świetnie miejsce które zrzesza naprawdę ogromną ilość osób o podobnych zainteresowaniach. To natomiast sprzyja wymianie doświadczeń. Ponad to – kontakty które zostają po studiach są nieocenione, ponieważ każdy pójdzie trochę inną ścieżką kariery i posiadanie swoich ludzi rozstrzelonych po całej informatyce otwiera pewne możliwości – które imho wykorzystywane są zbyt rzadko.

No i nie zapominając – studia to nie tylko budowanie wiedzy. Studia to też ogromna ilość śmiechu! Nie wiem czy kiedykolwiek znajdzie się miejsce w moim życiu gdzie śmiałem się tyle ile na studiach:) i to też nie jest stracony czas – to ogromnie ważne żeby nie dać się zwariować.

Więc jeśli mam już finalnie odpowiedzieć na pytanie – programiście nie są potrzebne studia. Jest w stanie osiągnąć wszystko bez nich. Ale nie są one czasem straconym i otwierają ogromną ilość możliwości.

Dzięki za wizytę,
Mateusz Mazurek
Podziel się na:
    Facebook email PDF Wykop Twitter

2 thoughts on “Czy programiście potrzebne są studia?

  1. Studia w zasadzie moga byc niepotrzebne nikomu, przykład Banacha. Z drugiej strony zdobył wiedze potrzebna i zostawił po sobie bardzo duzo. Wiec tu sie zgadzam, co do tego, czy sie przydaje wiedza, w czasie studiow myslalem, ze nie, jednak przy niektórych optymalizacjach krytycznych i owszem, znajomosc niektorych wzorow i praw moze nasunac ci zmiane podejscia do problemu i z kilku godzinnego przeliczania otrzymujesz kod, ktory to samo robi w kilka minut :) W moim przypadku bylo to nawet dosc przypadkowe, bylo ważne wdrożenie, z laczeniem ze soba 2 troche niekompatybilnych systemow, przez co calosc sie wywalala (potrzebowaly sprzecznych ustawien srodowiska). Byl to juz ktorys wyjazd, w zasadzie prawie tam mieszkalismy wtedy (bledy nie wychodziły w warunkach laboratoryjnych, dopiero przy pracy na zywym organizmie, stad testy byly wykonywane na miejscu przy wspolpracy z pracownikami, przelaczenie serwerow po standardowej pracy i godzina testow). Totez jednego wieczoru zrobilismy sobie dla odprezenia taka wieksza imprezke w hotelu, tym bardziej, ze jeden z szefow przywiozl Rakije robiona przez tescia. Nastepnego dnia na sniadanie zadowolilem sie herbata, pamietajac, ze przy okazji robilem system agregujacy dane i wyliczajacy pewne rzeczy sprawozdawcze i ze algorytm dziala, ale wolno, dla tej instytucji bylo to ok 4 godzin, co moglo byc nieakceptowalne, pamietalem jednak,, ze pierwsze wersja kodu miala po prostu poprawnie wyliczyc i wiedzialem, gdzie moge zrobic pewne optymalizacje i nie byly one trudne, jesli sie wiedzialo kilka rzeczy, totez postanowilem je wprowadzic, potem zapuscic testy i mialbym (tak szacowalem) jakies 2:30 do 3 godzin przerwy na regeneracje i zakup jakis wspomagaczy. Tak tez zrobilem, zapuscilem test, wzialem katane, ale nie zdolalem zejsc ze schodow, bo koledzy mnie zalowali, ze sa juz wyniki…. Okazalo sie, ze optymalizacje skrocily obliczenia doo kilku minut… Pozniej mialem kilka godzin analizy czy wyniki sa prawidlowe – byly… To tak a’ propos pracy na kacu :)

  2. Nie ma wiedzy nie potrzebnej :D Poza tym ćwiczysz pamięć, ćwiczysz generalnie mózg, uczysz się myślenia.
    Pragnę też zauważyć, że piszesz na podstawie swojego doświadczenia z określonej uczelni i wydziału, oraz z czasu w którym studiowałeś. Nie wiem czy w ogóle postanowiłeś sobie sprawdzić jak wygląda to w innych miejscach. Wszędzie są ewolucje, w siatkach godzin są wprowadzane zmiany, a osoby które mają powołanie i chcą to jednak mogą uczyć, pracować i rozwijać się w zakresie nowych mediów. Nie czarujmy się są prowadzący którzy są już zmęczeni ale są na tej uczelni by spełniać wymogi dawania doktoratów. Zupełnie inaczej może wyglądać informatyka w Warszawie czy AGH, już nie mówiąc za granicą, a mogłeś pojechać na erazmus kto Ci zabroni. No i np. znam opinie które wydają się trafne, że informatyk który ma wysoką znajomość języka C nie powinien mieć problemu z nauką innych, drugie powiązane z pierwszą, że generalnie powinien umieć poruszać się i przekwalifikowywać między językami.
    A ostatnia kwestia są ciągle korporacje gdzie posiadanie tego magistra jest istotne w spinaniu się po szczeblach firmy, bez niego możesz już wyżej nie zajść, albo postawią Ci warunek. Myślę, że mimo wszystko warto mieć zawsze. Oczywiście każdy sobie może poradzić bez, rynek pracy jest pod tym względem dobry, ale papierek daje wiele uproszczeń i w niektórych miejscach jest potrzebny, a czas nie jest wcale taki stracony jak niektórym się wydaje.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.