Bilgisayar Bilimleri -12- Algoritmalara Giriş

Algoritma konusuna geçmeden önce bilgisayar donanımının temellerinden size bahsetmemiz gerekirdi. Bu konular dijital elektronik, mantık kapıları, bilgisayar mimarisi ve mikroişlemci mimarisi gibi konular olup bu konuları biz sitemizde daha önce bahsettiğimiz için bilgisayar donanımının bu kısmını atlıyoruz. Bizim burada bunlardan bahsetmememiz aynı şeyleri tekrar yazmak istemediğimizden dolayıdır. Sizin ise bunları muhakkak okuyup öğrenmeniz gereklidir. O yüzden lütfen sitemizde yer alan “Dijital Elektronik”, “Mikroişlemci Mimarisi” ve “Mikrodenetleyici Mimarisi” adlı yazı dizilerini baştan sona okuyunuz. O yazdıklarımız bu konuyla doğrudan alakalı olmakla beraber donanım kısmında anlatmadığımız neredeyse bütün bilgileri de kapsamaktadır. Sizin bu yazıları okuduğunuzu varsayıyoruz ve bu noktadan itibaren donanımla ilgili olan kısmı bitirip yazılım boyutuna geçiş yapıyoruz.

Bilgisayar bilimlerinin temelinin algoritmalar olduğunu bahsetmiştik. Programlamaya yeni başlayacaklar hangi programlama dilini öğrenecekleri yönünde kararsız kalsalar da ilk olarak algoritmaları öğrenmeleri gerektiği konusunda bir fikre sahip olmamaktadır. Programlama dilleri yapısal olarak ve örnekler vasıtasıyla size algoritmayı dolaylı yoldan öğretse de algoritma ve bilgisayar programı mantığını bilmeyen birisi programlama dillerini genellikle ezbere öğrenmekte ve algoritmayı dili ezbere bilmekle öğrenememektedir. Eğer dili anlayarak öğrenirseniz ve üzerinde çalıştığınız örnekler güzel olursa algoritmaları da kavrayabilirsiniz. Fakat bu biraz zor olmaktadır. O yüzden programlamaya başlayacak herkesin öncelikle algoritmaları ve problem çözmeyi öğrenmesi sonrasında ise bir programlama dilini öğrenerek devam etmesi gereklidir.

Pek çok algoritmaları anlatan eğitim içeriği algoritmaları bir programlama dili üzerinden anlatmaktadır. Unutmayınız, programlama dilleri birer araç olup algoritmaların ifade edilmesi için gerekli bir unsur değildir. Hiç programlama diline ihtiyaç duyulmadan da algoritmalar ifade edilebilir. Bazı kaynaklar ise akış diyagramlarına (flowchart) sıkıca bağlanmakta ve algoritmaları akış diyagramları ile ilişkilendirmektedir. Akış diyagramları algoritmayı ifade etmede etkili bir görsel dil olsa da yine de dar ve kısıtlı bir ifade yolu olup sizin bakış açınızı daraltacaktır. Biz algoritmaları ne akış diyagramları ile ne de programlama dilleri ile anlatacağız. O yüzden bu konuda diğer kaynaklara göre daha farklı ve orjinal bir içerik meydana getireceğiz.

Algoritmaları pek çok farklı yönden ve farklı üslupla tanımlamamız mümkündür. Ama daha kesin bir tanımlamasını yapmak istersek şöyle tanımlamamız gerekecektir. Algoritmalar kesin, yürütülebilir ve sonlandırılabilir adımların sıralı bir haldeki dizisidir. 

Daha önce bahsettiğimiz gibi algoritmalar bir programlama dili veya görsel bir dille ifade edilmek zorunda değildir. Algoritmaları ifade etmenin pek çok farklı yolu olduğu gibi günlük hayatta da pek çok algoritma ile karşı karşıya kalırız. Türk biri Türk dilini kullanarak algoritmaları çok rahat ifade edebilirken her bir birey aynı algoritmayı farklı anlatım ve içerikte ifade edebilir. Anlaşılır ve kişiye özgü olan bu anlatım şeklinin bir roman veya gazete metninden ayıran bir özelliğin olması gereklidir. Algoritmalar insan dilinde ifade edilebilse de bu tanımların işletilebilir ve makine diline uyarlanabilir olması şarttır. Bu da belli mantık, veri ve işlem ilkelerine bağlı olmakla olur. Algoritmaları ifade etmek için serbest olmanızın yanında bu kurallara uymanız geçerli bir algoritmanın meydana gelmesi için şarttır.

Bilgisayar programlarının bir algoritma üzerinde çalıştığını biliyoruz. Fakat sadece bilgisayar programları değil bilgisayarın kendisi de oldukça basit bir algoritma üzerinde çalışmaktadır. Bu algoritma en basit haliyle aynı şu şekildedir.

  • Dur komutu işletilene kadar şu adımları takip et: 
  • Komutu oku
  • Komutu çözümle
  • Komutu işlet

