Nasıl daha iyi kod yazarız

Bu yıl yazılım dünyasındaki sekizinci senem (Commodore 64 ve Amiga
dönemlerini saymıyorum). Zaman içinde yazılım dillerinin daha da somutlaşması
(Design Patterns, Best Practices, OO ve UML vb) bana dizayn ve mimari konularına
daha fazla eğilmem için zemin hazırladı. 10 sene önce evrenkentte yazdığım kodlara
şöyle  bir bakınca “ben öğretmen olsam buna not vermem” diyorum. Şimdi
yazılım araçlarının daha da gelişmesi, ve bu araçlara erişimin kolaylaşması,
açık kaynak yazılımların çoğalması, dizayn, mimari, güvenlik, yönetim, nesne
yönelimli gibi konular hakkında materyalin daha fazla bulunabilmesi 10 sene önce
hayal bile edilemeyecek bir durumdu.

Bu kadar çok kaynak serbest olarak
erişilebilir olduğu için performansı düşük, anlaşılması zor, bakımı ve
değiştirmesi imkansız kod yazmak günah
olmalı bence. Peki nasıl mükemmelliğe ulaşacağız? Yazdığımız kodu nasıl
daha anlaşılır biçimde üreteceğiz? Dökümantasyonu nasıl daha okunur hale
getireceğiz? Nasıl daha fazla öğrenip uygulayacağız? İşte bu yazımda sizlere
birkaç püf noktası vererek iş kalitenizi arttıracak konulardan bahsetmek
istiyorum.

Yazılım geliştirme olayını bir
bütün olarak ele aldığımızda kod yazmanın çok küçük bir parçayı temsil ettiğini
görüyoruz. Hataların en fazla yapıldığı ve müşteri isteklerinin programa
dönüştürüldüğü geçiş süreci olduğu için de yanlış anlaşılmalara ve
uygulamalara en açık bölüm. Hal böyle olunca buna bir de yazılımcının yetersiz
deneyimini ve yönetimin ilgisizliğini katarsak ortaya
kalitenin çok düşük olacağı bir ürün çıkacaktır. Yazılım uzmanı
kullandığı programlama dilini çok iyi biliyor olabilir.
Yazılımı yapılan işi de bilmek en az programlamayı bilmek kadar
önemlidir. Örneğin muhasebe kurallarını
bilmeden nasıl muhasebe programı yazacağız? Yada diğer sistemlerin girdi
çıktılarını öğrenmeden nasıl entegre bir sistem yazacağız?

Çoğu zaman program geliştirmek;
favori text editörümüzü açıp bir kaç satır kod yazmak, veritabanına iki
üç tablo yerleştirmek ile başlar. Bu
bazı firmalarda dahi böyle. Bu tür bir projeye devam ettiğinizi düşünelim
eminim 5 ay sonra ilk yazılan
kodun tek satırı dahi kalmaz. Diğer bir konuda yazılan kodun müşteri
istekleri ile örtüşmesi. Örneğin yazdığınız bir fonksiyonun hangi müşteri isteği
tarafından kullanıldığını biliyor musunuz?

Kitap Okuyun

Kullandığınız yazılım dili ile ilgili
en az bir referans kitap bulundurmalısınız. Araştırıp en iyisini veya
tavsiye edilenleri alın. Dil ile ilgili kitapların yanında insan ilişkilerini
anlatan kitaplar, proje yönetimini anlatan kitaplar, süreç iyileştirme ile
ilgili kitaplar, IEEE, CMMI yada ISO standart kitapları, UML ve nesne yönelimli
dizayn konularını anlatan kitaplar, kullandığınız yazılım araçlarını anlatan
kitaplar, güvenli kod yazmak ile ilgili
kitaplar sayılabilir. Burada
kitap reklamı yapmayacağım, eğer ilgileniyorsanız benimle bağlatıya geçip bilgi
alabilirsiniz.

