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.
- Napisz umowę. Wejście, wyjście, błąd, ograniczenie.
- Poproś o małą jednostkę. Funkcja z jedną odpowiedzialnością; Nie jest to jakiś ogromny moduł.
- Poproś o blok testowy. Dodaj kilka przykładowych uruchomień/testów obok kodu.
- Skompiluj i uruchom. Wypróbuj z obudowami Edge, sprawdź wynik naocznie.
- 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.