InfoShare 2018: Wywiad z Mateuszem Pusz, trenerem C++ oraz KONKURS!!!

Już za niecały miesiąc w Gdańsku rozpocznie się jedna z największych konferencji technologicznych w rejonie Europy Środkowo-Wschodniej. Mowa oczywiście o InfoShare 2018, który jak zresztą mogliście się dowiedzieć objąłem w trym roku „patronatem medialnym”.

Konferencja InfoShare.

Aby zachęcić Was do udziału w tym niezwykłym wydarzeniu przygotowałem dla Was niezwykle ciekawy wywiad z Mateuszem Puszem, programistą C++ w EPAM system. Mateusz w dziedzinie C++ może pochwalić się naprawdę sporym osiągnięciami oraz między innymi tym, że bierze udział w pracach nad najnowszym standardem tej technologii! Ale to nie wszystko…

mam również dla jednego z czytelników darmową wejściówkę – Conference pass o wartości 600 zł! Szczegóły konkursu na końcu artykułu, jeśli jednak nie uda wam się jej zdobyć to pamiętajcie, że wstęp na większość scen jest zupełnie darmowy, wystarczy tylko się zarejestrować i odebrać „Basic pass”, dokonacie tego na stronie infoshare.pl/is-register.

Miłej lektury…

Wywiad z Mateuszem Pusz, C++ trainer & Chief Software Engineer

Łukasz Dudziński, StrefaKodera.pl: Na początek może opowiedz parę słów o sobie (studiach, doświadczeniu zawodowym etc.)?

Mateusz Pusz, C++ trainer & Chief Software Engineer: Witam wszystkich czytających ten wywiad. Nazywam się Mateusz Pusz i jestem ewangelistą C++. Od zawsze interesowałem się programowaniem komputerów, poświęciłem bardzo dużo wolnego czasu, aby nauczyć się programować w języku C++ i przy każdej okazji staram się dzielić tą wiedzą z innymi. Ci, co pracowali ze mną w różnych firmach wiedzą, że organizuję dużo wewnętrznych szkoleń i pogadanek na ten temat. Pozostali mogą mnie spotkać na największych konferencjach dedykowanych tematyce C++ lub wziąć udział w przeprowadzanych przeze mnie szkoleniach w tym temacie.

Mateusz Pusz, C++ trainer i Chief Software Engineer.

Czy jako już doświadczony programista poleciłbyś poświęcenie 5 lat z życia na studiowanie informatyki czy może raczej warto się skupić na różnego rodzaju kursach programowania (szkołach programowania) i rozwijać swoją wiedzę z zakresu konkretnej technologii?

Ciężko odpowiedzieć na to pytanie, szczególnie, że nie studiowałem informatyki a telekomunikację. Programować nauczyłem się dużo wcześniej. Już w wieku 10 lat przepisywałem programy z gazety Bajtek na moim Commodore 16. Potem pojawiły się mocniejsze komputery i większe możliwości… Zawsze programowania uczyłem się sam w tzw. czasie wolnym. Sama szkoła, studia, kurs czy praca zawodowa moim zdaniem nie wykształcą programisty światowej klasy. Do tego trzeba dodać coś od siebie, poświęcić trochę prywatnego czasu, aby przeczytać książki, przejrzeć blogi, czy dołączyć do dobrze prowadzonego projektu open source. Nie oznacza to jednak, że studia oceniam jako stratę czasu. Dają one zarówno szeroką ogólną podstawę teoretyczną, jak i specjalizację domenową możliwą do wykorzystania potem w pracy. Często są też swoistą szkołą życia.

Jak przebiegała rekrutacja do Twojej pierwszej „prawdziwej” pracy w Intelu?

Do pracy w Intelu zostałem zrekrutowany już na studiach. Od zawsze chciałem pracować w tej firmie, więc już na trzecim roku wziąłem udział w ich programie stypendialnym. Zostałem przyjęty jako jedyny stypendysta z telekomunikacji i tak zaczęła się moja długa przygoda z tą firmą.

Czyli jednak studia do czegoś się przydały?

W zasadzie tak.

Jaki projekt szczególnie zapadł Ci w pamięć?

Moim zdaniem najciekawsze projekty pojawiły się na samym początku mojej pracy w Intelu. Programowanie projektów teleinformatycznych i telekomunikacyjnych to było to, co zawsze chciałem robić. Pierwsze projekty, przy których pracowałem były związane z sieciami telekomunikacyjnymi i Internetem, czyli tym, co mnie od dawna interesowało i czego uczyłem się na studiach. Brałem udział przy tworzeniu routerów IP firmy Intel, następnie pracowałem przy dużych projektach związanych z technologiami UMTS i WiMax.

Co szczególnie zapamiętałeś z tego okresu? Dostałeś jakąś szczególnie ciekawą radę?