Bu kitaplardan öğreneceğiniz yöntemler yazdığınız kodun kalitesini oldukça
arttıracaktır.

Listelere Üye Olun

E-posta listeleri bedava destek alabileceğiniz yerlerden bir tanesi.
Çoğunlukla üretici firmalar tarafından da kontrol edilmekte. Bir listeye üye
olduğunuzda muhakkak liste kurallarını öğrenin. Örneğin nasıl üye olacağınızı
veya üyelikten çıkacağınız iyi bilin. Benim
takıldığım listelere her gün bir kaç kişi direk listeye gönderdiği
UNSUBSCRIBE e-postası ile hem kendini
rezil ediyor hemde üyelikten çıkamıyor. Listede her zaman saygılı olun ve
şakayı yeri gelince kullanın. Şaka yaptığınızı belirtmek içinde 🙂 imleçlerini
kullanın ki herkes şaka yaptığınızı anlasın, aksi takdirde sonu gelmez
tartışmalara girersiniz. Konu
dışı bir şey soracaksanız liste kurallarına göre postayı işaretleyin. Örneğin
benim üye olduğum bir listede OT harflerini konu kısmında görünce konu dışı
olduğunu anlıyorum. Liste üyeleri e-maıl programlarında bu başlıklara göre
kurallar oluşturabiliyor.

Sorduğunuz sorular cevaplanınca teşekkür edin ve daha sonra bir özet postası
atıp problemi nasıl çözdüğünüzü anlatın ki herkes yararlanabilsin. Listedeki
insanlarla fırsat doğarsa tanışmaya çalışın. Listeye sormadan evvel Google’da
arayın.Yüzde 95 ihtimalle sizin karşılaştığınız problem birileri tarafından
zaten çözülmüştür.

Açık Kaynak Araçları Kullanmayı Öğrenin

Eskiden kod yazarken Allah ne
verdiyse harala gürele yazıyorduk. Ne bir dökümantasyon ne bir ünite testi nede
kurulum için herhangi bir şey yapıyorduk.
Programı edinen kişilerin en az bizim kadar bildiğini varsayarak, kurulum
sırasında problem yaşamayacaklarını düşünürdük.
Şimdi o günler geride kaldı. Artık kod yazarken gerekli açıklama
satırlarını XML olarak yazıyoruz. Daha sonra açık kaynak programlar ile bunları
yardım dosyalarına dönüştürmek mümkün. Ünite testleri içinde bir sürü açık
kaynak sistem var. Programı yazmadan önce testini yazıyoruz artık. Sonrada bu
testlerden geçmek için kod yazıyoruz. Sonuçta ortaya çıkan ürün en azından bazı
testleri yapılmış olarak çıkıyor.
Kodun ne kadarının ünite testine girdiğini anlayacak araçlar da var. Testleri
yapılmamış kısımları hemen görmek mümkün. Ayrıca bu işleri tamamen otomatize
edip sonuçları her derleme işleminde görmekte mümkün. Belli kurallara uyulup
uyulmadığını kontrol edecek araçlar da mevcut. Örneğin herkes
member değişkenler için
m kullanmış mı? Bu araçların
bugün mevcut olması bizim için
bulunmaz bir fırsat. Belli bir programlama diline yönelik yazmadığım
için araç isimlerini vermiyorum fakat .NET ile ilgili araç isimlerini
isterseniz benimle bağlantıya geçiniz.

Sürüm ve Konfigürasyon Yönetimi Konusunda Bilgilenin

