Arda Çetinkaya Thoughts on software, with the occasional personal rambling…

Uzun zamandır beklenen açıklama dün yapıldı ve Sonisphere’in Türkiye ayağı resmi olarak açıklandı.Biletlerde satışa çıktı…Hemen almak lazım, kesin biter…

Ayrıntılar: http://tr.sonispherefestivals.com/

Biletler: http://www.biletix.com

Bu sene TechEd, ilk defa ortadoğu bölgesinde, Dubai’de yapılıyor…Yapılıyor diyorum,çünkü daha bitmedi…Yarın son gün…Dubai ile olan yakın ilişkilerimden(:)) dolayı bu sene bende TechEd furyasına Dubai’de başlangıç yaptım. 2 günü bitirdim…1 gün daha olmasına rağmen şimdiden açıkcası oldukça tatmin oldum. Önceki TechEd’e katılan kişiler ile konuştuğumda diğer TechEd’lere nazaran daha sönük geçtiğini öğrenmiş olsamda, dediğim gibi hem oturumlar hemde organizasyon açısından beni tatmin etti. Türkiye’den tanıdık bir sürü yüz görmüş olmam da ayrı bir güzellik kattı benim açımdan…

Oturumlardan tek tek bahsetmeyi planlamıyorum ama genel olarak Microsoft’un çoğu ürünü ile ilgili oturumlar olduğunu söyleyebilirim. Teknik olarak çok daha güçlü bir içerik bekliyor olsamda, şu zamana kadar ki oturumlardan oldukça memnun kaldım. Bildiğim konuları pekiştirdim, bilmediğim konuları öğrendim ve öğrenmeyi öğrendim…”Öğrenmeyi” öğrendim diyorum çünkü bu tarz etkinliklerden açıkcası ilk olarak bunu bekliyorum. Konularda uzman kişiler tarafından doğru bir şekilde 1 saat boyunca yönlendiriliyor olmak bence en doğrusu…Yani sonuçta oturumlarda anlatılan konuların hiç birini bu kadar kısıtlı zamanda yalayıp yutmak imkansız…

S.Hanselman gibi(:)), Microsoft bünyesinde konularında uzman olan kişiler ile tanışmış olmak, sorularınıza cevap almak ise bu tarz etkinliklerin sanırım diğer bir güzel yanı. Problemlerinizi, düşüncelerinizi böyle bir ortamda paylaşabiliyor olmak zaten sanırım etkinliğin dayandığı temellerden biri…

Türkiye’den de katılım oldukça fazlaydı.Sanırım yaklaşık 50 kişi gelmiş…İsimlerini ne yazık ki hatırlayamadığım bir çok kişi ile tanıştım ve bilgi paylaşımında bulundum, mutlu oldum…Ama açıkcası konuşmacı olarak Türkiye’den de daha fazla isim görmek isterdim.(Konuşmacı olarak sadece Daron Yöndem vardı)

