Programlamanın Zorlukları Üzerine

Tavsiyeler ve Öneriler
Genel ve basitçe düşünürsek programlama, bir işi veya görevi bir bilgisayara yaptırmaya çalışmaktır. Ancak programlama zordur. Kimilerine göre ise onu zevkli kılan şey bu zorluktur. Problem çözmeyi bilmeyi ve sevmeyi gerektirir. Problem çözme ise soyut bir bilim olan matematiğin konusudur. Bunu öğrenmek için akıl yürütmeyi, mantıksal süreçleri, hesaplama yapmayı öğrenmeliyiz. Sözel yeteneklerimiz problem çözmede yetersiz kalmaktadır. Çünkü bu süreç, bir şeyleri akılda tutma/ezberleme ile ilgili değil daha çok çalışma prensiplerini anlayıp onlar üstüne yeni mekanizmalar kurmak ile alakalıdır. Erken eğitim yıllarımızdan beri korkulu rüyamız olan matematik burada önem kazanmaktadır. Hani sürekli duyduğumuz hatta kendimizde söylediğimiz “hocam bu gerçek hayatta nerede karşımıza çıkacak yahu” sorusunu hatırlarsak işte onun işe yaracağı zamana gelmiş bulunuyoruz. Tabiki burada kastedilen matematiksel (soyut) düşünme. Bütün matematik konularını öğrenmekten bahsetmiyoruz.
Peki sadece zeki kişiler mi programlama yapabiliyor ? Sadece zeki kişiler mi matematik öğrenebiliyor? Hayır! New York Times yazarlarından olan Thomas Friedman’ın bu konuda “merak katsayısı” isimli bir yaklaşımı var. Zeka tabiki önemli bir ölçüt. Ancak karmaşık problemleri çözmede, merak ve duygusal zekamız da bir o kadar önemli. Merak ölçünüz ve o konuya olan tutkunuz (ya da duygusal zeka), sizi zekanızın yapabileceğinden daha uzaklara eriştirebilir. Çok zeki bir bilim adamı olarak bildiğimiz Einstein dahi özel yeteneklerinin olmadığını sadece tutkulu bir şekilde merak duyduğunu belirtmiştir. Yani zor olan şeyler gözümüzü korkutmamalı. Yeterince hevesli isek istediğimiz konuyu öğrenebiliriz.
Matematik bilirsek, bilgisayarların çalışma prebsiplerinden programlamaya kadar birçok konu hakkında (öğrenme açısından) önde oluruz. Matematik tabiki çok geniş konuları olan bir bilim. Bilgisayar bilimleri ile ilgili olan konuları öğrenmek daha faydalı olur. Örneğin Boolean cebiri bir matematik konusudur ve ismi matematiksel mantığın kurucusu olan “George Boole” ye ithaf edillir. Biz boolean komutunu kodlama yaparken, bir değerin doğru ya da yanlış olmasını belirleyen bir değişken olarak (ve başka bir sürü konuda) kullanırız. Çalışma mantığını anlıyorsak bu yapıyı tüm programlama dillerinde kulanabiliriz. Program akışının yönlendirilmesinde, döngü yapılarında çok işimize yarar. İşte burada sadece belirli bir programlama dilini öğrenerek üstesinden gelemeyeceğmiz bir durum karşımıza çıkıyor. Yani daha bir dili seçmeden önce dahi öğrenmemiz gereken birçok farklı konu mevcut.
Programlama öğrenmeye yeni başlayan kişilerin en zorlandığı konu, kullanılan standart yapı ve kavramların anlaşılmasıdır. Sonrasında hata bulma, problem çözme için algoritma oluşturma ve kod yazma konuları gelmektedir. Temel olarak tüm zorlukları sıralarsak:
- Genel bilgi eksikliği
- Yabancı dil kullanımı
- Motivasyon ve öğrenmeye yönelik tutum
- Programlama öğrenme yöntemleri
- Programlama mantığının oluşturulması
- Programlama dilinin yapısının anlaşılması
- Aynı anda birkaç dil öğrenme
Peki çözüm ne? Bu zorlukların üstesinden gelmek için her bir zorluğa bir çözüm önermeye çalışacağım:
- Genel bilgi eksikliğimizi gidermek için önce bilgisayarların tarihi gelişimini ve algoritmayı öğrenmeliyiz.
- Yabancı dil kullanımı için kelime haznemizi bilgisayar ve bilişim alanlarında geliştirmeliyiz
- Motivasyon için kısa ve uzun vadeli hedefler koyarak başarı elde edeceğimiz bir plan yapmalıyız
- Öğrenme yöntemleri için modern metodları araştırmalı, planlı ve aralıklı öğrenmeyi kullanmalıyız
- Programlama mantığı için temel prensipleri ve bilgisayar bilimini öğrenmeliyiz
- Programlama dilinin yapısı için söz dizimi (syntax) ve anlambilim (semantik) gibi konuları öğrenmeliyiz
- Aynı anda birkaç dil öğrenmekten kaçınmalı, başlangıç için yüksek seviyeli ve kolay öğrenilebilen bir dil seçmeliyiz
Bu zorluklar ile ilgili yapılan araştırmalar sonucunda çözüm olarak “Blok Tabanlı Görsel Programlama” kavramı ortaya atılmıştır. Proje bazlı, işbirlikçi ve oyun tabanlı vb gibi öğrenme yaklaşımları ortaya çıkmıştır. Kodların bloklar halinde, görsel yapılarda olması hatırlamayı ve algoritma mantığını kurmayı kolaylaştırmaktadır. Bu nedenle ilköğretimden üniversite düzeyine kadar birçok görsel ortam geliştirilmiştir. (Scratch, SmallBasic vb) Bu ortamlar her ne kadar çocuklar için hazırlanmış gibi görünsede, başlangıç yapmak için bu olanakları kullanabiliriz. Bu arada diğer zorlukları aşmak için yeni konular öğrenebilir ve eksiklerimizi kapatabiliriz. Parça parça, kolay ve etkin öğrenirsek motivasyon kaybı yaşamayız ve daha fazla öğrenmek için heves duyarız.
Genel kavramların en önemlisi olan Algoritmaya kısa bir giriş yapalım.
Algoritma nedir ?
Algoritma en kısa şekilde, bir problemin çözümü için gerekli olan bütün işlemleri adım adım, sırayla belirleyen bir tariftir. Basit anlamda bir adres ya da yemek tarifi bir algoritmadır. Daha detaylı düşünürsek, en güzel algoritma örneklerinden biri ilkokulda sayı toplarken öğrendiğimiz yöntemdir:
+önce iki sayının son rakamlarını topla
+ sonucun son rakamını yaz
+ artan rakamı (eğer varsa) soldaki sütuna taşı
+ sonra onun solundaki sütünda bulunan rakamları topla
+ sonucun son rakamını yaz
+ bundan arta kalanları (eğer varsa) sonraki sütüna taşı
+ rakamlar bitene dek devam et…

