Rozwój to iteracyjne tworzenie czegoś nowego i użytecznego.
Kiedy myślimy o rozwoju, często przychodzi nam na myśl rozwój nowych produktów. Różni się to od produkcji, która wytwarza pojedyncze produkty; zamiast tego, obejmuje tworzenie specyfikacji projektowych lub form dla produktów.
W ten sposób, plany lub formy stworzone poprzez rozwój nowych produktów są wielokrotnie wykorzystywane w fabrykach do produkcji licznych identycznych produktów.
Istnieją również zastosowania, takie jak rozwijanie indywidualnych zdolności lub rozwijanie społeczeństwa i narodów. Oznacza to nie tylko wzrost posiadanych zasobów, ale także zdolność do wielokrotnego wykorzystywania i czerpania korzyści z rozwiniętych zdolności.
Podczas gdy siła ekonomiczna jednostek i społeczeństw może ulegać wahaniom z powodu warunków ekonomicznych, rozwinięte zdolności są zasadniczo trwałe.
Nawet jeśli maleją, jest to uważane za spadek, a nie za wahania koniunktury gospodarczej.
Poza tym istnieje również rozwój technologii i wiedzy. W przeciwieństwie do zdolności jednostek lub konkretnych społeczeństw, te cechują się łatwością udostępniania.
A wśród produktów, zdolności, wiedzy i technologii, które są wynikiem tych działań rozwojowych, niektóre mogą przyczynić się do dalszego rozwoju.
Poprzez rozwijanie takich użytecznych wyników, zakres rozwoju poszerza się, a efektywność i jakość ulegają poprawie.
Tworzenie Oprogramowania Sterowane przez AI
Ogólnie rzecz biorąc, rozwój wymagał znacznego czasu i wysiłku. Zwłaszcza w miarę postępu społeczeństwa i udoskonalania różnych rzeczy, tworzenie nowych staje się jeszcze trudniejsze.
Jednakże, wraz z pojawieniem się generatywnej sztucznej inteligencji, ta sytuacja się zmienia. Obecnie tworzenie oprogramowania przechodzi dramatyczne zmiany dzięki wysokim możliwościom programistycznym generatywnej sztucznej inteligencji.
W tym kontekście, wizja przyszłości, w której autonomiczni agenci oparci na generatywnej sztucznej inteligencji stają się centralnymi postaciami w tworzeniu oprogramowania jako inżynierowie oprogramowania, staje się już rzeczywistością.
Obecnie znajdujemy się w fazie przejściowej. Chociaż nie możemy w pełni powierzyć rozwoju generatywnej sztucznej inteligencji, umiejętne jej wykorzystanie może potężnie przyspieszyć tworzenie oprogramowania.
Nazywa się to tworzeniem oprogramowania sterowanym przez AI.
Rozwój Rozwojowy
Kiedy generatywna sztuczna inteligencja usprawnia tworzenie oprogramowania, może ona zoptymalizować nie tylko rozwój ostatecznego oprogramowania docelowego, ale także rozwój oprogramowania, które wspomaga sam proces tworzenia.
Jak wspomniano wcześniej, wyniki ułatwiające rozwój poszerzają jego zakres i pomagają poprawić efektywność oraz jakość. Co więcej, jeśli zostaną skutecznie stworzone, mogą być ponownie wykorzystane w innych projektach rozwojowych.
Dlatego, rozwijając oprogramowanie wspomagające rozwój w trakcie procesu tworzenia oprogramowania, można zwiększyć ogólną efektywność, a te zasoby mogą być wykorzystane w przyszłych projektach.
Tradycyjnie, rozwijanie takiego pomocniczego oprogramowania było powszechną praktyką, ale wymagało ono własnego czasu i wysiłku na rozwój, co wymagało starannego rozważenia i ukierunkowanego wykonania.
Wykorzystując generatywną sztuczną inteligencję, można szybko tworzyć proste oprogramowanie do automatyzacji drobnych zadań, które przychodzą na myśl. Jeśli zadanie obejmuje jasne przetwarzanie, generatywna sztuczna inteligencja może dokładnie wygenerować program niemal bez błędów.
W konsekwencji, rozwijanie oprogramowania wspomagającego rozwój w trakcie procesu tworzenia oprogramowania stało się łatwiejsze niż wcześniej.
A głębsze przemyślenie tego prowadzi do wyłonienia się stylu rozwoju, w którym użyteczne narzędzia do tworzenia są ciągle tworzone w trakcie procesu, tym samym przekształcając samą metodologię rozwoju.
Nazwiemy to „rozwojem rozwojowym”.
Aby praktykować rozwój rozwojowy, potrzebna jest umiejętność obiektywnego obserwowania własnego procesu tworzenia oprogramowania, rozważania, które części mogą być obsługiwane przez oprogramowanie, a które tylko przez ludzi, a także umiejętność rozwijania takiego pomocniczego oprogramowania.
Co więcej, generatywna sztuczna inteligencja może być włączona do tych narzędzi programowych. Wbudowanie jej w oprogramowanie, w przeciwieństwie do agentów generatywnej sztucznej inteligencji, pozwala w pewnym stopniu zawęzić zakres przetwarzania i zdefiniować ścieżki.
Chociaż agenci AI mogą osiągać podobne wyniki za pomocą promptów, oprogramowanie z wbudowaną generatywną sztuczną inteligencją może łatwiej zwiększyć dokładność, łącząc zarówno programy, jak i prompty.
Jeśli taki rozwój rozwojowy może być praktykowany, drugi projekt wykaże poprawę zarówno jakości, jak i kosztów w porównaniu z pierwszym. Ponadto, z każdym kolejnym projektem — trzecim, czwartym i tak dalej — ulepszenia będą się kumulować.
To całkowicie różni się od samego używania generatywnej sztucznej inteligencji do tworzenia oprogramowania. Z biegiem czasu pojawi się znacząca luka między zespołami, które po prostu opanowują narzędzia generatywnej sztucznej inteligencji, a zespołami, które praktykują rozwój rozwojowy.
Testowanie sterowane refaktoryzacją
Istnieje koncepcja o nazwie Test-Driven Development (TDD), gdzie testy są projektowane najpierw na podstawie specyfikacji, a następnie oprogramowanie jest rozwijane w taki sposób, aby te testy przechodziło.
Początkowo również myślałem, że wykorzystując generatywną AI, łatwo byłoby tworzyć programy testowe do zautomatyzowanego testowania, co uczyniłoby TDD wykonalnym.
Jednakże, gdy zacząłem praktykować rozwój rozwojowy, doszedłem do wniosku, że myślenie o testach przed ich implementacją nie zawsze jest najbardziej odpowiednim podejściem.
Zwłaszcza w przypadku oprogramowania, takiego jak aplikacje internetowe, które obejmują subiektywne aspekty, takie jak użyteczność i projekt wizualny, z którymi bezpośrednio się wchodzi w interakcję, zdałem sobie sprawę, że faktyczne uruchomienie i interakcja z oprogramowaniem ma pierwszeństwo przed szczegółowymi testami.
Dzieje się tak, ponieważ jeśli po interakcji z oprogramowaniem występuje znaczne niezadowolenie na poziomie UI/UX, istnieje możliwość chęci zmiany fundamentalnych części, takich jak framework, podstawowa architektura, model danych czy przypadki użycia.
W moim obecnym osobistym projekcie tworzenia oprogramowania zauważyłem problemy z elastycznością funkcji i wydajnością, co skończyło się wymianą dwóch frameworków na inne.
Musiałem również całkowicie przeregulować przetwarzanie w niektórych obszarach z powodu nieefektywnego wykorzystania pamięci.
Właśnie w tych momentach refaktoryzacji testowanie po raz pierwszy staje się świadomym rozważeniem.
Jeśli jest to wczesny etap rozwoju, lub jeśli funkcje i specyfikacje i tak ulegną znaczącym zmianom, testy mogą być niepotrzebne.
Jednakże, jeśli rozwój jest już dość zaawansowany i jest wiele elementów do sprawdzenia, testy będą konieczne, aby potwierdzić, że refaktoryzacja nie wprowadziła wad funkcjonalnych ani pominięć.
Dlatego podejście polegające na tworzeniu programów testowych, gdy rozwój osiągnął pewien poziom, a refaktoryzacja staje się konieczna, nie jest złym pomysłem.
W tym momencie kluczem jest nie tworzenie testów dla całego kodu, ale skupienie się na testowaniu dojrzałych części, które prawdopodobnie nie ulegną dużym zmianom w przyszłości, pozostawiając płynne części bez zautomatyzowanych testów.
Można to nazwać Testowaniem Sterowanym Refaktoryzacją.
Podsumowanie
Generatywna sztuczna inteligencja dramatycznie zmienia rozwój oprogramowania.
W poprzednim artykule pisałem o znaczeniu dążenia do bycia „Inżynierem Wielokierunkowym”, zdolnym do tworzenia systemów łączących różne domeny, infrastruktury i środowiska wykonawcze, wykraczając poza tradycyjnego inżyniera full-stack.
Napisałem również artykuł sugerujący, że wchodzimy w erę „Rozwoju Zorientowanego na Doświadczenie i Zachowanie”, gdzie nacisk kładzie się nie na dopasowanie specyfikacji do implementacji, ale na poprawę doświadczenia użytkownika poprzez zachowanie oprogramowania.
Rozwój rozwojowy i testowanie sterowane refaktoryzacją to właśnie to, co prowadzi do tych nowych horyzontów w rozwoju oprogramowania.