Krótko o mnie
Każdy aspekt rozwijam w kolejnych sekcjach na tej stronie, zatem tutaj krótko, zwięźle i na temat 🙂
Nazywam się Michał Kukowski, pochodzę z Wrocławia, jestem absolwentem (dr inż.) Politechniki Wrocławskiej na kierunku Informatyka Algorytmiczna (kiedyś Informatyka na WPPT). Już na studiach zacząłem pracować jako Programista C i tak już zostało. Co prawda piastowałem i piastuję różne stanowiska w firmach, jednak zawsze wiążą się one z projektami, które pisane są w języku C.
Scrum Master, Agile Coach, Lider Techniczny, Konsultant do spraw rekrutacji technicznej, architekt, programista C, asystent badawczo naukowy. Sporo tego, jednak ja lubię się uczyć oraz lubię sprawdzać się w kolejnych trudnych sytuacjach zawodowych.
“Kiedyś miałem sen zwany Rzymem”, taki tekst możemy usłyszeć w filmie Gladiator. Ja też mam sny, sny które pora spróbować wprowadzić w życie. Jednym z tych snów jest stworzenie naprawdę dobrego źródła wiedzy o świecie IT. I to się właśnie dzieje!
Prywatnie jestem szczęśliwym mężem pięknej i niesamowicie mądrej kobiety. W wolnych chwilach lubię sobie zagrać w grę, sam lub z żoną, jak i również obejrzeć jakiś serial na Netflixie. Po za tym lubię katować łapę na siłowni 🙂
Kariera zawodowa
Tak jak już wspominalem, w świecie IT zaczynałem jako programista języka C. Później moja kariera rozwinęła się na tyle, że miałem przyjemność być liderem technicznym zespołu, architektem w projekcie, scrum masterem, a nawet miałem szansę postawić całą rekrutację do projektu praktycznie od 0.
Jeśli interesuje Cię moje całe życie zawodowe, zajrzyj tutaj. Znajduje się tam moje pełne CV, które możesz pobrać w formacie pdf.
Tutaj pochwalę się jednak kilkoma rzeczami, które uznaję za swój zawodowy sukces:
Dla studentów w firmie TietoEvry miałem przyjemność poprowadzić inkubator, podczas którego uczyliśmy od podstaw programowania w języku C jak i sieci LTE. Ja byłem w tym projekcie odpowiedzialny za wyszkolenie studentów z pewnych aspektów języka C. Według mnie poszło bardzo dobrze. Na 6 osób przyjęliśmy aż 5, z czego 3 z nich została w przyszłości liderami technicznymi w firmie.
Od 2020 prowadzę raz do roku szkolenia z języka C i architektury komputera. Szkolenie trwa tylko 12-14h podczas, którego poruszam aspekty programowania i języka C, których na próżno szukać na polskich uczelniach. Po takim kursie daję każdemu szansę pracować w firmie, z którą mam podpisaną umowę. Do roku 2023 była to firma TietoEvry. Każdy uczestnik mojego szkolenia, gdy wykonał dość trudne zadanie wstępne, miał szansę zmierzyć się z rekruterami TietoEvry podczas rozmowy technicznej. Wielu z nich dawało sobie radę i już podczas 2 roku studiów zaczynali pracować, ponieważ posiadali dostateczne umiejętności. Umiejętności, które nabili właśnie u mnie.
W firmie TietoEvry byłem odpowiedzialny za postawienie na nowo rekrutacji na stanowiska związane z projektem telekomunikacyjnym pisanym głównie w języku C. Było to dość trudne zadanie, ponieważ proces leżał na dosłownie każdym punkcie. Musiałem wprowadzić swoje własne, autorskie na tamten moment rozwiązania, które nie tylko pozwalały szybciej weryfikować kandydatów, ale także pozwalały wyławiać prawdziwe talenty wśród ławicy kandydatów.
Szczegóły tego procesu pozostawiam dla siebie. Jednak jeśli jesteś zainteresowana/y konsultacją procesu rekrutacyjnego w Twojej firmie, napisz do mnie. Jestem w stanie pomóc Ci w tej sprawie.
Zostałem SCRUM Masterem podczas pandemii, w czasach gdy nagle z biur wszyscy zaczęliśmy pracować z domów. Był to dość trudny okres, każdy to wie. Mnie czekało wtedy kolejne zawodowe wyzwanie. Jako nowy SCRUM Master, musiałem na nowo postawić proces. Oczywiście koła na nowo nie wymyśliłem, ale tak zaimplementowałem framework SCRUM, że nie odczuliśmy w ogóle tego, że pracujemy w domach. Zaledwie kilka elementów pozwoliło doprowadzić do aż 88% przewidywalności estymat i do stałego zwiększenia produktywności zespołu o całe 12%.
Cały proces prześmiewczo nazwano w firmie KScrumem, czyli implementacją frameworka SCRUM przeze mnie (Kukosa). Miałem przyjemność wprowadzić moje metody w kolejnych zespołach, efekty zawsze były pozytywne.
Jesteś ciekaw/a jak to osiągnąć? Napisz do mnie, może będę w stanie pomóc i Twojemu zespołowi.
Miałem przyjemność być jednym z głównym prelegentów na konferencjach z cyklu Digital Futures. Opowiadałem tam o ciemnej stronie mocy optymalizacji. Czyli o tym dlaczego nie warto optymalizować kodu za wszelką cenę praz o tym jak się do tego procesu przygotować.
Ciekawe przeżycie, na pewno gdy będę miał okazję jeszcze raz być częścią czegoś podobnego to wezmę w tym udział.
Zakładam, że Ciebie nie było na tych spotkaniach. Nic straconego, na tej stronie poruszę również tematy optymalizacji i zarządzania projektami, zatem materiał z tych konferencji pojawi się na pewno we wpisach na blogu.
Nie samym nauczaniem człowiek żyje, prawda? Do tego żeby uczyć, to trzeba mieć też spore doświadczenie, a to najlepiej rozwijać w pracy oraz dzięki tworzeniu prywatnych projektów.
Do najciekawszych zaliczam:
- Symulator algorytmu Tomasulo
- Kompilator
- Pełny symulator DBSM, symulujący również różne rodzaje pamięci jak SSD czy PCM
- Biblioteka w C podobna do STL znanego z C++
Gdy pisałem kod w C, zawsze brakowało mi sposobu aby przetestować wszystko. Funkcje statyczne, wszystkie rozgałęzienia instrukcji warunkowych, specyficzne dla systemu sytuacje (np. brak pamięci).
Wiem, że w sieci istnieją pełne frameworki pozwalające symulować GTest i GMock. Jednak większość z nich nie zadziała gdy piszemy kod pod systemu wbudowane.
Udało mi się jednak wymyśleć sposób na pełne testowanie kodu, również na mockowanie funkcji z bibliotek standardowych.
Chcesz wiedzieć jak to robić? Zapraszam na moje szkolenia 🙂
Nauczyciel z wyboru
Pewnie się zastanawiasz, o co mi chodzi? Co to znaczy, że zostałem nauczycielem z wyboru, czy innych nauczycieli ktoś zmusza do pracy? Czy inni nie mieli tego wyboru? Już tłumaczę…, ale powoli, zacznijmy od początku. Gdy byłem w liceum, kompletnie nie rozumiałem jak można się tyle uczyć. Zamiast uczyć się wszystkiego skupiałem się tylko na tym co lubię, czyli na programowaniu i na algorytmice. Niestety takie zajęcia były tylko raz w tygodniu, co mi nie wystarczało. W tamtym okresie robiłem wszystko aby się nie uczyć i jakoś zdać maturę, a jednocześnie aby móc dalej poznawać świat informatyki samemu w domu. System szkolnictwa niestety mi nie pomagał, ponieważ byliśmy przytłoczeni sprawdzianami, kartkówkami i zadaniami domowymi. Oczywiście większość tych aktywności była związana z przedmiotami, które mnie nie interesowały. Wtedy uznawałem zawód nauczyciela jako coś okropnego, jako zawód, który skupia się na pastwieniu się nad uczniem.
W końcu się udało jakoś to przeżyć i trafiłem na studia. Wtedy to chodziłem codziennie zadowolony z tego gdzie trafiłem, ponieważ mogłem w końcu czerpać wiedzę od wykwalifikowanych nauczycieli akademickich. Oczywiście zdarzały się dalej przedmioty, które mnie nie interesowały, ale to była mniejszość. Podczas studiów dostałem przydomek “Ewangelista”. Nie dlatego, że głosiłem dobrą nowinę, ale dlatego, że potrafiłem w bardzo przystępny sposób wytłumaczyć innym to, co sam z trudem zrozumiałem w domu, studiując notatki z wykładu. Samo przekazywanie wiedzy sprawiało mi przyjemność. Nie tylko dlatego, że mogłem czuć się ważny, wszak uznawano mnie za dość mądrego gościa. NIE. Zauważyłem, że sprawia mi przyjemność patrzenie na sukcesy innych, sukcesy na które ja miałem dość duży wpływ. Wtedy zrozumiałem, że jeśli pojawi się kiedyś okazja aby nauczać, to z pewnością z niej skorzystać.
Pewnego dnia w pracy zaproponowano mi poprowadzenie inkubatora dla studentów. Zgodziłem się, chociaż wiedziałem, że czeka mnie sporo pracy. Okazało się, że nauczanie o prostych rzeczach jak programowanie w przeciwieństwie do matematyki akademickiej jest bardzo łatwe. Poszło mi lepiej niż się spodziewałem. Jednocześnie wynik ankiet utwierdził mnie w przekonaniu, że jestem w tym dobry. Uznałem, że nauczanie to dobra droga.
W ciągu kilku kolejnych lat stworzyłem wielu dobrych programistów, wyuczyłem kilku liderów technicznych oraz Scrum Masterów, poprowadziłem kilka cykli szkoleń dla studentów, jako doktorant poprowadziłem kilkadziesiąt zajęć. Ktoś powie dużo. Jednak mi to nie wystarczyło.
Jestem świadomy błędów i niedociągnięć jakie spotykamy w naszych szkołach. Wiem, że system szkolnictwa w Polsce wymaga zmiany. Wiem, że młodzi ludzie, nie mają sprawdzonego źródła, z którego mogliby czerpać wiedzę. Chcę być częścią tej zmiany, chcę być osobą, która pomoże tym licealistom, studentom, młodym zdolnym ludziom stawić pierwsze kroki w świecie IT jak i rozwinąć skrzydła tym, którzy już do tego świata należą, ale potrzebują pomocy mentora. Nie jestem politykiem, więc systemu nie zmienię, ale mogę pomóc udostępniając wiedzę na tej stronie.
Dlaczego jestem nauczycielem z wyboru? Jestem nim, ponieważ jestem wolny. Nie zarabiam na codziennie wydatki ucząc innych w państwowych szkołach. Mam swoją pracę, a nauczycielem jestem z pasji. Robię to, bo lubię to robić. A jeśli Tobie pomogłem napisz do mnie maila, opisz swoją historię. Będzie mi bardzo miło, gdy przeczytam, że miałem wpływ na Twój sukces.
Doktorat
Jakoś się tak złożyło, że zrobiłem doktorat z dyscypliny: Informatyka Techniczna i Telekomunikacja. Sam doktorat był bardzo ciekawym doświadczeniem, trochę nauczania, trochę pracy naukowej, trochę użerania się z systemem polskiego szkolnictwa. Na polwro mam dość dobre opinie, zatem chyba się sprawdziłem w roli nauczyciela.
Prowadziłem zajęcia z:
- Programowanie obiektowe (C++/JAVA)
- Architektura komputerów (C)
- Programowanie współbieżne (C/ADA/GO)
Flash-aware Clustered Index for Mobile Databases
Partially Indexing on Flash Memory
Flash-Aware Storage of the Column Oriented Databases
Bulk Loading of the Secondary Index in LSM-Based Stores for Flash Memory
Multi-core Adaptive Merging of the Secondary Index for LSM-Based Stores
Adaptive merging on phase change memory
Jeśli interesuje Cię dokładny opis tego co robiłem na Politechnice Wrocławskiej, chcesz przeczytać moją rozprawę doktorską, chcesz poznać moją historię, zajrzyj tutaj.
Moje stanowisko pracy
Jeśli jesteś zainteresowany jak wygląda moje stanowisko, jaki mam komputer i z jakiego IDE korzystam to dobrze trafiłeś.
Komputer główny służy do grania, montowania filmów oraz wszystkich codziennych rzeczy. Jest także moim centrum dowodzenia, to z niego łącze się do drugiego komputera. Mam na nim Windowsa 11, do tego WSL2, jednak nie korzystam z tego zbyt często.
- Płyta główna: Asus ROG STRIX Z790-F GAMING WIFI
- Procesor: Intel Core i9 13900k
- Chłodzenie do procesora: wodne Corsair ICUE H170i Elite LCD
- Karta graficzna: Geforce RTX 4090 Zotac Gaming AMP Extreme AIRO
- RAM: 64GB DDR5 G.Skill Trident 6400MHz CL32
- Dysk1: SSD 2TB Samsung 990 PRO
- Dysk2: SSD 4TB ADATA Legend 960
- Dysk3: SSD 4TB ADATA Legend 960
- Obudowa: be quiet! Base Pro 900 REV. 2
Tani komputer kupiony jako “gotowiec” prawie za bezcen. Sprawuje się dobrze, więc chwilowo nie będę go zmieniać. Zainstalowałem na nim Ubuntu Server 20.04. Póki działa to nie zamierzam go aktualizować do najnowszej wersji.
HP Pavilion i7-9700F
- Płyta główna: HP 843B
- Procesor: Intel Core i7 9700F
- Karta graficzna: Geforce GTX 1660
- RAM: 32GB DDR4 Kingston 2666MHz CL18
- Dysk1: SSD 500GB WDC PC SN520
- Dysk2: SSD 1TB Samsung 870
Moje stanowisko pracy jest dość niecodzienne, ale tak mi się najlepiej pracuje. Po pierwsze jak widzicie posiadam 2 komputery. Pierwszy służy do grania :), montowania filmów oraz do codziennego użytkowania. Drugi służy typowo do programowania oraz do wykonywania kodu (niektóre projekty związane z doktoratem zajmują nawet 40h).
Jak pracuję na obu komputerach jednocześnie? To proste, z mojego głównego komputera łącze się za pomocą zdalnego pulpitu. Oba komputery podłączone są do routera kablem, dlatego wszystko działa płynnie.
Oprócz tego aby wygodnie się pracowało, mam 3 dość tanie, biurowe monitory 4K. Nie mają szybkiego odświeżania, zakrzywionego ekranu i innych bajerów. Mają za to filtry niebieskiego światła i inne rzeczy, które sprawiają, że oczy się mniej męczą. Przynajmniej tak wmówił mi sprzedawca jak i strona producenta :). Tak czy siak, ja jestem z nich zadowolony.
Do programowania używam popularnego VSCode. Do każdego języka, którego używam mam zainstalowane odpowiednie rozszerzenie, tak aby mieć ładne kolorowanie kodu i w miarę dobrze działające indeksowanie.
Do tego korzystam z płatnego rozszerzenia Github Copilot, które bardzo sobie chwalę.
Nie korzystam z żadnych rozszerzeń budujących i odpalających mój kod. Lubię pracować z prostym IDE i z terminalem. Zatem zawsze moje projekty posiadają jakiś prosty system budowania, np. Makefile czy CMake.
Korzystałem też kiedyś z innych IDE jak CLion, IntelliJ czy Eclipse. Są to bardzo dobre IDE, szczególnie te pierwsze 2. Wybrałem jednak VSCode aby mieć jedno spójne środowisko do wszystkich używanych przeze mnie technologii.
Często namawiano mnie na NeoVim. Jak dotąd nie przekonano mnie do tego edytora. Brakuje mi umiejętności aby korzystać z czegoś tak potężnego 🙂
Pewnie zastanawiacie się z jakich narzędzi korzystam i do czego, oto lista:
- IDE: VSCode
- Budowanie: Makefile / CMake
- Pisanie tekstu: LaTeX – Overleaf
- Grafika: Canva pro
- Redagowanie tekstu po angielsku: Grammarly / GPT4+
- Nagrywanie: OBS
- Montowanie: DaVinci Resolve
Ulubione gry
Jestem graczem, co tu dużo ukrywać. Nie wstydzę się tego 🙂 Co więcej, mam wspaniałą, kochaną żonę, która nie boi się komputera i lubi sobie ze mną pograć w niektóre gry. Gdybym miał wymieniać wszystkie gry, w które zagrałem lub które lubię, to musiałbym zmienić tematykę całej strony ze szkoleń na gry. Dlatego zdecydowałem się wyróżnić tylko 3 gry, a pozostałe które utkwiły mi w pamięci, wymieniłem tylko z nazwy.
Poniżej lista moich ulubionych gier.
Albion Online to popularna gra MMORPG z widokiem izometrycznym i trybem full loot pvp. Oznacza to, że w razie śmierci tracimy wszystko co mieliśmy ze sobą. Gra jest naprawdę dobra, posiada sporo zawartości. Można sobie pójść zabijać neutralne stworzenia (moby), innych graczy, pozbierać surowce, a nawet pobawić się w ekonomistę. Ten ostatni aspekt przykuł moją uwagę do tej gry. Nie wykluczone, że stworzymy sobie jakiś projekt w oparciu o tę grę 🙂
Gra, której w Polsce nie trzeba przedstawiać. Tak się składa, że to gra mojego dzieciństwa. Uwielbiam wracać do tej serii co 2-3 lata i ogrywać wszystko od początku.
Jeśli ktoś pyta, to ulubiona część to Gothic2 + Noc Kruka, a ulubiony obóz to obóz najemników.
Kolejna gra mojego dzieciństwa, która ma chyba jeszcze większą rzeszę fanów w Polsce niż gra Gothic. Jeśli chodzi o klasykę czyli Trójeczkę, to oczywiście tutaj głównie rozgrywka skupiała się na grze z moim tatą oraz rozgrywaniem pojedynczych losowych scenariuszy. Jeśli dziś ktoś wybiera ten tytuł, to pewnie nie wyobraża sobie rozgrywki bez fanowskiego dodatku Horn of The Abyss, który nie tylko dodaje sporo usprawnień, ale także pozwala grać w trybie PvP Online.
Jeśli chodzi o część V, to według mnie jest to najlepsza część do ogrania w pojedynkę. Po pierwsze ma świetną kampanię, która na najwyższym poziomie trudności przysparza dużo bólu jak i satysfakcji. Ja osobiście bardzo sobie cenię modyfikację Heroes 5.5, która zmienia sporo w balansie gry, co przekłada się bardzo pozytywnie na odbiór rozgrywki, co widoczne jest również w kampanii.
Disciples 2 to wspaniała strategia turowa, która w przeciwieństwie do serii Heroes skupia się na jakości jednostek, a nie liczbie. Armia może składać się maksymalnie z 6 osób (bohater + 5 jednostek). Jak zatem zwiększać siłę armii? Trzeba expić :). Disciples świetnie połączył elementy turówki z grami RPG. Początkowo wilk lub goblin będzie sprawiał nam problemy, pod koniec gry pokonanie kilku smoków jednocześnie nie zrobi na nas wrażenia.
Za co jeszcze pokochałem tę grę? To bardzo proste. Można grać krasnoludami!
- Faraon
- Settlers 3 i 4
- Hades
- Darkest Dungeon
- Slay The Spire
- Euro Truck Simulator 2
- IceWind Dale
- TES Morrowind i Skyrim
- Graveyard Keeper
- Monster Hunter
- Risen 1 i 2 i 3
- Twierdza
- Twierdza Krzyżowiec
- NIE, nie grałem w Wiedźmina, na pewno kiedyś zagram 🙂