Mój rozwój

Wspominałem, iż programowaniem zajmuję się już od dekady, podobnie jak amatorskim uczeniem. Skoro jednak to czytasz, to najpewniej ciekawi Cię nieco więcej detali z mojego życia. Mój rozwój nie był nagły i prosty, ani tym bardziej liniowy. Cytując jedną z moich ulubionych postaci z gier przygodowych: „Usiądź, a opowiem Ci historię, jakiej nigdy dotąd nie słyszałeś”. Niestety musiałbym skłamać, gdyż pewnie historii, jak moja, jest co niemiara, jednak tylko ja jestem na tyle odważny, by się całością publicznie podzielić. Zapraszam więc do lektury.

Etap maturalny

Żeby być fair, muszę przedstawić całe 4 lata, jakie poświęciłem nauce przed przystąpieniem do „egzaminu dojrzałości” (o którym mam swoje zdanie). Na wstępnie zaznaczę, iż od urodzenia mieszkam w Krakowie i do teraz tego nie zmieniłem. Swój nick natomiast, czyli Andret2344, którym się wszędzie podpisuję, jest ze mną jeszcze dłużej.

Szkoła

Swoją przygodę zacząłem, prawdę mówiąc, już w gimnazjum. Wiedziałem, że ciekawią mnie komputery, szeroko rozumiana „informatyka”, więc rozglądałem się (fakt, błędnie) za szkołą z rozszerzoną informatyką. Dopiero pocztą pantoflową dowiedziałem się o szkole, do której się finalnie dostałem, a obecnie jest moją Alma Mater – Technikum Łączności nr 14 w Krakowie, jednak znacznie bardziej znaną nazwą jest Zespół Szkół Łączności im. Obrońców Poczty Polskiej w Gdańsku w Krakowie, i był to strzał w dziesiątkę. Uwolniłem się od typowego „gimbusiarskiego” humoru w klasie… No, prawie. W każdym razie tak to się zaczęło. Na tamte czasy, zaczynając technikum, miałem lat 16 i zacząłem szkołę w 2011, by podejść do matury w 2015, jednak do tego czasu się dużo miało dopiero wydarzyć. To jest też odpowiedź na temat mojego stażu dotyczącego programowania, zaliczam oczywiście do tego szkołę, wszak to nauka.

Szalone rzemiosło

Najpewniej kilka osób mnie za to zje, ponieważ mówię tutaj o serwerze gry Minecraft, a dokładnie o CrazyCraft (chociaż teraz jest to CrazyRPG), gdzie zacząłem grać z moim kuzynem. Oczywiście nie był to nasz pierwszy serwer do wspólnej gry sieciowej, jednak to właśnie on odgrywał kluczową rolę w mojej edukacji programistycznej. Ja w międzyczasie pomiędzy graniem a szkołą próbowałem stworzyć jakieś proste pluginy do serwera gry Minecraft. Pierwsze oczywiście były skrajnie proste, ale jako nastolatek się bardzo jarałem, że to działa. Wracając jednak do serwera, jednym z aspektów tegoż serwera był podział na 4 miasta zgodnie z kierunkami geograficznymi, a nad każdym pieczę sprawował inny administrator. Każdy zaś z owej czwórki ściśle współpracował z właścicielem (o takim jegomościu, w nomenklaturze serwerów Minecraft, mówiło się „HeadAdmin” albo „Head@dmin”, a w skrócie „HA” lub „H@”). Tam poznałem też kilka innych wspaniałych osób, jednak najważniejszą z nich jest mój aktualny przyjaciel, Daniel, a posługuje się on nickiem Dandielo (pewnie znowu strona nie działa… ech, Dandi). Rola, jaką zagrał w mojej edukacji niebagatelna, ponieważ bez ścisłego dogadywania się, postanowił zostać moim mentorem.

Początki ATS-ów

Daniel otwierał własny serwer, EpicTime. Zebrał grupę znajomych z serwera CrazyCraft, w tym mnie, i obsadził w roli administracji. Ja na serwerze zdecydowałem się na rolę tzw. elektryka (jaką rolę…?), jednak również coraz więcej siedziałem w pisaniu pluginów. Moim pierwszym pluginem, z którego Daniel zdecydował się korzystać, był obecny atsHelp (poznaj plugin), przy którym zresztą bardzo mi pomógł. Daniel tworzył swoje pluginy pod spójną nazwą dtl, co oznaczało Dandielo Tools Library. Nieskrywanym urokiem była dla mnie ta nazwa, więc postanowiłem spróbować swoich sił we własnym przedrostku. Tak powstały ATS-y, czyli Andret Tools System (poznaj ATS-y). Niestety, serwer nigdy nie wystartował, a szkoda, bo miał masę graczy stojących za nim murem. Dandielo nie był w stanie wygospodarować dostatecznie dużo czasu na zajmowanie się nim. Na serwer CrazyCraft już nie wróciliśmy z kuzynem, gdyż nam się drogi nieco rozeszły – on skupił się na szkole, ja zaś poszedłem w programowanie. Nasza paczka z EpicTime się rozpadła, więc postanowiłem więc rozglądnąć się za serwerem, który dopiero startował, żeby pełnić rolę programisty pluginów.

