Czy przyszłe SI rzeczywiście będą mogły pisać pełne aplikacje i przejmować pracę programistów? Zrozummy realistycznie, co SI może i czego nie może robić w 2024 roku.
Prawdopodobnie słyszałeś już o ChatGPT oraz innych nowych chatbotach AI. Prowadzą rozmowy na różne tematy z zadziwiającą biegłością. I tak, mogą również rozwiązywać wiele problemów z kodowaniem.
Czy AI stanowi egzystencjalne zagrożenie dla karier programistów? Czy stanie się po prostu kolejnym narzędziem wspomagającym możliwości programistów?
W tym przewodniku przyjrzymy się rzeczywistym możliwościom sztucznej inteligencji w rozwoju oprogramowania, gdzie technologia nadal ma braki oraz jak możesz zabezpieczyć swoje umiejętności na przyszłość w tej szybko zmieniającej się dziedzinie.
ChatGPT i LLM: Zrozumienie technologii AI
Chatboty takie jak ChatGPT nie są programami „myślącymi”. Nie rozumieją języka ani kodowania. Przewidują inteligentnie brzmiące odpowiedzi, znajdując wzorce w ogromnych zbiorach danych tekstowych online.
Programiści nazywają je „wielkimi modelami językowymi” (LLMs), eleganckim terminem dla zaawansowanego przewidywania tekstu.
Aby umieścić “duży” w perspektywie, ChatGPT został przeszkolony na zbiorze danych od 570GB do 45TB fragmentów tekstu obejmujących fora internetowe, książki i pisanie online, przy czym wiele informacji zostało bezpośrednio pobranych z Reddit.
Ta ogromna ilość danych tekstowych pozwala ChatGPT generować fragmenty, odpowiadać na pytania i nawet pisać kod na podstawie tekstowych poleceń. Jego wiedza pochodzi całkowicie z tych wcześniej istniejących tekstów, a nie z prawdziwego zrozumienia świata.
Więc, chociaż ChatGPT wydaje się być biegłym w rozmowach, jego inteligencja ma ograniczenia.
- Może utrzymywać kontekst tylko do kilku tysięcy słów.
- Nie posiada rzeczywistego doświadczenia.
- Nie potrafi wnioskować ani robić intuicyjnych skoków.
- Ma trudności z rozumieniem skomplikowanego kodu.
Jednakże, ta technologia rozwija się w szybkim tempie. Więc, jak ChatGPT i inne LLM radzą sobie dziś z zadaniami programistycznymi?
Czy ChatGPT może pisać funkcjonalny kod?
ChatGPT może generować działający kod w JavaScript, Python, SQL, Bash i innych językach, gdy zostanie odpowiednio poproszony. Jest początkującym programistą, ale możesz go ponownie zachęcać do poprawiania błędów, aby uzyskać działający kod.
W przypadku prostych problemów z kodowaniem, ChatGPT oferuje imponującą wszechstronność i pozwala zaoszczędzić czas na tworzeniu podstawowego kodu, który w przeciwnym razie musiałbyś wykonać ręcznie. W tych przypadkach, LLM zdecydowanie oszczędza czas programistom.
Jednakże, jego kod jest często nieefektywny lub pomija przypadki brzegowe, ponieważ nie ma pełnego kontekstu problemu. W rzeczywistości, ChatGPT czasami nawet ostrzega, że jego przykładowy kod wymaga dokładnej recenzji przed zastosowaniem.
Więc wiemy na pewno, że LLM-y jeszcze nie osiągnęły swojego potencjału. Ale możemy tylko wyobrażać sobie, jak dobre będą, ponieważ zaawansowane LLM-y mają zaledwie rok (ChatGPT został uruchomiony 30 listopada 2022).
“Jeśli AI będzie postępować w tym tempie, w ciągu najbliższych 30 lat większość ludzkości będzie miała problemy z pracą, nie tylko programiści,” powiedział jeden z użytkowników Reddit na subreddit /r/learnprogramming/.
Zadania programistyczne, które może obsłużyć AI
Chociaż ChatGPT nie może zastąpić senior developera, oferuje proste narzędzia, które czynią programistów bardziej wydajnymi. Przyjrzyjmy się, jak ChatGPT może wspomóc Cię jako programista i eliminować regularne, bardziej żmudne procesy.
Automatyzacja Powtarzalnych Zadań
Dla doświadczonych programistów, pisanie aplikacji CRUD, prostych skryptów i kodu szablonowego backendu należy do najbardziej nużących aspektów pracy.
Z pomocą AI możesz wyeliminować tę nudną pracę poprzez automatyczne generowanie kodu. Zamiast ręcznego kodowania podstawowych systemów rejestracji użytkowników wielokrotnie, model AI mógłby natychmiastowo produkować funkcjonujące prototypy dostosowane do schematu bazy danych każdego projektu.
Użyteczność AI do powtarzalnego kodowania będzie tylko rosła, w miarę jak wyższe abstrakcje będą coraz częściej używane poprzez frameworki takie jak React i Django.
Przetwarzanie Języka Naturalnego
Kierownicy produktu często piszą specyfikacje w codziennej prozie, takie jak “Użytkownicy powinni mieć możliwość aktualizacji swoich zapisanych informacji o płatnościach.” Programowanie tak luźno zdefiniowanych zachowań pozostawia dużo miejsca na niezgodności z oczekiwaniami interesariuszy.
Dzięki potężnym LLM-om, takim jak ChatGPT 4, AI może pomóc w interpretacji szeroko zakrojonych zapytań klientów, aby sformułować szczegółowe wymagania techniczne.
Korzystając z dokumentów klienta i rozmów, LLM mogą pomóc przekształcić prośby w wykonawczą semantykę dla programistów. LLM mogą pomóc wydobyć niejasności, aby rozwiązać je na wstępie, a nie w trakcie projektu, gdy optymalizujesz swoje polecenia.
Wykrywanie Błędów
Modele AI szkolone na ogromnych ilościach kodu open-source mogą również doskonale sprawdzać oprogramowanie pod kątem defektów. Badacze z Microsoftu zbudowali specjalizowane sieci neuronowe do wykrywania błędów, osiągając wyższą dokładność niż ludzcy programiści w niektórych testach.
Jako programista, możesz wykorzystać tego sztucznego współpracownika do szybkiej analizy commitów pod kątem błędnej logiki, błędów przestarzałości wynikających ze starych zależności oraz nawet wad bezpieczeństwa. Zamiast ręcznie przeglądać tysiące linii, otrzymasz adnotacje z sugestiami, co należy naprawić.
Przewidywanie problemów
Poza reaktywnym znajdowaniem błędów, wystarczająco zaawansowana sztuczna inteligencja może przewidywać problemy zanim się pojawią, na podstawie pisanych przez ciebie kodów. Może to robić, ciągle sprawdzając kod i identyfikując, czy może on zawieść w jakimkolwiek momencie wykonania.
Lub, w przypadku bibliotek i frameworków z wieloma zależnościami, kompani AI mogą zauważyć nadchodzące zmiany krytyczne przed wydaniem. To pozwala Ci na płynne przejścia i minimalizację zakłóceń proaktywnie bez dodatkowego wykorzystania zasobów.
Lepsze Szacowanie Projektu i Harmonogramu
Jeśli mowa o wykorzystaniu zasobów, ludzie przeważnie niedoszacowują jak długo potrwają projekty programistyczne. Albo jesteśmy zbyt optymistyczni, albo zapominamy o ryzykach. To powoduje, że projekty przekraczają budżet i harmonogram.
Narzędzia AI zaczynają pomagać, analizując dane z poprzednich projektów, aby zobaczyć, jak długo trwały podobne. Na przykład, CloudBees czerpie kontekst z całego Twojego łańcucha narzędzi i pomaga Ci go zrozumieć. Następnie może użyć tych informacji do szacowania harmonogramów dostaw oprogramowania.
Oczywiście, AI nie może przewidzieć wszystkiego, co może pójść nie tak, ale biorąc pod uwagę ilość danych, które analizuje przed szacowaniem harmonogramów, może być świetnym punktem wyjścia. Z czasem, gdy narzędzia uzyskają więcej danych, szacunki powinny się poprawić.
Optymalizacja Twojego Kodu
Świetnie jest mieć drugą parę oczu do swojego kodu. Może to pomóc zidentyfikować problemy z logiką kodu, znaleźć lepsze i prostsze sposoby osiągnięcia tego samego rezultatu oraz nawet zoptymalizować działanie pod kątem szybkości.
Podczas gdy programiści nieustannie wkładają wysiłek w doskonalenie systemów pod kątem szybkości i wydajności, dostosowywanie kodu metodą prób i błędów staje się nużące.
Modele LLM mogą dostarczać sugestii optymalizacyjnych, które pomogą Ci szybko zoptymalizować i zrefaktoryzować kod.
Zamiast strzelania na ślepo, będziesz miał dostęp do SI, która precyzyjnie wskaże nisko wiszące owoce do celowania dla maksymalnych zysków. Może doradzić podział monolitów na mikrousługi, dodanie indeksów dla kosztownych zapytań, lub ulepszenie frameworków dla nowoczesnych najlepszych praktyk.
Ograniczenia narzędzi AI w rozwoju
Czy programiści powinni czuć się zagrożeni przez użyteczność AI w automatyzacji rutynowego kodowania i dodatkowych zadań programistycznych?
Obecna technologia okazała się niewystarczająca nawet dla umiarkowanie skomplikowanych zadań programistycznych. W związku z tym, kluczowe aspekty procesu pracy programisty zdają się pozostawać sterowane przez człowieka w przewidywalnej przyszłości.
Słaby Kod Źródłowy
Kod wygenerowany całkowicie przez ChatGPT lub podobne modele często cierpi na subtelne wady. Chociaż jest użyteczny, kod nie bierze pod uwagę różnorodności przypadków brzegowych, które możesz znać, i bez logicznego rozumowania, polega wyłącznie na tym, co mu każesz robić.
Oto eksperyment przeprowadzony przez użytkownika GitHuba. Można zobaczyć, że ChatGPT świetnie radzi sobie z wyjaśnianiem i analizą problemu:
Ale następnie podaje tylko częściowo poprawny kod, gdzie pomija logikę ustawiania odpowiedzi na 0, gdy n wynosi 1.
Aby upewnić się, że wszystkie przypadki brzegowe zostały uwzględnione, kod wymagał od nas dodania tego warunku if, jak możesz zobaczyć na poniższym zrzucie ekranu.
Kod utworzony za pomocą ChatGPT zazwyczaj prowadzi do niestabilnych aplikacji, które psują się w produkcji z powodu nieobsłużonych wyjątków.
Dopóki sztuczna inteligencja nie rozwinie się radykalnie, generowany kod będzie nadal zbyt marny dla większości rzeczywistych zastosowań bez ciężkiego nadzoru i edycji.
Potencjalne zagrożenia bezpieczeństwa
Obok problemów ze stabilnością, kod napisany przez modele językowe wprowadza alarmujące ryzyko bezpieczeństwa. Ponieważ AI nie zawsze może uwzględnić przypadki brzegowe, Twój kod może być otwarty na wykorzystywalne błędy i ryzyka bezpieczeństwa.
Na przykład, jeśli opracowujesz aplikację internetową i nie oczyszczasz odpowiednio danych wejściowych użytkownika, hakerzy mogą wykorzystać to do uzyskania dostępu do Twojej bazy danych poprzez iniekcje SQL i ataki XSS.
Nie potrafi rozwiązywać nowych problemów
Aby zastąpić ludzkich programistów, a nie im pomagać, AI musi stawić czoła nowym problemom. Dzisiejsze modele jedynie kojarzą polecenia z rozwiązaniami napotkanymi podczas treningu. W niezależnym badaniu, naukowcy odkryli, że ChatGPT zawiodł w 52% pytań dotyczących kodowania, dostarczając niepełny lub błędny kod.
Jednak użytkownicy nadal wybierali odpowiedź ChatGPT w 39,34% przypadków ze względu na jej ogólną kompleksowość.
Tylko gdy modele potrafią wyciągać rozsądne rozwiązania i myśleć poza podstawowymi krokami, jak ludzie, mogą samodzielnie napędzać rozwój. Dopóki tak nie jest, ich wartość ogranicza się do przyspieszania znanych zadań, a nie do przecierania szlaków.
Sztuczna inteligencja nie ma zrozumienia
Istniejące AI nie ma właściwego zrozumienia kodu ani zdolności do abstrakcyjnego rozumowania – po prostu rozpoznaje wzorce w podanych komendach i dostarcza odpowiednie „brzmiące” wyniki. Bez zrozumienia kontekstowego, jego rozwiązania często ignorują kluczowe ograniczenia lub podejmują nieracjonalne wybory, których żaden inżynier by nie dokonał.
Weź pod uwagę analogię medycznego bota szkoleniowego, który diagnozuje pacjentów, dopasowując objawy do zarejestrowanych chorób. Mógłby wystarczająco dobrze rekomendować powszechne leczenia, ale mógłby katastrofalnie przepisać chemioterapię na pieprzyk na nodze tylko dlatego, że powierzchownie podobne sformułowania łączyły te dwa przypadki.
Inżynieria z kolei opiera się na ludzkiej racjonalności i osądzie, aby tworzyć spójne projekty. Dlatego, dopóki nie osiągniemy lepszego AI, programiści mogą korzystać z AI, aby wzmocnić swoje istniejące przepływy pracy związane z kodowaniem.
Przyszła Rola AI w Programowaniu
Mimo że AI obecnie ma poważne ograniczenia, tempo wzrostu w tej dziedzinie jest fenomenalne. AI przeszło od niezrozumiałego pisania do bezbłędnej prozy angielskiej, nieodróżnialnej od tekstu napisanego przez człowieka, w ciągu zaledwie jednego roku.
W niedalekiej przyszłości sztuczna inteligencja może zastąpić początkującego programistę, obsługując automatycznie podstawowe zadania programistyczne. Rzeczywiście, według wewnętrznych ocen OpenAI, GPT-4 znacząco przewyższa swoje poprzednie wersje we wszystkich ocenach, w tym w zadaniach związanych z programowaniem.
“Będzie to narzędzie w zestawie dewelopera, które uczyni jego pracę szybszą i łatwiejszą, jednocześnie wprowadzając poziom złożoności i nieprzezroczystości, który niewątpliwie spowoduje nowe problemy,” mówi Lawjarp2, użytkownik Reddita.
Natura programowania już ewoluuje, jak widzimy na przykładzie GitHub Copilot, CodeWhisperer od Amazon i wielu innych.
Kodowanie przekształci się z ręcznego wpisywania w synergiczne współdziałanie z generatywnymi systemami AI — gdzie ludzie dostarczają kontekst, wizję, nadzór i rozwiązywanie problemów.
Ten hybrydowy model pozwala AI zajmować się żmudnymi pracami kodującymi, podczas gdy deweloperzy skupiają się na architekturze systemów wysokiego poziomu, rozwiązywaniu skomplikowanych problemów, kreatywności oraz zapobieganiu problemom.
Zatem, chociaż zadania się zmieniają, twórcy oprogramowania nie zostaną całkowicie zastąpieni. Jednak zawód ten będzie wyglądał radykalnie inaczej za kilka lat.
Jak zabezpieczyć swoją przyszłość zawodową w programowaniu
Zamiast panikować na temat przejęcia przez AI, aspirujący i obecni programiści powinni postrzegać modele językowe za to, czym są: asystentami, a nie zamiennikami. Oto wskazówki, aby Twoje umiejętności pozostały aktualne:
Naucz się Inżynierii Prompt
Maksymalizowanie użyteczności ChatGPT i GitHub Copilot zależy od skutecznego tworzenia poleceń. Niestety, tworzenie poleceń jest obecnie bardziej sztuką niż nauką.
Ale oczekiwanie, że inżynierowie będą ręcznie kodować wszystko, tak jak robili to poprzednie pokolenia, już nie ma sensu. Lepiej pozwolić nowym deweloperom wykorzystać nowe narzędzia, które mają pod ręką.
Doświadczeni programiści powinni poświęcić czas na eksperymentowanie z modelami językowymi, używając różnych danych wejściowych, aby zbudować intuicję, co działa. Pamiętaj, każdy LLM ma swój unikalny styl, i warto je zrozumieć, biorąc pod uwagę, że stają się częścią codziennych procesów pracy.
Doskonal swoje umiejętności rozwiązywania problemów
Ludzka kreatywność i intuicja pozostają niezbędne, ponieważ rozwój oprogramowania zajmuje się problemami otwartymi. To nie tylko mechaniczne tłumaczenie specyfikacji technicznych na kod.
Żadna ilość szybkiego kodowania nie zastąpi tworzenia pomysłowych rozwiązań czy opracowywania prostych architektur w złożonych środowiskach. Skoncentruj się więc na wiedzy specjalistycznej, kreatywności i dogłębnym zrozumieniu swojej branży, przekazując rutynowe prace swoim sztucznym odpowiednikom.
Naucz się Empatii Wobec Użytkowników
Pamiętaj, że kod jest pisany, aby służyć potrzebom i pragnieniom ludzi. W miarę jak AI staje się bardziej zdolne do przejmowania prostszych zadań programistycznych, programiści powinni skupić się na mocnych stronach, których maszyny nie posiadają, a mianowicie empatii.
Prioritizuj role takie jak menedżerowie produktu czy projektanci UX, którzy kładą nacisk na zrozumienie odbiorców i tworzenie dla ludzi. Stawiaj na pierwszym miejscu myślenie zorientowane na użytkownika, nawet podczas współpracy z programistami AI nad szczegółami implementacji.
Studiuj uczenie maszynowe
Dla tych, którzy są podekscytowani przesuwaniem granic, eksploracja uczenia maszynowego oferuje wgląd w najnowsze postępy w dziedzinie AI o szerokim zastosowaniu. Sieci neuronowe obecnie leżą u podstaw rozwiązań od przetwarzania obrazów do analityki predykcyjnej.
Zrozumienie, jak działają modele, szkolą się i współpracują z systemami oprogramowania, może również pomóc Ci otworzyć nowe możliwości w Twojej karierze. Rozważ uzupełnienie podstaw informatyki o kursy z zakresu nauk danych i uczenia maszynowego.
Najczęściej Zadawane Pytania
Czy AI zastąpi programistów w ciągu 5 lat?
Nie. W ciągu pięciu lat AI prawdopodobnie będzie obsługiwać bardziej powtarzalne zadania programistyczne, ale nie zastąpi całkowicie ludzkiego osądu i nadzoru przy tworzeniu złożonych systemów oprogramowania. Programiści mogą zauważyć zmianę w swoich rolach z asystentami AI, ale nadal będą projektować rozwiązania i ograniczenia.
Czy AI kiedykolwiek zastąpi programistów?
Całkowita wymiana wydaje się mało prawdopodobna nawet przy zaawansowanej przyszłej AI, biorąc pod uwagę ciągle ewoluujące wymagania oprogramowania i kreatywność niezbędną do rozwiązywania nowych problemów. Proste programowanie ostatecznie staje się towarem, ale nie strategiczne myślenie o wysokiej wartości. Deweloperzy, którzy uczą się wykorzystywać AI, a nie konkurować z nim, pozostaną zatrudnieni.
Na koniec dnia, nie obawiaj się przejęcia przez maszyny. Witaj AI jako członków zespołu, którzy zwiększą produktywność w sposób, jakiego nie osiągnie żaden inżynier czy algorytm samodzielnie. Rozwój oprogramowania jest zbyt szybki, aby jakakolwiek pojedyncza zmiana mogła dominować na zawsze. A szczególnie w kontekście technologii, zdolność do adaptacji jest najważniejszą umiejętnością.
Zamiast martwić się, czy kod jest pisany przez biologiczne czy krzemowe ręce na dłuższą metę, pielęgnuj wszechstronność, bez względu na to, jakie narzędzia się pojawią.
Jakie jest Twoje zdanie na temat asystentów kodowania AI?
Wiatry zmian niewątpliwie przyspieszają w inżynierii oprogramowania. W miarę jak AI szybko się rozwija, to co kiedyś uważaliśmy za domenę ludzkiego poznania, teraz może być zlecone maszynom.
Czy pozwolimy, aby obawy dotyczące przyszłości sparaliżowały postęp? Czy będziemy aktywnie przekształcać nasze role, korzystając z wykładniczej mocy tej technologii?
Najbardziej formidabli konkurenci to zazwyczaj ci, którzy szybko przyjmują najnowsze technologie, zamiast zwalczać zmiany. Kluczem pozostaje jednak rozsądne równoważenie ludzkiej pomysłowości i inteligencji maszynowej jako sił uzupełniających się, a nie przeciwstawnych.
A zatem, w miarę jak oprogramowanie nadal pochłania świat, programiści powinni odrzucić strach na rzecz pewnego siebie pracy nad bardziej złożonymi i wymagającymi projektami.