Programista w epoce AI

Kilka dni temu, w biurze Scanye, byłem uczestnikiem ciekawej dyskusji. Dyskutowaliśmy o tym, jak może wyglądać nasza praca w epoce sztucznej inteligencji. Trochę z dozą czarnego humoru, zadaliśmy sobie pytanie: czy programiści są gatunkiem zagrożonym? 

Temat bardzo ciekawy, szalenie złożony oraz bezpośrednio mnie dotyczący. Zmusza mnie do udzielenia odpowiedzi. Chcąc sprostać takiemu zagadnieniu, muszę się zastanowić, jak będzie wyglądał świat w najbliższej przyszłości. We wszelakich mediach społecznościowych dyskusja na ten temat już trwa. Najczęściej spotykam się z dwoma, różnymi wizjami jeśli chodzi o przyszłość programistów – tą która nas uszczęśliwi, oraz tą która nas zniszczy… na początku kariery 🙂

Niedawno, widziałem mniej więcej taki tytuł artykułu: Napisano grę za pomocą sztucznej inteligencji. Choć tytuł bardzo chwytliwy, a stworzona gra była raczej bardzo prosta, wygląda mi to na przejaw pierwszej, ponurej dla programistów, wizji przyszłości. Rozwój technologiczny sztucznej inteligencji, doprowadził do stworzenia algorytmów, które samodzielnie będą tworzyć, testować i wdrażać aplikacje. Co w konsekwencji doprowadzi do redukcji zatrudnienia na stanowiska związane z programowaniem. 

Łukasz z którym prowadziłem dyskusję, przedstawia odmienną wizję rozwoju sytuacji. Według niego, AI pozwoli programistom zrobić więcej. Ich produktywność wzrośnie, dzięki automatyzacji wielu powtarzalnych i czasochłonnych zadań, co pozwoli programistom skupić się na bardziej złożonych aspektach projektowania i rozwoju oprogramowania. Dodatkowo, AI może pomóc w analizie danych i predykcji wyników, co ułatwia podejmowanie decyzji i poprawia efektywność tworzenia nowych rozwiązań. Najbardziej czasochłonnym zajęciem programistów… jest samo programowanie. Skoro to zostanie zautomatyzowane, lub w znacznym stopniu usprawnione, to pojawia mi się w głowie następujące pytanie: kogo będziemy potrzebować w najbliższej przyszłości?

Programista przyszłości

Do dalszych rozważań pominę dwa aspekty. Z uwagi, na moją podstawową znajomość prawa, nie czuję się na siłach aby tą kwestię poruszyć. Pragnę jedynie zaznaczyć, że regulatorzy prawa mogą dość mocno namieszać w tym temacie. Za przykład już teraz można podać decyzję rządu włoskiego, który nakazał chwilowo ograniczyć możliwości ChatGPT, o czym wspomniał Tomasz Rożek podczas rozmowy z Mateuszem Chrobokiem. Drugą, niemniej ważną kwestią, a nawet ważniejszą i zasługującą na osobny artykuł, jest zapotrzebowanie rynku oraz rozwój produktów i usług. Jakby nie patrzeć, programujemy, aby coś stworzyć i najczęściej to sprzedać, by zarobić… ach ta niewidzialna ręka rynku 🙂

Więc jaka jest nasza, programistów, przyszłość? Zastanawiam się, co można oddelegować sztucznej inteligencji do zrobienia, już teraz. Obecnie z jej pomocą mogę napisać powtarzalny kod. Chyba każdy z nas, miał czasem wrażenie, że pisze n-ty raz to samo, tylko troszkę inaczej. U mnie, od jakiegoś czasu, jest to zmartwienie AI. Ja tylko sprawdzam czy wymysły sztucznej inteligencji, to jest to, co chcę uzyskać. 

Puszczając trochę wodze fantazji, jestem w stanie sobie wyobrazić, że zamiast pracy z kodem, niedługo będziemy pracować z małymi czarnymi skrzynkami. Będziemy definiować parametry na wejściu do takiej skrzynki oraz elementy, które mają się pojawić na wyjściu. Sztuczna inteligencja sama już zadba o to, jak to ma działać w środku oraz jak to zoptymalizować.

