Tam o sırada, başka bir pillinetwork sitesi olan hafif.org'da: "Korkmaktan Korkmak "Fobofobi""


Yazılım dünyası, kalabalık ekiplerin yerini büyük ve karmaşık işleri bir kaç iyi yazılımcının yapacağı bir yöne doğru ilerliyor.

yazılım mühendisi
yazılım mühendisi

Alex Iskold, bu ekiplerde yer alacak mühendislerin bilmesi gereken 10 konsepti listelemiş.

10 İlişkisel Veritabanları

learning mysql
learning mysql

İlişkisel veritabanları, çok büyük web servislerinde kötü performanslar sergilediği için son zamanlarda sevilmiyor. Ancak yazılım dünyası daha uzun bir süre onları kullanmaya devam edecek.

İlişkisel 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.
İlişkisel veritabanlarında veri yazıp okuma işini performanslı bir şekilde halledebilmek için SQL, stored procedure’ler (yerleşik yordamlar), constraint’ler (kısıtlamalar) gibi pek çok konuya hakim olmak gerekiyor.

9 Güvenlik

web security, privacy and commerce
web security, privacy and commerce

Hack olayları ve veri güvenliği önem kazandıkça güvenlik bilgisinin de önemi artıyor. Veri güvenliği; kullanıcı yönetimi, yetkilendirme, bilgi aktarımı gibi pek çok kavram içeren geniş bir konu.
Kullanıcı yönetimi, bir sistemde her kullanıcının kendisini ilgilendiren bilgilerle muhattap olması ve diğer kullanıcıların bilgilerini görememesi ile alakalı. Yetkilendirme, kullanıcıların yalnızca izin verilen işlemleri yapabilmeleriyle alakalı. Daha çok şirketleri ve iş akışı bulunduran sistemleri ilgilendiriyor. Yeni geliştirilen OAuth protokolü, web servislerde güvenliği sağlamak konusunda yardımcı oluyor. Bu sistemi flickr kullanıyor.

8 Cloud Computing

programming amazon web services
programming amazon web services

Cloud Computing, bir işin daha hızlı yapılması için aynı anda birden fazla bilgisayarın çalıştırılması esasına dayanan paralel programlamadan yola çıkılıp geliştirilmiş bir yöntem. Yararlananılabilecek hizmetlerin zaman, kullanıcı yoğunluğu gibi parametrelere bağlı olarak değişmesi esasına dayanıyor.





7 Eş Zamanlılık

java threads
java threads

Eş zamanlılık, birden fazla işin bir programın kendi içinde aynı anda yapılması ile alakalı. Örneğin 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 işlenecek verileri üretiyor, tüketici olan kısım ise sürekli olarak bu verileri alıp işliyor. Bu iki kısım aynı anda çalışıyor. Her thread’in kendi içinde çalışma mantığı ayrı olsa da thread’ler verileri aynı anda ve ortak olarak kullandığı için çalışırlarken yapabilecekleri hataları önlemek uzmanlık gerektiriyor. En karmaşık thread kütüphanelerinden birisi Doug Lea tarafından üretilmiş ve java çekirdeğinde yerini almış.

6 Caching

web caching
web caching

hafif uyku’nun kaşeleme dediği caching, normalde veritabanında tutulan verilerden çok sık kullanılanların hızlı ulaşılabilecek bir yere alınması ve buradan hızla kullanılması anlamına geliyor. Örneğin bir kitap siteniz varsa ve geçen haftanın popüler kitaplarını listeleyen bir kısım mevcutsa, bu verileri her gerektiğinde hesaplamak yerine haftada bir kez hesaplayıp uygun bir yere kaydediyor ve gerektiğinde buradan okuyorsunuz.
Cache’lenen verilerin tamamını bellekte tutmak maliyetli bir işlem olduğu için, bellekte tutulacak verilerin seçilmesi için uygulanacak yöntemleri seçmek yine uzmanlık gerektiriyor.
Facebook’un da aralarında olduğu bir çok modern uygulama, Brad Firzpatrick tarafından geliştirilen memcached adlı sistemi kullanıyor.

