Szkoły programowania zagościły na dobre na rynku edukacyjnym. Spotykam się często z informacją, że w Polsce brakuje około 50 tys. programistów. Misją szkół programowania jest wypełnienie luki powstałej na rynku pracy (mamy bowiem do czynienia z tzw. rynkiem pracownika). Szkoły programowania są atrakcyjną opcją dla osób, które do tej pory z branżą IT miały niewiele wspólnego i chcą w stosunkowo krótkim czasie znaleźć tam swoje miejsce. Szkoły programowania stają się więc poważną alternatywą dla długotrwałych, tradycyjnych studiów informatycznych.

Decydując się na pójście do takiej szkoły należy w pierwszej zwrócić uwagę na czas trwania kursu.  Spotkałem się z opinią, że aby wykształcić osobę gotową do podjęcia pracy na stanowisko Młodszego Programisty (ang. Junior Software Engineer / Junior Softwatre Developer) potrzeba przynajmniej pół roku i myślę, iż jest to bliskie prawdy. Unikałbym natomiast szkół obiecujących, że zgodnie z zasadą ”od zera do bohatera”, w ciągu miesiąca zrobią z Ciebie programistę. W tak krótkim czasie jest to niemożliwe. Aby zostać zawodowym programistą potrzebne są lata praktyki. Kurs co najwyżej przygotuje cię do podjęcia pierwszej pracy.

Oczywiście samo uczęszczanie na zajęcia nie wystarcza. Potrzebne jest jeszcze dużo pracy własnej. Ponadto, podstawowa wiedza z zakresu programowania ułatwiłaby Ci odnalezienie się na takim kursie. Pewne koncepcje takie jak: zmienna, funkcja czy pętle pozostają uniwersalne niezależnie od języka programowania. Kursy oferowane przez szkoły programowania są bardzo drogie i dlatego należy wymagać od nich tak dużo jak to tylko możliwe. Należy mieć na uwadze, że może minąć sporo czasu zanim tak zainwestowane pieniądze nam się zwrócą.

Zaletą takich szkół jest ich kadra trenerska, która najczęściej składa się z pracowników firm branży IT. Daje nam to gwarancję, że wiedza tam przekazywana jest aktualna i zgodna z bieżącymi trendami na rynku pracy. Dodatkowo, aby zapisać się na taki kurs nie musisz mieć ukończonych 18 lat. Wiele szkół oferuje także kursy dla dzieci z podziałem na różne kategorie wiekowe.

Więcej informacji znajdziesz m.in. na vlogu Macieja Aniserowicza.

Studia Informatyczne

Założenia studiów są bardzo szczytne, ponieważ ich zadaniem jest przekazanie kompleksowej wiedzy z danej dziedziny. Uczelnie powinny  jednak bardziej współpracować z firmami z branży IT, tak aby układać plany nauczania zgodnie z aktualnymi wymogami na rynku pracy. Jednocześnie idąc na takie studia nie możemy zakładać, że będziemy uczyć się wyłącznie programowania. Informatyka to dużo szersza dziedzina, a więc spotkamy się tam z wieloma przedmiotami, niekoniecznie ściśle związanymi z programowaniem. Przekłada się to na dużo dłuższy proces kształcenia. Inaczej mówiąc, nie każdy informatyk to programista.

Nie jest regułą, że każdy zawodowy programista kończy studia na kierunku Informatyka. Jestem tego chodzącym przykładem. Ukończyłem studia na kierunku Elektronika i Telekomunikacja. To dlatego wśród programistów spotkasz wielu takich, którzy ukończyli studia m.in. na następujących kierunkach: Matematyka, Fizyka, Automatyka i Robotyka, Mechatronika, Elektronika i Telekomunikacja. Jednocześnie cieszy mnie fakt, iż w pewnych szkołach średnich pojawił się kierunek Technik Programista. Mam nadzieje, że uczelnie wyższe podążą w tym samym kierunku.

Moje Wymarzone Studia Programistyczne

W tym miejscu chciałbym przedstawić moją przykładową propozycję na studia programistyczne ze specjalnością Zaawansowany Programista C++ / Nowoczesny Programista C++ (ang. Advanced C++ Programmer / Modern C++ Programmer). Jestem świadomy tego, że realizacja takiego typu programu nauczania będzie liczona w latach, bowiem wyszkolenie bardzo dobrego programisty to zdecydowanie nie jest kwestia wyłącznie kilku miesięcy. Oto lista hipotetycznych przedmiotów / tematów:

  1. Język C
  2. Programowanie obiektowe w języku C++ (podstawy języka)
  3. Standard C++11/14
  4. Standard C++17
  5. Standard C++20
  6. Biblioteka STL
  7. Biblioteka IOStream
  8. Wybrane biblioteki Boost
  9. Biblioteka Qt
  10. Metaprogramowanie w języku C++ (szablony)
  11. Algorytmy i struktury danych w C i C++
  12. Programowanie wielowątkowe 1 (biblioteka pthread)
  13. Programowanie wielowątkowe 2 (biblioteka std::thread)
  14. Systemy i generatory systemów budowania aplikacji 1 (Make)
  15. Systemy i generatory systemów budowania aplikacji 2 (Autotools)
  16. Systemy i generatory systemów budowania aplikacji 3 (CMake)
  17. Języki skryptowe 1 (Bash)
  18. Języki skryptowe 2 (Perl)
  19. Języki skryptowe 3 (Python)
  20. Systemy kontroli wersji (Git)
  21. Podstawy języka Java
  22. Kompilator GCC i Clang
  23. Debugger GDB i Valgrind
  24. Wzorce projektowe
  25. Architektura oprogramowania
  26. Testowanie oprogramowania
  27. Środowiska Programistyczne + edytor tekstu Vim
  28. Programowanie systemowe
  29. Komunikacja międzyprocesowa (IPC)
  30. Podstawy sieci komputerowych
  31. Programowanie sieciowe
  32. Programowanie jądra Linuxa
  33. Systemy wbudowane
  34. Programowanie niskopoziomowe (Assembler)
  35. Programowanie mobilne (Android + NDK)
  36. Docker
  37. Jenkins
  38. Ethical Hacking
  39. Podstawy bazy danych
  40. Metodyki zarządzania projektem
  41. Przygotowanie do rozmów kwalifikacyjnych + zadania codility
  42. Projekt końcowy (praca dyplomowa)

Za powyższą listą kryje się ogrom wiedzy do przyswojenia. Tak właśnie wyobrażam sobie współczesnego i ”’kompletnego” zaawansowanego programistę C++. Z pewnością lista ta nie jest pełna i być może należy rozszerzyć ją jeszcze o bardziej specjalistyczne przedmioty (składające się np. na dodatkowe moduły do wyboru). Byłyby one odzwierciedleniem obecnych zastosowań języka C++ w przemyśle (np. automotive albo gamedev). Oczywiście przedstawiony powyżej projekt to tylko przykład, oparty na języku C/C++ (zachęcam również do lektury artykułu ”Nauka Języka C++”). Z pewnością analogiczny program nauczania można przygotować dla innych języków programowania.

Osobiście uważam, że należy promować specjalizację, ale z pewną wiedzą dodatkową (przedstawiony powyżej plan nie zawiera wyłącznie przedmiotów związanych z językiem C++). Bardzo dobrą analogią są tutaj studia filologiczne. Przykładowo na Filologi Angielskiej poruszamy głównie tematy dotyczący języka angielskiego i kultury anglosaskiej. Jednocześnie uczelnie oferujące taki kierunek łączą go z podstawami z innego języka np. niemieckiego – otrzymujemy w ten sposób kierunek Filologia Angielska z Językiem Niemieckim. Podobnie można tworzyć programistyczne kierunki studiów, np.: Programista Pythona z Językiem C++.

Mam świadomość, iż powyższa wizja stosunkowo długich, czysto programistycznych studiów jest nieco utopijna, zwłaszcza w dobie szkół programowania, kiedy to docelowy odbiorca jest zainteresowany szybkim pozyskaniem konkretnej wiedzy i wejściem na rynek pracy. Pomysł na moją szkołę programowania narodził się wiele lat temu. kiedy to w naszym kraju takich szkół praktycznie nie było…

Na zakończenie jeszcze jedna uwaga. Pamiętaj, że nawet najlepsza szkoła czy uczelnia nie wyposaży Cię w wiedzę daną raz na zawsze (być może nawet wiedza zdobyta na początku studiów będzie już nieaktualna w momencie ich ukończenia). Po ukończeniu kursu lub studiów, najczęściej pozostanie Ci  samodzielne pogłębianie i aktualizowanie posiadanej już wiedzy oraz zdobywanie cennego doświadczenia w miejscu pracy.