Na tą chwilę, kreuje mi się wizja, że programista będzie mniej programował, a więcej projektował. Oczywiście to nie oznacza, że umiejętności pisania i rozumienia kodu z dnia na dzień znikną, ale twierdzę, że powstanie trend, gdzie ta wiedza będzie tracić na wartości na rzecz kwalifikacji związanych z projektowaniem. A więc programiści staną się projektantami? A może inżynierami rozwiązań? Pozwolę sobie na małą zuchwałość i będę używał słowa inżynier skoro już nim jestem. W końcu ten papierek na coś mi się przyda 🙂

Czego będzie potrzebował inżynier przyszłości? Na pewno solidną wiedzę, na temat samej sztucznej inteligencji. Typy modeli AI i który z nich najlepiej wykorzystać do danego problemu. Również umiejętności związane z kreatywnością, analizą danych i zagadnień biznesowych będą w cenie. Mam wrażenie, że takie przygotowanie zawodowe będzie wzmacniać proces projektowania. Uważam również, że kompetencje miękkie będą dalej wymagane. Człowiek, jakby nie patrzeć, jest jednak stworzeniem stadnym, choć technologia próbuje trochę nas izolować.

Większość wymienionych cech, przypiszę raczej osobie z doświadczeniem i wiedzą. A więc czy ludzie, którzy nie mają tych cech, znajdą dla siebie miejsce na rynku? 

Junior, stanowisko zagrożone wyginięciem!

O tym, że sztuczna inteligencja może wypierać stażystów oraz juniorów z rynku, wspominałem już w tym artykule. Po kilku miesiącach programowania z udziałem sztucznej inteligencji, jestem jeszcze bardziej utwierdzony w tezach, o których tam pisałem. 

Dla mnie sztuczna inteligencja jest obecnie takim juniorem, który próbuje aspirować do wyższego stanowiska. Wraz z pojawianiem się coraz bardziej rozbudowanych modeli, takich jak GPT4, myślę, że te “aspiracje” będą coraz mocniejsze oraz mogą zostać spełnione.

Przyjmijmy, że sztuczna inteligencja zastąpi juniorów lub będzie bezpośrednio z nimi konkurować. AI, jako że nie jest człowiekiem, jest pozbawiona ludzkich wad. Nie będzie narzekała, że będzie musiała “pisać” coś kilka razy, czy też, że jej pomysły są cały czas odrzucane. To co dla człowieka jest deprymujące, dla sztucznej inteligencji będzie nic nie znaczącym wydarzeniem. Najwyżej poprawi swój model i będzie rzadziej to robić.

A skoro już weszliśmy w temat uczenia się. Rozwój AI jest inny i wydaje się wydajniejszy, niż nauka człowieka. Mamy tutaj do czynienia z jednym uczniem oraz wieloma, tysiącami jeśli nie milionami nauczycieli, którzy będą uczyć, szkolić i modelować naszego krzemowego studenta. Przy czym ona się tym nawet nie zmęczy, nie zająknie, co najwyżej wzrośnie temperatura procesorów, tak jakby człowieka rozbolała głowa. Ale kiedy człowiek z tego powodu pójdzie na L4, AI będzie gotowe do wykonania kolejnego zadania, gdy tylko ostygnie procesor. Czyli po kilku chwilach.

Dla nas, sztuczna inteligencja jest cały czas tak samo dyspozycyjna, dopóki mamy dostęp do internetu, a serwery działają. Czy, w dobie pracy zdalnej, jest to wielka różnica między pracą z juniorem “białkowym” a juniorem “krzemowym”? 🙂

Wydaje mi się, że wejście do świata programowania, będzie jeszcze trudniejsze. Będzie trzeba być w czymś lepszym, niż sztuczna inteligencja, która będzie tańsza. Nasuwa się tutaj kolejne pytanie: jak wspomniany świat się zmodyfikuje?