Mój prywatny start-up

Chwilowa przerwa w opowiadaniu o moich perypetiach dotyczących serwerów Minecraft. Wróćmy na moment do szkoły. Ot, taka ciekawostka, na 33 mężczyzn, nasza klasa miała całe 3 dziewczyny! Jednakże ja nie o tym. Pewnego dnia w szkole zawitał gość z Krakowskiego Parku Technologicznego z „czymś dla programistów”. Jako aspirujący, nie mogłem tego przegapić. Jednak prelegent przekroczył moje przewidywania, nie mówił gruszkach na wierzbie, tylko o czymś, co może zrobić każdy. Za przykład podał (niestety już usunięty) fanpage na Facebooku o tytule „Codziennie to samo zdjęcie Bogusława Lindy”. Zastanawiałem się, co zrobić podobnego, żeby zacząć, i wtedy on pokazał drugi przykład, czyli (niestety także niedostępną oficjalnie) aplikację na Androida o nazwie „Has the world ended yet?”, która jedynie po wciśnięciu przycisku odpowiada na zadane w nazwie pytanie, iż nie (nieoficjalny apk). Właśnie wtedy wpadłem na pomysł stworzenia Kalendarza Świąt Nietypowych (poznaj lepiej). Oczywiście pomocny okazał się fakt, że w szkole na zajęciach specjalizacyjnych mieliśmy Androida, więc miałem punkt zaczepienia. Możemy śmiało założyć, że w Androidzie grzebię od 2014 roku.

Pedagogiczne raczkowanie

Wiem, że może to nie zabrzmieć najskromniej, jednak w mojej grupie (podział według języka angielskiego, kto tego nie zna…) byłem w czołówce, o ile nie byłem najlepszy, jeśli chodzi o programowanie. Z tego powodu koledzy z klasy nagminnie prosili mnie o wyjaśnianie im zagadnień z lekcji w przystępny sposób, kilka osób nawet potraktowało to jak korki i upierało się, by mi za poświęcony czas symbolicznie płacić. Nie traktowałem „non-profit” jako wyznacznika (nie to, co Hikari XD). Wtedy pierwszy raz usłyszałem tak wiele osób mówiących jednym głosem, że się nadaję na nauczyciela i powinienem iść w tym kierunki. Ja jednak ograniczyłem się do korepetycji. Co ciekawe, zdarzały się też głosy mówiące, że uczę lepiej niż nasz ówczesny nauczyciel programowania (politycznie poprawnie: Programowania Strukturalnego i Obiektowego). Osobiście się z tym nie zgadzałem ani wtedy, ani nie zgodziłbym się teraz, bo uważam, że mieliśmy świetnego nauczyciela.

Nauczyciel z pasji

