· mikula · 7 min
Okiem mentora #4 [wywiad]
Wywiad z Witoldem Wysotą, mentorem na bootcampie C++. Witek to Absolwent Wydziału Elektroniki i Technik Informacyjnych Politechniki Warszawskiej, dydaktyk z ponad dziesięcioletnim doświadczeniem w środowisku akademickim i komercyjnym. Od 2008 roku pracuje zawodowo jako architekt systemów i programista, głównie w językach obiektowych (C++, Python). Specjalizuje się we Qt, frameworku wspomagającym tworzenie wieloplatformowych aplikacji w C++, znanym głównie z łatwego tworzenia graficznych interfejsów użytkownika. Współtwórca i administrator serwisu Qt Centre, gdzie pomaga programistom używającym Qt z problemami w ich projektach, autor artykułów i książek o Qt. Od kilku lat coraz bardziej związany z systemami wbudowanymi.
Jak wyglądała Twoja droga do zostania programistą?
Zaczęło się od automatów z grami, do których zaciągałem tatę, kiedy jeździliśmy nad morze, gdy byłem dzieckiem. Kiedy miałem siedem-osiem lat, rodzice kupili mi mikrokomputer Atari. Ponieważ to były czasy, kiedy nie było jeszcze w Polsce Internetu, niełatwo było zdobywać gry i programy. Można było je kupować w nielicznych sklepach, nagrywać przez radio na magnetofon z rozgłośni harcerskiej, która transmitowała w nocy audycje z programami edukacyjnymi albo przepisywać kod źródłowy linijka po linijce z książek i czasopism (głównie z Bajtka). Do mojego Atari dołączony też był podręcznik, który zawierał wydruki prostych programów w języku BASIC. Przepisywałem je, potem zacząłem przerabiać i rozszerzać. Moim pierwszym poważnym programem było narzędzie do rozliczania rocznych podatków.
Potem było już łatwiej - dostałem się do liceum do klasy o profilu informatycznym, a po maturze rozpocząłem studia informatyczne na Politechnice Warszawskiej. Dobrze programować zacząłem mniej więcej w połowie studiów a łatwa dostępność materiałów o programowaniu sprawiała, że rozwijałem się w błyskawicznym tempie. Praca, od samego początku, właściwie sama mnie znajduje. Bardzo pomogło mi też bycie na kilku konferencjach, gdzie mogłem chłonąć wiedzę od lepszych od siebie.
Czym się zajmujesz na co dzień? W jakich technologiach pracujesz?
Moją główną dziedziną jest C++ i środowiska uniksowe, takie jak Linux. Jestem specjalistą od Qt - zestawu bibliotek do tworzenia wieloplatformowych aplikacji w C++. Zaczynałem od programowania na komputery biurkowe. Robię to do tej pory, ale coraz więcej zajmuję się programowaniem na systemy wbudowane (embedded). Przez ostatnie kilka lat zajmowałem się tworzeniem bazy do odtwarzania multimediów na platformach telewizyjnych. Uczę też na Politechnice Warszawskiej i udzielam szkoleń komercyjnych z zakresu inżynierii oprogramowania.
Co zdecydowało o tym, że zająłeś się właśnie tym (co teraz robisz)?
Nie wiem :) Wydaje mi się, że to był proces ewolucyjny… Gdy zaczynałem “na poważnie” programować, języki typu C i C++ były najbardziej powszechne. Potem dochodziły kolejne umiejętności, które albo mnie ciekawiły, albo były mi potrzebne do realizacji celów, które sobie postawiłem. Qt poznałem, bo potrzebowałem czegoś do tworzenia graficznych interfejsów użytkownika. Potem okazało się, że znakomicie nadaje się także do innych zastosowań, więc poznawałem ten framework coraz lepiej i używałem do coraz większej liczby projektów. Dobra znajomość Qt załatwiła mi moją pierwszą pracę jako programista.
Czym jest IoT?
Internet Przedmiotów to koncepcja łączenia ze sobą prostych urządzeń gospodarstwa domowego i innych codziennych przedmiotów, dzięki czemu razem mogą one zrobić więcej niż każde z nich z osobna, a właściciel może skonfigurować sposób ich współpracy. Żarówka przestaje być pasywnym elementem, który świeci albo nie, może zmieniać swoją jasność lub barwę w zależności od zewnętrznych czynników, np. może przygasać, jeżeli zostanie włączony stojący w tym samym pokoju telewizor, a kaloryfer może zmniejszyć poziom ogrzewania, gdy nikogo nie ma w domu. Powszechne stają się też systemy sterowania głosem, takie jak Google Home czy Amazon Alexa, które komunikują się z urządzeniami IoT, potrafią włączyć odtwarzacz muzyki czy wyświetlić film na ekranie telewizora.
Dlaczego rozważając przyszłość jako programista warto zainteresować się tematyką embedded?
Kiedyś komputery to były wielkie szafy, zajmujące całe pomieszczenia w piwnicach i laboratoriach i było na nie stać tylko wyższe uczelnie i wielkie korporacje. Potem weszły do domów i przeniosły się na biurka. Teraz już coraz mniej osób korzysta z komputerów stacjonarnych a i laptopy zaczynają odchodzić do lamusa na korzyść tabletów i telefonów komórkowych. Obecnie można kupić w pełni działający komputer za kilka dolarów, a każdy z nas ma w domu kilkanaście albo i kilkadziesiąt urządzeń, które można określić mianem komputerów embedded - lodówki, telewizory, urządzenia do komunikacji i rozrywki, urządzenia sieciowe, zegarki, lampy, czujniki, przełączniki - wymieniać można w nieskończoność. Miniaturyzacja będzie postępować. W zastosowaniach domowych, biurowych czy produkcyjnych jesteśmy po prostu, w dobrym tego słowa znaczeniu, skazani na embedded. Pracy w tych dziedzinach na pewno nie zabraknie.
Czym różni się praca programisty embedded od na przykład Java Developera?
Typowe programowanie w Javie jest jak budowanie z klocków Lego, natomiast embedded jest bardziej jak rzeźbienie w drewnie. W pierwszym przypadku mamy do dyspozycji dużo gotowych dobrze znanych i sprawdzonych komponentów i nasza praca polega na tym, żeby połączyć je ze sobą w taki sposób, żeby dobrze ze sobą współpracowały. Z kolei w drugim przypadku musimy zmagać się z charakterystyką konkretnego kawałka drewna, który jest inny niż większość innych kawałków drewna. Jest to często uciążliwe, ale pozwala osiągnąć praktycznie dowolny efekt, co daje mnóstwo satysfakcji. Nie zapominajmy też, że rzeźbienie, to nie tylko żłobienie dłutem rowków - najpierw materiał trzeba sobie przygotować, a na końcu oszlifować, zakonserwować i ozdobić. Podobnie jest przy systemach wbudowanych - oprócz samego programowania dobrze jest znać się na narzędziach dostępnych w środowisku i samym systemie operacyjnym, o ile urządzenie w ogóle takowy posiada. Oczywiście Javy można także używać w systemach embedded, ze wszystkimi konsekwencjami obu aspektów.
Dlaczego warto uczyć się C++ , a nie tylko Java? Ofert pracy z wymaganą znajomością Javy jest ponad dwukrotnie więcej niż tych z C++?
Java jest obecnie używana głównie w dużych systemach korporacyjnych pracujących na wielu maszynach naraz. Często korzysta z systemów, które zostały napisane w innych językach, na przykład w C++. Ten ostatni sprawdza się też idealnie na pojedynczych komputerach - bardzo rzadko widzimy programy narzędziowe czy gry napisane w Javie. Nie zapominajmy też o środowisku .NET i języku C#. Powiedziałbym, że są one czymś pomiędzy światami Javy i C++ i chyba są bardziej bezpośrednim konkurentem dla C++ niż Java. .NET mamy na każdym komputerze z systemem Windows i używanie go jest bardziej naturalne na takich komputerach niż instalowanie maszyny wirtualnej Javy. Natomiast koniec końców pamiętajmy, że potrzebni są programiści każdego z tych języków. Tym bardziej, że podsystemy danego systemu są często pisane w zupełnie innych językach.
Czy nauczenie się C++ i praca w tej technologii wymaga innych kompetencji niż na przykład praca Java Developera?
Nie. W gruncie rzeczy C++ i Java to są bardzo podobne języki - oba należą do grupy języków obiektowych i chociaż mają inne składnie, to koncepcje używane przy programowaniu pozostają takie same. Jak ktoś zna jeden z tych języków, to nauczenie się tego drugiego nie powinno stanowić żadnego problemu. Prawdziwe różnice są widoczne dopiero wtedy, kiedy zaczniemy mówić o tym, jak program jest potem wykonywany przez komputer. C++ bardziej wprost przekłada się na to, co robi procesor, niż w przypadku Javy, która uruchamia swoje programy na maszynie wirtualnej. Powiedziałbym, że aby dobrze programować w języku typu C++, trzeba być bardziej świadomym tego, jak działa sprzęt, niż w przypadku Javy. Powiedzielibyśmy, że (w przeciętnym zastosowaniu) C++ jest “bliżej sprzętu” niż Java.
Jakie są możliwe ścieżki zawodowe osoby ze znajomością C++ i podstaw IoT?
W zasadzie możliwy jest rozwój w dowolnym kierunku. Już znajomość samego C++ daje duże możliwości. Dodatkowo jest dobrym punktem wyjścia do nauki innych języków programowania. Jeżeli do tego dołożymy IoT, które coraz bardziej będzie obecne w naszym życiu i w naszym otoczeniu, otrzymujemy warsztat, który pozwoli nam programować urządzenia, z którymi stykamy się codziennie. A to, poza wymiernym skutkiem finansowym, daje też sporo satysfakcji.
W jakich branżach przeważa C++?
Myślę, że przede wszystkim tam, gdzie mamy do czynienia z systemami, składającymi się z pojedynczych komputerów, czyli w branży gier i programów użytkowych, urządzeń domowych, takich jak telewizory czy lodówki. Ważną gałęzią są też urządzenia przemysłowe, gdzie zasoby sprzętowe są ograniczone albo gdzie liczy się wydajność, bo oszczędności pojedynczych dolarów na cenie sprzętu przekładają się na ogromne kwoty, jeśli weźmiemy pod uwagę liczbę sztuk wypuszczanych na rynek. Coraz większy rynek, gdzie króluje C++, stanowi branża automotive, czyli różnego rodzaju urządzenia montowane w samochodach, od systemów rozrywki począwszy na urządzeniach sterujących skończywszy. Te ostatnie muszą też spełniać normy bezpieczeństwa, podobnie jak systemy montowane na lotniskach, w samolotach czy przemyśle kosmicznym. Takie normy dużo łatwiej spełnić oprogramowaniu, które ściśle kontroluje sprzęt, na którym pracuje.