P-Programowanie

Studia nie uczą programowania

Ostatania modyfikacja: 29 września 2017, kategoria: Studia i praca

Istnieje wiele sposobów na osiągnięcie sukcesu w IT. Jednym z najpopularniejszych sposób wejścia do branży jest ukończenie studiów informatycznych. Jest to bardzo dobry start na rynku, jednak wielkie zastrzeżenia można mieć do samej metodyki. Czego można spodziewać się po ukończeniu studiów? W artykule skupię się przede wszystkim na nauce programowania.

Studia nie nauczą Cię programowania

Programowanie, tak jak cała branża IT, rozwija się tak szybko, że nikt nie jest w stanie umieć wszystkiego. Co kilka miesięcy lub lat powstają nowe wersje języków programowania oraz nowe platformy. Niektóre są podobne do poprzednich, inne całkowicie przebudowane. Zmienia się także sposób podejścia do planowania poszczególnych rozwiązań i architektur systemów informatycznych.

Aby nie trzymać Cię w niepewności, napiszę na samym początku: studia informatyczne nijak nie nauczą Cię programować. Piszę to z pełną świadomością jako zawodowy programista i absolwent studiów informatycznych. Nie ważne jak renomowaną uczelnię wybierzesz, czy będzie to uczelnia publiczna czy prywatna, czy studia dzienne czy zaoczne. Jakie są tego przyczyny?

Hermetyczne środowisko profesorów

Problem z uczelniami wyższymi leży w hermetycznym środowisku akademickim. Wykładowcy akademiccy nie zdobywają doświadczenia zawodowego przy komercyjnych projektach, nie spędzają nad programowaniem 8h dziennie. Oprócz tego ogranicza ich rama programowa i struktura narzucona przez ministerstwo edukacji. Wszelkie technologie nauczane na studiach są totalnie przeterminowane i bezużyteczne.

Dosłownie nikomu nie doradziłbym w dzisiejszych czasach zaczęcia nauki programowania od języka C++. O ile był on dawniej sławny, o tyle teraz jest bezużyteczny. Ciągle chętnie używają go programiści niskopoziomowi, embedded i elektronicy. Nie naddaje się on natomiast do nauki i projektów komercyjnych. Istnieje wiele nowszych języków wysokiego poziomu, które pozwolą nauczyć się programować szybciej i efektywniej.

C++ jest natomiast stałym bywalcem każdej uczelni wyższej. Czarna konsola napawa niechęcią, wielu mechanizmów w C++ brakuje a z kolei z wielu się już nie korzysta (bo są lepsze rozwiązania).

Brak możliwości zatrudniania programistów

Przez deficyt na rynku pracy programistów ciągle brakuje. Stąd biorą się dzisiaj ich wysokie zarobki. Żadna uczelnia wyższa nie jest w stanie zatrudnić doświadczonego programisty do prowadzenia wykładów lub ćwiczeń. Co ciekawe jest to spowodowane względami finansowymi, ale także jak wspomniałem wcześniej hermetycznym środowiskiem akademickim. Każdy dba o swoją posadę i nikomu nie byłoby na rękę, gdyby jeden z przedmiotów wziął ktoś „z poza” uczelni.

Jaki jest tego efekt? Na wykładach z C++ wykładowca nie umie wytłumaczyć do czego służą wskaźniki. Nie umie znaleźć sytuacji praktycznej, w jakiej dałoby się je wykorzystać. Później nie dość, że studenci uczą się archaicznego języka, to słuchając o wskaźnikach czują się jak w kosmosie. Oczywiście, podkreślam, nie chodzi o nieumiejętność wytłumaczenia wskaźników. Wykładowcy akademiccy przeważnie bardzo dobrze umieją teorię, ale w przekazywaniu wiedzy liczy się też otoczka.

Bardzo sucha teoria

Na studiach poznaje się bardzo wiele teoretycznej wiedzy, bez jakichkolwiek przykładów jej wykorzystania. Nauka wzorców projektowych, algorytmów, metodyk wytwarzania programowania przebiega płynnie ale student nawet nie wie, po co się tego uczy. Oczywiście ta wiedza kiedyś się przyda, jednak w momencie studiowania jest jej za dużo i jest zbyt niepoukładana.

