Chciałbym, aby ten artykuł był drogowskazem dla osób zagubionych w bieżącym trendzie sztucznej inteligencji (AI). Przez ostatnie lata mojej aktywności jako mentora byłem świadkiem wielu różnych “trendów” związanych z pozyskiwaniem wiedzy przez przyszłych Junior Java Developerów, Developerki. W jednej części artykułu opiszę wspomniane trendy. W drugiej części opiszę bieżące “trendy” w zatrudnieniu Junior Java Developerów, Developerek.
Rozwijając myśl drogowskazu dla osób zagubionych w trendzie sztucznej inteligencji. Widzę dwie podstawowe kwestie, które spędzają sen z powiek osobom, które chcą zostać Junior Java Developerami, Developerkami – jak się uczyć i czy warto się uczyć programować w języku Java?. Mam nadzieję, że poniższy artykuł pomoże samodzielnie znaleźć odpowiedź na wyżej postawione pytania.
Mój sposób pozyskiwania wiedzy
Zacznę od przedstawienia sposobu pozyskiwania wiedzy, który ja stosowałem, a było, to bardzo dawno temu, jakieś 20 lat temu. Moim głównym źródłem wiedzy były książki i czasopisma związane z szeroko pojętą branżą komputerową, wtedy, chyba jeszcze nie stosowano powszechnie pojęcia branża IT. Książki, z których się uczyłem nie były typu, jak stworzyć aplikację (desktop, web, mobile) w 10 minut.
Były, to książki dogłębnie opisujące język programowania, zaczynałem od języka Pascal i C++. Mając wiedzę książkową o danym języku programowania trzeba było samemu znaleźć pomysł na aplikację i ją zaimplementować. Moją pierwszą aplikacją w Pascalu było wyświetlanie menu w formie graficznej (konsola, CLI) z możliwością wyboru danej opcji i wykonanie jakiejś akcji, potem był kalkulator (desktop, GUI).
Po jakimś czasie zamieniłem książki na dokumentację online, która w odróżnieniu od wersji papierowej mogła być aktualizowana. Posiadałem książki o języku Java, Spring Framework oraz Hibernate. Z biegiem czasu, kiedy stosowałem nowsze wersje wspomnianych technologii nie mogłem już polegać na książkach.
Oczywiście do każdej książki mogłem wrócić i przeczytać o fundamentach danej technologii. Dla przykładu, w języku Java są, to klasy, interfejsy, kolekcje; w Spring Framework są, to Dependency Injection (DI) oraz Inversion of Control (IoC); w Hibernate jest, to Object/Relational Mapping (ORM).
Poniżej opisałem “trendy” związane z pozyskiwaniem wiedzy przez przyszłych Junior Java Developerów, Developerki – w kolejności chronologicznej – z którymi spotkałem się zajmując się mentoringiem.
Sposoby nauki – z mojego doświadczenia
Samodzielna nauka
Na temat uczenia się z książek napisałem już trochę powyżej – mój sposób pozyskiwania wiedzy. Razem z dobrodziejstwem internetu dostaliśmy na wyciągnięcie ręki, nielimitowany dostęp do wiedzy programistycznej. Ograniczając się tylko do języka Java mamy morze informacji. Obecnie głównym źródłem samodzielnej nauki moich uczniów jest YouTube oraz Udemy. Jak widać czytanie artykułów oraz tutoriali zostało wyparte na rzecz video.
Poważnym problemem, który zauważyłem u moich uczniów, jest fakt, że otrzymują oni bardzo słabe, nieprecyzyjne wyniki w wyszukiwarkach internetowych. Często jest tak, że ja, robiąc, to samo zapytanie otrzymuję “idealne” wyniki, do których osoby uczące się nie mają dostępu – moje wyszukiwarki mają dobrze wytrenowane algorytmy pod konkretne treści.
Osoby, które uczą się samodzielnie borykają się z problemem zmienności wersji w czasie. Oznacza, to, że tutorial i/lub video kurs jest dla Spring Boot w wersji 2.7.12, a generując nowy projekt za pomocą https://start.spring.io/ otrzymujemy nowszą wersję 3.1.0. Co oznacza, że wszystkie biblioteki zależne, np.: Spring Security, Spring Data JPA, Hibernate są w nowszych wersjach. Nieraz samemu wpadłem w taką pułapkę.
Samodzielna nauka
Zauważyłem brak dodatkowej wiedzy informatycznej z zakresu: obsługi komputera, systemów operacyjnych, sieci komputerowych. Więcej o tym pisałem w moich artykułach: Podstawy obsługi komputera, poważnie? – Junior Java Developer oraz Przydatne książki i strony do nauki języka Java.
StackOverflow
Czym jest StackOverflow? Według Wikipedii: “Stack Overflow – serwis społecznościowy, na którym programiści mogą zadawać pytania dotyczące szeroko pojętego wytwarzania oprogramowania.”. W telegraficznym skrócie, to miejsce, w którym można szybko znaleźć odpowiedź na konkretny problem programistyczny. Osobiście naukę programowania za pomocą StackOverflow porównuję do ćwiczenia na siłowni i budowania masy mięśniowej z wykorzystaniem środków dopingujących. Możemy szybko otrzymać zadowalające wyniki, ale równie szybko nasza forma może wrócić do punktu wyjścia. Co najgorsze, osiągnięte rezultaty nie będą “nasze” i będziemy chwalić się czymś, czego “nie rozumiemy” i nie osiągnęliśmy samodzielnie.
Nie jestem przeciwnikiem korzystania ze StackOverflow, ale należy robić, to z głową i świadomie. Samemu znajduję wiele rozwiązań różnych problemów na StackOverflow. W tym serwisie możemy znaleźć rozwiązania danego, konkretnego problemu, które są wyizolowane i oderwane od kontekstu. Tego właśnie jestem przeciwnikiem, stosowania rozwiązań ze StackOverflow bez zrozumienia szerszego kontekstu. Moim zdaniem właściwym podejściem jest, jeżeli ten serwis będzie motywacją do poszerzenia zdobytej wiedzy na temat problemu, którego rozwiązanie właśnie tam znaleźliśmy.
StackOverflow
Często słyszę od osób, które przeszły swoje pierwsze interview: “nie wiedziałem, że teoria jest potrzebna, gdybym tylko miał dostęp do IDE i internetu, to bym rozwiązał, to zadanie”. Moje artykuły: Trzy trójce programistyczne – jak ułatwić początki programowania oraz Od czego zacząć tworzenie aplikacji? – Przestań pisać kod źródłowy – praktyczny przykład.
Bootcamp
Kolejnym trendem, który napotkałem w trakcie pracy z moimi uczniami jest Bootcamp. Czm jest Bootcamp? Według Wikipedii: “Bootcamp programistyczny – kurs, który pozwala w krótkim czasie na poznanie wiedzy potrzebnej do rozpoczęcia pracy jako programista.”. Opiszę trzy, moim zdaniem, najważniejsze aspekty, które sprawiły, że Bootcampy stały się, aż tak popularne. Pierwszy, to wyznaczenie jasnej i pełnej ścieżki, która prowadzi do stanowiska Junior Java Developer. Drugi, to nadzór merytoryczny nad osobami uczącymi się. Trzeci, to obietnica zatrudnienia po Bootcamp. Wszystkie aspekty wydają się przemawiać na korzyść tego sposobu nauki. Niestety rzeczywistość okazała się inna.
Zacznę od tego, że podaż przewyższyła popyt. Firmy IT rekrutujące osoby na stanowisko Junior Java Developer zaczęły “zabezpieczać się” przed zalewem CV od osób po Bootcamp – zwiększając minimalne wymagania dla młodszych programistów, programistek Java. Czas trwania takich szkoleń – od 3 tygodni, sic! do 12 miesięcy, średnio 9 miesięcy – w trybie kilkunastu godzin w tygodniu wymusza ogromne tempo przekazywania wiedzy, które, to wcale nie przekłada się na jakość przyswajanej wiedzy. Moim zdaniem Bootcampy rozwodniły rynek młodszych specjalistów języka Java. Co spowodowało, że pracodawcy zaczęli rozglądać się za innymi możliwościami zastąpienia lub nie zatrudniania w ogóle Junior Java Developerów.
Bootcamp
Wiele osób po Bootcamp zgłasza się do mnie po pomoc. Czasem chodzi o projekt końcowy, ale głównie są, to osoby, które od dłuższego czasu nie mogą znaleźć obiecanego zatrudnienia zaraz po ukończeniu Bootcampu. W takim przypadku pracujemy nad portfolio, weryfikujemy i poprawiamy CV oraz przeprowadzam symulację rozmowy kwalifikacyjnej. Niejednokrotnie uczymy się “od zera”. Moje artykuły: Pułapki szablonu CRUD we własnym portfolio i rzeczywistym projekcie i Własne portfolio – jak zbudować dobre portfolio i gdzie je umieścić?.
Nauka z mentorem
Na temat mentoringu Junior Java Developerów, Developerek patrzę nie tylko przez pryzmat własnej działalności. W internecie powstało i wciąż powstaje wiele nowych “blogów osobistych” oferujących usługi mentoringu. Moim zdaniem jest kilka rzeczy składających się na ten trend. Pierwszy z nich, to morze możliwości i ścieżek nauki na Junior Java Developera. Kolejny, to niedoskonałość grupowego uczenia np.: Bootcamp. Trzeci z nich, to indywidualne podejście do osoby uczącej się.
Postaram się wyjaśnić każdy z powyższych elementów, które wpłynęły na popularność mentoringu. Morze możliwości i ścieżek nauki. Rozpoczynając naukę wydaje się, że wystarczą podstawy języka Java, ale to za mało. Junior Java Developer może zajmować się programowaniem: back-end, front-end, database (SQL) i/lub połączeniem wszystkich trzech, czyli full-stack developer. Obecnie standardem w branży jest znajomość Spring Framework, Hibernate, Maven, git. Zachęcam do zapoznania się z moim artykułem Jak powinny wyglądać realne wymagania dla Junior Java Developer’a? – Just Join IT.
Osobom zaczynającym naukę na własną rękę jest bardzo trudno odnaleźć się w tym wszystkim. Dodatkowo osoby uczące się przeczytały w różnych miejscach w internecie Facebook, forum, blogi, że Bootcamp nie jest idealny i tak na prawdę nie gwarantuje przyswojenia wiedzy, ani zatrudnienia. Płynnie przechodząc do niedoskonałości grupowego uczenia. Należy pamiętać, że ogrom wiedzy do przyswojenia narzuca sztywne ramy czasowe – ogromne tempo pracy – na przekazanie materiału, tym samym nie daje przestrzeni dla indywidualnego podejścia do ucznia, uczennicy.
Powyższe elementy prowadzą do tego, że dużo osób decyduje się na pracę z mentorem, ze mną. Więcej o relacji mentor uczeń pisałem w moim artykule Relacja mentor-uczeń, jak zrozumieć siebie wzajemnie – teoria i praktyka.
Nauka z mentorem
Wielu moich uczniów mówi mi “Jak Ciebie nie ma, to to zagadnienia wydają się skomplikowane.”. Jak widać, nawet nauka z mentorem wymaga wielu powtórek i ćwiczeń, żeby dane zagadnienie dobrze przyswoić.
ChatGPT
Ten temat jest dla wszystkich nowy, niezbadany. Samemu jeszcze nie korzystałem – nie jestem ich przeciwnikiem – z ChatGPT, ani z GitHub Copilot (Your AI pair programmer). Na razie zgłębiam wiedzę o sztucznej inteligencji (AI) od strony matematycznej. Moim skromnym zdaniem nie mamy doczynienie z AI, to po prostu dobrze przeszkolony pracownik informacji turystycznej. W tym przypadku, ChatGPT, to dobrze wytrenowany model matematyczny, który został napompowany ogromnym zbiorem danych “z internetu”. AI wspierane przez machine learning (ML) dostarcza takich narzedzi jak ChatGPT. Podczas mojego zgłębiania wiedzy znalazłem świetny video kurs na YouTube (tak, też się uczę od moich uczniów wyszukiwania wiedzy na YouTube) No Black Box Machine Learning Course – Learn Without Libraries od freeCodeCamp.org, który kładzie duży nacisk na dane i ich przetwarzanie w celu uzyskania nauczania maszynowego, to wszystko bez użycia gotowych bibliotek do machine learning (ML). Moim zdaniem, to dobre podejście do zrozumienia natury takich narzędzi jak ChatGPT.
ChatGPT
Ostatnio moi uczniowie rozwiązują prace domowe za pomocą ChatGPT. Na poniższe pytania odpowiadają “Nie wiem.”: czy wiesz jak działa wygenerowany kod?, czy wygenerowany kod jest poprawny?, czy wiesz jak zmodyfikować wygenerowany kod?.
Pisząc powyżej o StackOverflow oraz ChatGPT chcę pokazać niepokojący trend, nie chcę w żaden sposób zniesławić osób, które uczą się w ten sposób. Połączenie “nie wiedziałem, że teoria jest potrzebna, gdybym tylko miał dostęp do IDE i internetu, to bym rozwiązał, to zadanie” oraz odpowiedź “nie wiem” na pytania “czy wiesz jak działa wygenerowany kod?, czy wygenerowany kod jest poprawny?, czy wiesz jak zmodyfikować wygenerowany kod?”, jest przepisem na “katastrofę”.
Bieżące trendy w zatrudnieniu – w mojej ocenie
W kwestii bieżących trendów w zatrudnieniu na stanowisko Junior Java Developera, Developerki, należy pamiętać, o tym, że:
Używamy “starych” frameworków – Java EE vs. Spring Framework – Dawid kontra Goliat
Obecnie obydwa narzędzia trochę się zestarzały. Spring Framework jest już “pełnoletni” – w tym roku skończył 20 lat. Natomiast Java EE kończy 23 lat, sama Java ma już 27 lat.
Do powyższego dodałbym, że sam język Java nie wystarczy – Czy sam język Java wystarczy?. Po nauczeniu się języka Java rekomenduję uczenie się na projekcie – Od czego zacząć tworzenie aplikacji? – Przestań pisać kod źródłowy – praktyczny przykład.
Poniższe elementy są zbiorem moich własnych spostrzeżeń oraz informacji zebranych od znajomych osób pracujących w branży IT.
Outsourcing prac programistycznych do Indii
Wiele firm IT przeniosło większą część swoich działów do Indii, działów takich, jak help desk (różne linie wsparcia) oraz działy wytwarzania oprogramowania (programowanie, testy). Co gorsza, firmy liczą się z tym, że kilkanaście procent kodu źródłowego – napisanego w Indiach – będzie do ponownego napisania “przez te same osoby” i nadal, to jest dla nich opłacalne. Może, to przyczynić się do zmniejszenia liczby ofert dla przyszłych Junior Java Developerów.
Mniejsza liczba projektów IT
Docierają do mnie informacje od osób pracujących w HR, że liczba projektów IT, czyli rekrutacji, które obsługują zmniejszyła się znacząco. W Europie przyczynił się do tego konflikt zbrojny za naszą wschodnią granicą, dodatkowy wpływ mają masowe zwolnienia w branży IT w Stanach Zjednoczonych. Może, to przyczynić się do zmniejszenia liczby ofert dla przyszłych Junior Java Developerów.
Nieprzypadkowe, wygórowane wymagania w ofertach pracy
Większość przyszłych Junior Java Developerów, Developerek zastanawia się jak, to możliwe, że w ofertach o pracę są tak wygórowane wymagania. Zapraszam do lektury mojego artykułu Jak powinny wyglądać realne wymagania dla Junior Java Developer’a? – Just Join IT. Zgadza się w ofertach o prace są wygórowane wymagania jak dla Juniora, ale wymagania te pokrywają się z tym, co jest potrzebne na stanowisku programisty w firmach. Takie, a nie inne wymagania stanowią swoisty firewall dla rekruterów IT, którzy są zalewani CV osób po Bootcamp. Takie osoby, dwa razy się zastanowią zanim wyślą CV do danej firmy, najpierw postanowią zdobyć więcej doświadczenia.
Generowanie kodu – ChatGPT, GitHub Copilot
O samym ChatGPT już trochę napisałem w sekcji ChatGPT. Samo generowanie kodu szeroko opisałem w moim innym artykule Low-code i No-code – czy generatory kodu źródłowego zastąpią programistów?. Moim zdaniem narzędzia – oparte o sztuczną inteligencję (AI) – takie, jak GitHub Copilot mogą stać się rozwiązaniem, które trwale zmniejszy do minimum potrzebę stanowisk Juniorskich. Z narzędziem takim jak GitHub Copilot, Mid-Level lub Senior Java Developer będzie w stanie w szybkim czasie wygenerować kod, który dotychczas mógł zlecić Junior Java Developerowi. Samemu nie korzystałem z tego narzędzia, ale wielu moich znajomych programistów korzysta na co dzień z tego narzędzia.
Podsumowując, nie chcę roztaczać czarnej wizji przyszłości dla Junior Java Developerów, chciałem jedynie opisać obecną rzeczywistość – sposoby nauki oraz bieżące trendy w zatrudnieniu. Moim zdaniem każda z opisanych form nauki jest dobra, pod warunkiem, że dane zagadnienie programistyczne zostanie dogłębnie przestudiowane i zrozumiane przez osobę uczącą się. W kwestii bieżących trendów w zatrudnieniu, to jak każde trendy, te również przeminą. Należy dynamicznie dostosować się do zmieniających się warunków. To nie jest tak, że sztuczna inteligencja (AI) odbiera nam pracę natychmiast, tu i teraz. Jest, to powolny proces, na który sami się godzimy. Bądźmy twórcami własnej przyszłości, działając tu i teraz.
Zdjęcie autorstwa cottonbro studio z Pexels.