pprogramowanie;

// blog o programowaniu i branży IT

rss

Studia nie uczą programowania

28 września 2017, kategoria: Studia i praca
studia-nauka-programowania

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. Nieważ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 Nauki i Szkolnictwa Wyższego. Wszelkie technologie nauczane na studiach są totalnie przeterminowane i bezużyteczne.

Dosłownie nikomu nie radził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 nadaje 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ś “spoza” 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 sylabusach ogromne ilości godzin i są poświęcone właśnie praktycznemu wykonywaniu jakichś programów.

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

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ące 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-stoma 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.

student

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:

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 że 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, a 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. 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 zasiedzisz się w jednej technologii na 2 lata, to możesz być 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 sprzed 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 w jakimś projekcie. Projekty informatyczne mają do siebie to, że ich czas życia jest dość krótki.

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.