Dobry student, po dobrej uczelni, wkraczając na rynek pracy programistów jest początkowo bezużyteczny. Potrzebuje dużo czasu i opieki doświadczonego programisty, aby móc coś sensownego tworzyć.

Praktyka? Projekty na studiach

Jeżeli zastanawiasz się, dlaczego na studiach informatycznych nie ma więcej praktyki od razu odpowiem – jest. Istnieją duże przedmioty nazywane „projektami semestralnymi”, które pochłaniają w syllabusach ogromne ilości godzin i są poświęcone właśnie praktycznemu wykonywaniu jakiś programów.

Problem z projektami jest natomiast taki jak w pierwszych akapitach tego artykułu:

  • prowadzą je wykładowcy z wiedzą z przed 5-10lat
  • prowadzą je wykładowcy bez doświadczenia zawodowego
  • studenci nie mogą z nikim kompetentnym skonsultować architektury i fundamentów projektu
  • prowadzący je wykładowca kompletnie nie ma czasu dla studentów, grupy są za duże a czasu za mało

Efektem tych zajęć są totalnie „słabo wykonane systemy”. Bez żadnych wzorców projektowych, mechanizmów, rozwiązań architektonicznych. Pełne instrukcji warunkowych, które są później bohaterami zabawnych memów w branży IT. Wszystkie projekty są pisane w PHP. Oczywiście bez żadnej dodatkowej platformy, bez wspomnienia o wzorcu MVC. Po prostu zwykłe instrukcje PHP powplatane w kod HTML, często przechowujący informacje w plikach tekstowych.

Przykład z moich studiów, którego doświadczyłem. Profesor od programowania polecił napisać w C++ grę w kółko krzyżyk. Był to projekt semestralny, od prowadzącego nie dostaliśmy żadnej instrukcji ani nakierowania. Efekt? Nikt nie zastosował algorytmu minimax, każdy oddał projekt z 400-stroma instrukcjami warunkowymi obsługującymi każdą możliwą kombinację kółka i krzyżyka na planszy.

Takie projekty nie dość, że nic nie dają, to utrwalają bardzo złe nawyki.

Niechlubna para C++ i PHP

Para języków C++ i PHP to ta podstawowa, poznawana na studiach informatycznych. Jeżeli przeglądnąć fora internetowe to właśnie w tych językach jest powrzucanych setki „programów studenckich” będących plątaniną instrukcji warunkowych. Autorzy postów przeważnie proszą o dopisanie czegoś, bo brakuje do zaliczenia. W innym wypadku pytają czemu program nie działa, w kodzie brakuje wcięć, czasem średników czasem jakieś klamerki.

Wielu studentów kończąc uczelnie wyższą wie że:

  • programy dekstopowe to te pisane w C++
  • strony internetowe to te pisane w PHP i HTML

Na tym wiedza się kończy. Na studiach nikt nie porusza nic innego. O JavaScriptcie panuje przekonanie takie jak w książkach z 2003 roku, czyli nie powinno się tego używać. Strona z JavaScriptem to nie jest prawdziwa strona. JavaScript służy tylko do tworzenia kalendarzy i zegarków.

Tymczasem mało kto wie, że obecnie JavaScript jest najczęściej używanym językiem na świecie, i od 2008 roku przeżywa bardzo silny rozwój. Mało kto wie, że stronę można zrobić w czymś innym niż PHP, że aplikacji internetowych nie robi się już w modelu request-response tylko na reużywalnych asynchronicznych komponentach. Mało kto wie, że w wielu dziedzinach odchodzi się od aplikacji desktopowych i wprowadza się aplikacje internetowe i chmury.

Dlaczego o tym piszę w dość agresywnym tonie? Po prostu, ludzie kończąc studia nagle dowiadują się, że istnieje 20 języków programowania, a do każdego około 5-20 platform programistycznych. Z czego na studiach poznali te, które nie są już używane.

Czy warto studiować?

Artykuł niesie proste przesłanie: studia jeszcze z nikogo nie zrobiły programisty. Jeżeli chcesz być programistą warto skończyć studia informatyczne, ale pamiętaj, dzięki nim nie staniesz się programistą. Być może ukierunkujesz się na wiele aspektów, o których nie miałeś pojęcia. Ale nic poza tym.

