Dostlar, selam. Bugün size, başkasının yazdığı karman çorman bir algoritmayı debug etmeye çalışırken yaşadığım ruh halini anlatacağım. Müşteriden gelen bir proje var, eski bir çalışan yazmış, adam da gitmiş. Kodlar önümde. İlk bakışta, "Pandas ile yazılmış bir veri işleme akışı bu, kolay" dedim içimden. Meğer cehenneme hoş geldiniz yazısıymış.
Python:
def process_data(input_df):
# Magic happens here... or does it?
temp = input_df.apply(lambda x: x2 if x.name != 'id' else x, axis=1)
result = temp.groupby(by=some_obscure_list).agg('sum')
return result # Neden None dönüyor?
Hata logu "KeyError" diyor. Tamam, güzel. Ama hangi key? Nerede? Fonksiyon 150 satır, iç içe 5 tane lambda, 3 tane list comprehension. StackOverflow'da bile böyle bir şey görmedim. Her satırı debug etmeye başladım. Meğerse sorun, 67. satırda, `some_obscure_list` adlı değişkenin içinde, veri setinde olmayan bir sütun adı varmış. Adam hard-code yazmış, kimse de güncellememiş. Kafayı yiyecektim.
En komiği, değişken isimleri: `a`, `b`, `tmp1`, `tmp_final_v2`. Hangi `tmp_final` hangisi? Version 2'si neden `tmp1`den önce çalışıyor? Şaka gibi ama gerçek.
Sonunda, tüm fonksiyonu yorum satırlarıyla (`# TODO: Fix this later`) doldurup, sıfırdan mantığını çıkarmaya karar verdim. Debugger'ı adım adım ilerletmektense, küçük parçalara bölüp her birini test ettim. Bazen başkasının kodunu debug etmek, onu yeniden yazmaktan daha uzun sürüyor. Ama o "Aha!" anı, o bug'ın yerini bulduğun an, tarifsiz bir rahatlama.
Siz de böyle "Bu kodu yazan insana ne oldu acaba?" diye düşündüğünüz, içinden çıkılmaz algoritmalarla karşılaştınız mı? Böyle durumlarda taktiğiniz ne? Doğrudan yeniden mi yazıyorsunuz, yoksa inatla debug mı ediyorsunuz?