Jaki jest wasz sposób programowania z użyciem AI?

Jaki jest wasz sposób programowania z użyciem AI?
piotrpo
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3321
0

Taki use case, zabawa czymś tam nowym, niszowym. Wyboldowane punkty, w których posiłkowałem się AI

  • Utworzyłem z ręki projekt, zbudowałem, sprawdziłem czy aplikacja działa na wszystkich platformach, czy chodzi serwer/
  • Dopisałem jakieś tam potrzebne endpointy na serwerze, wyklepałem z ręki DTOs
  • Podpiąłem bazę runtime (H2)
  • Wygenerowałem klasę repozytorium (Junie)
  • Jako, że całość serwera, to prosty CRUD, poprosiłem o wygenerowanie danych testowych na podstawie DTO
  • Sprawdziłem enpointy
  • Zrobiłem prosty UI
  • Próbowałem podpiąć generowanie OpenAPI, ale ostatecznie i ja i AI ugrzęźliśmy w bałaganie różnych bibliotek o niezgodnych wersjach, więc dałem sobie spokój, bo zawsze coś nie działało.
  • Na podstawie kontrolera po stronie serwera wygenerowałem klienta http po stronie UI
  • Skonsumowałem endpointa, wypełniłem danymi z serwera UI, trochę się pobawiłem z poukładaniem tego (kolorki, layout itd)
  • Zrobiłem kolejny widok UI, do wyświetlania detali
  • Poprosiłem AI, żeby dorobiło nawigację (master/detail), zadziałało.
  • Pozakładałem na Google Cloud potrzebne usługi, storage na pliki statyczne, cloud run, cloud build
  • Wygenerowałem implementację repozytorium pod datastore (takie mongo)
  • Wygenerowałem docker file dla serwera
  • Odpaliłem z ręki
  • Przygotowałem pipeline na cloud build. Budowanie klienta, serwera, pakowanie do dockera, deployment odpowiednio do bucket'a i repozytorium dockerowego, z repozytorium update na cloud run
  • Zabrałem się za "upiększanie" UI, nie moja działka kompletnie, ale jakieś gotowe narzędzia do material themes pomogły
  • Gemini poprosiłem o wygenerowanie jakiegoś logo aplikacji o podanym temacie, chwila mielenia i nano banana zrobił
  • Wrzuciłem poprawki, commit, wszsytko poszło.
  • Coś mnie podkusiło, żeby zrobić upgrade bibliotek, nawet udany, tylko pipelina się wywaliła, bo "coś"
  • Poprosiłem Junie, żeby zrobiła fix pipeliny i konkretne kroki przeprowadziła w ten sa sposób jak mam to skonfigurowane lokalnie. Podmieniła obrazy na takie z pasującą wersją JDK i gradle'a, zadziałało
  • Zauważyłem brak w postaci braku obsługi deeplinków do detali, poprosiłem Junie o dorobienie, zrobiła, parę razy musiałem jej zwrócić uwagę, że czegoś brakuje, coś nie działa, w jakimś tam wypadku wyskakuje błąd - poprawiła.
  • Doczytałem, że jest nowa wersja biblioteki obsługującej deep linking, wywaliłem to, co Junie zrobiła w pocie czoła i zastąpiłem wywołaniem metody, która się pojawiła.

Job done.

