C / C++
Programowanie w języku C i C++. Praca z kodem niskopoziomowym oraz tworzenie i rozwijanie większych systemów.
Techstack
Programowanie, telekomunikacja i sieci komputerowe. Poniżej technologie, narzędzia oraz obszary techniczne, które wykorzystuję w pracy i rozwijam w praktyce.
Główne obszary
Obszary, które stanowią podstawę mojego doświadczenia programistycznego.
Programowanie w języku C i C++. Praca z kodem niskopoziomowym oraz tworzenie i rozwijanie większych systemów.
Technologie sieci komórkowych 4G (LTE) i 5G, ich architektura, komunikacja pomiędzy elementami sieci oraz zagadnienia związane z transmisją danych.
Modele i warstwy sieciowe, protokoły komunikacyjne, transmisja danych, architektura sieci komputerowych i telekomunikacyjnych oraz sposób współdziałania poszczególnych elementów systemu.
Programowanie
Języki wykorzystywane zarówno przy tworzeniu oprogramowania, jak i automatyzacji codziennej pracy.
Skrypty, automatyzacja, narzędzia pomocnicze i praca z danymi.
Automatyzacja zadań, skrypty oraz codzienna praca w środowisku Linux.
Testowanie i debugowanie
Narzędzia wykorzystywane do testowania, debugowania i analizy działania oprogramowania.
Tworzenie i utrzymywanie testów jednostkowych dla oprogramowania C++.
Mockowanie zależności i testowanie komponentów w projektach C++.
Framework do tworzenia testów jednostkowych i automatyzacji testowania oprogramowania.
Debugowanie, analiza działania programu i poszukiwanie przyczyn błędów.
Automatyzacja procesów CI/CD oraz uruchamianie i analiza zautomatyzowanych testów.
Analiza wyników testów integracyjnych oraz diagnozowanie problemów pojawiających się na styku wielu komponentów systemu.
Sieci
Praktyczna praca z komunikacją sieciową, przechwytywaniem ruchu i analizą pakietów.
Praca z protokołami i mechanizmami komunikacji wykorzystywanymi w sieciach komputerowych i telekomunikacyjnych.
Analiza ruchu sieciowego, przechwyconych pakietów oraz przebiegu komunikacji pomiędzy elementami systemu.
Przechwytywanie i analiza ruchu sieciowego z poziomu systemu Linux oraz diagnostyka komunikacji.
Szczegółowa analiza pakietów i komunikacji sieciowej w celu identyfikowania problemów oraz odtwarzania przebiegu zdarzeń.
Proces wytwarzania
Narzędzia oraz praktyki związane z tworzeniem oprogramowania i pracą w zespołach.
Kontrola wersji i codzienna praca z repozytoriami kodu.
Code review, zarządzanie zmianami i praca z procesem przeglądu kodu.
Planowanie, organizacja pracy zespołu i śledzenie zadań.
Praca w zespołach zwinnych oraz kilkuletnie doświadczenie w roli Scrum Mastera.
Środowisko
Środowiska i narzędzia, z których korzystam na co dzień podczas pracy programistycznej.
Codzienna praca w środowisku Linux, administracja z poziomu terminala oraz wykorzystanie narzędzi systemowych.
Sprawna praca z powłoką, narzędziami systemowymi, wyszukiwaniem, przetwarzaniem danych i automatyzacją zadań.
Środowisko wykorzystywane do tworzenia i analizy kodu oraz pracy z projektami.
IDE wykorzystywane w pracy nad oprogramowaniem i projektami wymagającymi rozbudowanego środowiska programistycznego.
Doświadczenie
Jednym z istotnych elementów pracy jest diagnozowanie problemów w dużych i złożonych systemach.
Analiza problemów w dużych i złożonych systemach oraz systematyczne poszukiwanie ich źródła.
Praca z bardzo dużymi logami i wyszukiwanie informacji potrzebnych do odtworzenia przebiegu zdarzeń oraz diagnozy problemu.
Śledzenie problemów obejmujących wiele komponentów, repozytoriów i wzajemnych zależności pomiędzy częściami systemu.
Łączenie informacji pochodzących z kodu, testów, logów i zachowania systemu w celu znalezienia przyczyny problemu.
Systemy
Doświadczenie w pracy z oprogramowaniem działającym na różnych architekturach sprzętowych i w różnych środowiskach wykonawczych.
Doświadczenie w tworzeniu, analizie i debugowaniu oprogramowania przeznaczonego dla różnych architektur sprzętowych.
Rozumienie zależności pomiędzy oprogramowaniem a środowiskiem sprzętowym oraz problemów pojawiających się na niższych poziomach systemu.
Po godzinach
Poza głównym obszarem zawodowym eksperymentuję również z innymi technologiami i frameworkami.
Technologia wykorzystywana hobbystycznie do tworzenia własnych eksperymentów i aplikacji.
Programowanie aplikacji webowych i eksperymentowanie z ekosystemem JavaScript.
Framework PHP wykorzystywany przy własnych projektach i eksperymentach.
Tworzenie interfejsów webowych i rozwijanie własnych projektów.
Doświadczenie zdobywane podczas hobbystycznych eksperymentów związanych z programowaniem i tworzeniem gier.
Praktyka
Interesuje mnie nie tylko znajomość poszczególnych technologii, ale przede wszystkim rozumienie systemu jako całości — od poziomu kodu, przez system operacyjny i sieć, aż po działanie większego systemu telekomunikacyjnego.