Programowanie – sztuka czy rzemiosło?

25/05/2021

Programista według Wikipedii, to osoba pisząca programy komputerowe w języku programowania, inaczej developer, koder. Co naprawdę się kryje w zawodzie programisty? Czy programowanie ogranicza się tylko do pisania kodu? Czy programiści uważają siebie za twórców czy rzemieślników? Zapytałam jednego z naszych Lead Developerów – Roberta Kuśmierka o jego perspektywę.

Zawód programisty - sztuka czy rzemiosło?
Robert, jak zaczęła się Twoja przygoda z programowaniem? 

Pomysł, żeby wejść na tę drogę, w moim przypadku, zrodził się raczej w sercu niż w głowie. Nie była to racjonalna i przemyślana decyzja, poprzedzona głęboką analizą, budowaniem strategii i wytyczaniem kamieni milowych w równych odstępach między momentem uzyskania dyplomu ukończenia przedszkola a pierwszym odcinkiem emerytury. To było raczej coś w stylu – z zewnątrz wygląda intrygująco, nie mam pojęcia na czym to dokładnie polega, sprawdzę i przekonam się na własnej skórze. To co odkryłem w środku urzekło mnie, zafascynowało i przesądziło o tym, że “zostałem”.

Zawód programisty jest bardzo pojemny, dla niektórych ta rola ogranicza się do pisania kodu, inni upatrują w niej sztukę. Jak Ty postrzegasz swoją profesję? 

Patrząc na człowieka z łopatą w ręku, mogę myśleć o nim jak o kimś, kto kopie rowy albo kimś, kto buduje katedrę. Termin “programista” moim zdaniem reprezentuje bardziej tę pierwszą perspektywę. Jest ogromnym spłyceniem i uproszczeniem, dlatego za nim nie przepadam. Kiedy zdecydowałem się rozpocząć przygodę z oprogramowaniem, zacząłem stopniowo odkrywać jak szeroka i głęboka jest to dziedzina.

Tworzenie oprogramowania jest dla mnie przede wszystkim kunsztem. Tak, tak, jest takie słowo w języku polskim, choć jego angielski odpowiednik “craftsmanship”, mi osobiście bardziej odpowiada. Jest ciągłą nauką nowych technik i narzędzi, nieustannym ćwiczeniem i doskonaleniem. To droga bardzo wymagająca, ale dająca też niesamowicie dużo satysfakcji. 

Jest też Nauką przez duże “N”, ciągłym podważaniem status quo, eksperymentowaniem, stawianiem i weryfikowaniem hipotez, analizowaniem i wyciąganiem wniosków oraz nieustannym korygowaniem przyjętego wcześniej kursu.

Tam, gdzie dziedzina, dla której budujemy system informatyczny jest złożona, tworzenie oprogramowania staje się sztuką – umiejętnością nazywania, opisywania rzeczywistości w sposób możliwie prosty i czytelny. Wymaga zdolności rozwijania rozwiązania nie do stanu, w którym niczego nie można już do niego dodać, ale do takiego, w którym niczego nie można z niego odjąć.

No dobrze, a gdzie w tym wszystkim jest miejsce na inżynierię? Z badania Stack Overflow wynika, że 62% developerów to absolwenci kierunków technicznych (computer science, computer engineering, software engineering). 

Kiedy rozmiar budowanego systemu rośnie do dziesiątek, setek czy tysięcy elementów (komponentów, serwerów, itp.), tworzenie oprogramowania staje się inżynierią. Wymaga tworzenia rozwiązań w taki sposób, aby były odporne na awarie i potrafiły się same naprawiać. Wymaga umiejętności poruszania się w świecie, gdzie 2+2 nie zawsze równa się 4, gdzie 2+2 to 4 z bardzo dużym prawdopodobieństwem. Wymaga projektowania rozwiązań w taki sposób, aby pomimo swej złożoności dało się je w łatwy sposób używać i kontrolować. Wymaga projektowania defensywnego, czyli takiego, które uniemożliwia użycie produktu w niewłaściwy sposób – przypadkowo lub celowo.

Zapytałam w krótkiej sondzie naszych pracowników z czym kojarzy im się programowanie: ze sztuką, rzemiosłem czy inżynierią. Zdecydowanie wygrało podejście inżyniera. Czy taki wynik Cię zaskakuje?

Na pytanie, które zadałaś w ankiecie nie ma dobrych ani złych odpowiedzi. Moim zdaniem jej wynik wskazuje po prostu na indywidualne doświadczenia ludzi wynikające z charakteru przedsięwzięć, w których brali udział. Tak jak wspomniałem, tworzenie oprogramowania ma wiele oblicz – jest jednocześnie rzemiosłem, inżynierią i sztuką. To, który z tych aspektów staje się dominujący zależy od specyfiki budowanego rozwiązania oraz od tego, co nakręca ludzi. 

