Kazanimlar:
- Fonksiyon, sınıf ve modülleri net girdi-çıktı ve kısıt tanımıyla AI'a yazdırabilme
- AI'ı bir çift programlama ortağı gibi kullanıp adım adım, küçük ve doğrulanabilir parçalarla ilerleyebilme
- AI'ın ürettiği kodu derleyip küçük örneklerle çalıştırarak mantık ve kenar durum hatalarını yakalayabilme
Çift programlama (pair programming), iki geliştiricinin aynı problem üzerinde biri yazıp diğeri gözden geçirerek çalışmasıdır. AI ile kod yazmak, tam da bu ilişkinin dijital hâlidir: siz yönü, kısıtları ve kabul kriterlerini belirlersiniz; AI hızlı taslak üretir; siz her adımı derleyip test ederek doğrularsınız. Buradaki en büyük tuzak, AI'a "bana şu uygulamayı baştan sona yaz" deyip 200 satırlık bir bloğu körü körüne kabul etmektir. İyi çift programlama küçük adımlarla ilerler: her adım anlaşılabilir, test edilebilir ve geri alınabilir olmalıdır.
Bu ünitede fonksiyon, sınıf ve modülleri net bir girdi-çıktı sözleşmesiyle nasıl yazdıracağınızı; AI'ı adım adım nasıl yönlendireceğinizi; ve ürettiği kodu küçük örneklerle çalıştırarak mantık ve kenar durum hatalarını nasıl yakalayacağınızı göreceğiz. Amaç hız değil, doğrulanmış hızdır.
Kavramlar: Girdi-çıktı sözleşmesi (contract): Bir fonksiyonun hangi girdiyi alıp hangi çıktıyı ve hata davranışını vaat ettiğinin net tanımı. Kenar durum (edge case): Sıradan olmayan ama gerçekte olabilen girdi (boş, sıfır, negatif, çok büyük, null). Artımlı geliştirme: Küçük, çalışan parçalarla ilerleyip her adımı doğrulama.
Net Sözleşme ile Kod Yazdırma
Kaliteli kodun temeli, işe başlamadan önce "ne istediğinizi" tam tanımlamaktır. Bir fonksiyonu AI'a yazdırırken şu beş şeyi verin: dil ve sürüm, girdi tipleri ve anlamları, çıktı, hata durumları, ve kısıtlar (performans, dış kütüphane yasağı, stil). Bu, AI'ın tahmin etmesini engeller.
- Sözleşmeyi yazın. Girdi, çıktı, hata, kısıt.
- Küçük bir birim isteyin. Tek sorumluluğu olan bir fonksiyon; koca bir modül değil.
- Test bloğu isteyin. Kodun yanına birkaç örnekli çalıştırma/test ekletin.
- Derleyip çalıştırın. Kenar durumlarla deneyin, çıktıyı gözünüzle doğrulayın.
- Sonraki adıma geçin. Bir parça doğrulanınca üstüne inşa edin.
Sözleşmeli fonksiyon promptu:"TypeScript 5 için bir fonksiyon yaz.Amaç: bir alışveriş sepetindeki kalemlerin toplam tutarını hesapla.Girdi: { fiyat: number, adet: number }[] dizisi.Çıktı: number (toplam).Kurallar: adet veya fiyat negatifse Error fırlat; boş dizi için 0 dön;ondalık hataya karşı tutarı 2 basamağa yuvarla.Dış kütüphane kullanma. Fonksiyonun altına 5 test senaryosu ekle(normal, boş, negatif adet, ondalıklı fiyat, tek kalem)."
AI'ı Bir Çift Olarak Yönlendirmek
Çift programlamada iyi ilerleme, tek büyük istek yerine bir diyalogdur. Önce iskeleti isteyin, çalıştırın; sonra bir kenar durumu ekletin; sonra bir hatayı düzelttirin. Bu yaklaşım hem kodu anlaşılır tutar hem de her adımda kontrolü sizde bırakır.
Artımlı ilerleme promptu:"Bir CSV dosyasını okuyup satırları nesneye çeviren bir okuyucu yazacağız.ADIM ADIM ilerleyelim, her adımı ben onaylamadan sonrakine geçme.Adım 1: sadece dosyayı satırlara bölen ve başlık satırını ayıran iskeleti yaz.Henüz tip dönüşümü veya hata yönetimi ekleme. Kısa tut, açıkla."
Kodu açıklat ve gerekçelendir promptu:"Az önce yazdığın fonksiyonu satır satır değil, karar bazında açıkla:hangi tasarım kararını neden verdin, hangi kenar durumu nasıl ele aldın,hangi durumları BİLEREK kapsam dışı bıraktın? Kodda benim gözden kaçırmamamgereken 3 varsayımı listele."
İpucu: AI'ın ürettiği kodu anlamadan kabul etmeyin. "Bunu bana açıkla, hangi varsayımları yaptın?" sorusu, hem gizli hataları ortaya çıkarır hem de kod sizin sorumluluğunuzda kaldığı için sizin de o kodu savunabilmenizi sağlar. Anlamadığınız kodu üretime almak, imzalamadan sözleşme göndermek gibidir.
Zayıf Prompt / Güçlü Prompt
ZAYIF:"Bir sıralama fonksiyonu yaz."(Sonuç: hangi dil, ne sıralanıyor, kararlı mı, performans kısıtı ne;belirsiz ve muhtemelen gereksinime uymayan kod.)GÜÇLÜ:"Java 17 için, bir List<Calisan> nesnesini önce departmana (alfabetik),eşitlikte maaşa (azalan) göre sıralayan bir metot yaz. Orijinal listeyiDEĞİŞTİRME, yeni liste dön. null departman en sona gelsin. Metodunkarmaşıklığını yorum satırında belirt. 4 örnekli bir main test bloğu ekle."
Güçlü prompt; sıralama kriterini (iki seviyeli), yan etki kuralını (orijinali değiştirme), null davranışını ve test beklentisini içerir. Bu ayrıntılar olmadan AI makul ama yanlış bir çözüm üretir; örneğin orijinal listeyi bozabilir ve bu, başka yerde sessiz bir hataya yol açar.
Kenar Durumları ve Küçük Örneklerle Doğrulama
Mutlu senaryoda çalışan kod, doğru kod değildir. Üretilen her fonksiyonu bilinçli olarak zorlayın:
Kenar durum türü
Örnek girdi
Beklenen davranış
Boş girdi
Boş dizi/string
Hata değil, mantıklı boş sonuç
Sıfır/negatif
0, -1
Tanımlı ve doğru davranış
Çok büyük değer
Milyonlarca kayıt
Taşma/performans kontrolü
null/undefined
Eksik alan
Kontrollü hata veya varsayılan
Yinelenen/sıra dışı
Tekrar eden, ters sıralı
Doğru sonuç
Mini Vakalar
Vaka 1 — Sessiz yuvarlama hatası. AI, para toplayan bir fonksiyonu ondalık (float) tiplerle yazar; 0.1 + 0.2 işlemi 0.30000000000000004 verir. Mühendis "2 basamağa yuvarla ve tam sayı kuruş kullan" kuralını ekleyince hata çözülür. 3 satırlık bir kural, aylık mutabakatta binlerce kuruşluk sapmayı önler.
Vaka 2 — Yan etki tuzağı. AI, bir listeyi "sıralayan" bir metot yazar ama orijinal listeyi yerinde değiştirir. Başka bir modül aynı listeyi kullandığı için beklenmedik davranış çıkar. "Orijinali değiştirme" kısıtı promptta olsaydı hata hiç doğmazdı; kod incelemesinde yakalanır ve 2 saatlik hata ayıklama önlenir.
Vaka 3 — Adım adım kazanç. Bir geliştirici 150 satırlık bir içe aktarma (import) modülünü tek seferde yazdırır; hata bulunca nereden geldiğini bulamaz. Aynı işi 5 küçük adıma bölen bir başka geliştirici, her adımı 2 dakikada test eder ve hatayı 3. adımda anında yakalar.
Sık yapılan hatalar
- Tek istekte büyük blok yazdırmak. Anlaşılması ve hata ayıklaması zor, riskli kod doğar.
- Sözleşme vermeden kod istemek. Girdi-çıktı-hata belirsizse AI tahmin eder ve yanılır.
- Sadece mutlu senaryoyu test etmek. Boş, null, negatif ve büyük girdi denenmezse hata üretime kalır.
- Anlamadan kabul etmek. Açıklatmadığınız kod sizin de savunamayacağınız bir borçtur.
- Yan etki ve para/tarih gibi hassas tipleri savsaklamak. Float ile para, zaman dilimsiz tarih klasik hata kaynağıdır.
Özetle
AI ile kod yazmak, disiplinli bir çift programlamadır: net sözleşme, küçük adımlar, her adımda derleme ve test. Girdi-çıktı-hata-kısıt dörtlüsünü baştan vermek, kodun kalitesini belirler. Ürettiği kodu açıklatmak ve kenar durumlarla zorlamak, mutlu senaryonun altında saklı hataları yüzeye çıkarır. Hızın kaynağı, kör kabul değil; hızlı taslak artı hızlı doğrulamadır.
Uygulama görevi
Küçük ama gerçek bir fonksiyon seçin (ör. sepet toplamı, tarih farkı, metin ayrıştırma). Sözleşmeli fonksiyon promptunu kullanarak yazdırın; yanına en az 5 test senaryosu ekletin. Kodu çalıştırın ve tabloyu rehber alarak 5 kenar durumu bilinçle deneyin. En az bir kenar durumda hata bulun (yoksa fonksiyonu zorlayacak yeni bir girdi tasarlayın), AI ile düzeltin ve düzeltmenin işe yaradığını yeniden test ederek doğrulayın.
Kontrol listesi
- [ ] Girdi, çıktı, hata ve kısıtları içeren bir sözleşme yazdım.
- [ ] Kodu tek büyük blok yerine küçük adımlarla ürettim.
- [ ] Kodun yanına test/örnek çalıştırma bloğu ekledim.
- [ ] En az 5 kenar durumu bilinçle test ettim.
- [ ] Kodu AI'a açıklatıp varsayımlarını gözden geçirdim.
- [ ] Bulunan hatayı düzeltip düzeltmeyi yeniden test ederek doğruladım.