25 Tem 2008 Her Yazılımcının Bilmesi Gereken 10 Konsept Kategori: Yazılım Etiketler: MicrosoftYazılım 1 Yorum 10 Iliskilsel VeritabanlarıIliskisel veritabanları, çok büyük web servislerinde kötü performanslar sergiledigi için son zamanlarda sevilmiyor. Ancak yazılım dünyası daha uzun bir süre onları kullanmaya devam edecek. Iliskisel veritabanlarında veriler tablolarda kayıtlar olarak tutuluyor ve genellikle SQL adı verilen dil ile bu veriler sorgulanıyor. SQL'in veri ekleme, silme, güncelleme, filtreleme ve birden çok tablodaki verileri bir arada getirme gibi güzel yetenekleri var.Iliskisel veritabanlarında veri yazıp okuma isini performanslı bir sekilde halledebilmek için SQL, stored procedure'ler (yerlesik yordamlar), constraint'ler (kısıtlamalar) gibi pek çok konuya hakim olmak gerekiyor.9 GüvenlikHack olayları ve veri güvenligi önem kazandıkça güvenlik bilgisinin de önemi artıyor. Veri güvenligi; kullanıcı yönetimi, yetkilendirme, bilgi aktarımı gibi pek çok kavram içeren genis bir konu.Kullanıcı yönetimi, bir sistemde her kullanıcının kendisini ilgilendiren bilgilerle muhattap olması ve diger kullanıcıların bilgilerini görememesi ile alakalı. Yetkilendirme, kullanıcıların yalnızca izin verilen islemleri yapabilmeleriyle alakalı. Daha çok sirketleri ve is akısı bulunduran sistemleri ilgilendiriyor. Yeni gelistirilen OAuth protokolü, web servislerde güvenligi saglamak konusunda yardımcı oluyor. Bu sistemi flickr kullanıyor.8 Cloud ComputingCloud Computing, bir isin daha hızlı yapılması için aynı anda birden fazla bilgisayarın çalıstırılması esasına dayanan paralel programlamadan yola çıkılıp gelistirilmis bir yöntem. Yararlananılabilecek hizmetlerin zaman, kullanıcı yogunlugu gibi parametrelere baglı olarak degismesi esasına dayanıyor.7 Es ZamanlılıkEs zamanlılık, birden fazla isin bir programın kendi içinde aynı anda yapılması ile alakalı. Örnegin java ile yazılan uygulamalarda bunun için thread'ler kullanılıyor.Üretici / Tüketici modeli tipik bir örnek. Üretici durumunda olan kısım sürekli olarak islenecek verileri üretiyor, tüketici olan kısım ise sürekli olarak bu verileri alıp isliyor. Bu iki kısım aynı anda çalısıyor. Her thread'in kendi içinde çalısma mantıgı ayrı olsa da thread'ler verileri aynı anda ve ortak olarak kullandıgı için çalısırlarken yapabilecekleri hataları önlemek uzmanlık gerektiriyor. En karmasık thread kütüphanelerinden birisi Doug Lea tarafından üretilmis ve java çekirdeginde yerini almıs.6 CachingHafif uyku'nun kaseleme dedigi caching, normalde veritabanında tutulan verilerden çok sık kullanılanların hızlı ulasılabilecek bir yere alınması ve buradan hızla kullanılması anlamına geliyor. Örnegin bir kitap siteniz varsa ve geçen haftanın popüler kitaplarını listeleyen bir kısım mevcutsa, bu verileri her gerektiginde hesaplamak yerine haftada bir kez hesaplayıp uygun bir yere kaydediyor ve gerektiginde buradan okuyorsunuz.Cache'lenen verilerin tamamını bellekte tutmak maliyetli bir islem oldugu için, bellekte tutulacak verilerin seçilmesi için uygulanacak yöntemleri seçmek yine uzmanlık gerektiriyor.Facebook'un da aralarında oldugu bir çok modern uygulama, Brad Firzpatrick tarafından gelistirilen memcached adlı sistemi kullanıyor.5 HashingHashing, verilere hızlı ulasmak için baska bir yöntem. Bu yöntemde, her verinin içerigine bakılarak bu veriye özel daha kısa bir veri üretiliyor ve bu kısa veriler index olarak kullanılıyor. Index içerisinde arama yapmak da çok daha hızlı oluyor.Hashing yapılırken her verinin farklı bir hash kodunun olması ve bu hash kodlarının hızlı ulasımı mümkün oldugu kadar kolaylastıracak sekilde ayarlanması farklı bir uzmanlık gerektiriyor.4 Algoritmik Karmasıklık SeviyesiÇok yaygın olarak büyük O harfi notasyonuyla ifade edilen karmasıklık seviyesi, bir algoritmanın hızının, algoritmanın isledigi veri miktarına göre degisimini belirliyor. Örnegin O(n) ile ifade edilen bir algoritma, n tane veriyi t zamanda isliyorsa 2n tane veriyi 2t zamanda isler. O(n^2) ile ifade edilen algoritma ise n tane veriyi t zamanda islerken 2n tane veriyi t'nin karesi kadar zamanda isler. Islenen veri miktarları çok büyük olunca, bunları isleyen algoritmanın karmasıklıgı çok büyük önem kazanıyor.3 Katmanlı MimariKatmanlı mimari, bir yazılımın çalısması için gereken bilesenlerin piramit seklinde yapılandırılması gerektigini ifade ediyor. Piramitin her katmanındaki bilesenin çalısması, kendi altında bulunan bilesenlere baglı olabilir ancak kendi üzerinde çalısanlara baglı olamaz.Bu konuda bilgi alınabilecek Structure 101 ve SA4J adlı iki güzel kaynak var.2 Kurallar ve SablonlarIsimlendirme kuralları ve sablonlar üzerinde en çok durulan ve muhtemelen en önemli tasarım desenleri.Isimlendirme kuralları yazılım gelistirilirken kullanılan tüm isimlendirmelerin ortak kurallara dayanmasını gerektiriyor. Örnegin JUnit adlı java bileseni, test metodlarını, isimlerinin basında yer alan test kelimesi sayesinde tanıyor.Sablonlar ise verilerin gösterimlerinin verilerden bagımsız bir sekilde yapılması ile ilgili. Örnegin XML verilerini göstermek için XSL sablonları kullanılır.1 ArayüzlerArayüz, yazılımdaki en önemli konsept. Yazılım gelistirirken problemleri mümkün oldugunca basit modellemek ve bu modellere mümkün oldugunca basit ve anlasılır arayüzler sunmak gerekiyor.Bu konudaki tavsiyeler söyle:Asla ileride kullanıslı olabilecek metodlar yazmayın. Minimalist olun. Daha önce yaptıgınız hatalar ile yüzlesmekten korkmayın. Hatalarınızı düzeltmeye açık olun. Sabırlı olun ve süreçten zevk alın. Adım adım ilerleyin. Kaynak:bildirgec.org Yorum (1) mehmet türkmen / 1.8.2008 05:16:07 Hocam Elinize sağlık , Güzel paylaşım olmuş. Yorum Yaz * Ad Soyad: * Email: * Message: