Kariera

.Net

Kulisy pracy w IT – wywiad z Adamem Kaźmierskim

Zdjęcie Adama Kaźmierskiego

.NET to stale rozwijająca się technologia, a jej popularność na rynku IT nie słabnie. O tym, jak wygląda dzień pracy .NET Developera, jakie są największe wyzwania, z którymi się mierzy oraz w jakich projektach w Britenet ma szansę brać udział, opowiedział nasz Microsoft Technology Leader – Adam Kaźmierski.

Jak wygląda na co dzień praca .NET Developera i na czym dokładnie polega?

Odpowiadając na to pytanie, dobrze jest wyjaśnić na początku czym jest .NET i kim jest .NET Developer. Pod powszechnie używanym pojęciem .NET kryje się cała rodzina frameworków, rozwiązań technologicznych, języków programowania, narzędzi oraz społeczności, nad którymi trzyma pieczę i wyznacza kierunek znana znamienitej większości społeczeństwa firma Microsoft. Tak rozumiany .NET oczywiście wykorzystywany jest finalnie do wytworzenia konkretnego rozwiązania programistycznego. Szeroki zakres tej technologii umożliwia udzielenie odpowiedzi na niemal każde programistyczne zapotrzebowanie biznesowe – od Web API i całych aplikacji webowych, desktopowych i mobilnych, do Windows Services, szyn danych czy nawet gier.

.NET Developer jest natomiast inżynierem oprogramowania, który w swojej codziennej pracy mierzy się z wyzwaniami typowymi dla takowego inżyniera, lecz oczywiście przy wykorzystaniu rozwiązań, narzędzi i technologii silnie opartych o .NET. Zatem w ogólnym spojrzeniu na .NET Developera należy powiedzieć, że zajmuje się on projektowaniem, implementacją i utrzymywaniem oprogramowania odpowiadającego na zapotrzebowanie szeroko rozumianego biznesu.

Myślę, że trudno jest odpowiedzieć na pytanie, jak wygląda codzienna praca z uwagi na to, że jej detale są mocno związane z danym projektem i sposobem jego realizacji. Z całą pewnością mogę jednak powiedzieć, że w znamienitej większości komercyjnych rozwiązań .NET Developer codziennie będzie programował przy wykorzystaniu języka C#, miał styczność (mniej bądź bardziej świadomie) z wzorcami projektowymi oraz zapewne będzie operował na bazie danych w jej dowolnej formie.

Jakie są największe wyzwania/problemy w Twojej codziennej pracy?

W przeszłości zdecydowanie powiedziałbym, że problemem mogło być wytwarzanie oprogramowania, które docelowo miało trafić do użytkowników platformy Linux. Na szczęście jednak już od kilku lat kompatybilność oprogramowania wytwarzanego przy pomocy .NET na tę platformę uległa znacznej poprawie.

Dziś znów odniósłbym się do tego, że największe wyzwania, które napotyka .NET Developer, związane są bardziej z rolą inżyniera oprogramowania, niż z konsekwencjami wynikającymi z używania któregoś z rozwiązań czy technologii rodziny .NET. Dla mnie największymi wyzwaniami są niezdecydowanie biznesu i zachodzące zmiany projektowe, zwłaszcza takie, które uderzają w filary wytworzonego dotychczas produktu. Takie zmiany mogą wpływać na architekturę rozwiązania, dlatego należy je zaimplementować w bardzo przemyślany sposób, by uniknąć w przyszłości zaciągania „długu technologicznego". Na skutek ich wdrożenia naturalna jest możliwość pojawienia się błędów w aplikacji, dlatego często należy przeprowadzić testy regresji przetestowanych i zaakceptowanych już modułów projektu, co dla całego zespołu może dawać wrażenie robienia wielokrotnie tego samego.

Jakie należy mieć predyspozycje/umiejętności do pracy na takim stanowisku?

Możliwość wytworzenia przy użyciu .NET różnego rodzaju rozwiązania programistycznego nie ułatwia jednoznacznie udzielenia odpowiedzi na to pytanie, jednak jest kilka umiejętności i cech osobowości, które zdecydowanie będą pomocne przy codziennej pracy .NET Developera.