Z innej beczki, przytoczę kilka wartych uwagi wydarzeń związanych ze wspomnianym wyżej nauczycielem.

  1. Podczas oddawania sprawdzianu po napisaniu go, każdy miał za zadanie stworzyć folder o unikalnej nazwie, do niego włożyć pliki z rozwiązaniami oraz obok plik id.txt z naszym imieniem i nazwiskiem, dzięki temu nauczyciel nie wiedział, czyj sprawdzian poprawia. Podczas oddawania my również nie wiedzieliśmy, czyj sprawdzian aktualnie omawia. Jak się domyślacie, z jednym wyjątkiem. Pewnego razu, kiedy otworzył mój sprawdzian, jedynie rzucił okiem na kod i wypalił od razu „A to Pana Andrzeja”, po czym przeszedł do omawiania kolejnego.
  2. Próbując zaktywizować grupę, nauczyciel zadawał pytania sprawdzające wiedzę, z co ciekawszych zagadnień, jednak każde pytanie zaczynało się od słów „Proszę Państwa, kto mi powie – Pan Andrzej siedzi cicho – za co odpowiada taki zapis?”
  3. Nauczyciel dawał możliwość zdobycia dodatkowych punktów na sprawdzianie, czyli kiedy robiąc wszystko bezbłędnie, można było uzyskać np. 25 punktów, 100% wynosiło 20 punktów, a reszta była „ponad bazę”
  4. Kiedy zdarzały się lekcje tuż po wystawieniu ocen, nauczyciel zaprosił nas do wspólnej gry w Wolfenstein: Enemy Territory.
  5. W pewnym momencie przestałem się przejmować lekcją do tego stopnia, że kiedy klasa grała wraz z nauczycielem, ja otworzyłem własnego laptopa i pracowałem nad atsHelp czy innymi z rodziny ATS.
  6. Usłyszałem od nauczyciela takie słowa: „Panie Andrzeju, gdyby to ode mnie zależało, już dałbym Panu 6 na koniec i zwolnił z lekcji. Niestety szkoła wymaga ode mnie sprawdzania Pana obecności”.
  7. Sam nauczyciel przyznał, iż java (bo między innymi ona była w podstawie programowej) nie jest jego mocną stroną, a po kilkuminutowej rozmowie drążącej, okazało się, iż ten język posiada elementy, którymi ja się bawię ATS, a nauczyciel ich nie zna.
  8. Klasę 3 skończyłem z wynikiem około 135% (patrz pkt. 3), co oczywiście dało ocenę celującą na koniec.

(Pozdrawiam, Panie Piotrze!)

W poszukiwaniu…

Jednak wracając do serwerów, warto nadmienić, że bardzo spodobała mi się zabawa w administratora na serwerze, wiedzę też miałem już niezłą w temacie programowania pluginów, a przynajmniej takie miałem mniemanie o sobie (pamiętajmy, że w tym samym czasie zdobywałem bardziej teoretyczną wiedzę w szkole z programowania). Błąkając się za serwerem w potrzebie, po drodze przewinęło się kilka serwerów, między innymi na chwilę zawitałem GoldRapid (jakiś archiwalny post), jednak on nie odegrał żadnej roli. Znacznie ważniejszy był jego następca, czyli serwer McLobby (archiwalny post reklamowy), do którego dołączyłem świeżo przed maturą w 2015 roku i to nad nim się pochylę. Atmosfera bardzo mi przypadła do gustu, a nasz HeadAdmin od razu zlecił mi wykonanie pluginu tzw. SpeedRun. Miała to być specyficzna odmiana parkoura, która nie pozwala na zatrzymywanie się. Mając już wtedy swój przedrostek pluginów, pierwotnie nazwałem go atsSpeedRun, jednak po niedługim czasie odkryto potencjał, jaki w nim drzemie. W związku z tym HeadAdmin podjął decyzję o uniwersalizacji – zamiast nazwy SpeedRun, zaczął funkcjonować jako Parkour, więc i nazwa adekwatnie ewoluowała, z atsSpeedRun do atsParkour (poznaj plugin). Na tym serwerze poznałem też, chociaż wtedy o tym nie wiedziałem, mojego przyszłego bliskiego przyjaciela – Bartka. Był on również programistą zaprawionym w boju z pluginami do serwera Minecraft, natomiast programował minigrę o nazwie Conquest. Nie pytajcie mnie, o co w niej chodziło, nie mam pojęcia.

Matura

Pomimo „najważniejszego egzaminu w życiu”, wolałem oddać się programowaniu, w związku z czym nie zawiesiłem broni na czas nauki do egzaminu dojrzałości, a jedynie sprawnie je pogodziłem. Dla wyjaśnienia: zdawałem egzamin zawodowy, jak to CKE mówi, według „starej” formuły, a więc miałem jeden egzamin zawodowy na koniec 4 klasy i jestem bardzo zadowolony z jego wyników (zobacz wyniki). Zdecydowanie jestem wdzięczny tej wąskiej garstce normalnych nauczycieli, którzy wiedząc, że nie prowadzą priorytetowego dla nas przedmiotu, po prostu w klasie maturalnej odpuścili znacząco, lub jak nauczyciel od WF, lub nauczycielka od niemieckiego – w 2 semestrze odpuścili całkowicie, robiąc wolne lekcje, które ja i tak spędzałem na programowaniu, ale oczywiście nie tylko. W 2014 roku miała premierę gra The Binding Of Isaac: Rebirth, w którą od tego czasu bardzo intensywnie grałem. Kiedy część nauczycieli (większość w sumie) zgodziła się na wykonywanie notatek na laptopach, sprawiało mi to idealne warunki i do grania i programowania, a skrót Alt + Tab od tego czasu stał się moim codziennym towarzyszem.

