天天看點

我是如何用 10 天自學程式設計,改變一生的?

我是我,一個因興趣入行的商學院畢業的程式員。最近有不少人,來問我,想學程式設計,但是又不知怎麼開始。是以,我想把我8年前影響我一生的10天自學程式設計的經曆,毫無保留的分享出來。

如果看到這标題,會讓你覺得,讀完一篇文章就能快速的掌握程式設計技術的話,這可能會讓你失望,這裡甚至沒有一行代碼。

我想分享的,是我最初自學程式設計的經曆和心法。

1.決定

2009年初,一個潮濕、肮髒、背靠竹林的大學宿舍裡,其中一張書桌,放着一台與環境格調不一緻的純白色的蘋果macbook電腦。她是我課餘時間最好的朋友。

我讀的是商學院金融專業,在度過了逍遙放縱頹廢的半年大學一年級生活後,總覺得要學點什麼技能,賺一點錢。

是以,我做了一個現在看起來對人生産生重大影響的重要決定:

用10天!系統地學習一遍網站程式設計!

那一年我19歲,卻有着如今看起來可笑的狂妄自大,總覺得在将來會跟别人活得不一樣。

現在回憶起來,當初的我純粹隻是一個電腦用得比别人好的學渣而已,也不知道當年進水的腦袋哪來的自信,真是too young too naive。

大學一年級的時候,雖然個人電腦已經走入千家萬戶,但是創業、網際網路,還沒有像今天那麼吵的火熱朝天的,移動網際網路的概念還沒有形成。

計算機技術在外行人看起來更多還是技術的世界,沒有誰張口閉口就跟你聊融資、産品、市場、營運。

父母資助給我買了一台蘋果電腦,這在當時還算是一件難能可貴的事情。接近五位數的價格,拿到手這麼一台電腦,當時我是有多感動啊,我說:我以後絕逼不再玩遊戲了,我要好好學習。

一台不能玩遊戲的破電腦,拿來幹嘛?學習使用各種軟體或者學程式設計呗。

就這樣,萌生了系統地自學程式設計的想法。在商學院畢業前,也沒有經過面試,我卻糊裡糊塗的,進入了一家老牌大型上市軟體公司(并且還是小時候曾經那個憧憬向往的公司),成為了一名程式員。

這一切,都起源于2009年的那系統地自學程式設計的10天。

2.基礎

在講述那10天的自學程式設計經曆前,得說明我的電腦基礎。

幼稚園的時候接觸386計算機,會用msdos系統玩一個叫“波斯王子”、象棋的遊戲;後來開始用windows 3.0(從dos那裡敲段指令進入windows,那時候還沒開始菜單),裡面的軟體少得可憐。

國小一年級的時候,剛好配置設定到了計算機實驗班,學校會教一個叫“認知碼”的輸入法。輸入法也沒怎麼學會,倒是學會了拼音快速打字的本領;

國小五年級的時候用dreamweaver、fireworks、flash、photoshop(網頁制作三劍客,三個軟體)做個人首頁,用ftp(檔案傳送工具)上傳到虛拟主機做成網站;

之後幾年電腦遊戲上瘾,玩了好多年,一直沒有在技術上深究。直到高中後,開始折騰三個php開源程式,他們是discuz、phpwind和wordpress,并且還營運了個phpwind的校園社群。但是,并不懂得如何通過程式設計去開發一個web産品,隻大概知道了web産品是怎麼煉成的。

是以說,在大學正式系統地自學程式設計之前,我是有不錯的電腦應用基礎的。

但是,那時候,我還不太系統的了解程式設計,隻知道計算機軟體程式,是由程式設計語言控制的;隻知道程式設計語言裡,有很多if(如果)、 for(循環)等關鍵字,卻不太懂怎麼去用它們做出一個軟體程式來。

小目标

要決定自學程式設計,首先要定個小目标。

這非常重要!

很多計算機系畢業的大學大學生,你讓他們去做一個簡單的h5頁面,他們都是做不出來的。

可能他們中的很多人的回答是,老師沒有教啊。

是的,國内大學的計算機課程一般以c語言或java語言基礎入門,然後開始學習數學、資料結構、算法。确實很大一部分人,到畢業為止,都沒有教怎麼做一張網頁。