Wtedy tego tak jeszcze nie doceniałem, ale to właśnie na początku mojej pracy w Intelu poznałem jak dobrze jest pracować w gronie ekspertów i firmie, która pracuje prawie jak startup pomimo tego, że jest częścią dużej korporacji. Gdy zaczynałem pracę było nas tam niewiele więcej niż 100 inżynierów. Większość z tych ludzi posiadała wysokie kompetencje w swojej dziedzinie i była starannie wybrana w procesie rekrutacji. Dużą część z nich można tam spotkać do dzisiaj, ale w większości nie są już inżynierami, pracuje tam teraz dużo więcej ludzi, a charakterystyka startupu nie pasuje już dla tak dużej maszyny, jaką dzisiaj jest Intel w Polsce.

Co skłoniło Ciebie do zmiany pracodawcy na EPAM Systems?

Do zmiany pracy skłoniło mnie poszukiwanie wyzwań i chęć dalszego rozwoju w temacie C++. Dostałem ofertę pracy nad interesującym projektem o bardzo wysokich wymaganiach wydajnościowych dla jednej z największych instytucji finansowych w swojej kategorii na świecie.

Jak rozwijała się Twoja kariera w EPAM Systems, na profilu LinkedIn widać, że obejmowałeś wiele różnych stanowisk?

W firmie Epam zostałem zatrudniony jako mentor technologii C++ na całą Polskę oraz jako lider C++ w projekcie, o którym już wspomniałem. Wkrótce jednak okazało się, że pojawiły się nowe wyzwania i okazje. Korzystając z nich zacząłem brać aktywniejszy udział jako prelegent w konferencjach C++ oraz założyłem w firmie Global C++ Community. Dało mi to dużo większą rozpoznawalność wewnątrz firmy i poza nią. Dzięki temu udało mi się dotrzeć do szefów Epam i przedstawić im koncepcję dołączenia do komitetu ISO C++, który zajmuje się standaryzacją języka C++ i wyznacza kierunki jego rozwoju. Kiedyś czytałem książki o C++ napisane przez znanych autorów. Potem na konferencjach słuchałem ich wykładów i zdobywałem w tych książkach ich autografy. Teraz 3 razy w roku przez tydzień zasiadam z nimi przy jednym stole i razem pracujemy nad kolejną wersją języka C++. Muszę przyznać, że to spełnienie jednego z moich marzeń.

Co skłoniło Cię do założenia firmy Train IT, która prowadzi szkolenia dla inżynierów w korporacjach?

Jak już wspominałem przy każdej okazji staram się dzielić zdobytą wiedzą z innymi programistami. Można mnie regularnie spotkać na konferencjach, gdzie daję wykłady lub prowadzę krótkie warsztaty. Umożliwia mi to podzielenie się moimi przemyśleniami lub doświadczeniem w zakresie ściśle określonego, nieraz wąskiego, tematu. Jednakże tylko w czasie serii kilkudniowych szkoleń jestem w stanie przekazać pełnię wiedzy na temat tak skomplikowanego tematu, jakim jest C++. Z tego też powodu współpracuję z największymi agencjami szkoleniowymi w całej Polsce oraz założyłem własną firmę Train IT, aby łatwiej dotrzeć do osób zainteresowanych zamówieniem takiego szkolenia.

Czy Twoim zdaniem C++ jest dobrą technologią do nauki, powiedzmy dla studenta I roku informatyki, który jeszcze za bardzo nie miał doświadczenia z programowaniem?

Powszechny dostęp do komputerów, Internet, multum książek na temat programowania, informatyka wprowadzana już nawet w przedszkolach sprawia, że dzisiaj dużo łatwiej nauczyć się programować niż kiedyś. Moja córka w wieku 5 lat zaczęła bawić się na tablecie aplikacjami, w których programowała ruchy robocika czy za pomocą ScratchJr tworzyła proste historyjki. Teraz mając 8 lat na co dzień bawi się programowalnym robocikiem Ozobot czy Lego WeDo i nie może się już doczekać, kiedy zacznie się uczyć pisania „prawdziwego” kodu. To pasja i osobiste zaangażowanie kreuje bardzo dobrego programistę…

Po drugie C++ to bardzo skomplikowany i złożony język. Potrzeba wielu lat, aby czuć się w nim komfortowo i dostarczać oprogramowanie o światowej jakości. Z jednej strony oznacza to dosyć wysoki próg wejścia w temat, z drugiej oznacza, że zyskuje się kompetencje, które nie są powszechne na rynku i dają możliwość negocjacji dobrych stawek wynagrodzenia. Jeśli ktoś lubi wyzwania lub interesuje się tym jak oprogramowanie współpracuje ze sprzętem, na którym jest ono uruchamiane, to ten język programowania będzie jak najbardziej dla niego. Znając go ma szansę pracować nad najszybszymi i najbardziej wydajnymi aplikacjami na świecie, bo to właśnie one są implementowane za pomocą C++.