5 Hashing

lecture notes in computer science
lecture notes in computer science

Hashing, verilere hızlı ulaşmak için başka bir yöntem. Bu yöntemde, her verinin içeriğine 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ı ulaşımı mümkün olduğu kadar kolaylaştıracak şekilde ayarlanması farklı bir uzmanlık gerektiriyor.

4 Algoritmik Karmaşıklık Seviyesi

data structures and algorithms
data structures and algorithms

Çok yaygın olarak büyük O harfi notasyonuyla ifade edilen karmaşıklık seviyesi, bir algoritmanın hızının, algoritmanın işlediği veri miktarına göre değişimini belirliyor. Örneğin O(n) ile ifade edilen bir algoritma, n tane veriyi t zamanda işliyorsa 2n tane veriyi 2t zamanda işler. O(n^2) ile ifade edilen algoritma ise n tane veriyi t zamanda işlerken 2n tane veriyi t’nin karesi kadar zamanda işler. İşlenen veri miktarları çok büyük olunca, bunları işleyen algoritmanın karmaşıklığı çok büyük önem kazanıyor.

3 Katmanlı Mimari

large scale c++ software design
large scale c++ software design

Katmanlı mimari, bir yazılımın çalışması için gereken bileşenlerin piramit şeklinde yapılandırılması gerektiğini ifade ediyor. Piramitin her katmanındaki bileşenin çalışması, kendi altında bulunan bileşenlere bağlı olabilir ancak kendi üzerinde çalışanlara bağlı olamaz.
Bu konuda bilgi alınabilecek Structure 101 ve SA4J adlı iki güzel kaynak var.

2 Kurallar ve Şablonlar

developing java beans
developing java beans

İsimlendirme kuralları ve şablonlar üzerinde en çok durulan ve muhtemelen en önemli tasarım desenleri.
İsimlendirme kuralları yazılım geliştirilirken kullanılan tüm isimlendirmelerin ortak kurallara dayanmasını gerektiriyor. Örneğin JUnit adlı java bileşeni, test metodlarını, isimlerinin başında yer alan test kelimesi sayesinde tanıyor.

Şablonlar ise verilerin gösterimlerinin verilerden bağımsız bir şekilde yapılması ile ilgili. Örneğin XML verilerini göstermek için XSL şablonları kullanılır.

1 Arayüzler

agile software development
agile software development

Arayüz, yazılımdaki en önemli konsept. Yazılım geliştirirken problemleri mümkün olduğunca basit modellemek ve bu modellere mümkün olduğunca basit ve anlaşılır arayüzler sunmak gerekiyor.

Bu konudaki tavsiyeler şöyle:

  • Asla ileride kullanışlı olabilecek metodlar yazmayın. Minimalist olun.
  • Daha önce yaptığınız hatalar ile yüzleşmekten 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.

  • buyutec
  • 15 yorum var
  • 24 Temmuz 2008 09:02

sonraki yazı »
google digg'i alıyor!

Yorumlar

Harika bir bildiri!!! Eline sağlık...

Güzel bir yazıyı sadece okuyup geçmek yerine insanlarla paylaşman ve de uğraşıp çevirmen çok hoş olmuş...

webcoder |  (0 puan) 24 Temmuz 2008 09:05

teşekkür ederim. tam çeviri sayılmaz, gözüme önemli gelen yerleri yazdım yalnızca, bazı cümleleri de kendim ekledim. orijinal yazı biraz daha ayrıntılı.

buyutec |  (0 puan) 24 Temmuz 2008 09:15

Tuttum .. cok guzel olmus...

akif87.spaces.live.com
akif87 |  (0 puan) 24 Temmuz 2008 09:17

Faydalı bir bildiri.teşekkürler

huzur28 |  (0 puan) 24 Temmuz 2008 09:40

oldukça güzel bir bildiri olmuş teşekkürler

ocimen |  (0 puan) 24 Temmuz 2008 09:52

teşekkürler

bassedas |  (0 puan) 24 Temmuz 2008 09:55

merhaba yazının bazı yerleri ile küçük düzeltmeler yapmak gerekli.nacizane yorumlarım

