İnternet sitemizde çerez (cookie) kullanılmaktadır. Çerezler (cookie) hakkında detaylı bilgi için Çerez Politikası'nı inceleyiniz. Devam etmeniz halinde çerez (cookie) kullanımına izin verdiğinizi kabul edeceğiz. Çerez ayarlarınızı değiştirmeniz halinde internet sitesinin birtakım özelliklerini kullanamayabileceğinizi belirtmek isteriz.

Dünden Bugüne Yazılım - Yazılımın Tarihçesi

Programlama dilleri insanlarla bilgisayarlar arasında tercümanlık görevi yapar.

 

Programlamanın Tarihçesi

Genel amaçlı olsun özel amaçlı olsun tüm uygulama ve sistem yazılımları programlama dilleriyle yazılır. Bir programlama dili, insanların bilgisayara çeşitli işlemler yaptırmasına imkan veren her türlü sembol, karakter ve kurallar grubudur. Programlama dilleri insanlarla bilgisayarlar arasında tercümanlık görevi yapar. Programlama dilleri, bilgisayara neyi, ne zaman, nasıl yapacağını belirten deyim ve komutlar içerir. Programlama dilleri zaman içerisinde gelişerek günümüzde çok kabiliyetli bir duruma gelmiştir. Burada programlama dillerinin gelişme süreci kısaca inceleyeceğiz. 


 

1970 ler…

Yapısal programlama 1900lü yılların ortalarında programlama taleplerinin artması ile gelişen bir programlama felsefesidir. Buna göre programların analizi, tasarımları, kodlaması ve testleri arasındaki mantık uyumunu sağlamak amacıyla bir standarda gidilmiştir. Yapısal programlamada amaç; problemi alt parçalara bölerek bu parçaların çözümlerinin birleştirilmesidir. Yapısal proglamlamanın ortaya atılmasındaki en büyük sebepler “goto” komutunun karmaşıklığı ve tasarımda kullanılan yöntemlerin uyarlanma zorluğudur.

 

Düşük Seviyede Yapısal Proglamlama
 

Düşük bir seviyede, yapılandırılmış programları genellikle basit, hiyerarşik program akışı yapıları oluşmaktadır. Bu dizi, seçimi ve tekrarlama şunlardır:

“Sequence” satırları sırasıyla işleme anlamına gelir.

“Selection” programın durumuna bağlı olarak satırların numaralarına göre seçilerek işlenmesidir. Bu işlemleri “if..then..else..endif, switch or case” ifadeleriyle yapar.

“Repetition” program belli bir duruma ulaşana ya da koleksiyondaki her eleman işlemleri tamamlayana kadar, satırları işlemeye devam eder. Bu işlemi genellikle “while, repeat, for or do…until ifadeleriyle yapar.

 

 

-Grafik üç temel deseni göstermektedir. Mavi renkli diagramlar yeni bir teori için icat edildi ve burada en çok kullanılan kontrol akış şemalarının benzerlerini görebilirsiniz.

 

Yapısal Proglamlama Dilleri

Prosedürel proglamlama dilini tercih etmemiz gerekirse, herhangi bir programlama dilinde yapısal proglamlama yapabiliriz. Başlangıçta yapısal proglamlama dilleri için kullanılmış bazı diller şunlardır: ALGOL, PASCAL, PL/I and ADA. Ama en yeni prosedürel proglamlarda dahi o zamanlardan beri gelişmiş özelliklere sahip yapısal programlama kullanılmaya teşvik edildi ve bazen yapılandırılmamış programlama daha zor hale getirilerek bundan uzaklaştırıldı.

  

Teorik Temel

Yapılandırılmış bir program teoremi yapısal proglamlamanın teorik temelini oluşturur. Bu aşamaları birleştiren proglamlamanın üç yolu “sequencing, selection, iteration” hesaplanabilir bir ifade etmek için yeterli fonksiyonlardır. Bu gözlem, yapısal proglamlama hareketi ile kaynaklı değildir; bu yapılar merkezi işlem ünitesi komut döngüsünü tanımlamak için yeterlidir. Bu anlamda, işlemci genellikle yapılandırılmış programı işler, işleyemese bile talimatlar yapılandırılmış program tarafından okunur.

 