是以有時候,程式員是一個相當專業化的職業,搞後端的不懂前端,搞前端的不懂後端,搞蘋果的不會安卓,搞移動開發的不懂電腦開發。這是很正常的。

不論搞什麼開發,程式設計語言,僅僅起到最最最底層基礎的作用。

怎麼了解呢?我們可以把不同平台的軟體開發,想象成不同交際語言的寫作:

讓你做一個蘋果ios app,就像讓你用英語寫一篇文章:你不但要學習英語單詞,還要學習英語文法、英語句式、習慣用詞;

讓你做一個網頁,就像讓你用西班牙語寫一篇文章:你不但要學習西班牙語單詞,還要學習西班牙國文化、西班牙語文法、西班牙語音标……

比方說,java語言,既可以開發android程式,也可以做網站背景開發,那麼,讓一個做安卓開發的java程式員,立刻去做網站背景開發行不行?

不行,兩者還有大量的開發條件和工具鍊是不一樣的。

是以,選擇一個小目标,自上而下的去思考和學習,就非常重要了……而我當時的小目标,做網頁——我希望美化自己部落格網站的界面(使用一個叫wordpress的網站軟體搭建的部落格)。

這個目标,足夠的小。我隻需要學習html、css、php就足夠了。

這也是為什麼我要系統地學習程式設計的重要原因——達成這個小目标。

4.資料

那10天裡,我分别學習了什麼?

我學習了html、css、php、mysql四種技術,籠統來說,這些都是開發一個網站的基本技能。

走進圖書館的計算機相關書架,你會發現很多計算機相關的書籍,都厚得吓人,其中相當大的篇幅,是前言、理論和案例,讓初學者手足無措,無從入手。

對于一個什麼都不懂的初學者來說,一上來就一堆理論,隻會讓人一臉懵逼。

是以,對于想要學習程式設計的初學者來說,最好的學習方式是:少看,立刻動手。

時間配置設定

那10天的時間裡,我是怎樣把這個技能學習進行時間配置設定的?

第1天:html(網頁标記語言);

第2 – 3天:css(網頁樣式語言);

第4 – 7天:javascript(網頁開發語言);

第8 – 10天:php/mysql(資料庫);

因為之前的基礎,除了mysql資料庫部分,其他部分都比較順暢的通過。css,看完好像很懂,但是是極度需要熟練練習的。

在學習的過程中裡,遵循3個原則:

快速閱讀基本概念,不浪費時間,進入訓練

使用提供的訓練代碼,快速試驗,不求重頭開始寫,隻求稍作修改也能正确運作

快速通讀整個教程,回去再了解一次

第一條,閱讀完基本概念的時候,你可能是似懂非懂的狀态;第二條,代碼訓練,是來驗證基本概念的;第三條,當整個教程通讀一遍後,你回過頭來,看那些之前沒了解的,可能已經明白了,程式設計的知識點之間,是有關聯的。

其實,在自學的過程中,即使是w3schools這樣簡單明了的教程,我也并沒有逐條認真看,而是快速閱覽。

當遇到看不懂的部分時,就動手做一次,做了還是不懂,也不要太浪費時間,首先用最快的時間,去把整體浏覽一遍。

宏觀有認識和練習後,回過頭來,才發現,“啊原來就這樣子啊”。

有一件事,是必須刻意克服的————

英語,不能渣!英語,不能渣!英語,不能渣!重要的事說三遍!

有人說,學程式設計,不是應該理科特别好,像數學有特别好,才能學得好嗎?

我呸!!!

在實際工作中,大部分情況,你打交道的,是英語!英語!英語!

寫代碼多了,你會發現,寫代碼,其實就像寫英語作文一樣。

那些說看到代碼就暈的人,一般同樣會看到英語就暈。這裡說的英語,不一定是要英語成績有多好,文法有多棒,但是,不能反感看英語,有一定的單詞量。

要學習程式設計,英語,不能太差。否則很難在程式設計的世界裡走遠,英語好,就打通了全世界的程式員技術之門,全世界的程式員在幫你解決問題。

直到今天,工作之中90%的技術問題,我幾乎都能通過google一下找到答案;對于新興技術,去英語官方網站看看官方教程,根本不需要買厚厚的書籍。

