Yazılımcının Derman Bulunmaz Halleri

2013 yılının tozlu raflarından bulup çıkarttığım bu çalışma, yazılımcı olarak başımızdan geçenleri kara mizah tadında anlattığım bir seri olarak burada yaşamını sürdürecektir.

Yer yer gerçekçi yer yer de komşu bilgisayarına format attığımız kadar nahoş, çuvaldızı kendimize batırdığımız olaylar silsilesinden ibarettir.

Teknolojinin saniyeler içerisinde değişen bir hal almasına karşın buradaki bir çok durum geçerliliğini sürdürmektedir. Ne yazık ki!

Cover Photo by Markus Spiske on Unsplash

Karikatürler Yakup Ad imzasını taşımaktadır.

Nesne yönelimli programlama dünyasının tepe noktalarından birisidir tasarım kalıpları. Gang of Four’un pek çok standart yazılım sorununun çözümü için ortaya koyduğu ilkelerdir bunlar aslında. C#çı veya Javacı olunması fark etmez. Her nesne yönelimli dil için geçerli ilkelerdir.

İlk öğrenilenleri genelde Singleton ve Abstract Factory’ dir. Öğrenmeye devam ettikçe zorlaşan desenler pek çok yazılımcının işi yarı yolda bırakmasına da neden olur. Tamamını öğrenenlerin ise unutmamak için çaba göstermesi gerekir. Unutmamanın en iyi yolu bir yerlerde kullanmak veya bir yerlere yazarak sık sık tekrar etmektir.

Tasarım kalıplarını iyi bilenler genelde elit yazılımcılar olarak görülürler.

Henüz mesleğinin ilk yıllarında olan yazılımcıların düştüğü bir haldir bu maddede anlatılmak istenen aslında. Desenler bir çırpıda öğrenilmeye çalışılıp ezberlenir ve hatta ilk projede ne var ne yok mutlak kullanılmak istenir.

Oysa ki gözden kaçan önemli bir husus vardır. Bu, bir çözüm için gereken en doğru deseni/desenleri seçme noktasında nasıl karar verileceğidir?

Yani mesele sadece desenleri öğrenmek değildir! Mesele, bunların birbirlerine olan benzerliklerini, kimin kimin yerine geçebileceğini, hangisinin ne gibi avantajlar sunduğunu, bir arada kullanılıp kullanılamayacaklarını vb bilmektir.

Hatta n sayıda proje içeren dev bir çözüme bakıldığında, kullanılan desenlerin o binlerce satırlık kod kalabalığı içerisinde kolayca görülmesi, nereye müdehale edileceğinin tespit edilmesinin bilinmesidir. Bunlar, desenleri kategori bazlı olarak ayırt etmenin çok daha ötesidir.

Anahtar Terimler(Bunları bir araştırmak lazım)

  • Nesne Yönelimli Programlama — Object Oriented Programming
  • Tasarım Kalıpları — Design Patterns
  • Çözüm — Solution
  • Hangi durumda hangi tasarım kalıbı

Bu hali okurken X yerine büyük ihtimalle .Net, Y yerine de JEE koyabilirsiniz. Bunun tam tersi de olabilir. Hatta X yerine Python, Y yerine R bile gelebilir. Peki ya gerçek dünya bunları söyleyebilme lüksünü kaldırabilir mi?

Bir ürünün geliştirilmesi için bazen araçlardan, kullanılan programlama dilinden ve dilin türevinden bağımsız düşünmek gerekir. Kimi zaman statik bir dil çözüm için biçilmiş kaftanken, bazı hallerde fonksiyonel bir dilin kullanılması icap edebilir. Bazı büyük çaplı çözümlerde birden fazla yazılım alt yapısını bir arada kullanmak da mümkündür. Melez haldeki bu yapılarda her alan için o alanın uzmanı olan yazılımcıları tutmak çok maliyetlidir.

Esnek olabilmek daha önemlidir.

Yazılım prensiplerine, metodolojilerine ve ürün geliştirme süreçlerine hakim olmak, mimarileri tanımak ve uygulayabilmek, programlama dillerinin karakteristiklerinden ve hangi alanlarda etkili çözümler sunabildiklerinden haberdar olmak, müşteri gereksinimlerini doğru anlayıp analiz edebilmek vb gerekir.

Xciyim ve Yciyim demek aslına bakarsanız fanatiklikten farksızdır. Bunu pek çok grup toplantısında da görürüz. Xciler Ycileri suçlar, Yciler Xcileri döver, yolda karşılaştıklarında birbirlerine rakip sokak dansçıları gibi caka satar ama sonuçta bir yere varılmaz/varılamaz. Nihai çözümlerde Xciler, Yciler ile bir noktada konuşmak durumunda, anlaşmak zorunda kalırlar. Tek istisnai durum ekipleri kendi bildikleri hakim teknolojiler ile baş başa bıraktığımız Mikro Servis çiftlikleridir.

Özellikle günümüz uygulama çözümlerinde, farklı platformların aralarında iletişim kurarak komple bir ürünü temsil ediyor oldukları düşünüldüğünde, Xcilik ve Ycilik’den mümkün mertebe sakınmak en doğrusudur.

Anahtar Terimler(Bunları bir araştırmak lazım)

  • Yazılım Tasarım Prensipleri — Software Design Principles
  • Uygulama Geliştirme Yaşam Döngüsü — Application Lifecycle Management
  • Servis Yönelimli Yaklaşım — Service Oriented Architecture
  • Mikro Servis Yaklaşımı
  • Programlama dillerinin karakteristik özellikleri ve türevleri
Burak Selim Şenyurt
·
48 min
·
50 cards

Read “Yazılımcının Derman Bulunmaz Halleri” on a larger screen, or in the Medium app!

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store