Ewolucja programowania

Programowanie cały czas się zmienia. Zaczynaliśmy od wprowadzania instrukcji do wykonania bezpośrednio do maszyny za pomocą kart perforowanych. Później, wraz z pierwszymi komputerami, pojawiły się bardziej zaawansowane sposoby programowania, jak mogło się zdawać na ówczesne czasy. Zamiast dziurek w kartce papieru, zaczęliśmy utrwalać dane na taśmach magnetycznych, co przyspieszyło proces przetwarzania danych. Wraz z ewolucją nośników danych, ewoluowały sposoby ich przetwarzania oraz tworzenia. 

Pojawił się Assembler, który dzisiaj jest uważany za język nisko poziomowy, choć gdy powstawał, zapewne był uważany za język bardzo zaawansowany. Wraz z upływem czasu i rozwojem technologii, pojawiały się coraz bardziej rozwinięte języki takie jak np.: C czy C++, które można uznać za przedstawicieli języków średniego poziomu. A obecnie królują języki wysokopoziomowe takie jak Java, JavaScript, C# i wiele innych.

Poziomy języków programowania, to bardzo płynne pojęcia – przynajmniej dla mnie. Nie czuję się kompetentny w tym temacie, dlatego do dalszych rozważań w tym artykule, przyjmę takie proste założenia: 

  • Języki niskopoziomowe, to takie, w których zapisujemy bezpośrednie instrukcje do wykonania przez procesor. Instrukcje, które na pierwszy rzut oka wyglądają jak szyfrowana wiadomość albo kody startowe do rakiet, a od twórców wymaga się biegłej znajomości architektury komputera.
  • Języki średnio poziomowe dają nam większą swobodę oraz umożliwiają bardziej efektywne pisanie kodu. Kod jest tworzony bardziej za pomocą słów, które reprezentują coś więcej, niż tylko proste operacje logiczne. Już mniej musimy się martwić o architekturę komputera, lecz czasami musimy zatroszczyć się np.: o pamięć czy inne zasoby.
  • Natomiast języki wysokopoziomowe, są jeszcze bardziej rozwinięte oraz bardziej abstrakcyjne. To natomiast umożliwia programiście skupienie się wyłącznie na rozwiązaniu problemu i zdejmuje z niego ciężar związany ze znajomością architektury komputera, czy martwienia się o stan pamięci… chyba, że się coś źle zrobi, to pamięć dalej  będzie problemem 🙂

Dzisiaj, coraz częściej słyszę o podejściu ZeroCode, które ma na celu umożliwienie użytkownikom, którzy nie są programistami, tworzenia aplikacji bez konieczności pisania kodu. W tym podejściu narzędzia i platformy do tworzenia aplikacji, są zaprojektowane tak, aby osoby bez doświadczenia w programowaniu mogły łatwo stworzyć program. 

Wniosek nasuwa mi się jeden. Języki programowania dążą do języka naturalnego człowieka. Co za tym idzie, będą bardziej przystępne dla większej liczby ludzi. Tutaj również się dopatruję, wielkiego sukcesu oraz popularności Chatu GPT. Człowiek, który nie ma wiedzy czy umiejętności programistycznych, za pomocą wspomnianego czatu, może w bardzo łatwy sposób obcować ze sztuczną inteligencją. Skoro, zaczynamy komunikować się bardziej naturalnymi sposobami z maszynami, to czy programowanie zaniknie w takiej postaci jaką dziś znamy?

Przyszłość programowania

Myślę, a wręcz jestem przekonany, że programowanie jako takie nie zniknie. Na pewno nastąpi jakaś ewolucja. Dzięki upowszechnieniu się sztucznej inteligencji oraz rozwoju  języków programowania w kierunku języków naturalnych, programowanie będzie bardziej dostępne i powszechne wśród ludzi. Moim zdaniem, ten proces upowszechniania programowania, zachodzi od wielu lat. Weźmy na tapet, taką mało popularną aplikację jak Excel 🙂 

