Hayatını Refactor Et: Minimalizm, Temiz Kod ve Fazlalıkların Sessiz Gürültüsü

Bir yazılımcının ekranındaki dağınık kod ile bir insanın dolabındaki kullanılmayan eşyalar arasında gizli bir akrabalık vardır. İkisi de bir zamanlar gerekli görünmüştür. İkisi de “belki lazım olur” bahanesiyle orada kalmıştır. Ve ikisi de sonunda sistemi yavaşlatır: biri programı, diğeri zihni. Minimalizm ile temiz kodun ortak derdi aslında aynıdır: çalışmayanı değil, çalışsa bile gereksiz olanı fark etmek.

Temiz kod yalnızca bilgisayarın anlayacağı komutlar yazmak değildir; gelecekteki insanın, yani çoğu zaman bizzat kendimizin, ne anlatılmak istendiğini anlamasını sağlamaktır. Minimalizm de yalnızca az eşyaya sahip olmak değildir; yaşamın okunabilirliğini artırmaktır. Karmaşık bir fonksiyonun içinde kaybolmakla, ağzına kadar dolu bir odada nefes alamamak aynı deneyimin iki farklı arayüzüdür.

Fazlalık Bir Hata Değil, Bir Semptomdur

Kötü yazılmış kod genellikle kötü niyetten doğmaz. Aceleden, korkudan, belirsizlikten ve “şimdilik böyle kalsın” cümlesinden doğar. Hayattaki fazlalıklar da böyledir. Kullanmadığımız nesneler, yarım kalmış planlar, gereksiz ilişkiler, otomatik tepkiler ve zihinsel gürültüler çoğu zaman birer eşya değil, ertelenmiş kararların tortusudur.

Bir kod tabanında kullanılmayan değişkenler, tekrar eden bloklar ve belirsiz isimler varsa, sistem teknik borç üretir. Yaşamda da benzer bir borç vardır: psikolojik borç. Her gereksiz şey dikkatinizden küçük bir vergi alır. Her ertelenmiş mesele arka planda çalışan bir süreç gibi bellek tüketir. Bilgisayar buna RAM der; insan buna yorgunluk.

Refactor: Yıkmadan Yeniden Düzenlemek

Temiz kodun en zarif kavramlarından biri refactor etmektir. Refactor, çalışan bir sistemi bozmadan iç yapısını iyileştirmektir. Minimalist yaşamın da en olgun hali budur. Her şeyi yakıp dağa çıkmak şart değildir. Bazen yalnızca bir fonksiyonu bölmek, bir değişkenin adını değiştirmek, bir bağımlılığı azaltmak yeterlidir. Hayatta da bazen devrim değil, iyi adlandırılmış bir niyet gerekir.

Mesela “daha iyi yaşamak istiyorum” çok genel bir fonksiyon adıdır. Ne yaptığı belli değildir, test edilemez. Buna karşılık “her sabah telefona bakmadan önce on dakika yürümek” daha temiz bir koddur. Girdisi, çıktısı ve davranışı nettir. Zihin belirsizlikten hoşlanmaz; belirsizlik, iç dünyamızın spagetti kodudur.

Minimalizm burada estetik bir moda olmaktan çıkar, bilişsel bir optimizasyon tekniğine dönüşür. Amaç boş duvarlara bakıp kendini ermiş sanmak değildir. Amaç, karar verme maliyetini azaltmak, dikkat bant genişliğini korumak ve anlamlı işlere daha fazla işlem gücü ayırmaktır. Kısacası mesele az şeye sahip olmak değil, sahip olduklarının seni yönetmemesidir.

Okunabilir Bir Hayat Mümkün mü?

İyi kod kendini açıklamak için bağırmaz. Doğru isimlendirilmiş, gereksiz tekrarları azaltılmış, sorumlulukları ayrılmıştır. İyi bir hayat da böyledir: her an dramatik açıklamalara ihtiyaç duymaz. Ne için çalıştığınız, kime zaman ayırdığınız, neye hayır dediğiniz ve neyi koruduğunuz okunabilir hale gelir.

Burada temiz kod prensipleri şaşırtıcı biçimde varoluşsal prensiplere dönüşür. “Tek sorumluluk ilkesi” der ki bir sınıfın değişmek için tek nedeni olmalıdır. İnsan için de benzer bir bilgelik var: Her role aynı anda tutunmaya çalışma. Herkesi memnun etmek, her projede bulunmak, her tartışmaya girmek, kişiliği çok amaçlı ama kırılgan bir sınıfa çevirir. Sonra küçük bir değişiklik bütün sistemi çökertir.