Cap Gemini SDM

SDM2 Method

 

Cap Gemini SDM veya SDM2 (Sistem Geliştirme Metodu) metodu 1970 yılında Hollanda’ da PANDATA şirketi tarafından yazılım geliştirme metodu olarak piyasaya sürülmüştür. Bu ICT projeleri 1980lerde ve 1990larda Hollanda’ da yoğun olarak kullanıldı. PANDATA 1980 yılında Capgeminigroup tarafından satın alındı ve İngilizce olarak yayınlanan SDM’ nin son sürümü CAP GEMINI yayınevi tarafından 1991’ de SDM2 olarak basıldı. Rapid uygulama geliştirme, Rational Unified Process and Agile yazılım geliştirme çıktıktan sonra şelale metodu güncelliğini yavaşça kaybedene kadar, Capgemini danışmanları ve müşterileri arasında düzenli olarak dağıtıldı ve öğretildi.

 

1980ler…


Yapısal Sistem Analizi ve Tasarım Yöntemi

Yapısal Sistem Analizi ve Tasarım Yöntemi (SSADM) bilgi sistemlerinin analizi ve tasarımı için bir sistem yaklaşımıdır. SSADM bilgi sistemleri için yapılan analiz ve tasarım için oluşturulmuş bir çeşit şelale yöntemidir.

 

Yapısal Sistem Analizi ve Tasarım Yöntemi Teknikleri
 

SSADM için kullanılan en önemli 3 teknik:

Mantıksal Veri Modelleme: Tasarlanmış olan sistemin veri gereksinimlerini karşılama sürecidir. Varlıkların niteliklerini ve ilişkilerini içeren modellemedir.

Veri Akış Modelleme: Bilgi sistemi etrafında nasıl hareket edeceğini belirleyen süreç. Veri Akış Modelleme, işlemleri veri depolarında saklar ve gönderilen verileri sistemden alır ve veri akışını sağlar.

Varlık Etkinlik Modelleme: Her bir varlığı meydana gelme sırasına göre sıralar, tasarlar ve durumlarına göre koordine eder.

 

Aşamalar

  •   Fizibilite Çalışması
  •   Mevcut Ortamda İncelenmesi
  •   İş Sistemi Seçenekleri
  •   Gereksinim Özellikleri  
  •   Teknik Sistem Seçenekler  
  •   Mantıksal Tasarı  
  •   Fiziksel Tasarım 

 

Yumuşak Sistem Metodolojisi (SSM)

Gerçek dünya sorunları karşısında mücadele etmek için sistemik bir yaklaşımdır. SSM sistem kavramı epistemolojik yerine ontolojik insan anlayışı için kullanılan bir zihinsel yapı olarak ta ele alınabilir.

 

1990lar…


Nesne Yönelimli Programlama Dilleri(OOP)

1960'lı yılların sonuna doğru ortaya çıkan bu yaklaşım, o dönemin yazılım dünyasında beliren bir bunalımın sonucudur. Bu programlama, bilgi gizleme (information hiding), veri soyutlama (data abstraction), çok biçimlilik (polymorphism) ve kalıtım (inheritance) gibi yazılımın bakımını ve aynı yazılım üzerinde birden fazla kişinin çalışmasını kolaylaştıran kavramları da yazılım literatürüne kazandırmıştır.

Nesne Yönelimli Programlama'nın altında yatan birimselliğin ana fikri, her bilgisayar programının (izlence), etkileşim içerisinde olan birimler veya nesneler kümesinden oluştuğu varsayımıdır. Bu nesnelerin her biri, kendi içerisinde veri işleyebilir, ve diğer nesneler ile çift yönlü veri alışverişinde bulunabilir. Hâlbuki NYP'den önce var olan tek yaklaşımda (Yordamsal programlama), programlar sadece bir komut dizisi veya birer işlev (fonksiyon) kümesi olarak görülmektedirler.

 

Hızlı Uygulama Geliştirme

Yazılım geliştirme teknikleri arasında son dönemde sıklıkla kullanılan hızlı uygulama geliştirme teknikleri, yazılım geliştiricilerin rutin işlemler için zamandan tasarruf ederek daha önemli işler için çalışmalarını hedeflemektedir. Kullanılan teknik, büyük ölçüde kodlama standardını da beraberinde getireceği için hata riski büyük oranda azaltmaktadır. 

