Şüphesiz, programlama zor olsa gerek. Dil öğrenmek ve algoritmaları incelemek başka bir şeydir, fakat karmaşık bir emek harcama uygulamasını kodlamaya çalışan bambaşka bir canavardır.
Bir bakıma, temiz kod yazmak çizim, yiyecek pişirme yada fotoğraf çekmeye oldukca benziyor, gerçekte olduğundan daha kolay görünüyor. O süre niçin uğraşayım ki? Bu sebeple yararları buna kıymet.
Niçin Temiz Kod Yazmalısınız?
Temiz kod yazmanın çeşitli yararları vardır. Bunlardan bazıları şunlardır:
- Sorunların çözümü kolaylaşır. Temiz kod hakkında düşünmeye başladığınızda, problem çözme yaklaşımınız değişmiş olur. Kaba çözümler yerine algoritmalarınız ve yazılım tasarımınız daha zarif ve kasıtlı hale gelir.
- Bakım için daha azca süre harcanıyor. Temiz kodun okunması ve anlaşılması daha kolaydır, bundan dolayı belirli segmentlerin gerçekte ne yaptığını anlamaya çalışmak için daha azca süre harcarsınız ve düzeltme, revize etme, genişletme vb.
- Fikirler daha net bir halde iletilir. Öteki programcılarla çalışıyorsanız, temiz kod hepiniz içinde yanlış anlaşılma olasılığını azaltır, bu da uzun solukta daha azca hata anlamına gelir.
Temiz kod yazmaya şu şekilde başlayabilirsiniz. Artık temiz kod yazmanın öneminin bilincinde olduğunuz için, iyi kod yazmak için en iyi 10 ipucumuz.
1. Açıklayıcı Adlar Kullanın
Değişkenler, sınıflar ve işlevler nedir? Bunu cevaplamanın birçok yolu vardır, sadece hakikaten düşündüğünüzde, bu şeyler bir programcı ile bir uygulamanın temel mantığı arasındaki arayüzden başka bir şey değildir.
Bundan dolayı, değişkenler, sınıflar ve işlevler için belirsiz ve açıklayıcı olmayan adlar kullandığınızda, aslına bakarsak kendiniz de dahil olmak suretiyle kodu okuyan herhangi bir programcıdan uygulama mantığını karartırsınız.
“Ben mükemmel bir programcı değilim; Ben bir tek mükemmel alışkanlıkları olan iyi bir programcıyım.”
— Şehir Beck
Bir değişken ne yapar dxy Hakkaten mi? Kim bilir. Muhtemelen anlamını tersine mühendislik yapmak için kodun tamamını okumanız gerekir. Öte taraftan, bir değişkenin anlamı distanceBetweenXY
anında bilinebilir.
Aynı şey sınıflar ve işlevler için de geçerlidir. Bununla yetinme. CalcTan() ne süre gidebilirsiniz CalculateTangent() yada CalcTangentAngle() yerine. Kodu muntazam göstermek için temel ipuçlarından biri açıklayıcı adlar kullanmaktır.
2. Her Sınıfa/İşleve Bir Amaç Verin
Asla yüzlerce hatta binlerce satır uzunluğundaki bir fonksiyonun içine baktın mı? Var ise, göz atabilmenin, anlamanın ve düzenlemenin ne kadar acı olabileceğini bilirsiniz. Yorumlar destek olabilir, sadece yalnızca sınırı olan bir dereceye kadar.
“Programlama, büyük olanaksız bir görevi birkaç ufak ihtimaller içinde göreve bölmektir.”
— Jazzwant
Temiz kod atomik parçalara ayrılır. Her işlev tek bir şey yapmayı hedeflemeli ve her derslik belirli bir terimi temsil etmeyi hedeflemelidir. Bu normal olarak basitleştirmedir, sadece şüpheye düştüğünüzde, daha rahat daha temizdir.
Pratikte, karmaşık bir hesaplama şeklinde GetCreditScore() şeklinde çeşitli destek işlevlere bölünmesi gerekebilir. GetCreditReports(), ApplyCreditHistoryAge()ve FilterOutstandingMarks(). Kolay tutmak, her programcının bilmesi ihtiyaç duyulan temel programlama ilkelerinden bir tek biridir.
3. Gereksiz Kodu Sil
Bu fena alışkanlık, programcıların ara sıra savaşım etmiş olduğu bir alışkanlıktır. Çoğu zaman şu şekilde olur: Bir kod yığınını düzeltmek yada optimize etmek istersiniz, bundan dolayı yorum yaparsınız ve derhal altında bir tekrardan yazma yaparsınız ve işe yarasa bile, her ihtimale karşı eski kodu orada tutarsınız.
“Yazılımın başka bir şeye benzemesi, atılmak istemesi mümkün mü: tüm meselenin onu daima bir sabun köpüğü olarak görmek olması mı?”
— Alan J. Perlis
Zaman içinde, kaynak dosyalarınızı daha çok karıştırmak için artık lüzumlu olmayan oldukca sayıda yorumlanmış kod bloğu biriktirirsiniz. Ve gülünç olan şey, birçok durumda, çevredeki kodun evrimleşmiş olmasıdır, bundan dolayı yorumlanan kod geri yüklense bile çalışmaz.
Sorun şu ki, “yedekleme kodu” yorumunu yapma uygulaması kaynak denetimi tarafınca eskidi. Git yada Mercurial şeklinde bir şey kullanmıyorsanız, kaynak denetimini derhal kullanmaya başlamanız gerekir. Temizleyici kod sizi bekliyor.
Ihmal etmeyin, bir web çerçevesiyle kolayca başarabileceğiniz yinelenen kod yazmaktan kaçınmak da önemlidir. İşte geliştirici olarak öğrenmeye kıymet birkaç web çerçevesi.
4. Okunabilirlik > Zeka
Fazlaca fazla programcı “temiz kodu” “akıllı kod” ile bir araya getirir, sanki on satırı bir araya sıkıştırmak bir halde daha temizdir. Normal olarak, ekranda daha azca yer kaplar, sadece hakikaten idrak etmek daha mı kolay? Kimi zaman, bir ihtimal. Fakat bir çok süre? Hayır.
“Hepimiz hata ayıklamanın ilk etapta bir program yazmaktan iki kat daha zor bulunduğunu biliyor. Kısaca yazarken olabildiğince zekiyseniz, iyi mi hata ayıklayacaksınız?”
—Brian W. Kernighan
Bence programcılar akıllı kodu sever şu sebeple çözülmüş bir bulmaca yada bilmece şeklinde hissettirir. Bir şeyi uygulamak için hususi ve benzersiz bir yol buldular ( isterseniz bir “kısayol”) ve neredeyse programcının becerilerinin doğrulanması görevi görür.
Fakat temiz kod yazmak için egonu kapıda bırakmalısın. Kodu okuyacak bir sonraki şahıs için daima optimize edin, şu sebeple her ihtimale karşı, bir sonraki şahıs aslına bakarsak siz olacaksınız ve zekanızı okuyamamaktan yada anlamamaktan daha utanç verici bir şey yoktur.
5. Tutarlı Bir Kodlama Stili Tutun
İyi programlama öğreticilerine karşı hiçbir şeyimiz yok, sadece dezavantajlarından biri, yeni başlayanların bilhassa kodlama stiliyle ilgili olarak oldukca çeşitli tutarsız alışkanlıklar seçmeleridir.
Buraya bir stilin diğerinden daha iyi bulunduğunu açıklamaya gelmedik. Çizgilerinde diş teli istiyorsanız, bunun için gidin; yöntem çağrılarını boşluklarla öne çıkarmak istiyorsanız, tamam. Sekmeleri boşluklara tercih ediyorsanız, sizi başka türlü ikna etmemize izin vermeyin.
Fakat ne yaparsan yap, tutarlı ol.
Güzel, çirkinden iyidir.
Açık örtük olmaktan iyidir.
Kolay karmaşıktan daha iyidir.
Karmaşa karmaşıktan iyidir.
Düz, iç içe geçmişten daha iyidir.
Seyrek yoğundan daha iyidir.
Okunabilirlik sayılır.
— Tim Peters, Python’un Zen’i
Eğer kullanacaksan. camelCaseNaming değişkenler için, underscore_naming. Eğer kullanırsanız GetThisObject() bir yerde, sakın FetchThatObject() Başka bir yerde. Sekmeleri ve boşlukları karıştırırsanız klavyenizin alınmasını hak edersiniz.
En başından itibaren ne yapacağınıza karar verin ve baştan ve sonlara doğru devam edin. Python ve C# şeklinde bazı dillerde, kovuşturmak isteyebileceğiniz dil çapında yoldam kılavuzları vardır.
6. Doğru Mimariyi Seçin
Projelerinizi oluşturmak için kullanabileceğiniz birçok paradigma ve mimari vardır. Bu ipucunun ihtiyaçlarınız için doğru olanı seçmekle ilgili bulunduğunu, en iyisini seçmekle ilgili olmadığını ihmal etmeyin. Burada “en iyisi” diye bir şey yok.
“Gereksinimler ve tasarım olmadan, programlama boş bir metin dosyasına hata ekleme sanatıdır.”
— Louis Srygley
Mesela, Model Görünüm Denetleyicisi (MVC) deseni web geliştirmede popülerdir, şu sebeple kodunuzu bakım çabalarını en aza indirecek şekilde tertipli ve tasarlanmış tutmaya destek sunar.
Benzer şekilde, Varlık-Bileşen-Sistem (ECS) deseni oyun geliştirmede popülerdir, şu sebeple oyun verilerini ve mantığını, okunması daha kolay kod üretirken bakımı kolaylaştıracak şekilde modüler hale getirir.
7. Dilin Deyimlerinde Ustalaşın
Yeni bir programlama diline hakim etmenin zorluklarından biri, onu öteki tüm dillerden ayıran nüansları öğrenmektir. Bu nüanslar çirkin, dolambaçlı kod ile güzel, bakımı kolay kod arasındaki fark olabilir.
Python, Java ve JavaScript’i göz önünde bulundurun. Hepsi birbirinden son aşama farklıdır ve hangi dili kullanmayı seçtiğinize bağlı olarak değişik bir düşünme şekli gerektirir.
“Programlama ile alakalı fikir tarzınızı etkilemeyen bir dil bilmeye değmez.”
— Alan J. Perlis
Python tamamen kompakt kod ve ördek yazma ile ilgili olsa da, Java daha oldukca detay ve açıklık tarafına doğru. Her dilin belirli bir kodlama yolunu teşvik eden deyimleri (Python’daki sıralama anlamaları şeklinde) vardır. Onları öğrensen iyi edersin.
Ek olarak, verimsiz, güvenilmez yada başka bir halde fena kodla sonuçlanan yetersiz tasarım desenleri olan endişelenmek için “anti-desenler” de vardır. Seçtiğiniz dille ilgili tüm yaygın anti-kalıpları inceleyin ve unsuz.
8. Ustaların Kurallarını Inceleyin
Temiz kod yazmak istiyorsanız, yapabileceğiniz en iyi şey hangi temiz kod tuvaletini görmektir.ks niçin bu şekilde bulunduğunu anlamaya çalışın ve bunu yapmanın sanayi ustalarının kaynak dosyalarını incelemekten daha iyi bir yolu yoktur.
Açıkçası, Microsoft’un merkezine girip projelerine göz atamazsınız, sadece daima tanınmış açık kaynaklı projelere göz atabilirsiniz. Nereden başlayacağımı bilmiyor musun? Deneyin: Github’da sergilenen projeler.
“Herhangi bir aptal, bir bilgisayarın anlayabileceği kodu yazabilir. İyi programcılar insanların anlayabileceği kodlar yazar.”
— Martin Fowler, Tekrardan Düzenleme: Mevcut Kodun Tasarımını Geliştirme
Sonuçta, açık kaynaklı projelerin var olmasının sebeplerinden biri de bu: böylece ötekiler onlardan öğrenebilir. Ve bu şekilde bir projeye katkıda bulunmaya karar verirseniz, öğrenme sürecini hızlandırabilir.
“İyi yorumlar yaz”, programlama dünyasındaki en eski tavsiyedir. Aslına bakarsak, yeni başlayanlar yorumlarla tanışır tanıştırılmaz, olabildiğince sık yorum hayata geçirmeye teşvik edilirler.
Fakat sanki ters yöne oldukca fazla savrulmuşuz şeklinde geliyor. Bilhassa yeni başlayanlar, tanım edilmesi gerekmayan şeyleri açıklayarak ve “iyi bir yorumun” gerçekte ne işe yaradığını özleyen aşırı yorum yapma eğilimindedir.
“Devamlı kodunuzu sakınan adam nerede yaşadığınızı bilen yırtıcı bir psikopat olacakmış şeklinde kodlanın.”
— John Woods
İşte iyi bir kaide: kodun gerçekte ne yaptığından ziyade niçin bir kod parçasının var bulunduğunu açıklamak için yorumlar vardır. Kod yeterince temiz yazılmışsa, ne yapmış olduğu mevzusunda açıklayıcı olmalıdır – yorum niçin yazıldığının arkasındaki niyet üstünde ışık tutmalıdır.
Yorumlar ikazlar için iyi olabilir (mesela, “bunu kaldırmak A, B ve C’yi kırar”) sadece çoğunlukla koddan derhal toplanamayacak şeyleri ortaya çıkarmalıdır (doğrusu, “X, Y ve Z için bu parametreyi kullanın”).
10. Refactor, Refactor, Refactor
Düzenlemenin yazma işleminin bir parçası olması şeklinde, tekrardan düzenleme de kodlama işleminin bir parçasıdır. Tekrardan düzenlemeden nefret etmek, sürdürülemez kodla sonuçlanmanın en süratli yoludur, bundan dolayı birçok yönden, bu aslına bakarsak dikkate alınması ihtiyaç duyulan en mühim ipucudur.
Kısacası, tekrardan düzenleme, kodu gerçek davranışını etkilemeden temizlemek için süslü bir terimdir.
“Kodun ne yaptığını idrak etmek için ne süre düşünmem gerekse, bu anlayışı derhal daha belirgin hale getirmek için kodu tekrardan düzenleme yapmış olup yapamam diye kendime soruyorum.”
— Martin Fowler, Tekrardan Düzenleme: Mevcut Kodun Tasarımını Geliştirme
Bizlere yapışan bilgelikten biri şu sözdür: “Fena kod hakkında yorum yapmayın. Tekrardan yaz”. Fowler’ın yukarıdaki alıntıda açıklamış olduğu şeklinde, kod yorum yapmanız ihtiyaç duyulan kadar kafa karıştırıcı hissediyorsa, kim bilir hakikaten tekrardan düzenlemeniz gerekir.
Ek olarak, projeniz süresince burada ve orada kod bitlerini düzenlerken, kodu daima ilk bulduğunuzdan daha iyi bir durumda bırakın. Şu anda bir sorun şeklinde görünebilir, sadece uzun solukta karşılığını verecektir (ve hatta zihinsel tükenmişliği bile savuşturabilir).
Her Süre Öğrenilecek Yeni Bir Şey Var
Temiz kod yazmayı öğrenen bir programcı, temiz düzyazı yazmayı öğrenen bir romancıya benzer: bunu tek başına yapmanın doğru bir yolu yoktur, sadece bunu yapmanın birçok yanlış yolu vardır ve ustalaşmak seneler alacaktır.
Bazı insanoğlu gerekenlere haiz değildir ve sonunda programlamayı temelli olarak bırakırlar ve bu problem değil şu sebeple kodlama içermeyen birçok başka teknoloji işi vardır. Sadece öteki hepimiz için temiz kod, hayatınızın geri kalanını oraya götürmeniz gerekse bile, kesinlikle çabalamaya kıymet bir şeydir.