“Kendini tekrar etme” ilkesi de yalnızca kod için değil, davranış için önemlidir. Aynı hatayı farklı dekorlarla yaşamak, ruhsal düzeyde kopyala-yapıştır programlamadır. Jungiyen bir gözle bakarsak, tekrar eden desenler gölgenin imza dosyalarıdır. Onları silmek yetmez; neden üretildiklerini anlamak gerekir. Yoksa bastırılmış kod başka bir modülde yeniden belirir.

Elbette her optimizasyon iyi değildir. Erken optimizasyon yazılımda nasıl bir tuzaksa, hayatta da aşırı sadeleşme bir performans takıntısına dönüşebilir. İnsan bir algoritma değildir; bazı verimsizlikler oyun, sanat, dostluk ve merak olarak hayatı güzelleştirir. Temiz kod donuk kod demek değildir. Minimalizm de steril bir boşluk değil, anlamlı karmaşıklığa yer açmaktır.

Sonuçta hem kodda hem hayatta asıl soru şudur: Bu şey gerçekten çalışıyor mu, yoksa sadece orada durduğu için var mı sanıyorum? Bazen en büyük ilerleme yeni bir özellik eklemek değil, gereksiz olanı silmektir. Çünkü sadeleşmek eksilmek değil; sistemin gerçek amacını daha net duyacak kadar gürültüyü kısmaktır. Hayatınızı refactor edin: önce küçük bir fonksiyondan başlayın.

Sınıf Babadan Kalır mı? OOP Mirası, Genetik ve Kuşak Çatışmasının Kod Hali

Bir yazılımcı için inheritance, yani miras, kulağa neredeyse aile toplantısı gibi gelir: Bir üst sınıf vardır, çocuk sınıflar vardır, herkes bir şeyler devralır, bazıları memnundur, bazıları ise içinden sessizce refactor etmek ister. Genetikte de tablo çok farklı değildir. Göz renginden metabolizmaya, yatkınlıklardan davranış örüntülerine kadar biyolojik kodlar kuşaktan kuşağa aktarılır. Fakat mesele yalnızca aktarım değildir; asıl hikâye, devralınan şeyle ne yapıldığıdır.

OOP’de bir sınıf başka bir sınıftan türediğinde, üst sınıfın özelliklerini ve davranışlarını alır. Diyelim ki bir Canli sınıfımız var: solunum yapar, beslenir, çoğalır. Bundan Memeli sınıfı türetiriz; sonra Insan. Kodda bu pratik görünür. Aynı mantık biyolojide de vardır: Önce ortak özellikler, sonra özelleşmeler. Fakat işin dramatik kısmı burada başlar. Çünkü her çocuk sınıf, üst sınıfın her davranışını aynen taşımak zorunda değildir. Override eder. Yani der ki: Bunu senden aldım ama böyle kullanmayacağım.

Kuşak çatışması bir override problemidir

Anne babanın çocuğuna devrettiği şey yalnızca genetik değildir; alışkanlıklar, korkular, ekonomik refleksler, sevme biçimleri, susma teknikleri ve öfke protokolleri de aktarılır. OOP diliyle söylersek, aile bir base class gibi çalışır. Çocuk ise ondan türeyen ama kendi runtime koşullarında çalışan yeni bir sınıftır. Sorun, üst sınıfın kendi metodlarının evrensel olduğunu sanmasıyla çıkar. Baba sınıfı şöyle der: calis() metodu böyle yazılır. Anne sınıfı ekler: guvendeKal() metodu asla değiştirilmez. Çocuk sınıf ise çağın API’larına bakar ve cevap verir: Bu sistem artık başka bağımlılıklarla çalışıyor.

Programlamada kötü miras tasarımı, bağımlılık cehennemi üretir. Bir alt sınıf, üst sınıfın gereksiz tüm yükünü taşımaya mecbur kalırsa esneklik kaybolur. Buna kırılgan temel sınıf problemi denir. Biyolojik ve kültürel düzeyde de benzeri yaşanır. İnsan, atalarından gelen kodları taşır; ama bütün kodlar bugünün dünyasında anlamlı değildir. Bir zamanlar hayatta kalmayı sağlayan aşırı tetikte olma hali, modern ofiste anksiyeteye dönüşebilir. Bir zamanlar kabileyi koruyan içe kapalılık, bugün iletişim krizine neden olabilir.