Bir ekip içinde yazılım geliştirmenin sorumluluğu, diğer kişilerin ne
yaptığını bilmekten geçer. İşlerin paylaştırılması, planların yapılması ve
çalışmaya başlamak için kendi payınıza düşen kod parçasını alıp değiştirmek,
ünite testlerini yapmak ve en sonunda da diğer kişilerin kullanımına açmak
gerekir. Kullandığınız kod kontrol programının özelliklerini öğrenmek bir yana,
proje içinde kullanılan konfigürasyon yönetimi metodunu öğrenmek te çok
önemlidir. Yapılan her işin, üretilen her dökümanın kısacası zaman içinde
değişime uğrayacağını bildiğiniz her türlü materyal kod kontrol sunucularında
tutulmalıdır. Yazdığınız kodun eski sürümüne dönmek yada farklı sürümlerde
paralel geliştirme yapmak ancak bu şekilde mümkün olabilir.

Bir Bilene Sorun

İşte herkesin korktuğu bir olay. Genelde kişiler suçlanmaktan yada küçük
düşmekten korktuğu için soru sormaz. Ama soru sormadan da öğrenme olmuyor.
Yazdığınız bir kodun daha iyi nasıl yazılabileceğini sordunuz mu hiç? Yada bir
problemi en iyi hangi yolla çözebileceğinizi öğrenmek için soru sordunuz mu?
Eğer korkularınız varsa yukarıda anlattığım e-posta listeleri sizin için
biçilmiş kaftan. Kendi isminizi kullanmadan soru sorabilirsiniz. Yada
patronunuzun ismine GMail’de bir hesap açıp onu kullanın
Smile evet bu bir şaka…

Soru soracağınız kişileride iyi belirlemeniz lazım. En azından yeterli
bilgiye sahip olup olmadıklarını anlamaya çalışın. Aldığınız bilgiyi vakit
geçirmeden uygulayın ve sonuçları tekrar bir bilenle tartışın.

Seminerlere Katılın

Yeni ürünleri görmek, yeni insanlarla tanışmak, yaptığınız iş hakkında daha
da fazla bilgilenmek ve sıfatınızın daha da fazla tanınması için en mükemmel
yol. Peki yazdığınız kodun kalitesini nasıl arttıracak? Ben genelde hands-on
denilen oturup kod yazdığımız seminerleri tercih ediyorum. Hem uygulama var hem
öğrenme. Bu arada da kodu nasıl yazmışlar görme imkanımız oluyor. Eğer birinin
daha iyi bir fikri varsa çıkıp söylüyor.

Ürün tanıtım seminerleri de yararlı eğer kod yazmada kullandığınız araçlar
ile ilgiliyse yada üretkenliği arttıracak araçlar anlatılıyorsa. Bu araçlara
erişiminiz olmayabilir fakat en azından böyle bir teknolojinin varlığından
haberdarsınız.

Yeni İnsanlarla Tanışın

İnsan ilişkilerine yukarıdaki paragraflarda değindim. Yeni insanlarla
tanışmak önünüze yeni ufuklar açabilir. Bu kişilerden öğreneceğiniz hiç
bilmediğiniz hiç görmediğiniz yada pek önemsemediğiniz konular problemlerinize
farklı bir bakış açısı katabilir. Yada siz onlara bir şeyler katabilirsiniz.
Yeni insanlarla tanışmak benim hayatımda her zaman değişikliklere yol açmıştır.
Ayrıca iş konuları dışında birlikte yapılacak aktiviteler çok değişik iş
imkanları açabilir.

Blog Yazın/Okuyun

Deminden beri yaptığım olay… Eğer benim blogumu okuyorsanız ne mutlu bana.
Bir iki yorum da atarsanız çok mutlu olurum. Şaka bir yana öğrendiğim konuları
ders notları gibi başkalarına anlatmak amaçlı yazdığımda daha da pekiştiriyorum.
Hatta bazen farklı yollar bile bulmak mümkün oluyor. Ek olarak iş verenler
blogunuzu okuyup ne işler yaptığınızı öğrenebilir ve buna göre size teklifte
bulunabilirler. Blogunuzda belli konulara yönelin ve iş hayatınızda
karşılaştığınız konuları yazın. Tanıdıklarımın bir kaç blogu birden var, bir
tanesi kesinlikle işleri ile ilgili konuları yazmak için diğeri ise sırf geyik
olsun diye yazdıkları yada aile fertleri ile resim paylaşmak için kullandıkları
blogları.

