Yazılımda ve Yazılımcıda Çok Boyutluluk

yazar:

kategori:

Matematiksel anlamda boyut belli bir yönde ölçülmüş bir büyüklüğü ifade etmek için kullanılan geometrik bir terimdir. Günlük kullanılan dilde boyut kelimesi bakış açısı, vizyon, perspektif, farkındalık gibi kelimelerle eş anlamlıdır. Ben de boyut kelimesini bu doğrultuda kullanarak, çok boyutluluğun yazılım ve yazılımcı için ne anlama geldiğini bu yazımda aktarmak istiyorum. İzin verirseniz boyutun ve çok boyutluluğun geometrik anlamda ne olduğunu inceleyerek başlayalım.

Matematikte bir nokta tek boyutlu bir nesne olarak kabul edilir. Bu noktayı bir kalemin ucu ile bir kagıt üzerine çizilmiş bir nokta olarak düşünmeyin, çünkü mikroskop altında bakıldığında kalemin oluşturduğu noktanın da genişlige, yüksekliğe ve bir ene sahip olduğu görülecektir.

Şimdi kendinizi bir boyutlu bir varlık olarak hayal edin. Bir kutunun içindesiniz ve bu kutunun satıhlarından birisinde bulunuyorsunuz. Bir kutunun içinde olduğunuzu bilebilir misiniz? Kutunun kendisi üç boyutlu bir nesne. Kutuyu oluşturan altı satıh iki boyutlu nesnelerden oluşmakta. Bu durumda sizin görebileceğiniz alan neyi kapsamaktadır? Hiçbir şeyi! Ne kutunun içinde ne de satıhlardan birisinde olduğunuzu bilebilirsiniz. Kısaca üç boyutlu bir sahada tek boyutlu bir varlık olarak hem körsünüz hem de olan bitenden bihabersiniz.

Şimdi size ikinci bir boyut verelim ve iki boyutlu bir varlık olun, yani eniniz ve genişliğiniz olsun. Bu durumda kutunun neresinde olduğunuzu bilebilir misiniz? Bilemezsiniz, çünkü üçüncü boyutta olup bitenlerden bihabersiniz. Siz sadece iki boyutlu olan satıh üzerinde olup bitenleri kavrayabilecek boyut kapasitesine sahipsiniz. Kutu içinde olup bitenleri anlamanız imkansız. Bunun için yükselmeniz, yani üç boyutlu bir varlık haline gelmeniz gerekiyor.

İki boyutlu canlı olarak kutunun üzerinde bulunduğunuz satıhta diğer iki boyutlu canlılarla beraber yaşamınızı sürdürüyorsunuz. Kutu içinde olup bitenler yani üç boyutlu canlıların yaşantıları ve yaptıkları size nasıl yansırdı? Bunu anlayabilmek için şöyle bir deney yapalım. Siz iki boyutlu satıh üzerindesiniz. Bu satıhı bir kağıt parçası olarak düşünelim. Şimdi ben bu kağıdın yüzeyinden kalemin ucuyla bir delik açarak, kalemi yukarıdan aşağıya doğru geçiriyorum. Siz üç boyutlu olan kalemi nasıl görürdünüz? İki boyutlu bir canlı olduğunuz için üç boyutlu kalemi görmeniz ve kalem olduğunu anlamanız mümkün değil. Ama bir şeyler göreceksiniz. Bu gördükleriniz, kalem sizin boyutunuzdan geçerken kalemin bulunduğunuz satıh ile kesiştiği iki boyutlu kesitleri olacaktır. Yani siz kalemin iki boyutlu parçalarını göreceksiniz ve sizin dünyanızdan geçen şeyin bir kalem olduğunu anlamanız mümkün olmayacak. Şimdi bu deneyin tam tersiniz yapalım.