是以,一定要培養英語閱讀技術文檔的能力。

學習程式設計的時候,不要死記硬背,要培養感覺。

因為,即使到今天為止,工作的過程中,我還是會不停地通過百度和google搜尋引擎搜尋“忘記掉”的文法和代碼。比如,我經常會做出這樣的搜尋關鍵字:

依然在用的搜尋關鍵字:

“python for循環”、 “java 接口”、 “javascript class”,一些很基礎的文法

我用過11種不同的程式設計語言來做過項目,從來不會介意,會不記得哪個函數、哪個文法怎麼寫了。可能學院派看到這,會覺得三觀盡毀,可我們生活很多事情,都是這樣的。

比如說,出來工作幾年的人,會把國小、國中,甚至高中的數學,給忘記了。到真的想用的時候,又實在記不起的時候,上去百科上搜一下,很快就補回來了。

程式設計文法也是一樣,是不用死記硬背,隻要把思維養成了,需要用的時候,再通過搜尋引擎解決問題就可以了。通過教育,我們更多得到的,不是知識,而是認知。

是以有時候,挺反感一些技術面試過程中,要求寫出具體代碼的題目,因為具體的代碼,每過一段時間,就會忘記得一幹二淨了,而程式設計思維,或者說程式設計的感覺,卻是永久的烙印在腦海中。

當我需要用到的時候,我知道去哪裡找到她,這就夠了。

這就像,當我們家裡水龍頭壞了,首先想到的,是找專業的師傅,而不是立刻學習修水龍頭,是一個道理的。

代碼是一個浩瀚的世界,死記硬背毫無意義,更重要的是了解程式設計思維,而不是具體怎麼寫代碼;寫代碼的練習,不單是讓技能熟練,而且培養的,是對程式設計思維的了解。

實戰

10天以後,如果你已經真把html/css/javascript教程過了一遍,你就可以嘗試開始實戰了。

當年,我做了一件非常囧的實戰————

那時候是班長,經常拿一些班務工作,當做是技術實戰的試驗田。有一次需要進行全班同學的調查問卷, 我就決定自己動手,做一個網頁。(當年可還沒有像問卷星,這樣的線上問卷調查工具)

這個網頁,可以提供幾個選擇題,然後按确定,送出選擇。

這需要用到html和javascript。我打開了代碼編輯器,把html碼上去,然後用javascript把每次送出的結果,儲存到一個數組中。

然後,把它挂到了單機網站伺服器,然後提着筆記本電腦和ipod touch上課去。我用那個ipod touch打開做好的html選擇題網頁。

然後,把ipod touch在班裡的同學之間,一個一個地傳閱,做好選擇并送出。

使用ipod touch有一個弊端,如果某個同學多手按了一下中間的首頁鍵,選擇題的網頁就不見了,他們也不知道從哪裡重新打開這個網頁。怎麼辦?

是以我用厚厚的透明膠紙,把home鍵貼住,讓它不能按……

一理通百理明

下一步是什麼?

拿當年的例子來,在這10天後,我開始學習php和mysql,并在不久之後,開始幫學校做網站,賺一點錢。

當時的我,目的就是通過程式設計,盡快擁有做項目的能力,在課餘賺錢。

這是一種至上而下的學習過程,更快地學習,通過動手,迅速的入門一項技能。無數計算機系的學生,在畢業的那一刻一臉懵逼的踏入職場,而我大學一年級開始就開發自己的項目了。(大四的時候還幫了幾位計算機系的兄台做畢業設計。)

在這些過程裡,我逐漸發現了“一理通百理明”的道理。後來剩下的大學生涯裡,把java、c#、python、ruby等常見的程式設計語言和她們的架構都自學了一遍,不同的程式設計語言,他們的學問其實是很大一部分是相通而有關聯的。

随着學習的深入,當你已經熟悉兩三種程式設計語言,能開發各種軟體,這時要學習一種新語言,學習的更多是思想,了解了思想和學習新語言的工具鍊後,就可以開工了,完全是1-3天的事情。

因為無論何種程式設計語言,它們基本文法都是條件、函數、循環、資料結構所組成。

與學院派那種自下而上的過程相比,這種自上而下的學習過程,能更快的完善小目标、激發興趣和成就感。

