Monthly Archives: Temmuz 2012

Yazılım ve Sistem Mühendisliği

Tasarım Candır

Epeydir teknik konularda sağda solda blog yazıları yazıyorum, iltraf etmeliyim bugüne kadar hiçbir yazım için Bu işin bir pattern i olmalı! kadar olumlu tepki almamıştım, çok şaşırdım.

Mesleki kariyerim için tehlikeli; hislere tercüman olma noktasında başarılı bir yazı oldu sanırım :)

***

Genel geliştirici kafasıdır, önümüze bir iş gelir daha işin ne olduğunu bile doğru dürüst anlamadan bodoslama kod yazmaya girişiz. Daha kodlama aşamasında aklımıza farklı metodolojiler gelir, eski yazdıklarımızı refaktör eder yola devam ederiz, sonra farkederiz ki kazın ayağı öyle değilmiş, yazdığımız kod ne isteneni, ne de ilişkili olduğu başka işlerden doğan ekstra case leri karşılıyor… Tohumuna para mı saydık. Oturur bir daha yazarız… Gider biryerlerden birşeyler okuruz, has… lan bu böyle de yapılabiliyormuş der yine yazarız. Araya başka iş girer, zaman geçer neyi neden yaptığımızı unutur yine başa döneriz….

Tohumuna para mı saydım dediğiniz şey, kısa vadede zaman kaybı, uzun vadede business gözünde “IT ye giden iş gelmiyor”, yöneticinizin gözünde “Mehmetin verimi düşük günlerdir aynı işin üzerinde çalışıyor”, arkadaşlarınızın gözünde “lan bu mehmet de yalanmış” şeklinde oluşan imaj, türlü prestij kaybı ve hatta daha kötüsü işinizden kovularak para kaybı olarak size geri dönecektir.

Tabi bir de herhangibirşey karalamadan giriştiğiniz bu işin, ön görmediğiniz side effectlerinden doğan reopen ticketler, sizi kovulma level ine birkaç adım daha yaklaştıracaktır.

***

Hazır olun! Mesaj geliyor…
Mimar gibi tasarlayın, müteahhit gibi kodlayın.

Sizden istenen şeye daima bir proje edasıyla yaklaşın. İşi, büyüklüğüne göre mümkün olduğunca kendi başına çalışabilen küçük parçalara ayırın ve herbir parçanın kusursuz çalışacağından emin olun. (Tabi kağıt üstünde mümkün olabilecek kadar). Çok fazla zaman kaybettirmeyecek şekilde mükemmeli yakalayana kadar tekrarlayın. Tıpkı bir gökdeleni incelikle tasarlayan bir mimar gibi.

Daha sonra tasarladığınız bu yapıyı bilgisayarınızın başına oturup kodlayarak hayata geçirin. Kodlama sırasında zamanı para olarak nitelendirin ve paradan kırpmaya çalışan laz müteahhit kafasıyla kodlama yapın. Tasarımınızın doğruluğundan eminseniz yolda aklınıza gelen fikirleri sonraki faza bırakın. Kişisel fikrimi soracak olursanız yolda akla gelen fikirleri doğrudan ignore edin. Müşteriniz ekranda gördüğüyle, yöneticiniz işin ne kadar zamanda ne kadar az hatayla tamamlandığına bakar, program koduna ise yalnızca siz veya belki birkaç takım arkadaşınız.

 

Genel

Kahrolsun Internet Explorer!

Pek isyankar olduğum söylenemez. Çalıştığım şirkette kim ne isterse çok fazla sızlanmadan oturur paşa paşa yazarım. Zaten ne için para alıyoruz ki ? Genellikle verdiğim deadline ı yakalamaya gayret ederim. Ama şu browser sorunları yok mu…

PM insanları gelir der ki “Ey developer! vatandaş checkout a gitsin kart nosunu yazsın, taksit seçsin, taksit seçeneğine göre vade farkı otomatik hesaplanıp sepet güncellensin, girilen kart numarası yapıkrediye aitse ve 6 taksiti seçmişse sayfanın üstünde vadaa hayvanı çıksın kampyadan yararlanmak istiyor musun diye sorsun.”

