Kod çalışmıyor. Ekran boş, program kapanıyor ya da yanlış sonuç veriyor. Bu noktada her geliştiricinin hayatında kaçınılmaz olan süreç başlıyor: debugging nedir, nasıl yapılır? Debugging nedir teknik olarak tanımlandığında: bir programdaki hataları (bug) tespit etme, analiz etme ve giderme sürecidir. Ama bu tanım, işin ne kadar sezgisel, sabırlı ve sistematik bir uğraş olduğunu tam anlatmaz. Hataların üç ana türü vardır: **Sözdizimi (syntax) hataları:** Kod dili kurallarına uymayan yazımdan kaynaklanır. Parantez eksikliği, yanlış yazılmış anahtar kelime gibi. Bu hatalar genellikle program çalışmadan önce yakalanır. **Çalışma zamanı (runtime) hataları:** Program çalışırken ortaya çıkar. Sıfıra bölme, var olmayan bir dosyayı açmaya çalışma gibi durumlar bu kategoriye girer. **Mantık (logic) hataları:** En sinsi olanı budur. Program çalışır, hata vermez ama yanlış sonuç üretir. Debugging nedir sorusunun asıl zorlu yanı bu tür hatalarla uğraşmaktır. Debugging için kullanılan başlıca yöntemler şunlardır: **Print/log ile takip:** En ilkel ama en sık kullanılan yöntem. Kodun kritik noktalarına değerleri ekrana yazdıran satırlar ekleyerek hangi değişkenin neye eşit olduğunu görmek. Hızlı ve her ortamda çalışır. **Debugger kullanmak:** Geliştirme ortamları genellikle bir debugger aracı içerir. Bu araç, kodu adım adım çalıştırmanızı, değişkenlerin anlık değerlerini görmenizi ve belirli bir noktada durmasını (breakpoint) sağlar. Debugging nedir sorusunun profesyonel cevabı budur. **Rubber duck debugging:** Bir lastik ördek (ya da herhangi bir nesne) karşısına oturup kodu baştan sona sesli olarak anlatmak. Kulağa garip gelir, ama kodu başkasına anlatma zorunluluğu çoğu zaman hatayı fark ettirmeye yeter. **Sorunu izole etmek:** Kodun hangi parçasının hata ürettiğini bulmak için parçaları tek tek çalıştırmak veya devre dışı bırakmak. Debugging nedir sorusunun yanıtı deneyimle derinleşir. İlk dönemlerde her hata bir kriz gibi gelir. Zamanla, bir hatayı izlemek ve çözmek tatmin verici bir bulmacaya dönüşür. Bu perspektif değişimi, iyi bir geliştirici olmanın işaretlerinden biridir.