Burada önemli ayrım şudur: Miras kötüdür demek sığ bir sonuç olur. OOP’de inheritance doğru yerde kullanıldığında güçlüdür. Ortak davranışı tekrar yazmayı önler, sistemi anlaşılır kılar, soyutlamayı kuvvetlendirir. Genetik miras da böyledir. Bedenimiz milyonlarca yıllık başarılı denemelerin arşividir. Reflekslerimiz, bağışıklığımız, öğrenme kapasitemiz bu büyük kod tabanından gelir. Fakat hiçbir ciddi yazılımcı, eski kod çalışıyor diye ona dokunmama dogmasına tapmaz. Çalışan kod da incelenir, test edilir, gerekirse yeniden tasarlanır.

Kompozisyon mu, miras mı?

Modern yazılım tasarımında sıkça duyulan ilke şudur: Miras yerine kompozisyonu tercih et. Yani bir nesnenin ne olduğundan çok, hangi yetenekleri bir araya getirdiğine bak. Bu fikir kuşak çatışmasına da şaşırtıcı biçimde uyar. İnsan yalnızca ailesinin alt sınıfı değildir. Sadece soyadından, genlerinden, çocukluk klasöründen ibaret değildir. Okudukları, dostları, şehirleri, başarısızlıkları, terapileri, aşkları ve kayıplarıyla kendini besteler. Yani insan, inheritance ile başlar ama composition ile olgunlaşır.

Kuşaklar arasındaki çatışma çoğu zaman şu yanlış beklentiden doğar: Üst sınıf, alt sınıfın kendisini genişletmesini ister ama değiştirmesini istemez. Oysa polymorphism tam da değişik biçimlerde davranabilme gücüdür. Aynı aileden gelen iki çocuk, aynı yasam() metodunu bambaşka biçimde çalıştırabilir. Biri geleneksel rotayı seçer, diğeri radikal bir kariyer değişimi yapar. Biri şehirde kök salar, diğeri dünyayı gezer. Bu hata değil; sistemin çok biçimliliğidir.

Elbette her override özgürlük değildir. Bazen çocuk, ailesine karşı çıkıyorum sanırken yine aile kodunun tersinden çalışan bir versiyonudur. Babası gibi olmamak için aldığı her karar, hâlâ babayı merkez alan bir algoritmadır. Gerçek özgürlük, mirası inkâr etmek değil, onu okumaktır. Hangi metod bana ait, hangisi devralınmış? Hangi değişken hâlâ çocuklukta set edilmiş? Hangi exception her ilişkide tekrar fırlatılıyor? Kendini tanımak, kaynak kodu açıp korkmadan bakmaktır.

Sonuçta OOP ile genetik arasındaki benzetme bize şunu öğretir: Hiçbir sınıf boşluktan doğmaz, hiçbir insan da sıfırdan yazılmaz. Hepimiz bir kod tabanının devamıyız. Ama iyi haber şu: Devraldığımız her şey kader değildir. Bazı metodları override edebilir, bazı bağımlılıkları silebilir, bazılarını adapter ile dönüştürebiliriz. Kuşak çatışması da belki bir savaş değil, büyük bir refactoring sürecidir. Eski kodu aşağılamadan, yeni sistemi boğmadan, daha temiz, daha esnek ve daha insani bir mimari kurma çabası.

İlk Satırın Gölgesi: Mimari Kararlar Neden Yıllarca Peşimizi Bırakmaz?

Bir yazılım projesinin ilk günlerinde alınan kararlar çoğu zaman masum görünür: Veritabanını şimdilik tek sunucuda tutalım, kullanıcı kimliğini e-posta adresiyle eşleştirelim, modülleri hızlı ilerlemek için aynı kod tabanında toplayalım. Ekip küçüktür, müşteri acele eder, bütçe dardır. Herkes “sonra düzeltiriz” der. Fakat bilişim dünyasında bazı “sonralar”, yıllar sonra milyonlarca kullanıcının, yüzlerce geliştiricinin ve kritik iş süreçlerinin omzuna çöken birer mimari gölgeye dönüşür.

