Mimari denildiğinde insanın aklına gelebilecek ilk konu değildir yazılım. Ama nasıl köprüler barajlar gibi büyük yapıtların bir mimariye ihtiyacı varsa, geniş kapsamlı yazılım projelerininde mimariye ihtiyaçları vardır. Çünkü projeler büyüdükçe bunların üstesinden gelmek zorlaşır. Dolayısıyla, karmaşık ve büyük çapta sistemleri tasarlamak için aslında olaylara çok basit noktalardan bakmak gereklidir. Bu noktada detaya fazla girmeden size neden ve nasıl yazılım mimarisi yapıldığından bahsedeceğim. Örneklerim biraz olağan dışı olursa beni mazur görün.
Öncelikle, neden mimariye genelde ihtiyaç vardır sorusunun yanıtını vererek başlayalım. Düşününki bir sürü inşaat işçisi duvar yapabiliyor. Hepsini bir araya getirsek ve Taç mahal yapmalarını istesek bu yapıtı inşa edemeyiz. Ancak bir mimar yapıtın mimarisini çıkarırsa ve de daha sonra bu mimarinin mühendisliği yapılırsa bu şekilde planlı ve programlı şekilde ilerlenir dolayısıyla ortaya eşsiz eserler çıkarılabilir. Aynen bu şekilde de yazılımlarda bu sistem geçerlidir. Mesela bir oyun yapılacak yada facebook gibi bir site. Şimdi siz bu siteye salt bakamazsınız. Sebebi çok iyi bir mimarisi olmaz ise sistem yeni gelen teknolojileri yada yazılımları kabul etmeyecektir. Sadece o değil nereden başlayacağınızı da bilemezsiniz. Çünkü sistem o kadar karmaşık ki planınız olmadan üstesinden gelinemez. Bu noktada amaç geliştirilebilir, yeniliklere açık, uygulanabilirliği kolay ve sağlam sistemler oluşturmaktır. Bu durumda da mimari artık kaçınılmazdır.
Eğer sizi yazılımların da mimariye ihtiyacı olduğuna ikna ettiysem size yazılım mimarisinin nasıl yapıldığına dair yüzeysel bilgiler vereyim. Genel olarak yaptığınız yazılımlar 2 parçaya ayrılabilir. Birincisi kullanıcıların görüp kullandığı görünüm ara yüzü(Graphical User Interface) ve bu ara yüzün planlayıcısı ve kontrol mekanizması olan bir mantık ünitesi. Şimdi mimari bu noktada başlıyor. Görünüm ara yüzünü o kadar iyi ayırırsınız ki alttaki mantık ünitesinden, iki kısımda birbirinden etkilenmez. Buna şöyle bir örnek vereyim. Şimdi facebook yeni bir tema oluştursa kendisine, sizce var olan her şeyi değiştirir mi? Tabiki hayır. Var olan temayı başka bir temayla rahatça değiştirebilecek bir sistemleri vardır. Bunu da mimarileriyle başarmışlardır. Peki bu mimari dediğimiz şey bu iki üniteyi sadece birbirinden ayırmak mıdır? Hayır değildir. Maksadımız sistemi yukarıda saydığımız özelliklere kavuşturmaktır. Sistemi öyle yapmak istiyoruz ki her şeyin yerine yenisi çıkarılıp takılabiliyor olsun. Tabi bu hiçbir zaman tamamı ile başarılabilecek bir durum değildir. Bu da bilgisayar ve yazılım mühendislerinin çalıştığı alanlardan biridir..
Şimdi bilgisayar mühendisi ve bilgisayar bilgisi iyi olan arkadaşlara yönelik kısıma geldik. Bu kısımda size yazılım mimarisinde kullanılan birkaç şablondan(pattern) bahsedeceğim. Öncelikle hepinizin bildiği pattern Model-View-Controller en çok bilinen ve yaygın olarak kullanılan mimari şablonudur(architectural pattern). Bunun yanı sıra oyun şirketlerinin çok kullandığı Peer-to-Peer yaygın bir şablondur. Bu şablonda internet üzerindeki kullanıcıların aynı anda hem sunucu(server) hemde alıcı(client) olabileceği düşünülerek tasarlanmıştır. Bundan başka Pipe and Filter diye bir şablonuzum varki bu da genelde derleyiciler(compiler) için kullanılmaktadır. Bu mimaride yapılacak işlemi parçalara ayırma güdülmüştür. Bunu şöyle açıklayabilirim. Mesela bir kodu derleme işlemini şu şekilde yapar bu tür sistemler. İlk önce bir syntax analizi yapar burada hata varsa durur, sonra array in sınırlarını kontrol eder. Daha sonra başka bir takım işlemlerden geçirdikten sonra kodunuzu derlemiş olur. İşte bu tür sıralı işlemlerde bu şablon kullanılmaktadır. Son zamanlarda çok yaygın olan bir diğer şablonsa Service-Oriented-Architecture dır. Bu mimaride ise temel olarak bir sistem üzerinde birden fazla küçük sistemin uyumlu şekilde çalışması güdülür. Örnek verecek olursak, facebook üzerinde farmville in çalışması gibi. Şu an açıklamadığım ama merak edeceğiniz diğer önemli mimari şablonlarını ise sıralıyorum.Multitier Architecture, Implicit Invocation, Blackboard system ,Naked Objects.
Bu kadar çok konuşup başınızı ağrıttıktan sonra yazımı burada tamamlamak istiyorum. Kısaca karmaşık işlerin çözümü basitten başlamaktan geçer. Bundan dolayıda mimari yazılımda gerekli olan çok önemli bir kavramdır.
Aslında bayağıdır yazmıyordum sitede ama bir arkadaşın sorusu üzerine birkaç satır bir şeyler karalayayım dedim. Arkadaş bize Linux tabanlı işletim sistemlerinin avantaj ve dezavantajlarını sordu. Biz de aşağıda elimizden geldiğince konuyu ortaya koyacağız.
Linux tabanlı işletim sistemlerinin en büyük artısı bedava olması. Kimseye para vermiyorsunuz. Şimdi akla gelen ilk şey biz zaten para vermiyoruz işletim sistemine. Peki, yeni bir diz üstü bilgisayar aldığınızda gelen Windows işletim sistemleri sizce bedava mı? Tabii ki değil… Bunun haricindeki özelliklere aşağıda bakalım.
Teknik Detaylar: Windows serilerini temel alarak aşağıdaki yorumları yaptım.
Benim Linux tabanlı işletim sistemlerinde ilk dikkatimi çeken özellik fazla işlemci kullanımı ama buna karşılık gayet cüzi miktarda ram kullanımı. Buna şöyle bir örnek verebilirim. Mesela bilgisayarda hiçbir şey yapmazken Windows 2gb rami olan bir bilgisayarda Windows 400 mb civarında ram kullanırken, Linux tabanlı Ubuntu yaklaşık olarak 250 mb civarında ram kullanıyor. Öbür taraftan Windows neredeyse hiç işlemci kullanmazken, Ubuntu yaklaşık olarak %3-4 civarında işlemci kullanıyor.
Windows kullanıcısı için program sorunu yoktur çünkü ihtiyaç olan her türlü uygulama zaten Windows tabanında üretilmiştir ama Linux temelli işletim sistemlerinde durum çok farklıdır. Sadece istediğiniz yazı yazmak olsa bile Microsoft Office gibi bir editörünüz yoktur mesela. Yada photoshop, Messenger ve benzeri programlar da çalışmaz. Onların yerine özgür yazılımcılar tarafından geliştirilen bence onların yerini tutamayacak programlar vardır. En büyük sıkıntılardan biride oyun çalışmaması : D Özellikle oyun tutkunları için korkulu rüya olabilir bu özellik : D
Görsel Detaylar: Windows ve Ubuntu karşılaştırılmıştır
Windows ne yenilik getirdiyse de Ubuntu da ki görselliğe yaklaşamamıştır bence. Farklı masa üstleri ve bunlar arasında şık geçişler cidden insanı Ubuntu kullanmaya itiyor. Bunlarla da kalmıyor tabii. Her bir pencerenin canlı bir varlık gibi davranması ve bunun gibi detayların kişiselleştirilebilir olması kullanıcı için çok büyük bir olay. İşletim sisteminizin sizi yönlendirmesi yerine siz onu yönlendiriyor oluyorsunuz bir noktada. Bunun yanında Linux işletetim sistemlerininde her şeyi işletim sisteminin kendi yapmıyor. Bunun yüzünden kod yazmak zorunda kalabilirsiniz. Bu bilgisayar temeli (bilgisayar mühendisliği, programlama veya buna yakın dallarda bilgi sahibi olmayan)olmayan insanlar için yani genel kullanıcı için çok büyük bir dezavantaj.
Daha bir sürü detaya değinilebilir aslında ama ben bu kadarla sınırladım kendimi. Ben özgür yazılımı sevdiğimden zaman zaman Ubuntu, Fedora gibi işletim sistemlerini kullandım. İkisinden de cidden memnun kaldım. Ama bu sistemleri kullanırken başınıza her şey gelebiliyor. Bunları da düzeltmek için ciddi olarak bu işletim sistemlerinden anlamanız gerekebilir. Uzun sözün kısası Linux tabanlı işletim sistemleri güzel olabilir performansı iyi olabilir ama halen genel kullanıcıya hitap edebilecek özelliklere sahip değil.
Yazıma başlamadan önce antivirüs programları hakkında söyleceğım çoğu şeyin kendi bilgi, kanaatime ve tecrübelerime dayandığını belirtmek istiyorum. Bana güveniyorsanız buyrun antivirüs olayını beraber inceleyelim. Öncelikle antivirüs programları günümüzde kaçınılması zor bir gerçek halini aldı. (Linux ve unix tabanlı işletim sistemlerini burada hariç tutuyorum.) Her bilgisayarda bir antivürüs programı şart. Tabii akla ilk gelen soru hangisi daha iyi? Hangisi daha hesaplı ? Hangisi bilgisayarı yorar ?
Hangisi daha iyi sorusu genel olarak kötü bir soru çünkü antivirüs programların birbirlerine göre iyi oldukları alanlar var. Mesala A antivirüs programı istenmeyen elektronik posta konusunda başarılıyken, B antivirüs programı bilgisayarı çok az yoruyo olabilir. Şimdi dilerseniz antivirüs olayına bir giriş yapalım. Öncellikle antivirüs programı olarak kendi tercihimin Kaspersky olduğunu belirtmek istiyorum. Bunu dedikten sonra kaspersky antivirüsü inceleyelim. Kaspersky genel itibariyle her türlü virüsü neredeyse bulabilen bir program öyleki norton veya avastın bulamadığı anlarda kaspersky’i yükleyip bilgisayarınızı tarattığınızda virüsü anında bulup siliyor. Buna şöyle bir örnek vermek istiyorum. Avast kurulu bir bilgisayara virüs bulaşıyor. Avast virüsü buluyor ama silemiyor. Kaspersky yüklediğinizde bilgisayarı daha taratmadan virüs buldum sileyim mi diye uyarı veriyor. Artık anlayın farkı… Zaten norton antivirüs değil virüsün ta kendisi. Güzel bir arayüz dışında işe yarar hiç bir yanı yok. Bilgisayarınıza kesinlikle yüklememenizi tavsiye ediyorum. Avast’a gelince idare eder denilebilir böyle ahım şahım bir özelliği yok. Bunların yanında avira antivirüs gayet başarılı ama bilgisayarınızın oldukça ağırlaşmasına sebebiyet veriyor. Bitdefender neredeyse Kaspersky kadar iyi bir antivirüs programı belkide bazı noktalarda daha iyi ama o da bilgisayarı ağırlaştıran bir program. Gelgelim nod32′ye genel olarak yine güzel bir antivirüs ama benim kanaatimce bitdefender ve kaspersky kadar iyi değil. Türkiye’ de adı fazla duyulmayan ama benim kullandığım ve memnun kaldığım McAfee antivirüs programıda gayet iyi bir program. Virüsler için birebir denilebilir cidden. Neredeyse bilgisayarınızı her türlü virüse karşı korumakta. Şu ana kadar saydığım antivirüs programlarından başka piyasada adı sanı fazla duyulmamış orta seviyede bir kaç tane antivirüs programını da saymak istiyorum. Bunlar Panda, ZoneAlarm ve Trend. Yazımda söz ettiğim antivirüs programlarının fiyatları hakkında net bir şey söyleyemiceğim çünkü her sene fiyat değiştiriyorlar fiyat performans kriterini benim açıklamalarım doğrultusunda size bırakıyorum.
Yukarıda belirttiğim antivirüs programlarını inceledikten sonra ortaya koyduğum değerlendirmede kaspersky, avira, McAfee ve Bitdefender tercih edilebilecek antivirüs programları. Bu programlara verdiğiniz paranın boşa gitmeyeceğine kefil olabilirim.