普通人如何學習編程
Acherie
現在,計算機已經融入到了我們生活的方方面面,手機、電腦、智能家居等。在計算機變得如此普遍的今天,是不是每個人都應該學習壹點編程呢?
2013年,非營利性組織?Code.org?發起了“Hour of Code”的倡議,得到了很多著名人物和企業的支持(Is Computer Programming Hard to Learn ?),其中包括紮克伯格、比爾蓋茨、蘋果、谷歌,就連美國總統奧巴馬都發布視頻呼籲每個美國公民都學習編程。
李笑來老師建議必備的兩個技能——英語和編程。“改變自己”的輝哥(張輝)也在文章中提到過自己利用 python 寫了壹個群發郵件的腳本。
所以,這麽多名人,牛人都呼籲大家學習編程,那麽普通人學習編程到底有什麽用?
普通人學編程有什麽用?
主要有如下理由:
教會我們思考
提高效率,使生活、工作變得簡單
生活基本技能
編程教會如何思考
喬布斯在壹次采訪中說過:
Everyone should know how to program a computer, because it teaches you how to think.
因為程序就是對現實事物的抽象,而且,按照寫好的邏輯運行。所以,編程能夠鍛煉我們的抽象思維能力和邏輯思維能力。
編程能提升效率
李笑來老師在《把時間當做朋友》中提到過:
學習班之後的歲月裏,擺弄計算機給我帶來了無數心靈愉悅,這些暫 且不論,只說壹件事——在編寫《TOEFL核心詞匯21天突破》的過程中,倘若我沒有稍多於常人的那點計算機知識,能自己編寫壹些批處理腳本,就不可能在那麽短的時間裏完成那樣海量的工作。而且,如果沒有這些技能,就算再花幾倍的時間,也很難拿出具有與《TOEFL核心詞匯21天突破》同樣的質量的作品。而最終,質量保證了銷量。
通過編程,我們能夠很容易的處理大量重復性、低效率的工作,從而節省時間。而工作中很多地方都用到了編程來提高生產力,比如 Excel 中的宏,很多 Adobe 的產品(如 Photoshop, Illustrator, After Effects)都能使用 JavaScrpt 來自動化工作。如果妳學習編程,就能使妳的工作做的又快又好。
編程是基本技能
正如 Quora 問題?Should most young people learn to code?中回答的那樣:
妳會做飯,但妳不是廚師
妳會開車,但妳不是司機
妳會清理屋子,但妳不是保潔阿姨
妳會疏通馬桶,但妳不是水管工人
所以說,不壹定妳非要是程序員,妳才會編程。在計算機使用越來越廣泛的今天,編程已經成為了壹項基本技能。
如果妳不會編程,妳就只能使用別人提供的功能。就好像妳不會做飯,就只能下館子壹樣,但是這樣就不能很好的滿足妳對於健康、熱量、營養的要求。
所以,學習編程更多的是滿足我們私人訂制化的需求。比如,今天我遇到壹個使用 Excel 處理大量數據的需求。但是,我不會編程,可能就只能買別人開發好的腳本,或者自己花大量時間做大量重復性的工作。但是,如果妳會編程,妳就可以自己寫壹個腳本,最後可能快速、優雅的解決了問題。
而且,可以預見的是:在將來,計算機肯定會運用的越來越廣泛,對我們生活的侵入越來越深。而會編程的人只是壹小部分,那麽我們的生活就完全掌握在了那壹小部分會編程的人手中了。所以,學習編程,能夠讓我感到自由。
普通人如何學習編程
現在,如果妳覺得有必要學習壹下編程,那麽,我們就來討論下——普通人如何學習編程?
為了解決具體問題而編程
最重要的壹點:為了解決具體問題而編程。很多人會在學了幾個月編程後,感覺並沒有學到什麽,這就是因為妳並沒有從中找到成就感。當妳通過學習編程解決了自己具體的問題後就會感到巨大的成就感,比如我為了解決每天部署繁瑣的過程,學習了 shell 腳本,只需要壹個腳本就能部署了,這就給了我很大的正向反饋。而且當妳為了某個具體問題而學習編程的時候,妳就會知道,那些知識對我解決問題有用,那些可以暫時不學。編程需要學習的東西很多,所以必須做出取舍。
當並無具體的需求時,如果有興趣,那也行。如果沒有興趣,只是覺得應該學習編程而編程的話。我建議妳在學習了基本的知識以後(比如了解了這門語言能實現什麽功能),給自己找壹個目標(比如搭建壹個個人網站,抓取某個頁面的圖片),然後實現它。有了目標再學習,效果會好很多。
使用Google和英文
為什麽這兩個東西如此重要呢?
第壹、技術很多都起源於美國和歐洲,所以幾乎所有技術的官方網站都是英文的。而學技術要學會使用官方文檔,當然也是英文的。當然妳也可以看翻譯過來的資料,但是畢竟是翻譯過壹次的,所以很依賴於譯者翻譯水平的高低,而且這是已經被人理解過的二手的資料了。
第二、學會使用 Google 為什麽也成為了必要。在妳學習,開發的過程中會遇到很多的問題,這個時候會經常用到搜索工具。在編程領域,英文資源比中文資源多了不是壹星半點。比如 stackoverflow(壹個編程的問答網站)幾乎包括了妳學習編程時會遇到的各種問題的答案,以為這些問題很早以前就有人遇到過了。所以,遇到編程問題時,記得使用英文在 Google 上搜索答案。
第三、學會如何提問,必看的文章是:《提問的智慧》。建議把這篇長文看完再提問。
找到合適的學習資源
編程可能是最適合自學的科目了,因為有大量的資源(書籍、視頻、教程)可以選擇。那麽如何在海量的資源中選擇適合自己的呢?
首先,我認為資源分為兩類——書籍和視頻。如果妳喜歡看書,那就找壹本好書,如果喜歡視頻,那就找好視頻。那麽如何區分好書和好視頻呢——提問,妳可以使用搜索引擎,詢問身邊的朋友。而且,壹定要找與自己當前階段契合的書籍和視頻教程,並不是所有的書籍都適合初學者,所以壹定要註意選擇。最後,壹定要看該語言最權威的書籍,肯定不會讓妳失望。
再者,要學會看官方文檔,學會查官方手冊。教程和手冊的區別在於:
教程:教妳如何使用這門語言,可能很多東西不會提及
手冊:提供完整、全面的有關這門語言的信息(很多時候就是 API 手冊)
學習的時候我們看教程,但是有了壹定基礎只有,要學會看官方的手冊。因為手冊包含了這門技術的方方面面,有壹個完整的知識體系。它包含對這門語言原理的介紹,官方推薦的用法,API文檔等,所以壹定要學會看官方文檔。
多練習,多討論
古典老師提到學習的721法則,我覺得就很適合編程的學習:
10%的時間自己學習
20%的時間與人溝通討論
70%的時間去練習實踐
編程是很需要練習的科目,看再多的書還不如在電腦上運行壹次來的實在。學習編程要做到每天寫代碼,代碼運行起來之後,可以極大的加深妳對知識的理解。
還有就是要多討論,多看別人的代碼。討論能夠讓人的思想碰撞,產生意想不到的火花。比如妳思考壹個問題的解決方案很久了,但是還是沒有頭緒,但是可能別人的壹句話可能就會點醒妳,這在編程上很常見。而且,通過看別人的代碼我們可以學習更好的實現方法,更優的解決問題的邏輯,特別是牛人的代碼。
編程語言的選擇
雖然最終都是在計算機上運行的指令,但是還是有很多語言我們可以選擇,不同的語言可以實現不同的功能,那麽普通人如何選擇語言呢?
選擇什麽語言還是需要看妳具體的需求是什麽。如果妳平時使用 office 比較多,那麽可以學習?VBA。如果妳需要自動化很多重復的工作,那麽妳可以學習?Python。如果妳想要建造自己的個人網站,那麽妳需要學習?Javascript、Html?和?Css。如果妳沒有具體的需求,那麽我建議妳學習?Python,因為它很容易讓妳感到提高了生產力。