最適合初學者的語言是什麼?

OneAPM官方技術部落格發表於2016-06-13

【編者按】本文作者為 Chris Ward,主要分享了 Chris 在多年的程式設計教學中,積累下的一些經驗教訓,以及在他眼中,新手學習語言時的注意事項。文章系國內 ITOM 管理平臺 OneAPM 編譯呈現。

和許多我這個歲數的人一樣,我學程式設計是從BASIC語言開始的。那時候,你會買很多雜誌回家,雜誌上有整篇整篇的程式碼,教你編遊戲,或者是一些基礎的應用程式–你和朋友們花了好幾個小時勤勤懇懇地把那些都敲進電腦裡,結果卻發現這兒或那兒有一個印刷錯誤,反正遊戲就是執行不了。於是你們只好作罷。其實這件事最大的意義就是能和朋友一起玩兒,而爸媽還覺得你是在學習呢。

BASIC語言是有缺陷,但我喜歡它雖然羅嗦,卻很清晰。這也是為什麼用它來實現任何功能,都得花上很長的篇幅。 現在釋出的這些語言幾乎都沒有這麼“棒”的語法了(包括強制必須給出行數)。

5 LET S = 0 
10 MAT INPUT V 
20 LET N = NUM 
30 IF N = 0 THEN 99 
40 FOR I = 1 TO N 
45 LET S = S + V(I) 
50 NEXT I 
60 PRINT S/N 
70 GO TO 5 
99 END

