萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> 金旭亮:如何選擇你學的第一門編程語言?

金旭亮:如何選擇你學的第一門編程語言?

  說明:這篇文章是專門針對大學低年級學生(和其他軟件開發初學者)寫的,如果你己經是研究生或本科高年級學生,請將這篇文章轉發給你的師弟或師妹,希望這篇文章能夠幫助他們少走彎路,順利地邁入軟件開發的大門;如果您是一位有經驗的軟件開發者,或者是關注計算機教育的同行,也敬請提出寶貴意見。

  最近,台灣知名技術專家蔡學镛先生寫了一本《編程ING》,宣稱“人人都能學會程序設計”。作為一名IT教育工作者,這本書引發了我的興趣,翻看之後,共鳴之處不少,結合國內計算機教育的現狀,產生了頗多感觸,於是就有了這篇小文。

  一、為什麼學生視編程為畏途?

  先當學生後當老師,不知不覺之中我在大學裡己“混”了十多年,我發現,進入計算機專業就讀的學生,最初至少有一大半對真實的軟件開發根本不了解,是 “一張白紙”,不幸的是,學了四年之後,許多張“白紙”又變成了許多罐“漿糊”,帶著對軟件開發可能是畏懼也可能是無所謂但絕對不是喜歡的感觸離開校園。

  編程真的那麼沒勁?那麼難和枯燥?

  我寫了將近二十年的代碼,雖然不靠編程吃飯,但也似乎勉強可算是個老程序員,我對編程的看法可總結為兩句:何以解憂,唯有編程!我經常在想一個問題:編程其實是很有趣很好玩很實用並很有成就感的一件事,為什麼會有這麼多的學生視編程為畏途?而我們的計算機教育,為什麼在打掉學生對編程的興趣方面 “如此成功”?

  蔡學镛先生在《編程ING》給出了一張圖:

金旭亮:如何選擇你學的第一門編程語言? 三聯教程

  圖 1 正向興趣循環是學習的關鍵

  我認為這張圖道出了問題的關鍵——學習過程中的“正向”興趣循環是否成功地建立。

  強烈的興趣與不斷獲得的成就感是整個學習過程的“引擎”,它為學生完成整個學習任務提供源源不斷的強大動力。有無數的事實支持這個觀點。

  傳統的教學觀點認為,本科的主要教育目標之一是為學生在本專業領域未來的發展“打下扎實的理論與實踐基礎”,所以從一開始就要“嚴格要求”,“科學訓練”。

  這個觀點不能說錯,但我認為,我們的計算機教育,尤其是針對初學者的教育,首要的任務是引發興趣。沒有興趣,一切免談。

  我所了解的事實是:計算機專業的學生有不少視編程為畏途。其原因在於我們的現有計算機教學方式從一開始就給了這些學生“痛苦”的編程體驗,不幸的是,這種體驗在後期枯燥的專業課學習中不斷得到強化,學生最終對編程敬而遠之或畏之如虎。

  事實上,教育學研究早己指出,成功的高效的教學應該是這樣的:循序漸進,由淺入深,步步為營,興趣導向。

  教師的職責,不是將知識“灌入”學生的大腦,首要的任務是引發學生的興趣,鼓勵他們去探索未知的領域,主動地學習和吸收知識,培養技能,積累經驗。在這個學習過程中,教師要成為一名優秀的導航員,給學生繪出航線,鼓勵他們出海遠航,解決他們在航行中所遇到的困難,並幫助學生建立學習的“正向”興趣循環。

  對編程的“第一印象”很重要啊!由此,引發了一個很有趣的問題——應該選擇哪一門語言作為學生的第一門編程語言?

  二、你學的第一門編程語言是什麼?

  在國內的大學中,當前大多數選用C作為學生的第一門編程語言。這其實並沒有太大的問題,C的重要性無須我多說。其實問題的關鍵不在於選擇C教學,而在於以哪種方式去教。

  很不幸,國內許多C語言的教材都將主要的精力放在對C語法細節的介紹上,課程考核方式又很古板——很多院校采用閉卷考試,出一堆的選擇題和填空題。典型的題目是將一段代碼砍掉一兩句,讓學生“填空”。有哪位高手是通過做這些“填空題”學會編程的?上機也流於形式,讓學生反復折騰幾個“黑底白字”的 “玩具般的”小程序,學了一個學期,學生連一個有點用的程序都寫不出來……

  這種僵化的教學方式,足以毀掉多數學生對編程的興趣。

  我個人認為,C不應該成為針對大多數學生所講授的第一門編程語言,我們的教學體系,應該給學生提供更多的選擇。

  針對初學者所講授的第一門編程語言,應該具有以下的特點:

  (1)必須是“有趣”的,能誘導人去“動手”和“思考”。

  (2)需要對初學者屏蔽不必要的底層技術細節,以免分散他們的注意力。

  (3)這種語言必須足夠簡單,但同時又具備足夠的能力編寫出實用的程序,從而讓學生能比較容易地獲得成就感,感悟到軟件開發的魅力。

  (4)這種語言必須能充分地體現現代軟件開發的基本思想和技術成果,為學生進一步深入學習打下基礎

  (5)花在這門編程語言上的時間和精力是有回報的,掌握了它,就掌握了一個強大的工具,可以在今後的學習中使用這個工具進行實踐和創造。

  另外,這門編程語言的學習,應該有助於初學者正確理解與體會到以下的編程思想:

  (1)分而治之:將大問題切分為小問題。

  (2)組件化與模塊化:以搭積木的方式“構建”出軟件系統。

  (3)算法思想:針對實際問題建立數學模型,設計計算機算法,最終編程解決問題。

  同時,這門編程語言的學習,應能有效地培養出以下的編程基本功:

  (1)調試代碼的能力。

  (2)撰寫可讀性強、擴充性好、易於復用的優質代碼的能力,培養良好的編程習慣。

  (3)查找技術資源與閱讀技術文檔的能力。

  也許一門編程語言的學習無法達到上述的所有要求,但組合幾種不同的編程語言就差不多了。下面,我介紹幾種適合於初學者入門的編程語言。

  三、適合於入門的腳本編程語言

  為了教初學者學會編程,蔡學镛先生的《編程ING》選擇了REBOL編程語言,這個語言確實比較簡單,而且蔡先生的書圖文並貌,用它來訓練編程的基本技能很合適,但REBOL這門語言似乎過於小眾化了一些,而且書中缺乏有力的能引發初學者興趣的應用實例。

  依據我的經驗,如果初學者能動手寫出幾個有用的實例,他喜歡上編程的可能性會大大增加。

  以下是我粗略歸納的很容易引發學生成就感的幾個技術領域:

  1.圖形圖像與動畫、多媒體

  2.游戲

  3.網絡應用

  4.擁有可視化界面的桌面應用程序

  5.能跑在手機上的應用程序

  就我個人看法,第一門語言比較適合采用腳本式的編程語言。

  Python:認識編程是怎麼回事,訓練基本編程技能

  國外有許多人非常推崇Python(http://www.python.org),認為它是最適合初學者學習的一門編程語言。

  Python是一種動態編程語言,語法簡潔易學,本身是開源的,Python程序可以運行於幾乎所有主流的操作系統之上。

  對於初學者而言,使用Python可以學習基本的編程知識(比如學會編寫分支、循環語句),體會動態編程語言的特點,並理解類和對象等面向對象編程的基本知識。

  但針對國內的實際情況,使用Python存在著一些問題:

  (1)官方提供了一個交互式的開發環境IDLE,易於使用,但要開發擁有可視化界面的程序比較麻煩,其他廠商的開發環境也不太成熟穩定。

  (2)缺少合適的中文教材,與其他語言相比,在國內應用也並不算廣。 個人觀點:使用Python對初學者進行基本編程技能的訓練還是比較合適的,但在使用它入門之後,還必須學習其他的編程語言。

  MATLAB和Scilab:訓練算法的設計與編程實現能力

  學習、應用和設計各種算法,培養為各種問題建立數學模型的能力,這對於軟件開發而言非常重要,我國己在高中數學教學中引入了算法,並將其納入了高考的考試內容,這是件好事。

  當前高中新課標數學課本中,使用的是由法國國家信息自動化研究院(INRIA)開發的Scilab(http://www.scilab.org/),這個軟件與大學裡流行的MATLAB高度類似,是學習算法的好工具。

  比較遺憾的是,Scilab也缺少足夠的中文資料,並且由於高考數學僅考察簡單的算法流程圖,占分很少,因此大多數的高中都不會對這塊投入太大力氣,學生的算法思想和數學建模能力無法得到比較充分的訓練,這個任務只能留到大學來完成了。

  使用Scilab或MATLAB作為第一門編程語言是完全可以的,與Python類似,Scilab或MATLAB編程采用交互式的運行方式(圖 2),編程語法也很簡易,通過它同樣能培養出基本的編程技能,特別是它們強大的數學圖形功能,對學生吸引力很強,Scilab或MATLAB編程對他們數學能力與算法設計應用能力的訓練無以倫比,這種能力會為學生未來在學術研究領域的發展提供強勁動力。

  圖 2 Scilab交互式編程環境

  Office+VBA:用VBA代碼控制Office,讓各種工作自動化

  幾乎所有大學都開設有《計算機基礎》這門課程,其中大多都會講授微軟Office軟件包的使用。但當前這門課程教學方式是存在問題的,比如我看到過一些考試試題,考核學生是否記住了Word的某些操作快捷鍵,這完全是本末倒置!其實,將本課程教學內容略

copyright © 萬盛學電腦網 all rights reserved