我是如何用 10 天自學編程,改變一輩子的?(學習編程的時候,不要死記硬背,要培養感受)

編者按:本文來自微信公衆號「商學院畢業的程序員」,經過自學編程成爲一家大型上市公司的資深軟件工程師。html

我是我,一個因興趣入行的商學院畢業的程序員。最近有很多人,來問我,想學編程,可是又不知怎麼開始。因此,我想把我8年前影響我一輩子的10天自學編程的經歷,毫無保留的分享出來。前端

若是看到這標題,會讓你以爲,讀完一篇文章就能快速的掌握編程技術的話,這可能會讓你失望,這裏甚至沒有一行代碼。程序員

我想分享的,是我最初自學編程的經歷和心法。面試

1.決定

(圖爲2008年的白色蘋果筆記本)算法

2009年初,一個潮溼、骯髒、背靠竹林的大學宿舍裏,其中一張書桌,放着一臺與環境格調不一致的純白色的蘋果Macbook電腦。她是我課餘時間最好的朋友。數據庫

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

因此,我作了一個如今看起來對人生產生重大影響的重要決定:後端

用10天!系統地學習一遍網站編程!數組

那一年我19歲,卻有着現在看起來好笑的狂妄自大,總以爲在未來會跟別人活得不同。服務器

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

大學一年級的時候,雖然我的電腦已經走入千家萬戶,可是創業、互聯網,尚未像今天那麼吵的火熱朝天的,移動互聯網的概念尚未造成。

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

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

一臺不能玩遊戲的破電腦,拿來幹嗎?學習使用各類軟件或者學編程唄。

就這樣,萌生了系統地自學編程的想法。在商學院畢業前,也沒有通過面試,我卻糊里糊塗的,進入了一家老牌大型上市軟件公司(而且仍是小時候曾經那個憧憬嚮往的公司),成爲了一名程序員。

這一切,都起源於2009年的那系統地自學編程的10天。

2.基礎

(圖爲小時候,用來畫畫的LOGO編程語言)

在講述那10天的自學編程經歷前,得說明個人電腦基礎。

幼兒園的時候接觸386計算機,會用MSDOS系統玩一個叫「波斯王子」、象棋的遊戲;後來開始用Windows 3.0(從Dos那裏敲段命令進入Windows,那時候還沒開始菜單),裏面的軟件少得可憐。

小學一年級的時候,恰好分配到了計算機實驗班,學校會教一個叫「認知碼」的輸入法。輸入法也沒怎麼學會,卻是學會了拼音快速打字的本領;

小學五年級的時候用Dreamweaver、Fireworks、Flash、Photoshop(網頁製做三劍客,三個軟件)作我的主頁,用FTP(文件傳送工具)上傳到虛擬主機作成網站;

以後幾年電腦遊戲上癮,玩了好多年,一直沒有在技術上深究。直到高中後,開始折騰三個PHP開源程序,他們是Discuz、PHPWind和Wordpress,而且還運營了個PHPWind的校園社區。可是,並不懂得如何經過編程去開發一個Web產品,只大概知道了Web產品是怎麼煉成的。

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

可是,那時候,我還不太系統的瞭解編程,只知道計算機軟件程序,是由編程語言控制的;只知道編程語言裏,有不少if(若是)、 for(循環)等關鍵字,卻不太懂怎麼去用它們作出一個軟件程序來。

3. 小目標

要決定自學編程,首先要定個小目標。

這很是重要!

不少計算機系畢業的本科大學生,你讓他們去作一個簡單的H5頁面,他們都是作不出來的。

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

是的,國內大學的計算機課程通常以C語言或Java語言基礎入門,而後開始學習數學、數據結構、算法。確實很大一部分人,到畢業爲止,都沒有教怎麼作一張網頁。

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

不論搞什麼開發,編程語言,僅僅起到最最最底層基礎的做用。

怎麼理解呢?咱們能夠把不一樣平臺的軟件開發,想象成不一樣交際語言的寫做:

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

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