(感謝Wikipedia

但你得承認,作為一個新手,你完全可以理解上面的程式碼在做什麼。

數年以後,我通過學習一系列的語言,掌握了“現代的”程式設計方法,包括PHP、Lingo、C++、Visual Basic、以及Java。我肯定學習了物件導向程式語言,但多數時候我覺得它們還是程式導向的。有很多年,我一直在用Drupal,但這一點也沒用,Drupal直到版本8開始才有真正的OOP(物件導向)概念。

時光快進到現在,也是我為什麼寫這篇文章的部分原因。在過去的幾個月裡,我都一直在教柏林的敘利亞難民們程式設計,我們選擇的語言是Ruby(以及Rails)。

是否適合教新手學Ruby?

暫且不說近年來,越來越多的程式設計師棄Ruby而去(這是另一碼事)。我們(老師們)也不確定是否應該選Ruby。整個Ruby社群的人都非常贊成和歡迎別人的加入。因為他們的支援,加上自身的堅持不懈,也有不少人真的學成了。

然而,我們注意到Ruby能夠吸引經驗豐富的程式設計師的地方,對新手來說恰恰是令人迷惑和困擾的。我寫這篇文章的本意並不是把它做成一篇“Ruby抨擊論”。我喜歡Ruby,它的這些問題在其他的語言中也存在。不過最近教新手的經驗,剛好給了我實際的例子來說明我的觀點。我也承認,這當中有一些問題可能是因為我教授的順序有誤,或者忘了給他們講解那些有經驗的程式設計師們做過的一些任務,至少當時忘了講。

快捷工具

程式設計師都有點懶 – 或者更準確地說,我們希望可以不要重複地一直敲同樣的樣板程式碼,而是把注意力放在專案中重要且獨特的地方。Rails的腳手架剛(scaffold)好可以實現這一點,通過少量的命令,你就可以搭建好一個MVC應用程式的基礎。

但是對於新手來說,這些工具卻並不好懂。新手們無法理解剛剛被建立的東西是什麼,為什麼要建立這些,這些東西應該放在哪裡,怎麼放?

快捷語法

對一個有經驗的程式設計師來說,寫這段程式碼

(0..100).each {
  print i
}

比寫這段

var i;
for (i=0;i<100;i++) {
  print i;
}

當然更快捷、更有意義。事實上,這的確更有效率:不需要初始化一個變數,或是寫這種全用分號隔開的恐怖語法。但是從新手的角度來思考呢?以Ruby為例,新手可以理解的為數不多的詞只有eachprint。其他的有什麼用?我並不是說,初學者就無法掌握這些概念,只是說在某種程度上,第二段程式碼實際上更加清晰,更容易讓學生理解究竟發生了什麼。

“隨心所欲”的語言

一度曾有這樣一種趨勢:程式設計師們可以隨心所欲寫語言–而不用考慮變數型別等等。這種趨勢的名氣現在已經大不如前了–至少可以說,越來越多的更加嚴謹的語言出現了。它們的速度和效率的確更高一籌,但我在想這是不是也是風頭轉變的又一佐證。需要你遵循一定步驟的語言,可能會花費你更多的學習時間,但能做什麼不能做什麼往往要明確的多。

投入實際的工作

通常,我們願意讓學生接受一些最有用最“貼近實際”的概念,並且能儘早地開始實踐。當下的許多“編碼學習”程式都聚焦於讓參與者“可以開始工作”。我可以另寫一篇文章,闡述一下這些程式中的問題(我應該會去寫的),但總的來說,這些程式有可能讓學生過早地接觸到一些概念。下面是我根據最近的經驗,舉出的一些明顯的例子。

物件導向程式設計(OOP)

OOP是許多現代程式語言的基礎概念。但這個概念通常在剛介紹完基礎知識,如變數、邏輯和迴圈之後,就被直接扔給學生了。學生還沒完全理解程式究竟是怎樣的呢,就遇到了一堆難題。

OOP的概念在高階應用程式中更有用。而當我們編寫基本的程式時,基本無需用到OOP,它只會增加不必要的麻煩。通過對比,老師們可以給出一些術語和例子–如動物和車輛–但是基本沒有實際的必要與用途。

版本控制

版本控制也差不多。如果你是一個團隊的成員,在一個大專案中工作,總有常規改動的話,那麼版本控制是非常有用的。但如果你是一個人工作,或者是在一個小團隊中工作的話,版本控制的概念就過於複雜了。Git是個非常棒的工具,但是它的工作流程卻很糟糕–漏做一步會搞亂所有的東西,同時剛開始的那麼多次merge也是讓人非常頭暈的。

好吧 Chris,那麼你覺得我們應該怎麼做呢?

問得好。批評起來總是很容易的。而且誰說我就是對的呢?首先,我想告訴大家一兩個我在教學過程中發現的有用的小竅門,然後我想聽聽大家關於新手入門語言的反饋建議,及理由。

不做任何假設

我知道這話你已經聽過很多遍了。但我希望你可以試著再深入地瞭解一下。先來看看這個片段摘要:

如果你不做任何假設,那麼你也不會失去任何東西。

好吧,可能有時候還是會有所失去,但是並不多。在實際操作中,這意味著,你不應當假設有人聽說過你最喜歡的那個構建系統/語言/IDE/編輯器,或者假設任何人有著與你相同的經驗。即使你認為他們有,也不代表他們真的有。當然,如果你想先問問的話,那麼就去問問–但是記得要再確認一下。

在必要的情況下,人們通常願意接受重複。如果有些東西他們已經理解了,但是還得再聽一遍解釋,他們多半不太介意,也許在聽的過程中還能瞭解一些新的點呢。

背景

這對我來說是個重要的話題。程式設計師往往很擅長告訴你一個東西很炫酷,但是並不擅長闡述為什麼。當你在教學時,不要只告訴學生們這個東西更快、更好、更大,還要同時解釋為什麼這個東西對他們或者對你來說是個好選擇。學生們會比之前聽的更好,學的更好,記的更牢。

社群

儘管聽起來可能很矛盾,但是有一些語言(特別是Ruby和Python)有著非常強大的、試圖培養新手的社群。這些社群或者並不能真的讓語言變得更容易理解,但是堅持的人往往會發現社群可以幫助他們輕鬆地擴充套件知識量。最重要的是,社群越支援,就越能減少新手可能遭受的負面影響。

最適合學習的程式語言

這是你看本文的目的,我親愛的讀者!我希望你能告訴我,你認為什麼才是最容易學習和理解的語言呢?同時,也請告訴我你為什麼這樣想。如果你曾有過相關的教學經驗的話,都有哪些發現呢?

幾周後,我會收集相關的故事,寫一篇後續文章。文中我會(在新手的幫助下)平實地闡述這些語言真正的易用性,以及最佳的教授方法。

我知道你對於我的這篇文章一定也有一些意見,這很好。請和我們分享你的觀點吧!請儘量提一些有建設性的意見,並儘量從新手的角度出發。謝謝!

本文系 OneAPM 工程師整理呈現。OneAPM 能為您提供端到端的應用效能解決方案,我們支援所有常見的框架及應用伺服器,助您快速發現系統瓶頸,定位異常根本原因。分鐘級部署,即刻體驗,效能監控從來沒有如此簡單。想閱讀更多技術文章,請訪問 OneAPM 官方技術部落格

本文轉自 OneAPM 官方部落格

原文地址:https://www.sitepoint.com/teaching-programming-whats-the-best-language-for-beginners/

相關文章