Geri dönüşsüz karar, teknik olarak asla değiştirilemeyecek karar demek değildir. Çoğu sistem yeniden yazılabilir, veri taşınabilir, servisler ayrıştırılabilir. Ancak değişimin maliyeti zamanla öyle büyür ki karar pratikte geri dönüşsüz hale gelir. Bir apartmanın temelini değiştirmek mümkündür; fakat apartman doluyken, çevresinde trafik akarken ve kiracılar her gün yaşamaya devam etmek zorundayken bu iş yalnızca mühendislik problemi olmaktan çıkar. Yazılım mimarisi de böyledir: Kodun altında çalışan iş kuralları, kullanıcı alışkanlıkları, entegrasyonlar ve kurum hafızası vardır.

Küçük Kestirmeler, Büyük Kilitler

En klasik örnek veritabanı seçimidir. Başlangıçta ilişkisel bir model, sipariş ve müşteri kayıtları için son derece mantıklıdır. Ancak sistem zamanla sosyal etkileşim, gerçek zamanlı analiz, belge depolama veya devasa olay akışları üretmeye başladığında ilk model zorlanabilir. Sorun, seçimin “yanlış” olması değildir. Sorun, ilk tercihin bütün uygulamanın varsayımlarına sızmasıdır. Sorgular, raporlar, yetkilendirme kuralları, yedekleme stratejileri ve ekip yetkinlikleri o seçime göre şekillenir. Böylece veritabanı bir araç olmaktan çıkar, sistemin görünmez anayasasına dönüşür.

Monolit mimarisi de benzer bir hikâye anlatır. Erken aşamada monolit çoğu zaman doğru karardır: Dağıtımı basittir, hata ayıklaması daha kolaydır, ekip tek bir bağlamda çalışır. Ne var ki ürün büyüdüğünde küçük bir ödeme değişikliği ile bildirim sisteminin aynı sürüm paketi içinde yaşaması, her yayınlamayı yüksek riskli hale getirebilir. Bu noktada mikroservisler sihirli değnek değildir. Monoliti plansız biçimde parçalara ayırmak, tek bir büyük düğüm yerine yüzlerce küçük düğüm üretmek anlamına gelir. Asıl mesele teknoloji modası değil, bağımlılıkların bilinçli yönetimidir.

Teknik Borç Faizle Çalışır

Teknik borç benzetmesi sık kullanılır, çünkü acı verici biçimde doğrudur. Hız kazanmak için alınan kısa vadeli kararların gelecekte bakım maliyeti vardır. Fakat bu borcun faizi yalnızca kod karmaşıklığı değildir. Yeni geliştiricilerin sistemi anlaması uzar, test yazmak zorlaşır, güvenlik açıkları daha geç fark edilir, ürün fikirleri “altyapı izin verirse” şartına bağlanır. Bir noktadan sonra şirketin stratejisini pazar değil, geçmişte yazılmış kod belirlemeye başlar. İşte mimari kararların en büyük etkisi burada ortaya çıkar: Gelecekte hangi fikirlerin uygulanabilir olduğunu sessizce seçerler.

Bu nedenle iyi mimari, geleceği kusursuz tahmin etme sanatı değildir. Böyle bir tahmin zaten mümkün değildir. İyi mimari; değişmesi muhtemel alanları izole etmek, veri sahipliğini açık tanımlamak, gözlemlenebilirlik kurmak ve geri alma maliyetini erken hesaplamaktır. Bir karar kayda geçirilmelidir: Neyi seçtik, hangi alternatifi neden elemedik, hangi varsayımlara güveniyoruz ve hangi işaretler geldiğinde bu kararı yeniden değerlendireceğiz? Mimari karar kayıtları, gelecekteki ekiplere bırakılmış küçük ama çok değerli zaman kapsülleridir.

En sağlıklı yaklaşım, her bileşeni esnek yapmaya çalışmak değildir; bu da pahalı ve karmaşık bir yanılsamadır. Bunun yerine geri dönüşü zor alanları erkenden tanımak gerekir: kimlik yönetimi, veri modeli, güvenlik sınırları, dış entegrasyon sözleşmeleri ve dağıtım altyapısı. Bu alanlarda yavaş düşünmek, diğer alanlarda hızlı denemeler yapmayı mümkün kılar. Yazılımda özgürlük, hiç bağ kurmamakla değil, hangi bağların bir gün çözülmesinin pahalı olacağını bilmekle başlar.

Az Kod, Çok Ustalık: Neden Kısa Çözümler Daha Zordur?