10 İlişkilsel Veritabanları: veri tabanı performansı için stored procedure bir yere kadar da, constraint in etkisi yok gibidir.yazıda da belirtildiği gibi bu bir kısıtlamadır.veri tutarlılığını korumaktır asıl amacı.
performanstan bahsedilecekse en önemli etkenlerin başında normalizasyon gelir veritabanı için.

6 Caching: "veritabanında tutulan verilerden çok sık kullanılanların hızlı ulaşılabilecek bir yere alınması ve buradan hızla kullanılması anlamına geliyor."
bu açıklama caching kavramını tam olarak ifade etmiyor.caching amacı hızlı ulaşmak değil, ulaşmak için gerekli olan işleme zamanından kazanmaktır.yine yazıda belirtildiği populer kitaplar listesine ulaşmak için caching kullanılırken elde edilen kazanç, populer kitapların bulunması için yapılan sorguya zaman harcanmaması hazır yapılmışının getirilmesidir.
bununla beraber veritabanına özgü bir kavram değildir, kullanım alanı çok geniştir.

5 hashing: "hashing" ile "hash function" farklı kavramlar, bu maddede anlatılan "hash function" hashing in kullanım alanlarından sadece birisi.hashing kısaca bir veriden, o veriyi unique olarak ifade edebilecek daha kısa bir veri elde etme yöntemidir.

3 Katmanlı Mimari: çok katmanlı mimariler piramit yapısına sahip olmak zorunda değildir.bu mimarinin esas amaçlarından birisi de yazıda belirtildiğinin tersine katmanlar arası hiyerarşinin ortadan kaldırılması, her katmanın diğerininden bağımsız, başka elemanlarla uygun çalışabilmesidir.

2 Kurallar ve Şablonlar: junit version 4.0 dan itibaren test methodlarını tanımlama için "test" ön adı yerine annotation kullanmaya başlamıştır.

bestanealtcizgi |  (0 puan) 24 Temmuz 2008 10:03

@bestanealtcizgi

İlişkisel veritabanlarında performanstan bahsederken yalnızca hızlı çalışması değil, verilerin tutarlı ve doğru olması, veritabanının kolay yönetilebilir olması gibi tüm kavramlardan bahsediliyor.

caching konusunda senin anlattığınla benim anlattığım arasında bir fark göremedim.

hashing konusunda haklısın ancak o kadar detaya girmek istemedim.

orijinal yazı katmanlı mimarilerden bahsederken piramit yapısının ve circular reference'ları engellemenin özellikle üzerinde durmuş, o yüzden bu şekilde anlattım.

junit'i takip etmiyorum, orijinal yazıda yazanın aynısını yazdım.

düzeltmelerin için teşekkür ederim.

buyutec |  (0 puan) 24 Temmuz 2008 10:34

@bestanealtcizgi,

senin de yanli$ini duzeltmek lazim: )

normalizasyon ile performansin ilgisi bulunmamakta. normalizasyon sadece verilerin tutarliligini saglar ve alandan kazandirir.

ayrica yaziyi nasil bir havayla okudun bilmiyorum ancak orada performans icin sql ve spyi iyi bilmek gerekiyor yaziyor. yani iyi bilip optimizasyon yaparsaniz performans artirabilirsiniz diyor. dogru soyluyor.

dni |  (0 puan) 24 Temmuz 2008 12:11

@dni:
normalizasyon performansla son derece alakalı bi konu aslında. normalizasyon seviyesini arttırdıkça verileri çekmek için gereken join miktarı artar. örneğin kullanıcıların telefon numaraları ayrı bir tabloda duruyorsa kullanıcı - tel. no listesini getirmek için bu iki tabloyu join etmek gerekecek.

oysa kullanıcı tablosunda tel1, tel2, tel3 diye sütunlar olsa veriler join'e gerek kalmadan gelecek. kullanıcı başına tutulabilecek tel. no sayısı kısıtlanmış olacak, bazı alanlar boş kalacak ancak sorgular çok daha hızlı çalışacak.

bu konuda sevdiğim bi laf var: "normalize until it hurts, denormalize until it works."