W tym samym rzędzie postawiłbym umiejętność pozyskiwania informacji, cierpliwość, umiejętność analitycznego myślenia i determinację w dążeniu do celu. Są to bardzo ważne aspekty z uwagi na to, że praca na tym stanowisku przez sporą część czasu polega na opracowywaniu rozwiązania odpowiadającego na dane zadanie. W zależności od zapotrzebowania możemy znaleźć gotowe rozwiązanie lub wskazówki w obszernej dokumentacji prowadzonej przez Microsoft, lub na forach zrzeszających społeczności skupione wokół rodziny .NET. Wymaga to jednak wymienionych wcześniej predyspozycji, gdyż niekiedy rozwiązanie, którego szukamy, nie jest opisane w pełny, jednoznaczny i satysfakcjonujący nas sposób. Zdecydowanym ułatwieniem będzie również znajomość języka angielskiego, ponieważ dokumentacje i narzędzia nie zawsze są przetłumaczone na język polski.

Kolejny istotny aspekt, który warto jest w sobie szlifować, to umiejętność pracy w grupie oraz empatia. Choć osoby z szerokiej branży IT, a zwłaszcza programiści, mogą prześmiewczo być postrzegani jako skryte, milczące, swoiste samotne wilki, to w mojej ocenie jest to co najmniej przerysowane spojrzenie. Wytwarzanie oprogramowania jest pracą zespołową, w której udział bierze często kilka do kilkudziesięciu osób. Codziennością życia projektowego jest rozmowa z zespołem, dzielenie się doświadczeniem, radą, a w rozmowach z biznesem lub osobami zarządzającymi projektem, bronienie wytworzonego rozwiązania, konsultacje, znajdowanie kompromisów. Realizacja projektów komercyjnych trwa często miesiącami, a nawet latami. W perspektywie takiego okresu bardzo istotne jest, aby być ludzkim dla siebie nawzajem, przestrzegając zasad dobrych obyczajów z szacunkiem kooperować w dążeniu do realizacji celu, gdyż na atmosferę i siłę mentalną zespołu wpływ ma każdy jego członek. Myślę, że każdy z nas zdecydowanie woli pracować w poczuciu wspólnoty, czasami wręcz braterstwa niż w poczuciu napięcia, strachu czy zniechęcenia.