Może nie jest to jakieś wielkie coś, chciałem głównie pobawić się tymi rozwiązaniami w chmurze + z rozpędu poszło przygotowanie serwra na Ktor, aplikacji w Compose. W sumie kilka wieczorów pracy, pomijalne koszty chmury (free tier), coś koło $5 na tokeny Junie. Miałem kiedyś trochę współnego z GCP, Kotlina znam, Ktor i Compose to były dla mnie nowości.
Starałem się zachować kontrolę nad tym co jest robione i prowadzić juniora za rączkę. Na koniec przygotowałem jeszcze trochę contentu do aplikacji (jakies tam quizy), tym razem z Gemini (bardzo dobrze sobie radzi z poleceniem typu "przygotuj quiz na 20 pytań wielokrotnego wyboru, na temat x, według załączonego wzorca".

cerrato
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 9032
0

Czemu wiele rzeczy jest bez pogrubienia?
Zwłaszcza takie trywialne rzeczy jak Sprawdziłem enpointy, Zrobiłem prosty UI - czemu nie spróbowałeś tego zlecić EjAjowi? Czy próbowałeś, ale poległ? Trochę nie rozumiem samego sposobu prowadzenia testu.

Ja niedawno zrobiłem eksperyment - znajoma potrzebowała dla dziecka coś do nauki słówek. Zrobiłem jej całkowicie z AI prostą aplikację na komórkę - pisana w Android Studio, Flutter i Gemini (to wbudowane w AS).

Sam proces trwał jakieś 30 minut (najwięcej czasu straciłem na przepisywanie słówek z kartki do kompa). Osobiście nie napisałem ani linijki kodu - wszystko generował AI.

Zgadzam się z tym, co napisał @piotrpo - żeby coś z tego wyszło sensownego, to trzeba prowadzić za rączkę. Dlatego moje polecenie nie brzmiało "napisz apkę do nauki słówek", tylko po kolei:

  • stwórz ekran gdzie masz jakieś pytanie a pod nim 4 przyciski z odpowiedziami
  • teraz wypełnij pytanie wylosowanym z listy słówkiem
  • teraz wylosuj z listy słówek 4 odpowiedzi, ale żeby tylko jedna z nich była poprawna i umieść je na klawiszach w losowej kolejności
  • po wybraniu odpowiedzi - niech 3 klawisze z błędnymi odpowiedziami znikną, a ten z poprawną odpowiedzią podświetli się na zielono (jeśli odpowiedź była poprawna) albo na czerwono (jeśli się pomylił)
  • ponowne wciśnięcie klawisza przechodzi do kolejnego pytania
  • dodaj licznik złych i dobrych odpowiedzi

Ogólnie byłem pod wrażeniem - dawałem instrukcje dokładne co chce osiągnąć to dostawałem dokładnie to, o co prosiłem.
Przy czym - jest to prosta/trywialna apka, praktycznie żadnej logiki. Przy bardziej rozbudowanych tematach (które sam piszę i czasem próbuję skorzystać z pomocy AI) często dzieją się dziwne rzeczy (o nich za chwilę).

Pozytywnie byłem zaskoczony takimi rzeczami, które dla człowieka są dość oczywiste, ale AI sam wpadł chociażby na to, ze skoro 3 przyciski były ukryte po udzieleniu odpowiedzi, to trzeba je pokazać ponownie przy kolejnym pytaniu. Dla mnie to oczywiste, ale AI sam to zrozumiał, nie musiałem mu dawać żadnych instrukcji w stylu a teraz oddaj te 3 brakujące klawisze. Były jeszcze z 2 takie motywy (nie pamiętam o co chodziło, jeden związany z licznikiem dobrych i złych odpowiedzi). I żeby była jasność - nie jest to jakieś wybitne osiągnięcie, ale jednak świadczy o tym, że Ai patrzy troszkę szerzej i rozumie, co robi i co ma osiągnąć - więc sam stwierdził, że quiz z tylko jedną odpowiedzią jest mało przydatny ;)

Niestety, w bardziej skomplikowanych projektach często traci kontekst. Mimo, że Gemini w Android Studio ma dostęp do mojego kodu, zdarzają się sytuacje. w której AI sugeruje jakieś zmiany/poprawki w paru miejscach, ale inne przeoczy i całość się nawet nie chce skompilować - bo np. zmienia strukturę klasy albo grzebie w parametrach funkcji, ale niektóre jej wywołania zapomina zaktualizować. Czasami się też zdarzają błędy składniowe, albo odwoływanie się do nieistniejących właściwości.