„Najpiękniejszy okres życia” – studia

Tym sposobem w roku 2015 skończyłem szkołę średnią. Stanąłem przed wyborem studiów. Wiedziałem, że informatyka, byłem bardziej niż pewien. Oczywiście na liście potencjalnych uczelni AGH stanęło w szranki z UJ, a do tego do tej potyczki dołączyłem PK. Jak wyniki pokazały, nie byłem dość dobry, by móc studiować na najlepszej uczelni w Krakowie pod względem poziomu. Na pozostałe dwie uczelnie się dostałem, więc idąc za głosem rozsądku, wybrałem niegdysiejszą Akademię Krakowską. I muszę przyznać, że przeskok w podejściu prowadzących między szkołą średnią a wyższą jest niesamowity. W końcu zajęcia wyglądały tak, jak zawsze chciałem, żeby wyglądały. Przede wszystkim należy pamiętać, że na studiach przedmiot trwa semestr. Oczywiście może trwać dłużej, ale wtedy najczęściej stosuje się ich identyfikację 1, 2, … Warto dodać, że szczególnie na kierunkach technicznych jeden przedmiot ma dwie składowe: wykład i ćwiczenia. Prowadzący wykład może nakreślić dowolne warunki zdania jego przedmiotu, warunki obecności na ćwiczeniach, limity punktowe itp., zaś w ramach ćwiczeń, ich prowadzący może wedle własnego uznania doprecyzować to, czego odgórnie prowadzący wykład nie narzucił. Nie chcę wchodzić za bardzo w detale, więc tylko kilka aspektów, które mi na studiach bardzo przypadły do gustu:

  1. Nie ma pojęcia „wagarów” czy przysłowiowego „paluszka”, czy „główki”, a usprawiedliwić nieobecność może tylko zwolnienie lekarskie.
  2. Przekroczenie dopuszczalnego limitu nieobecności nieusprawiedliwionych kończy się oceną niedostateczną z całego przedmiotu bez możliwości poprawy.
  3. Na lekcjach nie ma odpytywania przy tablicy, zadania rozwiązują jedynie chętni i zostają nagrodzeni za aktywność.
  4. Nikt nigdy nie wymaga żadnych przyborów, to w naszym interesie leżą notatki, z którymi opuszczamy salę, albo książki, które wykorzystamy do nauki.
  5. Na niektórych przedmiotach matematycznych spotkałem się z podejściem, iż wynik nie ma znaczenia, bo jeśli metoda poprawna, a błąd rachunkowy, to dalej klasyfikuje się na maksymalną ilość punktów.
  6. Nie ma dzwonków, a prowadzący są punktualni, jeśli chodzi o zaczynanie i kończenie swoich zajęć.

Zalet jest oczywiście więcej, ale nie chcę się tylko na nich skupiać, bo ma to też wady:

  1. Student ma 2 (słownie: DWA) podejścia do egzaminu (potocznie termin I i II albo termin I oraz poprawka) i tyle, trzeciego nie będzie.
  2. Profesorowie i doktorowie mają wyznaczone godziny konsultacji, ale mogą się na nie nie zjawić, a poza nimi nie przyjmą.
  3. Prowadzący mogą podjąć decyzję o podniesieniu progu zaliczenia, bo tak.
  4. Osoby z problemami z samodyscypliną mogą nie być w stanie nadążyć.
  5. Niezdanie kilku przedmiotów kosztuje, bowiem płacimy za powtarzanie całego przedmiotu (przyjmuje się 15 tygodni w semestrze, a standardowy przedmiot ma 90 min wykładu i 90 min ćwiczeń, co w sumie daje 4 godziny lekcyjne w tygodniu, a 60 przez semestr, mnożąc to przez koszt powtarzania godziny, czyli ok. 6.00 PLN, daje to 360.00 PLN za jeden niezdany przedmiot).
  6. Zmiana uczelni nie musi wiązać się z przepisaniem wyników 1:1, jeśli podstawa programowa się różni, docelowa uczelnia może odmówić przepisania oceny i wymagać zrobienia przedmiotu od nowa.

Jak widać, każdy kij ma dwa końce, niemniej jednak z początku te wady nie wydają się wadami, zaczynają stopniowo ciążyć coraz bardziej. Ok, rozpisałem się, a mój rozwój gdzieś utknął… Wróćmy do serwera McLobby.

W kuchni zaczęło śmierdzieć antypatią