Jakie ciekawe projekty można stworzyć wykorzystując głównie C++? Ja zawsze miałem problem z tą technologią, bo nigdy mi się do niczego nie przydawała – strony www pisze się w PHP lub C#…, aplikacje mobilne w Javie, Kotlinie, Swifcie etc. a w C++?

Aby odpowiedzieć na to pytanie najpierw należy zrozumieć dlaczego język C++ przez tyle lat nie znika z rynku i tak naprawdę rozwija się teraz szybciej niż kiedykolwiek wcześniej. Od ponad 10 lat szybkość zegarów w procesorach naszych komputerów już nie wzrasta. Aplikacje napisane dzisiaj nie zaczną automatycznie działać szybciej za rok tylko dlatego, że kupimy nowszy komputer. Tak było pod koniec XX wieku ale od dawna to już nie jest prawdą. Motto C++ to „Don’t pay for what you don’t use”. Oznacza to pełną kontrolę nad tym co się dzieje na naszej maszynie przy wykorzystaniu jej maksymalnej wydajności. Dlatego, gdy tworzymy projekt o dużych wymaganiach wydajności musimy bardzo świadomie myśleć, na co „wydajemy” cykle naszego zegara. Co więcej, mamy też coraz większe oczekiwania w temacie zużywania mocy. Chcemy, aby nasze telefony komórkowe potrafiły pracować na naładowanej baterii więcej niż jedną dobę. Wielkie farmy serwerów gigantów Internetu zużywają tyle prądu, co małe miasteczko, a koszty ich chłodzenia przekraczają wielokrotnie koszty pracy programistów, którzy tworzyli dla nich oprogramowanie. Ostatnie dziesięciolecie to ponowny wzrost zainteresowania językiem C++. Olbrzymie pieniądze inwestują w niego największe firmy na świecie takie jak Google, Microsoft, Intel, AMD, Apple, Nvidia, Facebook, Amazon, Bloomberg i wiele innych. To właśnie w tym języku powstają silniki większości gier, w które tak chętnie gramy na naszych komputerach, konsolach czy telefonach komórkowych. Z C++ korzystają też instytucje finansowe do robienia milionów operacji w każdej sekundzie życia giełdy. C++ jest używany do pisania bibliotek, od których oczekuje się wysokiej wydajności obliczeń lub dużej liczby transakcji na sekundę. Pisze się w nim silniki serwerów, biblioteki sztucznej inteligencji, algorytmy do enkrypcji danych i wiele innych.

Kolejne hasło C++ to „Don’t leave room for a language below C++ (except assembler)”. Oznacza to, że język C++ może być, i coraz częściej jest, wykorzystywany do programowania blisko samego sprzętu, czyli w domenie, w której tradycyjnie dominował język C. Mechanizm szablonów C++ daje tutaj wielką przewagę nad tak prostym narzędziem, jakim jest język C. To właśnie w C++ jest pisany system operacyjny Windows.

Jakie polecasz materiały do nauki C++ dla osób początkujących (całkiem zielonych), średnio zaawansowanych (powiedzmy, z 2-letnim komercyjnym doświadczeniem) i osób zaawansowanych?

Dla osób początkujących bardzo dobrą lekturą jest „A Tour of C++” napisana przez twórcę tego języka Bjarne Stroustrupa. W stosunkowo niegrubej książce zawarł on wiele konceptów tzw. Modern C++, czyli sposobu pisania nowoczesnego kodu C++.

Dla osób średniozaawansowanych dobrą lekturą będzie seria 4 książek „Effective C++” autorstwa Scotta Meyersa. Pomimo, że większość z tych książek ma już sporo lat, to zawierają one dobry opis podstawowych, ale często napotykanych problemów przy użyciu języka C++ oraz pokazują jak sobie z nimi radzić.

Osoby zaawansowane przeważnie same już wiedzą, gdzie szukać wiedzy, a nie jest o nią wcale tak łatwo, powinny śledzić nagrania z największych konferencji C++ na świecie, czytać blogi znanych autorów, śledzić pracę komitetu ISO C++, przeglądać lub nawet kontrybuować do wiodących projektów open source, wyjeżdżać na konferencje oraz szkolenia i tam konfrontować z innymi swoje poglądy i opinie. Potrzeba dużo czasu i poświęcenia, aby zostać naprawdę dobrym programistą w języku C++.

Rekruterzy często patrzą na profile na Githubie, Gitlabie etc. Jak myślisz, jaki projekt warto stworzyć, żeby móc nim później pochwalić się na rozmowie rekrutacyjnej oraz jakie elementy powinien on zawierać (wiadomo, aplikacja konsolowa raczej odpada)?