Kod yazarken çeşitli problemlerin çözümünü genelde bloglarda buluyorum. Bir
kaç yazışmadan sonra kodu alıp kullanabiliyorum. Kimi zaman örnek projeler bile
indirmek mümkün. Böylece yazdığım kodun kalitesi artmış oluyor.

Refactoring Nedir Öğrenin

Refactoring yazılan kodun performansının, bakımının, okunabilirliğinin ve
yeniden kullanılabilirliğinin arttırılması için uygulanan bir dizi metoddan
ibarettir.Örneğin tekrar eden rutinleri ayrı fonksiyonlara ayırmak, ilgili
rutinleri bir sınıf altında toplamak, değişken isimlerini değiştirmek,
algoritmaları daha hızlı çalışır hale getirmek vb gibi. Tüm bunları yaparkende
zaten çalışan kodu bozmamak. Sonuçta işin kalitesi artmış oluyor.

İnsan İlişkilerini Sıcak Tutun

Firma içinde olsun, bağlı olduğunuz sektörde olsun; tanıştığınız insanlar ile
ilişkilerinizi sıcak tutmaya çalışın. Bir gün bir probleminiz olduğunda gene
onlara soracaksınız ama sadece probleminiz olduğunda bu kişilerle bağlantı
kurarsanız biraz ayıp olur. Ayrıca soru sormayıda öğrenmek gerek. Örneğin benim
blogumda bir kaç tane yorum var, sadece hata aldığı kısmı kopyalayıp
yapıştırmış. Ne bir açıklayıcı not var nede takip ettiği adımları anlatmış.
Neyse bende çıkarttım kristal küremi baktım neymiş hatası. Geriye mesaj atıp 3
vakte kadar çözeceksin dedim :-).

Değişime ve Yenilenmeye Açık Olun

Değişik metodları ve yeni ürünleri kurmaktan, kullanmaktan çekinmeyin.
Değişmeyen ve yenilenmeyen beyinler bir gün gelir sistem dışı kalırlar.
Değişiklik ve yenilik her zaman iyi olmayabilir ama bunun muhakemesini yapacak
olan sizlersiniz.Benim en çok karşılaştığım tipler “gündüz programcıları”.
Bunlar sadece yazılım sektörü iyi maaş ödüyor diye sektöre atılmış kişilerdir.
Bir iki kurstan sonra hayata atılıp kendilerini işin ehli gibiymiş gösterip
ahkam keserler. Bu kişiler kullandıkları yöntemleri değiştirmek istemezler çünkü
öğrenmek ve uygulamak beraberinde yeni külfetler getirecektir. Zaten bildikleri
yoldan şaşmayıp işlerini zamanında bitirmeye çalışırlar. Mükemmele ulaşmak gibi
bir çabaları yoktur. Refactoring deyince küfür zannederler 🙂

Birde “gece programcıları” vardır. Burada anlattıklarımı yüzde 70 yapan
kişiler sanırım bu kategoriye giriyorlar. Gece programcısı araştırıp öğrenmek,
yenilikleri denemek için sonsuz bir istek içindedir. Mükemmelliğe ulaşana kadar
her yolu dener. Sistemleri değiştirmekten kaçınmaz.

Sektörün her iki tip insana da ihtiyacı var. Biri iyidir, diğeri kötüdür diye
bir yorum yapmayalım. Projelerde bazen zamanlama ön plandadır, kimi zamanda
kalite. Duruma göre bu iki tip yazılım uzmanının dengeli bir karışımı
kaliteli
bir ürünü zamanında teslim etmenize sebep
olabilir.

Firma Kültürünü Öğrenin