Warto tu zauważyć, że inżynieria jest tym aspektem tworzenia oprogramowania, na który zwykle kładzie się największy nacisk, bo ewentualne niedociągnięcia w tym obszarze są najbardziej dotkliwe dla użytkowników końcowych.

Ponadto, większość rozwijanych u nas rozwiązań, to duże i złożone systemy, co powoduje, że w naturalny sposób aspekt “inżynierii” staje się w ich tworzeniu dominujący.

Z drugiej strony, jeśli ktoś ma duszę inżyniera, to niezależnie od charakteru projektu, będzie się skupiał bardziej na wyzwaniach inżynieryjnych. W związku z tym, wynik ankiety może nam też powiedzieć co nieco, o ludziach, którzy u nas pracują – o tym, czego oczekują i co ich napędza.

Pracujesz w tym zawodzie od wielu lat, przeszedłeś różne role w zespole, miałeś do czynienia z wieloma metodykami, domenami, małymi i dużymi systemami. W ASC uczestniczyłeś zarówno w projektach budowy systemów core’owych jak i lekkich, web’owych aplikacji. Jak myślisz, co decyduje o sukcesie projektów, w których na co dzień pracujecie?

Tworzenie oprogramowania to gra zespołowa. To wymiana doświadczeń, łączenie perspektyw i zderzanie pomysłów. Tu nie ma miejsca dla samotnych wojowników ninja. Chyba każde większe rozwiązanie informatyczne zaczęło się od zapaleńca (czasem dwóch lub trzech), który zaczął coś dłubać w garażu, a następnie potrafił przekonać do swojego pomysłu i skupić wokół siebie innych ludzi, by wreszcie stać się dla nich liderem wytyczającym kierunek rozwoju. Tak powstał np. Linux – najpopularniejszy obecnie system operacyjny o otwartym kodzie, git – najpopularniejszy system kontroli wersji, github – największa platforma hostingowa dla projektów informatycznych, wyszukiwarka Google czy Facebook. 

Ta sama zasada sprawdza się także u nas w ASC. Najlepsze produkty są tworzone przez te zespoły, których członkowie potrafią ze sobą efektywnie współpracować. Gwiazdorska obsada nie gwarantuje sukcesu.

Wielu osobom programowanie kojarzy się wyłącznie z tworzeniem kodu. Czy tylko na tym polega praca Programisty

Budowanie systemów informatycznych to także niesamowity akt stwórczy. Nie chodzi tu o tworzenie samego oprogramowania, bo o tym wspomniałem już wcześniej, ale o to, w jaki sposób zmienia ono nasz świat. Software daje nam, ludziom, ogromną władzę nad otaczającą nas rzeczywistością. W jednym małym przycisku w aplikacji potrafimy zakląć moc wysyłania natychmiastowych wiadomości do ludzi mieszkających w dowolnym miejscu na świecie, zmiany temperatury w mieszkaniu, zamówienia pizzy z dostawą do domu czy wystrzelenia satelity. Oprogramowanie pozwala nam też okiełznać złożoną rzeczywistość, której nie sposób objąć “gołym rozumem” – sekwencjonować DNA, analizować nastroje społeczne na podstawie miliardów wpisów przepływających w sieciach społecznościowych czy przewidywać pogodę.

Brzmi jak duża odpowiedzialność…

Zdecydowanie. Tworzenie oprogramowania to ogromna odpowiedzialność. To od nas zależy, jakie informacje pojawią się na pierwszej stronie wyników wyszukiwania. To od nas zależy niezawodność systemów bankowych, samolotów bezzałogowych czy systemów podtrzymywania życia. To od nas zależy, jak zachowa się autonomiczny samochód, kiedy przed maskę wybiegnie mu dziecko goniące za piłką, podczas gdy sąsiednim pasem z naprzeciwka jedzie karetka, a z prawej, chodnikiem spaceruje trzymająca się za ręce para.

Hmm, nie współgra to ze stereotypowym obrazem programisty – w memach są obrazowani jako dziwacy zamknięci w piwnicy, ubrani w koszulę w kratkę…

Dla tych, którzy przegapili schyłek okresu rewolucji przemysłowej lub świadomie wybrali “niebieską pigułkę”, tworzenie oprogramowania pozostanie zwykłym handlem bądź produkcją (w zależności od tego jaką szkołę kończyli) – wynajmowaniem ludzi na godziny, ustawianiem ich przy taśmie, wsypywaniem wymagań z jednej strony i wlewaniem kawy z drugiej, a następnie oczekiwaniem aż z tyłu wypadnie kawałek kodu. Kiedy zdarzy mi się na kogoś takiego trafić, czasami pytam z uśmiechem: ja zmieniam świat za pomocą oprogramowania. Jaka jest Twoja super-moc?

Rozmawiała: Małgorzata Panasiuk-Kanabus, HR Team

Dołącz do naszego zespołu – zobacz oferty pracy dla programistów!