我是如何用10天自學編程,改變一生的?
我是霖哥,一個因興趣入行的商學院畢業(yè)的程序員。最近有不少人,來問我,想學編程,但是又不知怎么開始。所以,我想把我8年前影響我一生的10天自學編程的經(jīng)歷,毫無保留的分享出來。
如果看到這標題,會讓你覺得,讀完一篇文章就能快速的掌握編程技術的話,這可能會讓你失望,這里甚至沒有一行代碼。
霖哥想分享的,是霖哥最初自學編程的經(jīng)歷和心法。
1.決定
2009年初,一個潮濕、骯臟、背靠竹林的大學宿舍里,其中一張書桌,放著一臺與環(huán)境格調(diào)不一致的純白色的蘋果Macbook電腦。她是霖哥課余時間最好的朋友。
霖哥讀的是商學院金融專業(yè),在度過了逍遙放縱頹廢的半年大學一年級生活后,總覺得要學點什么技能,賺一點錢。
所以,霖哥做了一個現(xiàn)在看起來對人生產(chǎn)生重大影響的重要決定:
用10天!系統(tǒng)地學習一遍網(wǎng)站編程!
那一年霖哥19歲,卻有著如今看起來可笑的狂妄自大,總覺得在將來會跟別人活得不一樣。
現(xiàn)在回憶起來,當初的霖哥純粹只是一個電腦用得比別人好的學渣而已,也不知道當年進水的腦袋哪來的自信,真是too young too naive。
大學一年級的時候,雖然個人電腦已經(jīng)走入千家萬戶,但是創(chuàng)業(yè)、互聯(lián)網(wǎng),還沒有像今天那么吵的火熱朝天的,移動互聯(lián)網(wǎng)的概念還沒有形成。
計算機技術在外行人看起來更多還是技術的世界,沒有誰張口閉口就跟你聊融資、產(chǎn)品、市場、運營。
父母資助給霖哥買了一臺蘋果電腦,這在當時還算是一件難能可貴的事情。接近五位數(shù)的價格,拿到手這么一臺電腦,當時霖哥是有多感動啊,霖哥說:我以后絕逼不再玩游戲了,我要好好學習。
一臺不能玩游戲的破電腦,拿來干嘛?學習使用各種軟件或者學編程唄。
就這樣,萌生了系統(tǒng)地自學編程的想法。在商學院畢業(yè)前,也沒有經(jīng)過面試,霖哥卻糊里糊涂的,進入了一家老牌大型上市軟件公司(并且還是小時候曾經(jīng)那個憧憬向往的公司),成為了一名程序員。
這一切,都起源于2009年的那系統(tǒng)地自學編程的10天。
2.基礎
在講述那10天的自學編程經(jīng)歷前,得說明霖哥的電腦基礎。
幼兒園的時候接觸386計算機,會用MSDOS系統(tǒng)玩一個叫“波斯王子”、象棋的游戲;后來開始用Windows 3.0(從Dos那里敲段命令進入Windows,那時候還沒開始菜單),里面的軟件少得可憐。
小學一年級的時候,剛好分配到了計算機實驗班,學校會教一個叫“認知碼”的輸入法。輸入法也沒怎么學會,倒是學會了拼音快速打字的本領;
小學五年級的時候用Dreamweaver、Fireworks、Flash、Photoshop(網(wǎng)頁制作三劍客,三個軟件)做個人主頁,用FTP(文件傳送工具)上傳到虛擬主機做成網(wǎng)站;
之后幾年電腦游戲上癮,玩了好多年,一直沒有在技術上深究。直到高中后,開始折騰三個PHP開源程序,他們是Discuz、PHPWind和Wordpress,并且還運營了個PHPWind的校園社區(qū)。但是,并不懂得如何通過編程去開發(fā)一個Web產(chǎn)品,只大概知道了Web產(chǎn)品是怎么煉成的。
所以說,在大學正式系統(tǒng)地自學編程之前,霖哥是有不錯的電腦應用基礎的。
但是,那時候,霖哥還不太系統(tǒng)的了解編程,只知道計算機軟件程序,是由編程語言控制的;只知道編程語言里,有很多if(如果)、 for(循環(huán))等關鍵字,卻不太懂怎么去用它們做出一個軟件程序來。
3. 小目標
要決定自學編程,首先要定個小目標。
這非常重要!
很多計算機系畢業(yè)的本科大學生,你讓他們?nèi)プ鲆粋€簡單的H5頁面,他們都是做不出來的。
可能他們中的很多人的回答是,老師沒有教啊。
是的,國內(nèi)大學的計算機課程一般以C語言或Java語言基礎入門,然后開始學習數(shù)學、數(shù)據(jù)結(jié)構(gòu)、算法。確實很大一部分人,到畢業(yè)為止,都沒有教怎么做一張網(wǎng)頁。
所以有時候,程序員是一個相當專業(yè)化的職業(yè),搞后端的不懂前端,搞前端的不懂后端,搞蘋果的不會安卓,搞移動開發(fā)的不懂電腦開發(fā)。這是很正常的。
不論搞什么開發(fā),編程語言,僅僅起到最最最底層基礎的作用。
怎么理解呢?我們可以把不同平臺的軟件開發(fā),想象成不同交際語言的寫作:
- 讓你做一個蘋果iOS App,就像讓你用英語寫一篇文章:你不但要學習英語單詞,還要學習英語語法、英語句式、習慣用詞;
- 讓你做一個網(wǎng)頁,就像讓你用西班牙語寫一篇文章:你不但要學習西班牙語單詞,還要學習西班牙語文化、西班牙語語法、西班牙語音標......
- 比方說,Java語言,既可以開發(fā)Android程序,也可以做網(wǎng)站后臺開發(fā),那么,讓一個做安卓開發(fā)的Java程序員,立刻去做網(wǎng)站后臺開發(fā)行不行?
不行,兩者還有大量的開發(fā)條件和工具鏈是不一樣的。
因此,選擇一個小目標,自上而下的去思考和學習,就非常重要了......而我當時的小目標,做網(wǎng)頁——霖哥希望美化自己博客網(wǎng)站的界面(使用一個叫Wordpress的網(wǎng)站軟件搭建的博客)。
這個目標,足夠的小。我只需要學習HTML、CSS、PHP就足夠了。
這也是為什么霖哥要系統(tǒng)地學習編程的重要原因——達成這個小目標。
4.資料
那10天里,霖哥分別學習了什么?
霖哥學習了HTML、CSS、PHP、MySQL四種技術,籠統(tǒng)來說,這些都是開發(fā)一個網(wǎng)站的基本技能。
走進圖書館的計算機相關書架,你會發(fā)現(xiàn)很多計算機相關的書籍,都厚得嚇人,其中相當大的篇幅,是前言、理論和案例,讓初學者手足無措,無從入手。