Ale najgorsze jest dopowiadanie sobie. Przykład sprzed kilku dni: miałem w silniku apki klasę abstrakcyjną, z której potem dziedziczą różne "udawane enumy" (Type-Safe Enum Pattern) po stronie apki. Część z tych dziedziczeń była robiona w silniku, część po stronie logiki aplikacji (bo niektóre parametry/wartości są osadzone na sztywno w kodzie silnika, część definiuje sobie apka zgodnie z własnymi potrzebami). Zasugerował jakieś zmiany i potem miał te wartości jakoś zainicjalizować. O ile w przypadku tych rzeczy, które były robione po stronie silnika poszło OK, ale w przypadku logiki zapewnianej przez aplikację - zaczął sobie dopowiadać. Było to na zasadzie że skoro mam enumZekranami.ekranPierwszy, potem .ekranDrugi, .ekran.Trzeci i tak dalej, to zrobił analogię i do enumów odpowiadających za kolorystykę wstawił te same wartości i wyszły idiotyzmy w stylu enumZkolorami.ekranPierwszy itp. 😄

O czym to świadczy? Moim zdaniem o tym, że przy bardziej skomplikowanych projektach się gubi i głupieje, traci kontekst. Struktura projektu nie była bardzo skomplikowana - w osobnym katalogu mam silnik, obok niego logikę aplikacji oraz trzeci folder z konfiguracjami. Mimo tego - nie załapał powiązań między nimi. Jak zwróciłem uwagę, że to jest źle to pomyślał trochę i za 2-3 razem zrobił dobrze. Ale jakbym sam tego nie zauważył i nie naprowadził to by wyszły dziwne rzeczy - nie pamiętam teraz, czy to się w ogóle nie kompilowało, czy niby działało, ale w jakiś losowy sposób - bo bazowało na jakichś przypadkowych wartościach.

I jeszcze jedna rzecz, którą też parę razy spotkałem - takie cykliczne sugerowanie w kółko tych samych odpowiedzi. Już wyjaśniam:

  • pytam jak zrobić coś. Dostaję odpowiedź, że w sposób A
  • odpalam A, ale widzę, że coś nie działa, albo działa ale niezgodnie z tym, czego oczekuję
  • opisuję problem i proszę o jego rozwiązanie
  • dostaję sposób B, który częściowo rozwiązuje zgłoszony problem, ale przy okazji coś innego się wysypuje
  • zgłaszam swoje zastrzeżenia do sposobu B
  • AI nanosi poprawki, teraz mam sposób C
  • sposób C działa zupełnie inaczej/się nie kompiluje, bo Ai zaczyna sobie wymyślać rzeczy, których nie ma
  • piszę o tym do AI, który przeprasza i obiecuje poprawę. Chwilę myśli i przedstawia mi rozwiązanie
  • tym rozwiązaniem jest ponownie sposób A
  • opisuję dlaczego to jest zła opcja - AI myśli, przyznaje mi racje i przechodzimy do B... i tak w kółko.

W ogóle jakby nie czaił, że identyczna opcja już była proponowana i okazała się błędna. Skupia się na usunięciu konkretnego zgłoszonego problemu/dodaniu czegoś, czego brakuje i nie widzi kontekstu ani nie pamięta, ze chwilę temu wprowadzenie określonej zmiany, wprawdzie naprawiło zgłoszony problem, ale spowodowało inne komplikacje.

SZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 220
0

