Yazılımcı Konsantrasyonu, Beyin Akış Durumu ve Bölünmeler Üzerine

Prof. Dr. Deniz Kılınç
Aykiri Yazilimcilar
4 min readJul 15, 2019

Yaklaşmayın kod yazıyorum…

Photo by Dan Meyers on Unsplash

Bu yazıyı 2013 senesinde akademik kariyerimin bebek adımlarını atarken (sektörden yeni geçmiş olmanın verdiği bir gazla) ilk defa kaleme almış ve farklı bir mecrada yayınlamıştım. O zaman da çok ilginç ve keyifli yorumlar almıştım. Şimdi Aykırı Yazılımcılar için yazıya tekrar el attım ve güncelleyerek sizlerle paylaşıyorum.

Özellikle yazılım işine hiç girmemiş ya da bu işe bulaşmamış ama programlamadan çok iyi anlayan :) arkadaşlara, bölünmenin mahiyetini ve maliyetini terbiyenizi bozmadan bilimsel bir dille anlatmak için yine bu yazıyı kullanabilirsiniz…

Giriş

Yazılım geliştirme (programlama, kodlama), yaratıcı bir iş çıkartmayı (değeri olan bir çıktı elde etmeyi) hedefleyen bir süreç olup, azami dikkat ve konsantrasyon gerektirir.

Chicago Üniversitesi Psikoloji Bölüm Başkanı Mihaly Csikszentmihalyi tarafından yapılan bir çalışmada yazılımcıların beyinlerinin sanatçıların çalışma tarzına sahip olduğu görülmüştür.

Not: Tam da bu noktada “yazılım bir sanat mıdır?”, “programlama sanatı”, “yaratıcılık ve yazılım”, “yazılım mühendisi olma yazılım sanatçısı ol”, “yazılım geliştirme sadece yaratıcı insanlar için mi?” gibi ucu bucağı bitmeyen konuları açıyoruz… Şimdilik bunları az öteye park edelim :)

Tam konsantre bir programlama sırasında beyin bir “akış” (flow) moduna geçmekte, etrafla ilişkisini kesmekte ve bir probleme günlerce konsantre olabilmektedir. Ciddi bir çevresel izolasyon gerektiren akış moduna girildiğinde, üretkenlik maksimum düzeydedir ve tüm kritik kodlamalar bu seviyede yapılır.

Akış moduna giriş, zaman alan ve karmaşık bir süreç olup, çözülmesi gereken problemle veya yapılması gereken işle ilgili gerekli bilgiler bu aşamada toplanır. Örneğin bize Jira’dan iletilen bir hatayı çözmek için uğraştığımızı düşünelim. Bu hata ile uğraşırken aşağıdaki gibi birçok şeyi (girdiyi) aynı anda analiz ediyor ve aklımızda tutmaya çalışıyoruz (hatta ilişkilendiriyoruz).

  • Hata iş akışları (oluşum adımları)
  • Önceki çözümler (tecrübeye dayalı)
  • Yeni olası çözümler
  • İlgili kaynak kod dosyaları
  • Son yapılan değişiklikler
  • İlgili sınıflar ve metotlar
  • Değişkenler
  • Parametreler
  • Kullanıcı ara yüzleri
  • Veritabanı yapısı

Not: Bu arada beyninizdeki diğer bir thread de size sürekli “hata mata yok işte, yine aynı hikaye, test ortamı-mest ortamı, hatalı veri vs. yine boşa uğraşıyorum” mesajını iletiyor :) Pardon yine okuma akışınızı bozdum, nasılmış ama :))))

Bu süreçte bu bilgiler beynin kısa süreli hafızasında (short term memory space) biriktirilir, harmanlanır ve çalışmaya hazır hale (yani problemi çözmeye hazır hale) gelinir.

Yapılan farklı çalışmalara göre yazılımcının beyninin “akış” moduna geçmesi yaklaşık ortalama olarak 15 dakika zaman almaktadır. Tam akış moduna girmiş ve programlamaya devam ederken, yazılımcının herhangi bir nedenden dolayı bölünmesi (interruption) beyninin kısa süreli hafızasındaki topladığı bilgilerin silinmesine neden olur. Dolayısı ile yazılımcının tekrar işe dönüp çalışması ortalama yine 10–15 dakika daha zaman alacaktır.

Bölünme (Interruption) Nedir?

Akış modunda olsun ya da olmasın, yazılımcının dikkatinin dağılmasına ve konsantrasyonunun bozulmasına neden olan her şeyi bölünme olarak tanımlayabiliriz. Bölünmeler değişik şekillerde ve zaman dilimlerinde gerçekleşebilir. Firma türleri ve hizmet sektörleri değişse de genelleştirebileceğimiz tipik bölünmeler aşağıdaki gibidir.

