Rozwój dużych modeli językowych (LLM) otwiera przed programistami ogromne możliwości, ale jednocześnie ujawnia zastanowienia w oprogramowaniu: nieuporządkowany kod, trudności w bezpiecznych zmianach i często brak przejrzystości co do tego, co naprawdę dzieje się "pod maską". Naukowcy z Massachusetts Institute of Technology (MIT), pracujący w laboratorium Computer Science and Artificial Intelligence Laboratory (CSAIL), opracowali nowatorskie podejście, które może zrewolucjonizować sposób, w jaki tworzymy oprogramowanie. Ich koncepcja opiera się na budowie systemów w sposób modułowy, co zwiększa czytelność i łatwość zrozumienia kodu.
Koncepcje i synchronizacje: fundament nowego podejścia
Tradycyjne oprogramowanie często cierpi z powodu "fragmentacji funkcji", co oznacza, że pojedyncza funkcja jest rozproszona po wielu serwisach, co utrudnia jej zrozumienie i modyfikowanie. Na przykład dodanie przycisku "udostępnij" do platformy społecznościowej, takiej jak Instagram, nie istnieje w jednym serwisie, ale jest rozproszone pomiędzy kodem odpowiedzialnym za postowanie, powiadomienia, autoryzację użytkowników i wiele innych. Wszystkie te elementy muszą być ze sobą ściśle zsynchronizowane, a każda zmiana może prowadzić do nieprzewidzianych skutków ubocznych.
Naukowcy z MIT zaproponowali rozwiązanie oparte na dwóch kluczowych elementach: "koncepcjach" i "synchronizacjach". Koncepcja to samodzielny, spójny element funkcjonalności, taki jak udostępnianie, lajkowanie lub obserwowanie. Określa ona stan i akcje, które może wykonywać. Synchronizacje z kolei opisują na wyższym poziomie, jak te koncepcje współdziałają ze sobą. Zamiast pisać skomplikowany kod integracyjny, programiści mogą używać specjalnego, małego języka (DSL) do precyzyjnego określania tych połączeń.
Czytelność i przewidywalność: korzyści z nowego podejścia
DSL pozwala na jasne i proste definiowanie reguł: akcja w jednej koncepcji może wywołać akcję w innej, co pozwala na synchronizację stanów między różnymi elementami systemu. "Wyobraźcie sobie koncepcje jako całkowicie czyste i niezależne moduły, a synchronizacje jako kontrakty – one jasno określają, jak te koncepcje powinny ze sobą współdziałać," wyjaśniają naukowcy. Ten sposób działania sprawia, że system jest zarówno łatwiejszy do zrozumienia dla ludzi, jak i do wygenerowania przez narzędzia, takie jak LLM.
Opracowany język, mimo swojej prostoty, pozwala na wyrażanie złożonych zależności i interakcji w systemie. Pozwala to na weryfikację, analizę i – co szczególnie istotne – generowanie kodu przez modele sztucznej inteligencji. To z kolei otwiera drogę do bezpieczniejszego i bardziej zautomatyzowanego tworzenia oprogramowania, w którym asystenci AI mogą proponować nowe funkcje, unikając ukrytych skutków ubocznych.
Studia przypadków i realne zastosowania
W studium przypadku, zespół zastosował koncepcje i synchronizacje do funkcji takich jak lajkowanie, komentowanie i udostępnianie, przypisując każdą z nich do pojedynczej koncepcji. Bez tego podejścia, te funkcje były rozproszone po wielu serwisach, co utrudniało ich lokalizację i testowanie. Dzięki nowemu podejściu, każda funkcja została scentralizowana i stała się bardziej czytelna, a synchronizacje jasno określały, jak koncepcje ze sobą współpracują.
Dodatkowo, synchronizacje pozwalają na wyeliminowanie powtarzających się elementów, takich jak obsługa błędów, formatowanie odpowiedzi czy przechowywanie danych. Zamiast implementować te szczegóły w każdym serwisie, synchronizacje zajmują się nimi raz, zapewniając spójność w całym systemie.
Potencjał w przyszłości: katalogi koncepcji i kulturalna zmiana w programowaniu
Naukowcy dostrzegają również potencjał w bardziej zaawansowanych zastosowaniach. Synchronizacje mogłyby koordynować rozproszone systemy, utrzymując repliki na różnych serwerach w synchronizacji, lub umożliwiać czystą interakcję współdzielonych baz danych. Osłabienie semantyki synchronizacji mogłoby umożliwić ewentualną spójność, przy jednoczesnym zachowaniu przejrzystości na poziomie architektonicznym.
W dłuższej perspektywie, zespół przewiduje zmianę w kulturze programowania. Jedną z możliwości jest stworzenie "katalogów koncepcji" – bibliotek dobrze przetestowanych, specjalistycznych koncepcji. Opracowywanie oprogramowania stałoby się wtedy mniej o łączeniu kodu od podstaw, a bardziej o wyborze odpowiednich koncepcji i definiowaniu synchronizacji między nimi. "Koncepcje mogłyby stać się nowym rodzajem języka programowania wysokiego poziomu, a synchronizacje programami napisanymi w tym języku," komentują naukowcy.
Opinie ekspertów i wpływ na przyszłość oprogramowania
Kevin Sullivan, profesor na Uniwersytecie Wirginii, podkreśla, że proponowane podejście odwraca dotychczasowe założenia. "Meng i Jackson nakazują budowanie interaktywnego oprogramowania na abstrakcjach od ludzkiego zrozumienia. Zapewniają podstawę do weryfikacji ich znaczeń, składania ich w systemy i rafinowania ich w programy przyjazne człowiekowi."
Thomas Ball, profesor honorowy na Uniwersytecie Lancaster, dodaje, że opracowane podejście doskonale wpisuje się w potrzeby generowania kodu przy użyciu LLM. "Koncepcje i specyfikacje są dobrze dopasowane do parowania z LLM w celu osiągnięcia intencji projektanta."
Dążenie do transparentności: klucz do zaufanego oprogramowania
Naukowcy z MIT są przekonani, że kluczem do budowania zaufanego oprogramowania jest jego transparentność. "Jeśli oprogramowanie ma stać się bardziej wiarygodne, potrzebujemy sposobów na pisanie go w sposób, który sprawi, że jego intencje będą przejrzyste," podsumowuje Daniel Jackson. "Koncepcje i synchronizacje to jeden krok w kierunku tego celu."