Who is the programmer?

16 february 2023
Jakub Rojek Jakub Rojek
Photo by Nikita Krygier from Pexels (https://www.pexels.com/pl-pl/zdjecie/mezczyzna-patrzacy-trzymajacy-swiatlo-swiecy-10133637/)
Categories: Programming, IT fundamentals

Już tytuł artykułu zdradza, że dzisiaj będzie mocno filozoficznie. Tak - ten tekst należy traktować jako esej lub odbicie refleksji autora w postaci paru akapitów. W dodatku temat wydaje się dość oczywisty i wręcz encyklopedyczny, natomiast po zastanowieniu sprawa nie wygląda już tak prosto. Sama potrzeba napisania artykułu pojawiła się podczas jednej z ożywionych rozmów na Twitterze, w której dyskutowana była rola programistów w dzisiejszym świecie oraz kwestii, kim właściwie jest przedstawiciel tej profesji. A raczej - kto może się tytułować tym mianem.

Aby uzasadnić wystąpienie takiej wątpliwości, należy zauważyć, że wraz ze zmieniającym się światem, zmienia się też znaczenie poszczególnych zawodów oraz ich zakres. Dotyczy to także programisty. Przyjrzyjmy się może najpierw definicji zaczerpniętej z polskiej Wikipedii:

Programista komputerowy, programista, deweloper, potocznie koder (ang. computer programmer, programmer, software developer, coder) – osoba pisząca programy komputerowe w języku programowania.

Sprawa wydaje sie prosta - programistą jest każdy, kto pisze programy komputerowe. Czyli wszystkie osoby, które używają jakiegokolwiek języka programowania i finalizują pisanie wygenerowaniem pliku uruchamialnego, mogą sobie przypisać to miano. Cóż, diabeł tkwi w szczegółach.

W dawnych czasach bycie programistą oznaczało nie tylko samą umiejętność programowania. Przede wszystkim, z racji toporności narzędzi oraz braku lub niedostatecznej dokumentacji, kodowanie oznaczało walkę z niewiedzą dotyczącą tego, w jaki sposób coś działa lub powinno działać. Ponadto, większość rzeczy programiści pisali sami - bibliotek było tak mało i dotyczyły tak podstawowych rzeczy, że napisanie czegoś bardziej zaawansowanego wymagało wielu linii kodu i zaprojektowania oczywistych dzisiaj mechanizmów od zera. Wreszcie, języki programowania będące w "obiegu" były inne, a od osoby piszącej program wymagana była znajomość matematyki i działania komputera, aby móc przewidzieć, jak dokładnie zachowa się procesor czy pamięć po użyciu danej instrukcji. A teraz?

Niektórzy śmieją się, że programowanie polega na umiejętnym kopiowaniu i wklejaniu kodu z różnych serwisów typu Stack Overflow, forów czy - jak ostatnio bywa - narzędzi udostępniających sztuczną inteligencję. Istnieją generatory, szablony, w Internecie dostępna jest ogromna wiedza, a do dyspozycji są też (rzadziej używanych w tym celu) książki. Same technologie też się zmieniły - języki programowania stały się bardziej zaawansowane, narzędzi jest bez liku, programista rzadko kiedy rusza "do akcji" bez odpowiedniej biblioteki czy frameworka, a przy samym pisaniu zazwyczaj bardziej niż optymalizacją dba o to, aby kod i struktura programu były przejrzyste.

Zresztą, czy w ogóle programiści obecnie piszą programy? Większość tworzonego oprogramowania to aplikacje webowe i mobilne, a nawet jeśli już powstaje coś uruchamianego bezpośrednio na komputerze, to najczęściej do stworzenia i tak są wykorzystywane albo rozwiązania hybrydowe, albo jakiś generator, albo silnik. Czy to jeszcze są programy? Czy aplikacje to programy? Czy może zatem powinniśmy mówić wyłącznie o oprogramowaniu jako ogólnym zbiorze? A może prawdziwymi programistami są osoby, które każde rozwiązanie piszą od podstaw, wykorzystując tylko biblioteki standardowe języka? Czy może jednak są to tacy, którzy piszą kod na mikrokontrolery i systemy wbudowane, ponieważ używają tam asemblera i C++?

Oczywiście, trochę sobie żartuję, ale fakt, że mnogość narzędzi i rozwój informatyki powodują, że zaryzykuję stwierdzenie, iż tak naprawdę obecnie programista nie musi znać tylu podstaw matematycznych i elektronicznych, ile zobowiązany był wiedzieć specjalista kilkadziesiąt lat temu. W innych wątkach w blogosferze ludzie zastanawiali się, czy tak naprawdę osoba programująca musi znać system binarny i wiedzieć, czym jest bajt. W ten sposób rodzą się kłótnie, niedopowiedzenia oraz złość na często Boga ducha winne osoby, które robią to, co do nich należy i tworzą oprogramowanie, którego używamy wszyscy.

Prawda jest taka, że owszem - możliwości programistyczne szalenie się rozwinęły, a próg wejścia znacząco zmalał. Ale zauważmy, że jest to miecz obosieczny - zacząć jest łatwo i może to zrobić każdy, ale nadal nie jest prosto swobodnie się w tym odnaleźć i umieć poradzić sobie w każdej sytuacji. Wraz z obniżeniem wymagań do wejścia do tego świata, jednocześnie wzrosły wymagania cech, które świadczą o dobrym specjaliście. Obecnie programista powinien także:

  • projektować oprogramowanie (aby pisany kod nie wprowadzał bałaganu),
  • znać koncepcje inżynierii oprogramowania,
  • umieć korzystać z narzędzi automatyzujących pracę,
  • umieć dzielić kod z myślą o przyszłych działaniach i rozwoju,
  • pracować w zespole i rozumieć ideę zwinnego dostarczania oprogramowania,
  • znać podstawy technologii sieciowych (z racji tego, że 99,9% oprogramowania korzysta z zasobów sieciowych),
  • umieć korzystać z systemów wersjonowania oprogramowania.

Pewnie moglibyśmy wymienić jeszcze kilka punktów, a zapewne w przyszłości dojdzie tutaj umiejętność wykorzystania sztucznej inteligencji. Owszem, nadal są sytuacje, w których wiedza "niskopoziomowa" się przydaje, nawet w aplikacjach webowych. Tym niemniej, nacisk obecnie jest przykładany na wiedzę "wysokopoziomową", która - owszem - jest łatwiej dostępna niż kiedyś, ale nadal nie są to kwestie, które można wprost skopiować z tutoriali i nie rozumieć, co się robi. Przez pewien czas będzie się udawać taki sposób działania, ale na dłuższą metę taka osoba nie będzie się rozwijać wystarczająco szybko, aby uchodzić za "magika od kodu".

Dobrym przykładem jest tworzenie gier wideo - ta tematyka nieodłącznie kojarzy się z programowaniem kwestii graficznych (choć wiadomo, że nie tylko), co wymaga zdolności i wiedzy matematycznej na poziomie np. wektorów i macierzy. A przynajmniej wymagała, bo przy dostępności gotowych silników jak Unreal Engine, Unity czy Godot (a wcześniej wielu innych), programiści zajmują się tymi rzeczami na dużo wyższym poziomie. Choć, oczywiście, dodatkowa wiedza zawsze się przyda i może umożliwić nawet stworzenie lepszych narzędzi.

Podsumowując, nadal osoba pisząca kod jest programistą i nie zmienia tutaj niczego fakt, że jest to dzisiaj łatwiejsze niż kiedyś. Natomiast aby być dobrym programistą taka osoba musi dysponować wiedzą nie tylko o konkretnych konstrukcjach językowych, ale też mieć odpowiednie wiadomości o rzeczach okołoprogramistycznych, które pomagają pisać ładne i podatne na rozwój oprogramowanie.

Mały apel przy okazji w tym miejscu - ważne jest to, aby szanować wszystkich, którzy chcą się uczyć lub kodują, nawet proste rzeczy. Nie podzielam opinii, którą kiedyś usłyszałem, że "programowanie staje się umiejętnością podstawową jak czytanie", ale to świetne hobby, sposób na życie i jak najbardziej każdy może próbować swoich sił. Do czego zachęcam.

Pozdrawiam i dziękuję - Jakub Rojek.

We can do quite a bit and what is more, our skills and resources are at your disposal. Take a peek at what we can offer you.

About author

Jakub Rojek

Lead programmer and co-owner of Wilda Software, with many years of experience in software creation and development, but also in writing texts for various blogs. A trained analyst and IT systems architect. At the same time he is a graduate of Poznan University of Technology and occasionally teaches at this university. In his free time, he enjoys playing video games (mainly card games), reading books, watching american football and e-sport, discovering heavier music, and pointing out other people's language mistakes.

Jakub Rojek