A dlaczego aplikacja konsolowa odpada? Większość najszybszych na świecie narzędzi i bibliotek napisanych w C++ udostępnia swoje interfejsy właśnie w konsoli. Tak jak mówiłem, C++ jest używany do pisania bardzo wydajnych aplikacji. Wszystko, co nie jest nam potrzebne spowalnia nasze oprogramowanie lub ogranicza nasze możliwości. Nie ma co płacić wydajnością za GUI, gdy nasza aplikacja ma robić coś bardzo szybkiego i da się to zrobić wydając po prostu komendę z konsoli, przez sieć lub z innego procesu.

Ale wracając do tematu rekrutacji i własnych projektów. Po pierwsze sugerowałbym stworzenie niewielkiej „perełki”, czyli bardzo dobrze napisanej biblioteki udostępniającej narzędzie przydatne dla większości programistów C++. Może to być np. implementacja nowej funkcjonalności, która ma się pojawić w kolejnej wersji standardu C++ (np. std::expected<T, E>) czy też biblioteka do parsowania argumentów podanych właśnie za pomocą wspomnianej konsoli. Sama funkcjonalność nie jest tutaj aż tak istotna. Ważne, aby napisany kod był bardzo wydajny i był dobrym przykładem Modern C++.

Po drugie sugerowałbym dołączenie i kontrybucję do dużych projektów open source. Nauczy to nas pracy w grupie, umożliwi konfrontację z innymi programistami swoich umiejętności oraz nauczy istniejących na rynku standardów kodowania w C++. Pokaże to też rekruterom, że jesteście aktywni poza pracą, że nie poprzestajecie tylko na tym ,co jest Wam dane przez studia czy aktualnego pracodawcę.

Na koniec opowiedz jeszcze o warsztatach, jakie będziesz prowadził podczas infoShare 2018?

„Modern C++ Design” to bardzo ważny wycinek większego szkolenia o Modern C++. W czasie całodniowych warsztatów, które poprowadzę na InfoShare 2018, przekażę uczestnikom wiedzę o tym, jak wygląda nowoczesny kod pisany w C++. Nauczą się oni podstawowego zestawu idiomów, z których programista C++ korzysta na co dzień przy tworzeniu wydajnych narzędzi i bibliotek. Uczestnicy pogłębią swoją wiedzę i będą mogli w praktyce przećwiczyć użycie szablonów C++, które dla wielu programistów tego języka ciągle pozostają czarną magią i tematem, którego „lepiej nie dotykać”. Jestem pewien, że po odbyciu tego szkolenia jego uczestnicy będą mieli sporo pomysłów jak wykorzystać zdobytą wiedzę, aby usprawnić narzędzia, które są używane przez nich w codziennej pracy.

Czy chciałbyś dodać coś jeszcze od siebie?

Jeśli można, to chciałbym jeszcze raz podkreślić jak ważnym jest, aby nie poprzestawać tylko na tym, co się dostaje na studiach czy w pracy. Przeważnie to za mało, aby wykształcić dobrego programistę. Na studiach czy kursach często uczy się „przeterminowanej” wiedzy podczas, gdy w pracy spotyka się różne ograniczenia, stare środowisko i restrykcyjne standardy kodowania, które to jak okowy uniemożliwiają nam rozwój, aby zostać programistami światowego poziomu. Tylko we własnym projekcie lub w open source można znaleźć wolność w doborze środków i narzędzi. Tylko tam można przećwiczyć rzeczy, których z braku doświadczenia balibyśmy się użyć w pracy. Piszcie własne projekty, śledźcie co się dzieje na świecie, jeździjcie na konferencje, szukajcie kursów i warsztatów doszkalających. Mam nadzieję, że wcześniej czy później gdzieś się spotkamy… 

Dzięki za cenne wskazówki i wywiad…

Dziękuję i pozdrawiam!

KONKURS

Jak wspomniałem na początku artykułu mam do rozdania wejściówkę „Conference pass” o wartości 600 zł uprawniającą do udziału w tegorocznej edycji InfoShare, który odbędzie się w dniach 22-23 Maja! Zadanie konkursowe jest bardzo proste, wystarczy w komentarzu pod artykułem odpowiedzieć na następujące pytanie…

Czym dla Ciebie są innowacje?

Autora najciekawszej odpowiedzi nagrodzę wspomnianą wyżej wejściówką. Na zgłoszenia czekam do 6 maja, godz. 23:59! Niech poniesie Was fantazja i kreatywność (ale oczywiście w granicach rozsądku), pamiętajcie też, żeby nie odkładać zgłoszenia na ostatnią chwilę ;)

Powodzenia!

Przeczytaj również

, , , , , , , , , , ,