1. Rust
Pewnego lipcowego niedzielnego poranka wstałem z bardzo silnym przeświadczeniem: muszę nauczyć się Rusta! (taki mocno hypowany obecnie języka programowania). Odpaliłem komórkę, znalazłem tutorial (samouczek) i zacząłem czytać. Po 10 minutach mi przeszło. Nie chcę iść tą drogą. Ile to już razy się powtarzało: książki, artykuły, dokumentacje, przepisywanie prostych programików i analizowanie wyniku na funkcjach typu "oblicz n-ty element ciągu Fibonacciego". Nieee. Za stary już jestem. Nie chce mi się poświęcać kilku miesięcy na rozgryzanie kolejnego narzędzia.
Postanowiłem tym razem podejść inaczej: wypróbuję AI. Mam spory kombajn w postaci systemu napisanego w Scali i Pythonie. Poproszę AI o przekładanie mojego kodu na Rusta, zaczynając od podstawowych komponentów. Są to proste biblioteki narzędziowe, nie mające wielu zależności, więc łatwo będzie przepisywać pliki 1 do 1 i "iść w górę" po bardziej złożone.
Praca szła bardzo sprawnie. Do czasu, kiedy dotarłem do mojej "matematyki typów". Scala jest językiem funkcyjnym, dzięki czemu nie musimy skupiać się na myśleniu jak konkretnie ma działać dany kod, tylko jak ma zostać zdefiniowany, żeby realizował daną funkcjonalność. W teorii możemy matematycznie zdefiniować zależności między typami danych, a potem całość się samoczynnie składa w działający program (w praktyce i tak trzeba myśleć o złożoności obliczeniowej, ale to nie temat na ten wpis).
Rust jest z kolei nowoczesnym językiem, który łączy szybkość z elementami funkcyjnymi. Nie będę Was zanudzał szczegółami. Dodam tylko jedno: w Rust udało się zrealizować automatyczne zarządzanie pamięcią na poziomie kompilacji kodu. Dzięki temu aplikacje pisane w Rust są bardzo szybkie, ponieważ nie musi towarzyszyć im system sprzątania pamięci, który wpływa na ograniczoną wydajność aplikacji pisanych w prawie wszystkich obecnie używanych językach (Java, Python, C#, także Scala).
Ta wielka zaleta języka jest też niestety jego wadą: musiałem uprościć złożone zależności mojego systemu ze Scali, żeby dostosować je do filozofii Rusta. Dzięki pracy z AI praca szła niezwykle efektywnie. Po prostu pytałem o wszystko: jakbym miał pod bokiem seniora programistę od każdego języka programowania, architekta systemów, menadżera projektów IT i każdej innej profesji. Czujecie to? Do swojej dyspozycji miałem wysoko opłacanych specjalistów, gotowych odpowiadać na moje pytania 24 godziny na dobę, zawsze chętnych do pracy i to wszystko za darmo!
AI nie tworzył za mnie kodu - często się mylił, podsuwał najszybsze działające rozwiązanie, które z czasem okazywało się nieelastyczne. Ale ja wtedy pytałem: jak to rozwiążemy? Sugerowałem swoje pomysły bazujące na doświadczeniu z innymi językami. I dochodziliśmy do optymalnych rozwiązań. Postępy były ekspresowe, w 2 tygodnie miałem przepisane wszystkie najważniejsze moduły. Co więcej stałem się biegłym programistą Rusta. Nie mogłem oczywiście analizować kodu w głowie, żeby napisać coś od zera, musiałem prosić AI o bazowy kod, ale potem sam go generalizowałem i dalej prosiłem AI o używanie moich funkcji, żeby pisać dalsze elementy. A jak nie wiedziałem jak coś zrobić - to pisałem w Scali i prosiłem o translację na Rusta :)
2. Mikroserwisy
W drugim kroku postanowiłem wykorzystać AI do pomocy w przepisaniu mojego systemu na mikroserwisy. Żeby wygenerować swoje indeksy, raporty, muszę odpalać to ręcznie ze środowiska produkcyjnego (ponieważ system jest w ciągłej produkcji i nie opłaca mi się tworzyć aplikacji). Fajnie by jednak było móc zarządzać nim przez prostą stronkę, wysyłając proste komunikaty: zsynchronizuj mi spółkę X, stwórz dla niej raport, stwórz indeks Y itd.
Od lat przymierzałem się do tego. Z AI postawienie serwera na Rust i pierwszych klientów (Rust i Python) zajęło mi dosłownie 1 dzień. W kolejnych powstała apka (HTML + CSS + JavaScript) do komunikacji z serwerem, żeby zarządzać mikroserwisami. Byłem w takim ciągu, że napisałem od razu system zarządzania użytkownikami i serwis bazodanowy. Normalnie nawet nie brałbym się za to, zbyt wiele niewiadomych. Nie mam pojęcia o czym nie mam pojęcia.
Z AI ten problem zniknął: dostawałem gotowe rozwiązania na tacy. Potem doklejałem kolejne, aż powstawała masa krytyczna kodu, po której musiałem przerabiać kod (fachowo nazywa się to refactoringiem). Oczywiście w tym procesie pomagał mi "senior inżynier oprogramowania" AI, z którym konsultowałem nazewnictwo modułów, funkcji, hierarchię modułów.
Zrobiłem w tydzień właściwie wszystko co miałem w planach + kilka rzeczy, których nawet nie marzyłem zrobić. I wtedy...
3. System do Analizy Technicznej "Podtwórca Charting System"
I wtedy zapytałem AI: jakiej biblioteki użyć do napisania własnego systemu do analizy wykresów. Zawsze miałem z tym problem: tworzę masę wykresów i wskaźników, ale nie mogę ich analizować na wykresie. Mogę tylko wyświetlić w Google Charts i programowo nanieść wskaźniki. Znacie te wykresy, bo publikuję je często na blogu.
AI zasugerował kilka rozwiązań, w tym open source'ową bibliotekę od Trading View: Lightweight Charts. Byłem w szoku: rozwiązanie zawsze było na wyciągnięcie ręki. Biblioteka nie jest tym, co znacie z pełnowartościowej aplikacji TV. Lightweight Charts (dalej będę pisał LC) oferuje bardzo podstawowy interfejs wyświetlenia wykresu, konfiguracji oś czas/cena, dodatkowe panele pod wskaźniki. Wszystko inne musisz napisać sobie sam: rysowanie linii, wskaźniki, interakcja inna niż przesuwanie obszaru wykresu.
I tutaj dobrnąłem do granic AI. O ile w przypadku HTML, CSS i JS oferuje kompleksową pomoc, ponieważ są to technologie powszechne, z niezliczonymi źródłami do nauki, tak w przypadku pracy z LC wielokrotnie prowadził mnie w maliny, ponieważ uczył się na nielicznych, często nieaktualnych przykładach. Ale i z tym sobie poradziłem, ponieważ traktowałem go jak "senior testera" - testowałem koncepcje i przerzucałem do AI logi z błędami oraz kawałkami kodu. Odpowiedzi były błyskawiczne i zazwyczaj bardzo trafne. Czasami upierał się przy błędnym rozwiązaniu i nie dało się przejść dalej, wtedy już sam ogarniałem.
4. Podsumowanie
Analiza git log (dziennik projektu):
2025.07.20 - pierwszy commit, przetłumaczenie kilku pierwszych modułów na Rust
2025.08.12 - koniec przepisywania systemu na Rust (bez większości raportów). Pierwszy commit "provider service start", zaczynam pisanie mikroserwisów.
2025.08.14 - zaczynam równolegle prace nad GUI (graficzna aplikacja do zarządzania serwerem)Na dowód wykres WIG z naniesionym wskaźnikiem "Spółki powyżej średniej 200-dniowej":
Jak widać w półtora miesiąca z prawie tygodniową przerwą w trakcie zrealizowałem projekty, do których nie mogłem zabrać się od lat. Na koniec poprosiłem go o wygenerowanie ikonek do składowych budowanego systemu (trochę musiałem poprawić loga w Gimpie):
Ile w tym pomocy AI?
Na pewno nie zrobiłbym tego wszystkiego bez pomocy asystentów. Jest to genialne narzędzie, żeby rozpocząć pracę w domenie, w której masz niewielką lub żadną wiedzę. Od razu dostajesz pierwsze działające rozwiązanie, na którym możesz budować kolejne elementy.
Im bardziej mój system złożony, tym mniej korzystam z pomocy AI. Ostatnie kilka dni upłynęły głównie na refaktoringu, generalizowaniu rozwiązań, nieustannym szukaniu optymalnej struktury projektu i usuwaniu kodu, aż zostanie tylko to, co niezbędne. AI w tym już nie pomaga. Coraz częściej korzystam z niego jak z juniora: zrób to tak jak tutaj, sprawdź elementy redundantne, konflikty itd.
Gdybym nie był doświadczonym twórcą systemów informatycznych, nie wiedziałbym jak to kontrolować. AI nie rozumie struktury projektu, mnoży dublujące się rozwiązania. Jak tworzy drobny podsystem, ten ma swoje stany, które konfliktują się z innymi. Kiedy poprosiłem AI o stworzenie FSM dla pierwszej wersji, kiedy jeszcze system nie był złożony (finite state machine - sposób organizacji pozwalający kontrolować przepływy poprzez stan, w jakim znajduje się system), stworzył kompletnie bezsensowne zależności. Musiałem go przystopować i zaimplementować to samemu. A potem rozbijać system na drobne, "atomowe" funkcje w wyspecjalizowanych bibliotekach, nim ponownie korzystałem z pomocy. Nowe fragmenty pisane przez AI przechodzą już przez mocne sito mojego systemu.
Gdybym nie programował od ćwierć wieku, nie pisał swoich języków, nie wciągnąłbym Rusta w 2 tygodnie. Ale: gdybym miał zaczynać od tutoriali i książek, potrzebowałbym miesięcy na opanowanie języka i wielokrotnie utknął na rzeczach, które w każdym języku działają, a Rust ich zabrania.
AI nie jest jeszcze w stanie zastąpić moich umiejętności. Ile to potrwa? Rok, dwa, dziesięć? Prędzej czy później wciągnie wszystkie programy świata, pozna wszystkie znane wzorce, wygeneruje swoje. Póki co sięgam do szuflady pomysłów, planów na "może kiedyś" i realizuję je z AI.
Najważniejsze że napisałeś w kilku miejscach już jesteś doświadczonym informatykiem programistą systemów. Bo nie sądzę żeby jakiś laik nawet przy pomocy AI coś takiego ogarnął.
OdpowiedzUsuńAkurat mam ciekawe doświadczenie jestem na wakacjach i jedna z osób jest niezbyt rozgarnięta powiedziałbym niezbyt wykształcona a próbuje opracowywać trasy i plan dnia za pomocą ChatGPT tylko problem taki że ten czat nie kuma map, takich normalnych zdrowych ma turystycznych gdzie jest zaznaczone skąd wyjść jak iść gdzie można zrobić pętlę skrócić trasę i tak dalej :-) Także ja jestem starej daty i korzystam z mapy ...