Sprawdziłem enpointy, Zrobiłem prosty UI
Tutaj AI sprawdza się znakomicie. Ale... przy podstawowych komponentach. Wrzucasz mu zrzut ekranu i on wie jaki komponent i czego użyć. Genialne to jest.
Ale... wiadomo szczegóły. Im bardziej skomplikowane, tym bardziej nie daje sobie rady.
U mnie np drag & dropa nie potrafił ogarnać, jakieś 5-6h iteracji z Claucde Opus 4.5 i nic z tego nie wyszło. Musiałem sam to przepisać :( (miał korzystać z gotowej biblioteki która ma bardzo dobrą dokumentacje)

FA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: warszawa
  • Postów: 316
0

AI to dobre narzedzie jezeli kratujesz je jako coś co przeczytała cała dokumentacje(co dla nie których technologii jest prawda). Potrafi wyszkać informacje nie znajdywalne w google, lub podac jaka magiczna flage trzeba ustawic by frame work x robił y. Do tego jest super.

Ale AI nie potrafi myslec, problemu algorytmicznych nie rozwiarze. Kazde AI halucynuje, tylko teraz to lepiej chowaja, wiec jak trafisz na limit umiejetnosci modelu, to bedzie próbować Cie oszukać, lub pisac powieszchowne odpowiedzi.

Odpowiedzi AI sa dlugie i skomplikowane. I pisze eseje nie wiadomo oczym, przez co w dluzszych czatak koncza mu sie limity, i halucynuje sam do siebie, a nie do Twoje wejscia.

Jak ma pisac kod, to halucynuje do średniej w danej dziedzinie. Wiec jak nie daj boze, chcesz uzyc chata, by napisał dla Ciebie coś co jako student pisałes 20min... Dostaniesz zmienne a,b,c i inne kwiatki.

I jeszcze raz AI nie potrafi myslec. Wieksze kawałki kodu cierpia na taka wade, ze posiadaja jakies proste lub sprytne rozwiazanie pewnych problemów, ale AI jest tego nie swiadome czuje ze jest to potrzebne, wiec wrzuca te bloki, i zamiast prostego kodu, masz kod gdzie sytuacje brzegowe sa obslugiwane przez serie slide efektow.

tl;dr;
Wiec ja uzywam, tylko jako weryfikator, czy na wysokim poziomie nie jest pomysł, starsznie zly/sa inne rozwiazania. Oraz jako nisko poziowo jako google na sterydach, lub jako edytor teskjtu, np. patrzac na DTO, wygeneruj X/Y. Do skomplikowanych zadan sie nie nadaje.

piotrpo
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3321
0

Czemu wiele rzeczy jest bez pogrubienia?
Zwłaszcza takie trywialne rzeczy jak Sprawdziłem enpointy, Zrobiłem prosty UI - czemu nie spróbowałeś tego zlecić EjAjowi? Czy próbowałeś, ale poległ? Trochę nie rozumiem samego sposobu prowadzenia testu.

Ja nie robiłem tego jako testu AI. Włączam te narzędzia do swojego sposobu pracy, nie zawsze o nich pomyślę. No i mam wrażenie, że rzeczy trywialne zrobię szybciej z ręki, np. wpisanie GET localhost:8080/dupa
UI robiłem z ręki, bo to kompletnie nowe dla mnie narzędzie i chciałem się zwyczajnie zrozumieć o co biega z całą tą "deklaratywnością"

SL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1036
0

Ciężko powiedzieć. Moje doświadczenie jest takie, że trzeba się ciągle uczyć, bo generalnie są dwa równoloegłe nurty:

  • wszystko staje się coraz lepsze i tańsze i to co nie było możliwe wczoraj może być do zrobienia dzisiaj
  • usługi stają się coraz droższe i głupsze. Następuje albo enshitification albo urealnienie pricingu. Ja sam np. odbiłem się od Junie, bo podnieśli pricing jakieś 10x. Na tą chwilę chyba będę ewakuował się z Cloud Code, bo dzisiejszy drogi model opus zwraca mi gorszy szit niż tańszy sonnet te 2 miesiące temu

Niestety jedno wyklucza się z drugim i często się połapać co jest najlepsze

Na tą chwilę używam głównie jakiegoś darmowego AI w przeglądarce do pytań i riserczu. Do kodowania praktycznie sam Cloude Code, który jako tako działa jak zadania są proste do weryfikacji.

marian pazdzioch
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 792
0

Ja praktycznie nie używam AI do kodzenia bo prawie nie koduję.

Ale nurtuje mnie

Job done.

Co właściwie było twoim "Job" że narobiłeś się jak dziki wąż i uznałeś że "done".

Bo mi to brzmi jak zestaw randomowych rzeczy które niczemu na końcu nie służą. Chyba że chodziło o coś na zasadzie że z rozrzuconych klocków ułożyłeś słonia, to wtedy spoko udało się. Tylko po co?

piotrpo
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3321
0

@marian pazdzioch Nudziłem się, tak w skrócie. Cel był taki, żeby przetestować swoje umiejętności, tworząc prostą aplikację, głównie po to, żeby mieć do posadzić na słonia, czyli to całe CI/CD, konteneryzację, networking itd. Zdaję sobie sprawę, że ta funkcjonalność na tych narzędziach może wyglądać i pewnie trochę jest takim enterprise fizz-buzz, ale też nie do końca.
Udało mi się ogarnąć następujące rzeczy:
Ktor, znacznie przyjemniejsze niż Springboot i tańsze w sensie wagi rozwiązania
Kotlin Compose - tutaj brakowało mi czegoś wygodnego, do tworzenia wewnętrznych firmowych forntendów. Nie lubię typowego frontu, cholera mnie bierze jak widzę setki pakiecików, języki bez typowania, CSSy itd. Przy okazji ogarnia to mobile + desktop. Przyzwoitej technologii desktopowej też mi brakowało w skillach.
CI/CD - tutaj w sumie niewiele było do ogarniania, ale jest działa, a w sumie była to może godzina pracy.
Web storage - Sensowny hosting plików statycznych, w razie potrzeby ma wbudowany CDN
Cloud Run - bardzo fajne narzędzie do odpalania właściwie dowolnego backendu. Tanio i bez brnięcia przez helmy, kubernetesy, stawiania własnych klastrów.
Jakieś tam dodatkowe usługi chmurowe.
Networking - czyli wszystkie te pierdoły w postaci DNS, sieci, IP itp.

superdurszlak
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 2004
4

Cały mój zespół używa LLMów mniej więcej tak samo. Przy czym to jest zespół od infrastruktury, więc pracujemy głównie z IaC, skryptami i szablonami CI/CD.

  • Agenty odpadają, nie ma na to zezwolenia "góry", jest jakiś pilotaż, ale to nie jest GA.
  • Jest narzucony konkretny, hostowany LLM, nic publicznego - niby sensownie, tylko jest chyba okrojony pod kątem liczby parametrów, sporo halucynuje.
  • Jest jakiś plugin do IDE który się z tym integruje - generalnie da się promptować i dostać jakiś diff, który czasami da się nawet zaaplikować. Nie zawsze, czasem diff nie działa i trzeba go skopiować, a czasem (szczególnie przy przetwarzaniu Markdown) fortmatter się gubi i fragmenty kodu zlewają się z formatowaniem wyniku.
  • Nie ma za wiele kontekstu, RAGa, z kontekstu masz zasadniczo projekt w IDE, ewentualnie bieżący plik lub terminal.

Z racji tych ograniczeń, jedyne sensowne użycie to

  • Trochę szybsze googlowanie, z tym że z uwagi na częste halucynacje i tak sporo czasu tracisz na weryfikację.
  • Czasem udaje się wygenerować nieco boilerplate, ale raczej krótkie fragmenty, krok po kroku, pojedyncze zmiany naraz, a i tak nieraz trzeba rozbijać na bardzo podstawowe kroki i szybciej byłoby zapewne napisać to samemu.
  • Czasami uda się wygenerować dokumentację projektową, pod warunkiem, że się poda już dobrze sformatowany i opisany fragment jako referencyjny - inaczej sadzi kocopoły i dziwnie formatuje.
  • Zamiana tekstu w pliku tam, gdzie pisanie z palca albo wymyślanie regexa za długo by zajęło.
  • Syntezowanie jakichś danych i konfiguracji, np. "wygeneruj tfvars dla regionu B bazując na konfiguracji regionu A".

Po prawdzie, to prywatnie kombinowałem z agentami i self-hosted i tak średnio jestem zadowolony. Self-hosted modele są zbyt ograniczone, a w dodatku ciągną mnóstwo prądu (GPU samo z siebie zjada mi wtedy ~350W) i nie działają najszybciej. Z kolei płatne modele do integracji to jednak droga zabawa jak na prywatny użytek, Szczególnie, jeśli po spaleniu iluś tokenów odkrywasz, że modelowi peron odjechał i musisz po nim poprawiać.

CZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2562
0

Głównie używam do researchu i dokumentacji. Czasem proszę o implementacje jakichś powtarzalnym metod. Wszystko co bazuje na firmowym API jest dotykane tylko przeze mnie.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.