Son olarak imkanı olan herkesin ileride mutlaka bu tarz etkinliklere katılıyor olmasını tavsiye ederim. Özellikle uluslararası düzeyde olanlara şiddetle tavsiye ederim…Neyse bu şimdilik bu kadar, ilerleyen zaman içerisinde TechEd Dubai ile ilgili başka şeyler daha yazıyor olacağım… Yani umarım…(:

When IE 8 had released, I have developed an accelerator for Internex Explorer. The accelerator provides some kind of link between the selected context in a web page and Last.fm. I have developed it a little bit with preview windows support and some nice features coming from Last.Fm API. So if you ask “what is the accelerator doing now?”, just check the below image.

If you want to try it, just download it from http://www.ieaddons.com/en/details/other/Find_on_Lastfm/

And please feel free to send your feedbacks to me…

Bir çok yerde “Architecture and Design Patterns”(Mimari ve Tasarım Kalıpları) başlığına benzer başlıklar altında çeşitli yazılar okuyoruz. Ve çoğunun içeriği Gof(gang of four)’un ön ayak olduğu tasarım kalıpları ile ilgili…İyi,güzel ama peki bunların “mimari” kelimesi ile alakası ne…Direkt olarak pek yok…Evet, gerçekten pek yok…

Belki benden tecrübeli meslektaşlarım biraz kızacak ve hatta ne saçmalıyorsun falan diyecektir. Ama açıkcası “Design Patterns”(Tasarım kalıplarının) direk olarak mimari yaklaşımlar ile alakalı olduğunu düşünmüyorum, aslında düşünmediğim gibi, kendi tecrübelerimden,okuduklarımdan, öğrendiklerimden görüyorum da…

“Design Patterns”(Tasarım kalıpları) hakkında internette bir çok kaynak var. Çoğunda belli kod parçacıkları ile örnekler ile ne amaçla kullanacağımızı falan anlatılıyor.Süper, mükemmel…Ama erken…Daha kod yazmaya başlamadık ki…

Madem böyle kalıp falan başladık bahsetmeye, bu yazının amaçı olan “Architecture Patterns(Sytles)”’e(Mimari Kalıplara) geçelim.Çeşitli kaynaklarda mimari sitiller, bazılarında da mimari kalıplar şeklinde geçer, ama yazılımcıların bakış açısından daha kolay anlaşılacağını düşündüğüm için bende kalıp olarak kullanacağım. Önceki yazılarda da bahsettiğim ihtiyaçlar doğrultusunda şekillenecek(şekillenmesi gereken) mimarimizi, belli tecrübelerden, teknolojik açılardan ve belli limitlerden dolayı belli kalıplar dahilinde şekillendirmemiz bize yardımcı olabilir. Kurabiye yaparken kullanılan kalıplar ya da kumdan kaleler yaparken kullandığımız kovalar gibi…

Bu bağlamda, ne olduklarının çok farkında olmadığımız ama sık sık kullandığımız kavramlar ortaya çıkıyor. Mimari kalıplar…

Mimari kalıplar, geliştireceğimiz sistemlerin ya da yazılımların ihtiyaçlarımız doğrultusunda çok daha etkili çalışabilmesini sağlayacak ve mimarimizi geliştirirken bize yol gösterecek kalıplardır. Çok daha iyi anlaşılması adına aşağıdaki gibi bir liste yaparsam daha iyi olur sanırım.

  • Bileşen tabanlı mimari
  • Katmanlı mimari
  • P2P mimari
  • UI tabalı mimari
  • Mesaj bazlı mimari
  • Servis tabanlı mimari
  • Event tabanlı mimari

Yukarıda bazı popüler mimari kalıplardan örnekler var. Daha çeşitlenebilir tabi ki. Bunları tek tek şuan için açıklamayı düşünmüyorum. Bu noktada mimari kalıpların neden önemli olduğunu anlatmak istiyorum. Mimari kalıplar, ihtiyaçlarımızı daha net bir şekilde karşılamamızda bize yol gösterir. Ayrıca ihtiyaçlarımızı karşılarken, hangi yöntemleri kullanabiliriz bunları sunar. Bu kalıpları ayrı ayrı düşünüyor olmak biraz hatalı olabilir. Direk olarak kesiştirmek de hatalı olur. Mimari tasarımı yaparken, ihtiyaçlarımızı bu kalıplar doğrultusunda çerçeveleyip tasarımımızı yapmak çok daha sağlıklı sonuçlar getirecektir. Ayrıca bu kalıpların kendi içlerindeki kanıtlanmış yöntemler, sizi bir çok şeyden kurtarıyor da olacaktır.

Son olarak tekrardan “Design Patterns”-tasarım kalıplarının, mimari tasarımla direk alakası olmadığını söylemek istiyorum. Bu karıştırmadan dolayı kavramların da karıştığını görüyorum. İlerleyen yazılarda yine bu konulardan bahsediyor olacağım…Şimdilik bu kadar…

“Yazılım mı tasarlarız, yoksa yazılım mimarisini mi?” şeklinde yukarıdaki soruyu geliştirdiğimiz yazılımlar için de sorabiliriz. Hem yazılımın kendini, hem de yazılım mimarisini  tasarlamayı aynı kelime ile tanımladığımız için bu kavramlarda karışıyor. “Tasarım”…

“Software Design” ve “Software Architecture Design” iki farklı kavram aslında. Bu iki kavramın karıştırılıyor olması, mimari kavramların kaybolmasına neden oluyor ne yazık ki. Bundan dolayı “Tasarım”(Design) ve “Mimari”(Architecture) kavramlarının arasındaki sınırı çok iyi anlamamız gerekmekte. Tüm mimari yaklaşımlar aslında bir tasarımdır. Ama bu tasarım, “Yazılım Tasarımı”(Software Design) daki tasarım değil. Mimari olarak yaklaştığımız zaman, “tasarım” kavramı çok daha yukarıdan bakmamızı gerektiren bir kelime olarak karşımıza çıkıyor. Bir yazılım ya da sistemdeki bileşenlerin nasıl organize olduğu ve ilişkilendirildiği, o sisteme ya da yazılıma “Mimari” açıdan yaklaşımı gösterir. Bu bileşenlerin nasıl sınıflandırıldığı ve ayrıştığı ise “Tasarımı” olarak açıklanabilir. Biraz daha basite indirgememiz gerekirse, yazılım geliştirirken bileşenlerimizi  “sınıf”(class)’lara ayırmamız, bu “sınıf”lar arasında ilişkileri belirlememiz “tasarım” kavramının konusu. Ama bileşenlerimizin(component) nasıl ilişkilendirileceği de “mimari” kavramının konusu.

Açıkcası kendi geliştirdiğim yazılımlarda, bu iki kavramın ayrımını fark ediyor olmak geliştirme sürecini daha sağlıklı hale getiriyor.Bir yazılım geliştirmeden önce hepimizin yapmış olduğu bir tasarım mutlaka vardır. İşte bu tasarım süreci  mimari tasarıma denk geliyor aslında. Ve yazılım geliştirme sürecinde herkesinde bildiği gibi çok önemli bir yer kaplıyor. Bu süreçte dikkat edilmesi gereken bir çok önemli nokta var.Bunlardan bence en önemlilerini kendimce anlatmaya çalışacağım;

  • Sınırlar: Tasarım sürecinde, geliştirmemiz gereken yazılımın ya da sistemin ihtiyaçları ve neden gerekli olduklarını kesinlikle unutmamak lazım. Ve ihtiyaçtan fazlasını düşünmememiz lazım. Açıkcası bunu sürekli yaşıyorum. İster istemez yazılımın olabildiğince geniş bir kapsamı olması, ya da “genişletilebilir” kalite özelliğinin hem tasarım hemde geliştirme sürecinde öne çıkması kötü tasarımlara yol açıyor. İş gereksinimleri dışında, tasarımı karmaşıklaştıracak etkenleri tasarıma sokmamak ve ihtiyaçlarımız doğrultusunda sınırlarımızı aşmamak lazım.
  • Bileşenlerin Ayrılması: Tasarımı yaparken, bir birinden farklı tüm fonksiyonel özellikleri belli bileşenler olarak ayırmak tasarımın karmaşıklığını önleyecektir, ayrıca ihtiyaçların gerçekten karşılanabiliyor olmasının gözlemlenmesine ve bileşenlerin tek başlarına ne işe yaradıklarını da anlamaya yardımcı olacaktır.Literatürde “Separation of Concerns” olarak yer alan bu kavram, geliştirme sürecindeki tasarım kalıpları ile ne kadar önemli olduğunu zaten belli edecektir.  Dolayısıyla geliştirme sürecinde sonradan fark etmek yerine, başlangıçta bu yaklaşıma göre yapılacak tasarımlar faydalı olacaktır.
  • Bileşim(Composition) ve Kalıtım(Inheritance): Bu iki kavramın çok iyi anlaşılıyor olması gerekmekte. Çünkü geliştirilecek sistemin ya da yazılımın bileşenleri üzerinde bu iki kavramın çok büyük etkisi olacaktır. İhtiyaca göre bu iki yaklaşım doğru çizilmelidir.”Kalıtım”(Inheritance) bileşenler üzerinde bağımlılığı artıracağından, hangi bileşenlerin bir birleri ile alakalı olacağı ilişkisinin çok iyi tanımlanması gerekmekte. Öte yandan “Bileşim”(Composition) bileşen kavramını daha netleştirecektir.
  • Katmanlar(Layers): Geliştirilen sistem ya da yazılım da, bileşenler arasındaki ilişikileri görmek ve yönetmek adına sistemi ya da yazılımı katmanlara ayırmak tasarımı kolaylaştıracak ve temelini güçlendirecektir. Bu şekilde katmanlara ayırmak sistemdeki akışın yolunuda görmenize yardımcı olacaktır.

Mimari tasarımı yaparken bu tarz şeylere dikkat ediyor olmak, cidden bazı şeyleri çok daha net ortaya çıkarıyor ve sağlıklı bir geliştirme sürecinin ilk ışıklarını gösteriyor. En azından kendi tecrübelerime dayanarak bunu söyleyebilirim.Kendi tecrübelerim ve bilgilerim dahilinde “Mimari Tasarım” ve “Yazılım Tasarımı” arasındaki farkı anlatmaya çalıştım. Hatta biraz da “Mimari Tasarım”a daldım…Umarım faydalı olmuştur.İlerleyen zamanlarda bu konular hakkında daha çok yazıyor olacağım. Her türlü eleştiriniz ve düşüncenizi lütfen paylaşmaktan çekinmeyin. Bu kavramlar böyle böyle ortaya çıkıyor ve gelişiyor…Haydi görüşmek üzere…