Kod Kimin İçin Yazılır?

Martin Fowler, Refactoring adlı kitabında şöyle der:

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

Yani, dilimize çevirirsek:

Herhangi bir insan bilgisayarın anlayabileceği kod yazabilir. İyi programcılar ise insanların anlayabileceği kod yazarlar.

Devamlı, farklı eğitim, bilgi ve tecrübe sahibi yazılımcılarla görüşüyorum. Bazen konuya çok uzak insanların olduğu bir dost sohbetinde “programcı” ya da “yazılımcı” olduğumu söyleyince, insanlar çoluk-çocuklarının ya da tanıdıklarının da benzer şekilde programcı olduğunu söylüyorlar. Eğer böyle bir sohbet, İstanbul dışında, taşarada yapılıyorsa, bana bahsedilen kişi, muhtemelen endüstri meslek lisesi mezunudur ya da lise mezunu olup, bilgisayar ve oyun dünyasında ciddi vakit geçiren mesela bir internet cafe çalışanı ya da sahibidir. Bu gibi insanlar, kendi kendine, hem öğrenmek hem de ufak tefek ihtiyaçlarını gidermek hatta para da kazanmak amacıyla, VB, PHP vb. dil ve araçlarla ucundan kıyısından yazılım dünyasına bulaşmış kişilerdir.

Sıklıkla profesyonel ortamlarda üniversite mezunlarıyla, farklı tecrübe ve geçmişe sahip olan gençlerle de karşılaşıyorum. Farklı bölümlerden geliyorlar, Bilgisayar Mühendisliği, Elektrik, Elektronik Mühendisliği, Matematik bölümleri, vs. vs. Çok iyi egitim almış, fen lisesi ya da ünlü özel liselerden gelen, dolayısıyla son derece iyi bir temel eğitime sahip insanlar ciddi oranı oluşturuyor gençlerin arasında. Formal bilgilenmesine daha önem vermiş, master hatta doktora yapmış insanlarla karşılaşıyorum sık sık. Daha olgun, daha gün görmüş, daha sakin düşünen kişiler. Farklı teknolojileri kullanıyorlar: Java, .NET, Php, C/C++, Html, Javascript, mobil teknolojiler, iOS, Android, veri tabanıyla ilgilenenler, adminler, SQL, PLSQL, T-SQL uzmanları, SAP, BI vb. konularda uzmanlar vs. Çok farklı tipte teknolojilerle çalışmalarına rağmen temelde yaptıkları şey aynı; yazılım geliştirmek. Bir şekilde kodla haşır neşir oluyorlar. Farklı teknolojiler de olsa, farklı iş alanları da olsa, farklı pozisyonlar da olsa aslında hepimiz, bir şekilde bir kod parçasının doğru düzgün çalışması için çalışıyoruz.

Bu şekilde görüştüğüm insanlara farklı seviyelerde saygı duyuyorum. Kimine iyi eğitiminden dolayı kimine hiç bir eğitimi olmamasına rağmen gayretinden, öz güveninden ve bunlarla yaptıklarından dolayı saygı duyuyorum. Kimi belli ki stresli ortamlarda sakin kalmayı başarabiliyor, kimi ciddi bir yükü tek başına sırtlamış savaşıyor, bunlar da saygıyı hakediyor. Kimisi teknoloji düşkünü, bir sürü teknolojik yenilikleri öğrenmiş, çevresindekilere de öğretiyor, pek çok teknolojik kararı kendisi almış, teknoloji lideri yani, saygı duyuyorum. Bu sektörde iyi niyetle ve kapasitesinin el verdiği ölçüde üreten herkese çok saygı duyuyorum.

Tüm bu eğitim, teknoloji, gayret, fedakarlık, liderlik vs. vasıflarına saygı duyduğumdan çok daha ötede saygı duyduğum bir olgu var: Anlamak. Anlamak, bilmekten daha değerli hatta yapmaktan bile daha değerli. Çünkü sürdürülebilirlik yapmaktan ziyade anlamakla mümkün. Bu yüzden bu yazıya yukarıdaki Fowler’un cümlesiyle başladım. Yazılımcılar iyi-kötü, bir şekilde kod yazarlar. Ama iyi yazılımcıyla iyi olmayan yazılımcıyı ayıran en temel şey, ne eğitimi ne fedakarlığı ne de yapabilme yeteneğidir. Bence iyi yazılımcıyla iyi olmayan yazılımcıyı ayıran en temel şey, Fowler’ın da işaret ettiği gibi, bilgisayarın anlayacağı koddan çok, insanların anlayabileceği kod yazmaktır.

Benzer şeyi “Code Simplicity” isimli kitabının hemen başında Max Kanat-Alexander şöyle ifade ediyor:

The difference between a bad programmer and a good programmer is understanding . That is, bad programmers don’t understand what they are doing, and good programmers do. Believe it or not, it really is that simple.

İyi programcıyla kötü programcı arasındaki fark anlamadır. Yani kötü programcılar ne yaptıklarını anlamazlar, iyi programcılar ise anlarlar. İster inanın, ister inanmayın ama bu gerçekten bu kadar basittir.

Bence de durum bu kadar basit. Ne yazdığınızın çok fazla bir önemi yok, önemli olan nasıl yazdığınız. Hangi dili kullandığınız, hangi frameworklere daldığınız, ne kadar bilimsel konularda kod yazdığınız, ne kadar eğitimli olduğunuz, vs. vs., bunların hiç bir önemi yok aslında. Tek önemli şey, yazdığınız kodu yazılımcı takım arkadaşınız ne kadar kolay anlıyor, önemli olan bu.

Siz anlamadan, noktası virgülüne kadar her türlü detayını özümsemeden yazdığınız kodun başkası tarafından anlaşılmasını zaten bekleyemezsiniz. Yazılım yeterince karmaşık, dolayısıyla yazılım ürünü olan kod da karmaşık. Kodun yapısında o kadar farklı faktör var ki bazen bir tek satırı anlamak için saatlerinizi verirsiniz. İş mantığı, kodlanan dil, tasarlarken sahip olduğunuz yaklaşımlar ve bundan dolayı taviz verdiğiniz birliktelik (cohesion) ve oluşturduğunuz bağımlılıklar (coupling), sıra dışı durumlar, performans gibi mimari ihtiyaçlar, vs. Ufak bir kod parçasını tüm bu açılardan ele alarak, basit, standartlara uygun, odaklı, tam ve doğru bir şekilde yazmak, yani anlayarak ortaya çıkarmak çok zor hatta bazen bir kişinin yapabileceğinden çok fazla bir iştir.

Yukarıda bahsettiğim, basit gibi görünen programlama faaliyetinin tüm bu zorluklarını aşmanın tek yolu, ne yaptığınızı anlayacak şekilde kod yazmaktır. Öncelikle siz kendiniz için anlamalısınız. Anlamayı, sadece bilmeyi, sorunu çözmeyi değil her yönüyle problemi anlayıp ona yukarıdaki bahsettiğim-bahsetmediğim tüm yönlerine hakim olarak bir çözüm geliştirmeyi hedeflemelisiniz. Bu anlamda malesef VB, PHP vb. dil ve araçlar ile, biraz da büyük şirketlerin yanlış yönlendirmeleriyle, sürükle-bırak mantığıyla program yazılabileceği şeklinde bir algıya sahip olmamız, bence anlama önündeki en büyük engellerimizdendir. Bu sürükle-bırak mantığına artık bir de Google programcılığı eklenmiş durumda ki sormayın gitsin. Ben “… öğrenilmez, Google’dan çözümü bulunur” diyen, üniversite mezunu, Bilgisayar Mühendisi, yıllardır development yapan insanlar tanıdım bu ülkede. Kullandığı dilin en temel özelliklerini bilmeyen, o dil ile ilgili ister okulda ister kursta isterse de evde kitap okuyarak hiç bir formal eğitim almamış insanların yazılım geliştirdiği bir ortamdayız malesef. Eğitimsiz para babalarının, Türk futbolunda her şeyi bilir edasında davranmalarını ezikleyerek eleştirirz ama bu yaptığımızın onların yaptığından farklı olmadığını göremeyiz malesef. Aslında ikisinin de sonucu aynı: Sadece bu topraklarda geçerli ürünler. Bir türlü beklenen patlamayı yapamayan futbolumuz ile Edirne’den dışarıya çıkamayan yazılım ürünlerimizin sebebi aynı olabilir mi? Demek ki önemli olan eğitim değil, kültür. Malesef ne kadar eğitimli olursak olalım bu topraklarda iş yapış şekli hep aynı.

Tonla teknolojiyi bilmektense, az ama bir araya getirip bir çözüm kurgulayabileceğimiz sayıda teknolojiyi bilmeye çalışalım. Her gördüğümüze atlamaktan, her yeni çıkan teknolojiyi öğrenmeye çalışmaktan vazgeçelim, az bilelim ama öz bilelim. Yazdığımız kodun da teknolojik olmasından ziyade ve önce, anlaşılır, kolay okunur, kısa, öz, standart, tam ve doğru olmasına özen gösterelim. Bu konuda burada yazdığım pek çok yazıya göz atabilirsiniz.

Einstein’in dediği gibi “Herkes bilebilir. Önemli olan anlamaktır” (Any fool can know. The point is to understand.)

Dolayısıyla kod önce kendin için sonra arkadaşların için sonra senden sonra gelecekler için yazılır.

Toplam görüntülenme sayısı: 1888