Menu

Yapay Zekâya Kod Açıklatmak: Satır Satır Promptlar

Yapay zekâdan kodu senin seviyende, satır satır ve çalışırken değerlerin nasıl değiştiğini gösteren bir tabloyla açıklamasını iste. Açıklamanın bulunduğun yerden başlaması için zaten ne bildiğini söyle.

Bu sayfadaki her istemi düzenleyebilir, sonra ChatGPT, Claude ya da başka bir yapay zekâ uygulamasında açabilirsin.

Yapay zekâdan kod hakkında faydalı bir açıklama almak için ne kadar bildiğini söyle, açıklamayı satır satır iste ve bir izleme (trace) iste: kod çalışırken her değişkenin tuttuğu değerlerin tablosu. Çıplak bir "bu kodu açıkla" hayali bir ortalama okur için yazılmış bir özet getirir; bu da genellikle senin için ya fazla basit ya da fazla hızlıdır.

Satır satır, değerlerin izlemesiyle

İki sekme de aynı kısa fonksiyonu soruyor. Her yanıtın neyi kontrol etmene izin verdiğini karşılaştır.

Bu kodu açıkla: def running_max(nums): result = [] best = None for n in nums: if best is None or n > best: best = n result.append(best) return result print(running_max([3, 1, 4, 1, 5]))
Try it
Example replyReplies vary between models and runs.

Bu fonksiyon bir listenin kümülatif maksimumunu (running maximum) hesaplar. Sayılar üzerinde döner, o ana kadar görülen en büyük değeri best içinde tutar ve her adımda o değeri result'a ekler. best is None kontrolü ilk elemanı ele alır. Çağrı [3, 3, 4, 4, 5] yazdırır.

Fonksiyon her elemanı bir kez ziyaret ettiği için O(n) zamanda çalışır.

İlk yanıt doğru ve sadece kümülatif maksimumun ne olduğunu zaten biliyorsan işe yarıyor. Ayrıca kimsenin sormadığı bir zaman karmaşıklığı notu ekliyor; modelin kimin okuduğunu bilmediğinde eklediği türden bir fazlalık. İkinci yanıt her cümleyi gösterebileceğin bir satıra bağlıyor ve tablo, özetin sadece geçerken söylediği şeyi somutlaştırıyor: result.append(best) best'in değişmediği turlar dahil her turda çalışıyor. 3'ün iki kez görünmesinin nedeni bu ve bunu "her adımda" ifadesinden çıkarmak yerine 2. satırda görebiliyorsun.

İzleme tablosu açıklamanın kendisi için de bir kontroldür. Döngünün içine bir print(n, best, result) koyup kodu çalıştırarak her satırı doğrulayabilirsin. Bir satır gerçek çıktıyla uyuşmuyorsa açıklama bir yerde yanlıştır ve artık nerede olduğunu bilirsin.

Senin seviyende açıklat

Bir açıklama promptundaki en faydalı tek satır, zaten ne bildiğindir. Modele hangi satırları atlayacağını ve hangilerinde yavaşlayacağını söyler. Bir rol cümlesi de işe yarayabilir ("Kod yazmanın ilk ayındaki insanlara öğreten bir öğretmensin"), ama aynı mekanizmayla çalışır: modele okurun kim olduğunu söyler. Bir rolün neyi değiştirip neyi değiştirmediğini rol verme anlatır.

Bu blok tekrar kullanılabilir bir sürüm. Seviyeyi, kafa karıştıran kısmı ya da kodu değiştir, açıklama da onunla birlikte değişir.

Benim seviyemde açıkla
Fill in
Parts
Aşağıdaki kodu bana açıkla.
Seviyem: döngüleri, listeleri ve sözlükleri biliyorum ama lambda'yı ve key ile sorted'ı bilmiyorum. Kafamı karıştıran kısım: son iki satır.
text = "the cat and the hat" counts = {} for word in text.split(): counts[word] = counts.get(word, 0) + 1 top = sorted(counts.items(), key=lambda kv: kv[1], reverse=True)[:2] print(top)
Zaten anladığım satırları toplamda tek cümleyle açıkla. Geri kalanını kafa karıştıran kısma ayır, parça parça, her parçanın bu girdi için ürettiği değeri göstererek.
180 kelimeden kısa. Sadece benim seviyemdeki kavramları ve açıkladıklarını kullan.
Try it
Example replyReplies vary between models and runs.

Döngü her kelimeyi sayar: counts sonunda {'the': 2, 'cat': 1, 'and': 1, 'hat': 1} olur.

Şimdi son iki satır, içten dışa:

  • counts.items() şu çiftleri verir: ('the', 2), ('cat', 1), ('and', 1), ('hat', 1).
  • lambda kv: kv[1] adı olmayan küçük bir fonksiyondur. Bir çift alır ve ikinci elemanını, yani sayıyı döndürür. ('the', 2) için 2 döndürür.
  • sorted(..., key=...) çiftleri o fonksiyonun döndürdüğüne göre sıralar, yani sayıya göre sıralar. reverse=True en büyüğü başa koyar. Sayıları eşit olan kelimeler orijinal sıralarını korur.
  • [:2] ilk iki çifti tutar.

Yani top [('the', 2), ('cat', 1)] olur ve yazdırılan da budur.

