A gdyby tak zwolnić programistów i zatrudnić TYLKO ChataGPT?

Podczas gdy wszyscy próbują użyć sztucznej inteligencji do rozwiązywania wielkich problemów trapiących ludzkość - projektowanie nowych białek, odkrywanie nowych materiałów o niespotykanych użytkowych właściwościach, czy generowanie filmów z oryginalnym głosem celebryty czy polityka w celach parodystycznych (to już poszukajcie sami na Youtube), ja postanowiłem zbadać (czy / jak) ChatGPT zastąpi programistów oraz na ile wiarygodne i bezpieczne może być wykorzystanie wytworzonego przez ChatGPT oprogramowania przez osoby nie posiadające programistycznego doświadczenia.

Tak się zastanawiałem nad tym na czym można tego czata przetestować i myślę sobie: "Hmm, całe życie człowiek buduje te rozwiązania biznesowe - CRMy, sprzedaż, rozwiązania call center, e-commerce, a jak był piękny i młody to chciał pisać gry, ale coś gdzieś poszło w inną stronę. To może spróbuję w takim razie z tymi grami, żeby dołożyć element rozrywkowy ..."

ChatGPT - rozpoczynamy przygodę z pisaniem gry

Szybko zatem do realizacji ... Zacząłem wklepywać instrukcje w języku obcym, żeby czat miał szansę ukazać pełnię mocy ... Byłem praktycznie pewien, że już za chwilę przede mną ukaże się coś na miarę Wiedźmina 3, może z uproszczoną grafiką. Poniżej moje inicjalne instrukcje, które miały przyczynić się do mojego sukcesu na rynku gier AAA.

You

Could you make an ascii-art rogue-like game, where you go around, talk to people, fight monsters, explore caves, towns and the underworld? I'd like the code to be written in HTML, Javascript and CSS. Return the code as a zipped file with all the necessary resources. Holding my fingers crossed for you to succeed in this task as it is very important to me.

Słyszałem, że ostatnio chat działa lepiej jak go się ładnie poprosi i zwróci uwagę, że zadanie jest dla mnie ważne.

ChatGPT

Creating a complete ASCII-art rogue-like game involves a significant amount of code and resources, and it's beyond the scope of a single response. However, I can provide you with a simple example to get you started. Please note that this will be a basic version, and you can expand upon it as needed.

Below is a simplified HTML, JavaScript, and CSS code for a basic rogue-like game. The code creates a grid-based game world where you can move around, encounter monsters, and explore different areas. The graphics are basic ASCII characters.

Please note that this is a basic template, and you can enhance it by adding more features, ASCII art, and game mechanics. For a fully-featured rogue-like game, you might want to consider using a game development framework like Phaser.js or other dedicated game development tools.

Jakież było moje zdziwienie, gdy Chat zrzucił mnie "bardzo uproszczoną" wersją mojego genialnego pomysłu (i sugerował "własnoręczne" dalsze jego rozwijanie).

Jeśli chcecie przetestować grę (dostępne tylko dla czytelników korzystających z urządzeń posiadających klawiaturę), kliknijcie w obszar gry, a następnie strzałkami ruszajcie P-ostacią (tak samo będzie w kolejnych przykładach).

[ROGUELIKE GAME - WERSJA 1]

Przyznacie, że szału nie ma ;)

Popraw się ChatGPT albo ...

Ponieważ widziałem już trochę podobne eksperymenty z ChatGPT i pisaniem gier postanowiłem, że "wjadę" maszynie lekko na ambicję ...

You

