Algoritmalar açısından düşünmek, yemek pişirmek, telefon
numarası aramak, randevu ayarlamak, alışveriş yapmak gibi birçok günlük aktivite
için yararlıdır. Ama biz esas olarak bilgisayar kullanmak için algoritmalar
yazmak istiyoruz. Bu nedenle algoritmayı kâğıttan nasıl çıkaracağımızı ve
bilgisayar tarafından yürütülmeye nasıl başlayacağımızı anlamamız gerekiyor.
Bilgisayarların, bellekteki bitleri ters çevirme veya
sıfırlama gibi yalnızca çok basit görevleri gerçekleştirebilen makineler
olduğunu söylediğimizi unutmayın. Bilgisayarın gerçekleştirebildiği bu talimat
dizisi, makine dili dediğimiz şeydir. Makine dilinde yazılmış bir algoritma,
sırayla, bir bit ve bayt dizisidir. Bir algoritmayı makine dilinde
görselleştirebilmemiz için, genellikle bir Assembly dilinde veya Assembly
dilinde bir metin gösterimi yazarız.
Bu makinelerin kimyasal simülasyonlar, hava trafik kontrolü
vb. gibi karmaşık görevleri yerine getirmesi şaşırtıcı görünebilir.
Bilgisayarlara, yalnızca çok basit görevleri yerine getirseler bile, bu tür
karmaşık görevleri gerçekleştirme talimatı vermemizi sağlayan şey,
bilgisayarlar için algoritmaları makine dillerinden daha soyut bir dilde
yazmamızdır.
Ama diyelim ki Türkçe bir algoritma yazdığımızda, başka biri
için yazıyoruz. "Bir listeden geçmenin", "belirtilen numaraya
eklemenin" vb. ne anlama geldiğini gerçekten anlayan bir bilgisayar
yoktur. Bu, örneğin, "değerleri ekleyerek listede gezin" anlamına
gelir. Buradaki ana zorluk, Türkçe'nin belirsiz bir dil olmasıdır ve bilgisayar
bu talimatların her birinin ne anlama geldiğini tahmin edemez.
Bilgisayarın anlayacağı şekilde bir algoritma yazmak için
bir programlama dili kullanırız. Yani, algoritmayı yazdıktan sonra (genellikle
Türkçe veya benzer bir formatta), bir kişi, programcı, bu algoritmayı bir
programlama diline çevirir. Böylece bir algoritmayı karşılık gelen bir programa
dönüştürür. Programcının algoritmayı oluşturan kişiyle aynı kişi
olmayabileceğini unutmayın.
Bilgisayar için açık olan bir dil, makine dilinin kendisi
veya buna karşılık gelen montaj dilidir. Ancak bu, çok basit görevler için bile
büyük programlar yazmak zorunda kalacak olan programcıyı mutlu etmeyecektir. Bu
nedenle, normalde yazacağımız algoritmaya daha çok benzeyen, ancak bir
bilgisayarın gerektirdiği kadar açık olan programlar yazabilmemiz için üst
düzey bir programlama dili kullanıyoruz.
Bilişimsel Düşünme Nedir?
Hesaplamalı düşünme mutlaka bilgisayar programlama ile
bağlantılı değildir. İnternete göz atma, e-posta gönderme veya sosyal medyayı
kullanma yeteneği de değildir. Bilişimsel düşünme, çözümleri modellemek ve problemleri verimli
bir şekilde çözmek için bir stratejidir ve böylece tüm problem sınıfları için
genel çözümler bulmaktır.
Şu anda Carnegie Mellon'da profesör ve Microsoft Research'ün
başkan yardımcısı olan Jeanette Wing, bilgi işlemsel düşünmeyi, bilgi
işlemciler (insanlar, bilgisayarlar veya daha iyisi, her ikisinin bir
kombinasyonu) tarafından gerçekleştirilebilecek şekillerde temsil edilen
sorunların ve çözümlerin formülasyonu olarak tanımladı. Bu nedenle, hesaplamalı
düşünme ile tamamen ilgili olmamasına rağmen, bilgisayar, özellikle tahmin
edilebilen eylem dizilerini içeren adımlarda görevleri optimize etmek için
önemli bir araçtır.
Wing, hesaplamalı
düşünmeyi aşağıdaki unsurlarla karakterize eder
Kavramsallaştırma (kavramların organizasyonu) ve programlama
değil
Temel beceri, mekanik değil
Bilgisayarların değil, insanların düşünme şekli
Matematiksel ve mühendislik düşüncesini birleştiren
tamamlayıcı düşünme
Herkes için, her yerde
Ayrıştırma: sorunu daha
küçük ve dolayısıyla daha kolay problemlere ayırın.
Kalıplar: sorunu
oluşturan kalıbı veya kalıpları tanımlayın.
Soyutlama: Birden
fazla problem için geçerli olabilmesi için bir çözümün ayrıntılarını göz ardı
etmek.
Algoritma: sorunu
çözmek için sırayı veya adımların sırasını belirtin.