"Sayıları eşit olan kelimeler orijinal sıralarını korur" hızlı bir açıklamanın atladığı ayrıntıdır ve ikinci sırayı and ya da hat yerine cat'in kazanmasının nedenidir. Python'un sorted fonksiyonu kararlıdır (stable) ve reverse=True bu kararlılığı korur. Bunu sormak aklına gelmezdi; onu ortaya çıkaran şey "her parçanın bu girdi için ürettiği değeri" istemek oldu.

Bütün dosyayı değil, bir kısmı sor

500 satırlık bir dosya yapıştırıp "bu ne yapıyor" diye sormak dosyanın yapısında bir tur getirir. Tek bir fonksiyonda takıldığında o fonksiyonu ve onu çağıran satırları yapıştır ve doğrudan onu sor: "Bu fonksiyon liste boşken neden erkenden dönüyor?" ya da "12. satırdaki yield ne yapıyor ve return olsaydı ne değişirdi?" Dar bir soru senin kodun hakkında cevap getirir; geniş bir soru ise seninkine benzeyen kod hakkında.

Büyük ve tanımadığın bir kod tabanında sırayı ters çevir: önce bir harita iste ("ana modülleri ve her birinin sorumluluğunu, her biri tek satırda listele"), sonra ihtiyacın olan modülü sor. Bu küçük bir prompt zinciridir ve her adım modelin cevabını kontrol edilebilecek kadar kısa tutar.

Bildiğin bir dil üzerinden açıklat

Tanımadığın bir dildeki kod, açıklama bildiğin bir dile dayandırıldığında daha kolay okunur. Bunu promptta söyle: "Python biliyorum. Bu Go fonksiyonunu açıkla ve bir Python programcısının beklediğinden farklı davrandığı her yeri göster." Yanlış anlamalar farklarda yaşar: tam sayı bölmesi, None yerine sıfır değerleri, geldiği diziyle belleği paylaşan bir slice. Go kodunun düz bir açıklaması bu satırları doğru anlatır ama onlar hakkındaki içgüdülerinin yanlış olduğunu sana hiç söylemez.

Anladığını kontrol et

Okuyup katıldığın bir açıklama, kodu kendin yazamaz hâlde bırakabilir. İki prompt bu boşluğu kapatır:

  • Önce tahmin et. Kodu çalıştırmadan ya da açıklama istemeden önce ne yazdıracağını düşündüğünü yaz. Sonra modelden sadece tahmininin yanlış olduğu satırları açıklamasını iste.
  • Geri anlat. Kendi açıklamanı yaz ve modelden onu yeniden yazmadan yanlış ya da eksik olan her şeyi göstermesini iste.
Bu kod hakkında beni sına
Fill in
Bu Python kodunun bir açıklamasını az önce okudum: def running_max(nums): result = [] best = None for n in nums: if best is None or n > best: best = n result.append(best) return result Onu gerçekten anlayıp anlamadığımı kontrol eden 3 soruyu her seferinde bir tane olmak üzere sor. Birinde yeni bir girdi için çıktıyı tahmin etmem gereksin. Sıradaki soruyu sormadan önce cevabımı bekle ve cevabımın doğru olup olmadığını ve nedenini söyle.
Try it
Example replyReplies vary between models and runs.

Soru 1 / 3: running_max([2, 7, 5, 9]) ne döndürür? Çalıştırmadan önce kendin bul.

Aynı yaklaşım bir program yanlış davrandığında da işe yarar, ama o zaman bir ders değil, sebep istersin: bkz. hata ayıklama promptları. Önündeki kodu bir yapay zekâ yazdıysa, satır satır bir açıklama onu tutmadan önce incelemenin hızlı bir yoludur; yapılacak diğer kontrolleri kod yazma promptları listeliyor.

Sıkça Sorulan Sorular

ChatGPT'den ya da Claude'dan kodu açıklamasını nasıl isterim?

Kodu yapıştır ve üç şey söyle: zaten ne bildiğin, hangi kısmın kafanı karıştırdığı ve açıklamanın hangi şekilde olmasını istediğin. "Her satırı tek cümleyle açıkla, sonra her döngü turundan sonra değişkenlerin tablosunu göster" isteği, "bu kodu açıkla" isteğinden çok daha faydalı bir cevap getirir.

İzleme tablosu (trace table) nedir?

İzleme tablosu bir programı çalışırken takip eder: her adım için bir satır (çoğu zaman her döngü turu), her değişken için bir sütun ve o noktada her değişkenin değeri. Bir tane istemek soyut bir tarifi kodla karşılaştırabileceğin somut değerlere çevirir. Bir programda adım adım ilerlerken debugger'ın sana gösterdiği şeyin yazılı kaydıdır.

Yapay zekâ bilmediğim bir dildeki kodu açıklayabilir mi?

Evet, ve isteyebileceğin en faydalı şeylerden biri bu. Bildiğin bir dili söyle ve modelden karşılaştırma yapmasını iste: "Python biliyorum; bu Rust kodunu açıkla ve Python'dan farklı davrandığı yerleri göster." Açıklamalar ayrıntılarda kendinden emin şekilde yanlış olabildiği için dil davranışıyla ilgili iddiaları küçük örnekler çalıştırarak kontrol et.

Kod açıklatmak için yapay zekâ kullanmak öğrenmeye zarar verir mi?

Sonra ne yaptığına bağlı. Bir açıklamayı okuyup geçmek az şey öğretir. Kodu çalıştırmadan önce çıktıyı tahmin etmek, modelden seni sınamasını istemek ya da kodu ona geri anlatıp neyi yanlış anladığını sormak düşünmeyi senin yapmanı sağlar ve öğrenme orada gerçekleşir.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA