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

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

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

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編程

但你得認可,做爲一個新手,你徹底能夠理解上面的代碼在作什麼。ruby

數年之後,我經過學習一系列的語言,掌握了「現代的」編程方法,包括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/

相關文章
相關標籤/搜索