Jednostka 3 / 12

Kodowanie i programowanie w parach z wykorzystaniem sztucznej inteligencji

Zyski:

  • Możliwość pisania funkcji, klas i modułów do AI z przejrzystymi definicjami wejść i wyjść oraz ograniczeń
  • Możliwość wykorzystania sztucznej inteligencji jako partnera programistycznego w parach i postępu krok po kroku, w małych, weryfikowalnych fragmentach
  • Możliwość wychwytywania błędów logicznych i przypadków brzegowych poprzez kompilowanie kodu wygenerowanego przez sztuczną inteligencję i uruchamianie go z małymi przykładami

Programowanie w parach ma miejsce wtedy, gdy dwóch programistów pracuje nad tym samym problemem, jeden pisze, a drugi poprawia. Kodowanie za pomocą AI to cyfrowa wersja tej właśnie relacji: wyznaczasz kierunek, ograniczenia i kryteria akceptacji; AI generuje szybki przeciąg; Każdy krok weryfikujesz, kompilując go i testując. Największą pułapką jest powiedzenie AI „napisz mi tę aplikację od początku do końca” i ślepo zaakceptowanie 200-liniowego bloku. Dobre programowanie w parach przebiega w małych krokach: każdy krok powinien być zrozumiały, testowalny i odwracalny.

W tej części dowiesz się, jak drukować funkcje, klasy i moduły z przejrzystym kontraktem wejścia-wyjścia; Jak poprowadzić sztuczną inteligencję krok po kroku; i zobaczymy, jak wyłapać błędy logiczne i wielkość liter Edge, uruchamiając wygenerowany kod z małymi przykładami. Celem nie jest prędkość, ale prędkość sprawdzona.

Pojęcia: Kontrakt wejścia-wyjścia: jasna definicja tego, jakie dane wejściowe pobiera funkcja oraz jakie dane wyjściowe i zachowanie w przypadku błędów obiecuje. Przypadek brzegowy: dane wejściowe, które nie są zwyczajne, ale mogą faktycznie wystąpić (puste, zero, ujemne, bardzo duże, null). Rozwój przyrostowy: Kontynuowanie małych, roboczych elementów i sprawdzanie każdego kroku.

Drukowanie kodu z umową netto

Podstawą kodu jakości jest dokładne zdefiniowanie „czego chcesz” przed rozpoczęciem pracy. Pisząc funkcję do AI, podaj pięć rzeczy: język i wersja, typy danych wejściowych i znaczenia, dane wyjściowe, warunki błędów i ograniczenia (wydajność, zakaz bibliotek zewnętrznych, styl). Zapobiega to zgadywaniu AI.

  1. Napisz umowę. Wejście, wyjście, błąd, ograniczenie.
  2. Poproś o małą jednostkę. Funkcja z jedną odpowiedzialnością; Nie jest to jakiś ogromny moduł.
  3. Poproś o blok testowy. Dodaj kilka przykładowych uruchomień/testów obok kodu.
  4. Skompiluj i uruchom. Wypróbuj z obudowami Edge, sprawdź wynik naocznie.
  5. Przejdź do następnego kroku. Gdy element zostanie zatwierdzony, zacznij na nim budować.

Zakontraktowana zachęta funkcji: „Napisz funkcję dla TypeScript 5. Cel: obliczenie całkowitej ilości pozycji w koszyku. Wejście: tablica { cena: liczba, ilość: liczba } []. Wynik: liczba (łącznie). Reguły: wyrzuć błąd, jeśli ilość lub cena jest ujemna; zwróć 0 dla pustej tablicy; zaokrąglij kwotę do 2 miejsc po przecinku w przypadku błędu dziesiętnego. Nie używaj biblioteki zewnętrznej. Dodaj 5 przypadków testowych poniżej funkcji (normalny, pusty, ilość ujemna, cena dziesiętna, pojedynczy element).”

Przewodnictwo AI jako para

Dobry postęp w programowaniu w parach to dialog, a nie jedna wielka prośba. Najpierw poproś o szkielet i uruchom go; następnie dodaj stan brzegowy; następnie napraw błąd. Dzięki takiemu podejściu kod jest zrozumiały i zapewnia kontrolę na każdym kroku.

Przyrostowy monit o postęp: „Napiszemy czytnik, który odczytuje plik CSV i konwertuje linie na obiekt. Przejdźmy KROK PO KROKU, przechodząc do następnego kroku bez potwierdzania przeze mnie każdego kroku. Krok 1: po prostu napisz szkielet, który dzieli plik na linie i oddziela linię nagłówka. Nie dodawaj jeszcze konwersji typu ani obsługi błędów. Krótko i wyjaśnij.”

Wyjaśnij i uzasadnij monit w kodzie: „Wyjaśnij funkcję, którą właśnie napisałeś, nie wiersz po wierszu, ale decyzja po decyzji: jaką decyzję projektową podjąłeś i dlaczego, z jakim przypadkiem Edge sobie poradziłeś i w jaki sposób, które przypadki celowo wykluczyłeś? Wymień 3 założenia w kodzie, których nie powinienem przeoczyć.

Wskazówka: nie akceptuj kodu wygenerowanego przez sztuczną inteligencję bez jego zrozumienia. „Wyjaśnij mi to, jakie przyjąłeś założenia?” Pytanie zarówno ujawnia ukryte błędy, jak i pozwala obronić ten kod, ponieważ kod pozostaje twoją odpowiedzialnością. Umieszczenie kodu, którego nie rozumiesz, w środowisku produkcyjnym jest jak wysłanie umowy bez jej podpisania.

Słaba podpowiedź/silna podpowiedź

SŁABY: „Napisz funkcję sortującą.” (Wynik: który język, co jest sortowane, czy jest stabilny, jakie jest ograniczenie wydajności, kod jest niejasny i prawdopodobnie nie spełnia wymagań.) SILNY: „W przypadku Java 17 napisz metodę, która sortuje obiekt List<Employee> najpierw według działów (alfabetycznie), a następnie według wynagrodzenia (malejąco). NIE ZAMIENIAJ oryginalnej listy, zwróć nową listę. Niech dział zerowy znajdzie się na końcu. Wyjaśnij złożoność metody w wierszu komentarza określ, dodaj główny blok testowy z 4 próbkami.

Potężny monit; Obejmuje kryterium sortowania (dwupoziomowe), regułę efektu ubocznego (zastąpienie oryginału), zachowanie zerowe i oczekiwanie testu. Bez tych szczegółów sztuczna inteligencja tworzy wiarygodne, ale nieprawidłowe rozwiązanie; na przykład może to spowodować uszkodzenie oryginalnej listy, co doprowadzi do cichego błędu w innym miejscu.

Walidacja za pomocą przypadków Edge i małych próbek

Kod, który działa w szczęśliwym scenariuszu, nie jest poprawnym kodem. Świadomie wymuszaj każdą wyprodukowaną funkcję:

Typ obudowy Edge

przykładowe wejście

oczekiwane zachowanie

puste wejście

Pusta tablica/ciąg

To nie jest błąd, logiczny pusty wynik

Zero/ujemne

0, -1

Zdefiniowane i prawidłowe zachowanie

wielka wartość

Miliony rekordów

Kontrola przepełnienia/wydajności

null/niezdefiniowany

brakujące miejsce

Kontrolowany błąd lub wartość domyślna

Duplikat/nietypowy

powtarzalna, odwrotna kolejność

prawidłowy wynik

Mini etui

Przypadek 1 — Cichy błąd zaokrąglania. AI pisze funkcję, która zbiera pieniądze za pomocą typów dziesiętnych (float); 0,1 + 0,2 daje 0,30000000000000004. Błąd zostanie rozwiązany, gdy inżynier doda regułę „Zaokrąglij do 2 cyfr i wykorzystaj całe grosze”. Zasada 3 linii zapobiega rozbieżnościom w miesięcznym rozliczeniu wynoszącym tysiące groszy.

Przypadek 2 – Pułapka skutków ubocznych. Sztuczna inteligencja pisze metodę, która „sortuje” listę, ale modyfikuje w miejscu oryginalną listę. Występuje nieoczekiwane zachowanie, ponieważ inny moduł używa tej samej listy. Jeśli w monicie znajdowało się ograniczenie „zmień oryginał”, błąd nigdy by nie wystąpił; zostaje złapany podczas przeglądu kodu i uniemożliwia 2 godziny debugowania.

Przypadek 3 — Zarobki krok po kroku. Programista drukuje od razu 150-liniowy moduł importu; Kiedy znajdzie błąd, nie może ustalić, skąd się wziął. Inny programista dzieli tę samą pracę na 5 małych kroków, testuje każdy krok w ciągu 2 minut i wychwytuje błąd natychmiast w trzecim kroku.

Typowe błędy

  • Drukowanie dużych bloków w jednym żądaniu. Rodzi się ryzykowny kod, który jest trudny do zrozumienia i debugowania.
  • Prośba o kod bez podawania umowy. Jeśli błąd wejścia-wyjścia jest niejednoznaczny, sztuczna inteligencja zgadnie i się myli.
  • Właśnie testuję szczęśliwy scenariusz. Jeśli nie zostanie wypróbowane wejście puste, zerowe, ujemne i duże, błąd pozostawia się produkcji.
  • Akceptacja bez zrozumienia. Kod, którego nie ujawniasz, to dług, którego nie możesz obronić.
  • Ignorowanie wrażliwych typów, takich jak skutki uboczne i pieniądze/randka. Pieniądze płynne z ponadczasową historią są klasycznym źródłem błędów.

Podsumowując

Pisanie kodu za pomocą sztucznej inteligencji to zdyscyplinowane programowanie w parach: jasna umowa, małe kroki, budowanie i testowanie na każdym kroku. Podanie na początku kwartetu ograniczeń wejście-wyjście-błąd określa jakość kodu. Wyjaśnianie generowanego przez niego kodu i narzucanie mu przypadków brzegowych wydobywa na powierzchnię błędy ukryte pod szczęśliwym scenariuszem. Źródłem szybkości nie jest ślepa akceptacja; to szybki projekt i szybka weryfikacja.

Zadanie aplikacji

Wybierz małą, ale realną funkcję (np. suma koszyka, różnica dat, analiza tekstu). Wydrukuj, korzystając z monitu o skurczoną funkcję; Dodaj obok niego co najmniej 5 scenariuszy testowych. Uruchom kod i świadomie wypróbuj 5 przypadków Edge, korzystając z tabeli jako wskazówki. Znajdź błąd w co najmniej jednym przypadku Edge (jeśli nie, zaprojektuj nowe wejście, aby wymusić działanie funkcji), napraw go za pomocą sztucznej inteligencji i sprawdź, ponownie testując, czy poprawka zadziałała.

lista kontrolna

  • [ ] Napisałem umowę zawierającą dane wejściowe, wyjściowe, błędy i ograniczenia.
  • [ ] Wygenerowałem kod w małych krokach zamiast w jednym dużym bloku.
  • [ ] Dodałem blok uruchamiania testu/próbki obok kodu.
  • [ ] Świadomie przetestowałem co najmniej 5 przypadków Edge.
  • [ ] Wyjaśniłem AI kod i przejrzałem jego założenia.
  • [ ] Poprawiłem znaleziony błąd i potwierdziłem poprawkę, przeprowadzając ponowne testowanie.