Genel bölünmeler:

  • Odaya bir kişinin girmesi,
  • Odada gürültülü bir şekilde konuşulması (bazen kulaklığın bile fayda etmediği bir durum, sanki…),
  • Tam bir işin ortasındayken başka acil bir işin gelmesi, daha sonra ondan daha acil diğer işin gelmesi (ve tabi meşhur “yapacak bir şey yok” olgusunun felsefi açıdan sigara-kahve eşliğinde tartışılması)
  • Telefon çalması (banka, robot, arkadaş, anne-baba, berber, evladına bölüm seçecek uzaktan akraba)
  • Acil konulu bir e-posta gelmesi (tabiki normalde e-postalara bakmıyoruz ancak 1–2 saatte bir bakın canım ne olacak ile karşılaşıyoruz)
  • Ekrana yansıyan ya da yansımayıp sesi arkadan gelen anlık bir slack ya da discord mesajı

Arkadaşlarımızın neden olduğu bölünmeler:

  • Bu fonksiyon tam olarak nasıl kullanılıyor anlamadım?
  • Bir hata yolladılar, debug etsem de çözemiyorum. Evet dediğin yerlere baktım (vallahi kafayı yiyeceğim, böyle kod mu yazılır yeeaa — önceki yazılımcıya selam çakıyoruz) ama yine de işin içinden çıkamıyorum. Sonrasında → daha üzerimde bekleyen çok acil hatalar var. Yardım edebilir misin? (Klasik ama etkili)
  • Kalemini alabilir miyim? (Kötü niyetli ve/veya kıskanç tür :) )
  • Çay/kahve alacağım sen de ister misin?
  • Şurada indirim var duydun mu?
  • Dünkü maçı izledin mi? (Kaç kere söyleyeceğim sevmiyorum be bilader…)
  • Şşşttt bak gel gel, şu mekanı gördün mü? Oraya gidiyoruz bu yaz ne diyorsun? (Ne diyeceğim git işte…:)…)
  • Standup toplantı sonrası yeni arkadaş standupları ve gıybet çevirmece

Not: Yazıyı ilk yazdığımda (yani sütün, yoğurdun, peynirin daha doğal olduğu dönemlerde) yazıya bölünmelere örnek olsun diye şöyle bir yorum girişi yapılmıştı :)))

2013'ten Yorum: Benim bir ara çalıştıgım bir ofiste, bir abi, ara ara gelip, “Peynir geldi, peynir isteyen var mı?” diye bağırırdı. Kimse de demiyor ki, “Burada konsantrasyon en önemli şey, bağırma”

En azından peynirci abiyi uzaklaştırsalar, başlangıç için yeterli olur sanırım :)

Gerçek hayattan bir örnek: Akış sürecine girmiş bir yazılımcının yanına gidip soru ile onu bölmeye çalıştığınızda;

  • Size bir süre (5–10 saniye) garip garip bakabilir.
  • Tam da bu noktada yazılımcının beyni akıştan çıkmamak için direnç göstermeye başlamıştır.
  • Öncelikle koltuğunda geriye doğru kaykılır, başını arkaya doğru atar ve nesne tanımaya çalışan bir robot mantığıyla yüzünüze bakar :) olabildiğince sizi uzaklaştırabilecek basit cevaplar verir (Evet, Hayır, 2 dakika sonra vb.).
  • Bu cevapları üretip tekrar kaldığı yerden devam etmesi bile 2–3 dakika zaman almaktadır.
  • Baktı ki karşısındaki kişi tatmin olmuyor ve sormaya devam ediyorsa, yazılımcı pes edip akış modunu keser ve ciddi bir zaman kaybı yaşanır :)

Bazı Çalışmalar

Parnin [1] tarafından yapılan çalışmada Eclipse ve Visual Studio kullanan 86 programcının yaptığı 10,000 programlama oturumu ve 414 programcının anket analizi sonrasında aşağıdaki sonuçlar ortaya çıkmıştır.

  • Bir yazılımcının herhangi bir bölünme sonrasında tekrar kodlamaya başlaması yaklaşık (ortalama) 10–15 dakika sürmektedir.
  • Yazılımcılar günde sadece 2 saatlik kesilmeden çalışabilmektedirler.

Yazılımcılar bu bölünmelerle baş etmek ve tekrar hızlıca kodlamaya dönebilmek için aşağıdaki yöntemleri denemektedirler.

  • Kağıtlara notlar alırlar.
  • Derleme hatasına neden olacak hatırlatıcılar veya breakpoint’ler koyarlar.
  • Son kaldıkları kod satırından devam etmeye çalışırlar (Genelde başarısız olurlar, bu satıra nasıl geldiklerini hatırlamak veya işlerini garantiye almak için başa dönerler).
  • Kaynak kod tarihçesine dönerler ve kaynak kod farklarına bakarlar (30 dakika önce yaptıklarını hatırlamak için).

Kaynaklar

  1. http://blog.ninlabs.com/

--

--

Prof. Dr. Deniz Kılınç
Aykiri Yazilimcilar

Professor at Bakırçay University, Industry experience in software engineering and data science for 23 years. Founder of https://kalybeai.com