Soyutlamalarım Görmem Gereken Şeyleri Sakladı

Temiz bir soyutlamayı severim. Dağınık ve karmaşık bir şeyi alıp, altındaki karmaşayı gizleyen düzenli bir arayüze sarmakta gerçek bir estetik haz vardır; böylece daha yüksek bir seviyede düşünebilir ve alttaki ayrıntıları unutabilirsiniz. Bu yüzden sürekli soyutlamalara uzandım — erken, hevesle ve fazlasıyla sık. Ve şaşırtıcı sayıda kez, uzandığım soyutlama karmaşıklığı hiç de yönetmedi. Görmeye en çok ihtiyaç duyduğum şeyleri sakladı ve bu ayrıcalık karşılığında bana yeni bir kafa karışıklığı katmanının bedelini ödetti.

Bu zorlu bir dersti, çünkü tam da soyutlama gerçekten iyi ve gerçekten güçlü bir şeydir. Hata onu kullanmak değildi. Hata onu yanlış kullanmak ve temiz yüzeye olan sevgimi iyi bir mühendislik muhakemesiyle karıştırmaktı.

İyi bir soyutlamanın yapması gereken şey

Soyutlamanın ne işe yaradığı konusunda net olmaya değer, çünkü bütün bu başarısızlık gerçek bir şeyin çarpıtılmasıdır. İyi bir soyutlama, şu anda düşünmenize gerek olmayan ayrıntıyı gizler; böylece bütün karmaşayı aynı anda kafanızda tutmadan daha yüksek bir seviyede akıl yürütebilirsiniz. Bu, tüm mühendisliğin en güçlü araçlarından biridir — tartışmasız o araçtır, yani aynı anda hepsini kavramak için fazlasıyla karmaşık sistemler inşa etmenizi sağlayan şeydir.

Bir soyutlama işe yaradığında neredeyse görünmezdir. Tıpkı yanmayı düşünmeden araba sürdüğünüz gibi, altında ne olduğunu düşünmeden onu kullanırsınız. Sınırlı dikkatinizi gerçekten önemsediğiniz seviye için serbest bırakır. İşte hayal budur ve bu iyi bir hayaldir ve gerçektir. Aynı zamanda başarısızlık modunu bu kadar baştan çıkarıcı kılan da tam olarak budur: her soyutlama bunu vaat eder, ama yalnızca bazıları yerine getirir.

Yanlış soyutlamanın bunun yerine yaptığı şey

Kötü bir soyutlama, iyi olanın tam tersini yapar ve bunu dışarıdan neredeyse onunla aynı görünerek yapar. İhtiyaç duymadığınız ayrıntıyı gizlemek yerine, ihtiyaç duyduğunuz ayrıntıyı gizler. Sınırını yanlış yere çizer; öyle ki, akıl yürütmeniz gereken şeyler kendi inşa ettiğiniz bir duvarın öbür tarafında, aniden erişilemez halde kalır.

Ve ilkinin üstüne ikinci bir günah daha işler. Altta yatan karmaşıklığı aslında ortadan kaldırmaz — o karmaşıklık hâlâ oradadır, dokunulmamış halde, yüzeyin altında işini yapmaya devam eder. Soyutlama yalnızca onun üstüne yeni bir katman ekler. Yani şimdi, anlaşılması gereken tek bir karmaşık şey yerine iki tane vardır: alttaki dağınık gerçeklik ve onun üstüne serdiğiniz tam-doğru-olmayan soyutlama, artı aralarındaki her zaman kafa karıştıran ilişki. Düşünmek zorunda olduğunuz şeyi azaltmaya çıkmışken, onu artırmayı başardınız.

Erken soyutlama: anlamadan önce taahhüt vermek

Hatamın en yaygın biçimi çok erken soyutlamaktı. Doğru yapının ne olduğunu bilecek kadar problemi gerçekten anlamadan önce, temiz, genel, zarif yapıyı inşa ederdim. İyi, ileri görüşlü bir tasarım gibi hissettiriyordu. Genellikle bunun tam tersiydi.

Bir soyutlama, temelde, belirli bir biçime verilen bir taahhüttür — sınırların nereye konacağına, neyin gizlenip neyin açığa çıkarılacağına, parçaların nasıl ilişkileneceğine dair bir karardır. Ve biçimlendirdiğiniz şeyi anlamadan önce bir biçime taahhütte bulunmak, yanlış biçimi sabitlemenin güvenilir bir yoludur. Daha kötüsü, bir kez yerine oturduğunda onun üstüne inşa etmeye başlarsınız ve inşa ettiğiniz her yeni şey, öğrenilmiş değil tahmin edilmiş bir yapıya olan yatırımınızı derinleştirir. Erken soyutlama yalnızca yanlış olma riskini taşımaz; kendi yanlışlığını etkin biçimde yerleştirir.

Sızdıran soyutlamalar iki şeyi birden ayıklamanıza yol açar

