Algoritmalar ve Veri Yapıları

Algoritma, verilmiş bir amacı gerçekleştirmek için, bir ilk durumdan başlayıp bir son duruma eriştirmeyi sağlayacak,
sağlıklı olarak betimlenmiş sonlu bir  komut kümesidir. Algoritmalar bilgisayar programları olarak gerçekleştirilebilir.
Algoritma kavramını kolay anlatmak için genellikle gündelik hayat içindeki amaçlar için bulduğumuz, uyguladığımız algoritmaları verilir.
Örneğin annelerin yemek tarifleri, şehrin bir yerinden bir başka yerine gitmek için izlenecek usul, 3x2+5x-48=0 denkleminin
köklerinin nasıl bulunacağı hep algoritma kavramına örnektir. Bu örneklerden de kolayca algılanacağı üzere bir amaca erişmenin yolu
(yani algoritması) farklı başarımlarda olabilir. Aynı amaca yönelik bir algoritma bir diğerinden daha fazla zaman veya kaynak tüketiyor olabilir. Bilgisayar Bilimlerinin Algoritma dalı bu doğrultuda uğraş verir. Amaçlara erişmek için algoritmalar tasarlar ve başarımlarını analiz eder. Geliştirilmiş olanları iyileştirmeye çalışır.

Veri Yapıları, verinin kolay erişilebilecek ve işlenebilecek bir biçimde nerede ve nasıl tutulacağının bilimidir. Her ne kadar 'nerede' sorusunun yanıtı bilgisayar donanımı ile doğrudan ilintili gibi görünse bile gerçekte bunun çok ötesindedir. Bir ansiklopedinin bilgiyi tutuş biçimi (alfabetik sıralı, harf başlarının sayfalarının dizinden bulunabildiği yapı) bile bu disiplinin ilgi alanındadır. Örneğin baktığınız sayfada aradığınız sözcüğü her bulamamanın bir bedeli olsa idi, acaba ansiklopedilerimizi farklı düzenler miydik?  Ya her iki günde bir ansiklopedi veya sözlükteki bazı tanımlar değişse, yeni sözcükler eklense durum ne olurdu? Bu ve buna benzer binlerce sorunun verimli çözümlerinin bulunması bu dalın ilgisindedir.

Programlama Dilleri

Bilgisayara yaptırılacak komutları belirtmeye yönelik standartlaştırılmış ifade yöntemlerine Programlama Dilleri diyoruz. Bunlar şüphesiz insan dillerinden çok daha kısıtlı bir sözcük ve söz dizim yapısına sahiptirler ve katı bir kesinlik içerirler. Bu özellikleri bakımından  matematiğin yazım diline benzeştiklerini söyleyebiliriz. Farklı amaçlar için farklı bilgisayar dilleri geliştirilmiştir. Programlama dilleri antolojisi binlerce dil içermektedir. Ancak bunların çok büyük kısmı özelleşmiş, dar kullanımlı ve/veya deneysel dillerdir. Genel geçerliği olan dil sayısı 10 dolaylarındadır. Bilgisayar dilleri  20 yi aşkın özelliğe göre sınıflara ayrılabilir. Bir dil yalnızca tek bir sınıfa ait olmak durumunda değildir. [Örneğin Profesyonel olarak yaygın bir kullanıma sahip C++ dili buyurgan (imperative), nesnelliğe yönelik (object-oriented), yordamsal (procedural) bir dildir]
Bu çeşitlilik, farklı (ve bazen çelişen) programcı beklentilerinden, profesyonellerin programlama dünyasına bakış açılarındaki (paradigma) farklılıklardan kaynaklanmaktadır. Gündelik yaşantımızda nasıl her duruma uygun giysi; her ortamda kullanabileceğiniz kağıt/kalem; her türlü bilimsel/teknolojik/mimari çizim için kullanılacak ortak bir çizim usulü yok ise (ve olması da aslında mantıksız ise) her amaca hizmet eden süper bir bilgisayar dili de yoktur (olması da anlamsızdır).
 
Bilgisayar Biliminin programlama dilleri ile uğraşılan alt alanında programlama dillerinin sınıfları, sınıflara yol açan programlama paradigmaları, farklı (ve bazen çelişen) programcı beklentilerinin nasıl dillerle giderilebileceği irdelenmektedir. Dillerin gerek söz dizimsel gerek anlamsal (semantik) özelliklerini betimlemeye (denotasyon) yarayan ve bu betimleme üzerinden dilin çeşitli özelliklerini  ispat eden öğreti de bu daldaki uğraşlar arasında yer alır.