Niestety, jak to mówią „z rodziną dobrze jedynie na zdjęciu”, tak było i tym razem. Właśnie w okolicy mojego startu na studiach, za kulisami McLobby, w który się znacząco zaangażowałem, pewnemu członkowi załogi administracyjnej nowy nabytek, w postaci kolegi programisty – Bartka – wybitnie nie pasował. Nie mówił o tym wprost, ale czuć było niechęć i rzucanie masy kłód pod nogi. Po pewnym czasie tej biernej agresji Bartek nie wytrzymał i na jednej planszy, na której zwykli gracze toczyli zacięty bój, zaczął zrzucać podpalone TNT (ja wiem, że gracze Minecrafta zrozumieją od razu). Wówczas owy członek wszczął alarm przeciwko Bartkowi, próbując go zlikwidować z przestrzeni administracyjnej. Bartek natomiast się chwilę pobawił i stwierdził, że nie ma sensu poświęcać temu zdarzeniu zbyt wiele uwagi.

Oliwa sprawiedliwa…

Sprawa nie dawała mi spokoju, więc postanowiłem przegrzebać w plikach logów. Osobiście sam świadkiem zdarzenia, nawet pośrednim, nie byłem, o całym zajściu usłyszałem z opowieści. Kilkukrotnie przebieżałem zapisane pliki z logami, szukając samego zdarzenia (określenia daty były precyzyjne jak „w czwartek po południu”…). W końcu znalazłem wspomnianą komendę, tj. /nuke, jednak ani jej wywołanie nie wyglądało w ten sposób, ani wywołującym nie był Bartek. To, co znalazłem, wyglądało następująco: /sudo Bartek nuke (dla niewtajemniczonych, ta komenda pozwala na wykonanie komendy w imieniu innego gracza, tutaj chodzi o komendę nuke wykonaną w imieniu gracza Bartek). I jak się pewnie część już domyśla, to człowiek emanujący niechęcią do Bartka taką komendę wykonał. W związku z poznaniem prawdy i przedstawieniem reszcie zespołu administracyjnego dowodów popierających moje słowa podziękowałem za współpracę i w ten sposób moja współpraca z tym serwerem się zakończyła, jednak pozostała mi pełnia praw do stworzonego przeze mnie pluginu.

Bliski kompan

Pożegnawszy się z serwerem, mogłem w spokoju skupić się na studiach. Poziom wymaganej wiedzy z programowania był o kilka jednostek astronomicznych wyżej, niż miałem w technikum. Jakoś w połowie pierwszego semestru złapałem dobry kontakt z kilkoma osobami, jednak bardzo dobry jedynie z jedną, kolegą moim, Maksymilianem. Po prostu w jakiś przedziwny sposób ponadprzeciętnie przypadliśmy sobie do gustu i od tego czasu uprawialiśmy tzw. programowanie w parach (en. pair programming). Trust me, programowanie z osobą, z którą nadajecie na tych samych falach, to najlepszy czas przy kodzie, jaki może człowieka spotkać. W internecie można przeczytać, że brak dowodów na to, czy taki rodzaj pracy jest bardziej, czy mniej efektywny od klasycznego, jednak z autopsji stwierdzam jednoznacznie, iż jest o wiele wydajniejszy. W ten sposób współpracowaliśmy długo przez okres studiów, czasami on zauważał jakąś głupotę, a czasami ja. Poza tym muszę powiedzieć, że Maksymilian to człowiek wybitnie pocieszny, wystarczy popatrzeć na tego SMSa, kiedy ja miałem zajęcia, a on walczył z Problemem Podróżującego Komiwojażera.

Pocieszny Maksymiliam

Przedmioty na studiach

Mogę wiele złego mówić na studia, ale nie mogę rzecz, że niczego przydatnego mnie nie nauczyły. Oczywiście nie mam na myśli tutaj spędzania wykładów nabijając kolejne godziny w The Binding Of Isaac: Rebirth! Pomijając matematykę, której jeszcze się przyglądać nie zamierzam oraz przedmioty skupione bardziej na elektronice, gdyż to nie programowanie, to zostaje garstka przedmiotów, które można byłoby zrobić w pół roku. Przyjrzyjmy się jednak tym przedmiotom, o których mam coś do powiedzenia

Wstęp Do Informatyki (1 rok)