Kusurlu bir biçimde gizleyen soyutlamalara — çoğunlukla işe yarayan, ta ki yaramayana kadar olanlara — ayrılmış özel bir azap vardır. Soyutlamanın gizlemesi gereken gerçeklikte aşağılarda bir şey ters gittiğinde, sızıntı sizi her iki katmanı da aynı anda anlamaya zorlar: içinde düşünebileceğiniz vaat edilen temiz yüzeyi ve tam olarak gizlemeyi başaramadığı alttaki dağınıklığı.

Bu, eşsiz derecede yorucudur. Soyutlamanın bütün amacı tek bir şey hakkında düşünmenize izin vermekti. Şimdi bir hata sizi iki şey hakkında düşünmeye sürükledi, artı ikisi arasındaki eşleştirme, artı hatanın aslında hangi katmanda yaşadığı sorusu. Soyutlamayı ve onun soyutladığı şeyi aynı anda ayıklıyorsunuz ve yardımcı olması gereken soyutlama, artık sizinle problem arasında fazladan bir engel. Sızdıran bir soyutlama hiç soyutlama olmamasından bile kötü olabilir, çünkü en azından hiç soyutlama olmadığında sizi şaşırtacak tek bir katman vardı.

İhtiyacınız olmayan bir katmanın bedeli

Tam olarak hesaba katmadığım şey, her soyutlama katmanının aynı zamanda bir dolaylılık katmanı olduğudur — sizinle gerçekte olup biten arasında duran bir şey daha. Her şey çalışırken o mesafe faydadır; alt seviyeyi düşünmemenizi sağlayan şey odur. Ama anlamanız ya da hatayı ayıklamanız gereken an, aynı mesafe saf maliyete dönüşür. Her katman bakmanız gereken bir başka yer, kafanızda yapmanız gereken bir başka çeviri, problemin saklanıyor olabileceği bir başka olası konumdur.

Yani kendi bedelini gerçekten ödemeyen bir soyutlama tarafsız değildir. Sistem hakkında akıl yürütmek zorunda kaldığınız her seferinde alınan, sonradan ihtiyaç duymadığınız ortaya çıkan bir kolaylık karşılığında tahsil edilen kalıcı bir vergidir. Bu vergileri hevesle ekleyip durmuştum, temiz yüzeylere kapılmış halde, çoğunun bedelini ödediğimi ve yalnızca bazılarından fayda gördüğümü fark etmeden.

Soyutlamalarınızı somut olandan hak edin

Sonunda işe yarayan disiplin, içgüdümün neredeyse tam tersiydi. Soyutlamaları, eninde sonunda neye ihtiyaç duyacağınıza dair bir tahminden yola çıkarak baştan dayatmayın. Onları somut ve tekrarlanan deneyimden hak edin. Önce o özgül, çirkin, belirli şeyi birkaç kez inşa edin. Gerçek dikişlerin nerede olduğunu hissedin — doğal sınırların gerçekte nereye düştüğünü, hangi ayrıntıların gerçekten bir araya kümelendiğini ve hangilerinin kümelenmediğini. Ve ancak o zaman, gerçeklik size eklem yerlerini gösterdikten sonra, onun gerçekte çizdiği çizgiler boyunca soyutlayın.

İyi soyutlamanın, somut olana dayatılan değil somut olandan keşfedilen bir şey olduğunu zamanla anladım. Onları anlamanın etrafından dolanan bir kestirme yol değil, zaten derinlemesine anladığınız şeylerin bir sıkıştırmasıdır. Bu şekilde inşa ettiklerim — geç, isteksizce, somut bana onların nereye ait olduğunu öğrettikten sonra — gerçekten tutan olanlardı. Erken, zekâ gösterisinden ve estetikten inşa ettiklerim ise, sonraki aylar boyunca kavga ettiklerimdi.

Daha derin ders: soyutlama karmaşıklığı yönetir, anlamanın yerini almaz

Bunların hepsinin indirgendiği şey, soyutlamanın ne işe yaradığına dair bir kafa karışıklığıdır. Ona, problemi anlamanın bir ikamesi olarak uzanmıştım — sanki temiz bir arayüz, alttaki dağınık şeyi gerçekten kavramanın zorlu işini atlamamı sağlayabilirmiş gibi. Sağlayamaz. Soyutlama, zaten anladığınız karmaşıklığı yönetmek için bir araçtır, onu anlama işinden kaçınmak için değil.

Bir şeyi anlamamaktan soyutlama yoluyla kurtulamazsınız. Yalnızca kendi kafa karışıklığınızı daha düzenli görünen bir yüzeyin altına gizleyebilirsiniz; orada, artık temiz bir arayüz giymiş halde, sizi sonradan pusuya düşürmek için sabırla bekleyecektir. Önce şeyi anlayın. Soyutlama ikinci sırada gelsin. Ve bunu yaptığınızda, sınırları yalnızca zarif görünen yerler boyunca değil, anlamanın ortaya çıkardığı dikişler boyunca çizin — herhangi bir şeyin gerçekte nerede olduğunu bilmeden önce yalnızca zarif görünenler boyunca değil.

— Sinyal yok, getiri yok, yatırım tavsiyesi değildir.