如何向新手程序員介紹編程?

jopen 9年前發布 | 6K 次閱讀 程序員

學習Java,他們都說很easy。

作為一名剛從斯康星大學麥迪遜分校計算機科學系畢業的大學生,我通過一些編程課程認識了很多使用Java的朋友。現在很多學校都在從別的編程語言 (大多是C ++)轉教Java,一項于2014年7月所做的研究表面截至調查時間為止,39個頂級美國CS項目已經有22個使用Java作為入門課程。

那么,到底是什么使得Java能從眾多的教學語言中脫穎而出?縱觀各個方面,我們發現了一些蛛絲馬跡:

  • 語法相對比較簡單(相較于C語言和C++),難點較少(還是相較于C語言和C++)。語法越簡單就意味著新手需要掌握的規律就越少,這對新手而言絕對不亞于一個福音。
  • Java相較于一些傳統的教學選擇,如C和C++,比較不容易出錯,因為很多操作都會自動檢查。如果你想要訪問的數組超出了其界限或者使用空對象 產生了異常,那程序就會通過漂亮的堆棧跟蹤告訴你出了什么錯誤,哪里出了問題(直接將范圍縮小到造成這個問題的源文件中)。與此相比,C語言和C++,如 果訪問了空指針,那么程序就像炸彈一樣毫無預警地爆炸,絲毫不留給你任何有用的提示信息(除非你是在調試器中運行,所以我們必須學會使用調試器,以防萬 一)。而要是C語言和C++的數組越界的話,那就更悲劇了,因為在很多例子中,甚至會有內存中數組元素值莫名其妙被改寫的情況。然后你只能面對著這個崩潰 的程序,目瞪口呆、完全束手無策。這絕對是分分鐘逼瘋一個程序員的節奏!
  • 有了垃圾回收器就意味著你并不需要親自來管理內存。用new關鍵字創建對象之后,那它將永遠保留在內存中(只要有任意一個地方引用即可)。而且使用完這個對象后,垃圾回收器就會為你清理掉這個對象。
  • Java在行業中的應用非常廣泛,因此,從理論上講,我們在學校里學到的知識可以直接轉化成真正的工作。TIOBE編程指標將它列為第二門最為常用的編程語言。無論你是否同意TIOBE的準確分析,但是你不得不贊同Java被廣泛使用的這個現狀。
  • Java是面向對象的。你可以創建包含數據的對象,然后編寫方法用來描述作用于這些數據的行為。

上面這些聽上去真美!但是卻并不完整。

迂回策略

幾乎所有的程序員編寫的任何語言的第一個程序都是“Hello World”。它所做的就是顯示一些消息(傳統上都會選擇“Hello World”),然后退出,非常簡單。下面是用Java寫的Hello World程序:

public class Hello {
public static void main(String[] args) {
System.out.println("hello, world");
}
}

一些對于編程全然陌生的人就會心有疑問了 ,然后這時候如果你是老師的話,嘿嘿,麻煩就來了。想要一下子就能將所有內容通通解釋給學生聽,可能會成為壓垮駱駝的稻草,所以,你最好采取迂回策略。
“請問,public是什么意思?”——現在沒必要考慮這些,以后我們會深入探討。
“class是什么?”——現在沒必要考慮這些,以后我們會深入探討。
“static是什么意思?”——現在沒必要考慮這些,以后我們會深入探討。
……等等,都可以這么說。

但是值得一提的是,無論是教什么內容,我們都應該將其分解成一塊塊容易消化理解的組成部分。封裝(public關鍵字)、面向對象的編程 (class和static)、數組(String[ ])以及命令行參數(args)這些重要的知識都應該適時地解釋給學生。當然,對于那些尚處于編程啟蒙階段的新生來說,要想一口吃成個大胖子未免太過于天 方夜譚了。我認識的很多朋友,他們在其他領域絕對算個佼佼者,但是碰到這些編程概念問題也立馬一個頭兩個大。就像是在代數中突然引入這個:

如何向新手程序員介紹編程?

一旦我們知道了這些符號的含義,那么理解起來似乎也沒有那么困難。但是對那些才涉足這一領域的新生來說,這完全不亞于是無字天書啊。再則,迂回策略 雖然鼓勵了學生使他們不至于立馬泄氣,但是從另一個角度講,卻只是表面化地展示某種“神奇”成果,并沒有分析解釋其原理。但是我想說,如果你想成長為一名 真正的教師,這種方法與你的理念應該是背道而馳、截然相反的。例如Hello World這個例子,

  • Java嚴格面向對象,并要求每一個函數(或“方法”,在Java中的說法)被放置在一個類中。如果你還沒閱讀過Execution in the Kingdom of Nouns這 篇優秀文章,那我強烈推薦你去讀一下。它的主要內容可以概括為,“倡導面向對象的編程就像是為客人量身定制服裝一樣”。向那些對if語句和for循環這些 概念還是一團漿糊的新生解釋面向對象的設計原則,絕對是個糟糕的“調用”。要著眼于將工作分解為一個一個可以寫成函數的小片段,然后我們再回過頭來講什么 是OOP。
  • Java規定,所有的對象都是以堆的形式分配的,所以所有的對象變量都是指針。現在你需要解釋的是值和引用之間的差異,就像為什么int、 boolean、float在賦值和比較時與strings的行為就是有所不同。類似于這些衍生出來的問題共同組成了一個一致性的解釋工作原理的心智模式 ——作為程序員這個是必備——但是其過程異常艱巨。

Java對于開發程序(無論大小范圍)而言或許真心是門超棒的編程語言,但是對于初學者而言這家伙絕對算不上友好。

那么我們應該教什么語言呢?

既然如此,那有人會問,那我一開始先學點簡單的概念,然后在這些的基礎上再深入學習Java,不就成了?!但是很抱歉,Java表示臣妾做不到!

那么我們該怎么做呢?下面這兩種合情合理的開啟編程之路的方法或許能讓你有一種醍醐灌頂之感:

  • 低水平的起始點,然后一步步提升難度。教你如何使用計算機,這樣你就可以直接用C語言寫一些簡單的程序。然后再在這個基礎上,構建更高層次的計算機科學結構體系。
  • 高水平的起始點,然后再一步步降低難度。先教授計算機科學的理論和一種編程語言,這種編程語言得非常容易實現,并且毋須擔心底層機器的細節,例如 Python,在這里就是一個挺不錯的選擇,因為它不受正面加載Java需求的影響。然后再分解計算機是如何一步步實現這些理論的。

現在,第2個方法變得越來越風靡,從本文開篇提及的研究——Python已經超越Java成為了使用最廣的編程入門語言這一事實——可見一斑。

無論你選擇哪種方法,關鍵是要保持學生對此的興趣。如果你選擇的是低水平起始點的方法,可以使用Arduino或機器人技術套件,以便于學生可以在 物理世界中觀看他們寫的代碼。話說,我剛一開始用C語言為一支機器人團隊編寫代碼,我就被這個奇幻的世界深深地迷住了:看著120磅的鋼管和轉動馬達因為 我寫的代碼而動起來的時候,那感覺真心是太神奇、太不可思議了。如果你選擇的是高水平起始點的方法的話,不妨利用庫中資源來制作視頻游戲或者其他圖形程 序。

如何向新手程序員介紹編程?

編程特別的不可思議。除了你的想象力還有表達能力,其他沒有別的東西可以限制你。找到學生的興趣切入點,寓教于樂,從易到難,循序漸進,教會他們如何使用工具,授之以魚不如授之以漁,讓他們在編程的世界中自由瘋狂地成長。

譯文鏈接:http://www.codeceo.com/article/introduce-programming.html
英文原文:How should you introduce people to programming?
翻譯作者:碼農網 – 小峰

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!