Her Yeniden Yazımın Sonuncusu Olacaktı
Sistemimin aynı çekirdek bileşenini üç kez yeniden yazdım. Yamamadım, yeniden düzenlemedim — sıfıra yakın bir noktadan, üç ayrı kez yeniden inşa ettim. Ve her seferinde, bu sürümün gerçek olanı olduğundan emindim: sonunda üzerine kalıcı olarak inşa edeceğim temiz, doğru mimari.
Üst üste üç kez yanıldım, her seferinde tam bir özgüvenle. Yanılmış olmak can sıkıcıydı. Asıl konuşmak istediğim kısım ise tam özgüven, çünkü tekrar eden aynı duyguydu ve onu bir kez bile bir uyarı olarak tanımadım.
”Bu sefer doğru”
Taze bir yeniden yazımla gelen belirli bir keyif vardır. Eski kod bir karmaşa — her ödünü, her yamayı, gerçekliğin sizi bükmeye zorladığı her yeri görebilirsiniz. Kafanızda tertemiz duran yeni tasarımda bunların hiçbiri yoktur. Zariftir. Apaçıktır. Açıkça daha iyidir.
Bu yüzden eski şeyi yıkar ve yenisini inşa edersiniz ve bir süre bu ilerleme gibi hissettirir, çünkü yeni kod gerçekten de daha temizdir. Sonra onu kullanmaya başlarsınız ve bükülme yeniden başlar ve bir süre sonra ikinci bir karmaşanın önünde durup yeniden başlamak için tıpatıp aynı kaşıntıyı hissedersiniz.
Yeniden yazım neden hep daha iyi görünür
Karşılaştırma hileli ve bunu görmem üç tur sürdü. Bir yeniden yazımı değerlendirdiğinizde, taze, idealleştirilmiş bir tasarımı, aylarca gerçek kullanımın sürtünmesini emmiş eski bir tasarımla karşılaştırıyorsunuz. Elbette yenisi daha iyi görünür. Henüz hiçbir sorunla karşılaşmadı.
Eski kod yalnızca kusurlu tasarlandığı için değil, deneyimini giyindiği için de çirkin görünür. İçindeki tuhaf dalların çoğu gerçek uç durumlardan kalma yaralardır — dünyanın ona fırlattığı ve temiz yeni tasarımın hiç hayatta kalmak zorunda kalmadığı şeyler. Her zaman iyi bir tasarımı kötü bir tasarımla karşılaştırmıyorsunuz. Çoğu zaman bir gaziyi bir aceminle karşılaştırıyor ve aceminin ne kadar yarasız olduğuna hayran kalıyorsunuz.
Ödemeye devam ettiğim bedel
Her yeniden yazım koddan fazlasını çöpe attı. Bilgiyi çöpe attı — eski sürümün sessizce başa çıkmayı öğrendiği tüm garip durumların birikmiş, zorlukla kazanılmış ele alınışını. Ve bu bilgi kafamda değil kodda yaşadığı için, yeniden inşa etmek onu yeniden keşfetmek demekti: aynı tuhaf durumlara yeniden çarpmak, aynı sorunları yeniden ayıklamak, çoktan satın aldığım dersler için ikinci ve üçüncü kez ödeme yapmak.
Bir hatayı düzeltip tam da bu hatayı daha önce, artık var olmayan bir kod sürümünde düzeltmiş olduğunuzu fark etmenin kendine özgü bir yorgunluğu vardır. Üçüncü yeniden yazımımın çoğu buydu — ikincisinde çöpe attığım bilgiyi yavaşça yeniden hak etmek.
Altında yatan şey: erken soyutlama
Tüm bu yeniden inşanın asıl motoru, tasarım hakkında nasıl düşündüğümdeki bir hataydı. Yeniden yazmaya devam ettim çünkü sorunu gerçekten anlamadan doğru yapıyı bulmaya çalışmaya devam ettim. Doğru soyutlamayı, yeterince zeki olsaydım, baştan oturup doğru tasarlayabileceğim bir şey gibi ele aldım.
Benim deneyimimde, yararlı soyutlamalar nadiren baştan doğru tasarlanırdı; kullanım yoluyla hak edilirlerdi. Sorunla yeterince uzun süre yaşamaktan, gerçekte nerede büküldüğünü öğrenmekten gelirler — hangi parçaların değiştiğini ve hangilerinin sabit kaldığını, gerçek dikiş yerlerinin nerede olduğunu. Onu baştan tümüyle tasarlamak tahmin etmektir ve her yeniden yazım yalnızca benim yeniden tahmin etmemdi, biraz daha iyi bilgilendirilmiş ama yine de iyi tahmin edecek kadar öğrenmemden çok önce.
Bir yeniden yazım gerçekten ne zaman değer?
Yeniden yazımların her zaman yanlış olduğunu iddia etmek istemiyorum. Bazen bir tasarım gitmesi gereken yere gerçekten esneyemez ve onu yerinde evriltmek sıfırdan başlamaktan daha pahalıya mal olur. Sonunda çizmeyi öğrendiğim ayrım, dürtünün kaynağı ile ilgili.
Soruna dair gerçek bir yeni anlayışla yönlendirilen bir yeniden yazım — “şimdi görüyorum ki tek bir kavram olarak ele aldığım bu şey aslında iki tane” — çoğu zaman gerçek ilerlemedir. Çoğunlukla mevcut koddan duyulan rahatsızlıkla yönlendirilen bir yeniden yazım — “bu çirkin, temiz bir şey istiyorum” — daha sık olarak taze bir boya katı giyinmiş bir devinimdir. Birincisi anlamlı yapısal ilerleme üretmeye daha yatkındır. İkincisi çoğunlukla, yeni şey de çirkinleşene kadar birkaç haftalığına o konuda nasıl hissettiğinizi değiştirir.
Çözüm: gerçekten yapamayana kadar onu yerinde bük
Edindiğim alışkanlık, yeniden yazmayı bir ilk içgüdüden bir son çareye indirgemekti. Beni rahatsız eden bir yapıyla karşılaştığımda, artık önce onu yerinde değiştirmeye çalışıyorum — yeniden şekillendirmeye, yeniden düzenlemeye, ben onu ihtiyacım olan şeye doğru taşırken birikmiş bilgisini korumasına izin vermeye. Tam bir yeniden inşayı, yalnızca düzenlilik duygumu rahatsız ettiğinde değil, mevcut yapı evrilmeye yönelik her girişimle gerçekten savaştığında kullanmak için saklamaya çalışıyorum.
Çoğu zaman, sizi yeniden başlamak istemeye iten rahatsızlık bir hükümdür değil, bir bilgidir. Kodun size nerede acıdığını söylemesidir — ve bu tam da sıfırdan yeniden inşa ederek çöpe atacağınız bilgidir.
Kesinlik asıl ipucuydu
Üç yeniden yazımın hepsinden geçen iplik kötü kod değildi. Bir duyguydu: bu sefer doğru yaptığıma dair temiz, eksiksiz kesinlik. “Bu nihai mimari” her birinden önce esasen söylediğim cümleydi. Bir cümlenin sürekli yanlış çıkması ona olan güveninizi azaltmalı ve yavaşça azalttı.
Henüz stres testinden geçirmediğiniz bir tasarıma dair güçlü kesinlik, içgörüyle aynı şey değildir. Çoğu zaman yalnızca aksini öğretecek yaraların yokluğudur — henüz dünyayla karşılaşmamış bir planın rahat özgüveni. Bu günlerde, yeni bir tasarımın nihai olan olduğundan tamamen emin hissettiğimde, bu duygunun kendisini, sorunla o görüşe güvenilebilecek kadar uzun süre yaşamamış olabileceğime dair bir ipucu olarak ele almaya çalışıyorum.
— Sinyal yok, getiri yok, yatırım tavsiyesi değildir.