如何教新人編程:授人以漁(可他要是釣到河豚會死的)
我們來談?wù)勅绾谓绦氯司幊?。在各種編程語言的郵件群和用戶小組中我經(jīng)常看見一句諺語。每個(gè)人都知道這句話,這篇文章的標(biāo)題就是它的后半部分。
授人以魚不如授人以漁
當(dāng)有人問有哪些學(xué)習(xí)編程的資源的時(shí)候,其他人經(jīng)常會這么抱怨。Python群里有人這么說;PHP群里有人這么說,JavaScript群里有人這 么說;幾乎我加的每個(gè)群都有人這么說。大家的意思是說:新人應(yīng)該自己去尋找學(xué)習(xí)資源,而不是去麻煩前輩。為什么這些菜鳥不能自行Google呢?搜索結(jié)果 頭條明顯就是***的學(xué)習(xí)資源嘛,因?yàn)轭^條被推薦的次數(shù)最多啊。
恭喜你,你教會別人如何把魚線投到水里了,但是你還沒教他哪種魚可以吃,哪種魚不可以吃呢。在編程教育的世界里,“大多數(shù)”的魚都不能吃。
舉個(gè)例子,當(dāng)你搜索和PHP相關(guān)的東西時(shí),搜索結(jié)果的首頁總會出現(xiàn)W3Schools。這個(gè)網(wǎng)站看著很權(quán)威,有各種各樣的教程,而且一搜就是它!很可惜這是條毒魚。
我們來接著簡單談?wù)勆弦粋€(gè)問題:PHP,這個(gè)被人廣為詬病的編程語言驅(qū)動(dòng)著這世界上大多數(shù)網(wǎng)頁。PHP絕對不是沒有問題的。我今天不會在這篇文章里 為它平反(我以前干過這事兒),但其實(shí)PHP***的問題是如何學(xué)習(xí)它。它是一個(gè)非常流行的語言,它拼命地想讓新手能夠很容易地學(xué)會它。在20年里,它從一 個(gè)簡單的腳本語言發(fā)展成了連資產(chǎn)上十億的大公司都用的強(qiáng)力工具。在成長過程中,它遭遇了足夠多的各種困難,其中很多都和不良的設(shè)計(jì)方案有關(guān)。
現(xiàn)今的PHP有很多優(yōu)點(diǎn),但不幸的是這些優(yōu)點(diǎn)對新手來說并不那么容易理解。它們是基于多年編程理論的高層概念。PHP仍然支持很多過去那些純真年代 時(shí)的基礎(chǔ)理念,它們用來做夫妻店這種小型網(wǎng)站足夠了,但是上升到大公司這種規(guī)模就不夠用了。簡而言之,它們不安全,效率低,甚至是“錯(cuò)的”。但同時(shí)它們?nèi)?易理解,而且好使。
W3schools上教的基本都是“錯(cuò)”的方式,這意味著把它作為學(xué)習(xí)資源的新手一開始學(xué)的就是不好的編碼規(guī)范,然后他們寫了更多不好的PHP代 碼,然后導(dǎo)致更多的人只能學(xué)到錯(cuò)誤的方法。這個(gè)癥結(jié)不是針對W3Schools的 – 幾乎所有的PHP教學(xué)資源都充斥著錯(cuò)誤但是簡單的解決問題的方法。這個(gè)癥結(jié)如此流行以至于我一時(shí)想不起來任何一個(gè)能讓我放心的PHP的教學(xué)資源。
如果你教一個(gè)人去“釣”學(xué)習(xí)資源,他會釣上來海里最糟糕的魚,然后你還得來收拾殘局。如果你遞給他頭幾條魚,然后給他講去哪兒能釣到更多好魚,那么你就成功了一半了。如果還能教他為什么不應(yīng)該釣其他那些不好的魚,那么他已經(jīng)走在成為編程界里積極而有成效的一員的路上了。
我們需要多思苦索究竟應(yīng)該如何對待正在學(xué)習(xí)的新手。就Python來說,給完全不會編程的新手,我推薦《Learn Python The Hard Way》,對已經(jīng)會了一兩門編程語言的人我推薦官方的python tutorial教程。這些簡單的資源解釋了如何正確使用這門語言。當(dāng)他們有了這樣的基礎(chǔ)知識之后,我會指給他們到哪里去找更多更好的信息。
下面的場景是我希望看見的。編程界的人們能團(tuán)結(jié)起來創(chuàng)造一些好的學(xué)習(xí)資源,而不是叫別人去鳥槍法一樣地“google一下”。教人編程的過程中,讓他們自己去找答案當(dāng)然是很重要的,但在放他們下山之前,你也必須教他們究竟應(yīng)該尋找什么樣的資源。
所以讓我們不要再教人釣到什么破魚都吃了,這樣也許我們就不需要再浪費(fèi)那么多時(shí)間來修復(fù)那些寫得不好的代碼了。
原文鏈接:http://blog.samuellevy.com/post/45-teach-a-man-to-fish-and-hell-die-when-he-catches-fugu.html