Powszechnie wiadomo, że generatywna sztuczna inteligencja (AI) potrafi tworzyć obrazy, produkując fotorealistyczne zdjęcia, ilustracje i obrazy, po prostu postępując zgodnie z instrukcjami.
Tymczasem w świecie biznesu uwaga skupia się na zdolności generatywnej sztucznej inteligencji do generowania programów.
Sztuczna inteligencja oparta na czacie jest realizowana za pomocą fundamentalnych, dużych modeli językowych, co czyni ją wysoce biegłą w konwersacji w różnych językach i tłumaczeniu między nimi.
Języki programowania, używane do tworzenia programów, również są rodzajem języka. Ludzcy programiści, w pewnym sensie, tłumaczą ustne wymagania dotyczące oprogramowania na języki programowania.
Z tego powodu konwersacyjna generatywna sztuczna inteligencja wykorzystująca duże modele językowe jest również bardzo biegła w programowaniu.
Ponadto programowanie to rodzaj pracy intelektualnej, gdzie poprawność wyników często może być weryfikowana automatycznie i natychmiastowo. Dzieje się tak, ponieważ uruchomienie stworzonego programu pozwala na automatyczne określenie, czy uzyskane są pożądane rezultaty.
W rzeczywistości, ludzcy programiści często tworzą programy testowe jednocześnie z głównym programem, aby zweryfikować, czy główny program działa zgodnie z przeznaczeniem, sprawdzając jego zachowanie w miarę postępu prac.
Generatywna sztuczna inteligencja może również postępować w programowaniu podczas testowania, co pozwala na mechanizm, w którym, jeśli człowiek dostarczy precyzyjne instrukcje, AI może automatycznie iterować i uzupełniać program, aż przejdzie testy.
Oczywiście, ze względu na ograniczenia zdolności programowania generatywnej sztucznej inteligencji i niejednoznaczność ludzkich instrukcji, w wielu przypadkach testy nie mogą zostać zaliczone nawet po wielu iteracjach. Ponadto testy mogą być niewystarczające lub błędne, co często prowadzi do błędów lub problemów w ukończonym programie.
Jednak w miarę poprawy możliwości generatywnej sztucznej inteligencji, udoskonalania przez inżynierów metod instruktażu oraz wzbogacania wiedzy programistycznej generatywnej sztucznej inteligencji poprzez wyszukiwanie w internecie, zakres automatycznego generowania odpowiednich programów rośnie z dnia na dzień.
Dodatkowo, z uwagi na zainteresowanie świata biznesu, czołowe firmy prowadzące badania i rozwój generatywnej sztucznej inteligencji również koncentrują się na poprawie jej zdolności programistycznych.
W takich okolicznościach przewiduje się przyspieszenie rozszerzenia obszarów i zakresu, w których automatyczne programowanie może być powierzane generatywnej sztucznej inteligencji.
Istnieje wiele przypadków, w których osoby, które nigdy wcześniej nie tworzyły programów, skonfigurowały podstawowe środowisko programistyczne w oparciu o informacje z Internetu, a następnie pozwoliły generatywnej sztucznej inteligencji zająć się programowaniem, kończąc programy we współpracy.
Ja sam, jako programista, używam generatywnej sztucznej inteligencji do programowania. Kiedy już opanuję tę technikę, mogę ukończyć oprogramowanie bez żadnej edycji programu, po prostu kopiując programy do plików lub wycinając i wklejając zgodnie z instrukcjami generatywnej sztucznej inteligencji.
Oczywiście, często napotykam trudności. Wynikają one głównie z tego, że mój komputer lub narzędzia programistyczne mają nieco inne ustawienia niż typowe konfiguracje, albo że bezpłatne komponenty oprogramowania są nowsze niż te, których uczyła się generatywna sztuczna inteligencja, co prowadzi do luki w wiedzy, albo czasami moje żądanie jest nieco nietypowe.
W większości przypadków, jeśli nie ma takich drobnych różnic ani szczególnych okoliczności, a ja polecę stworzenie bardzo typowej funkcji oprogramowania, generowane są odpowiednie programy.
Ku Erze Liquidware
Jako programista mogę wydawać opracowane przeze mnie oprogramowanie. I to oprogramowanie, które my, inżynierowie, wydajemy, jest używane przez różnych użytkowników.
Przyszłość, w której każdy będzie mógł rozwijać oprogramowanie za pomocą generatywnej sztucznej inteligencji, jest rozszerzeniem dotychczasowej dyskusji.
Jednakże, nie jest to tylko zmiana po stronie tworzenia oprogramowania. Znacząca zmiana nastąpi również po stronie użytkownika.
Instruowanie generatywnej sztucznej inteligencji słownie, aby automatycznie dodawała lub zmieniała funkcje w oprogramowaniu, może odbywać się nie tylko w fazie rozwoju przed wydaniem oprogramowania, ale także podczas jego użytkowania. Co więcej, może to być robione przez samych użytkowników oprogramowania.
Twórcy oprogramowania muszą jedynie zdefiniować dopuszczalne i niezmienialne zakresy oraz wydać oprogramowanie z funkcją dostosowywania zasilaną przez generatywną sztuczną inteligencję.
Pozwoliłoby to użytkownikom prosić generatywną sztuczną inteligencję o zmianę drobnych problemów z użytecznością lub preferencji dotyczących wyglądu ekranu.
Ponadto możliwe byłoby dodawanie wygodnych funkcji występujących w innych aplikacjach, wykonywanie kombinacji wielu operacji jednym kliknięciem lub przeglądanie często używanych ekranów na jednym wyświetlaczu.
Z perspektywy twórcy oprogramowania, umożliwienie takiej personalizacji przez użytkownika oferuje znaczące korzyści. Eliminuje to potrzebę dodawania funkcji na podstawie żądań użytkowników, a biorąc pod uwagę, że mogłoby to zwiększyć popularność oprogramowania, unikając negatywnych opinii i niezadowolenia dotyczącego użyteczności, jest to duża wygrana.
Kiedy użytkownicy mogą swobodnie zmieniać ekrany i funkcje w ten sposób, koncepcja ta znacznie odbiega od tego, co tradycyjnie nazywaliśmy „oprogramowaniem”.
Właściwe byłoby nazwanie go „liquidware”, aby podkreślić, że jest on jeszcze bardziej płynny i adaptowalny niż oprogramowanie (które jest elastyczne w porównaniu do sprzętu), oraz że doskonale pasuje do użytkownika.
W przeszłości funkcje były realizowane wyłącznie przez sprzęt, ale potem pojawiło się wymienialne oprogramowanie, pozwalając na realizację funkcji przez kombinację sprzętu + oprogramowania.
Z tego punktu widzenia możemy myśleć o pojawieniu się liquidware, które odnosi się do części, które mogą być modyfikowane przez generatywną sztuczną inteligencję. W ten sposób ogólne funkcje byłyby realizowane przez sprzęt + oprogramowanie (dostarczone przez deweloperów) + liquidware (modyfikacje użytkownika).
W erze liquidware, pomysły na modyfikacje po stronie użytkownika eksplodują.
Przełomowy pomysł modyfikacji wymyślony przez jednego użytkownika może stać się gorącym tematem w mediach społecznościowych, prowadząc innych do naśladowania i modyfikowania różnych liquidware.
Pojawi się również liquidware, które będzie potrafiło integrować i obsługiwać różne typy oprogramowania. Pozwoli to użytkownikom przeglądać osie czasu z wielu różnych platform SNS w jednej aplikacji lub integrować wyniki wyszukiwania z licznych platform.
W ten sposób, w świecie, gdzie liquidware jest powszechne, różne urządzenia, w tym komputery PC i smartfony, będą zapewniać funkcje idealnie dopasowane do życia i aktywności każdej osoby.
Obecne zjawisko
Dla inżynierów oprogramowania, takich jak ja, ważne jest to, że liquidware nie jest futurystyczną koncepcją ani czymś, co pojawi się za kilka lat.
Dzieje się tak, ponieważ bardzo proste liquidware jest już osiągalne.
Na przykład, załóżmy, że jestem inżynierem rozwijającym aplikację internetową dla firmowej witryny e-commerce.
Takie aplikacje internetowe zazwyczaj posiadają bazy danych, systemy zarządzania sprzedażą i systemy wysyłki produktów na serwerach zarządzanych przez firmę lub w ramach usług chmurowych. Gdy użytkownik dokonuje zakupu, systemy te łączą się, aby pobrać płatności i wysłać produkty.
Główne systemy i bazy danych dla tych operacji nie mogą być dowolnie zmieniane.
Jednakże, jeśli wygląd strony internetowej e-commerce, którą widzą użytkownicy, zostanie zmodyfikowany dla wygody każdego użytkownika, zazwyczaj nie powoduje to większych problemów. Oczywiście, jeśli zmiany jednego użytkownika wpływają na ekran innego użytkownika, jest to problem, ale indywidualne dostosowania dla konkretnego użytkownika są w porządku.
Możliwe są różnorodne modyfikacje: powiększenie tekstu, zmiana tła na ciemny odcień, przeniesienie często naciskanych przycisków w miejsca łatwo dostępne lewą ręką, sortowanie elementów według ceny na liście lub wyświetlanie szczegółów dwóch produktów obok siebie.
Technicznie rzecz biorąc, te modyfikacje można osiągnąć poprzez zmianę plików konfiguracyjnych i programów takich jak HTML, CSS i JavaScript, które wyświetlają ekran w przeglądarce.
Pod względem bezpieczeństwa, pliki te pierwotnie działają w przeglądarce internetowej, więc mogą być modyfikowane przez inżynierów zaznajomionych z aplikacjami internetowymi. Dlatego obsługują tylko funkcje i dane, które są bezpieczne do modyfikacji.
W ten sposób, po stronie serwera aplikacji e-commerce, można by przechowywać te pliki oddzielnie dla każdego zalogowanego użytkownika, dodać ekran do konwersacji z czatową AI i stworzyć mechanizm do modyfikacji plików HTML, CSS i JavaScript tego użytkownika na serwerze zgodnie z jego żądaniami.
Jeśli dostarczysz ten tekst, wraz z informacjami konfiguracyjnymi i kodem źródłowym istniejącej aplikacji internetowej e-commerce, generatywnej sztucznej inteligencji, prawdopodobnie dostarczy ona kroki i niezbędne programy do dodania takiej funkcjonalności.
W ten sposób liquidware jest już tematem bieżącym; nie byłoby zaskakujące, gdyby było to zjawisko w toku.
Wszechstronny Inżynier
Nawet jeśli zakres automatycznego programowania opartego na sztucznej inteligencji rozszerza się, a era „liquidware” już się rozpoczęła, rozwój oprogramowania nie może być jeszcze prowadzony wyłącznie przez generatywną sztuczną inteligencję.
Jednak pewne jest, że waga programowania w rozwoju oprogramowania znacząco spadnie.
Ponadto, aby płynnie rozwijać oprogramowanie, potrzebna jest szeroka wiedza i umiejętności inżynierskie, nie tylko ogólne programowanie, ale także infrastruktura chmurowa, sieci, bezpieczeństwo, platformy, frameworki rozwojowe i bazy danych – obejmujące cały system od góry do dołu.
Personel posiadający taką wiedzę i umiejętności nazywany jest inżynierami full-stack.
Do tej pory kilku inżynierów full-stack zajmowało się ogólnym projektem, podczas gdy pozostali inżynierowie albo koncentrowali się wyłącznie na programowaniu, albo specjalizowali się w konkretnych, nieprogramistycznych obszarach stosu systemowego, dzieląc się w ten sposób rolami.
Jednakże, gdy generatywna sztuczna inteligencja przejmie część programistyczną, koszty rozwoju oprogramowania zostaną znacząco obniżone, co doprowadzi do planowania różnorodnych nowych przedsięwzięć w zakresie oprogramowania.
W konsekwencji, każdy projekt rozwojowy będzie wymagał bardzo niewielu inżynierów, którzy potrafią jedynie pisać kod; zamiast tego, potrzebna będzie duża liczba inżynierów full-stack.
Co więcej, w tej sytuacji samo posiadanie wiedzy i umiejętności full-stack będzie niewystarczające. Dzieje się tak, ponieważ różne projekty rozwoju oprogramowania będą wymagały różnorodnych typów oprogramowania, co oznacza, że rozwój nie zawsze będzie prowadzony w ramach tego samego stosu systemowego. Wzrośnie również zapotrzebowanie na systemy kompozytowe wymagające wielu stosów systemowych.
Na przykład stos systemowy dla aplikacji internetowej różni się od tego dla systemów biznesowych czy rdzennych. Dlatego inżynier full-stack aplikacji internetowych nie może być powierzony projektowi rozwoju systemu rdzennego.
Ponadto aplikacje internetowe, aplikacje na smartfony i aplikacje na PC mają różne stosy systemowe. W świecie oprogramowania wbudowanego, takiego jak IoT, stos systemowy całkowicie zmienia się w zależności od urządzenia, w którym jest osadzony.
Jednakże, jeśli zmniejszy się nacisk na programowanie, a ogólny koszt tworzenia oprogramowania spadnie, rozwój systemów kompozytowych, które łączą oprogramowanie z różnymi stosami systemowymi, powinien wzrosnąć.
Choć będzie to wymagało zgromadzenia wielu niezależnych inżynierów full-stack do prac rozwojowych, inżynierowie, którzy potrafią ogarnąć całość i wykonać podstawowy projekt, zajmą kluczową pozycję.
Oznacza to, że inżynierowie posiadający wszechstronną wiedzę i umiejętności w wielu stosach systemowych, przekraczający granice poszczególnych stosów systemowych, będą poszukiwani.
Tacy inżynierowie prawdopodobnie zostaną nazwani inżynierami wszechstronnymi.
I tak jak zapotrzebowanie na inżynierów, którzy potrafią tylko programować, zmniejszy się z powodu generatywnej sztucznej inteligencji, nadejdzie w końcu era, w której zmniejszy się również zapotrzebowanie na inżynierów full-stack ograniczonych do jednego stosu systemowego.
Jeśli chcesz pozostać aktywnym inżynierem IT w tej erze, musisz zacząć dążyć do zostania wszechstronnym inżynierem już teraz.
Rola Wszechstronnego Inżyniera
Języki programowania, platformy i frameworki do opracowania są różnorodne.
Nie oznacza to jednak, że trzeba nauczyć się ich wszystkich. Dzieje się tak, ponieważ wszechstronny inżynier może również korzystać z pomocy generatywnej sztucznej inteligencji.
Jeśli powierzy się zadanie generatywnej sztucznej inteligencji, nawet języki programowania, platformy czy frameworki, których nigdy osobiście się nie używało, mogą zostać wygenerowane po prostu poprzez ustne instrukcje.
Oczywiście istnieje ryzyko wprowadzenia błędów lub luk w zabezpieczeniach, lub gromadzenia długu technicznego, który mógłby utrudnić przyszłe modyfikacje.
Aby zidentyfikować i zmniejszyć te ryzyka, niezbędna jest znajomość konkretnego języka lub biblioteki. Jednak tę wiedzę również można uzyskać od generatywnej sztucznej inteligencji. Wszechstronny inżynier musi jedynie być w stanie dokładnie skonstruować procedury i mechanizmy wykrywania i zapobiegania tym problemom, lub ich rozwiązywania post-factum.
Te procedury i mechanizmy nie zmieniają się znacząco wraz z różnicami w stosie systemowym. Jeśli można sformalizować procedury i mechanizmy zapobiegające wprowadzaniu błędów i luk w zabezpieczeniach oraz zapewniające przyszłą rozszerzalność podczas rozwoju, resztę można powierzyć generatywnej sztucznej inteligencji lub inżynierom biegłym w tych konkretnych obszarach.
Wszechstronny inżynier nie musi posiadać szczegółowej wiedzy ani długoletniego doświadczenia z każdym indywidualnym stosem systemowym.
Ponadto, jedną z głównych ról wszechstronnego inżyniera jest projektowanie sposobu dystrybucji funkcji i ich współdziałania w złożonym oprogramowaniu, które współpracuje na wielu, różnych stosach systemowych.
Dodatkowo, rozważanie, jak całe oprogramowanie powinno być rozwijane i zarządzane, staje się również ważną rolą dla wszechstronnego inżyniera.
Oprogramowanie wszechstronne
Zastanówmy się, jaki rodzaj rozwoju oprogramowania wymaga wszechstronnego inżyniera.
Wcześniej podałem przykład tworzenia aplikacji internetowej dla handlu elektronicznego.
Pod kierownictwem odpowiedzialnego dyrektora, który otrzymał od najwyższego kierownictwa firmy polecenie gruntownej przebudowy tej aplikacji internetowej e-commerce, zespół planowania może przedstawić następujące wymagania:
Konwersja na platformę społeczności użytkowników. Oznacza to nie tylko aplikację lub witrynę specyficzną dla e-commerce, ale także stworzenie platformy, na której użytkownicy produktów mogą wzajemnie komunikować się na temat samych produktów i ich użytkowania. Celem jest zatrzymanie użytkowników, efekt marketingu szeptanego, wzbogacenie treści poprzez wkład użytkowników oraz integracja informacji zwrotnych z rozwoju produktu (zarówno pozytywnych, jak i negatywnych) z planowaniem nowych produktów i marketingiem.
Kompatybilność z wieloma urządzeniami (Omni-device Compatibility). Umożliwia dostęp do społeczności użytkowników i informacji o produktach nie tylko z aplikacji internetowych, ale także z aplikacji na smartfony, asystentów głosowych, urządzeń noszonych, inteligentnych urządzeń domowych i wszystkich innych urządzeń.
Kompatybilność z wieloma platformami (Omni-platform Compatibility). Obejmuje to nie tylko własną platformę społeczności użytkowników firmy, ale także, na przykład, listy produktów i udostępnianie recenzji na ogólnych stronach e-commerce, integrację z mediami społecznościowymi oraz funkcjonalne i informacyjne połączenie z różnymi narzędziami AI.
Odświeżenie systemu biznesowego. Podczas gdy tymczasowo łączymy się z istniejącymi systemami zarządzania sprzedażą i dostawami produktów, systemy te również zostaną odświeżone. Po odświeżeniu przewiduje się agregację danych sprzedażowych w czasie rzeczywistym, prognozowanie popytu oraz integrację z systemami zarządzania zapasami. Ponadto, w miarę postępu stopniowej integracji z regionalnymi rozproszonymi systemami magazynowymi i usługami wysyłki produktów świadczonymi przez firmy kurierskie, systemy informacyjne muszą również odpowiednio stopniowo się integrować.
Kompatybilność z liquidware (Liquidware Compatibility). Oczywiście, wszystkie interfejsy użytkownika będą kompatybilne z liquidware. Ponadto, wszystkie wewnętrzne interfejsy użytkownika, takie jak te do agregacji informacji i informacji zwrotnych dla rozwoju i planowania produktów, działów operacji systemowych i raportów zarządczych, również zostaną przekonwertowane na liquidware.
Gdyby przedstawiono plan rozwoju tak złożonego oprogramowania, tradycyjny zespół programistyczny prawdopodobnie nie zaakceptowałby go natychmiast. Albo, w trakcie uszczegóławiania specyfikacji systemu, logicznie wykazaliby potrzebę ogromnych kosztów i czasu rozwoju, i dążyliby do znacznego ograniczenia specyfikacji.
A co, gdyby generatywna sztuczna inteligencja mogła zautomatyzować większość programowania, a ponad połowa przedstawionych stosów systemowych była znana komuś z zespołu, i zespół miał wcześniejsze doświadczenie w pomyślnym wprowadzaniu nowych stosów systemowych, platform i frameworków od podstaw z pomocą generatywnej sztucznej inteligencji? A co, gdybyś Ty, jako wszechstronny inżynier, już wkroczyłeś na tę ścieżkę i zamierzałbyś nią podążać?
Z tej perspektywy powinno to wydawać się bardzo atrakcyjnym projektem. Miałbyś okazję pracować z zespołem planistycznym, który przedstawia ambitne propozycje pod kierownictwem liderów planowania, oraz z zespołem deweloperskim z potencjałem rozwoju w wszechstronny zespół programistyczny.
Istnieje również pewność co do istniejących systemów. Jest to również projekt, który pozwala na zwinne procesy rozwoju, gdzie funkcje o dużym wpływie mogą być szybko budowane, a system może rosnąć przyrostowo dzięki informacjom zwrotnym od wczesnych użytkowników.
Biorąc to pod uwagę, rozwój tego wszechstronnego oprogramowania powinien wydawać się atrakcyjnym projektem.
Podsumowując
Dzięki automatycznemu programowaniu przez generatywną sztuczną inteligencję, liquidware i rozwój oprogramowania wszechstronnego stają się już rzeczywistością.
W takiej sytuacji inżynierowie IT coraz częściej muszą wykraczać poza rolę full-stack i dążyć do zostania inżynierami wszechstronnymi.
Co więcej, ich zakres działania rozszerzy się na wszechstronną inżynierię biznesową, która kompleksowo projektuje działania organizacyjne, łącząc klientów, wewnętrznych pracowników i sztuczną inteligencję poza zakresem systemów IT, oraz na wszechstronną inżynierię społecznościową.
A jeszcze dalej, wierzę, że pojawi się dziedzina zwana wszechstronną inżynierią społeczną, mająca na celu kompleksowe ulepszanie społeczeństwa.