buyutec |  (0 puan) 24 Temmuz 2008 13:09

@buyutec
tekrar merhaba, cache konusunda demek istediğim, "hızlı ulaşılabilecek bir yere alınması" ifadesine ek olarak "kullanılacağı şekilde saklanması" eklenmesi daha açıklayıcı olabilirdi.misal ben bir sorgu sonucu xml üretiyorsam, sorgunun sonucunu cache ile saklamaktansa, kullanacağım xml i saklarım, böylece xml yaratmak için gerekli olan zamandan kazanırım demek istemiştim.ikimizin dediği arasında pek fark yok senin de yazdığın üzere :)

bununla beraber cache in illaki bellekte tutulmasına da gerek yok herhangi bir repository de tutulabilir.

@dni
normalizasyon nedir, ne değildir konusunda uzlaşmadan normalizasyonun performansa olan etkisi üzerinde tartışmak bu aşamada yersiz.
bununla beraber veri tutarlılığı için constraint ve rule lar kullanılır.normalizasyon belki ilişkisel tutarlılık için faydalı olabilir ki bu da normalizasyon kavramından sonra tartışılması gereken konulardan birisidir.

performans icin sql ve spyi iyi bilmek gerekiyor yaziyor. yani iyi bilip optimizasyon yaparsaniz performans artirabilirsiniz diyor

veri tabanını performanslı kullanmanın 1. şartı doğru tasarım(normalizasyon?) 2. şartı da doğru sorgulama derlerdi abilerimiz bizlere.bu durumda neyi iyi bilip (db tasarım, sql hangisi?) neyi optimize etmek performansı arttırır o mulallakta kalmış biraz.

bestanealtcizgi |  (0 puan) 24 Temmuz 2008 16:09

işte bu dur bırakın programcılığı burada kardeşce hatalarımızı düzeltiyoruz en önemli giriş bu ^^
tamam şimdi programlayalım ....

ayrıca bildiri için teşekkürler

icli kofte |  (0 puan) 24 Temmuz 2008 20:09

bu bildiriyi ve bildiriye yapilan yorumlar hosuma gitti. herkes fikrini ortaya koymus bu da daha farkli yonden bakmaya yariyor. o yuzden yazilim ile ilgili olan tartisma ortamlarini seviyorum.

Bende cok kisa olmayan bir programci gecmisim var ve sunu ogrendim ki, bildiginiz bir yaklasima bir baskasi farkli bir gozden bakarak sizi sasirtabiliyor. ozellikle yazilim alaninda bunun olmasi cok normal. o yuzden yazilim konusunda normalizasyon iyidir, hashing harikadir gibi seyler uygulamanin yapisina, musteri isteklerine gore degisen seyler oluyor.

o yuzden insaat yapar gibi her yazilim uygulamasinda ayni seyleri uygulamak maalesef yetmiyor. 9 sene olacak bu isin icindeyim ve hala ogrendigim bir ton sey ve yanildigimi gordugum bircok sey var.

Maalesef yazilim alaninda her yazilim icin uygulanabilecek belirli receteler yok.

sekanet |  (0 puan) 24 Temmuz 2008 21:27

Bunlar her yazılımcının bilesi gerekenler ise benim yazılımcı olmam için 50 sene uğraşmam lazım.
Her yazlıımcı demek yerine gerçek veya profesyonel dense daha iyiydi zira benim gibi yarım yamalk bilgileriyle kendini programcı sananların moralleri sıfırlanıyo :D

CodeMachine |  (0 puan) 26 Temmuz 2008 01:01

üye olunpillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.

Bu yazıyı rapor et. Kural dışı içeriğe rastladığınızda editörlerimize rapor ederek müdahale edilmesini sağlayabilirsiniz. (Hangi durumlarda rapor edebilirim?)
bildirgec.org bölümleri
pillinetwork hesabınızla giriş yapın.

pilli ilan

son yorumlar

pilli ilan

Tutulanlar Banner

bildirgecinfo

bildirgec.org içeriği kullanıcıları tarafından üretilen kolektif bir blogdur.