AI nawigator
AI prowadzi ogólny kierunek, sugeruje podejścia i wychwytuje problemy
Programowanie parami tradycyjnie oznacza dwóch deweloperów pracujących razem nad tym samym kodem. Z Cursor, AI staje się twoim zawsze dostępnym, nieskończenie cierpliwym i niesamowicie kompetentnym partnerem w programowaniu parami. Ta lekcja eksploruje jak zmaksymalizować ten unikalny model współpracy.
W przeciwieństwie do programowania parami z człowiekiem, parowanie z AI oferuje unikalne korzyści: dostępność 24/7, nieskończoną cierpliwość, rozległą wiedzę we wszystkich domenach i spójną jakość. Jednak wymaga różnych technik aby zmaksymalizować efektywność.
AI nawigator
AI prowadzi ogólny kierunek, sugeruje podejścia i wychwytuje problemy
Asystent kierowcy
AI pomaga pisać kod, uzupełnia wzorce i obsługuje kod szablonowy
Kaczka gumowa plus
AI słucha, kwestionuje założenia i dostarcza alternatywne perspektywy
Baza wiedzy
AI dostarcza natychmiastową dokumentację, przykłady i najlepsze praktyki
Przed rozpoczęciem sesji parowania, przygotuj swojego partnera AI z kontekstem:
Przegląd projektu
"Budujemy narzędzie współpracy w czasie rzeczywistym.Aktualne zadanie: implementacja managera połączeń WebSocket.Stos: Node.js, Socket.io, TypeScript.Kluczowe wymagania: automatyczne ponowne łączenie, kolejkowanie wiadomości,i zarządzanie stanem połączenia."
Określ role
"Będziesz moim partnerem w programowaniu parami.Ja będę kierowcą (pisać kod), ty nawigatorem (prowadzić design,wychwytywać problemy, sugerować ulepszenia).Kwestionuj moje założenia i proponuj alternatywy."
Ustaw standardy
"Przestrzegaj naszych standardów kodowania:- TypeScript strict mode- Kompleksowa obsługa błędów- Pokrycie testów jednostkowych >80%- Czytelne nazwy funkcji i zmiennychWskazuj wszelkie odstępstwa podczas kodowania."
// TDD z AI"Robimy TDD dla tej funkcji. Ty napisz testy,ja zaimplementuję. Zacznij od testu połączenia WebSocket."
// AI pisze testdescribe('WebSocketManager', () => { it('should establish connection with retry logic', async () => { const manager = new WebSocketManager(config); const connection = await manager.connect();
expect(connection.state).toBe('connected'); expect(connection.retryCount).toBeLessThan(3); });});
// Deweloper implementuje aby test przeszedł
// Alternująca implementacja"Gramy ping-pong w tej implementacji. Ja napiszęlogikę połączenia, ty obsługę błędów, ja dodamponowne łączenie, ty kolejkowanie wiadomości, itd."
// Deweloper piszeclass WebSocketManager { async connect() { this.socket = new WebSocket(this.url); await this.waitForConnection(); }}
// AI dodaje obsługę błędów// Deweloper dodaje ponowne łączenie// AI dodaje kolejkowanie wiadomości// Kontynuuj alternując...
// Klasyczne parowanie zaadaptowane dla AI"Ja jestem kierowcą. Prowadź mnie przez implementacjęmanagera połączeń. Wskazuj problemy natychmiast,sugeruj lepsze podejścia i trzymaj mnie na kursie."
// Ciągłe prowadzenie AI:"Rozważ użycie exponential backoff dla ponownych prób""Ten handler błędów nie przechwyci timeoutów sieciowych""Wyodrębnij to do oddzielnej metody dla przejrzystości"
Podczas aktywnego kodowania, angażuj swojego partnera AI ciągle:
// Podczas implementacji"Czy to właściwe podejście do obsługi rozłączeń?"
// AI odpowiada z natychmiastowym feedbackiem"Obecne podejście może utracić wiadomości podczas rozłączenia.Rozważ implementację kolejki wiadomości, która przetrwaponowne połączenia. Oto przykład..."
// Deweloper dostosowuje na podstawie feedbackuclass WebSocketManager { private messageQueue: Message[] = [];
private queueMessage(message: Message) { if (!this.isConnected) { this.messageQueue.push(message); } else { this.send(message); } }}
Zdefiniuj problem
"Musimy obsłużyć przypadek, gdy wielu klientówpróbuje się połączyć jednocześnie. Obecny kod tworzywiele instancji WebSocket. Jak powinniśmy to obsłużyć?"
Eksploruj rozwiązania
"Jakie są nasze opcje zapobiegania duplikacjom połączeń?Wymień zalety i wady każdego podejścia."
Ewaluuj razem
"Biorąc pod uwagę nasze wymagania dla niskiego opóźnienia i wysokiej niezawodności,które podejście poleciłbyś i dlaczego?"
Implementuj wspólnie
"Zaimplementujmy wzorzec singleton, który zaproponowałeś.Prowadź mnie przez przypadki brzegowe, które musimy obsłużyć."
// Współpracujący design"Projektujmy system routingu wiadomości razem.Myślę o wzorcu pub/sub. Jakie są twoje przemyślenia?Naszkicuj główne komponenty, których będziemy potrzebować."
// AI dostarcza architekturęinterface MessageRouter { subscribe(channel: string, handler: MessageHandler): Subscription; publish(channel: string, message: Message): Promise<void>; unsubscribe(subscription: Subscription): void;}
// Dyskusja trwa"Jak powinniśmy obsłużyć persistencję wiadomości?A co z gwarancjami kolejności?"
// Sesja debugowania"Mam sporadyczne spadki połączeń. Oto błąd:[Szczegóły błędu]Sprawdziłem stabilność sieci i logi serwera.Co jeszcze powinniśmy zbadać?"
// AI sugeruje podejście do debugowania"Dodajmy szczegółowe logowanie aby śledzić cykl życia połączenia.Także, błąd sugeruje wyciek pamięci. Dodaj monitoring dla:1. Liczba aktywnych socketów2. Akumulacja event listenerów3. Rozmiar kolejki wiadomości"
// Ciągły przegląd"Przejrzyj to, co właśnie napisałem dla przepływu uwierzytelniania.Jakieś obawy bezpieczeństwa lub ulepszenia?"
// AI dostarcza natychmiastowy feedback"Dwie obawy:1. Hasło jest logowane w plaintext w linii 472. Brak rate limiting na próby logowaniaOto jak naprawić oba problemy..."
Faza planowania
Faza projektowania
Faza implementacji
Faza testowania
Faza dokumentacji
Używaj parowania z AI do nauki nowych technologii:
// Sesja nauki"Jestem nowy w WebSocketach. Zbudujmy tę funkcję razem.Wyjaśniaj koncepty w trakcie i wskazuj najlepsze praktyki.Zacznij od podstaw i buduj złożoność."
// AI staje się partnerem nauczającym"Zacznijmy od podstaw WebSocket:1. WebSockets zapewniają komunikację full-duplex2. W przeciwieństwie do HTTP, połączenie pozostaje otwarteOto prosty przykład na start..."
Bądź konkretny
“Pomóż mi zoptymalizować tę funkcję” → “Ta funkcja jest wolna z 10k+ elementami. Jak możemy poprawić wydajność?”
Dostarczaj kontekst
“Napraw ten bug” → “Użytkownicy zgłaszają utratę danych gdy połączenie spada podczas zapisu. Oto odpowiedni kod…”
Ustaw oczekiwania
“Napisz tę funkcję” → “Zaimplementujmy wyszukiwanie użytkowników. Skup się na wydajności i fuzzy matching.”
// Stwierdzenie problemu"Wydajność pogarsza się z 100+ równoczesnych połączeń.Zdiagnozujmy razem. Obecna implementacja używajednego event listenera na połączenie. Czy to może być problem?"
// Współpracujące śledztwo"Masz rację. Akumulacja event listenerów to częsty problem.Sprofilujmy aplikację dla potwierdzenia, potem zaimplementujmy rozwiązanieużywając delegacji zdarzeń lub wzorca message bus."
// Wspólny rozwój rozwiązania"Zaimplementuję message bus. Przejrzyj moje podejście isugeruj optymalizacje w trakcie."
// Dostarczaj kontekst domeny"To jest dla urządzenia medycznego z wymaganiami FDA.Pamiętaj: dane muszą być szyfrowane w spoczynku,audit trail wymagany dla wszystkich akcji,99.99% uptime wymagane."
// Dziel się wewnętrznymi wzorcami"Używamy niestandardowego systemu zdarzeń. Tak działa:[Dołącz przykładowy kod]Upewnij się, że integracja WebSocket podąża za tym wzorcem."
// Podziel złożoność"Ten algorytm jest złożony. Zajmijmy się tym krokowym:1. Najpierw, faza przygotowania danych2. Potem główna logika przetwarzania3. W końcu, agregacja wynikówZacznijmy od kroku 1..."
Ciągły dialog
Utrzymuj płynną konwersację przez całą sesję kodowania
Kwestionuj i weryfikuj
Kwestionuj sugestie AI i weryfikuj poprawność
Ucz się aktywnie
Pytaj “dlaczego” aby zrozumieć uzasadnienie za sugestiami
Utrzymuj momentum
Używaj AI do pokonywania blokad i utrzymania stanu flow
Rozwój mobilny
Zastosuj parowanie z AI do rozwoju aplikacji mobilnych
Pipeline danych
Używaj asystencji AI dla złożonego przetwarzania danych
Zadania DevOps
Wykorzystaj AI dla infrastruktury i wdrożeń