Yukarıda gördüğünüz basit bir algoritmanın başında şartlı tekrarlama talimatını ve devamında ise üç basit talimatı görmekteyiz. Makine durana kadar bu talimatlar sırayla yerine getirilecektir. Elbette biz bunu Türkçe ifade ederken makine bunu fiziksel yapısından dolayı (mantık devrelerinin birbirine bağlanması ile) otomatik olarak yapacaktır. Algoritmalar sadece bilgisayarlarda kullanılmayıp günlük hayatta da bir işi yaparken bazen farkında olarak bazen de farkında olmadan yaptığımız yapılardır. Örneğin bir motosiklette tek teker yapmak istediğimizde şu talimatları yerine getiririz.

  • Motosikleti çalıştır
  • Birinci vitese al
  • Sağ ayağını arka frene koy
  • Debriyajdayken yüksek bir devire gel 
  • Debriyajı birden bire bırak 

Bu talimatları birer ilke haline getirip sıra halinde yazmazsak mesela örneğin ayağımızı arka fren pedalına koymazsak motosikleti altımızdan kaçırıp yere düşebiliriz. Bir işte usta olan kişilerin en büyük özelliği artık pratik yapa yapa o işi yapacak en iyi algoritmayı bulmuş olmaları ve ona harfiyen uymalarıdır. Bir aletin kullanma kılavuzunu okuyan hiç bilmeyen biri bile talimatları harfiyen yerine getirmekle aynı işi başarabilir. Kullanma kılavuzundaki talimatları yazan birinin uzman olması ve talimatları doğru yazması şartı burada çok önemlidir. Bilgisayar programı yazarken de biz kullanma kılavuzu talimatlarını yazan bir uzman, bilgisayar da hiçbir şey bilmeyen bir kullanıcı gibidir. Biz ne kadar iyi ve doğru bir algoritma yazarsak bilgisayar o kadar iyi programı işletir. Bu talimatları yani algoritmayı doğru ve etkili yazabilmek de bir anda öğrenilecek bir beceri değildir. Sürekli pratik yapmak, bilgi ve tecrübe edinmek ve uzun bir zaman yılmadan çalışmak gereklidir.

Algoritmaları etkin bir şekilde kullanmak için uzun bir zamana ihtiyacınız olsa da programlamaya başlamadan önce algoritmaların temel ilkelerini öğrenmeniz ve hazır algoritmalardan faydalanmanız sizi birkaç adım ileride başlatacaktır.

Yukarıda bahsettiğimiz gibi algoritmalar belli bir talimatların doğru bir sıra ile dizilmesinden meydana geliyordu. Yalnız bu talimatların doğru bir sırada olması kadar talimatların doğru nitelikte olması da gereklidir. Örneğin bir yemek tarifi yazarken eğer bir yemek konusunda tecrübeli birini muhatap alıyorsak soğanları karamelize et, makarnayı aldente olarak pişir diyebiliriz. Fakat yemek konusunda hiç tecrübesi olmayan birinin bunları anlaması mümkün olmaz. O halde şu kadar miktarda, şu kadar ateşte, şu şekilde, şu kadar sürede diyerek ayrıntılı olarak bütün işleri açıklamamız gerekir. Normalde tek cümlede anlatacağımız bir iş muhataba göre bir sayfaya kadar çıkabilmektedir. Sizin bunu tek cümlede anlatabilmeniz iyi bir anlatıcı olduğunuz anlamına gelmez. Önemli olan karşı tarafın anlayacağı nitelikte bunu anlatabilme yeteneğinizdir. İnsan dilinde olan bu durum insan dilinden makine diline olan süreçte de aynı şekilde işlemektedir. Biz algoritmaları kendimize göre değil makinenin mantığını da hesaba katarak yazarız.

Burada algoritmaları makine dilinde yazacağımız anlamı çıkmasın. Hatta yüksek seviye programlama dillerinden bile yüksek bir seviyede algoritmalar yazılır. Anlatmak istediğimiz nokta talimatların yüksek seviye programlama dillerine aktarılabilir olması ve bu aktarma işleminin zahmetsiz olmasıdır.

İlerleyen konularda algoritma yazımındaki ilkeleri, problem çözmeyi ve izlenmesi gereken yolları size ayrıntılı olarak anlatacağız.

 

Bizi Facebook grubumuzda takip etmeyi unutmayın. Bilgili ve öğrenmeye hevesli bir topluluk oluşturmak istiyoruz.

https://www.facebook.com/groups/1233336523490761/

Gökhan Dökmetaş

"Arduino Eğitim Kitabı" ve "Arduino ve Raspberry PI ile Nesnelerin İnterneti" kitaplarının yazarı. Başkent Teknoloji ve Dedektör Merkezi'nde Ar-ge Sorumlusu. Araştırmacı-Yazar.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.