天天看點

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

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

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

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

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

程式員都有點懶 – 或者更準确地說,我們希望可以不要重複地一直敲同樣的樣闆代碼,而是把注意力放在項目中重要且獨特的地方。rails的腳手架剛(scaffold)好可以實作這一點,通過少量的指令,你就可以搭建好一個mvc應用程式的基礎。

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

對一個有經驗的程式員來說,寫這段代碼

比寫這段

當然更快捷、更有意義。事實上,這的确更有效率:不需要初始化一個變量,或是寫這種全用分号隔開的恐怖文法。但是從新手的角度來思考呢?以ruby為例,新手可以了解的為數不多的詞隻有<code>each</code>和<code>print</code>。其他的有什麼用?我并不是說,初學者就無法掌握這些概念,隻是說在某種程度上,第二段代碼實際上更加清晰,更容易讓學生了解究竟發生了什麼。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

繼續閱讀