Siz tüm bunlar için birer if yazmayıp çok generic bir çözüm bulmak adına oturur yazmanız gereken kodun paternini belirlersiniz, kodunuzu yazarsınız ve genellikle kodunuz geliştirme ortamında başarıyla alışır. Haliyle sizde dünyayı kurtaran adam edasıyla IT de kasıla kasıla gezersiniz, arada arkadaşlarınıza yaptığınız iş atla deveymiş gibi yağlandıra ballandıra anlatırsınız “Hacı! bir kod yazdım ben hede hede paterninde, objeleri şöyle tanımlıyorsun, böyle extend ediyorsun, uçuyor, kaçıyor amk!”. Halbu ki ne ki anasını satayım belli şartlar gerçekleşince ekranda vadaa hayvanı çıkıyor:)

Neyse, efendime söyleyeyim sıra test e geldiğinde zalım QA ekibi sizin kodunuzu windows işletim sistemli bilgisayarlarda envai çeşit Internet Explorer sürümüyle test eder, bug bug üstüne gelir, ciğeriniz yanar. Belki bir günde yazdığınız güzelim kodu, üç günde internet explorer da alışır hale getiremez, kudurursunuz. IE7 de çalışan 8 de çalışmaz, 8 de çalışan 9 da çalışmaz… Tabi visual hadiseleri hiç saymıyorum. IE9 da düzgün görünen sayfanın 8 de kıçı başı bir yana kayar.

Sonrası mı, sonrası tekrarlanamayan hatalar, akıl-mantık dışı browser buglarına bulunmaya çalışılan derme çatma çözümler ve haliyle bitmek tükenmek bilmeyen mesai saatleri…

Birileri çıksın ve şu browser yazanlarını bir araya toplayıp ortak bir standart belirlesin. Fakat bu standart internet explorer olmasın. Dinsin bu akan developer kanı artık!

Genel

Vim Editör İle Kod Biçimlendirme

Birden fazla yazılımcının çalıştığı bir ekipte çalışıyorsanız, insanların farklı alışkanlıkları kod tabanınızın biçimsizleşmesine veya okunabilirliğinin azalmasına neden olacaktır. Bunun önüne geçmek için herkesin sekme tipi, sekme genişliği gibi parametrelerini standardize etmesi veya buna ve daha fazlasına zorlayan 3. parti bir araç kullanması gerekmektedir.

Bugün sizlere geçmişte ide kullanıp hantalllığından bezen benim gibi geliştiricilerin sığındığı vazgeçilmez liman olan havalı editör VIM için, kod biçimlendirme ayarlarından kısaca söz etmek istiyorum.

expandtab
Editörünüzün girinti için tab karakteri yerine boşluk karakterini kullanmasını sağlar.

shiftwidth
Girinti/çıkıntı işlemleri sırasında oluşan boş alanın karakter uzunluğunu belirler.

tabstop
Sekme tuşuna basıldığında oluşan boş alanın karakter uzunluğunu belirler.

autoindent
Aslına bakarsanız önceki satırdaki girintiyi bir sonraki satıra taşımaktan fazlasını yapmaz. Fakat son derece kullanışlı olduğunu söylemeliyim.

smartindent
Smartindent, C benzeri sözdizimi yapısına sahip dillerde, belirli şartlarla yeni satırın girintili olarak başlmasını sağlar.

cindent
Genel olarak smartindent ile aynı işi yaptığını söyleyebiliriz, ancak daha fazla özelleştirilebilme olanağına sahiptir.

Sizde projenizde Zend Framework kullanıyorsanız aşağıdaki konfigürasyonu vimrc dosyasınıza tanımlayabilirsiniz.

" Azami satir uzunlugu:
" Okunabilirligi arttirmak adina azami satir uzunlugu 80 karakter olmalidir.
set textwidth=80
" Satir sonlandirma:
" Satir sonlandirma unix dosya biçimine kurallarina gore olmalidir. Satir sonlandirma karakteri olarak tek bir 0x0A karakteri kullanilmalidir.
set fileformat=unix
" Girintileme:
" Girintileme icin bosluk kullanilmali, girintileme uzunlugu 4 bosluktan olusmalidir.
set expandtab
set shiftwidth=4
set tabstop=4
" Girintiyle siz ugrasmayin:
set autoindent
set smarttab