首頁  >  文章  >  Java  >  如何向新手程式設計師介紹程式設計?

如何向新手程式設計師介紹程式設計?

伊谢尔伦
伊谢尔伦原創
2016-11-26 10:50:441054瀏覽

學習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磅的鋼管和轉動馬達因為我寫的程式碼而動起來的時候,那感覺真心是太神奇、太不可思議了。如果你選擇的是高水準起始點的方法的話,不妨利用庫中資源來製作視頻遊戲或其他圖形程式。

如何向新手程式設計師介紹程式設計?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn