Kod yazılımcılar arası bir iletişim dilidir

Bir yazılımcı olarak kod nedir diye hiç düşündün mü? Etrafta duyduğun basmakalıp tanımlar haricinde sen kodu nasıl tanımlardin? Problemleri çözmek için bilgisayara verdiğin digital talimatlar mı? Yoksa tekrarlı işleri otomasyona bağladığın, aklındaki fikirleri digital ortama aktarmanı sağlayan yardımcı bir araç mı?

Basmakalıp tanımlamaları bir kenara bırakarak biraz da Kod'un gerçek yüzüne ve çok önemli olmasına rağmen yazılımcılar tarafından fazla değer görmeyen bir tanımına bakalım.

Bildiğin gibi sen dahil her yazılımcının yazılan kodlarla gitgelli bir ilişkisi var. Yazmaktan keyif aldığın kodlar yeri geliyor başının tatlı belası haline gelebiliyorlar. Yazılan her kod yönetilmeli, buglardan arındırılmalı, güncelliğini ve sürdürülebilirliğini koruması için düzenli olarak bakımı yapılmalıdır. Bu yüzden yazılım alanında karşılaştığın problemleri kod yazmadan çözebiliyorsan kodun getirdiği birçok külfetten de kurtulmuş oluyorsun. Olmayan kod sana yeni bir bug'a sebep olmayacağı için bakımını da yapmak zorunda kalmıyorsun.

Bu yüzden doğruluğuna ne kadar katılmış olsam da kod yazmayı keyif verici bir aktivite olarak gördüğüm için "Kod sizin düşmanınızdır" gibi bir cümle kullanmak istemem. Bunun yerine en iyi kod olmayan koddur gibi bir tanımlamayı tercih ederim. Şimdi kodun bu yüzünü bir kenara bırakıp asıl mevzuya gelelim. Çoğu yazılımcı tarafından pek bilinmeyen, belki de sektördeki basmakalıp tanımların yeteri kadar sorgulanmamasından dolayı farkındalığı fazla oluşmamış bir olgu olarak Kod'a başka bir perspektiften bakalım.

Kod, diğer yazılımcılarla iletişim kurmak ve bilgisayara talimatlar vermekle ilgili digital bir kavramdır. Öyle ki yazılım geliştirmenin bir takım oyunu olduğunu hatırlayıp, yazılımcıların zamanlarının çoğunu kod okumakla geçirdiğini göz önüne alırsak, birinci tanımın ikincisine göre çok daha önemli olduğunu anlarız. Neden mi? İşin teknik olarak biraz daha derinine inelim ve derleyicileri ele alalım.

Derleyiciler yazılımcıların yazdıkları kodları makine diline çevirme görevini üstlenirler. Yazılan kodlar nihayetinde sıfırlara ve birlere dönüştürülür ve bilgisayarın anlayacağı talimatlar haline getirilir. Kodlar sonuçta bilgisayarın anlayacağı dile çevriliyorsa neden araya derleyiciler gibi katmanlar sokarak işleri daha karmaşık bir hale getiriyoruz?

Makine dilinde veya 0 ve 1'ler ile kod yazdığını hayal edebiliyor musun? Yazmayı bir kenara bırak başkası tarafından bu şekilde yazılmış kodları okuduğunu bir hayal et? Böyle bir aktivite hepimiz için işkence veren bir aktivite haline dönüşürdü ve verimliliğimizi ciddi oranda düşürürdü. Bu nedenle makine dilinden bağımsız, makinelerin okuyacağı değil de insanların okuyacağı daha yüksek seviyede diller icat ettik. Bu da yazılım geliştirmenin insanlar tarafından daha anlaşılabilir bir forma dönüşmesini sağladı.

O yüzden kod yazılımcılar arasındaki iletişim ile ilgilidir ve bir insan dili olarak görülmelidir. Bu bağlamda baktığımız da aslında kod; spesifik bir programlama dilinden bağımsız olarak bir yazılımcının öğrenmesi gereken en iyi iletişim dilidir. Tanımladığın her değişken, yazdığın her satır kod diğer yazılımcılar tarafından okunur ve anlamlandırılır. Bir probleme çözüm olarak yazılan kod, bilgisayara digital talimatlar verirken onu okuyan tarafından anlamlandırıldığında problemin tanımı ve çözümüne dair bir rehber görevi de görür.

Kod tıpkı bir kitabe gibi ilk yazıldığı günden itibaren sürdürülebilirliğini korumalı ve yazılımı geliştiren takımlar hatta şirket yönetimi değişse dahi yıllar sonra aynı kalite, basitlik ve anlaşılabilirliğini koruyabilmelidir. Bu bağlamda bakıldığında okunabilir, basit ve sade bir biçimde yazılan kodun ne kadar önemli olduğunu anlayabiliriz. Debug edilmesi zor, okurken okuyucusuna zaman kaybettiren, kodlayan kişinin kendini zeki göstermek adına fazlaca akıllı bir şekilde yazılan kodların, bu perspektiften bakıldığında kötü bir iletişim biçimi olduğu kolayca görülebiliyor.

Hepimiz insan olarak anlaşılmak isteriz ve konuşurken de bölünmeden karşıdaki kişi tarafından dinlenmek isteriz. Bunun için de konuşurken kelimeleri özenle seçip, gelişi güzel uzun cümleler kurmaktan kaçınırız. Biliriz ki en iyi konuşma ve anlaşılma biçimi, gereksiz teferruatlardan arındırılmış, yalın ve direkt olarak ana fikre odaklanan açıklayıcı konuşma biçimidir. Tıpkı günlük konuşma dilinde olduğu gibi yazdığın kodları da bu doğrultuda yazmak, kodu okuyan yazılımcı tarafından kolayca anlaşılabilmeni sağlar. Bu yüzden yazdığın kodların okuyucusuna (buna kendin de dahil) konuştuğunu ve anlaşılmak istediğini akıldan çıkarmamakta fayda var.

Olaylara farklı açılardan bakabilmek, yaptığımız rutin işleri (kodlama gibi) neden ve niçin yaptığımızı sorgulamak o konuda farkıdalığımızın artmasına yardımcı oluyor. Bir dahaki sefere, kod yazmak için bilgisayar başına oturduğunda, bu konuda farkındalığın artmış ve daha bilinçli olacağına dair inancım var. Bu farkındalıkla yazılan kodlar başta kendine daha sonra da takım arkadaşlarına, hatta gelecekte yazılımı devralacak diğer yazılımcılara karşı yerine getirilmesi gereken bir sorumluluktur. Basit, okunabilir ve anlaşılabilir kod yazmak, daha iyi bir iletişim kurmanın ve kaliteli, sürdürülebilir yazılımlar yazmanın anahtar noktasıdır. Yazıyı bu bağlamda güzel bir sözle bitirmek istiyorum:

Any fool can write code that a computer can understand. Good programmers write code that humans can understand. ― Martin Fowler