Programlamada uzun kod bazen çok çalışıldığının kanıtı gibi görünür. Ekranı satır satır dolduran koşullar, döngüler ve yardımcı fonksiyonlar insana üretkenlik hissi verir. Oysa deneyimli geliştiriciler çoğu zaman tersine bir hedefe yönelir: Aynı işi daha az kodla, daha açık biçimde ve daha az hata olasılığıyla yapmak. Bu, tembellik değil; problemin özünü ayıklama sanatıdır. Kısa kod yazmak, tuşlara daha az basmak değil, düşünceye daha fazla emek vermektir.

Satır sayısı değil, zihinsel yük

Bir programın gerçek maliyeti onu ilk yazarken değil, ikinci kez anlamaya çalışırken ortaya çıkar. Kodun bakımını yapan kişi çoğu zaman onu yazan kişi değildir; hatta çoğu projede bu kişi, birkaç ay sonraki sizsiniz. Her gereksiz değişken, tekrar eden kontrol ve özel durum, okuyucunun zihninde taşınması gereken ek bir yük yaratır. Dil ekonomisi tam burada devreye girer: Kod, makinenin çalıştıracağı talimatların yanında insanların okuyacağı bir metindir. İyi kod, yalnızca doğru sonucu üretmez; niçin doğru olduğunu da görünür kılar.

Örneğin aynı doğrulama mantığını beş farklı yerde kopyalamak ilk anda hızlıdır. Fakat kurallar değiştiğinde beş noktayı hatasız güncellemek gerekir. Bu tekrarları anlamlı bir fonksiyonda toplamak, satır sayısını azaltırken değişimin maliyetini de düşürür. Ustalık, tekrar eden şekilleri fark etmek ve onları doğru soyutlama düzeyinde ifade etmektir. Ne çok genel ne de aşırı özel bir yapı seçmek gerekir. Çünkü her soyutlama, gelecekteki değişiklikler hakkında yapılmış bir bahistir.

Kısalık ile sıkıştırma aynı şey değildir

Burada önemli bir tuzak vardır: Daha az kod her zaman daha iyi kod değildir. Bir satıra sığdırılmış, iç içe geçmiş koşullarla dolu bir ifade kısa olabilir ama anlaşılır olmayabilir. Akıllıca yazılmış kod ile numara yapan kod arasındaki fark, açıklıkta görülür. Bir fonksiyon üç satırda işi çözüyor diye başarılı sayılmaz; adı davranışını anlatıyor, girdileri öngörülebilir ve yan etkileri sınırlıysa değerlidir. Dil ekonomisinin amacı karakter sayısını düşürmek değil, gereksiz kavramsal hareketleri azaltmaktır.

Bu nedenle iyi programcı, hazır kütüphaneleri tanır ve tekerleği yeniden üretmez. Sıralama, filtreleme, tarih işlemleri ya da güvenli veri doğrulama için olgun araçlar varken yüzlerce satır özel çözüm yazmak çoğu zaman cesaret değil, maliyet üretmektir. Ancak kütüphane kullanmak da körü körüne kısaltma değildir. Aracın karmaşıklığını, sınırlarını, performansını ve hata davranışını anlamak gerekir. Az kodun arkasında çoğu kez çok bilgi vardır.

Silmek, eklemekten daha zor olabilir

Bir özelliği eklemek görünür bir başarıdır; gereksiz bir özelliği, bağımlılığı veya soyutlamayı silmek ise daha sessiz bir zaferdir. Silmek için sistemin hangi parçalarının gerçekten gerekli olduğunu bilmek gerekir. Bu yüzden refaktörizasyon, estetik bir düzenleme değil, bilgi çıkarma işlemidir. Geliştirici kodu sadeleştirirken sistemin değişmezlerini keşfeder: Hangi kurallar vazgeçilmez, hangi dallanmalar geçmişten kalma, hangi veri yapıları aslında aynı kavramı temsil ediyor?

Sonuçta dil ekonomisi, minimalizm modasından çok mühendislik disiplinidir. En iyi çözüm her zaman en kısa olan değildir; en az sürpriz yaratan, en kolay doğrulanan ve değişime en sakin tepki veren çözümdür. Daha az kod yazmak, problemi küçültmek anlamına gelmez. Tam tersine, problemi yeterince derin anlayıp onun gereksiz kabuğunu soymaktır. Usta programcı, karmaşıklığı ekrana yaymak yerine tasarım kararlarında çözmeye çalışır. Makineye az şey söyleyebilmek için önce probleme çok şey sormak gerekir.