Mimari

Veri işlemeye uygun yapıların tasarımıdır. Adının da çağrıştırdığı üzere gereksinimlerden hareket ederek, verilmiş bir bütçe içinde ortam koşullarını da göz önüne alarak, tıpkı bir binanın tasarlanması gibi, bilgisayarın tasarlanması bu alt alanın uğraşıdır. Bu bağlamda bilgisayarın elektronik bir yapı olarak tasarlanması, binaların taş olarak tasarlanması ile benzerlik gösterir. Gelişen veya evrilen teknoloji ile nasıl taş tuğlalar yerlerini plastik veya cam elemanlara bırakabilecekse değişen teknoloji ile bilgisayarlar belki elektrik akımları ile değil de, ışık ile çalışacak veya bambaşka bir fiziksel olguya dayalı olacaktır. Tüm bu değişimlerin geliştirilmesi/izlenmesi, var olan teknolojiler çerçevesinde gereksinimlere cevap verecek tasarımların yapılması Bilgisayar Mimarisi alanının uğraşıdır.

Günümüzde elektronik teknolojisinin sağladığı çözüm artık teknolojik ve fiziksel limitlere yaklaştığından ve daha yüksek başarımlı (performanslı) berime gereksinimin artarak sürmesinden ötürü yeni açılımlar aranmakta ve gerçekleştirilmektedir.  Bir yandan günümüz bilgisayarlarının temel mimarisi olan Van-Neumann mimarisine alternatif mimariler geliştirilmeye çalışılmakta diğer yandan ise birden çok (aslında pek çok) bilgisayar merkezi işlem biriminin birlikte, koşut olarak, çalışacakları mimariler geliştirilmektedir.

Mimarinin ne denli farklılıklar yaratabildiğine bir örnek olarak insan beynine kıyaslandığında günümüz bilgisayarlarının durumuna bir bakalım:


Ortalama PC İnsan
Saniyede işlem 109 1016
Bellek (Byte) 109 1015

Oysa insan beyninin yapı taşı olan nöron hücresi saniyede ancak 105 hesap yaparken bir PC nin merkezi işlem birimi 109 hesap yapabilmektedir. Fark, mimari yapıdadır. PC de güçlü tek bir işlem yapıcı varken İnsanda güçsüz ancak koşut çalışan 1011 işlem yapıcı (nöron hücresi) bulunmaktadır. PC de merkezileşmiş bir bellek birimi varken, insanda bellek her nörona dağılmış durumdadır.

Bilimsel Hesaplama

Bilgisayar Biliminin bu dalı diğer bilim ve mühendislik dallarına ait problemlerinin matematiksel modellemelerinin yapılması ve bu modeller aracılığı ile bu problemlerin bilgisayarda çözülmesi ile uğraşır. Bu uğraşa tipik örnekler vermek gerekirse:
Bu dal çoğunlukla nümerik hesaplamalara yönelik yöntemler kullanır ve geliştirir. Ancak sembolik hesap yöntemleri de bu alanda kullanılan (ancak maliyeti yüksek) yöntemlerdir. Bilimsel hesaplama disiplini, hesapların yeğinliği ve zorluğundan ötürü yüksek başarımlı (high performance) berim mimarileri ve yöntemleri ile yakından ilgilenir.
 

İşletim Sistemleri

İşletim sistemi bir bilgisayar sisteminin tüm donanımını erişilebilir ve kullanılabilir kılan, kullanıcının sistemden taleplerini yerine getiren büyük boyutlu, kalıcı bir yazılımdır. Günümüz bilgisayarlarında bir anda birden fazla iş yapılmaktadır. Bu işler çalışan programlardır. Gerçekte bir bilgisayarda bu iş sayısı ile kıyaslanmayacak kadar az sayıda (genellikle bir tane) merkezi işlem birimi (processor) vardır. Dolayısı ile  bir mekanizma  ile işlerin çok hızlı bir biçimde dönüşümlü olarak ve parça parça merkezi işlem birimine yaptırılması gerekmektedir.  Bu çok hızlı  iş değiştirme  kullanıcı tarafından algılanmayacaktır. Bu olguya zaman paylaşımı (time sharing) denir. İşletim sistemlerinin önemi bir işlevi bu zaman bölüşümünün yönetimini yapmaktır. Çağdaş bilgisayar sistemlerinde, zamanın çeşitli işler arasında paylaşıldığı gibi, bellek kullanımı da işler arasında  paylaşılmaktadır.  İşletim sisteminin önemli bir görevi de bu paylaşımın yönetimidir. İşletim sisteminin diğer önemli bir görevi çalışmakta olan işlerin programcı hatalarından kaynaklı bazı yanlış eylemlerde bulunmamasını sağlamak böyle bir olay durumunda müdahale edip zararı en aza indirmektir. Şüphesiz işletme sistemi prgramların amaçlarını anlayıp amaca doğru ilerlenilip ilerlenmediğini kontrol edemeyecektir. Ancak bir program kendisine tahsis edilmemiş bir bellek alanına erişmek isterse, hakkı olmayan bir donanımı veya yazılım birimini kullanmak isterse buna izin vermeyecektir. İşletim sistemi tüm donanım birimleri ve dış birimler ile olan iletişimden de sorumludur. Kullanıcı ile bilgisayar sisteminin iletişmini sağlayan 'arayüz' de yine işletim sisteminin bir parçasıdır. Hemen hemen tüm PC kullanıcılarının aşina olduğu Linux, Unix, Windows ve MacOS,  işletim sistemlerinin çok tanınan dört tanesidir.

