Sadelik her zaman okunabilirliği arttırır mı?
Belki biraz tartışmalı olabilir, kesinlikle olmaz derdim .
Genel arayüzünde 200 üye işlevli bir sınıfı bana verebilirsiniz, ve orada insanca okunabilen en genel arayüz olabilir. Bu kod ve dokümantasyonunu sadece rasgele okuyan bir sevinç olabilir. Bununla birlikte, "basit" olarak adlandırmazdım, çünkü okunabilirliğe rağmen, tüm bu işlevlerin birbiriyle nasıl etkileşimde bulunduğuyla ilgilenmek zorunda kalacak ve kötüye kullanımdan kaynaklanan zor durumlara dikkat etmem gerekecek.
200'e kadar okunması kolay olmayan 20 üye işlevine sahip bir sınıfı tercih ederdim, çünkü “okunabilirlik” insan hatasını önlemek ve kodun korunabilirliğini geliştirmek açısından benim için en önemli öncelik değil (ki değiştirebiliriz, yani).
Ancak, bu bizim kişisel "basitlik" tanımımıza dayanacaktır. "Okunabilirlik" tipik değişmez olduğu birisi bize ölümlüler kalanını unutmak örneğin çok "okunabilir" olarak regex düşünün o kadar çok uzmanlık ve akıcılık satın aldı sürece aramızda çılgınca.
Basitlik
Uzun zaman önce, "basitliğin" "mümkün olduğunca kolay okunması" anlamına geldiğini düşündüğüm bir zaman vardı. Bu yüzden, C kodunu bir çok kolaylık işleviyle yazıp, sözdizimini geliştirmeye ve her şeyi olabildiğince kolay okuyup yazmaya çalışırdım.
Sonuç olarak çok büyük, zengin, üst düzey kütüphaneler tasarladım, sonuçta her doğal insan düşüncesi için bir işlev modellemeye çalıştım: her biri müşteri kodunu daha okunaklı bir sözdizimine biçimlendirmek için yardımcılara yardım edenlere yardımcı oldu. O zaman yazdığım kod en "okunabilir" olabilirdi, ama aynı zamanda en "sürdürülemez" ve "karmaşık" idi.
yanlış telaffuz
Ancak 90'ların ortalarında (geç kalan) LISP ile kısa bir tutkum vardı. Tüm "basitlik" fikrimi değiştirdi.
LISP olduğunu değil en okunabilir dili. İnşallah kimse, CDR'leri ve CAR'ları çıkarırken, bir tekne dolusu parantez içerisindeki özyinelemeli bir işlevi çağırırken çok "okunabilir" olduğunu düşünmez.
Yine de, beynimi dilin garip sözdizimine sarmak ve işlerimi tamamen özyinelemeli yollarla sarmak için uğraştıktan sonra, basitlik fikrimi kalıcı olarak değiştirdi.
LISP’de yazdığım kodla bulduğum şey, artık bu şekilde düşünmemenin hilesi daha bariz hatalar yapmamı sağlasa da (ama bunların farkına varmak ve düzeltmek kolaydır). Bir fonksiyonun ne yaptığını ve incelikli, beklenmedik bir yan etkiyi kaçırdığını yanlış anlamadım. Genelde değişiklik yapmak ve doğru programları yazmakta daha kolay zaman geçiriyordum.
LISP'den sonra bana basitlik , sonsuz çeşitlilikte bir araya gelen minimalizm, simetri, esneklik, daha az yan etki, daha az ama daha esnek fonksiyonlar oldu.
Zihniyetin en güvenilir kodunun var olmayan kod olduğunu anlamaya başladım. Sadece ham bir metrik olmasına rağmen, miktarına bağlı olarak kodun güvenilmezliği potansiyelini görmeye meyilliyim. En üst sözdizimsel rahatlığı ve okunabilirliği aramak, bu miktarı büyük bir faktörle artırma eğilimindedir.
Minimalizm
İçimdeki LISP zihniyetiyle minimalist API'leri tercih etmeye geldim. Daha az kullanışlı, esnek fonksiyonlara sahip, daha az kullanışlı ve okuması daha zor, "uygun" yardımcılar sunan ve kodun "okunmasını kolay" ancak potansiyel olarak açılmasını kolaylaştırabilecek olanlardan daha zor olan bir kütüphaneyi tercih ederim. Güvenilmezlik ve sürprizlerle ilgili daha fazla sorun, bu binlerce işlevin ne yaptığını yanlış anlamadan kaynaklanıyor.
Emniyet
LISP ile ilgili diğer bir şey güvenlikti. Minimal yan etkiler ve saf işlevler sağladı ve bu dilde okuma ve yazma zorluğu 10 saniye sonra farkedebildiğim kadar bariz hatalar artmasına rağmen artık kendimi ince hatalar yaparken görmedim.
Saf fonksiyonlar ve değişmez durumlar, ne zaman sözdizimi olsa bile, karşılayabileceğim her durumda benim için tercih edildi.
sword = sharpen(sword)
... insan düşüncesinden biraz daha az basit ve kopuktur:
sharpen(sword)
Okunabilirlik VS. Basitlik
Yine, LISP en "okunabilir" dil değil. Küçük bir kod bölümüne (büyük olasılıkla her satırda birden fazla insan düşüncesi) çok fazla mantık toplayabilir. İdeal olarak satır başına bir insan düşüncesini "okunabilirlik" olarak tercih etme eğilimindeyim, ancak zorunlu olarak "sadelik" için degil.
Bu tür bir "basit" tanımı ile, bazen "basit" aslında "okunabilir" ile rekabet edebilir. Bu, bir arayüz tasarımı açısından daha fazla şey düşünüyor.
Basit bir arayüz, onu kullanmak için daha az şey öğrenmeniz gerektiği ve minimalizminin sonucu olarak potansiyel olarak daha yüksek güvenilirlik ve daha az getiri elde edeceğiniz anlamına gelir. Konuyla ilgili kapsamlı bir belge, çok sayıda kitap yerine bir kitapçığa sığabilir. Bununla birlikte, biraz daha sağlam çalışma gerektirebilir ve daha az okunabilir kod verebilir.
Bana göre "basit", sistemimizdeki işlevselliği geniş bir seviyede anlama yeteneğimizi geliştirir. Bana "Okunabilir", her küçük kod satırını doğal dile ve düşünceye bağlama yeteneğimizi geliştirir ve özellikle de dilde akıcı değilse, bir kod satırının ne yaptığını anlamamızı hızlandırabilir.
Regex "son derece basit" olarak düşündüklerimin bir örneği. Kişisel zevkime göre "çok basit ve okunamaz". Bu aşırı uçlar arasında benim için bir dengeleyici hareket var, ancak regex benim tanımladığım gibi LISP benzeri sadelik kalitesine sahip: minimalizm, simetri, inanılmaz esneklik, güvenilirlik, vb. akıcı olacağımı sanmadığım noktaya o kadar okunaksız hale geldi (beynim sadece bu şekilde çalışmıyor ve regex kodunu akıcı bir şekilde yazabilen insanları kıskanıyorum).
Her neyse, bu benim "basitlik" tanımımdır ve "okunabilirlikten" tamamen bağımsızdır ve bazen daha "sözdizimsel olarak uygun" ve okunabilir ancak daha büyük bir kütüphane ya da "sözdizimsel olarak" daha büyük bir kütüphane ya da "dengeleyici bir harekete yol açabilir uygunsuz ", daha az okunabilir, ancak daha küçük kütüphane. Ben her zaman gerçek “anlama rahatlığı” ve gerçek “sürdürülebilirlik” önceliklerini, ikincisi ile uyumlu hale getirme önceliklerini buldum, hatta bir miktar maliyetle okunabilirlik ve daha doğal insan sözdizimi için (ancak regex için değil) minimalizm yönündeki güçlü tercihle . YMMV.