Parlak Bir Fikir Neden Bize Daha Doğru Gelir?

Bir fikrin doğru olmasıyla güzel görünmesi arasında mantıksal bir zorunluluk yoktur. Yine de insan zihni, iyi tasarlanmış bir sunumu, pürüzsüz bir cümleyi, zarif bir grafiği ya da etkileyici bir metaforu çoğu zaman doğruluğun işareti gibi okur. Şık bir slaytta sunulan zayıf bir öneri, dağınık notlar arasında duran güçlü bir kanıttan daha ikna edici görünebilir. Bu yalnızca modern çağın görsel bombardımanına özgü bir zaaf değildir; zihnin belirsizlikle baş etme biçiminin eski ve derin bir sonucudur.

Güzellik, zihnin kısa yolu

Zihin her iddiayı sıfırdan incelemek için ne zamana ne de enerjiye sahiptir. Bu nedenle kestirme yollara, yani bilişsel sezgilere başvurur. Bir bilgi kolay okunuyorsa, akıcı anlatılıyorsa veya tanıdık bir biçimde sunuluyorsa onu işlemek daha az zihinsel çaba gerektirir. Bu rahatlık hissi, farkında olmadan “Bu doğru olmalı” yargısına dönüşebilir. Psikolojide buna işlemleme akıcılığı denir: Kolay kavranan şey, çoğu kez daha güvenilir, daha tanıdık ve daha doğru hissedilir.

Buradaki kritik sözcük “hissedilir”dir. Doğruluk duygusu ile doğruluğun kendisi aynı şey değildir. Bir denklemin simetrik oluşu, bir kuramın sade açıklaması ya da bir siyasi sloganın ritmik yapısı elbette değer taşıyabilir. Fakat estetik haz, kanıtın yerine geçemez. “Doğaya uygun geliyor” cümlesi, bir argümanın test edildiği anlamına gelmez; çoğu zaman yalnızca zihnimizde hoş bir düzen kurduğu anlamına gelir.

Estetik neden ikna eder?

Çünkü güzellik, düzen vaadi taşır. İyi bir anlatı karmaşık olayları neden-sonuç zincirine yerleştirir; iyi bir tasarım dağınık veriyi okunabilir hale getirir. İnsan, rastlantıdan çok örüntüyü sever. Örüntü ise kontrol hissi verir. Bu yüzden dünyayı tek bir anahtarla açıklama iddiasındaki fikirler, çoğu zaman gerçekliğin karmaşıklığından daha çekici görünür. Ne var ki gerçeklik, etkileyici bir poster kadar simetrik davranmak zorunda değildir.

Bilimde bile estetik sezgiler çalışır. Araştırmacılar sade, tutarlı ve zarif kuramları tercih etme eğilimindedir. Bu eğilim bütünüyle irrasyonel değildir; basit modeller bazen daha güçlü öngörüler üretir. Ancak bilimsel tarihin önemli derslerinden biri şudur: Evrenin zarafet anlayışı, insanınkine borçlu değildir. Bir teori güzel olduğu için değil, gözlemlerle sınandığı ve alternatiflerinden daha iyi açıkladığı için kabul edilmelidir. Güzellik, araştırma için iyi bir pusula olabilir; mahkeme kararı değil.

Güzel yalanlara karşı küçük savunmalar

Bir iddia özellikle kusursuz, duygusal veya estetik açıdan tatmin edici geldiğinde kısa bir zihinsel fren faydalıdır: “Bunu güzel bulduğum için mi, yoksa kanıtı güçlü olduğu için mi benimsiyorum?” Ardından kaynağa, karşı örneklere, ölçüm yöntemine ve iddianın yanlışlanabilir olup olmadığına bakmak gerekir. İyi fikirler sorulara dayanır; kötü fikirler ise çoğu zaman yalnızca etkileyici bir ambalaja dayanır.

Estetiği düşman ilan etmek de yanlış olur. Güzel anlatım, gerçeğin anlaşılmasını kolaylaştırabilir; iyi görselleştirme verideki gizli örüntüleri görünür kılabilir. Sorun, estetiğin hakikatin hizmetkârı olmaktan çıkıp onun kılığına girmesidir. En olgun tavır, bir fikrin güzelliğinden zevk almak ama hükmü kanıta bırakmaktır. Çünkü bazen en doğru düşünce ilk bakışta zarif değil, sadece inatla test edilmiş olabilir.