現(xiàn)在,計算機已經(jīng)融入到了我們生活的方方面面,手機、電腦、智能家居等。在計算機變得如此普遍的今天,是不是每個人都應(yīng)該學(xué)習(xí)一點編程呢?
2013年,非營利性組織 Code.org 發(fā)起了“Hour of Code”的倡議,得到了很多著名人物和企業(yè)的支持(Is Computer Programming Hard to Learn ?),其中包括扎克伯格、比爾蓋茨、蘋果、谷歌,就連美國總統(tǒng)奧巴馬都發(fā)布視頻呼吁每個美國公民都學(xué)習(xí)編程。
李笑來老師建議必備的兩個技能——英語和編程?!案淖冏约骸钡妮x哥(張輝)也在文章中提到過自己利用 python 寫了一個群發(fā)郵件的腳本。
所以,這么多名人,牛人都呼吁大家學(xué)習(xí)編程,那么普通人學(xué)習(xí)編程到底有什么用?
普通人學(xué)編程有什么用?
主要有如下理由:
- 教會我們思考
- 提高效率,使生活、工作變得簡單
- 生活基本技能
編程教會如何思考

喬布斯在一次采訪中說過:
Everyone should know how to program a computer, because it teaches you how to think.
因為程序就是對現(xiàn)實事物的抽象,而且,按照寫好的邏輯運行。所以,編程能夠鍛煉我們的抽象思維能力和邏輯思維能力。
編程能提升效率
李笑來老師在《把時間當(dāng)做朋友》中提到過:
學(xué)習(xí)班之后的歲月里,擺弄計算機給我?guī)砹藷o數(shù)心靈愉悅,這些暫 且不論,只說一件事——在編寫《TOEFL核心詞匯21天突破》的過程中,倘若我沒有稍多于常人的那點計算機知識,能自己編寫一些批處理腳本,就不可能在那么短的時間里完成那樣海量的工作。而且,如果沒有這些技能,就算再花幾倍的時間,也很難拿出具有與《TOEFL核心詞匯21天突破》同樣的質(zhì)量的作品。而最終,質(zhì)量保證了銷量。
通過編程,我們能夠很容易的處理大量重復(fù)性、低效率的工作,從而節(jié)省時間。而工作中很多地方都用到了編程來提高生產(chǎn)力,比如 Excel 中的宏,很多 Adobe 的產(chǎn)品(如 Photoshop, Illustrator, After Effects)都能使用 JavaScrpt 來自動化工作。如果你學(xué)習(xí)編程,就能使你的工作做的又快又好。
編程是基本技能
正如 Quora 問題 Should most young people learn to code? 中回答的那樣:
- 你會做飯,但你不是廚師
- 你會開車,但你不是司機
- 你會清理屋子,但你不是保潔阿姨
- 你會疏通馬桶,但你不是水管工人
所以說,不一定你非要是程序員,你才會編程。在計算機使用越來越廣泛的今天,編程已經(jīng)成為了一項基本技能。
如果你不會編程,你就只能使用別人提供的功能。就好像你不會做飯,就只能下館子一樣,但是這樣就不能很好的滿足你對于健康、熱量、營養(yǎng)的要求。
所以,學(xué)習(xí)編程更多的是滿足我們私人訂制化的需求。比如,今天我遇到一個使用 Excel 處理大量數(shù)據(jù)的需求。但是,我不會編程,可能就只能買別人開發(fā)好的腳本,或者自己花大量時間做大量重復(fù)性的工作。但是,如果你會編程,你就可以自己寫一個腳本,最后可能快速、優(yōu)雅的解決了問題。
而且,可以預(yù)見的是:在將來,計算機肯定會運用的越來越廣泛,對我們生活的侵入越來越深。而會編程的人只是一小部分,那么我們的生活就完全掌握在了那一小部分會編程的人手中了。所以,學(xué)習(xí)編程,能夠讓我感到自由。