比方說,Java語言,既能夠開發Android程序,也能夠作網站後臺開發,那麼,讓一個作安卓開發的Java程序員,馬上去作網站後臺開發行不行?

不行,二者還有大量的開發條件和工具鏈是不同的。

所以,選擇一個小目標,自上而下的去思考和學習,就很是重要了……而我當時的小目標,作網頁——我但願美化本身博客網站的界面(使用一個叫Wordpress的網站軟件搭建的博客)。

這個目標,足夠的小。我只須要學習HTML、CSS、PHP就足夠了。

這也是爲何我要系統地學習編程的重要緣由——達成這個小目標。

4.資料

那10天裏,我分別學習了什麼?

我學習了HTML、CSS、PHP、MySQL四種技術,籠統來講,這些都是開發一個網站的基本技能。

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

上圖,隨便拍一張身邊的3本書,分別是700頁,500頁,300頁!太厚了,誰那麼多時間看完!

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

因此,對於想要學習編程的初學者來講,最好的學習方式是:少看,馬上動手。

5. 時間分配

那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種不一樣的編程語言來作過項目,歷來不會介意,會不記得哪一個函數、哪一個語法怎麼寫了。可能學院派看到這,會以爲三觀盡毀,可咱們生活不少事情,都是這樣的。

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

編程語法也是同樣,是不用死記硬背,只要把思惟養成了,須要用的時候,再經過搜索引擎解決問題就能夠了。經過教育,咱們更多獲得的,不是知識,而是認知。

因此有時候,挺反感一些技術面試過程當中,要求寫出具體代碼的題目,由於具體的代碼,每過一段時間,就會忘記得一乾二淨了,而編程思惟,或者說編程的感受,倒是永久的烙印在腦海中。

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

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

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

6. 實戰

10天之後,若是你已經真把HTML/CSS/JavaScript教程過了一遍,你就能夠嘗試開始實戰了。

當年,我作了一件很是囧的實戰————

那時候是班長,常常拿一些班務工做,當作是技術實戰的試驗田。有一次須要進行全班同窗的調查問卷, 我就決定本身動手,作一個網頁。(當年可尚未像問卷星,這樣的在線問卷調查工具)

這個網頁,能夠提供幾個選擇題,而後按肯定,提交選擇。

這須要用到HTML和JavaScript。我打開了代碼編輯器,把HTML碼上去,而後用JavaScript把每次提交的結果,保存到一個數組中。

(圖:作了個很簡單的選擇題網頁)

而後,把它掛到了單機網站服務器,而後提着筆記本電腦和iPod Touch上課去。我用那個iPod Touch打開作好的HTML選擇題網頁。

而後,把iPod Touch在班裏的同窗之間,一個一個地傳閱,作好選擇並提交。

使用iPod Touch有一個弊端,若是某個同窗多手按了一下中間的首頁鍵,選擇題的網頁就不見了,他們也不知道從哪裏從新打開這個網頁。怎麼辦?

因此我用厚厚的透明膠紙,把HOME鍵貼住,讓它不能按……

7. 一理通百理明

下一步是什麼?

拿當年的例子來,在這10天后,我開始學習PHP和MySQL,並在不久以後,開始幫學校作網站,賺一點錢。

當時的我,目的就是經過編程,儘快擁有作項目的能力,在課餘賺錢。

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

在這些過程裏,我逐漸發現了「一理通百理明」的道理。後來剩下的大學生涯裏,把Java、C#、Python、Ruby等常見的編程語言和她們的框架都自學了一遍,不一樣的編程語言,他們的學問實際上是很大一部分是相通而有關聯的。

隨着學習的深刻,當你已經熟悉兩三種編程語言,能開發各類軟件,這時要學習一種新語言,學習的更可能是思想,理解了思想和學習新語言的工具鏈後,就能夠開工了,徹底是1-3天的事情。

