張 玥
編者按:在2008年11月15日召開的第四屆全國計(jì)算機(jī)教育論壇上,一位從大洋彼岸遠(yuǎn)道而來的特殊嘉賓為我們帶來了西方的教育教學(xué)理念,引起了普遍關(guān)注。他就是美國紐約市立大學(xué)布魯克林學(xué)院(CUNY)計(jì)算機(jī)與信息系教授David M. Arnow。David教授是計(jì)算機(jī)科學(xué)課程改革的主要倡導(dǎo)者,主要研究領(lǐng)域包括實(shí)驗(yàn)性分布式計(jì)算軟件和計(jì)算機(jī)科學(xué)教育。在這次論壇上,他詳細(xì)介紹了自己開發(fā)的基于Web的交互式程序設(shè)計(jì)編程語言學(xué)習(xí)系統(tǒng)——CodeLab,與各位老師交流了自己的教學(xué)經(jīng)驗(yàn)和體會,贏得與會者的好評。本刊記者(以下簡稱記)在會議期間采訪了David教授(以下簡稱D),就計(jì)算機(jī)教育教學(xué)等內(nèi)容進(jìn)行了深度訪談,以資國內(nèi)同行了解和借鑒。
David M. Arnow(arnow@acm.org),美國紐約市立大學(xué)布魯克林學(xué)院Brooklyn College (CUNY)計(jì)算機(jī)與信息系教授,Turings Craft公司創(chuàng)始人和總裁。David教授于1973年在Oberlin大學(xué)獲得化學(xué)學(xué)士學(xué)位,工作幾年后,在紐約州立大學(xué)(SUNY)計(jì)算機(jī)系獲得博士學(xué)位。David教授發(fā)表了大量學(xué)術(shù)文章,所編著的《Java面向?qū)ο蟪绦蛟O(shè)計(jì)》一書廣受好評,并
被翻譯成中文、意大利文和西班牙文等語言。在布魯克林學(xué)院,David教授是計(jì)算機(jī)科學(xué)課程改革的主倡者,獲得過300多萬美元的聯(lián)邦科研基金。David教授的主要研究領(lǐng)域包括實(shí)驗(yàn)性分布式計(jì)算軟件和計(jì)算機(jī)科學(xué)教育。David教授獲得了“Tow Award for Excellence in Teaching”獎。除進(jìn)行學(xué)術(shù)研究外,David教授還是一個軟件開發(fā)項(xiàng)目的顧問,在貝爾實(shí)驗(yàn)室、美國電話電報(bào)公司(AT&T)、紐約人壽(NY Life)和德意志銀行(Deutsch Bank)進(jìn)行高級程序設(shè)計(jì)與系統(tǒng)方面的主題講座。1999年與大學(xué)同事創(chuàng)辦Turings Craft公司,進(jìn)行CodeLab系統(tǒng)的開發(fā)。CodeLab系統(tǒng)是一個基于Web的交互式程序設(shè)計(jì)編程語言學(xué)習(xí)系統(tǒng),在北美被廣泛使用,每學(xué)年有10,000多學(xué)生用戶。
記:您從事軟件設(shè)計(jì)教學(xué)多少年了?
D:我從事軟件設(shè)計(jì)教學(xué)有很多年了,具體時(shí)間從1980年開始:在有互聯(lián)網(wǎng)之前,在PC之前!
記:在您探究中國的教學(xué)體系時(shí),您是否注意到東西方教學(xué)實(shí)踐的顯著不同?
D:我所看到的差異性,也許更多的是北美和其他地區(qū)的,而不是西方和東方的對比。在北美,我們提供超過半數(shù)以上大學(xué)教育適齡人群所需的大學(xué)教育資源,因此我們可以更多地關(guān)注我們?nèi)绾谓虒W(xué),而不僅僅是我們在教什么。
記:您認(rèn)為理想的學(xué)習(xí)軟件設(shè)計(jì)的環(huán)境是什么?
D:這是一個好問題。我認(rèn)為理想的環(huán)境是一種均衡的教學(xué)環(huán)境,學(xué)生對學(xué)習(xí)方法和學(xué)習(xí)素材的需求是多種多樣的,教師應(yīng)盡可能提供多元化的學(xué)習(xí)資源給學(xué)生。也許是學(xué)習(xí)教材,也許是教師的講座視頻,也許是實(shí)驗(yàn)室的軟件開發(fā)實(shí)踐等??傊玫馁Y源是生動的、個性化的,親身實(shí)踐的實(shí)驗(yàn)室環(huán)境和隨時(shí)指導(dǎo)的實(shí)驗(yàn)教師可以幫助學(xué)生一起攻克復(fù)雜難題。
記:您認(rèn)為學(xué)生在學(xué)習(xí)編程語言時(shí),面臨的最大障礙和挑戰(zhàn)是什么?CodeLab是否很好地幫助學(xué)生解決了這些問題?
D:問題當(dāng)然有很多,但我認(rèn)為最重要的有兩點(diǎn)。第一個最大的溝壑是用公式化的方案如何解決問題;第二個問題是精確的數(shù)據(jù)步驟,如何寫程序的步驟。例如,人類是很聰明的,只要被告知目的地的大致方位,你就能到達(dá)目的地。而計(jì)算機(jī)是愚蠢的,我們必須賦予它嚴(yán)格精確的指令語言。學(xué)生在學(xué)習(xí)編程預(yù)言時(shí),要學(xué)習(xí)的是精確的、格式化的、按部就班的步驟。
從某種程度來看,CodeLab確實(shí)幫助學(xué)生跨越了一些障礙。CodeLab 提供短小的練習(xí),學(xué)生可以標(biāo)準(zhǔn)化一個小方案,但那只是一小步。我們需要學(xué)生設(shè)計(jì)一個完整的程序,而在這個過程中,CodeLab所起到的作用是:當(dāng)你實(shí)施標(biāo)準(zhǔn)化解決思路時(shí),你必須用到部分編程語言。通過掌握和理解編程語言的基本要素幫助學(xué)生實(shí)施標(biāo)準(zhǔn)化解決方法。CodeLab不能完全解決全部問題,但它可以提供有力的幫助。
例如,你學(xué)習(xí)鋼琴的目標(biāo)是可以彈奏一首著名曲子或即興創(chuàng)作一曲爵士樂,因此你需要練習(xí)節(jié)拍、指法、和弦轉(zhuǎn)位等,這些許許多多類似的練習(xí)都在學(xué)習(xí)如何彈鋼琴。通過這些演奏基本技巧,你可以演奏成一首曲子或進(jìn)行即興表演。CodeLab 就像在鋼琴、吉他或其他樂器上的練習(xí),你可以練習(xí)節(jié)奏、和弦轉(zhuǎn)位等基本技巧。
又例如學(xué)習(xí)外語,如果我(非中文母語者)想要用中文告訴某人方位,就必須先學(xué)習(xí)漢字,而后再學(xué)習(xí)其他中文技能,才能幫助我準(zhǔn)確表達(dá)方向。如果我不懂漢字,我將沒有希望用中文表達(dá)方位。CodeLab就可以通過小片段練習(xí)幫助學(xué)生掌握基礎(chǔ)知識點(diǎn)。
記:是什么原因激發(fā)您開發(fā)CodeLab這個基于Web的交互式程序設(shè)計(jì)編程語言學(xué)習(xí)系統(tǒng)?
D:想法來源于課堂。有一天,我突然意識到學(xué)生在數(shù)學(xué)課上有機(jī)會獲得大量實(shí)踐練習(xí)的機(jī)會,而在學(xué)習(xí)計(jì)算機(jī)專業(yè)知識時(shí)卻恰好相反,反而沒有很多實(shí)踐練習(xí)機(jī)會了。實(shí)踐是教育的基礎(chǔ),尤其對于計(jì)算機(jī)這樣一個應(yīng)用性和實(shí)踐性都很強(qiáng)的學(xué)科。沒有實(shí)踐,學(xué)生不可能掌握更多的知識,永遠(yuǎn)站在理論層面上。長遠(yuǎn)地講,我要經(jīng)常和學(xué)生打交道,我想要找到一個讓學(xué)生學(xué)會學(xué)好的高效率的方法,給學(xué)生提供及時(shí)反饋,讓他們嘗試把從課堂上學(xué)到的方法和知識馬上付諸于實(shí)踐。
記:現(xiàn)在很多老師自己開發(fā)課件輔助教學(xué),簡稱為計(jì)算機(jī)輔助教學(xué)系統(tǒng),您認(rèn)為CodeLab是一個計(jì)算機(jī)輔助教學(xué)系統(tǒng)嗎?
D:可以說它是一個用于計(jì)算機(jī)上的指導(dǎo)工具,因此定義它是計(jì)算機(jī)輔助指導(dǎo)更合適。許多這類產(chǎn)品的工作流程是學(xué)習(xí)者閱讀系統(tǒng)提供的問題,然后作答。這些問題通常是多項(xiàng)選擇或簡答題,學(xué)生從給出的多選答案中選擇哪一個代碼是最好的。
但請注意,這不是程序設(shè)計(jì)員的工作方法!程序設(shè)計(jì)員必須產(chǎn)生代碼,而不是挑選代碼。而CodeLab不同,它是讓學(xué)生實(shí)踐動手產(chǎn)生代碼,不是選擇已給出的代碼。當(dāng)然,沒有人能夠只通過CodeLab 來學(xué)習(xí)編程,他們還需要聽課或輔導(dǎo)。希望某天CodeLab 可以組合輔導(dǎo)課程,成為一個標(biāo)準(zhǔn)學(xué)習(xí)課件。
(未完待續(xù))