Studia warto skończyć. Jak wspomniałem wcześniej, wiedza teoretyczna ze studiów przyda się w dalszej ścieżce zawodowej. Więcej na ten temat opisałem w artykule dlaczego warto studiować informatykę? Jeżeli masz możliwości (przede wszystkim te finansowe) bez wątpienia skończ studia. Jeżeli chcesz nauczyć się programować przeczytaj następny akapit.

Jak nauczyć się programowania

Do nauki programowania potrzeba tylko jednego: chęci i wielu godzin ćwiczeń. Doskonałymi źródłami wiedzy są książki oraz kursy internetowe. Wybierz jakiś język, który jest aktualnie na topie i po prostu zacznij. Rankingi języków (czyli popularność i opłacalność) na stan dzisiejszy dostępne są w internecie.

Mylisz się jeżeli sądzisz, że to co napisałem, to lanie wody albo pusty akapit. Programowanie zmienia się tak szybko, że jeżeli nie umiesz uczyć się sam, to nie jest to zawód dla Ciebie. W programowaniu nie ma przerwy, nie ma najmądrzejszych. Trzeba ciągle poszerzać swoją wiedzę i być na bieżąco. Jeżeli spoczniesz na laurach i złapiesz się jednej technologii na 2 lata, to będziesz do tył względem rynku.

Jestem też sceptyczny jeżeli chodzi o „szkoły programowania”. Mimo, że być może dają efekty, to jest to strata kasy. Wydasz dużo kasy, nauczysz się technologii X, a za jakiś czas i tak będziesz musiał sam nauczyć się nowej technologii Y. Do tego trybu ciągłego poszerzania wiedzy trzeba się przyzwyczaić – inne dziedziny nauki nie są tak dynamiczne.

Uwaga! Wybierając kurs, wybierz ten najnowszy! Tak jak studia, tak jak całe programowanie, tak samo kursy i książki szybko się dezaktualizują. Przykładowo: ucząc się JavaScriptowej platformy Angular na dzień dzisiejszy musisz znaleźć kurs Angular2. Kursy Angular1 z przed 2 lat są już totalnie zdezaktualizowane a technologia jest martwa. Jeżeli wydasz pieniądze na książkę Angular1 (inna nazwa AngularJS) wydasz pieniądze w błoto. Co śmieszne, Angular1 i Angular2 nie są do siebie ani troszeczkę podobne, wiedzy z jednego nie da się wykorzystać w drugim (za pół roku pojawia się natomiast Angular5 :)) Potwierdza to konieczność ciągłego procesu nauki od którego nie ma ucieczki.

Możesz raz nauczyć się fizyki lub matematyki, następnie uczyć tego przedmiotu w szkole średniej i sobie żyć. Nie da się natomiast raz nauczyć programowania i zasiąść w strefie komfortu.

Wnioski

Wniosków po tym artykule może być wiele. Nie chcę abyś pomyślał, że nie warto studiować! Chcę abyś wiedział, że studia nie nauczą Cię programowania. Jeżeli chcesz programować zacznij sam, już teraz. Naucz się uczyć się samemu. Zainwestuj w dowolne, aktualne źródło wiedzy i ćwicz.

Studia nie są niezbędne do nauczenia się programowania. Deficyt na rynku jest tak duży, że programistami zostaje coraz więcej osób, które ze studiami informatycznymi nie mają kompletnie nic wspólnego.

Użytkownik Adrian napisał:

29 września 2017


Ogólnie to się zgadzam, a że mam jeszcze doświadczenie jako asystent to coś dopiszę.
Jednym z większych minusów na studiach są przedmioty nie związane z kierunkiem, jest ich całkiem dużo, gdyż część jest wydziałowych a część narzucona z ogólnej puli: np wf albo przedmioty humanistyczne.
Na studiach inżynierskich to jeszcze jakoś wygląda, natomiast na magisterskich to się studiuje nie wiadomo co z małą domieszką informatyki.

Jeśli chodzi o zaplecze – nie ma się co oszukiwać, bo godzina zajęć to 35zl brutto i w tym jest też przygotowanie zajęć. Nikt z prowadzących nie będzie robił Code Review projektów, tym bardziej że teraz grupa projektowa nie liczy 15 a 30 studentów…

Laboratoria 15 albo 30h – dużo się nie zrobi, tym bardziej jak zajęcia trwają 2h, co i negocjacji jakby był blok 5-8h, ale to nie w Polsce.