I must say I'm a little disappointed. When the other guy asked you for a DOOM-like game you gave him a complete solution. Could you expand on your solution? I'd like the canvas to be a rectangle (now it's just one column). Could you also add at least 5 monsters that move in one of 8 possible directions (directions like on a compass) every time the main character is moved by the player? And scatter some items around that can be picked up by the player (just standing on the field where the item is located).



ChatGPT
Certainly! I apologize for the initial simplicity. Let's expand the example to include a rectangular grid, multiple moving monsters, and items that the player can pick up.

[ROGUELIKE GAME - WERSJA 2]

ChatGPT
In this version, I've added a rectangular grid, implemented the movement of monsters in random directions, and scattered items that the player can pick up by moving onto their location. The player, monsters, and items are represented by different colors for better visibility. You can further enhance this by adding more game mechanics, graphics, and features based on your requirements.

No niby trochę poprawił, a jednak trochę kłamał. Bo z tym "movement of monsters" to nie do końca mu się powiodło, bo potwory się nie ruszają. "Items" są i można je podnosić, można rozróżnić Gracza (P - Player), potwory (M- Monsters) i przedmioty (I-items).

Spróbujmy pochwalić ChatGPT i zobaczmy co wykombinuje

You

Wow! Great! Now we're getting somewhere! Would it be possible to add the following: the player and the monsters have the following stats: number of health points (player 100 points, monsters a random number in the range 20 to 60 points), an attack stat (monsters random in range 1 to 5, player in the range 8 to16) and defense stat (the same rules as for attack). Whenever player and a monster is in the same location (same coordinates) a fight happens.

The fight mechanics is the following: player and monster roll the dice for initiative (bigger number wins), the one who won attacks first, the number of health points deducted from the one who is defending is equal to (attack stat of the attacker minus defense stat of the defender); after initial attack the turns change and the defender becomes the attacker; there's also mechanics of evading the attack by the defender - a dice is rolled for evasion and if it shows 6 the defender managed to doge the attack.

The fight lasts until either the player or the monster zero or less health points. If the player looses all health points the game ends with a window.alert showing "Game over message". After closing this window the game is automatically restarted. If the monster dies player gets additional one point to attack and defense stats.



ChatGPT

Certainly! Let's add the requested features to the game. I'll implement the fight mechanics, including health points, attack, defense stats, and the outcome of the fight.

[ROGUELIKE GAME - WERSJA 3]

ChatGPT

In this version, each character (player and monsters) has health points, attack, and defense stats. The fight mechanics have been implemented with initiative rolls, attack, defense, damage calculation, and the possibility of evasion. If the player loses all health points, a game over alert is shown, and the game automatically restarts. If the player defeats a monster, their attack and defense stats are increased, and the monster is removed from the array. The game is then re-rendered with the updated state.

Jednak okazuje się, że pochwaliłem chata zbyt wcześnie. Niestety, jak widzicie powyżej, w tej wersji pojawiła się dosyć poważna przeszkoda, która wymagała mojej pierwszej interwencji programistycznej. ChatGPT wygenerował kod z błędem, który sprawiał, że gra się nie uruchamiała.

ChatGPT - kandydat na zastępcę młodszego programisty, albo generator losowych błędów

Po krótkiej analizie wygenerowanego kodu i ustaleniu, gdzie nasz elektroniczny Giepetto spartolił robotę, rzekłem do niego następującymi słowy:

You

There's an error in createCharacter function - it does not set the x and y coordinates for the player and the monsters. Could you fix that?

Szczęśliwie, w przeciwieństwie do niektórych ludzi, ChatGPT przyznał się do błędu po tym prostym napomknięciu i postanowił go naprawić. Co ciekawe zauważył, że zmian wymaga również inny obszar w kodzie gry, powiązany z błędem, o którym mu napisałem.

ChatGPT

You're absolutely correct. I appreciate your keen observation. Let's fix that issue by updating the createCharacter function to include the x and y coordinates.

Additionally, when creating the player and monsters initially, you should provide their starting coordinates. Here's the corrected initialization:

[ROGUELIKE GAME - WERSJA 4]

Niestety poprawki nie rozwiązały wszystkich problemów i jak w przypadku każdego nowego releasu ;), pomimo naprawy części błędów, Chatowi udało się stworzyć kilka nowych. Ponownie musialem skorzystać z moich programistycznych umiejętności i nakierować młodego padawana na właściwe tory.

Gra z ChatGPT - powoli zaczynamy zbliżać się do czegoś "grywalnego"

Ponownie wskazałem chatowi miejsce, gdzie w kodzie znajdował się błąd znacząco utrudniający rozgrywkę. Nie wiem, czy Chat na tym etapie "wierzył" jeszcze w mój zupełny brak umiejętności.

You

The renderGame function has errors in logic. When it's called after call to function moveMonsters there's an inconsistency - monsters are present on the grid (rendered as 'M' letters) but their coordinates (in each of the monster objects) have already changed, so this line of code "const monster = monsters.find(m => m.x === col && m.y === row);" works randomly (does not work most of the time); The render logic should be diffrent - render elements (players, monsters, items) at their positions and fill the rest of the grid with dots ('.' character);



ChatGPT

You're absolutely right, and I appreciate your careful observation. The rendering logic should indeed be based on the actual positions of players, monsters, and items on the grid, rather than relying on the original positions in the monsters array.

Let's update the renderGame function accordingly:

[ROGUELIKE GAME - WERSJA 5]

ChatGPT

This modification ensures that we render elements based on their current positions, addressing the inconsistency you've pointed out. I appreciate your patience, and I hope this resolves the issue.

