Yazıyı okumayı bitirdim. Kısaca tercüme etmeye de çalıştım ama yine de uzun oldu... :( Hepsini okumak istemezseniz en sondaki özete bakabilirsiniz...
Kısa tercümeler ve notlar:
- Giriş:
-
Programlama 1950'lerde başladı. Programlama çoğu kişinin öğrenemediği bir uğraştır.
-
1960'lardan beri programlamanın nasıl öğretilmesi gerektiği sorgulandı
-
İngiltere'de %30-%60 üniversite birinci sınıf öğrencisi ilk programlama dersinden kalır
-
Altı ülkedeki birinci sınıf bilgisayar bölümü öğrencilerinin sene sonunda programlayamadıkları görüldü
-
Başka bir araştırma 7 diğer ülkede aynı sonucu buldu
-
Sorun öğrencilerin veya öğretmenlerin motivasyonu değil
-
Programlamayı öğrenebilenler türden olanlar ise, derslerin yavaşlığından şikayet ederler
-
Bilgisayar camiası herşeyi denedi; hiçbir şey işe yaramadı
-
Hiçbir yöntem çalışmadı
- Başka makaleler
-
Başka bir programlama dilini bilmek yenisini öğrenmeye zararlı
-
Bir makale, konuşma dili (örneğin Türkçe) becerisiyle programlama becerisi arasında ilgi bulmuş
-
Bazı öğrenciler ilk başarısızlıkta işi bırakıyorlar, bazıları devam ediyorlar
-
Bir makale söz diziminin zor olan kısım olduğunu söylemiş; programın nasıl çalıştığının anlayanlar genelde daha az sorun yaşamışlar
-
Programlamanın (ve bilginin) belirli bir düzende adım adım verilebileceğine inananlar yanılırlar [D.ershane'nin yöntemi... ;) ]
-
On yedi sene bu adım adım düzeni kurmaya çalışan birisi "insanlar öyle öğrenmezler" sözü üstüne sonunda araştırmaya dayalı öğrenme üzerine çalışmaya başladı
-
Bazıları LOGO ve Miranda gibi basit diller geliştirmeye çalıştılar ve başarısız oldular
-
İnsanlar çıkarımlar yaparken (reasoning deductively) düzenli kurallar (formal rules) kullanmazlar
-
Bir teoriye göre insanlar çıkarımlarını üç temel adımda gerçekleştirirle:
-
Bilinenlerin (verilerin, aksiyomların) doğru olduğu bir durum hayal ederler
-
Bu model içinde doğru olan bir sonuç açıklamaya çalışırlar
-
Aynı bilinenlere dayanan ve varsaydıkları sonucun yanlış çıkacağı başka bir model ararlar. Eğer öyle bir model bulamazlarsa, ilk kurguladıkları model doğrudur.
-
Deney:
- Imperative dillere (C, C++, gibi; yani fonksiyonel olmayan) başlayanlara zor gelen üç anlamsal engel var:
a) atama işlemi ve işlem sıraları
b) özyineleme (recursion) / adım adım ilerletme (iteration)
c) eş zamanlılık (concurrency)
Pek az programcı "eş zamanlılık" engeline kadar geliyorlar. Özyineleme kavram olarak zor, adım adım ilerleme de matematiksel olarak karmaşık...
Öte yandan, atama ve işlem sırasının hiç de zor olmaması beklenir. Bilgiyi depolamak veya bir şeyi hatırlamak, ve işleri belirli bir sırada yapmak günlük hayatın parçalarıdır. Tam tersine! Bu gerçek bir engeldir ve tam da derslerin en başında karşılaşılır... İşte bunu incelemeye karar verdik...
-
Atama ve işlem sıralarını düşünürken öğrencilerin kafalarından ne tür modeller oluşturduklarını öğrenmek istedik
-
Atama olayını anlayan öğrencilerin kafalarındaki modelin bir Java programının gerçek işleyişine uyduğunu gördük
[Öğrencilere test uygulamışlar; makalenin 6. sayfasının başında]
Örnek test sorusu: Şöyle bir program var:
int a = 10;
int b = 20;
a = b;
Bu durumda a ve b'nin "yeni" değerleri şu satırlardan hangisidir?
a = 30 b= 0
a = 30 b = 20
a = 20 b= 0
a = 20 b = 20
a = 10 b = 10
a = 10 b = 20
a = 20 b = 10
a=0 b = 10
Hiçbiri ise yazınız: a= b=
O testi aynı öğrencilere önce ilk dersin en başında, sonra ders anlatıldıktan sonra, ve bir de sınavdan önce uygulamışlar.
[Not: Yazarlar bu noktada = işaretinin atama anlamında kullanılmasının ne inanılmaz bir tasarım hatası olduğunu ve bir delilik olduğunu vurguluyorlar. :) Bence haklılar! :) ]
-
= işaretinin sonuçların sorulduğu bölümde "eşitlik" anlamında kullanılması denekleri hiç şaşırtmamış
-
Öğrencilerin kafalarında şu modellerden birisinin canlanacak olduğunu tahmin etmişler ve yukarıdaki sonuçları bunlara göre kurgulamışlar:
Atamanın kafalarda nasıl canlanacağının tahminleri
- Değer sağdan sola yürür (yani sağ tarafın değeri 0 olur)
- Sağdan sola kopyalanır ("doğru" yanıt)
- Soldan sağa yürür
- Soldan sağa kopyalanır ("doğru" yanıtın tersi)
- Sağ değer sola eklenir
- Sağ tarafın değeri sola eklenir, sağ 0 olur
- 5'in tersi
- 6'nın tersi
- Hiçbir şey olmaz
- Hiçbir şey olmaz çünkü bir bir eşitlik karşılaştırmasıdır
- Değerleri değişir
vs.
vs.
Yani başka sorular da sorulmuş
- Üç grup öğrenci
Gerçek programlama sınavlarının sonuçlarını, baştan hiçbir şey bilmeden verdikleri tahminî yanıtlarıyla karşılaştırmışlar:
a) %44 hemen hemen bütün sorulara kafalarında aynı modeli canlandırarak yanıt vermişler: "tutarlı" grup
b) %39 sorulara değişik modeller kurarak yanıtlar vermişler: "tutarsız" grup
c) %8 çoğu soruyu yanıtlamayı reddetmişler: "yanıtsız" grup
Konu burada ilginçleşiyor... :)
Bu sonuçları konuyla ilgisi olmayan bazı insanlara gösterdiklerinde (ama hangi grubun programcılıkta başarılı olan grup olduğunu söylememişler), o insanların bazı varsayımlarda bulunduklarını görmüşler:
-
Sonuçlara bakan kişi bilgisayar bilimci veya programcıysa: en başarılı grubun "yanıtsız" grup olduğunu düşündüklerini söylemişler; onlara göre, "anlamadıkları soruyu yanıtlamayarak erdemli olduklarını göstermişler."
-
Sonuçlara bakan kişi programcı olmayan sosyal bilimlerle ilgili biriyse: en başarılı grubun "tutarsız" grup olacağını düşünmüşler; onlara göre, "her probleme uyan ayrı yöntem bularak akıllı oldukları göstermişler."
-
Çok az kişi "tutarlı" grubun programcılıkta en başarılı grup olduğunu tahmin etmiş
Doğru sonuç: O kişilerin tahminlerinin tersine, "tutarlı" grup programcılıkta en başarılı olan grup çıkmış.
- Çözümlenmesi ve Kuram
Bu deneylerin kapsamlı olmadığını kendileri de kabul ediyorlar.
Kuramları şu: formal mantıksal kanıtlar ve dolayısıyla programlama dilleri bütünüyle anlamsızdırlar. Bilgisayar programı yazabilmek için bunu kabul etmek gerekir. Bilgisayar anlamsız kuralları körlemesine yerine getirerek anlamsız sonuçlar üretir.
"Tutarlı" gruptakiler bu olguyu kabul ettiler ve anlamsız da olsa kuralların kendilerini bir yere götüreceğini gördüler.
"Tutarsız" gruptakiler ise anlam aradılar ama bulamadılar (çünkü zaten yoktu).
"Yanıtsız" grup ise anlamsızlıkla başedemedi.
Şekil 13, "tutarsız" ve "yanıtsız" gruba programlam öğretmenin olağanüstü zor olduğunu gösteriyor.
- Formal mantığın öğretilmesi
Yazarlardan birisi programcılığı değil, bir kağıdın iki yüzüne sığacak kadar kısa olan doğal çıkarımı (natural deduction) öğretmeye çalışmış. Sonuçlar programcılık konusuna benzer çıkmış.
- Çıkarım
Öğrencilerin programcılıkta başarılı olup olamayacaklarının anlamaya yarayan bir test var. Her ne kadar nedenleri konusunda kuram geliştirmiş olsak da; bir fikrimiz yok.
Ali'nin özeti: Anlamsız kurallarla karşılaştıklarında kafalarında tutarlı bir model geliştirebilenler programcılıkta başarılı olurlar, tutarsız modeller kuranlar veya tamamen yanıtsız kalanlar başarılı olamazlar. Kişinin başarılı olup olamayacağını daha hiç programlama dersi vermeden anlayabilirsiniz.
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]