Niemniej jednak na studiach można się dużo nauczyć poza studiami – samokształcenie + praktyka

Komentarz został wyróżniony

Użytkownik Adam napisał:

01 października 2017


Ja uważam, że studia informatyczne niosą ze sobą dużą wartość. Nie chodzi tu o wiedzę jaką z nich wyciągniesz, ale o inne umiejętności. Przede wszystkim na studiach uczysz się pracować w zespole i uczysz się studiować, a nie tylko przyswajać wiedzę. Studia poniekąd zmuszają do tego, żeby samemu poszukiwać własnej drogi. Ja np. dopiero poznając inne języki programowania, niż Java, w której programuję, zrozumiałem, że to jest to co chcę robić. Ale wiedza na temat innych języków przydaje mi się w pracy. W naszym teamie w Codete jesteśmy dzięki temu w stanie porozmawiać ze wszystkimi, a nawet pomóc ;)

Użytkownik Paulina napisał:

13 października 2017


Pracuję już od kilku lat w IT i widzę, że wielu specjalistów IT jednak posiada studia, chociaż znam też takich programistów, którzy studia zaczęli, ale już ich nie skończyli. Jeśli chcemy sobie odpowiedzieć na pytanie, czy studia są wymagane – to patrząc na ogłoszenie dla programistów, nie ma takich wymogów, ważne jest przede wszystkim doświadczenie i kompetencje. Podczas rekrutacja zawsze są testy, które sprawdzają poziom wiedzy programisty. Samo studiowanie to ciekawy rozdział w życiu, ale jeśli jesteśmy w stanie sami zmobilizować się do nauki, informatyka jest naszą pracą, to myślę, że warto uczyć się samemu + szukać fajnych staży dla początkujących programistów.

Użytkownik Wojciech Wróbel napisał:

18 października 2017


Stek bzdur :)
Prywatna uczelnia – Wyższa Szkołą Biznesu w Dąbrowie Górniczej zatrudnia w głównej mierze praktyków – osoby, które albo piastują wysokie stanowiska w firmach zw. z branżą informatyczną albo sami je prowadzą.

Poza tym… jestem początkującym i raczkującym programistą, ale C++ jak najbardziej się nadaje do rozpoczęcia przygody. Jest mocno wyeksploatowany, co za tym idzie jest sporo roznego rodzaju proadnikow itd. Jeżeli ogarniesz C++ możesz się pobawić elektroniką co zawsze zadowala oko, a jak przebijesz się już przez ten siermierżny bądź co bądź język, masz solidne podstawy. Ja z C++ przerzucam się na Jave i rozumiem cholernie dużo rzeczy.

Fakt faktem, studia nie naucza programowania, ale studia nie nauczą niczego, jeżeli nie poświęcisz trochę czasu gałęzi, która Cie interesuje.
Moja uczelnia przynajmniej pokazała mi frameworki i co w ogóle da się stworzyć. Jestem tylko na studiach zaocznych ale po 2 miesiącach studiow, w ktorych zjazdy mam co 2 tygodnie, umiałem więcej rzeczy, niż po 1,5 roku studiów na Politechnice śląskiej.

Użytkownik Karol napisał:

18 października 2017


@Wojciech
To co napisałeś o C++ to totalne bzdury, jednak oczywiście, wolno Ci mieć taką opinię. Idąc Twoim tokiem rozumowania polecam Ci także Assemblera, kupisz ATmege88, kabelki, rezystor, głośniczek i będziesz mógł nimi mrygać i piszczeć (również cieszy oko). Próba porównania „studiów” zaocznych na prywatnej uczelni do studiów dziennych na uczelni publicznej to chyba prowokacja – wolę tego nie komentować.

Użytkownik Igor napisał:

06 listopada 2017


Hej, więc ja podzielę się swoimi wrażeniami. W tym roku ukończyłem studia informatyczne, przez cały okres studiów przechodziłem z wielkim bólem, że mi to nie potrzebne (jako fanatyk webmasterki od bardzo młodych lat) i że równie dobrze mógłbym zacząć coś porządnego robić bez studiów. Jednak po pewnym czasie, a właściwie tak niedawno dotarło do mnie, że studia to nie tylko nauka programowania, „niepotrzebna” matematyka i wiele niepotrzebnych przedmiotów ale studia to przede wszystkim rozwój na wielu innych płaszczyznach które występują podświadomie. Studia rozwijają kompetencje miękkie, uczą komunikacji z innymi osobami, „kombinatoryki” – no bo przeciez trzeba jakoś wykombinować aby zaliczyc przedmiot, można zdobyc fajne kontakty na przyszłość, wystąpień publicznych i wiele wiele rzeczy ktore nie sa jakoś mocno zauważalne. Dziś jestem dumny ze jednak przeszedłem przez studia a nie poszedłem od razu jako 20latek na programiste gdzie faktycznie miałbym umiejętności duzo większe pod wzgledem programowania ale być moze za parę lat gryzła by mnie mysl czy moze przypadkiem nie lepiej by bylo gdybym poszedł na studia a nie już X lat ciągle robie prawie to samo.

To z pewnością temat który wiele osób powie A a drudzy powiedzą B ale moim zdaniem studia to nie jest strata czasu. Do pracy mozna iść zawsze, na studia niby też ale wiadomo jak to jest w wieku 30+.
Pozdrawiam

Komentarz został wyróżniony

Użytkownik Leszek Lewandowski napisał:

27 listopada 2017


Witaj,
przeczytałem Twój artykuł i mam kilka uwag. Pierwszy i podstawowy błąd Twojego artykułu to całkowita sugestywność. Chodzi o to, że nie próbowałeś w żaden sposób przeanalizować problemu, a tym bardziej zbadać czy trend dotyczył tylko Twojej uczelni czy każdej innej. Ze swojej subiektywnej strony odniosłem początkowo takie same wrażenie na starcie mojej kariery programistycznej. Jednakże im bardziej ta kariera się rozwijała, tym częściej sięgałem do notatek ze studiów. I tak przedmioty, które uważałem kiedyś za kompletnie niepotrzebne okazały się zbawieniem jak chociażby zarządzanie jakością, inżynieria oprogramowania i co najważniejsze (wielkie podziękowania dla dr hab. Danuty Nowickiej) statystyka matematyczna oraz matematyka dyskretna. Jeszcze na studiach uważałem te przedmioty za całkowitą stratę czasu, teraz uważam, że programista bez inżynierii oprogramowania, jakości systemów informatycznych czy też analityki proceduralnej, będzie zwykłym rzemieślnikiem, ale nigdy dobrym architektem, team leaderem czy też kierownikiem zespołu, gdyż te przedmioty nie zmieniają się tak szybko jak język programowania, ale uczą czegoś więcej, czegoś co z czasem bardzo się przydaje. Pozwolę sobie odnieść się również do pozostałych przedmiotów, jak sieci komputerowe czy nawet coś tak abstrakcyjnego jak marketing lub ekonometria. Otóż zadaniem uczelni nie jest z Was zrobić specjalisty w każdej dziedzinie nauki, ale przygotować Was merytorycznie na jak największą ilość problemów, z jakimi możecie się spotkać, dać solidny fundament, na którym możecie budować dalszą przyszłość. Obecnie jako kierownik zespołu, od razu widzę różnicę w podejściu do projektu przez magistrów i przez „techników”. Znam wielu doskonałych rzemieślników, ale żadnemu nie powierzyłbym póki co całej architektury dużego systemu.
Aha, i C++ choć jest dosyć słabym językiem biznesowym, jest doskonałym językiem akademickim. Bez wahania stwierdzę – znasz podstawy C++, znasz podstawy 80% języków programowania. Jest to język trudny, ale ideą stosowania właśnie C++ jest nauczenie myślenia w sposób, jaki myśli programista, do tego pień języka nie zmienia się tak często, jak we wspomnianym wstępie, dlatego jest idealny na start. Po za tym nie każdy absolwent informatyki musi być programistą, ale każdy absolwent informatyki musi wiedzieć czym jest programowanie.
Reasumując: artykuł jest niestety zbyt subiektywny, nie poparty rzetelnymi faktami, zbyt ogólnie argumentowany. Temat jest trudny lecz dla mnie 3/10 głównie przez podejście do tematu.
Pozdrawiam
Leszek Lewandowski

Komentarz został wyróżniony

Zachęcam Cię do zostawienia komentarza!

Ilość znaków: 0