Doğru bil(me)diklerimiz neler?

Dediğim gibi bir sürü boş vaktim olmasa da bir sürü boş işe harcadığım vaktim olduğu için bir çok gereksiz konuda yazı yazabiliyorum. Aynen bir sürü gereksiz yazılım yazmak gibi ama biraz daha farklı. Bus efer ki konu, esasta doğru bildiğimiz yanlışlar ile alakalı. Bildiğiniz gibi, yazılım üzerine çalışınca, yazılım hakkında bir çok diyaloğun da içerisinde oluyorsunuz. Bu yazının ortaya çıkmasında sebep aynı böyle bir tartışmaydı; **“Object Oriented Programming kullanmıyorsunuz!” lafından çıktı hepsi, beni suçlamayın onu suçlayın.

Ne Bil(mi)iyoruz?

Pek tabii ki yazılımcılar olarak biz her şeyi biliyoruz! Aksi ispat edilemez, edilecekse gelsin çıksın karşıma. Biz bu meslekte dirsek çürüttük, her şeyini biliyoruz tabii ki. Ne biliyoruz peki? OOP biliyoruz, Pattern biliyoruz, Nesne biliyoruz, Polimorfizm biliyoruz, her bir şeyi biliyoruz. Açıkcası bir kaç güne kadar ben de böyle diyordum ki, piyasadan bir üstadımız beni yerin yedi kat dibine sokuncaya kadar. Sonrasında kendime geldim, nefes aldım bir oh çektim falan.

Peki gerçekten bu terimlere hakim miyiz?

Konuşmanın biraz daha heyecanlandığı noktada, benim otomatikman muhalefete geçme gibi bir özelliğim olduğundan, konu genelde farklı boyutlara taşınır. Konuşmada arkadaşın yukarıda belirttiği OOP kullanmıyorsunuz, bir nefi bilmiyorsunuz lafı sonrasında, sinirler arttı benim. “OOP Nedir?” dedim arkadaşa, basitçe bana OOP tasarım kalıplarıdır dedi o da. Bir kere öyle değil bu işler. OOP dediğimiz, nesne tabanlı programlamadır. Yani nedir? Nesne olması gerekir, yani senin nesneler yaratman, basitçe bu nesneleri yönetecek katmanları yazman ve buna bağlı programlama yapmanı anlatır. Peki ben hiç tasarım kalıbı ya da güzel adıyla Design Pattern kullanmamışsam? O zaman ben hiç OOP kullanmamış mı olurum? Ekmeğe, şeklini verirken franzile şekil vermediysem ortaya çıkan ürün ekmek değil midir? Aynı mantıkta yanıtlanabilecek bir cümle.

Eğer sen nesnelerini oluşturup, katmanlarını koyduysan, SOLID mantığını biraz da olsun yakaladıysan o zaman zaten OOP yapmışsın ne mutlu sana. Pattern kullanmadıysan OOP yapmadın diye bir algı yok, olmamalıdırda. Pattern kullanmadım diyorsunuz da peki o konuda da emin misiniz?

Pattern olayı

Ya şimdi bir gerçek var, Design Patterns popüler olduğundan beri, herkes bu terimi kullanır oldu hayatında. Adı üzerinde, tasarım kalıbı bu, yani kalıplaşmış kod yapısı. Hiç kullanamadan adam akıllı kod yazmanız için çömez olmanız lazım, kullanıp adını bilmezseniz normal developersınızdır. Fakat insanlar sizden ismini ve cismini bilmenizi bekler. Yeni dünya diye bir meyva var, ismini tam olarak bilmem. Alırım, yerim. Tutup da sen bana bunu yerken, “hiç yeni dünya yememişsin, çok süper meyva” dersen, yemiş olsam bile yemedim psikolojisi oluşur üzerimde.

Kod açısından örnek verirsek, yıllarca data fonksiyonlarını yazdıktan sonra, datayı ele alan DAL yani Data Access Layer’ı yazarken nesnelere uygun tekil sınıflar yazdım. Yani bir tablo varsa, o tabloya data girişini sağlayan. DataTablosuBase.Save() ya da DataTablosuBase.Insert(DataTablosu _dataTablosu) kodlarını içeren sınıfı yazdım ve datalarımı öyle kaydettim. Şimdi yıllar sonra öğreniyorum ki bu yöntem Repository Pattern olarak ele alınıyormuş. Şimdi aynı konuşmada, arkadaş bana onu da dedi “Hiç pattern kullanmadan OOP yazılmaz”. Bu arkadaşı ilk arayan 20 kişiye postayla göndermeye karar verdim. Bildiğin bas baya kullanmışım işte.

Bu pattern’in üç temel prensibi var; Data erişiminde tek noktanın olması, Tablolarınızla alakalı tek bir sorumlu yer olması, Olası altyapı değişimlerinde sistemin minimum değişimle işlemesi. E ben bunu gayet yerine getirmişim, sadece “DataTablosuBase” yerine “DataTablosuRepository” dememişim. Ha bir de EF kullanmamışım ama o kontaya girersem çok olaylar çıkar.

Sonuç

Demem odur ki, asla bir insanla beraber adam akıllı kod yazmadan ona şunu yapmamışsın, bunu yapmamışsın demeyin. Yapmıştır, illa yapmıştır da bilmiyordur. Yapmıştırsın da bilmiyorsundur diyin. Bu sayede siz de o insandan biraz kod öğrenebilir, o insanla aranızı bozmazsınız. Dünya daha güzel bir yere gelir. Fakat konunun başında da dediğim gibi biz yazılımcılar her şeyi bildiğimiz için bu konuda burnu havada insanlarız. Arada bir kendinizden daha iyi olan insanlar tarafından alaşağı edilin de, kendinize gelin vallaha.

One comment

  1. Bunun bide şöyle bir tarafı var. faraza ben füze programı yazıyorsam real time programming bilmem gerekiyor. Hayatı boyunca ERP yazmış birine real time programming bilmiyorsun eziksin demek yanlıştır. sen kalk bakalım o kadar modülü yazan ERP programcısının sabrını yakala? o kadar raporlarla boğuş? herkesin bir meziyeti vardır. oyun programlamada fizikle ilgili algoritmaları bilmek gerek mesela bir arabav giderken ayağınızı gazdan çektiğinizde arabanın yavaşlama ve durma oranını sinüs eğrisiyle. angry birds’ in uçuş ayarlarınıda fizikteki atışlar mevzusundan t anındaki zamanı hesaplayıp en az 25 fps de ekrana koordinat koordinat basmak gerekiyor. hiç yapmayan adamı bunu niye yapmadın bilmiyosun diyipde cahilsin sen demek veya bunu yapan adamında ben herşeyi biliyorum deyipde ortalarda dolanması? KİBİR yapılmamalı ve her bildiğimiz ilmin ALLAH’ IN lütfuyla olduğunu unutmamak lazım.

Comments are closed.