Yazılımcılar: Meditasyon sizi daha iyi bir yazılımcı yapabilir

Bu makaleyi yazma fikri haftalar önce aklıma gelmişti ve notlarımın arasına eklemiştim. Bu tarihten itibaren aklımda sürekli arka planda çalışan bir thread sürekli beni bu makaleyi yazmam konusunda teşvik etmeye çalışsa da ben bahaneler bulup bunu sürekli erteliyordum. Erteleme sebebim de başta çok normal gibi görünen aslında kalıpların arasına sıkışmış düşünce yapısından ibaretti. Anlayacağınız eften püften sebepler.

Bana göre ülkemizde meditasyona karşı herkesin bir ön yargısı vardı. Aklımdaki algı buydu. Ayrıca yine bana göre eğer bir makale yazıyorsam genelde herkesin okuması için biraz uzun bir makale olmalıydı bu şekilde okuyucuya daha doyurucu bir içerik sunabilirdim. Bir makalenin okuyucu tarafından sevilmesini sağlayacak ölçütüm buydu ve makale de meditasyon hakkında olunca ve ülkemizdeki algı ile bu ölçütüm birleşince kendime bu makaleyi yazmamı ertelemek için çok haklı bir sebep bulmuştum.

Yukarıdaki cümlelerimde farkettiğiniz gibi kendi düşüncelerimin analiz sonuçlarını sizinle paylaşıyorum ve bunu yaparken benim bu tuhaf düşünce sistemim hakkında sizin ne düşüneceğinize aldırmadan kendimi ifade edebilme özgürlüğünü yaşıyorum. Düşüncelerimi izleme, onları analiz etme ve karşı tarafın benim hakkımda ne düşüneceğine aldırmadan kendim olma sürecine 1 yıldan fazla süredir yaptığım meditasyonun büyük katkısı oldu. Sadece bir birey olarak normal günlük yaşantıma değil aynı zamanda mesleğim olan yazılım geliştirme sürecine de büyük katkıları olduğunu düşünüyorum. Bunun hakkında bir takım kanıtlar buldum ve sonuçta bu makaleyi yazma fikri ortaya çıkmış oldu.


Özellikle ülkemizde meditasyon deyince herkesin aklına aşağıdaki gibi bir görüntü geliyor.

Çoğumuz için aklımızdaki bu görüntüden dolayı meditasyon bir şaka konusu gibi görünüyor. Tabiki bunu söylerken etrafımdaki insanlardan edindiğim izlenimlerimi paylaşıyorum. Bu makaleye değerli vaktinizi ayırıp okuduğunuza göre siz böyle düşünenler arasında değilsiniz. Neyse. Meditasyonun tanımına baktığınız zaman, geçmişe takılı kalmadan, geleceğin getirebilieceği kaygılardan uzak tüm benliğiniz ile suanki anda yaşayayıp, bu anınızın tadını çıkarabilmek gibi bir anlam görüyoruz. Aynı zamanda kendi düşüncelerinizin farkında olarak sizi siz yapan bir takım değerlerin farkına varabilmek.

Meditasyon benim için, resimde ki gibi bağdaş kurup ellerin dizlerin üzerine koyularak yapılan bir aktiviteden ziyade, gözlerimi kapayarak aklımın içerisinde bir trende gelip geçen düşüncelerimi dışarıdan bir gözün izlediği gibi izlemektir. Nasıl biri olduğunuzu, düşüncelerinizin altında yatan gerçek sebepleri anlayabilmek için kendi kafamızın içerisinden çıkıp dışarıdan kendimizi görebilememiz gerekiyor. Meditasyon bunu yapabilmeyi benim için mümkün kıldı. Bununla kalmayıp çalışma masamda oturup kodladığım yazılım hakkında kararlar verirken izlediğim bir takım yanlış düşünce yapılarını anlamamı sağlayıp, daha iyi kararlar vermeme ve alışılmış kalıpları kırarak daha iyi bir yazılımcı olmama yardımcı oldu.

Meditasyon ve programlama kararları

Hergün bilgisayar karşısına oturup kod yazarken farkında olmasak da irili ufaklı bir çok karar vermek zorunda kalırız. Eğer bir değişken tanımlıyorsak değişkene verdiğimiz ismin onu okuyan diğer programcılar tarafından okunup ne iş yaptığını anlatan bir isim verdiğimiz konusunda kafa yorarız. Eğer bir metod yazıyorsak; bu metod ne döndürmeli, hangi parametreleri almalı, metod body si çok mu uzun oldu ne, biraz kısaltsam iyi olacak, metodun tek bir iş yaptığından emin olmalıyım vs. gibi bir çok karar verip uygularız.

Bunlar sadece kod yazarken vermek zorunda olduğumuz kararlar. Peki ya yazılımın tasarımına karar verirken? Bu süreçte de yine bir çok karar vermek zorunda kalırız. İlk versionda hangi özellikler olmalı, hangi tasarım kalıbını kullanmalıyım gibi. Varolan, üzerimize miras kalan kötü kodu refactor ederken yine bir takım kararlar silsilesi bizi bekler. Refactoring yaparken nerede durmamız gerektiğini çok iyi bilmemiz gerekir. Nerede duracağımız bilmek yine önemli bir karar verme işlemidir.