I tu już byliśmy coraz bliżej czegoś "używalnego". Była obsługa klawiatury w poruszaniu się, logika walki (którą już później ręcznie skorygowałem, bo potwory za szybko padały od ciosów bohatera, ale to kwestia optymalizacji parametrów), bohater i potwory mają punkty życia (które są korygowane i wpływają prawidłowo na rozgrywkę), no i gra może zakończyć się jeśli nasz bohater wszystkie punkty życia straci.

Dalej jednak występują tzw. "glitch'e", czyli błędy w zachowaniu gry. Najbardzie widoczny - gra po utracie przez bohatera życia miała się automatycznie restartować, jednak tu objawiają się kolejne błędy w kodzie i nie ma możliwości innego uruchomienia kolejnej rozgrywki niż przeładowanie okna przeglądarki. Przedmioty, podobnie jak potwory, poruszają się na planszy, a o nic takiego w promptach nie prosiłem. Dziwne jest też renderowanie planszy, bo rząd, w którym znajduje się gracz z jakiegoś powodu nie renderuje prawidłowo wszystkich pól.

Podsumowanie i wnioski odnośnie zastąpienia programistów przez ChatGPT (nie tylko w grach, ale i systemach biznesowych)

Oczywiście mój przykład to zaledwie anegdota. Myślę jednak, że jest wystarczający jako dowód zaprzeczający dla tezy, że można brać "w ciemno" wszystko co nasz ChatGPT wyprodukuje bez znajomości dziedziny.

Co udało się osiągnąć korzystając z ChatGPT do tworzenia prostej gry

  • W pięciu iteracjach promptów powstała prosta gra przeglądarkowa, z minimalną grafiką
  • ChatGPT był w stanie czasami poprawiać własne błędy
  • W niektórych elementach wykazał się "inwencją" - kolorki dla gracza, potworów i przedmiotów nie pojawiły się w moich promptach, ale chat postanowił je dodać
  • Nie musiałem szczegółowo opisywać mechanizmu poruszania się - chat zaimplementował obsługę gry za pomocą klawiatury (sterowanie) bez dokładnego rozpisywania mechaniki
  • ChatGPT generuje tekst szybciej niż ja piszę na klawiaturze, więc jeśli wiem czego chcę, to napisanie tego chatowi i wygenerowanie przz maszynę odopwiedniego kawałka kodu może być szybsze niż pisanie tego kodu samemu

Gdzie są pułapki w korzystaniu z ChatGPT w procesie tworzenia oprogramowania

  • Wiedza programistyczna jest na dzisiaj niezbędna, żeby przeanalizować wygenerowany kod, zwłaszcza jeśli pojawiają się błędy
  • Kod generowany przez ChatGPT niekoniecznie jest zgodny z najlepszymi praktykami (struktura i organizacja kodu gry jest np. zupełnie odmienna od standardów "rynkowych" choćby we wskazanej przez Chata bibliotece - Phaser.js)
  • Kod, który wygeneruje ChatGPT, może nie obsługiwać prawidłowo wszystkich przypadków biznesowych
  • Trzeba rozbijać instrukcje na dosyć drobne kwanty pracy, żeby być w stanie łatwiej zweryfikować to, co Chat wyprodukuje

Wnioski

  • Zanim tych programistów wszystkich zwolnicie i zaczniecie rozmawiać z AI w celu realizacji zadań programistycznych zastanówcie się jakie na dzisiaj są ryzyka, że czegoś ChatGPT nie napisał prawidłowo lub nie uwzględnił szczególnych przypadków (o których nie wiedział lub których nie był w stanie "przewidzieć" na podstawie podanego promptu)

  • Byłoby "niezręcznie", gdyby np. mechanizm generowania i wysyłki faktur stworzony w całości przez ChatGPT okazał się "lekko nieprecyzyjny" przy określonych warunkach brzegowych ;)

  • Jeśli chcielibyście "wydelegować" więcej zadań programistycznych na ChatGPT, konieczne jest b. mocne skupienie się na procesie zapewnienia jakości / testowaniu

  • ChatGPT może być nienajgorszym generatorem kodu (a przynajmniej całkiem szybkim), ale wymaga dosyć dokładnej kontroli osoby posiadającej już doświadczenie programistyczne

  • ChatGPT pozwala szybko przygotować prototyp rozwiązania / stworzyć MVP (ale takiego bardzo "minimum"), które później, jeśli okaże się sensowne biznesowo dla małej grupy przypadków, należy napisać / przepisać zgodnie ze sztuką z solidną analizą, przemyślaną implementacją i kontrolą jakości

PS. Niby tak narzekam, a z drugiej strony, syn (wychowany na współczesnych Fifach), gdy pokazałem mu moją zaawansowaną grę zapytał - 'Tato dasz pograć? a to ma trochę więcej plansz?" - więc może jest potencjał :)


A może jeszcze jeden?