“不是每個人都能成為程式設計師” 是真的嗎?

freetstar發表於2012-09-21

Q:許多程式猿堅信這樣一條格言:“程式設計需要某種特定的思維,並不是所有人都會程式設計”。我知道我們都有自己的軼事證據,但是這個思想有沒有科學依據?

A1:有一項研究,調查了菜鳥程式猿擁有的心智模型的可行性

此論文調查了一群菜鳥程式猿的心智模型可行性,這些菜鳥剛接受了一年的Java程式設計課程。結果顯示,不同人對值和引用賦值有不同的心智模型。定量分析的結果顯示,大概三分之一的學生對值賦值擁有不可行的心智模型。只有17%的學生對引用賦值有可行的心理模型。還有,在對這些菜鳥的心智模型和他們在課程作業和期末考試的表現對比後,發現那些擁有可行性心智模型的學生明顯比那些沒有可行性心智的強。這些研究結果用來提供更有建設性的建議,即:程式設計教學應該以認知衝突和程式視覺化之間的整合為基礎。

而且,還有從Sheep vs Goats(宣告下,此論文從沒有發表過)研究的作者後期的研究 .他們從2009年開始的關於此主題的研究是, 研究連貫性對早期學習程式設計的成功的影響(pdf)。

在程式設計第一課之前,研究人員了一個實驗,表面上測驗學生賦值和序列方面的知識,實際上用來捕獲他們的邏輯策略。這個實驗發現了兩種學生:一種可以建立和持續應用心智模型於程式執行;另外一種看起來要麼無法建立心智模型,要麼不可以持續的應用。前一種學生較後一種在期末考試中有更好的表現。雖然實驗並沒有非常精確地得出每個人的表現水平,但是通過5個在英國,1個在澳大利亞的同樣的實驗,結果表明了連貫性在學習程式設計早期的成功中有重要作用 -- 然而關於程式設計經驗,從另一方面來講,沒有或者有很少的效果。

A2:是的,網上有篇著名的論文論述了"誰不能成為一名程式猿"

程式設計早期學習的認知研究-Prof Richard Bornat, Dr. Ray Adams

所有教授程式設計的教師發現他們的結果為“雙峰”,好像只有2種人類:一種能夠程式設計,另外一種則否,每一種都有自己獨立的貝爾曲線。

幾乎所有關於程式設計如何教授和如何學習的研究都將注意力放在瞭如何教授中:改變語言,改變應用領域,使用IDE,激勵學生,這些努力都不行,雙峰現象依然存在著。

在課程開始前,我們做了一個小測試用來選出能程式設計的那一類人。我們可以打破雙峰現象。你可能不會相信這個,但是當你聽了講述後你會相信的。我們不知道這樣怎麼能夠成功,但是我們確實有一些不錯的理論。

Jeff Atwood 的一篇博文,解釋了結果,做了一些介紹。

儘管電子計算從1950年代誕生的那時起發生了巨大的變化,但是有些事情任然保持原貌。尤其來說,大多數人不會程式設計:每個大學的電腦科學系在第一個程式設計課程考試中總有30%到60%的學生無法通過。 有經驗的老師厭煩但是不注意這樣的事實;一些熱情的初學者相信之前的學生肯定是哪裡做的不對,但是通過痛苦的經驗他們親身認識到了事實。自從1960年代開始,這樣的情況已經連續發生在2代人身上了。

(有人補充,實際上那些沒有30%-60%沒有通過考試的同學實際上很懶,實際上幾乎所有的學科都有類似的情況)

A3: 任何人都可以成為程式猿。試想人們能夠很容易地使用電子表格,試想Alan Kay在可程式設計環境中是怎麼通過各種方法教孩子學習和探索程式設計的。

人們可能通過研究大學水平的課程,得出一些人不適合學習程式設計的結論。然而,這樣的結論嚴重地跨越了目前證據的邊界。反而,失敗程度可歸結於教授程式設計的方式(太抽象了?),教授語言的型別(太必要了?),或者程式設計環境(需要編譯,沒有及時反饋?)

人們在實踐過若干具體例項後可以很容易地把握抽象的東西-比如,直到我們快知道一件事情前我們不能夠學習它。因此,以抽象的東西開始學習,是很愚蠢的教授程式設計的方法。那些絆倒在“心智模型”的人,能夠在有更多的,能夠實時反饋的例項環境(比如說Kahn academy CS系)中學會程式設計,然後當他們準備好時鼓勵他們去學習抽象的東西。

一些情況是學生自己不能通過考試。人類存在懶得學習和故意忽略的毛病,那些聰明的人也是,任何和聰明人爭辯過的都可以證明。但是,尤其對程式設計和數學來說,是課程本身讓這些學生最終失敗了。

A4:可能這只是坊間流傳的格言而已,當我給數百個文學生教授程式設計時,我沒有發現這種“雙峰現象”,看起來他們都很不錯,當然有的人很努力,有的人懶得動。

我認為這個情況與教授方式有很大關係。

還與慾望有關:有的同學根本一點也不喜歡程式設計。但即使這樣,如果他們認真努力,他們也能學會的

原文:Has “Not everyone can be a programmer” been studied?

原作者:Yannis Rizos,Web工程師

譯者:freetstar(連高欣),喜歡開源,喜歡linux/vim/python,www.freetstar.com

相關文章