To przedmiot co prawda stricte programowania pozbawiony, jednak zgodnie z nazwą jest on idealnym wstępem. Jego zawartość zaczęła się od systemów liczbowych, ale nie mam na myśli jedynie binarnego, ósemkowego, decymalnego i szesnastkowego. Próbowaliśmy przeliczać liczby między systemami o różnych podstawach, np. z systemu siódemkowego na dziewiętnastkowy oraz z powrotem. Następnie zmierzyliśmy się z systemami kodowania liczb (tj. znak-moduł prosty, znak-moduł odwrotny, dopełnieniowy oraz uzupełnieniowy) i operacji arytmetycznych na zakodowanych liczbach. Następnie zapisywaliśmy liczb rzeczywiste na określonej ilości bitów (tj. cecha-mntysa), pod koniec pracowaliśmy z wykorzystaniem maszyny Turinga, a przedmiot wieńczyła Przykładowa Maszyna Cyfrowa.

Programowanie 1 i Programowanie 2 (1 rok, obligatoryjne)

Te dwa przedmioty to całkowity wstęp do programowania, zostaliśmy zmaltretowani przez pracę w językach C++98 oraz C. Jednak ten przedmiot poza wiedzą jak składać kod do kupy oraz kilogramów analizowania wszystkich przypadków, nie wymagał podstawy teoretycznej. Niewiele nowości się dzięki tym przedmiotom nauczyłem, jednak sporo z pewnością utrwaliłem (patrz: przeładowanie operatorów, działania na pamięci, funkcje i klasy zaprzyjaźnione). Ten przedmiot był srogim przesiewem osób, które nie są w stanie sprostać trudom programowania na tak prestiżowej uczelni, jaką jest Uniwersytet Jagielloński.

Metody Programowania (1 rok, obligatoryjne)

Moim skromnym zdaniem ten przedmiot miał ogromny potencjał, tylko został źle poprowadzony. We znaki dawały się zakazy importów (pomijając java.util.Scanner), jednak to właśnie tutaj zdobyłem masę wiedzy teoretycznej, nauczyłem się „od środka” jak działają stos, kolejka, lista oraz kopiec. Poznaliśmy również bardziej ekstrawaganckie sposoby sortowania tablicy (tj. MergeSort, QuickSort czy Medianę Median). Dane nam było też pracować z drzewami, ale skupiliśmy się na binarnych drzewach przeszukiwań (BST). I mam gorącą prośbę, BST zawiera w sobie „T” od słowa „Tree”, czyli „Drzewo”. Niepoprawne jest stwierdzenie „Drzewo BST”, bo to brzmi tak: „Drzewo binarne drzewo przeszukiwań”, co jest bez sensu!

Algorytmy i Struktury Danych (2 rok, obligatoryjne)

Ten przedmiot, prawdę mówiąc jest źle nazwany, ponieważ struktury danych przerobiliśmy na Metodach Programowania, a tutaj zostały jedynie algorytmy. I to też nie wszystkie, bo np. sortowania lub wyszukiwanie binarne, które bez wątpienia są algorytmami, także były na Metodach Programowania. Na tym przedmiocie spotkaliśmy się ze znacznie trudniejszymi algorytmami, np. wspomniany już przeze mnie Problem Podróżującego Komiwojażera. Poza nim pojawiły się algorytm Dijkstry (nie mylić z Sigismundem Dijkstrą!), znacznie większa praca na BST, czy Minimalne Drzewo Rozpinające.

Inżynieria Oprogramowania (2 rok, obligatoryjne)

DISCLAIMER: To moja opinia. Ten przedmiot to… kupa. Kupaprzedmiot. Nie, serio, siedzieć 3 godziny lekcyjne, czyli 2 godziny 15 minut, z czego 3/4 polega na rysowaniu na tablicy diagramów, które zamiast coś ułatwić, tylko utrudniają, a potem i tak tworzy się taki sam kod, jaki powstałby, gdyby olać diagramy. Poza tym nauka na pamięć, jaka strzałka jak się nazywa i co sprawia? Mam wrażenie, że wracamy do podstawówki, naprawdę. To tylko zapchajdziura.

Metody Numeryczne (2 rok, obligatoryjne)

Ten przedmiot to tylko w 30% programowanie (do tego 30% aktywności na ćwiczeniach i 40% na egzaminie), jednak dzięki niemu ponałem kilka fajnych i prostych matematycznych algorytmów, np. w szukaniu przybliżenia miejsca zerowego funkcji: Metoda Bisekcji i Metoda Newtona. Nie zmienia to jednak faktu, że za tym przedmiotem nie płakałbym rzewnymi łzami.

Modelowanie Obiektowe (3 rok, fakultatywny)