Hızlı uygulama geliştirme teknikleri arasında öne çıkan iki önemli metot vardır. Bunlar bir kere oluşturulan ya da gerektiğinde tekrar oluşturulan ve değişikliğe esneklik gösteren tekniklerdir. Her iki yöntem de artıları ve eksileri mevcut olmakla beraber çözüm üretme noktasında bazı kolaylıkları ve riskleri de beraberinde getirirler. Bu bağlamda duruma göre biri tercih edilmeli ya da her ikisi birden kullanılmalıdır.

Yazılım geliştirme altyapıları (framework); yazılımların vazgeçilmez unsurlarıdır. Özellikle veritabanı ile yazılımı konuşturma işlemleri için popüler olarak kullanılan birçok altyapı mevcuttur.  Bu altyapılar genellikle veritabanı şemalarından faydalanarak temel veritabanı işlemleri olarak adlandırılan CRUD(Create(oluştur), Read(oku), Update(Güncelle) ve Delete(Sil)) işlevlerini yerine getirmekle beraber birçok işlevi ve esnekliği de beraberinde getirmektedir. Kullanılan altyapının sağladığı esneklik ölçüsüne göre rutin dışında kalan kodlama işlemleri için de aynı altyapı kullanılarak bazı geliştirmelerin yapılması gerekmektedir.

 

2000ler…


Agile Yazılım Geliştirme

Çevik yazılım süreçleri, 1950’lerdeki üretim alanında verimliliğin artırılması için geliştirilen yalın yaklaşımların yazılım sektöründe bir uzantısı olarak ortaya çıkmıştır. Yazılım dünyasında çeşitli çevik yaklaşımlara 1970’lerden itibaren rastlanabilmekle birlikte, çevik yazılım metodolojilerinin kullanımı 1990’larda hız kazanmış ve geçtiğimiz son 7 - 8 yıl içerisinde de tüm dünyada başarılarını kanıtlayarak popülaritesini arttırmıştır. Şu anda, dünyadaki birçok yazılım şirketinde ve birçok yazılım projesinde yazılımlar, çevik yaklaşımlarla geliştirilmektedir.

Çevik yazılım geliştirme metodu, tekrarlanan yazılım geliştirme metodu taban alınarak geliştirilmiş, sık aralıklarla parça parça yazılım teslimatını ve değişikliği teşvik eden bir yazılım geliştirme metodolojisidir. Çevik geliştirme, değişimi, takım içerisindeki iletişimin arttırılmasını, parça parça yazılım teslimatını, test odaklı yazılım geliştirilmesini ve uyumlu planlamayı teşvik eder.

 

 

Çevik Yazılım Geliştirme Manifestosu

2001 yılında, dünyanın önde gelen çevik yazılım geliştiricileri (XP, Scrum gibi metodolojilerin yaratıcıları) ortak bir zeminde buluşabilmek adına bir araya gelerek “çevik yazılım geliştirme manifestosu” nu ve “çevik yazılımın prensipleri” ni yayınlamışlardır. Böylelikle çevik metotların projelere genel bakış açıları ifade edilmiştir. Bu manifestoda;

   − Bireyler ve aralarındaki etkileşimlerin, kullanılan araç ve süreçlerden;

   − Çalışan yazılımın, detaylı dokümantasyondan;

   − Müşteri ile işbirliğinin, sözleşmedeki kesin kurallardan;

   − Değişikliklere uyum sağlayabilmenin, mevcut planı takip etmekten;

daha önemli ve öncelikli olduğu belirtilmektedir.

 