Czy są jakieś niestandardowe umiejętności lub doświadczenia („z życia"), które przydały Ci się w pracy na tym stanowisku?

Projekty programistyczne realizowane są w odpowiedzi na konkretne potrzeby biznesowe, więc każda wiedza domenowa z konkretnej dziedziny biznesu może okazać się przydatna przy realizacji implementacji projektu. Myślę jednak, że wyjątkowo przydaje się moje doświadczenie nabyte przy organizacji eventów IT, czym zajmowałem się za czasów studenckich. Dzięki temu zdecydowanie poprawiły się moje zdolności organizacji i planowania przedsięwzięć, co jest niezwykle pomocne przy planowaniu prac samemu oraz z większą liczbą osób. Dodatkowo nieocenienie pomocna jest umiejętność skutecznej komunikacji, którą również rozwijałem przy organizacji eventów podczas rozmów z prelegentami czy firmami sponsorskimi. Takie doświadczenie sprawia, że łatwiej jest mi w komfortowy dla wszystkich stron sposób udzielić konsultacji, znaleźć kompromis czy nawet zażegnać powstały konflikt.

Jak wspominasz proces rekrutacji?

Z Britenet współpracuję od ponad 5 lat i mimo odległego już czasu od procesu rekrutacji, wspominam go jako bardzo przyjazne i profesjonalne doświadczenie. Udział w procesie dla mnie w tamtym momencie był pozytywnie zaskakujący i niespodziewany. Sam od dłuższego czasu byłem skupiony na szkoleniu się z zakresu szeroko rozumianego .NET. Pierwsze relacje z Kasią reprezentującą Britenet nawiązałem jako organizator jednego z eventów IT, co związane było z moją prężną działalnością w tym obszarze w czasach studenckich. W dniu eventu byłem skupiony na moich obowiązkach jako organizatora, jednak w rozmowie z Kasią zeszliśmy na temat ich otwartych pozycji i opcji współpracy, skąd od słowa do słowa zostałem zaproszony do wzięcia udziału w rekrutacji do programu stażowego „Step One" na pozycję .NET Developera. W następstwie tego odbyłem rozmowę ukierunkowaną już na sprawdzenie mojej osobowości i predyspozycji do współpracy, co odbywało się w równie przyjacielski oraz profesjonalny sposób. Tego samego dnia odbyłem kolejną rozmowę, tym razem z Robertem, który weryfikował głównie moje kompetencje techniczne, co również odbywało się w świetnej dla mnie atmosferze. Po rozmowach poinformowano mnie, bym obserwował maila, gdyż tą drogą miałem się dowiedzieć o ostatecznych decyzjach związanych z moją kandydaturą, co rychło nastąpiło – szybko otrzymałem informację o przyjęciu mnie do firmy. Osobiście takiego procesu rekrutacji życzę każdemu.

Co doradziłbyś osobom biorącym udział w rekrutacji na stanowisko .NET Developera – o czym z Twojej perspektywy warto pamiętać i na co warto się przygotować?

Praca .NET Developera może dotyczyć szerokiego spektrum rodzaju oprogramowania. W zależności od tego, czy rekrutacja odbywać się będzie do projektu związanego z rozwojem projektu API, aplikacji mobilnej, webowej czy desktopowej, architektura takiego rozwiązania może znacząco się różnić. Na szczęście jest wiele części wspólnych i uniwersalnych dla rozwoju każdego z wymienionych rodzajów oprogramowania przy użyciu .NET.

Gdybym to dzisiaj pracował nad wejściem do branży IT, szkoliłbym się z programowania w języku C#, który jest głównym językiem całego .NET. W następnej kolejności uczyłbym się teorii programowania obiektowego oraz wzorców projektowych, jako że C# jest językiem programowania obiektowego. Posiadając już umiejętność posługiwania się w jakimś stopniu najpopularniejszym językiem rodziny .NET, kolejnym krokiem byłoby nauczenie się posługiwania jakimś systemem kontroli wersji, np. GIT i GIT Flow. Dzięki temu nabyłbym wiedzę z zakresu zarządzania kodem źródłowym aplikacji i komfortowego rozwijania całej aplikacji przez wielu programistów jednocześnie.

Idąc dalej, zdecydowałbym się na poszerzanie wiedzy z zakresu teorii i praktyki relacyjnych baz danych. W ten sposób zdobyłbym kompetencje z zakresu przechowywania danych powiązanych z rozwijanymi projektami. Mając już tę wiedzę, nauczyłbym się jak od strony .NET operować na takiej bazie danych, stąd w następnej kolejności skierowałbym się ku nauce biblioteki ORM – Entity Framework.

Dopiero na końcu zastanowiłbym się, jaka jeszcze specyficzna wiedza mogłaby być wymagana dla rozwoju konkretnego już rodzaju oprogramowania. Dla przykładu rozwijając API lub całe aplikacje webowe, z pewnością przygotowywałbym się dodatkowo z zakresu teorii i praktyki znajomości protokołu HTTP, a w przypadku rozwoju aplikacji mobilnych dodatkowo zdobywałbym wiedzę z cyklu życia i stanów aplikacji mobilnej. Jako ostatnie, ale nie mniej ważne, skupiłbym się na przygotowaniu mentalnym, pamiętając, że praca programisty jest pracą zespołową, dlatego dobra komunikacja i determinacja w dążeniu do wspólnego celu będzie dodatkowym atutem kandydata. Przygotowując się i posiadając wyżej opisaną wiedzę, z dużym prawdopodobieństwem mogę powiedzieć, że będziemy realnym kandydatem podczas procesu rekrutacyjnego na poziomie junior.

Który z projektów w Britenet, w którym brałeś udział, okazał się dla Ciebie najbardziej rozwijający? 

Należy nadmienić, że każdy projekt, nawet bliźniaczo podobny do już realizowanego przez nas będzie częścią dodaną do naszego doświadczenia z uwagi na innego klienta, osoby zarządzające, czy same biblioteki, przy których użyciu będziemy realizować projekt. Jeśli chodzi o najbardziej rozwojowe projekty, w których brałem udział, to muszę wymienić 2 z nich.

Pierwszy, zdecydowanie najbardziej rozwijający moje kompetencje techniczne i wiedzę projektową to projekt realizowany dla podmiotu publicznego, związanego z obsługą wniosków o dofinansowanie z funduszy UE przez instytucje i beneficjentów. Był to mój pierwszy tak duży projekt, który w praktyce pokazał mi, jak wygląda komercyjne wytwarzanie rozwiązania programistycznego przez cały zespół projektowy. To tam pierwszy raz zderzyłem się z ogromem świata IT, przez co, patrząc z perspektywy czasu, nabyłem największe kompetencje w stosunku do wiedzy, z jaką wszedłem do zespołu. Do dziś z sentymentem wspominam mój udział w tym przedsięwzięciu.

Kolejny projekt, o którym chciałbym wspomnieć jest Aegris, który jest produktem skierowanym do ośrodków medycznych związanych z przeprowadzaniem badań klinicznych. To przedsięwzięcie cenię szczególnie za to, że brałem udział w jego powstawaniu już na etapie koncepcji produktu w roli konsultanta technicznego. Dzięki temu nabyłem kompetencje z zakresu cyklu życia całego produktu, planowania jego realizacji i w jakimś stopniu zarządzania projektem programistycznym.