Ten przedmiot to jedynie to samo, co było na Inżynierii Oprogramowania, tylko bardziej. Jednak z tym przedmiotem wiąże się ciekawa historia, otóż nie zdałem w I terminie, a na drugi się rozchorowałem. Egzamin składał się z 7 pytań otwartych i jakiegoś dupa-diagramu do narysowania. Po wyzdrowieniu poszedłem do prowadzącej i wyjaśniając sprawę, uzgodniliśmy, kiedy mogę podejść do II terminu. Zgodnie z ustaleniami przyszedłem, dostałem to samo co w I terminie, z tym że wykreśliła ponad połowę zadań otwartych i zostawiła takie samo zadanie z diagramem. Nie będę kryć, że rozwiązałem tak samo, gdyż wydawało mi się to logiczne. Oddaję po kwadransie z dostępnej godziny, a ona patrzy na diagram i mówi „No… Diagramy są najważniejsze… Dobrze, ja Panu zaliczę, ale niech Pan już idzie”. I tu mógłbym anegdotę skończyć, ale utraciłbym jej esencję. Po ponad roku dostałem się do firmy, w której ona pracuje od lat XD

Programowanie w Java (3 rok, fakultatywny)

Nie ukrywam, że ten przedmiot to był mój konik, bardzo często jako jedyny byłem w stanie odpowiadać na pytania do studentów, nawet nieraz się wykłócać o detale. Jak nazwa mówi, ten przedmiot skupia się na aspektach języka Java, które nie są podobne w innych językach, np. streamy, pliki properties czy obsługa daty i czasu albo wątków. Poza tym technicznie możliwe było przebicie 100%, ale nieprzewidziane przez prowadzącego. Oczywiście to zrobiłem, kończąc z wynikiem około 103%. Tylko jedna osoba była lepsza ode mnie, i nie był to wspominany wyżej mój kolega, Maksymilian.

Wzorce Projektowe (3 rok, fakultatywny)

Pamiętam, że prowadzący na pierwszym wykładzie (trwającym 90 minut) przez pierwsze pół godziny powtarzał, że to najważniejszy przedmiot, że absolwenci przychodzą mu za to dziękować itd. No brzmiało to co najmniej komicznie, ale dzisiaj rozumiem, co miał na myśli. Wzorce Projektowe to niemalże fundament programowania obiektowego. Wyśmienity programista stosuje je, nawet o nich nie wiedząc, ale mierny może odbijać się od problemów, które one rozwiązują. Od kiedy znam kilkanaście z nich, łatwiej mi pojmować cudzy kod.

Java w Zastosowaniach Produkcyjnych (3 rok, fakultatywny)

To był przedmiot w drodze wyjątku prowadzony przez osobę spoza uczelni, gościnnie. Przymykam oko na brak umiejętności prowadzącego do nauki, byliśmy pierwszym jego rokiem. Jeśli chodzi natomiast o merytorykę, to dzięki niemu nauczyłem się rozumieć jak działa gradle, nawet go w części konfigurować, zrozumiałem, jak działają biblioteki logujące, jak się w prosty sposób obsługuje Request/Response w Spring Boot, jak używać lomboka. Takie rzeczy powinny być na Programowaniu w Java zamiast mniej znaczących, np. vavr.

Programowanie Urządzeń Mobilnych – Android (3 rok, fakultatywny)

Przedmiot jak najbardziej, ciekawy i warty polecenia, ale… Nie, kiedy prowadzący mówi wprost, iż „został wrobiony” w jego prowadzenie i musi się uczyć na bieżąco przed wykładami. Przez to, że spędziłem w środowisku Androida już dziesiątki godzin, niewiedza prowadzącego mnie bolała, więc czułem się w powinności korygować co większe błędy. Nie wieszam psów oczywiście, bo są rzeczy, których się nauczyłem, ale niestety to ok 10%-20% materiału.

Tok studiów

Kiedy wszystkie ważne przedmioty zostały opisane, dwa słowa o tym, jak wyglądał mój tok studiów. Przede wszystkim pierwszy semestr był… bolesny. Bowiem miałem 4 poprawki: Organizacja i Architektura Komputerów, Analiza Liniowa z Geometrią 1, Wstęp do Informatyki oraz Wstęp do Teorii Mnogości. Mimo wszystko się nie poddawałem i drugi semestr poszedł jak z płatka, jedyna poprawka, jaka mnie czekała, była z Analizy Matematycznej 1, reszta zaliczona w I terminie. Jednak mam wrażenie, że ja na to 3 nie umiałem, a prowadzący po prostu kolokwium poprawkowe zgubił…

