Bir tür yazı olarak kodlama
Wyoming'deki Snake River'ın kuzeye kıvrıldığı, genişlediği ve yavaşladığı bir yer var. Geyik nilüferlere göz atar, pelikanlar balık tutar, su samurları oynar. Sonra nehir kendi üzerine kıvrılır ve batıya doğru dağlara doğru yolculuğuna devam eder.
Şimdiye kadarki kariyerime bakarsanız, aynı döngüsel yolu göreceksiniz. Ben bir yazılım geliştiricisiyim, beşeri bilimler öğretmeniyim ve sonra tekrar yazılım geliştiriciye döndüm. Mühendislik ve beşeri bilimler arasında iyi bilinen bir mesafe var, ama o mesafeyi insanların düşündüğünden daha kısa olduğunu bilecek kadar gezdim. Bu arada, nesir dağıtımı yazarlarının tavsiyelerinden bazılarının yazılım yazarları için de değerli olabileceğini fark ettim; sanki kod yazmak bir yazma biçimiymiş gibi.¹
Bir keresinde, bir diziye bir öğe ekleyen, ancak zaten oradaysa öğeyi kaldıran küçük bir işlev yapmam gerekiyordu. Bunun gibi:
toggle([], 1) // should return [1]
toggle([1], 1) // should return []
import _ from "lodash";
const toggle = (arr, item) => _.xor(arr, [item]);
Yine de kısa süre sonra bazı tavsiyeler hatırladım: "Bestelerinizi baştan sona okuyun ve özellikle iyi olduğunu düşündüğünüz bir pasajla karşılaştığınızda, onu silin." Bu, on sekizinci yüzyılın deneme yazarı Samuel Johnson'dan bir ipucu.³ Zekanın ürpertisinin, işlevimi basitleştirmem için bir ipucu olduğunu fark ettim. Şu şekilde değiştirdim:
const toggle = (arr, item) =>
arr.includes(item) ?
arr.filter((x) => item !== x) :
[...arr, item];
Kanımca hayır.⁴ Bazı açılardan daha karmaşık olsa da, yeni işlev ortalama bir kodlayıcı için muhtemelen daha net ve dolayısıyla bakımı daha kolaydı. Bir kod satırı, sözdizimsel olarak basit ancak belirsiz veya açık ancak sözdizimsel olarak karmaşık olabilir. Tıpkı bir nesir dizisi gibi. "Okumak istemediğim o kitabı neden getirdin?" cümlesini bir düşün.⁵ Kıvrımlı bir sözdizimi var ama sözdizimsel olarak basit bir cümleden çok daha anlaşılır, " Myrmecobius özledi." Artık kısa ve öz olmasa da, yeni işlevimi okumak daha kolaydı.
JavaScript'i bilseydi, özlü nesir kralının kendisi de toggle
. F. Scott Fitzgerald bir keresinde takdirle "Hemingway" - söz konusu kral - "sizi sözlüğe götürmez" demişti.⁶ Kullanmış olsaydı, xor
işlevim çoğu okuyucuyu belgelere yönlendirirdi. Bu olmadan, işlev daha ayrıntılı, açık ve bu nedenle daha açıklayıcıdır.⁷
Laconia terimi , Laconia adlı bir bölgede yaşayan ve kelimeleri boşa harcamayan antik çağın Spartalılarından gelir. Bir keresinde bir düşman onlara şöyle yazmıştı: "Eğer Laconia'yı işgal edersem, sizi bu topraklardan sürerim." Cevap yazdılar: "Eğer."⁸
Yazarlıkla ilgili hayran olduğum bir ilke, bir romancı veya gazeteciden değil, bir müze tasarımcısından geliyor. Edwin Schlossberg'e göre iyi yazı, "diğer insanların düşünebileceği bir bağlam yaratır."⁹ Hayal kurmalarına, üzerinde düşünmelerine ve yanıt vermelerine yardımcı olur. Bir müze sergisi gibi, onlara bunu yapmaları için alan sağlar. Benzer bir şekilde, iyi kod okuyuculara yer açar. Akıl yürütmelerine yardımcı olur.
O halde, bir kod yazarının ortalama bir okuyucunun zaten iyi anladığı kalıpları takip etmesi genellikle mantıklıdır. JavaScript geliştiricilerinin çoğu, yukarıda kullanılan üçlüye (soru işareti ve iki nokta üst üste) aşina olsa da , çoğu, bunun gibi bir if-else bloğuyla evinde daha rahattır:
const toggle = (arr, item) => {
if (arr.includes(item)) {
return arr.filter((x) => item !== x);
} else {
return [...arr, item];
}
}
Yazarlar okuyucularıyla empati kurmalıdır ve siz de kodunuzu koruyacak, hatalarını ayıklayacak veya uyarlayacak kişiler için empati kurmalısınız. Yazar siz olduğunuz için okuyucularınızın yerine geçmekte zorluk çekmeniz normaldir. En iyi yazarlardan ödünç alınan iki tekniği deneyin.
İlk olarak, Helen Sword, "yazarken omzunuzun üzerinden bakan belirli insanları gözünüzde canlandırmanızı" öneriyor. Ne de olsa, "en ilgi çekici yazarlar, neredeyse her zaman, kulaklarında kendi sözlerinin yankılanacağı gerçek insanlara - uzmanlar ve uzman olmayanlar, meslektaşlar ve yabancılar - en yakın ilgiyi gösterenlerdir."¹¹ Kodlayıcılar için de akıllıca öğütler.
İkinci bir teknik: Yapabiliyorsanız, kodunuzu bir veya iki gün bir kenara bırakın, sonra ona geri dönün. Neil Gaiman bir keresinde hevesli bir yazara "Kısa öyküyü bitirin, yazdırın, sonra bir çekmeceye koyun ve başka şeyler yazın" demişti. “Hazır olduğunuzda, sanki daha önce hiç okumamışsınız gibi alın ve okuyun. Bir okuyucu olarak memnun kalmadığınız şeyler varsa, bir yazar olarak gidip düzeltin: bu gözden geçirmedir.”¹² Eski yazar Quintilian ayrıca “yazdıklarımızı belirli bir süre bir kenara bırakmamızı” tavsiye etti—
öyle ki, bir aradan sonra tekrar ona döndüğümüzde, sanki bir yenilik ve başkasının işiymiş gibi bir havası olacak; çünkü böylece yazılarımıza yeni doğmuş bir çocuğa gösterdiğimiz tüm şefkatle bakmaktan kendimizi alıkoyabiliriz. ¹³
Yazarlık rehberliğinin farklı türden sembollere uyarlanabilmesi çok şaşırtıcı değil. Bilgi alanları genellikle birbirinin içine sızar veya romancı Charles Johnson'ın güzelce ifade ettiği gibi:
Bir sanatsal ve entelektüel ifade biçimi diğerlerini besler ve besler. Yaratıcılık ve hayal gücü olarak adlandırdığımız her ne ise - bu iki büyük gizem - bazı yaratıcılar için yaşamlarında "küresel" olarak deneyimlenebilir, tek bir ifade biçiminde yerelleşmez, daha çok bir türden diğerine, bir sanatsal veya sanatsal veya sanatsal ya çünkü tüm beşeri bilimler (bilimlerle birlikte) birbiriyle ilişkilidir, birbiriyle bağlantılıdır. ¹⁴
Burada önerilen yaklaşımlarla kendi kodlamanızda deney yapmak, rutininizde bir değişiklik gerektirebilir. Nehir gibi yavaşlayabilmen ve daha düşünceli, daha cömert olabilmen için dolambaçlı bir yol. Öyleyse nehirden bir sayfa al. Doğrusal bir yol izlemez.
Elbette, kodlama-yazma analojisinin sınırlamaları vardır. Örneğin, kaynak kodunda çelişkiler neredeyse yasaklanmıştır ve adaletlerini sanatta, özellikle şiirde bulurlar. Fernando Pessoa'nın Portekizce bilmesem de yüksek sesle okumayı sevdiğim bir şiiri var. O başlıyor:
O şiir,
A dor que deveras sente'yi
bekleyen parmağınızı tamamlayacak bir parmaktır .
Şair, numara yapan kişidir.
Gerçeği o kadar çok taklit ediyor ki,
hissettiği korkunç acıları ve ıstırapları bile taklit ediyor.¹⁵
Pessoa bizi bir an için geleneksel doğru ve yanlış fikirlerini bir kenara bırakmaya davet ediyor. Özür dilemeden bir çelişkiyi dile getiriyor: Şairler kendilerini şiirlerinin arkasına saklıyorlar ve bunu yaparken de onlar aracılığıyla görünür oluyorlar. Boolean mantığını geride bırakan Pessoa, kendi mantığını icat eder. "Şair numara yapan kişidir": "Söylediğim her şeyi uyduruyorum - bu sözler de dahil olmak üzere hepsi yanlış" değilse, bu ne anlama gelir? Bu kendi kendini çürüten bir ifadedir, mantıksal bir yanlışlıktır. Ancak kelimelerin etimolojik köklerine bakarsanız, "O poeta éum fingidor", "Yapan yapandır" anlamına gelir. Mantıklı bir gerçek. Bahsettiği acı simülasyonu gibi, şairin iddiası da yüzeyde yanlış, altında doğru. Kodlama ve şiir, genellikle mantıksız bir dünyayla başa çıkmak için tamamlayıcı stratejiler sunar: kişi çelişkilerden sığınak sağlar,
Dipnotlar
[1]: Kodlama-yazma analojisi, daha önce farklı olsa da Brian Kernighan ve PJ Plauger , Donald Knuth , Richard Gabriel , James Devlin , Jeff Atwood ve Rebecca Sutton Koeser tarafından yapılmıştır . Steve McConnell benzetmeyi eleştiriyor.
[2]: İşte kitaplığın lodash
işlevinin xor
çalışırken bir örneği. Boggle'da kelimeleri bir harf ızgarasında ararsınız. Başka kimsenin bulamadığı bir kelime bulursanız, onun için puan kazanırsınız. Oyunun JavaScript'te bir sürümünü yaptığınızı varsayalım. Bu verilere sahipsiniz:
const wordsFoundByPlayerOne = ["apple", "peel"];
const wordsFoundByPlayerTwo = ["apple", "leap"];
const wordsFoundByPlayerThree = ["apple", "able"];
_.xor(
wordsFoundByPlayerOne,
wordsFoundByPlayerTwo,
wordsFoundByPlayerThree
); // Output: ["peel", "leap", "able"]
[4]: Ayrıca şunun yardımıyla okunabilirliği yüksek bir alternatif oluşturabiliriz Set
:
const toggle = (arr, item) => {
const set = new Set(arr);
if (set.has(item)) set.delete(item);
else set.add(item);
return Array.from(set);
}
[6]: 2019 tarihli bir makalede teknik direktör Gary Gilson tarafından alıntılanmıştır .
[7]: Buna karşılık, blog yazarı Jeff Atwood " Spartan programlama " yı destekledi .
[8]: Plutarch, Konuşkanlık Üzerine .
[9]: Fizikçi Konstantin Likharev tarafından 2021 tarihli bir kitapta alıntılanmıştır .
[10]: 2012'deki "Basitlik Önemlidir" konuşmasında Rich Hickey, kısmen işimizi ilginç kıldığı için programcıların zorluktan korkmaması gerektiğini savunuyor. Ancak işimiz , okul derslerinde olduğu gibi, sıkıcı ve zahmetli arasındaki Goldilocks bölgesine düşerse çok ilginç olacaktır .
[11]: Helen Sword, Şık Akademik Yazma (2012), s. 44. Pek çok yazar, anlaşılırlığını artırmak için çalışmalarını yüksek sesle okur ve kendilerini dinler. Filozof Jonathan Bennett şöyle yazıyor : “Gilbert Ryle bir keresinde bana 'Kulağa iyi gelmeyen göze de iyi gelmiyor' demişti ve bu benim hayatımı değiştirdi. Bu sezgi, her şeyden çok, bana çöp çukurundan düzgün düzyazı düzlüğüne nasıl tırmanacağımı gösterdi.” Kernighan ve Plauger, programlama hakkında benzer bir görüş sunuyor: "Bir kod parçasının açık olup olmadığına karar vermenin yararlı bir yolu, 'telefon testi'dir. Birisi telefonda yüksek sesle okuduğunda kodunuzu anlayabildiyse, bu yeterince açıktır. Değilse, yeniden yazılması gerekir” ( Elements of Programming Style , s. 21).
[12]: Neil Gaiman, “ Yazarlara Tavsiyeler ”.
[13]: Quintilian, Hitabet Enstitüleri .
[14]: Charles Johnson, Yazarın Yolu (2016), s. 23.
[15]: Pessoa, “Otopsikografi”. Çeviren Ryan Wilson, Proteus Bound: Seçilmiş Çeviriler 2008–2020 (2021).
Pek çok faydalı öneri için Shashank Khandelwal ve Asheesh Laroia'ya teşekkür ederiz .