Aslında yazılım dediğimz şey, programlama dilini bir araç olarak kullanarak ilgili probleme çözüm üretmek için verilen kararlar bütünüdür.

Vereceğimiz kararlar yazılımın kaderini derinden etkileyeceği için verdiğimiz kararların farkında olmamız önem arzeder. Bu konu ile ilgili direk kendimde gördüğüm ve etrafımdaki yazılımcılarda gördüğüm bir takım düşünme kalıplarının farkındalık sayesinde değişimine örnekler vereyim.

Mükemmeliyetçilikten “Yeterince iyi” prensibine geçiş

Mükemmel iyinin düşmanıdır — Voltaire

Mükemmelliyetçileri bilirsiniz. Herşeyin kusursuz olmasını isterler. Fakat hiçbirşeyin yeteri kadar mükemmel olamayacağı gerçeğini hep görmezden gelirler. Ben de geçmişte bunlardan birisiydim. Aslında mükemmeliyetçi olduğumu bilmiyordum. Farkında değildim. Aldığım her yazılım kararında, şu özellik de olsun, bu da olsun, hadi onu da ekleyelim derken yazılımın daha ilk versionunda gereksiz bir sürü özellikle yazılımı şişirip, yazılımcıların üzerinde baskıyı arttırarak strese neden olduğumuzun farkında değildim. Yazılımı son teslim tarihine yetiştirememe de bende ki ve diğer yazılımcılardaki bu mükemmeliyetçiliğin ne kadar büyük bir rol oynadığından bihaberdim.

Birçok yerde okumuşsunuzdur. Yazılımınızın ilk versionlarında yeterince iyi olması kullanıcılar ile buluşması için yeterlidir. Mühendislik bir anlamda, bu yeterince iyi olan yazılımı tekrarlayan iyileştirmelerle olgunluk seviyesine çıkarma işlemidir. Fakat ne kadar okusanız da neyin yeterince iyi neyin kötü olduğunu anlayabilmek ve bunun kararını verirken altında yatan asıl sebeplerin farkında olmadığınız zaman değişimi tetikleyecek itici gücü de bulamazsınız. Bu noktada tecrübe ve yazılım konusunda sürekli okumak meditasyonun getirdiği farkındalıkla birleşince kararlarımın berraklaştığını hissettim.

Geleceği tahmin etmek için varsayımlardan eldekine odaklanmaya geçiş

Biz yazılımcılar kodladığımız çözümün şuanki problemin yanında gelecekte oluşabilecek problemleri de kapsayacak şekilde genel bir çözüm olmasını isteriz. Fakat geleceğin belirsiz olduğunu, bize ne getireceğini hiçbir zaman tam manasıyla bilemeyeceğimizi hep görmezden geliriz. Bu da bizim gelecek hakkında varsayımlarda bulunarak oluşabilecek ihtiyaçları göz önünde bulunduran yazılımlar geliştirmemize neden olur. Daha fazla probleme çözüm üretmek daha fazla kod yazmayı gerektirir. Daha fazla kod, yazılımcıların okumak zorunda olduğu daha fazla satır ve yeni bugların oluşmasına neden olacak daha fazla alan demektir. Daha önce varsayımda bulunduğumuz bu gelecek gelip çattığında ne kadar yanıldığımızı o zaman anlarız fakat malesef ki iş işten geçmiştir. Artık o ihtiyaçların aslında bizim hayal ürünümüz olduğunu anlarız ve gereksiz yere yazdığımız kodların getirdiği karmaşıklıkla başbaşa kalırız.

Halbu ki bu kararları verirken, geleceğin belirsizliği konusunda ve gelecek ihtiyaçları kapsayacak çözümler için yazılan kodların nelere mal olacağının farkında olsak bu hataları tekrar tekrar yapmazdık. Artık ben veya herhangi bir yazılımcı arkadaşım, cümleye “kullanıcılar ileride x özelliğe ihtiyaç duyabilirler” diye başladığında aklımda bir tetikleyici patlıyor ve yaklaşan tehlikeyi o anda görebiliyorum:)

Geleceği tahmin etme. Eldekine odaklan ve ona göre kod yaz.

Bunun gibi daha bir çok örnek verebilirim fakat yazıyı uzatmanın bir manası yok. Sanırım siz asıl noktayı anladınız. Burada ki asıl amaç, verdiğimiz kararları hangi dayanağa, hangi sebebe göre verdiğimizin farkında olmak. Düşünme kalıbımızı sorgulamak, onu anlayabilmek. Meditasyonun bu konuda bana yardımcı olduğunu düşünüyorum. Tabi ki daha iyi bir yazılımcı olabilmek için meditasyon yapın demiyorum. Yazılımla ilgili senelerin getirdiği tecrübeniz var. Sürekli daha iyiye ulaşmak ve daha az hata yapmak için okuyup çabalıyoruz. Değişim için gerekli bilgiler aslında kafamızın içinde saklı bir vaziyette duruyorlar. Önemli olan onları saklandıkları yerden çıkarıp, ilgili bağlantıları kurmamızı sağlayacak farkındalığa ulaşmak. Meditasyon bana bu konuda yardımcı olanlardan sadece bir tanesi. Belki size de yardımcı olur. Kalın sağlıcakla.