普通人如何學(xué)習(xí)編程
現(xiàn)在,如果你覺得有必要學(xué)習(xí)一下編程,那么,我們就來討論下——普通人如何學(xué)習(xí)編程?
為了解決具體問題而編程
最重要的一點:為了解決具體問題而編程。很多人會在學(xué)了幾個月編程后,感覺并沒有學(xué)到什么,這就是因為你并沒有從中找到成就感。當(dāng)你通過學(xué)習(xí)編程解決了自己具體的問題后就會感到巨大的成就感,比如我為了解決每天部署繁瑣的過程,學(xué)習(xí)了 shell 腳本,只需要一個腳本就能部署了,這就給了我很大的正向反饋。而且當(dāng)你為了某個具體問題而學(xué)習(xí)編程的時候,你就會知道,那些知識對我解決問題有用,那些可以暫時不學(xué)。編程需要學(xué)習(xí)的東西很多,所以必須做出取舍。
當(dāng)并無具體的需求時,如果有興趣,那也行。如果沒有興趣,只是覺得應(yīng)該學(xué)習(xí)編程而編程的話。我建議你在學(xué)習(xí)了基本的知識以后(比如了解了這門語言能實現(xiàn)什么功能),給自己找一個目標(biāo)(比如搭建一個個人網(wǎng)站,抓取某個頁面的圖片),然后實現(xiàn)它。有了目標(biāo)再學(xué)習(xí),效果會好很多。
使用Google和英文
為什么這兩個東西如此重要呢?
第一、技術(shù)很多都起源于美國和歐洲,所以幾乎所有技術(shù)的官方網(wǎng)站都是英文的。而學(xué)技術(shù)要學(xué)會使用官方文檔,當(dāng)然也是英文的。當(dāng)然你也可以看翻譯過來的資料,但是畢竟是翻譯過一次的,所以很依賴于譯者翻譯水平的高低,而且這是已經(jīng)被人理解過的二手的資料了。
第二、學(xué)會使用 Google 為什么也成為了必要。在你學(xué)習(xí),開發(fā)的過程中會遇到很多的問題,這個時候會經(jīng)常用到搜索工具。在編程領(lǐng)域,英文資源比中文資源多了不是一星半點。比如 stackoverflow(一個編程的問答網(wǎng)站)幾乎包括了你學(xué)習(xí)編程時會遇到的各種問題的答案,以為這些問題很早以前就有人遇到過了。所以,遇到編程問題時,記得使用英文在 Google 上搜索答案。
第三、學(xué)會如何提問,必看的文章是:《提問的智慧》。建議把這篇長文看完再提問。
找到合適的學(xué)習(xí)資源
編程可能是最適合自學(xué)的科目了,因為有大量的資源(書籍、視頻、教程)可以選擇。那么如何在海量的資源中選擇適合自己的呢?
首先,我認(rèn)為資源分為兩類——書籍和視頻。如果你喜歡看書,那就找一本好書,如果喜歡視頻,那就找好視頻。那么如何區(qū)分好書和好視頻呢——提問,你可以使用搜索引擎,詢問身邊的朋友。而且,一定要找與自己當(dāng)前階段契合的書籍和視頻教程,并不是所有的書籍都適合初學(xué)者,所以一定要注意選擇。最后,一定要看該語言最權(quán)威的書籍,肯定不會讓你失望。
再者,要學(xué)會看官方文檔,學(xué)會查官方手冊。教程和手冊的區(qū)別在于:
- 教程:教你如何使用這門語言,可能很多東西不會提及
- 手冊:提供完整、全面的有關(guān)這門語言的信息(很多時候就是 API 手冊)
學(xué)習(xí)的時候我們看教程,但是有了一定基礎(chǔ)只有,要學(xué)會看官方的手冊。因為手冊包含了這門技術(shù)的方方面面,有一個完整的知識體系。它包含對這門語言原理的介紹,官方推薦的用法,API文檔等,所以一定要學(xué)會看官方文檔。
多練習(xí),多討論
古典老師提到學(xué)習(xí)的721法則,我覺得就很適合編程的學(xué)習(xí):
- 10%的時間自己學(xué)習(xí)
- 20%的時間與人溝通討論
- 70%的時間去練習(xí)實踐
編程是很需要練習(xí)的科目,看再多的書還不如在電腦上運行一次來的實在。學(xué)習(xí)編程要做到每天寫代碼,代碼運行起來之后,可以極大的加深你對知識的理解。
還有就是要多討論,多看別人的代碼。討論能夠讓人的思想碰撞,產(chǎn)生意想不到的火花。比如你思考一個問題的解決方案很久了,但是還是沒有頭緒,但是可能別人的一句話可能就會點醒你,這在編程上很常見。而且,通過看別人的代碼我們可以學(xué)習(xí)更好的實現(xiàn)方法,更優(yōu)的解決問題的邏輯,特別是牛人的代碼。
編程語言的選擇
雖然最終都是在計算機上運行的指令,但是還是有很多語言我們可以選擇,不同的語言可以實現(xiàn)不同的功能,那么普通人如何選擇語言呢?
選擇什么語言還是需要看你具體的需求是什么。如果你平時使用 office 比較多,那么可以學(xué)習(xí) VBA。如果你需要自動化很多重復(fù)的工作,那么你可以學(xué)習(xí) Python。如果你想要建造自己的個人網(wǎng)站,那么你需要學(xué)習(xí) Javascript、Html 和 Css。如果你沒有具體的需求,那么我建議你學(xué)習(xí) Python,因為它很容易讓你感到提高了生產(chǎn)力。
學(xué)習(xí)資源
- 慕課網(wǎng):國內(nèi)最大的IT技能學(xué)習(xí)平臺
- Codecademy:英文IT學(xué)習(xí)平臺
- Python:Python初學(xué)者(零基礎(chǔ)學(xué)習(xí)Python、Python入門)書籍、視頻、資料、社區(qū)推薦
- Javascript&Html&Css:結(jié)合個人經(jīng)歷總結(jié)的前端入門方法