Blog

Artykuł przeczytasz w: 18 min

Czy programiści przestaną nam być potrzebni?

W szkole wyśmiewani, teraz przeżywają swój okres prosperity. Programiści – bo to właśnie o nich mowa – pełnią bardzo ważną rolę w wielu firmach.

Artykuł przeczytasz w: 18 min
Pytanie jak długo będą nam jeszcze potrzebni?

SPIS TREŚCI

    Wyblakła, flanelowa koszula w kratkę, przetłuszczone włosy, okulary ze szkłami grubości dna od butelki, brak życia towarzyskiego zastępowany kolejną rundką w grę komputerową – oto stereotypowy obraz programisty-informatyka. Prawdopodobnie to on w większości przypadków był celem drwin i żartów mocno przekraczających granice dobrego smaku.

    Teraz został programistą, spędza czas na klikaniu w komputer i jeszcze mu za to nieźle płacą! Nikt nie sądził, że ktoś taki będzie się w ogóle do czegoś nadawał… Ale czy ich czas nie przeminie i czy programiści przestaną nam być potrzebni?

    Czy programista to informatyk? Czy informatyk to programista? – krótkie teoretyczne wprowadzenie

    Termin informatyk pochodzi od nazwy dziedziny nauk ścisłych i technicznych, która zajmuje się przetwarzaniem informacji. W języku polskim termin informatyka został zaproponowany w październiku 1968 roku przez Romualda Marczyńskiego.

    W języku angielskim rozróżniamy na:
    computer scientist – „naukowiec od komputerów”, zajmujący się w głównej mierze softwarem, algorytmami, strukturą danych itp.
    computer engineer – inżynier komputerowy zajmujący się głównie kwestiami sprzętowymi takimi jak budowa i działanie sprzętu komputerowego począwszy od mikrokontrolerów do superkomputerów.

    Z kolei słowo informatyk wzoruje się na francuskim informatique i niemieckim Informatik. Słowo to jest bardzo ogólne. Nie mówi nam nic o tym czym dana osoba się zajmuje poza tym, że ma to związek z komputerami.

    Informatyk to osoba posiadająca podstawową wiedzę z każdej działki informatyki. Można powiedzieć, że zna się na wszystkim, co jest związane z komputerami. Jak mówi stare powiedzenie – jak coś jest od wszystkiego to coś jest do niczego. W tym przypadku ktoś ;). Dlatego też informatycy (na przykład po technikum informatycznym) powinni dążyć do wyspecjalizowania się w konkretnej dziedzinie.

    Programista (ang. developer), to z kolei osoba, która tworzy:

    • program komputerowy
    • witrynę
    • aplikację
    • skrypt

    w pewnym języku programowania. Język ten musi być zrozumiały dla maszyny, kompilatora, interpretera, powłoki i tak dalej. Jest to również dość szerokie pojęcie. Programista zazwyczaj zna kilka języków programowania ale często specjalizuje się tylko w jednym z nich.

    Fun fact: Kiedyś jedyną możliwością programowania komputera była karta perforowana (karta dziurkowana pic rel). Dziś na szczęście opcji jest dużo więcej.

    Reasumując – programista powinien być trochę informatykiem. Nie wystarczy sama znajomość języka programowania. Należy jeszcze wiedzieć jak sprzęt działa i jak ten kod zostanie przez niego zinterpretowany.

    Jeśli, przykładowo, program ma wymieniać dane w sieci, to podstawy znajomości tej dziedziny informatyki programista też znać musi. Inaczej sprawa się ma w przypadku chociażby administrowania systemem – programista będzie wiedział jak on działa, będzie go nawet może współtworzył, ale zarządzał nim będzie administrator. A informatyk? Informatyk może być kim chce.

    Rozwój technologii komputerowej – wszyscy programiści na pokład! Czyli kto?

    Rozwój komputerów oraz sieci WWW stworzył programistów stron WWW – webdeveloperów. Dalszy rozwój podzielił webdeveloperów na frontendowców (zajmujących się wyglądem strony) i backendowców (Ci dbają o mechanizmy działania witryny, połączenie z bazą danych i przetwarzanie informacji od użytkownika i do użytkownika). Czy to koniec? Na pewno nie!

    Bazy ktoś też musi zaprojektować, a potem zaprogramować – to działka chociażby programisty SQL. Ktoś te dane musi przetworzyć – to zadanie dla analityka, który programować też musi umieć, żeby poradzić sobie z Big Data.

    Wspomniany rozwój powołał do życia programy zwane systemami operacyjnymi. Ciąży na nich wielka odpowiedzialność – są one pomostem między sprzętem, a użytkownikiem. Regulują one pracę procesora, dostęp do pamięci RAM, a przy tym wymieniają informacje z wszystkimi peryferiami i jeszcze do tego nimi sterują. Nawet teraz – kiedy kończysz czytać to zdanie, Twój procesor wykonał już koło pół miliona operacji.

    Sprzęt – sterownik – jądro – powłoka: Kto to tworzy?

    Istnienie systemów operacyjnych zawdzięczamy również programistom. Sprzęt komunikuje się z jądrem systemu za pomocą sterowników. Te zaś napisane są w języku asemblera bazującym na podstawowych operacjach procesora.

    Gdy połączenie sprzętu z jądrem systemu jest już wykonane, to do zrobienia pozostaje już tylko powłoka. To również programistyczny twór tłumaczący komunikację sterownika ze sprzętem. Jest to miejsce, w którym użytkownik może się z komputerem porozumiewać.

    Na początku były to wyłącznie powłoki tekstowe. Ich funkcja polegała w głównej mierze na tłumaczeniu tego co robi teraz procesor i wyświetlaniu tego na ekranie. Wprawiony komputerowiec, czytając taki ciąg znaczków, wiedział co się aktualnie dzieje. Znajomość odpowiednich komend była niezbędna i służyła do wydawania komputerowi poleceń. Maszyna je realizowała i wyświetlała wynik.

    Wraz z komercjalizacją komputerów zaczęto dostosowywać powłoki tekstowe do potrzeb zwykłego Kowalskiego. Tak oto powstały powłoki graficzne – klikalne interfejsy do komunikacji z komputerem. Tutaj niezbędna zaczęła również okazywać się mysz. Tak, mówię między innymi o Windowsie.

    Wróćmy jednak do powłok. W powłoce tekstowej można napisać prosty skrypt wykonujący dowolne działanie arytmetyczne. Jego wynik podawany jest na standardowe wyjście lub zapisywany do pliku. Gdy już mamy myszkę, to fajnie byłoby, aby istniały programy, których wyniki działań pokazywałyby się w zrozumiały dla użytkownika sposób – na ekranie, a nie jako dane w pliku czy ciągi znaków na wyjściu konsoli. To właśnie zdanie programistów aplikacji! Korzystają oni z takich języków jak C++ (rzadziej C), C# czy Java. Pozwala to wyniki z konsoli prezentować w interfejsie graficznym. I tak oto mamy chociażby wirtualny kalkulator, który nie różni się w działaniu niczym od tego zwyczajnego.

    Bardziej zaawansowanym przykładem programu jest przeglądarka internetowa – czytając ten artykuł na pewno z niej korzystasz. Przeglądarka wysyła zapytania, za pośrednictwem sprzętu, którego używasz, do serwera znajdującego się w Internecie. Potrafi wyniki otrzymanych zapytań zinterpretować i wyświetlić Ci przyjemną dla oka witrynę. Dba przy tym o to, czy połączenie jest wystarczająco bezpieczne i czy kontakt z serwerem nie spowoduje utraty Twoich danych. Sprytne, nie?

    Jeszcze lepsze jest to, że to wszystko robi w Twoim imieniu – korzysta bowiem z Twojego publicznego adresu IP. Ten adres przydziela Ci dostawca internetu. Jest to Twoja furtka do wirtualnego świata. Skrzętnie rejestruje ona każdy pakiet wchodzący i wychodzący przez nią. Furtka ta przechowuje logi do 12 miesięcy.

    Co dzieje się z nimi potem? Ta furtka puszcza do świata wielu użytkowników. Każdy z nich generuje logi. Przechowywanie ich wszystkich przez rok sporo kosztuje. Teoretycznie po roku mogą być usuwane. Jak jest w praktyce? To wie już tylko Twój ISP ;). Mniej więcej dlatego w Internecie nie jest się anonimowym. Można starać się nie zostawiać za sobą śladów, ale wymaga to wiedzy i sprytu oraz pewnej dozy szczęścia. Ale po co się ukrywać, gdy nie robi się nic złego…

    Czy programiści utrzymają Status Quo?

    Mamy już kilkanaście rodzajów programistów ale przecież nie wspomnieliśmy nawet słowem o telefonach. Kolejne lata postępu spowodowały miniaturyzację sprzętu i upakowanie maksymalnej wydajności na minimalnej powierzchni.

    Telefon komórkowy, pierwotnie stworzony tylko i wyłącznie do nawiązywania połączeń głosowych na dużą odległość, stał się tak samo wydajny jak sprzęt komputerowy klasy średniej. Stał się Twoim budzikiem, kalendarzem, notatnikiem, pamiętnikiem, aparatem czy kontaktem ze światem. Tak jak komputery, routery czy każdy inny sprzęt elektroniczny, smartfony również posiadają oprogramowanie ułatwiające im prezentację operacji wykonywanych wewnątrz ich samych.

    Ten program to, tak jak w przypadku komputerów, system operacyjny, czyli pomost między użytkownikiem, a sprzętem. To swoista platforma do komunikacji człowieka z maszyną. Programiści systemów mobilnych dwoją się i troją, aby projektować i dostarczać jak najbardziej wydajne, bezpieczne i użyteczne systemy operacyjne na smartfony.

    System operacyjny Android posiada na ten moment 76% udziału w rynku światowym, co czyni go liderem wśród mobilnych systemów operacyjnych. Drugie miejsce zajmuje iOS z 22% udziałem w globalnym rynku. W Polsce przewaga Androida jest bardziej widoczna, ten system zajmuje aż 96% rynku. Z oprogramowania firmy Apple korzysta tylko 2,5% polskiego rynku.

    Zwykły smartfon z podstawowymi aplikacjami wbudowanymi w swój system operacyjny to już za mało. Użytkownicy ciągle potrzebują powiewu świeżości. Potrzeba ta zrodziła sklepy z aplikacjami, gdzie są miliony gotowych do pobrania i używania programów.

    Wiele z nich wzbogaca smartfon o kolejne użyteczne funkcje czy drogi kontaktu z innymi ludźmi. Inne zaś służą tylko rozrywce i czerpaniu radości z przebywania sam na sam ze swoim urządzeniem. Kolejny komunikator, następna aplikacja lojalnościowa czy gra, w którą zagrasz tylko raz bo fajnie wyglądała na reklamie – to wszystko dostępne w jednym miejscu. Instalujesz i masz.

    Programiści aplikacji mobilnych stają na głowie aby dostarczyć użytkownikom to czego potrzebują, często zarabiając na tym pokaźne sumy pieniędzy. Rozwój mobilnych systemów operacyjnych stworzył rynek aplikacji mobilnych – kolejną niszę dla programistów.

    I tak dla smartfonów mamy Android Developer czy iOS Developer – prześcigają się oni w ilości aplikacji, które wypuszczają do Sklepu Play czy AppStore. Na ten moment z Google Play Store można pobrać 2,7 miliona aplikacji, w AppStore jest ich około 2 miliona. Ta liczba ciągle rośnie i ten trend będzie się utrzymywał. Smartfony mają coraz więcej funkcji, które można konfrontować z potrzebami użytkowników, dostarczając jakościowe rozwiązania, które coraz lepiej spełniają potrzeby użytkownika.

    Dzwonek ostrzegawczy dla programistów

    Czytałem ostatnio ciekawy artykuł. Dotyczył on zapotrzebowania na programistów Javy na rynku pracy. Według artykułu, developerzy posługujący się tym językiem są najbardziej rozchwytywani. Nie do końca się z tym zgadzam. Osobiście skłaniałbym się w kierunku programistów Pythona. Ten język programowania oferuje ogrom możliwości pracy na Big Data. Pomaga w łatwy sposób gromadzić dane, a potem je przetwarzać i wyciągać z nich wnioski.

    W artykule była mowa o tym, że wynalazca języka JavaScript raz na zawsze pokonał problem niedoboru programistów Javy na rynku. W najnowszej wersji swojego języka, Brendan Eich zaimplementował funkcjonalność umożliwiającą automatycznie interpretowanie języka na wersję bez skryptów!

    Funkcja działa jak translator języków obcych. Programista znający JavaScript pisze program wykorzystując wszystkie znane mu komendy, tak jak dotychczas. Następnie za pomocą magicznego przycisku tłumaczony jest on na zwykły kod w języku Java. Wspomina o tym, że to mały krok dla programistów ale wielki skok dla całego IT. Zapowiada pracę nad wersją dokonującą zmiany w drugą stronę – z Javy na Javascript.

    Nie udałoby się to bez sztucznej inteligencji, która wytrwale analizowała miliony linijek kodu. Przetwarzała je a następnie kojarzyła z sobą aby można było sprawnie przejść z jednego języka na drugi. To prawdziwy przełom w świecie IT. Może za kilka lat programiści będą używali cyfrowego odpowiednika Esperanto: wspólnego języka dla wszystkich. Będzie go można przetłumaczyć na dowolną inną technologię w mgnieniu oka.

    Dobrze, że podczas czytania tego artykułu wytrwałem do końca. Okazało się, że sytuacja w nim opisana jest w całości zmyślona. Nic z tych rzeczy nie miało miejsca. Jednak artykuł skłonił mnie do refleksji. Jestem świadomy zawrotnego tempa rozwoju całej branży, jednak na tak zaawansowany translator języków programowania przyjdzie nam jeszcze długo poczekać.

    Czy tylko programiści umieją programować?

    Nie trzeba być programistą, żeby umieć stworzyć prosty program pokroju „Hello World”. Wystarczy 5 minutowy poradnik na YouTubie i już nasz program może przywitać się ze światem. W przypadku bardziej zaawansowanych programów potrzebna jest jednak znajomość struktury, instrukcji sterujących i innych elementów języka.

    A co gdyby wziąć wszystkie programy napisane w Javie z GitHuba i przeanalizować je za pomocą specjalnie zaprojektowanej sieci neuronowej? Wtedy z milionów linijek kodu moglibyśmy otrzymać gotowe wzorce do tworzenia programów! Tak właśnie powstał Bayou. To przykład sztucznej inteligencji bazującej na uczeniu się za pomocą sieci neuronowej stworzony na Uniwersytetecie Rice’a w Teksasie.

    Działa w przybliżeniu tak, jak wyszukiwarka internetowa. Wpisujemy do niego zapytanie czyli jaki problem chcemy zakodować. W odpowiedzi dostajemy działający program rozwiązujący nasz problem. Bayou koduje na ten moment tylko w Javie. Dobrze radzi sobie z operacjami na plikach oraz na listach. Jest to spore ułatwienie dla Java Developerów. Pozwala spożytkować ich czas na rozwijanie bardziej zaawansowanych programów.

    Programowanie a rozwój

    Nie można spocząć na laurach. Trzeba upgrade’ować swoją wiedzę. Znajomość języka i wyspecjalizowanie się w nim to nie wszystko. Świat idzie do przodu, a razem z nim wiele języków programowania. Dlatego aby za nim nadążać developerzy muszą się rozwijać. Każdego dnia muszą dotrzymywać kroku zmianom rynku. Muszą stale sprawdzać aktualizacje, changelogi i wszystko inne funkcje, które twórcy ulepszyli lub zmienili. Dzięki temu zawsze jest się na bieżąco.

    Z rozwojem wiąże się również elastyczność. Zawsze mogą wybrać, którego języka użyją w danej sytuacji. Jeśli jednak w czasie projektu, będzie potrzeba zaimplementowania dodatkowych funkcji, o których nie wspomniano wcześniej, język można zawsze zmienić. Elastyczność wiążę się też z łączeniem języków. Nie zawsze wszystko da się napisać z użyciem tylko i wyłącznie jednego z nich. W sumie, może się da, ale po co się męczyć gdy można zrobić coś prościej i szybciej tym samym nakładem pracy?

    Podnosić swoje kwalifikacje trzeba we wszystkich możliwych kierunkach. Rozwijanie tylko jednej gałęzi – tylko w jedną stronę, może nie przynosić spodziewanych rezultatów. Tę sytuację można porównać do budowania z klocków. Dokładanie klocków w jednym kierunku (na przykład w górę) faktycznie powoduje wzrost budowli. Taki wzrost jest jednak tylko pozornie dobry – budujemy tylko w górę ale byle podmuch wiatru może popsuć plany.

    Bardzo ważne jest aby budować również dookoła. Pozwala to wzmocnić całość konstrukcji. Można przy tym delikatnie zredukować tempo rozwoju w górę. Jednak ta redukcja w dłuższej perspektywie umożliwia pełniejszy i stabilniejszy wzrost na wszystkich płaszczyznach. A chodzi właśnie o ten stabilny, wszechstronny rozwój.

    Co oprócz programowania powinien umieć programista?

    Znajomość języków programowania i języka angielskiego w stopniu umożliwiającym czytanie dokumentacji to oczywistość. Jednak nie samym programowaniem programista żyje. Trzeba umieć się sprzedać. Zwykły klepacz kodu zarobi dużo mniej niż przedsiębiorczy programista ceniący siebie i swoje umiejętności. Mowa tu nie tylko o umiejętnościach technicznych ale również o tych miękkich.

    Praca w zespole – bez tego ani rusz. Mało kiedy programista ma wolną rękę. Dziś pracuje się raczej w zespołach projektowych. Chyba, że jesteś freelancerem – wtedy sam jesteś swoim zespołem.

    Odporność na stres i zdolność konkretnego działania pod jego wpływem jest na wagę złota. Niezapowiedziane zmiany do zaimplementowania w piątek o 14.30 gdy wydanie na produkcję jest o 16.00? Taka sytuacja to niesamowita dawka stresu i presji czasu. Wszystko musi działać, a stwierdzenie „Dziwne, u mnie działa!” wcale nic nie naprawia bo działać musi na produkcji. Presja czasu i czynniki stresogenne to chleb powszedni programistów.

    Komunikatywność to kolejna, niezastąpiona cecha u programistów. Dokładne zrozumienie potrzeb użytkownika to mniej poprawek do wdrożenia. Brak komunikacji lub jej zaburzenia powoduje napięcia w relacjach z managementem. Zdolność wytłumaczenia jak aplikacja działa i dlaczego danej funkcjonalności nie sposób wprowadzić w takim budżecie to wielki atut.

    Docenianą umiejętnością jest też przekładanie języka technicznego, na zrozumiały dla osób, którym brak wiedzy technicznej. No i nie zapominajmy o czystym i spójnym kodzie.

    No dobra, ale czy to koniec ery programistów?

    Nie, to na pewno nie koniec ich ery. Wraz z rozwojem techniki, tworzą się nowe miejsca pracy dla programistów. Rozwój autonomicznych samochodów dał pracę dziesiątkom tysięcy inżynierów oprogramowania, programistom czy testerom. Rynek Internetu rzeczy (IoT), zatrudniający tysiące programistów, w 2019 roku jest wart 1,9 biliona dolarów. Modyfikowanie i ulepszanie rozwiązań znanych nam dzisiaj przyniesie nowe specjalizacje, których nazw dzisiaj nie jesteśmy w stanie zgadnąć.

    Jeśli nawet pojawi się zalążek wypalenia zawodowego to przecież można zmienić projekt. Dróg rozwoju jest wiele i ciągle będzie ich przybywać. Czując się nieswojo na którejś ze ścieżek samodoskonalenia, można po prostu zamienić ją na inną. Tak jak już wspominałem, elastyczność to tutaj podstawa. Jeśli komuś znudził się rozwój oprogramowania dla samochodów autonomicznych i chciałby spróbować czegoś nowego? Nic prostszego! Nawet bez zmiany kompetencji spokojnie odnalazłby się chociażby w projektowaniu systemów do zarządzania inteligentnymi miastami.

    Do pisania prostych i schematycznych programów, w przyszłości używać będziemy prawdopodobnie sztucznej inteligencji. Przydaje się ona tam gdzie, za pomocą analizy danych można wypracować wzór, który można dowolnie powielać.

    Taki schemat to na przykład wywołanie napisu „Cześć, świecie!”. W zależności od języka, kod źródłowy będzie się różnił – efekt ma być natomiast identyczny. Jeśli możemy nauczyć AI jak wywołać napis, to właśnie on staje się zmienną. Nieistotne jaki napis się wyświetli. Cel to wyświetlenie napisu.

    Z takich schematów można budować całe programy. Lista kroków w stylu: stwórz zmienną „x”, wczytaj do „x” ostatnią linię z pliku, sprawdź połącznie z bazą, załaduj do bazy zmienną „x”, mogłyby być wtedy tłumaczone na dowolny język programowania. Jeśli do tego doszłaby możliwość utworzenia schematu blokowego a następnie otrzymania gotowego kodu w wybranym języku, to zwykli klepacze kodu staliby się mało użyteczni.

    Jednak do innowacyjnych rozwiązań, skrojonych na miarę dalej potrzebni byliby programiści z krwi i kości. Ich analityczne umysły w połączeniu ze zdolnością logicznego myślenia nigdy nie zostaną wyparte przez maszyny. Faktem jest, że mogliby oni posiłkować się tym co zaserwuje im automatycznie wygenerowany program. Jednakże, parametry generowania ustalane byłby by przez nich. Stawia ich do wyżej w hierarchii potrzebności.

    Podoba Ci się ten artykuł?
    Oceń:

    Odmień z nami swój
    biznes online

    Postaw przed nami wyzwanie, opowiedz o problemie. My staniemy do walki.

    Przeczytaj także