上圖,隨便拍一張身邊的3本書,分別是700頁,500頁,300頁!太厚了,誰那么多時間看完!
對于一個什么都不懂的初學者來說,一上來就一堆理論,只會讓人一臉懵逼。
所以,對于想要學習編程的初學者來說,最好的學習方式是:少看,立刻動手。
我用的是什么學習資料? ?是時候祭出我的老師了——w3schools.com

(圖:w3schools.com 2017年的截圖,嘖,霖哥記得當年,這個頁面是紅色界面的。)
很遺憾,這個國外的英文教學網(wǎng)站,現(xiàn)在在國內(nèi)已經(jīng)不能訪問了。一個學習的好網(wǎng)站,居然被墻了,真的有點無奈。
不過,在很早之前,就有國內(nèi)的人把他抄襲了一遍: W3Schools,你可以使用它 。
不用懷疑,當初霖哥用的,就是純英文的老外版本。(詞典軟件忙個不停)
w3schools.com是一家專門Web開發(fā)的學習網(wǎng)站,它的特點就是:
少廢話、全干貨。
w3schools.com的教程中,幾乎沒有什么啰嗦理論。比如上圖里,簡單的一句介紹,HTML是用來做網(wǎng)站的,然后點擊開始教程了,迎面而來的,就是“實例”和“試一試”功能按鈕。
常見的編程語言入門書中,開頭一般花不少的篇幅介紹如何進行環(huán)境搭建。
比如學習C語言,光要讓一個Hello World跑起來,就需要廢很大的勁,安裝各種開發(fā)環(huán)境、編譯器,再學習用命令行編譯....
可能,幾個星期過去了,終于,才把一個Hello World打印到屏幕上.....
但是使用w3schools學習編程,什么都不需要安裝,只需要在“試一試”里,通過網(wǎng)頁瀏覽器,就能立刻體驗編程學習的結(jié)果。
而在里面,理論的表述,一般都是使用列表的形式的:用盡可能簡短的文字,來把這個問題解釋清楚。
5. 時間分配
那10天的時間里,我是怎樣把這個技能學習進行時間分配的?
- 第1天:HTML(網(wǎng)頁標記語言);
- 第2 - 3天:CSS(網(wǎng)頁樣式語言);
- 第4 - 7天:JavaScript(網(wǎng)頁開發(fā)語言);
- 第8 - 10天:PHP/MySQL(數(shù)據(jù)庫);
因為之前的基礎,除了MySQL數(shù)據(jù)庫部分,其他部分都比較順暢的通過。CSS,看完好像很懂,但是是極度需要熟練練習的。
在學習的過程中里,遵循3個原則:
- 快速閱讀基本概念,不浪費時間,進入訓練
- 使用提供的訓練代碼,快速試驗,不求重頭開始寫,只求稍作修改也能正確運行
- 快速通讀整個教程,回去再理解一次
第一條,閱讀完基本概念的時候,你可能是似懂非懂的狀態(tài);第二條,代碼訓練,是來驗證基本概念的;第三條,當整個教程通讀一遍后,你回過頭來,看那些之前沒理解的,可能已經(jīng)明白了,編程的知識點之間,是有關聯(lián)的。
其實,在自學的過程中,即使是w3schools這樣簡單明了的教程,我也并沒有逐條認真看,而是快速閱覽。
當遇到看不懂的部分時,就動手做一次,做了還是不懂,也不要太浪費時間,首先用最快的時間,去把整體瀏覽一遍。
宏觀有認識和練習后,回過頭來,才發(fā)現(xiàn),“啊原來就這樣子啊”。
有一件事,是必須刻意克服的————
英語,不能渣!英語,不能渣!英語,不能渣!重要的事說三遍!
有人說,學編程,不是應該理科特別好,像數(shù)學有特別好,才能學得好嗎?
我呸!!!
在實際工作中,大部分情況,你打交道的,是英語!英語!英語!
寫代碼多了,你會發(fā)現(xiàn),寫代碼,其實就像寫英語作文一樣。
那些說看到代碼就暈的人,一般同樣會看到英語就暈。這里說的英語,不一定是要英語成績有多好,語法有多棒,但是,不能反感看英語,有一定的單詞量。
要學習編程,英語,不能太差。否則很難在編程的世界里走遠,英語好,就打通了全世界的程序員技術之門,全世界的程序員在幫你解決問題。
直到今天,工作之中90%的技術問題,霖哥幾乎都能通過Google一下找到答案;對于新興技術,去英語官方網(wǎng)站看看官方教程,根本不需要買厚厚的書籍。
因此,一定要培養(yǎng)英語閱讀技術文檔的能力。
學習編程的時候,不要死記硬背,要培養(yǎng)感覺。
因為,即使到今天為止,工作的過程中,霖哥還是會不停地通過百度和Google搜索引擎搜索“忘記掉”的語法和代碼。比如,霖哥經(jīng)常會做出這樣的搜索關鍵字:
依然在用的搜索關鍵字:
“Python for循環(huán)”、 “Java 接口”、 “JavaScript class”,一些很基礎的語法
霖哥用過11種不同的編程語言來做過項目,從來不會介意,會不記得哪個函數(shù)、哪個語法怎么寫了。可能學院派看到這,會覺得三觀盡毀,可我們生活很多事情,都是這樣的。
比如說,出來工作幾年的人,會把小學、初中,甚至高中的數(shù)學,給忘記了。到真的想用的時候,又實在記不起的時候,上去百科上搜一下,很快就補回來了。
編程語法也是一樣,是不用死記硬背,只要把思維養(yǎng)成了,需要用的時候,再通過搜索引擎解決問題就可以了。通過教育,我們更多得到的,不是知識,而是認知。
所以有時候,挺反感一些技術面試過程中,要求寫出具體代碼的題目,因為具體的代碼,每過一段時間,就會忘記得一干二凈了,而編程思維,或者說編程的感覺,卻是永久的烙印在腦海中。
當我需要用到的時候,我知道去哪里找到她,這就夠了。
這就像,當我們家里水龍頭壞了,首先想到的,是找專業(yè)的師傅,而不是立刻學習修水龍頭,是一個道理的。
代碼是一個浩瀚的世界,死記硬背毫無意義,更重要的是理解編程思維,而不是具體怎么寫代碼;寫代碼的練習,不單是讓技能熟練,而且培養(yǎng)的,是對編程思維的理解。
6. 實戰(zhàn)
10天以后,如果你已經(jīng)真把HTML/CSS/JavaScript教程過了一遍,你就可以嘗試開始實戰(zhàn)了。
當年,霖哥做了一件非常囧的實戰(zhàn)————
那時候是班長,經(jīng)常拿一些班務工作,當做是技術實戰(zhàn)的試驗田。有一次需要進行全班同學的調(diào)查問卷, 霖哥就決定自己動手,做一個網(wǎng)頁。(當年可還沒有像問卷星,這樣的在線問卷調(diào)查工具)
這個網(wǎng)頁,可以提供幾個選擇題,然后按確定,提交選擇。
這需要用到HTML和JavaScript。我打開了代碼編輯器,把HTML碼上去,然后用JavaScript把每次提交的結(jié)果,保存到一個數(shù)組中。
然后,把它掛到了單機網(wǎng)站服務器,然后提著筆記本電腦和iPod Touch上課去。我用那個iPod Touch打開做好的HTML選擇題網(wǎng)頁。
然后,把iPod Touch在班里的同學之間,一個一個地傳閱,做好選擇并提交。
使用iPod Touch有一個弊端,如果某個同學多手按了一下中間的首頁鍵,選擇題的網(wǎng)頁就不見了,他們也不知道從哪里重新打開這個網(wǎng)頁。怎么辦?
所以我用厚厚的透明膠紙,把HOME鍵貼住,讓它不能按......
7. 一理通百理明
下一步是什么?
拿當年的例子來,在這10天后,霖哥開始學習PHP和MySQL,并在不久之后,開始幫學校做網(wǎng)站,賺一點錢。
當時的霖哥,目的就是通過編程,盡快擁有做項目的能力,在課余賺錢。
這是一種至上而下的學習過程,更快地學習,通過動手,迅速的入門一項技能。無數(shù)計算機系的學生,在畢業(yè)的那一刻一臉懵逼的踏入職場,而霖哥大學一年級開始就開發(fā)自己的項目了。(大四的時候還幫了幾位計算機系的兄臺做畢業(yè)設計。)
在這些過程里,霖哥逐漸發(fā)現(xiàn)了“一理通百理明”的道理。后來剩下的大學生涯里,把Java、C#、Python、Ruby等常見的編程語言和她們的框架都自學了一遍,不同的編程語言,他們的學問其實是很大一部分是相通而有關聯(lián)的。
隨著學習的深入,當你已經(jīng)熟悉兩三種編程語言,能開發(fā)各種軟件,這時要學習一種新語言,學習的更多是思想,理解了思想和學習新語言的工具鏈后,就可以開工了,完全是1-3天的事情。
因為無論何種編程語言,它們基本語法都是條件、函數(shù)、循環(huán)、數(shù)據(jù)結(jié)構(gòu)所組成。
與學院派那種自下而上的過程相比,這種自上而下的學習過程,能更快的完善小目標、激發(fā)興趣和成就感。
至于一些基礎的底層知識,霖哥對正統(tǒng)計算機課程里的數(shù)據(jù)結(jié)構(gòu)、算法、計算機底層的相關知識并不牢靠,但憑借足夠的獵奇心,在隨后的工作時間里,慢慢自己地自學回來。
喬布斯曾經(jīng)說過:
我覺得每個人都應該學習一門編程語言。學習編程教你如何思考。
不管你出來工作后,是不是以此為職業(yè),擁有一定的編程技能,會用編程思維來思考問題,將會受用終生。
8. 導師
總結(jié)霖哥上述自學編程的心法:
- 先定它一個小目標!
- 快速過一遍教程!
- 嘗試一個小實戰(zhàn)!
其實,記住霖哥的心法,我覺得根本不需要10天。
在2016年之前,霖哥一直把自己的一個人生格言引以為豪:
“我有2個老師,1個叫谷歌,1個叫百度”。
然而,如今我不這么認為了!!!
當年的霖哥,沒人輔導,在大學利用課余時間,全靠自學,花了10天,系統(tǒng)的了解一下“網(wǎng)頁編程”,往后才開始花費大量的時間,一個接一個的去熟悉各種開發(fā)框架。
如今,霖哥建議是,可以縮短“快速過一遍教程”的這個過程。要是有一定的電腦基礎,一天里分配比較多的時間,5天,把基礎理論和試驗過一遍是沒問題的。
霖哥覺得,因為缺少導師,霖哥在個人技術認知成長上,也走了很多彎路,浪費了不少時間。
互聯(lián)網(wǎng)的發(fā)展,帶來了信息的爆炸,大量的信息讓我們的世界變平了,信息的不對稱,正在逐步被減少。
比如說,我們購買一個商品,我們會先在網(wǎng)上搜索,進行比價,預防自己被坑。
但是每個不同的人,對信息的思考和處理的結(jié)果,是不一樣,這造成對同樣的信息,會有不同的認知,也就是認知差距。這種認知,是需要導師去指導的。
比如說,現(xiàn)在的人,看一個電影,會先跑上豆瓣上看評分。明明一個不知所云、讓人呼呼大睡的電影,怎么就很高分?雖然不懂,但是因為它很高分,所以依然跟著,給它一個高分。
要解決這種認知差距,與其通過在信息叢林里閱讀天量的信息,還不如找到一個認知導師。
要知道,霖哥整個編程生涯里,沒有遇過哪怕一個導師,所有的知識,都是從網(wǎng)上的信息里挖來的,并且自我生成對它們的認知。
當然這也有一個好處,很多事情,霖哥會有不同的視角,去思考技術的問題,盡管我并不知道這好與不好,至少現(xiàn)在回想起來,霖哥的一些見解是獨到和有用的。
9. 學習
盡早“練習”
關于創(chuàng)業(yè),我們會見到這樣的段子:
我有一個價值十億的 idea,只要開發(fā)這樣一個 APP,半年就會有一千萬人用,一年就能納斯達克上市。項目我已經(jīng)規(guī)劃的非常清楚,啟動資金也很充足,“萬事俱備,就差一個程序員了!”
你那么牛,花10天自學一下的時間都不愿意,你咋不上天呢。
別忘了,無數(shù)成功的創(chuàng)業(yè)企業(yè)家,他們都是程序員出身,像比爾·蓋茨、馬化騰、李彥宏。
就算不懂代碼,也最起碼都懂得技術思維。像喬布斯對“面向?qū)ο?rdquo;的深刻理解(霖哥認為這理解超越80%的職業(yè)程序員)、1996年馬云做的中國黃頁(能看見別人看不見的一個新興技術的商業(yè)價值),都可以看出這些商業(yè)巨人對科技技術的深刻理解。
在霖哥看來,編程是一門藝術,而不是技術。
在學校課堂里的,學到的只是技術,要把它玩成藝術,還需要有豐富的經(jīng)驗、強烈的好奇心和與別不同的視野。這些都是光靠網(wǎng)上資料學習,很難學到的。
這也是霖哥寫下這篇文章的原因,通過傳達霖哥的自學經(jīng)驗和思考維度,可以讓更多的人在科技大爆炸時代,提升自己的認知、技術思維。
霖哥不比別人聰明,但是霖哥也學到了,相信每個人都可以。
毫不夸張的說,這短暫的10天,改變了我的人生,讓我走上技術之路。
霖哥自學編程的經(jīng)驗,想分享的真是太多太多了。下一篇文章,霖哥想具體說說,對于想自學編程初學者,究竟學哪一種編程語言比較好。
如果你覺得有用,你也想學習編程或投身科技行業(yè),但是你不知道從哪開始,留下評論,說說你的小目標和故事,霖哥會持續(xù)分享自己的自學經(jīng)驗、方法和技巧,提供綿薄之助。