Firma içindeki işleyiş şemasını iyi öğrenin. Firma kurallarını iyi öğrenin.
Bazı kurallar yazılı olmayabilir ve zamanla öğrenilecek kurallardır. Yazılım
standartlarını, kullanılan araçları, ve ağ yapısını öğrenin. Yazdığınız kodun
standartlara uyduğundan emin olun.

Kişisel Bilgisayarınıza Yazılım Araçlarını Kurun

Yazılım olayına gönül vermiş iseniz zaten bunu söylemeye gerek yok. Ama ben
öyle insanlar ile çalıştım ki adam sadece firma duvarları arasında yazılım
uzmanı olarak geçiyor. Evinde bir bilgisayarı dahi yok, varsa bile örütbağı
amaçlı kullanıyor. Bir kişisel e-posta adresi yok. Seminerlerden,
toplantılardan, etkinliklerden bi haber. Ben bu işi yapmaktan zevk alıyorsam
tabii ki evimdeki bilgisayarıma gerekli araçları yüklerim. Evde de bazı projeler
geliştirmek isterim. Amaç daha çok denemek, daha çok yanılmak ve bilgiyi
arttırmak değil mi?

Açık Kaynak Projelere Katılın

Açık kaynak projeler size bir ekip içinde nasıl çalışacağınızı ve ne tür
araçları kullanacağınız hakkında bilgi verir. Katılacağınız bir projeyi eminim
Sourceforge yada başka açık kaynak proje sitelerinde bulabilirsiniz. Sonuçta
yazdığınız kod başkaları tarafından kontrol edileceği için değişiklikleri takip
edip en iyi nasıl yazılır öğrenebilirsiniz.

Hayal Kurun

Hayal kurmak beynimizin en üretken işlerinden biridir. Hayal kurarken
problemlere yeni çözümler bulabilir veya yeni projelere başlamak için malzeme
toplayabilirsiniz. Ben bir defter alıp buna aklıma gelen olası projeleri
yazıyorum. Gerçi ben projeleri hayata geçirene kadar birileri benden önce
yapıyor ama olsun. Bu yöntemin amacı aslında yeni projeler bulmak değil var olan
projelerin belirli kısımlarının nasıl düzeltilebileceğini araştırmaktır. Örneğin
bir projede şöyle bir durumla karşı karşıya kaldık. Bir dökümanın onaylanması
için 3 ayrı kişinin onay vermesi gerekiyordu. 5 yıl önce programı dizayn edenler
veritabanında ki Dokuman tablosunda bu 3 kişi için birer saha tanımlamış. Gel
zaman git zaman, onaylama süreçleri organizasyonun yapısı ile değişmiş fakat
yeni sistemi karşılayacak veritabanında yeteri kadar saha yok. Olayın çözümü
basit. Ek bir tablo yaratıp onaylayacak kişileri burada tutabilir ve her döküman
için istendiği kadar çok onaylayacak kişi tanımlanabilir.

Kod Teftişi

Kod teftişi başkasının yazdığı kodun gözden geçirilmesi ve aksaklıkların not
edilmesidir. Proje açık kaynak ise, kodu düzeltmek te işin içine girer. Eğer
firma içinde yazılım geliştiriyorsanız, kodun yazarına bir not gönderip
değişmesi gereken yerleri ve nedenlerini bildirebilirsiniz. Kod teftişinin amacı
var olan kodu daha iyi çalışır hale getirmek yada proje standartlarına
uydurmaktır. Agile metodları ile geliştirme yapanlar Pair Programming olayını
bilirler. Bu yöntemde iki kişi bilgisayarın karşısına geçer. Birisi kod yazarken
diğeride yazılan koda puan verir. 10’dan başlayan bu puanlamada her hata da 1
puan düşülür. Kodlama bitince programın aldığı puana bakılır ve 10 puan almak
için neler yapılabilir tartışılır. Gerekli olan düzeltmeler uygulanır.

Posted in Bilişim, Türkçe.