Birçok programcının bağlı olduğu eski bir özdeyiş, "Programlamayı öğrenmek belli bir zihin gerektirir, herkes bunu yapamaz."
Şimdi hepimizin kendi fıkra kanıtlarına sahip olduğumuzdan emin olduğumuza eminim, ancak bu bilimsel olarak çalışıldı mı?
Birçok programcının bağlı olduğu eski bir özdeyiş, "Programlamayı öğrenmek belli bir zihin gerektirir, herkes bunu yapamaz."
Şimdi hepimizin kendi fıkra kanıtlarına sahip olduğumuzdan emin olduğumuza eminim, ancak bu bilimsel olarak çalışıldı mı?
Yanıtlar:
Başka bir çalışma, acemi programcılar tarafından tutulan zihinsel modellerin uygulanabilirliğinin araştırılması :
Bu yazıda, yeni başlayanlar için programcıların bir yıllık Java programlama kursu sonunda kullandıkları zihinsel modellerin uygulanabilirliği üzerine bir araştırma anlatılmaktadır. Nitel bulgular, katılımcılar tarafından tutulan zihinsel değer modellerini ve referans atamasını tanımlar. Nicel analiz, öğrencilerin yaklaşık üçte birinin uygun olmayan zihinsel değer atama modellerine sahip olduğunu ve öğrencilerin sadece% 17'sinin uygun bir zihinsel referans atama modeline sahip olduğunu ortaya koymaktadır. Ayrıca, katılımcıların zihinsel modelleri ile kurs içi değerlendirme ve final sınavlarındaki performansları arasında bir karşılaştırma yapılması durumunda, uygulanabilir zihinsel modelleri olan öğrencilerin, uygun olmayan modellerden daha iyi performans gösterdikleri bulunmuştur. Bu bulgular daha "yapılandırmacı" önermek için kullanılır
Ayrıca bkz sonraki araştırmalar (net olmak gerekirse, aslında asla yayınlanmadı) Keçi çalışmanın vs Koyun aynı yazarlardan. 2009'dan itibaren bu konuyla ilgili son ve en son çalışmaları , programlamanın erken öğrenilmesinde tutarlılığın başarıya etkisinin Meta-analizidir (pdf).
Programlamada bir ilk kurstan önce bir öğrencinin ödev ve dizilim bilgisini görünüşte inceleyen ancak aslında akıl yürütme stratejilerini yakalamak için tasarlanmış bir test tasarlandı. Bir deney, iki farklı öğrenci popülasyonu buldu: Biri, zihinsel bir program yürütme modelini kurabilir ve uygulayabilir; diğeri model oluşturamadı ya da tutarlı bir şekilde uygulayamadı. İlk grup, kurs sonu sınavlarında başarı veya başarısızlık bakımından ikinciden çok daha iyi bir performans gösterdi. Test, performans düzeylerini çok doğru bir şekilde tahmin etmiyor, ancak deneydeki altı yinelemenin sonucunu, beşi İngiltere ve biri Avustralya'da birleştirerek, tutarlılığın programlamayı erken öğrenme başarısında güçlü bir etkisi olduğunu gösteriyoruz - ama Öte yandan, arka plan programlama deneyimi,
Evet, çevrimiçi olarak “Kim bir programcı olmak için kestirildi” kararını vermek üzere tasarlanmış oldukça ünlü bir makale var.
Programlamayı erken öğrenmenin bilişsel bir çalışması - Prof Richard Bornat, Dr. Ray Adams
Tüm programlama öğretmenleri, sonuçlarının bir “çift kambur” olduğunu buluyorlar. Sanki iki popülasyon var: Her biri kendi bağımsız çan eğrisine sahip [programlayabilen] ve [programlayamayan].
Programlama öğretme ve öğrenmeye yönelik neredeyse tüm araştırmalar öğretime odaklanmıştır: dili değiştirmek, uygulama alanını değiştirmek, bir IDE kullanmak ve motivasyon üzerinde çalışmak. Hiçbiri işe yaramaz ve çift kambur devam eder.
Kurs başlamadan önce programlanabilecek popülasyonu seçen bir test yaptık. Çifte huzuru ayırabiliriz. Muhtemelen buna inanmıyorsun, ama konuşmayı duyduktan sonra anlayacaksın. Nasıl ve neden işe yaradığını tam olarak bilmiyoruz, ancak bazı iyi teorilerimiz var.
İşte Jeff Atwood'un sonuçları yorumlayan ve bazı şeyleri bağlam içine alan bir blog yazısı .
Elektronik hesaplamanın 1950'lerde icat edilmesinden bu yana gerçekleşen muazzam değişikliklere rağmen, bazı şeyler inatla aynı kalıyor. Özellikle, çoğu insan programlamayı öğrenemez: her üniversite bilgisayar bilimi bölümünün girişinin% 30 ila% 60'ı ilk programlama dersinde başarısız olur.
Deneyimli öğretmenler yorgun ve bu gerçeği asla umursamazlar; Eskilerin yanlış yaptıklarına inanan açık gözlü yeni başlayanlar acı deneyimlerden gerçeği öğrenir; ve böylece, konu 1960’larda başladığından beri, neredeyse iki kuşaktır.
Herkes programcı olabilir. İnsanların elektronik tabloları ne kadar kolay kavradıklarını düşünün. Alan Kay'ın, programlanabilir bir ortamda deney ve keşif yoluyla çocukları programlamaya nasıl tanıttığını düşünün.
İnsanlar, üniversite seviyesindeki kurslarda başarı okuyabilir ve "bazı insanlar programlamayı öğrenmeye uygun değildir" sonucuna varabilir. Bununla birlikte, böyle bir sonuç gözlemlenen kanıtların sınırlarını ciddi biçimde aşmaktadır. Programlamanın nasıl öğretildiğine (çok soyut?) Veya hangi programlama stiline (çok zorunlu?) Ya da programlama ortamına (derleme, anında geri bildirim yok?) Ne kadar başarısızlık verilebilir?
İnsanların soyutlamaları, çoktan somut örneklerle çalıştıktan sonra en kolay şekilde kavradıklarını - yani, neredeyse bilene kadar bir şey öğrenemeyeceğimiz anlaşılmaktadır. Özetle başlamak, bu nedenle, programlama öğretmek için tamamen aptalca bir yoldur. Önceden algılanan "zihinsel modeller" e karıştıran birçok insan, gerçek zamanlı geri bildirimli (örneğin, CS için Kahn Akademisi'nde olduğu gibi) daha somut bir ortamda öğretildiyse gelişmeye başlar ve sonra hazır olunca soyutlama merdivenine tırmanmaya teşvik edilir . Öğrenilebilir Programlama , Bret Victor'un yakın tarihli bir makalesidir ve programcıların öğrenmedeki gereksiz çevresel zorluklara dikkat çeker.
Bazı durumlarda, sınıflarında başarısız olan öğrencilerdir. Entelektüel tembellik ve kasıtlı cehalet, herhangi bir büyük insan grubunda mevcut olacaktır. Akıllı halk istisna değildir, zira parlak bir krankla tartıştığı herkes kanıtlayabilir. Ancak, özellikle programlama ve matematik için, genellikle öğrencileri başarısız eden sınıflardır.
x = 1; y = x;
ve soru " değerleri nelerdir x
ve y
?"
Is it true that not everyone can learn how to program?
sorudan hattı, bizim daha tecrübeli kişiler de bunu kurallarımıza uymayan fark, görmezden ve sorunun araştırmalar bilimsel / yönlerine verdikleri yanıtları konsantre. Lütfen aynısını yapar mısın?
Belki bu bir anekdottur, fakat birkaç yüz liberal sanat öğrencisine programlama dersi verdiğimde, böyle bir "çift huzursuz" bulamadım. Bazıları diğerlerinden daha çok çalışsa da, bazıları çok zoru atmaya çalıştılar, ama hepsi de oldukça yetenekliydi.
Nasıl öğretildiğiyle ilgili çok şey var.
Birçoğunun da arzu ile ilgisi vardır - bazıları programlamayı ilginç bulmazlar. Ancak öyle olsa bile, eğer dürüst bir çaba gösterirlerse öğrenebilirler.
Başladığımda, bir programlama işine başlamadan önce bir "yetenek testi" yapmak olağandı. Çok fazla bilgisayar bilimi mezunu yoktu, bu yüzden diğer disiplinlerden işe almak yaygındı.
Testler, IQ testlerinde gördüklerinize benziyordu (sıradaki sıradaki sayı nedir, vb.).
Fıkra delilleri, testi geçen herkes iyi bir programcı olmamakla birlikte testi geçemeyen, ancak başka nedenlerden dolayı işe alınan hiç kimsenin iyi bir programcı olmadığının kanıtıydı.
Ne yazık ki İK uçakları bu testleri anlamadı (ve onları aldıklarında başarısız oldu!), Bu nedenle bu günlerde işe alım İK uçaklarının anladığı şeylere dayanıyor - iyi üniversite, iletişim ve takım elbise kullanma becerileri.
Bu, büyük BT departmanlarının, PowerPoint şovlarında ve çok az iyi programcıda harika olan birçok insanın olmasının nedenidir.
Dehnadi ve Bornat'ın çift kambur veya keçi-koyun-keçi çalışmasını öne sürenlere, bunu çoğaltmaya çalıştıkları Zihinsel Modeller ve Programlama Yeteneğini incelemek faydalı olacaktır :
Giriş programlama derslerine katılan öğrencilerin başarısını tahmin etmek 25 yıldan uzun süredir aktif bir araştırma alanı olmuştur. Yakın zamana kadar, hiçbir değişken veya testte anlamlı bir öngörü gücü yoktu. Bununla birlikte, Dehnadi ve Bornat, programlama koyunlarını programlama dışı keçilerden temiz bir şekilde ayırmak için programlama yeteneğinin basit bir testini bulduğunu iddia etmektedir. Teorilerini ve test araçlarını kısaca sunuyoruz.
Bulgularını doğrulamak ve belki de genelleştirmek için testlerini yerel bağlamda tekrarladık, ancak testin giriş programlama kursumuzda öğrencilerin başarısını öngördüğünü gösteremedik.
Test cihazının bu başarısızlığına dayanarak, farklı sonuçlarımız için çeşitli açıklamaları tartışır ve bu alandaki yerel sonuçları genelleştirmenin mümkün olabileceği bir araştırma yöntemi öneriyoruz. Ayrıca Dehnadi ve Bornat'ın programlama yetenek testini tartışıp eleştiriyoruz ve alternatif test araçları geliştiriyoruz.
Biri soyutlama kapasiteleri veya diğer faydalı bilgiler hakkında çalışmalar yapabilir, ancak programlamanın tanımı belirsizdir ve teklifin alakasız olduğunu düşünüyorum, çünkü programlamaya bakmanın karşıt yolları var:
İlk tür: Programlama dilleri, bilgisayarın yürütmesi gereken bir görevi tanımlamak için yapılan bir tür insan dilidir (veya olması gerekir), bu nedenle konuşan herkes programlayabilmelidir. Buna kodlama, BASIC, dizgi sistemi TeX vb. Denir . Dil veya sistem önemli değil, yaratıcılarının ve insanların baktıkları yöntem: "Sevgili program / bilgisayar, lütfen adımı yaz" yerine "Bana on bir karakter büyüklüğünde yer verin, sonra bana bu alanın adresini verin, sonra depolamama izin verin, sonra bu belleğe klavye tamponumdan çıkarabileceğiniz on bir karakter girin (ancak temizlemeyi unutmayın) , vb."
Bu durumda, çalışmanın “Her dilin çabucak özümsemediğini” tercih edeceği açıktır.
Öte yandan, programlama dilleri, bir bilgisayarın nasıl çalıştığını veya nasıl çalışması gerektiğini, 1950'lerin bilgisayarlarını düşünüyorsanız, nasıl 'bağlanması gerektiğini' tarif etmenin bir yoludur. Bu nedenle, programcı, programlama dilini mükemmel bir şekilde konuşsa bile, istihbaratının bellekte depolanan baytları, işaretçi gibi dizgileri vb. soruna bağlamak için dünyaya geri dönün. Bu nedenle her insan programlayamaz (meclis dilinde…).
Bunun dışında çalışmak ve bir şeyler üretmek için gereken tüm niteliklere ihtiyacınız olacak: ne istediğinizi çok iyi öğrenin, başkalarının daha iyi anlamasını / tamamlamasını / gözden geçirmesini, hedeflerinize odaklanmasını vb. Kolaylaştırın ... Ama bir mimar gibi, bir yazar, bir müzisyen, bir fahişe ...
Ancak çoğu insan, özellikle çocuklar olmak üzere iyi soyutlama kapasitelerine sahiptir. Bazı Alman okulları Haskell'e gençlere öğretiyor ( Pascal veya Delphi gibi programlama dilleri her Alman okulunda eğitiliyor).
Bu yüzden, sorunun cevaplanması çok zor ve herhangi bir cevabın (ya da çalışmanın) alakasız olabileceğini söyleyebilirim.
Peter Norvig tarafından On Yılda Kendinizi Programlama Öğretisi başlıklı makalede, insanların programlamayı nasıl öğrendikleri hakkında çok kısa bir analiz bulacaksınız . Doğuştan programcı olmadığını düşünüyor gibi görünüyor.
Yıllar önce askeri liderlik teorisi içeren birkaç kurs yaptım. Teorinin bir kısmı, doğal lider olanlardan bir tasmayı köpeğe götüremeyenlere kadar bir liderlik sürekliliği olduğuydu. Buradaki fikir, insanların bu liderlik sürekliliği üzerine bir çan eğrisinde dağıtıldığı ve çoğu insanın iki uç nokta arasında bir yerde olduğu idi. Uzak uçtaki az sayıdakilerin dışında "bir köpeğe yol açamamışlar" sonu, hemen hemen herkesin liderlik sanatını öğretmesiydi. Birini lider haline getirmek için gereken çaba, sürekliliği nerede oturduğuna bağlı olarak değişmektedir.
Programlamanın benzer bir sürekliliğe ve benzer bir dağılıma sahip olduğundan şüpheleniyorum. Zahmetsizce başarabilecekler ve hayatları buna bağlı olsa asla başaramayacak olanlar olacaklar. Ama onlar çan eğrisinin kuyruğundaki birkaç kişi. Çoğu insan süreklilikteki aşırı uçların arasında oturur. Programlamayı öğrenebilirler ancak onlara öğretmek için gereken çaba, nerede oturdukları sürekliliğe bağlı olacaktır.
Sadece programlama olduğundan emin değilim. Aynı fenomeni, bilgisayar kullanmayı öğrenen insanlarla gördüm. Üniversiteye döndüğümde, laboratuarda, yaşlılar sınıfı için bilgisayar okuryazarlığı düzenleyen bir laboratuar asistanıydım.
İki hafta içinde, alabilecekleri ve temelde% 100 doğrulukta olmayanları tespit edebiliyorum. Bilgisayarın bu şekilde çalıştığını kabul ettiniz ya da tüm sınıf için kafanıza çarpıyorsunuz. Orta bir zemin yoktu. (Yaşlılar sınıfı olduğu gerçeği, kalıbı daha belirgin hale getiren çok sayıda kafa çırpıcımız olduğu anlamına geliyordu.)