Excel, dla niewtajemniczonych, będzie wielką tabelą, do której można wpisać dane i jakoś z nimi pracować. Samo wpisywanie formuł, jest dla mnie jakimś przejawem programowania. Natomiast niedawno, w jednym z podcastów, usłyszałem takie oto wyjaśnienie czym jest Excel: jest to programowanie reaktywne i prawdopodobnie “pod maską” działa na grafach.

Czasami przyglądam się, jak osoby z działu customer support, pracują w narzędziach takich jak Hubspot. Ta platforma umożliwia tworzenia pewnych procesów z gotowych komponentów. Przykładowo wykonuje takie zadania: gdy pojawi się nowy użytkownik, wyślij maila powitalnego, a po tygodniu ankietę do wypełnienia. Jakby nie patrzeć, jest to zbiór zrozumiałych instrukcji dla komputera.

Więc tworzenie programów bez wykorzystania dziwnych szlaczków, które są zrozumiałe tylko garstce wybrańców, ma się dobrze od wielu lat. Mam wrażenie, że ma się coraz lepiej. Czy to oznacza, że te szlaczki znikną? Myślę, że nie prędko. Tworzenie aplikacji za pomocą kodu jest bardzo dobrym kompromisem, pomiędzy prawie nieograniczonymi możliwościami w kreowaniu programu, a kosztem jaki musimy ponieść aby to zrobić. Ten koszt, może być zmniejszony przez stosowanie sztucznej inteligencji.

Puszczając ponownie wodze fantazji, być może przyszły podział w programowaniu, nie będzie się już opierał na poziomach języków, a bardziej o to, jak posługujemy się tą umiejętnością. Być może będzie wyglądał tak: 

  • Tworzenie aplikacji za pomocą kodu;
  • Programowanie w dedykowanych środowiskach za pomocą gotowych klocków (podejście ZeroCode);
  • Tworzenie programów w dedykowanych aplikacjach (np. Excel, Hubspot).

Sztuczna inteligencja, zapewne, zagościłaby w każdym poziomie tego podziału. Jedynie rola jaką by odgrywała, byłaby odmienna.

Wnioski

Podsumowując przychylam się do wizji Łukasza. Sztuczna inteligencja nie zastąpi programistów, ale programiści, którzy używają AI w codziennej pracy, mogą zastąpić tych, którzy tego nie robią.

Z czasem zmienią się też potrzeby rynku, co za tym idzie, nastąpi pewna ewolucja stanowisk oraz wymagań związanych z nimi. Te zmiany, będą rozłożone w czasie i raczej nie uchwycimy momentu kiedy się zaczną (jeśli już się nie zaczęły), ani kiedy się skończą.

Mam wrażenie, że rynek wymusi pewne zmiany w sposobie wytwarzania aplikacji. Wzrost zapotrzebowania na aplikacje, jest większy niż przybywających specjalistów, którzy takie zapotrzebowanie mogą zaspokoić. Tutaj widzę pewną szansę, jak i zagrożenie, ze strony sztucznej inteligencji. AI może wspomóc proces wytwarzania oprogramowania, a więc mniejsza grupa programistów dostarczy więcej, ale to przełoży się wprost, że tych specjalistów będziemy potrzebować mniej.

PS Ciekawe, kiedy firmy technologiczne zaczną oferować swoim obecnym lub przyszłym pracownikom, personalnego asystenta w postaci sztucznej inteligencji.

PPS Sztuczna inteligencja, na podstawie statystyki, oferuje najlepsze rozwiązanie jakie zna. Czy człowiek też tak nie robi? Co prawda nie wyliczamy w głowach, które rozwiązanie jest najlepsze tylko raczej zdajemy się na własną intuicję i wiedzę. Lecz czy intuicja i wiedza, to nie przejaw wspomnianej przed chwilą statystyki, która została pozbawiona liczb?

Tomasz Śledziewski

Inżynier i pasjonat informatyki