Wróciłem, bo czemu nie? 🤓 (45)
Po niemal dwóch latach przerwy postanowiłem wrócić do pisania bloga. Usiadłem do komputera i... zawiesiłem się, bo nie wiedziałem, jak się przywitać. Dzień dobry, siemano, hello, elo... Cześć, wróciłem! 😁
Przerwa w publikacjach
Prawie 2 lata temu, dokładnie 7 lutego 2023 roku, opublikowałem wpis, po którym zaprzestałem dalszych publikacji. Powodów mojej absencji było kilka.
Jednym z nich był realny brak czasu. Pierwsze miesiące w nowej roli były bardzo intensywne. Zajmowałem się tematami, o których wcześniej nie miałem pojęcia. Musiałem się wiele nauczyć, poznać nowe narzędzia, systemy, procesy, procedury itp. Często nie wyrabiałem się z przypisanymi zadaniami, a że jestem ambitny i zawsze staram się "dowozić", kontynuowałem pracę po godzinach i wieczorami. Pomiędzy pracą a pracą zajmowałem się dziećmi i domem.
Innym powodem było to, że nie bardzo wiedziałem, o czym pisać. Nie chciałem poruszać tematów związanych z pracą (moja rola nie jest stricte programistyczna, więc uznałem, że nie ma o czym pisać). Jak już wspomniałem, w pierwszych miesiącach pracy nie miałem zbyt wiele czasu tak więc na dalszą naukę programowania też go nie starczało
Najważniejszym powodem był jednak brak motywacji do pisania, który wynikał z pewnej pułapki myślowej, w jaką wpadłem. Wydawało mi się, że skoro dostałem się do IT, to moja droga się skończyła i blog stracił sens.
Z czasem dotarło do mnie, że byłem w błędzie. Moja droga wcale się nie skończyła – ona dopiero się zaczęła. Moim celem nie było samo dostanie się do IT, lecz zostanie programistą. Pierwsza praca w IT, w projekcie low-code, to tylko przystanek, kamień milowy na drodze do osiągnięcia celu.
Powody powrotu
Postanowiłem wrócić do pisania bloga z kilku powodów, w większości egoistycznych 😜
Publikowanie wpisów motywowało mnie do pracy. Gdy deklarowałem coś publicznie, czułem się zobowiązany, by to "dowieźć", zwłaszcza że już po kilku miesiącach liczba czytelników zbliżała się do tysiąca.
Z czasem coraz więcej osób kontaktowało się ze mną prywatnie – jedni prosili o poradę, inni wyrażali swoje uznanie i życzyli mi powodzenia, a jeszcze inni dziękowali mi, bo moje wpisy dawały im motywację do działania i pracy nad sobą. Uwielbiałem te rozmowy i trochę za nimi tęskniłem. Oczywiście byli też tacy którzy pisali dla hejtu, ale tych ignorowałem 😆
Regularne pisanie było też moją terapią i sposobem na prokrastynację. Hasło przewodnie "choćby skały srały" naprawdę działało i dzięki temu w większym stopniu realizowałem również cele i postanowienia prywatne, którymi nie dzieliłem się na blogu.
Wyzwania i wsparcie na drodze do IT
Główne motywy mojego powrotu pozostają te same, choć mam cichą nadzieję, że uda mi się zbudować wokół bloga niewielką społeczność. Sytuacja na rynku IT, delikatnie mówiąc, w ostatnim czasie uległa zmianie. Nie ma co owijać w bawełnę, dostać się do projektów stricte programistycznych jako Junior jest teraz cholernie trudno.
Uważam, że jest wiele osób takich jak ja – chcących spełnić marzenie o zostaniu programistą, ale zmagających się z trudnościami. Wiem, jak ciężko jest samemu stawić czoła zwątpieniu,kiedy z każdej strony jesteśmy bombardowani artykułami o końcu eldorado, o kryzysie w IT, o tym jak to rzekomo AI zastąpi pracę programistów i że w zasadzie Juniorzy to już są niepotrzebni bo AI.
Mam bliskich, którzy mnie wspierają – wspaniałą żonę, rodzinę i przyjaciół – ale oni nie są w mojej sytuacji, więc nie mogą mnie w pełni zrozumieć. Dlatego wierzę, że społeczność, w której moglibyśmy wymieniać się doświadczeniami i wzajemnie wspierać, mogłaby być dobrym pomysłem. Czas pokaże, czy mam rację.
Moje plany
Do końca grudnia zamierzam opracować cele na pierwszy kwartał 2025 roku, będą one zbudowane na bazie znanego moim czytelnikom 12-tygodniowego roku.
Chciałbym też, aby część mojego bloga była poświęcona tematom technicznym. Od pewnego czasu buduję aplikację, o czym napiszę więcej w dalszej części, i chciałbym w tym blogu dzielić się moimi postępami w rozwoju tego projektu. Jako, że nie jestem ekspertem i ciągle mierzę się z tym, że nie wiem jak coś rozwiązać, liczę na Wasze wsparcie.
Przez ostatnie 2 lata dużo się nauczyłem, ale nie mam pewności, że wszystko, co przyswoiłem, przyswoiłem prawidłowo. Może się okazać, że jakieś tematy zrozumiałem na opak i coś robię źle. Będzie super, jak dostanę feedback, na podstawie którego będę mógł skorygować błędy😉
Trochę historii
Na koniec chciałbym opowiedzieć, co porabiałem przez ostatnie 2 lata, a że w tym czasie sporo się wydarzyło, to jest o czym opowiadać.
Frontend na początek
Jak zaczynałem moją drogę, uznałem, że najszybciej dostanę się do IT jako frontend developer. W końcu już kiedyś napisałem jakąś stronę w HTML-u i wydawało mi się, że jest to na tyle łatwa dziedzina, że bez problemu osiągnę poziomu Juniora. W tamtym momencie prawdopodobnie mogło mieć to sens, ale obecna sytuacja na rynku IT jest taka, że to we frontendzie jest najtrudniej dostać swoją pierwszą pracę.
Zmiana kierunku
Po tym, jak dostałem się do IT, uznałem, że teraz mogę rozwijać się w kierunku, w jakim tylko chcę. Po długich przemyśleniach doszedłem do wniosku, że backend to jest to, co najbardziej mi odpowiada i mnie kręci.
Jako główny język programowania wybrałem Pythona.
Decyzję tę podjąłem dlatego, że zawsze byłem wielkim fanem Monty Pythona i jeśli ktoś na jego cześć nazwał język programowania, to musi to być sztos. Oczywiście żartuję – tzn. faktycznie bardzo lubiłem i lubię twórczość Monty Pythona, ale nie był to powód mojej decyzji 😂.
Tak na poważnie – jest to język z relatywnie łatwą składnią, dosyć wszechstronny i z rosnącą popularnością (w dużym stopniu wykorzystywany do zadań backendowych w web developmencie, co w połączeniu z moimi już nabytymi umiejętnościami frontendowymi jest dodatkowym atutem). Uznałem, że znając ten język, będę miał wiele ścieżek rozwoju, na jakie będę mógł się zdecydować.
Duże znaczenie w podejmowanej przeze mnie decyzji miało to, że jest to główny język programowania wykorzystywany w projektach związanych ze sztuczną inteligencją. Patrząc na to, w jakim tempie rozwija się ta dziedzina, może się okazać, że to właśnie kierunek AI będzie najbardziej odpowiedni.
Przygoda z Harvardem
Jak już się w miarę ogarnąłem z pracą i podjąłem decyzję o kierunku dalszego rozwoju, przystąpiłem do realizacji. Zacząłem od kursu "CS50: Introduction to Computer Science with Python" prowadzonego przez Davida Malana, profesora z prestiżowego Uniwersytetu Harvarda.
To naprawdę świetny kurs, który dał mi solidne podstawy, a David Malan to rewelacyjny pedagog – jego wykłady są bardzo zrozumiałe, pełne energii i poczucia humoru.
Każdy moduł kursu kończył się zadaniem, które należało wykonać i które musiało zostać zaliczone na platformie edX, przez którą ten kurs jest dystrybuowany. Na zakończenie kursu, po pozytywnym zaliczeniu wszystkich modułów, aby uzyskać certyfikat, należało napisać własną aplikację o dowolnej tematyce, ale spełniającą określone wymagania.
Kiedy kończyłem ten kurs, na popularności zyskiwał ChatGPT od OpenAI, ale na rynku nie było jeszcze oficjalnej aplikacji – czy to mobilnej, czy desktopowej – do komunikacji z tym LLM-em, a i nieoficjalnych aplikacji nie było zbyt wiele (zwłaszcza godnych uwagi). Pomyślałem wtedy, że może napiszę taką aplikację do komunikacji z chatem poprzez udostępnione przez nich API, bez konieczności logowania się na stronie OpenAI.
Taka też była moja praca zaliczeniowa – był to prosty program, w którym można było wpisać swoje API Key, wybrać model AI i zadać pytanie, na które ChatGPT odpowiadał. Myślałem nawet, żeby ją dalej rozwijać, ale w tym samym czasie pojawiła się oficjalna aplikacja od OpenAI, więc porzuciłem ten pomysł.
System utrwalania wiedzy
Kiedy zacząłem się uczyć Pythona, zbudowałem w Notion tzw. Second Brain. W dużym skrócie – jest to baza źródeł wiedzy takich jak kursy, publikacje, książki czy filmiki na YouTube oraz notatek, które do przepracowanych przeze mnie materiałów sporządzałem.
Z tychże notatek potem robiłem fiszki, które z kolei eksportowałem do aplikacji Anki, a następnie na AnkiDroid (mobilnej wersji aplikacji Anki) mogłem przyswajać wiedzę poprzez regularne powtarzanie stworzonych fiszek.
Szybko doszedłem do wniosku, że cały ten proces jest bardzo pracochłonny i zajmuje dużo czasu. Najpierw studiuję jakieś źródło wiedzy, w międzyczasie robię notatki, a potem jeszcze muszę z tych notatek zrobić fiszki.
Generator Fiszek
Tak narodził się pomysł na generator fiszek (FlashcardGenerator). Na początku miał to być prosty program CLI, w którym wybieramy źródłową notatkę, wysyłamy ją do ChatGPT i dzięki odpowiedniemu promptowi w odpowiedzi uzyskuję fiszki wygenerowane przez AI.
Potem doszedłem do wniosku, że dobrze by było dodać moduł tworzenia profili i zapisywania danych takich jak API Key oraz model GPT, a także możliwość wyświetlania informacji na temat aktualnie wybranego profilu, notatki, z której generowane są fiszki, itp., oraz zapisywania na dysku aktualnego statusu aplikacji. Do tego zbudowałem dynamiczne menu tekstowe, którego elementy zmieniają się w zależności od tego, na jakim jestem etapie i jakich wyborów dokonałem.
Cały czas pojawiały się nowe pomysły, dodawałem różne funkcjonalności, aż doszedłem do momentu, w którym w zasadzie nie byłem w stanie już nic dodać. Każde nowe usprawnienie powodowało, że aplikacja się wysypywała. Naprawienie tego bez rezygnacji z wdrażanych „usprawnień” wiązało się z przerabianiem większości kodu.
Dowiedziałem się, że jest to klasyczny przykład spaghetti kodu. Taki kod powstaje w sposób bardzo organiczny, nieprzemyślany, a wręcz chaotyczny.
Nowe podejście do projektu
Zacząłem szukać sposobów na rozwikłanie tego węzła. Jeszcze gdy uczyłem się frontendu, w jednej z publikacji „Przeprogramowanych” Marcin Czarkowski opowiadał o książce Clean Code. Kupiłem wtedy tę książkę w oryginale, ale jakoś nie było kiedy jej przeczytać.
Pomyślałem, że znajdę jakieś materiały objaśniające dobre praktyki w wytwarzaniu oprogramowania, takie jak Clean Code, Clean Architecture, SOLID itp., aż trafiłem na kilkugodzinną prelekcję samego Uncle Boba (Robert C. Martin – autor wspomnianej książki i jeden z prekursorów dobrych praktyk nazywanych potocznie czystym kodem).
Ten materiał w dużym stopniu otworzyła mi oczy i pomógł zrozumieć (przynajmniej w pewnym stopniu), jak powinno się pisać kod oraz jak nie powinno się tego robić – czego unikać.
W pierwszej chwili próbowałem zrefaktorować moje dotychczasowe dzieło, ale ostatecznie porzuciłem ten pomysł i po prostu zacząłem pisać tę aplikację od nowa.
Obecnie aplikacja wygląda o niebo lepiej, i jestem w stanie ją dalej rozwijać (modyfikować i dodawać nowe funkcjonalności), aczkolwiek, jako że jestem perfekcjonistą, uważam, że nadal jestem daleki od ideału.
Przyda się wsparcie
Niestety, często trudno jest samemu zrozumieć pewne rzeczy, a nawet jeśli wydaje mi się, że je rozumiem, to potem siadam do komputera i okazuje się, że nie wiem, jak tę wiedzę wdrożyć.
Zachęcam do zapoznania się z tym, co już udało mi się zrobić w tym projekcie, oraz do komentowania, krytykowania i podpowiadania, co mógłbym zrobić inaczej lub lepiej.
Obecnie aplikacja ma dynamiczne menu, system tworzenia użytkowników, logowania, dodawania profili i danych potrzebnych do łączenia się z ChatGPT, wybierania notatek (na razie tylko tekstowych), generowania fiszek oraz pracy z wygenerowanymi fiszkami.
Wiem, że wiele z obecnych funkcjonalności mogłoby być zaimplementowanych za pomocą gotowych bibliotek, ale celowo napisałem je w czystym Pythonie, aby więcej się nauczyć.
W dalszej kolejności chcę połączyć aplikację z bazą danych, a także myślę o zbudowaniu webowej wersji przy pomocy FastAPI.
Najpierw jednak chciałbym jak najbardziej dopracować to, co już mam, dodać moduł eksportowania fiszek oraz jakiś darmowy LLM, tak aby każdy mógł tę aplikację testować.
Podsumowanie
Rozpisałem się. Może na dzisiaj starczy 🙄.
Cieszę się, że mogłem podzielić się z Wami moją drogą i pomysłami – mam nadzieję, że moje doświadczenia będą dla kogoś inspiracją.
Jestem bardzo ciekaw, co myślicie o moim pomyśle na stworzenie społeczności oraz o moim małym projekcie. Czekam na Wasze komentarze, z pokorą przyjmę każdą krytykę.
Poniżej informacje jak można się ze mną skontaktować:
E-mail: kiki@mcarron.com.pl
Discord: Kiki McArron
Facebook: Kiki McArron
Komentarze
Prześlij komentarz