Algortimaların Genel Özellikleri
- Algortimanın adımları kesin ve mekaniktir
- Her adım tam olarak belli olmalıdır
- İnsani bir önsezi ya da akıl yürütmeye yer vermemelidir
- Girdiler ne olursa olsun her zaman işler olmalıdır
Artık algortimanın kısa bir tanımını biliyoruz ve konunun bilgisayarlarla olan ilgisinden bahsedersek, bilgisayarların da son derece kesin komutlarla programlanması gerekmektedir. Bir bilgisayarın belirli bir problemi çözmesini istemeden önce bu problemin çözümü için bir algoritma geliştirmemiz gerekmektedir. Bilimde önemli sonuçlar matematikte olduğu gibi formüller ile belirtilmektedir. E= mc2 gibi… Bilgisayar bilimi ise genel olarak problemin nasıl çözüleceğini, algoritma kullanarak tarif etmeye çalışır.
Birçok sorunu çözmek için birçok önemli algoritma bulunmaktadır. Bunlardan bazıları son derece iyi hatta mükemmel olarak adledilen algoritmalardır. Çok sayıda problemin çözümünde işe yarayabilirler. Genel olarak birkaç örnek sıralarsak:
- Derleyiciler ve program doğrulama tekniklerini içeren algoritmalar
- Beirli bir probleme yönelik somut uygulamalar
- Quicksort gibi sınıflandırma algoritmaları
- Dijkstranın en kısa yol algoritması
- Grafik algoritmalar
- Anahtarlı tablolar
- Veri yapılandırmaları vb sayılabilir
Algoritma ve Veri Yapıları konularına yine devam edeceğiz. Önce sadece genel bilgiler öğrenelim ki daha sonra detaylara geçtiğimizde bir altyapımız olsun.
Başka bir konu ise İngilizce dili. İngilizce dilini iyi bir seviyede bilsek dahi bilgisayar bilimi ve programlama alanında kullanılan ifadeler farklı anlamlara gelebilmektedir. Bu nedenle kelime haznemizi çalışacağımız konularla alakalı olarak geliştirmek akıllıca olur. Bir bilişim ya da bilgisayar sözlüğü bu konuda oldukça işimize yarayabilir