Bu denli ağır işlevleri olan devasa yazılımların tasarımları pek çok yeni kavram ve yöntem gerektirmektedir.  Bilgisayar biliminin işletim sistemleri ile ilgilenen dalı bu kavram ve yöntemlerin geliştirilmesi, başarımlarının analiz edilmesi ile ilgilenir.

Bilgi ve Veri Yönetimi

Çağımızın gereği olarak hemen her türden bilgi ve veri temin edilmek, düzenlenmek ve depolanmak durumundadır. Ayrıca bilgilerin pek çoğu da insanlara özgü kayıt usulleri ile oluşturulmuştur. Farklı yüzü aşkın dilde döküman, kitap, çizim, el yazmasına ek olarak görsel ve sessel kayıtlar da  hep bilgidir ve organize biçimde saklanması, gerektiğinde bulunup sunulması durumundadır. Bilgi ve veri yönetimi disiplini büyük boyutta bilgi ve verilerin bilgisayarlar üzerinde sağlıklı  saklanmasının bilimini ve mühendisliğini yapar. Pek çok etkinliğin WEB üzerinden gerçekleştirilmesi ve WEB üzerindeki bilginin aslında hiç bir standardının  bulunmamasından ötürü Bilgi yönetimi son on yılda çok büyük bir önem kazandı. WEB kullanıcılarının pek aşina oldukları arama motorlarının (google, yahoo, altavista vb)  saniyede on binlerce sorguya cevap verebilmeleri hep bu alandaki gelişmelerle ilintilidir.

Önceleri veritabanı, daha sonraları veri tabanı yönetim sistemi adı ile bilinen alan, belirttiğimiz üzere, son yıllarda genişlemiş ve her türlü bilginin bilgisayarlarda düzenli bir biçimde tutulması ve bundan önemlisi  zekice sorgulanabilmesi konuları ile yoğun biçimde ilgilenir olmuştur. Bu bağlamda, güncel araştırma konularına iki örnek  veri madenciliği (data mining) ve Çokluortam verilerinin sorgulanması  konularıdır.

Veri madenciliği eldeki büyük boyutlu verilerden harekt edip bunların arasındaki ilişkiyi, sebep sonuç bağlantılarını inceleme çabasıdır. Örneğin bir büyük alışveriş merkezinin yalnız kasa kayıt bilgilerinden (kredi kartı bilgisi+satılan mal bilgisi) hareket, edip hangi gelir/yaş/cinsiyet grubunun hangi günler neler aldığı, hangi ürün markalarını tercih ettiği, bir sonraki ziyaretlerindeki alış-veriş profilinin bir önceki ile ilintisi, reklamların/indirimlerin etkisi gibi tecimsel yaşam bakımından yaşamsal önemde bilgileri bulup çıkarmak, bunları istatistiksel kural dizgeleri haline getirmek veri madenciliğinin yapabildiklerindendir.

Çokluortam verilerinin sorgulanması bu dalın en ilginç, güncel araştırma konularındandır. Bir örnekle açıklamaya çalışalım, diyelim ki elinizde basın/yayın organlarında kullanılmış fotoğraf, film, ses ve yazılardan oluşmuş ve bilgisayara aktarılmış son 20 yılın arşiv bilgileri var. Ancak görüntü ve seslerin bilgisayar kayıtlarında içerikleri ile ilgili bir bilgi mevcut değil. Şimdi gereksinime dayalı olarak, sisteme vereceğimiz:
komutu ile bu tür bilgilerin hepsinin aranıp bulunması işte bu araştırma dalının amaçladığıdır.

