Günümüz dünyasında yazılım oldukça popüler bir noktaya geldi. Öyle ki, yazılım platformu artık yaşlı kesimden ilkokul çağındaki çocuklara kadar oldukça geniş bir aralığı kapsıyor. Özellikle son dönemlerde çocukların programlama sistemini öğrenebilmesi için belli başlı firmalar yeni girişimlerde bulunuyor. Buna örnek olarak Massachusetts İnstitute of Technology tarafından üretilen “Scratch” uygulaması ve Microsoft’un “Small Basic” adını verdiği kodlama dili gösterilebilir. Ayrıca daha birçok kesime ve çalışma alanına hitap eden farklı programlama dilleri de mevcut. Bugün biz, bütün yazılımları, kodlama dillerini üretirken, kullanırken ve böylece belli başlı yardımcı ürünler ortaya çıkarırken oldukça köklü ve önemli bir sistemden faydalanıyor bu sisteme de uzun yıllardan beri algoritma diyoruz.
Kelime Anlamı ve Tarihçesi
Algoritma, kelime manası itibariyle “Bir sorunun çözümü için, sonlu sayıda adım biçiminde iyice tanımlanmış, sonlu bir kurallar kümesi, örn. sin x değerini belirtilmiş bir duyarlıkla hesaplamak için, tümüyle belirlenmiş bir aritmetiksel yordam. IX. yüzyılda Orta Asya’da Harezm bölgesinde yaşamış matematikçi Muhammed bin Musa Al-Harezmî’nin adından gelen terim.” olarak ifade ediliyor. Buna ek olarak ‘Algoritma’ sözcüğü, ‘Al-Harezmî’ isminin Latince okunuşu olarak bilinmekte.
Bugün bilgisayar bilimlerinde –işin mantığını oluşturduğu için- belki de en önemli yere sahip olan algoritmanın oldukça eski bir geçmişi var. Al-Harezmî tarafından düzenlenen ve temellendirilen algoritmaların bundan yaklaşık 2620 yıl önce ilk olarak Babilliler tarafından kullanıldığı ileri sürülüyor. Babil uygarlığı, sarnıç, tapınak vb. yapıları inşa edebilmek için belli başlı uygulamalar geliştirmeye çalıştılar ve bunun sonucunda da bugün bildiğimiz karekök kavramının ilkel bir sürümünü keşfettiler. Bu keşfin uygulanışı algoritma yöntemine oldukça benziyor. Babilli bilginlerin ürettiği yöntemi, basitçe en iyi yaklaşık tahminde bulunarak köklerin çarpanlarını bulmak şeklinde tanımlayabiliriz.
Buna göre Babilliler, 13 sayısının kareköküne en yakın sonucu bulmak amacıyla 3 sayısını tahmin ederler. Ardından 13/3 işlemini yaparak 4,33333 sonucuna ulaşırlar fakat bu sonuç elde edilmesi gereken sonuç değildir çünkü malum olduğu üzere karekök içinden çıkan kökler aynı olmalıdır. Ardından 3 ve 4,33333 sayılarının ortalamasına yakın bir sayı olan 3,66667 sayını tahmin edip 13/3,66667 işlemini uyguladılar ve 3,54545 sonucuna ulaştılar. Bu süreci 13/[(3,66667+3,54545)/2] işlemini uygulayarak yani bir önceki sonuç ile bir sonraki sonucun ortalamasını 13 ile bölme algoritmasını devam ettirerek kökleri daralttılar ve sonuca ulaştılar. Belirtmiş olduğumuz yöntemsel yakınsama süreci, oldukça uzun olsa da günümüzün modern bilgisayarları daha hızlı bir şekilde benzer algoritmaları takip ediyor. Bu açıdan bakıldığında, algoritma için ilk çağlardan beri uygarlıkların yaşam standartlarını geliştirmek amacıyla kullanılan önemli yöntemlerden biridir demek yanlış olmaz.
Babil uygarlığından sonra Mısır, Çin, Maya, Yunan, Arap ve Hint uygarlıkları, algoritma sistemini farklı yöntemler kullanarak geliştirdiler. Özellikle Pythagoras, Euklid, Archimedes gibi bilim insanlarının, matematik ve algoritma alanlarında yaptıkları çalışmalarla bilimsel ilerlemeye çokça katkıları olduğu kabul edilmekte. Ayrıca, yukarıda belirttiğimiz gibi Al-Harezmî, algoritma sistemini temellendirdi ve onun isim babası oldu. Sonraki yüzyıllar boyu ilerleyen ve gelişen algoritmalar sayesinde Charles Babbage ve Ada Byron(Lady Lovelace) ilk bilgisayarın temellerini atabildiler. Bu gelişmelerin ardından oldukça hızlı bir şekilde ivmelenen bilgisayar bilimi Alan Turing ile birlikte güçlü bir platform üzerine oturdu ve tam olarak ilk modern bilgisayarlar şekillenmeye başladı. Görüldüğü üzere algoritmanın güç bulması ile evrilen teknolojik süreç, insan hayatına bambaşka bir kapı aralamakla kalmayıp diğer birçok bilime de dolaylı ya da doğrudan yardımcı olarak gelişmelerine katkıda bulundu, bilgisayar biliminin farklı alt dallara ayrılmasını ve genişlemesini sağladı.
Algoritmalar Nasıl Yazılır?
Algoritma, yazılacak olan kod ile ortaya çıkarılacak ürünün sistemli, temiz ve hatasız bir şekilde üretilebilmesi için yazılımcının veya yazılımla uğraşan bireyin olmazsa olmazıdır. Bu durumu, herhangi bir sorunu çözmek için kullanılabilecek en basit ve uygulanabilir yöntemin bulunması gibi düşünebilirsiniz. Bu açıdan bakıldığında algoritmaların yalnız meslek hayatında ve üretimde değil günlük hayatımız içerisinde de önemli bir yere sahip olduğu anlaşılacaktır.
Şöyle düşünelim; üç arkadaşınız var ve her bir arkadaşınız almanız için sizden bazı şeyler istiyor. Birincisi kitap, ikincisi defter ve üçüncüsü de kalem istiyor olsun. Size istedikleri ürünlerden kaçar adet almanız gerektiğini söyleyip bu ürünlerin fiyat bilgilerini de veriyorlar. Bunun sonucundan sizin yapacağınız ilk iş ne olur? Elbette alış-verişe gitmeden önce arkadaşlarınızdan almanız gereken para miktarını hesaplamak. Böylece basit tabirle, yapılması gereken bir iş için gerekli verileri kullanıp işlemi sonuçlandırmış olursunuz. Bu etkinliği gün içerisinde belki de birçok kez yaptığımız için beynimiz, biz farkında olmadan uygulanması gereken bütün işlemleri algoritmik olarak uygular ve sonuçlandırır.
Peki aynı işi bir bilgisayara nasıl yaptırırdınız? Kullanılacak verileri bilgisayara nasıl aktarır ve yapması gereken işlemleri ona nasıl anlatabilirsiniz? İşte tam olarak bu noktada her şeyin daha basit ve anlaşılır olacak şekilde bilgisayara aktarılabilmesi için yazılı bir algoritma hazırlamamız gerekiyor. Gelin yukarıda verdiğimiz örneği bir bilgisayara nasıl anlatacağımızı ve sonunda nasıl bir çıktı alacağımızı algoritma yazarak görelim.
Öncelikle değişkenleri tanımlamamız gerekiyor:
- KF : Kitap Fiyatı
- DF : Defter Fiyatı
- kF : Kalem Fiyatı (Kitap fiyatının kısaltması ile karışmaması için küçük ‘k’ kullandık)
- K : Kitap Miktarı
- D : Defter Miktarı
- k : Kalem Miktarı
- TOPLAM : Ödenmesi gereken toplam tutar
Şimdi algoritmamızı yazabiliriz:
ADIM 1 BAŞLA
ADIM 2 KİTABIN FİYATINI OKU VE KF’YE AKTAR
ADIM 3 DEFTERİN FİYATINI OKU VE DF’YE AKTAR
ADIM 4 KALEMİN FİYATINI OKU VE kF’YE AKTAR
ADIM 5 SATIN ALINACAK KİTAP MİKTARINI OKU VE K’YA AKTAR
ADIM 6 SATIN ALINACAK DEFTER MİKTARINI OKU VE D’YE AKTAR
ADIM 7 SATIN ALINACAK KALEM MİKTARINI OKU VE k’YA AKTAR
ADIM 8 ÖDENMESİ GEREKEN TOPLAM TUTARI HESAPLA
TOPLAM = (K*KF) + (D*DF) + (k*kF) } Bilgisayarın komutları izleyip yapacağı işlem
ADIM 9 TOPLAM DEĞERİNİ YAZDIR
ADIM 10 BİTİR
Görüldüğü üzere çok basit bir işlem için bile görece uzun ve detaylı bir algoritma yazmak gerekebilir. Çünkü bilgisayarların çalışma prensibi insan beyninden farklı olarak yapılması gereken işlerin belirtilmeyen yahut beklenmeyen durumlarında doğaçlamaya başvurmazlar. Bu sebeple bir algoritma inşa ederken yazılan her adımın oldukça net ve belirgin olmasına, algoritmanın bir başlangıcı ve bitişi olmasına ve hiçbir şeyin şansa bağlı olmamasına kesinlikle dikkat edilmelidir. Yukarıda verilen örnek çeşitlendirilebilir ve detaylandırılabilir. Bunun yanında daha farklı operatörler kullanılarak farklı sorunları çözen algoritmalar da yazılabilir.
Yazılım ile uğraşan ve bu uğraşı meslek edinen bireyler, algoritma oluşturma yetilerini olabildiğince geliştirmeli ve bu konuda ilerlemeli. Bu amaçla en basitten başlayarak zora doğru sürekli olarak algoritma yazmak, günlük yaşantınızdan karşılaştığınız sorunların veya yapılması gereken işlerin basit algoritmalarını oluşturmak, internet üzerinden bulacağınız algoritma oyunları oynamak faydalı olabilir.
Sonuç olarak algoritma, bir sorunu bilgisayar kullanarak çözebilmek ve bu çözümün sade, anlaşılır olmasını sağlayabilmek için sistemli bir yöntemle yazılan ve uygulanan mantıklı komutlar bütünüdür diyebiliriz. Algoritmalar zaman içinde gelişip bilginin yığılması yoluyla bilgisayar biliminin ortaya çıkmasında mihenk taşı oldu ve teknolojinin logaritmik bir hızla ilerlemesini sağladı. Böylece günümüz teknolojisinin önemli alanları olarak belirtilen makine öğreniminde, yapay zekâ araştırmalarında, otomasyonda ve buna benzer birçok ileri teknoloji uygulamalarında üretimin temelini oluşturdu. Dolayısıyla gelişen teknoloji içerisinde oldukça önemli bir konuma ve sahip ve gelecekte de bu konumu koruyacak gibi görünüyor.
Kaynakça
- “C İLE PROGRAMLAMAYA GİRİŞ”-ALGORİTMA NEDİR?-YRD. DOÇ. DR. HASAN. H. BALIK
- BSTS / Bilişim Terimleri Sözlüğü 1981
- https://smallbasic-publicwebsite.azurewebsites.net/
- https://scratch.mit.edu/
- https://evrak.wordpress.com/
- https://yldrmzffr.com/
- https://e27.co
- http://cs-exhibitions.uni-klu.ac.at
3 yorum
Çok önemli bir konuya güzelce değinilmiş. Halim arkadaşımıza teşekkür ederim. Başarılarının, çalışmalarının devamını dilerim.
Gayet açıklayıcı, aynı zamanda her kesimden insana bilgi katabilecek bir yazı olmuş. Eline emeğine sağlık.
Kardeşimi tebrik ediyorum hayirli olmasini diliyorum