Çevik Yazılımın Prensipleri:

 

  1. İlk öncelik, sürekli, kaliteli yazılım teslimatıyla müşteri memnuniyetini sağlamaktır.
  2. Proje ne kadar ilerlemiş olursa olsun değişiklikler kabul edilir. Çevik yazılım süreçleri değişiklikleri müşteri avantajına dönüştürürler.
  3. Mümkün olduğunca kısa zaman aralıklarıyla (2-6 hafta arası) çalışan, kaliteli yazılım teslimatı yapılır.
  4. Analistler, uzmanlar, yazılımcılar, testçiler vs. tüm ekip elemanları bire bir iletişim halinde, günlük olarak birlikte çalışırlar.
  5. İyi projeler motivasyonu yüksek bireyler etrafında kurulur. Ekip elemanlarına gerekli destek verilmeli, ihtiyaçları karşılanarak proje ile ilgili tam güvenilmelidir
  6. Ekip içerisinde kaliteli bilgi akışı için yüz yüze iletişim önemlidir.
  7. Çalışan yazılım, projenin ilk gelişim ölçütüdür.
  8. Çevik süreçler mümkün olduğunca sabit hızlı, sürdürülebilir geliştirmeye önem verir.
  9. Sağlam teknik alt yapı ve tasarım çevikliği arttırır.
  10. Basitlik önemlidir.
  11. En iyi mimariler, gereksinimler ve tasarımlar kendini organize edebilen ekipler tarafından yaratılır.
  12. Düzenli aralıklarla ekip kendi yöntemlerini gözden geçirerek verimliliği arttırmak için gerekli iyileştirmeleri yaparlar.

 

Yazılım Mimarisi Gelişimi


  1.  Tek Parça Uygulamaları
  2. İstemci/ Sunucu Uygulamaları
  3. Web Uygulamaları
  4. İş Akışı/BPM Uygulamaları
  5. Hizmet olarak Yazılım Uygulamaları

 

Servis Odaklı Mimari

Servis odaklı mimari veya hizmet yönelimli mimari ( Service-Oriented Architecture (SOA)), bilgisayarda sistemlerin işlevselliklerini iş süreçleri etrafında gruplaştırarak sistem geliştirmesi ve bütünleştirilmesinde yol gösteren bir yazılım tasarımı felsefesidir.

Hizmet yönelimi, hizmetlerin işletim sistemleriprogramlama dilleri ve diğer teknolojik ayrıntılarla ancak gevşek bir bağ oluşturmasını hedeflenmektedir. HYM, geliştiricilerin başka kullanıcılar tarafından kullanılması amacıyla bir iletişim ağı üzerinden sundukları işlevleri ayrı birimlere ya da hizmetlere böler. Bu hizmetler birbirleriyle veri alışverişiyle veya aralarındaki etkinliği birden fazla hizmet arasında eşgüderek haberleşirler.

 

 

 

Boy Yönelimli Programlama

Boy yönelimli programlama (AOP) kesişen endişelerin ayrılmasına izin vererek modülerliği artırmayı hedefleyen programlama paradigmasıdır. AOP boy tabanlı yazılım geliştirme için temel oluşturur. AOP programlama yöntemleri ve araçları endişelerin modülerliğini kaynak kod düzeyinde destekleyici olduğundan, boy-tabanlı yazılım geliştirme bütün mühendislik disiplinini ifade eder.

 

AOP’ nin Basit Gösterimi

 

void transfer(Account fromAcc, Account toAcc, int amount) throws Exception {

 

  if (fromAcc.getBalance() < amount) {

    throw new InsufficientFundsException();

  }

 

  fromAcc.withdraw(amount);

  toAcc.deposit(amount);

}

 

Çağımızın en önemli bilişim aracı olan bilgisayarın icat edilmesiyle birlikte bilgisayarlar ile insanlar arasında iletişimi sağlayacak, köprü vazifesi görecek bir sisteme ihtiyaç duyuldu.Bu sistem de tabi ki yapıtaşı olan yazılımdı. Teknoloji yavaş ilerlediği dönemlerde  0 ve 1 lerle yetinen insanoğlunun ihtiyaçlarının artması yazılımın da aynı hızla gelişmesini beraberinde getirdi. Ve böylece de yukarıda incelediğiniz gibi yıllar boyu hızlı bir değişim içinde olan yazılımın ve geliştirmeciliğin önüne geçilemeyeceği görüldü. İnsanoğlu araştırmacı kimliğini yitirmediği ve ihtiyaçların her daim var olduğu sürece yazılım her geçen gün bir başka boyuta ulaşacaktır.

 

çeviri: Burak GEBOLOĞLU