至于一些基礎的底層知識,我對正統計算機課程裡的資料結構、算法、計算機底層的相關知識并不牢靠,但憑借足夠的獵奇心,在随後的工作時間裡,慢慢自己地自學回來。

喬布斯曾經說過:

我覺得每個人都應該學習一門程式設計語言。學習程式設計教你如何思考。

不管你出來工作後,是不是以此為職業,擁有一定的程式設計技能,會用程式設計思維來思考問題,将會受用終生。

導師

總結我上述自學程式設計的心法:

先定它一個小目标!

快速過一遍教程!

嘗試一個小實戰!

其實,記住我的心法,我覺得根本不需要10天。

在2016年之前,我一直把自己的一個人生格言引以為豪:

“我有2個老師,1個叫谷歌,1個叫百度”。

然而,如今我不這麼認為了!!!

當年的我,沒人輔導,在大學利用課餘時間,全靠自學,花了10天,系統的了解一下“網頁程式設計”,往後才開始花費大量的時間,一個接一個的去熟悉各種開發架構。

如今,我建議是,可以縮短“快速過一遍教程”的這個過程。要是有一定的電腦基礎,一天裡配置設定比較多的時間,5天,把基礎理論和試驗過一遍是沒問題的。

我覺得,因為缺少導師,我在個人技術認知成長上,也走了很多彎路,浪費了不少時間。

網際網路的發展,帶來了資訊的爆炸,大量的資訊讓我們的世界變平了,資訊的不對稱,正在逐漸被減少。

比如說,我們購買一個商品,我們會先在網上搜尋,進行比價,預防自己被坑。

但是每個不同的人,對資訊的思考和處理的結果,是不一樣,這造成對同樣的資訊,會有不同的認知,也就是認知差距。這種認知,是需要導師去指導的。

比如說,現在的人,看一個電影,會先跑上豆瓣上看評分。明明一個不知所雲、讓人呼呼大睡的電影,怎麼就很高分?雖然不懂,但是因為它很高分,是以依然跟着,給它一個高分。

要解決這種認知差距,與其通過在資訊叢林裡閱讀天量的資訊,還不如找到一個認知導師。

要知道,我整個程式設計生涯裡,沒有遇過哪怕一個導師,所有的知識,都是從網上的資訊裡挖來的,并且自我生成對它們的認知。

當然這也有一個好處,很多事情,我會有不同的視角,去思考技術的問題,盡管我并不知道這好與不好,至少現在回想起來,我的一些見解是獨到和有用的。

學習

盡早“練習”

關于創業,我們會見到這樣的段子:

我有一個價值十億的 idea,隻要開發這樣一個 app,半年就會有一千萬人用,一年就能納斯達克上市。項目我已經規劃的非常清楚,啟動資金也很充足,“萬事俱備,就差一個程式員了!”

你那麼牛,花10天自學一下的時間都不願意,你咋不上天呢。

别忘了,無數成功的創業企業家,他們都是程式員出身,像比爾·蓋茨、馬化騰、李彥宏。

就算不懂代碼,也最起碼都懂得技術思維。像喬布斯對“面向對象”的深刻了解(我認為這了解超越80%的職業程式員)、1996年馬雲做的中國黃頁(能看見别人看不見的一個新興技術的商業價值),都可以看出這些商業巨人對科技技術的深刻了解。

在我看來,程式設計是一門藝術,而不是技術。

在學校課堂裡的,學到的隻是技術,要把它玩成藝術,還需要有豐富的經驗、強烈的好奇心和與别不同的視野。這些都是光靠網上資料學習,很難學到的。

這也是我寫下這篇文章的原因,通過傳達我的自學經驗和思考次元,可以讓更多的人在科技大爆炸時代,提升自己的認知、技術思維。

我不比别人聰明,但是我也學到了,相信每個人都可以。

毫不誇張的說,這短暫的10天,改變了我的人生,讓我走上技術之路。

我自學程式設計的經驗,想分享的真是太多太多了。下一篇文章,我想具體說說,對于想自學程式設計初學者,究竟學哪一種程式設計語言比較好。

如果你覺得有用,你也想學習程式設計或投身科技行業,但是你不知道從哪開始,留下評論,說說你的小目标和故事,我會持續分享自己的自學經驗、方法和技巧,提供綿薄之助。