Kutunun içinde yaşayan üç boyutlu varlıklar satıh yüzeylerinde yaşayan iki boyutlu canlılar hakkında neler bilebilirler? Yine bir deney yapalım. Siz iki boyutlu bir varlık olarak bulunduğunuz satıhta iki boyutlu bir kasa sahibi olun. Bu kasa içinde yer alan nesneleri iki boyutlu canlıların görmesi mümkün degildir. Peki bu durum üç boyutlu varlıklar için de geçerli mi? Hayır, çünkü onlar doğrudan iki boyutlu bir kasanın içinde olanları görebilirler. İki boyutlu bir kasa üç boyutlu bir varlık için sadece bir dikdörtgen ya da karedir. Siz iki boyutlu bir canlı olarak üç boyutlu varlıklardan hiçbir seyi saklayamaz ya da gizleyemezsiniz. Onlar her şeyi apaçık görürler.

Bu boyut deneylerini dördüncü boyuta bu şekilde taşımak mümkün mü bilmiyorum, lakin benim aklıma takılan soru şu: Biz üç boyutlu varlıklar olarak dört boyutlu bir varlığı nasıl algılardık? Bizim gördüklerimiz de sadece dördüncü boyutun üç boyutlu parçaları mı olurdu? Aklıma daha ilginç bir soru geliyor: Onlar bizim kasalarımız içindeki her şeyi görebiliyorlar mı? 🙂

Şimdi bu yazdıklarımın yazılım ile ne ilgisi olduğu konusuna gelmek istiyorum. Yazılım dünyasını bir kutu olarak düşünelim. Yaptığımız deneylerden yola çıkacak olursak, kutu içinde olup bitenleri kavrayabilmek için en az üç boyutlu yazılımcı olmak gerekiyor. Bu kutu dışına taşacak şekilde çok boyutlu yazılımcı olmak da mümkün. Bunu tercih etmeyip, bir ve iki boyutlu yazılımcı olarak kalmayı tercih eden yazılımcılara da rastlamak mümkün. Bunun ana sebebi, yazılımın sadece kod yazmak olarak algılanmasıdır. Kod yazabilmek yazılımcıya sadece tek bir boyut kazandırır. Kod yazabilen bir yazılımcıyı kutu içindeki tek boyutlu bir varlık ile kıyasladığımızda, yazılımda boyutsuzluğun beraberinde getirdiği dejavantajlar net olarak görülebilmektedir. Yazılımcıda yeterli sayıda boyut mevcut değilse, kendisinin yazılımın (kutunun) neresinde olduğunu kavraması zorlaşır. Boyut kutu içinde olup bitenleri kavramak ve farkındalık için çok önemlidir. Bu yüzden ana amac boyut kazanmak olmalıdır.

Ne yazık ki yazılım kutusu sadece üç boyutlu statik bir yapı değil. Yazılımı ilginç kılan tarafı da zaten bu. Bu yapı sürekli boyut kazanıyor. Üç boyutlu bir yazılımcı üç boyutlu bir kutu içinde olup bitenleri zorlanmadan takip edebilirken, kutunun dört boyutlu bir yapı haline dönüşmesi, yazılımcının yine bir boyut geride kalmasına sebep olduğundan dolayı gidişatı zorlaştırmaktadır. Yazılımcı yeni bir boyut kazanarak, bu açığı telafi edebilir. Örneğin yapılandırma (build), sürümleme (release), versiyon yönetimi (version control), yeniden yapılandırma (refactoring) gibi konularda ihtisas, yazılımcıya yeni boyutlar, perspektifler ve bakış açıları kazandıracaktır. Yazılım aslında devamlı süregelen bir boyut yarışıdır. Yazılım bir üst boyuta geçer, yazılımcı bunu açığı kapatmaya çalışır. Bazıları bu açığı kapatır, bazıları kapatamaz. Farkında bile olunmayan bir eksiklik nasıl telafi edilebilsin ki.

Boyut == Farkındalık.


EOF (End Of Fun)
Özcan Acar


Yorumlar

“Yazılımda ve Yazılımcıda Çok Boyutluluk” için 2 yanıt

  1. Efecan avatarı
    Efecan

    öncelikle düşüncenize sonra ellerinize sağlık hocam 🙂 sizin bu yorumunuzla ön farkındalık sahibi oldum 🙂

  2. burak gulbay avatarı
    burak gulbay

    güzel bir kesit olmuş :)))