Çarşamba, Ocak 16, 2013

Programcı Tıkanması

İki satır kod bile yazamayan durumdaki programcıyı ifade etmektedir. Beyin durması, mala bağlamak ya da AGD* durumu gibi varyasyonları olsa da benim içlerinde en çok sevdiğim "Programcı Tıkanması".
(* Ağzı Gözü Dağılmak)

Tıkanmış bir programcı mayın tarlası oyununda harikalar yaratabilir ya da saatlerce sıkılmadan youtube videosu izleyebilir ama kodun başına oturduğu zaman IQ iki yaş düzeyine iner. Normalde şakır şakır yapılan işler gözde büyür. İki saatte 10 satır kod yazarsın onu da üç gün önce farkettiğin bir problem yüzünden yazmaman gerektiğini hatırlayıp rollback yaparsın.

Bu tıkanma durumu birkaç saat sürebileceği gibi günler hatta aylar bile sürebilir. Tıkanmanın nedenine göre hayata bile küstürebilir :) Bu durumu çözebilmenin yolu önce sebebi keşfetmektir. Bunu türlü nedenleri olabilir.

  • Genel can Sıkıntısı: Bu sık sık başa gelebilecek bir durum. Çalışılan ortam genelde en büyük etken.
  • Sevilmeyen / Monoton bir işle uğraşıyor olmak: Sevmesek de hep bizi bulur bu işler ama bir taraftan bu tür işlerle uğraşıyor olmak mimari bir probleme de işaret ediyor olabilir. Dikkat etmek lazım.
  • Sebebi belli olmayan bir Bug: İşte benim en sevmediğim tür. Bir hata var belli ama reproduce edebilen yok. Bir nedenle hata raporu da yeterince fikir vermiyor. Bu hata çözülmeden iki satır kod daha yazabilmek mümkün değil. 
  • Birşeylerin Yanlış Gittiği Hissi: Sanırım bu en sevimsizi. Yaptığınız iş belli ve güzel ilerliyor gibi görünüyor ama içten içe biryerlerde hata yapıldığını hissediyorsunuz. Görünürde bir problem yok ama iş production'a çıktığında bayağı bir sorun açacak gibi duruyor.
  • Aşırı kompleks bir yapı tasarlayıp ipin ucunu kaçırmak: Burada olan şey genellikle aşırı soyutlama nedeniyle düşünce zincirini bir noktada koparmak. Tasarladığınız case'i bir şekilde kapatamamak. Sanırım tıkanıklık içinden çıkması en zor olan. Aylarca sürme potansiyeli olan şey.
Programcı Tıkanması probleminin en iyi çözümü bu noktaya yaklaşıldığını erkenden sezip işi hiç bu noktaya getirmemektir ama eğer başınıza gelirse yapılabilecek şeyler şunlar.
  • Biraz uzak kalmak, geri düşünceye atmak. Aslında bambaşka işlerle uğraşıyor olsanız da beyin background'da problemi çözmekle uğraşıyor olacak. İşe geri döndüğünüzde şakır şakır kod yazmaya başlayabilirsiniz.
  • Sıkıcı işleri otomatize etmek / Refactoring: Bu da aslında sıkıcı bir iştir ama asıl sıkıcı işle uğraşmak yerine daha etkin bir çözüm üretmek gelecekte bu işlerle bir daha uğraşmamak anlamına gelir. Bir de eğer sorun tasarımsal bir problemse bunu da acilen refactor etmek iyi bir fikir olabilir.
  • Sebepsiz Buglar: Eğer bir bug reproduce edilemiyorsa genellikle sorun ya multi thread ya da multi user kullanımında ortaya çıkar. En güzeli ne yapıp edip bu sorunu çözmek. Bu acayip bir rahatlama hissi verir. 
  • Kötü hisler: Muhtemelen TDD yapmıyorsunuz. Bu işin ilacı emin olmadığınız noktalar için birim testleri yazmak.  Bu iki şekilde işi kolaylaştırır. Hem kodu test edilebilir hale getirmek kodu kontrolümüz altına almamıza neden olur hem de programın mevcut çalışmasını bozacak bir hata yaparsak anında farkederiz. 
  • Geri adım atmak: Bazen kodu geliştireceğimizi düşünerek başlarız ama sonu olmayan bir yola gireriz. Zamanında geri adım atmayı bilmek işi büyük sorun haline getirmeyi önler. Etkin bir şekilde versiyon kontol sistemi (VCS) kullanmak gerekiyor ki gerektiğinde belli bir zaman diliminde yapılmış işleri inceleyebilin ya da istediğiniz bir noktaya geri dönebilin. Ayrıca DVCS sistemleri bize bu tür işlere başlamadan önce projeyi ayrı bir dala ayırıp tatmin olana kadar ayrı bir yerde geliştirmeye devam etme şansı verir. GIT, Mercurial gibi sistemleri iyi incelemek gerek. 
Bazen de hiçbir sebep yokken kod yazmak istemeyeceğiniz bir döneme girebilirsiniz. Kod yazmaya her oturduğunuzda uyku basması, çay istemek, maiileri kontrol etmek gibi şeyler oluyorsa bunun nedeni genelde aşırı çalışmadır ve biraz dinlenmek gerekiyor olabilir. Burada kendinizi kodu devam ettirmeye zorlamak yerine biraz gevşek davranmak iyi bir çözüm olabilir. Biraz düşünürseniz kod yazma dışında yapmanız gereken işler muhakkak bulursunuz. Mesela blog'unuza yazı yazabilirsiniz ;)

1 yorum:

Berat Bilgin dedi ki...

Gözlemler harika :)