Grafik, Görüntüleme ve Çokluortam

Bu alan belki PC kullanıcılarının (özellikle genç olanlarının) en çok tanış oldukları alandır. Popülerliği hep var olan 'Bilgisayar Oyunları' görsel arayüzlerinde bu disiplinin bilimsel ürünlerini çok yoğun biçimde kullanırlar.  Bu alanda bilgisayarlar aracılığı ile yapay görüntülerin nasıl oluşturulacağı ve bunların gerçek dünyadan kaydedilmiş görüntü ve 3 boyutlu bilgiyle  nasıl entegre edileceği ile uğraşılır. Bu alanın temel ilgilerini şöyle sıralayabiliriz:
Bu disiplin uygulamalı matematiğin pek çok dalından yararlanır. Ancak matematik disiplini bu tür problemlerin çözümlerinin çerçevesinin oluşturulmasında yardımcıdır. Bilgisayar bilimlerinin en önemli tasası ve uğraşı bir işi hızlı yapabilmektir. Dolayısı ile matematik çerçevede tanımlanmış soruna özellikle bilgisayar biliminin Algoritma ve Veri yapıları öğretisi aracılığı ile hızlı çözümler bulunulur. Aslı uğraş buradadır.

Ağ-eksenel Bilişim

Bilgisayarın çeşitli fiziksel yöntemlerle birbirleri ile iletişmeleri ile ilgilenir. Bu iletişimin 
bu alanın bilim adamlarının tasasıdır. Bazen binlerce kilometre taşınan verinin istenmeyen unusrlarca dinlense bile çözümlenememesi gerekmektedir. Bunun için veri çoğunlukla şifrelenir. Şifrelemeyi ne kadar 'karmaşık' yaparsanız bunun kodlanması da çözümlenmesi de zor olacaktır, ancak bu da zamn kaybıdır. Bu alanın bilim adamları bu işin denge noktasında, hep daha güvenli şifrelemeler oluşturumaya çalırlar. Şüphesiz tek tasa verinin şifrelenmesine ilişkin değildir. Bir aktarımda milyarca 1 ve 0 bilgisinin aktarılması olağandır. Aktarma ortamındaki bir parazitten ötürü veya aynı anda başka bir iletişimin bu iletiye karışmasından ötürü verinin sağlıklı karşı tarafa aktarılamamış olması da olasılık dahilindedir. Bunun anında fark edilmesi, onarılması, onarılamıyor ise, bir usulle kaynaktan tekrar istenmesi hep bilimsel olarak çözülmesi gereken sorunlardır. Ayrıca, günümüz bilgisayar iletişim yapıları bir ağ biçimindedir. Bir noktadan bir noktaya bilgi iletmenin birden fazla yolunun olması çok doğal ve sağlıklıdır. Hangi yolun seçileceği, yolun o andaki bilgi trafiğinin yoğunluk durumuna göre ne yapılacağı, bir yolun devreden çıkması durumunda alternatif yol seçimi usulleri bu alanın uğraşlarındandır. Tahmin edileceği üzere İstatistik bilimi, Enformasyon teorisi ile çok yakından ilgili yöntemler kullanılır.

Akıllı Sistemler

Yapay Zeka (Artificial Intelligence) sistemleri olarak da bilinen bu konu Bilgisayar Biliminin içinde önemli yer tutan dev bir konu başlığıdır. Konu o denli önemlidir ki bilim adamları tanımı üzerine bile tam bir fikir birlikteliğinde değildirler. Belki en genel kabul gören tanım aşağıdakidir:
Birkaç somut ilgi alanına örnek vermek gerekirse:

Yapay Zeka uğraşılarında, aslında felsefi denebilecek, iki farklı görüşün egemen olduğunu söyleyebiliriz: Güçlü ve Zayıf Yapay Zeka.Yukarıdaki tanım aslında Zayıf Yapay Zeka alanının tanımıdır. Zayıflık, yapay zekası olan bilgisayarın tümüyle zeki, otonom bir varlık olarak değil de, ancak fevkalade dar bir alanda zeka gösteren bir yapı olarak  gerçekleşebileceği anlamındadır. Bu, ne yazık ki, şu anki bilgisayar mimarisi ve bilgi birikimimiz bakımından doğrudur. Güçlü yapay zeka şu anki imkan ve yetilerimizle daha onlarca yıl ufukta bile gözükmeyecektir.

Yapay Zeka uğraşının alt alanlarını belirtecek olursak: