中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

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

2018-07-20    來源:編程學(xué)習(xí)網(wǎng)

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

學(xué)習(xí)Java,他們都說很easy。

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

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

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

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

迂回策略

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

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

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

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

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

  • Java嚴(yán)格面向?qū)ο,并要求每一個函數(shù)(或“方法”,在Java中的說法)被放置在一個類中。如果你還沒閱讀過Execution in the Kingdom of Nouns這篇優(yōu)秀文章,那我強烈推薦你去讀一下。它的主要內(nèi)容可以概括為,“倡導(dǎo)面向?qū)ο蟮木幊叹拖袷菫榭腿肆可矶ㄖ品b一樣”。向那些對if語句和for循環(huán)這些概念還是一團漿糊的新生解釋面向?qū)ο蟮脑O(shè)計原則,絕對是個糟糕的“調(diào)用”。要著眼于將工作分解為一個一個可以寫成函數(shù)的小片段,然后我們再回過頭來講什么是OOP。
  • Java規(guī)定,所有的對象都是以堆的形式分配的,所以所有的對象變量都是指針,F(xiàn)在你需要解釋的是值和引用之間的差異,就像為什么int、boolean、float在賦值和比較時與strings的行為就是有所不同。類似于這些衍生出來的問題共同組成了一個一致性的解釋工作原理的心智模式——作為程序員這個是必備——但是其過程異常艱巨。

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

那么我們應(yīng)該教什么語言呢?

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

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

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

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

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

編程特別的不可思議。除了你的想象力還有表達能力,其他沒有別的東西可以限制你。找到學(xué)生的興趣切入點,寓教于樂,從易到難,循序漸進,教會他們?nèi)绾问褂霉ぞ,授之以魚不如授之以漁,讓他們在編程的世界中自由瘋狂地成長。

標(biāo)簽: 代碼

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:軟件開發(fā)中需要克服的8個壞習(xí)慣

下一篇:敢為你最寵愛的編程語言賭100000000美元嗎?