No ale cóż, idąc dalej, niestety 3 semestr okazał się gorszy niż pierwszy, w drugim terminie zdałem jedynie Bazy Danych oraz Algorytmy i Struktury Danych. Niestety nie udało mi się zdać nawet w 2 terminie Analizy Matematycznej 2 oraz Wstępu do Matematyki Dyskretnej. Semestr 4 był podobny do swojego poprzednika, w II terminie zdałem Rachunek prawdopodobieństwa i statystykę, a drugi termin okazał się niewystarczający dla Metod Numerycznych oraz Sieci Komputerowych.

Idąc na semestr 5 złożyłem „Podanie o powtarzanie roku„, dzięki czemu mogłem podejść ponownie do przedmiotów, które okazały się poprzednio za trudne. W związku z tym raczej był to ponownie semestr 3 z dodatkowymi przedmiotami. Ponownie Analiza Matematyczna 2 i Wstęp do Matematyki Dyskretnej mnie przerosły. Modelowanie Obiektowe zdałem w drugim terminie, ale to opisywałem wyżej. Podchodząc do 6, czyli ponownie do 4 semestru, ponownie nie zdałem Metod Numerycznych także w drugim terminie, natomiast Sieci Komputerowe oraz Java w Zastosowaniach Produkcyjnych pokonałem się na II terminie.

Tutaj zmuszony byłem złożyć „Podanie o nadzwyczajne powtarzanie roku” w związku z kilkoma niezaliczonymi przedmiotami. I tam w semestrze 7, czyli znowu 3 udało mi się w II terminie pokonać Wstęp do Matematyki Dyskretnej, jednak poległem ponownie w starciu z Analizą Matematyczną 2. W 8 z kolei semestrze, czyli 4 po raz trzeci, udało mi się zdać Metody Numeryczne, jednak zdając przedmiot w poprzednim semestrze, odblokowałem nowy, czyli Teorię Języków i Automatów, czego nie zdałem także w II terminie.

W tym miejscu, czyli w czasie wakacji 2019 roku złożyłem „Podanie o rezygnację ze studiów” i od kilku lat aktualnie nie studiuję. Musiałem to zrobić, ponieważ zostały mi realnie 2 przedmioty do zdania: Analiza Matematyczna 2 oraz Teoria Języków i Automatów, a wyczerpałem limit prostych rozwiązań, jakimi były ww. podania.

Praca w zawodzie

Co prawda do pracy aplikowałem jeszcze w czasie studiów… A zresztą! Pierwszy raz do Sabre zaaplikowałem w lutym 2018 roku, planowałem pracować przez semestr, więc aplikowałem na pół etatu. Jednocześnie umiem javę, więc aplikowałem stricte na backendowca. Niestety wówczas żaden zespół nie potrzebował pół etatu. Sytuacja ta się zmieniła dopiero około Wielkanocy, ale tempo było tak zabójcze, ze rozmowę rekrutacyjną przez telefon miałem przed weekendem majowym, a w siedzibie już w połowie maja. Dostałem ofertę pracy od połowy czerwca, jednak odmówiłem ze względu na sesję i zacząłem w Sabre pracować 1 lipca 2018 roku. Również w maju zaaplikowałem do dwóch innych firm, jedną z nich był Comarch, a drugą Software Development Academy. Idąc na rozmowę do pierwszej z tych firm, miałem możliwość wyboru, do jakich testów chcę podejść, a ja wybrałem wszystkie możliwe, tylko że test z Androida miał błędy… Druga z tych firm to szkoła programowania, do której się dostałem i pracuję weekendami, ucząc adeptów programowania. Mówiąc szczerze, spełniam się zawodowo. No… może nie w dobie koronawirusa, ale pół 2018 i cały 2019 miałem okazję dużo uczyć, fragmentami 2020 także.

Najtrudniejszy wybór?

Często ludzie zadają mi pytanie, czy wolałbym zrezygnować z pracy na etat na rzecz uczenia, czy w drugą stronę. Muszę przyznać, że jeszcze 2 lata temu ten wybór byłby dla mnie bardzo trudny, dzisiaj jednak taki nie jest. Bez dwóch zdań rzuciłbym etat, byle móc bez przeszkód uczyć innych programowania.

Podsumowanie

Bardzo dziękuję drogi czytelniku, droga czytelniczko, że dotarliście do samego końca. Mam nadzieję, że Was nie zanudziłem na śmierć. Gorąco zapraszam do kontaktu mailowego ze mną: andret2344@gmail.com. Jeśli natomiast chcecie się dowiedzieć, co aktualnie robię, wystarczy zapytać: Kim jestem?. Dziękuję jeszcze raz i miłego dnia!