由於不管何種編程語言,它們基本語法都是條件、函數、循環、數據結構所組成。

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

至於一些基礎的底層知識,我對正統計算機課程裏的數據結構、算法、計算機底層的相關知識並不牢靠,但憑藉足夠的獵奇心,在隨後的工做時間裏,慢慢本身地自學回來。

(圖:喬布斯訪談)

喬布斯曾經說過:

我以爲每一個人都應該學習一門編程語言。學習編程教你如何思考。

無論你出來工做後,是否是以此爲職業,擁有必定的編程技能,會用編程思惟來思考問題,將會受用終生。

8. 導師

總結我上述自學編程的心法:

  • 先定它一個小目標!

  • 快速過一遍教程!

  • 嘗試一個小實戰!

其實,記住個人心法,我以爲根本不須要10天。

在2016年以前,我一直把本身的一我的生格言引覺得豪:

「我有2個老師,1個叫谷歌,1個叫百度」。

然而,現在我不這麼認爲了!!!

當年的我,沒人輔導,在大學利用課餘時間,全靠自學,花了10天,系統的瞭解一下「網頁編程」,日後纔開始花費大量的時間,一個接一個的去熟悉各類開發框架。

現在,我建議是,能夠縮短「快速過一遍教程」的這個過程。要是有必定的電腦基礎,一天裏分配比較多的時間,5天,把基礎理論和試驗過一遍是沒問題的。

我以爲,由於缺乏導師,我在我的技術認知成長上,也走了不少彎路,浪費了很多時間。

互聯網的發展,帶來了信息的爆炸,大量的信息讓咱們的世界變平了,信息的不對稱,正在逐步被減小。

好比說,咱們購買一個商品,咱們會先在網上搜索,進行比價,預防本身被坑。

可是每一個不一樣的人,對信息的思考和處理的結果,是不同,這形成對一樣的信息,會有不一樣的認知,也就是認知差距。這種認知,是須要導師去指導的。

好比說,如今的人,看一個電影,會先跑上豆瓣上看評分。明明一個不知所云、讓人呼呼大睡的電影,怎麼就很高分?雖然不懂,可是由於它很高分,因此依然跟着,給它一個高分。

要解決這種認知差距,與其經過在信息叢林裏閱讀天量的信息,還不如找到一個認知導師。

要知道,我整個編程生涯裏,沒有遇過哪怕一個導師,全部的知識,都是從網上的信息裏挖來的,而且自我生成對它們的認知。

固然這也有一個好處,不少事情,我會有不一樣的視角,去思考技術的問題,儘管我並不知道這好與很差,至少如今回想起來,個人一些看法是獨到和有用的。

9. 學習

儘早「練習」

關於創業,咱們會見到這樣的段子:

我有一個價值十億的 idea,只要開發這樣一個 APP,半年就會有一千萬人用,一年就能納斯達克上市。項目我已經規劃的很是清楚,啓動資金也很充足,「萬事俱備,就差一個程序員了!」

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

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

就算不懂代碼,也最起碼都懂得技術思惟。像喬布斯對「面向對象」的深入理解(我認爲這理解超越80%的職業程序員)、1996年馬雲作的中國黃頁(能看見別人看不見的一個新興技術的商業價值),均可以看出這些商業巨人對科技技術的深入理解。

在我看來,編程是一門藝術,而不是技術。

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

這也是我寫下這篇文章的緣由,經過傳達個人自學經驗和思考維度,可讓更多的人在科技大爆炸時代,提高本身的認知、技術思惟。

我不比別人聰明,可是我也學到了,相信每一個人均可以。

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

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

若是你以爲有用,你也想學習編程或投身科技行業,可是你不知道從哪開始,留下評論,說說你的小目標和故事,我會持續分享本身的自學經驗、方法和技巧,提供綿薄之助。

稿源:代碼灣

 

http://www.oschina.net/news/83833/how-i-learn-programming-change-my-life

相關文章
相關標籤/搜索