我以前從來沒有想過我現(xiàn)在的生活會是這個樣子。幾小時幾小時地盯著電腦屏幕,想要解決app中的bug。如果一直找不出錯誤的源頭,我就會開始變得焦躁、郁悶甚至于想砸鍵盤,后原因居然只是因為我拼錯了一個文件名。
有時候,我會覺得自己很厲害。比如我寫下自己的第一個腳本并且成功運行的時候。又比如說在我部署我的第一個app給服務(wù)器的時候。以及寫下我的第一個爬蟲來填充數(shù)據(jù)庫的那一瞬間。我感覺自己就像阿拉丁一樣,得到了一個無所不能的神燈。
編程就像毒品一樣,盡管一開始的針管有點疼,但是慢慢的我已經(jīng)離不開它了。下面我將總結(jié)一下我這兩年學(xué)習(xí)編碼的經(jīng)驗。
作為工程師的樂趣
就像很多技術(shù)人員一樣,我既著迷于硅谷又崇拜那些那些技術(shù)大腕。
這里有一個非常有意思的變化——在不久以前,我還在一所大學(xué)念書時,由于工程師給人的印象是缺乏時尚感和社交技巧,所以別人要是說我看上去像一個工程師——我會覺得非常尷尬。
當(dāng)然現(xiàn)在聽上去很蠢,但是當(dāng)我還在大學(xué)的時候,“硅谷”對我而言也只是一個地理名稱而已。
還有一件你可能不知道的事情——我曾經(jīng)是一所中學(xué)的IT俱樂部的會長。我會使用HTML和Flash,在我的空余時間喜歡玩Sim?City?3000,并且創(chuàng)建了一個關(guān)于這個游戲的網(wǎng)站。
在我大學(xué)的后一年,社交網(wǎng)絡(luò)開始展現(xiàn)頭角。我剛一畢業(yè)就作為高科技記者參加了新加坡的新興行業(yè)創(chuàng)業(yè)場景賽。
我所接觸的每一個人都表示了對代碼的酷愛。不想成為高手的程序員,就不是好程序員。
學(xué)習(xí)代碼的門檻也變得非常低。各種資源和文檔,只要一個谷歌搜索就全有了。
現(xiàn)在的代碼學(xué)習(xí)儼然已經(jīng)成為了一個產(chǎn)業(yè),這也說明了一個事實,即好的工程師一直存在著缺口。
現(xiàn)在已經(jīng)是2015年了。如果你也想為自己做一個新一年的編程技術(shù)提高計劃,那么歡迎閱讀這篇文章。我從我個人的學(xué)習(xí)歷史總結(jié)出了以下這些真理:
你的過去決定了你如何學(xué)習(xí)編碼的方法。
我是在2012年底才學(xué)的編程——在我開始了我的第一份工作的一年多以后。這讓我處于嚴重的劣勢,如果我的目標(biāo)是成為一個職業(yè)開發(fā)人員的話。
因為我可能需要和那些12歲就開始編程,剛剛新鮮出爐的畢業(yè)生同臺競技。他們的期望薪水會比較低,他們的關(guān)系**會比較少。我將不得不改變我的人生軌跡,并作出一定的犧牲來追逐這種職業(yè)生涯。
但是現(xiàn)在的情況是這樣的:我已經(jīng)在媒體行業(yè)淫浸了很多年。甚至,我還蠻喜歡我當(dāng)時的工作,工作中并沒有碰到什么過不去的難關(guān)??傊疫€沒有足夠的財力和動力能讓我轉(zhuǎn)而去投資一個全新的方向。
因此,我只能在我空閑的時間里學(xué)習(xí)編碼,同時還要**不能干擾到我的日常工作。犧牲掉我的空閑時間是很艱難的一個決定,但是我別無選擇。
在**之前,先理解你的終目標(biāo)。
學(xué)習(xí)代碼可能對你的目標(biāo)完全無用,也可能是不可缺少的。
如果你是一個學(xué)生,編碼可能會為你開辟更多的未來規(guī)劃,比如說,在你25歲的時候或許就能賺到一百萬美元。
如果你是一個對當(dāng)前工作感到厭倦想要有所改變的年輕“專家”,在你已經(jīng)累計了初期財富之后想要來點冒險的話,或許可以考慮一下編程,這將是一種更富有成效的職業(yè)生涯。
當(dāng)然,編程可能并不適合那些已經(jīng)在大公司就職需要養(yǎng)家糊口的CEO。不過如果你是一名年輕的高管并且希望能在一年內(nèi)開辦自己的高科技企業(yè),那么學(xué)習(xí)編程就很有價值了,因為它能有助于你與開發(fā)人員親密協(xié)作或者自己創(chuàng)建產(chǎn)品。
你?或許會說,學(xué)習(xí)編碼很難或者完全沒有必要。這當(dāng)然是可以的,沒有人能強迫你。不過也有可能你學(xué)習(xí)的原因就只是想讓別人以為你也是很厲害的(很多新入行的喜?劇演員往往是因為這種原因而去演喜?。只蛘吣阒苯亓水?dāng)?shù)乇硎灸憔褪窍刖幊?。?dāng)然如果你的目標(biāo)是想提高薪資收入,也成。
對我來說,上面這些原因或多或少都有:
如果你認為我干得好,請繼續(xù)閱讀:
一個接一個地開始項目。
說實話,編碼一點都不好玩。當(dāng)然,編寫優(yōu)雅的代碼和修復(fù)bug是有收獲的,但是如果沒有終產(chǎn)品,那這一切的努力就只能是付諸東流。
將你的編程之旅當(dāng)作需要攀登的一系列高峰。登上一峰之后就攀爬下一峰。每一個項目都能讓我們學(xué)習(xí)到新的東西、修整舊的知識,一步一步地朝著我們的目標(biāo)前進。下面是我解決的項目,按時間先后順序排列:
●文本游戲。
●一個用于計數(shù)科技博客標(biāo)簽的Ruby腳本,看看當(dāng)前什么話題比較流行。
●一個能抓取網(wǎng)站信息并拷貝到另一個數(shù)據(jù)庫的Ruby腳本。
●排序表格和柱狀圖。我將Ruby?on?Rails應(yīng)用程序與D3.js——基于JavaScript的可視化庫連接起來。
●一個Rails應(yīng)用程序,將Wordpress掛鉤到谷歌分析API上以編程的方式生成內(nèi)容。
●一個Rails應(yīng)用程序,構(gòu)建在緩沖API基礎(chǔ)上可以讓我重新在社交媒體上發(fā)布內(nèi)容。
●一個Rails應(yīng)用程序,可在數(shù)據(jù)庫中填充鏈接。
●Statsy,一個Rails應(yīng)用程序,兼作檢索數(shù)據(jù)庫和以谷歌圖表為基礎(chǔ)的圖片制造商。
連續(xù)的項目會變得復(fù)雜。我一開始學(xué)習(xí)的是創(chuàng)建腳本,然后是Rails。接著踏上了自己找項目的愉快旅程。正如一位程序員所寫的那樣:
數(shù)據(jù)庫、“編程應(yīng)該被當(dāng)作是一種實實在在解決問題或者是更快解決問題的方法。在理解的基礎(chǔ)上進行深度的破解。這樣就有了學(xué)習(xí)的目的和動機了。編程是非常有意義的。但是很遺憾的是,很多人第一次接觸編程就是一堂干巴巴的語法課(我就是如此)。我們只需要坐在那就可以了,不用回答,傻乎乎地聽著類似于天書一樣的言語?!?/p>
持之以恒,慶祝每一個小小的勝利。
如果你的目標(biāo)是建立一個可正常使用的Web應(yīng)用,一開始的時候難度并不大——就像Codecademy網(wǎng)站上面教授基礎(chǔ)內(nèi)容一樣特別簡單。關(guān)于Ruby也有大量的資源可供你起步。
根據(jù)我的經(jīng)驗,如果你想要建立一個完全成熟的web應(yīng)用,你才會發(fā)現(xiàn)編程很難。為什么呢?因為這時候你才知道你還有那么多的東西需要學(xué)習(xí)。如果你正在學(xué)習(xí)的?是Node.js,那么你需要掌握的不是一種而是兩種編程語言:一種是服務(wù)器端語言,另一種是面向客戶端的JavaScript。
此外,你還需要使用如HTML和CSS的標(biāo)記語言,來制作網(wǎng)站的外觀,還要確保服務(wù)器能夠運行起來(我建議初學(xué)者可以試試Heroku)。這還不是全部。每?一種編程語言都有一堆的數(shù)據(jù)庫需要掌握,每個API都有它自己的文檔。你還需要掌握數(shù)據(jù)庫的工作原理。這還不包括沒有學(xué)過的Git和測試驅(qū)動開發(fā)?(TDD)。
我能理解那種不堪重負的感覺。但是種種困難都不能阻擋我前進的腳步。關(guān)鍵是要從小處著手,建立信心,以便能應(yīng)對更大的項目。慢慢的,你的學(xué)習(xí)進度會加快,你會為你自己消化吸收的速度所震驚。
不過編程讓人沮喪的是,app出現(xiàn)了問題卻一直找不到根源,我真是煩躁得都想扯自己的頭發(fā)。由于我們的app是構(gòu)建在其他人已經(jīng)寫好的源代碼的基礎(chǔ)上,所以任何一個地方都有可能產(chǎn)生bug。學(xué)會高效調(diào)試往往是很多人都低估了的技能。
懂得慶祝每一個小小的勝利也很重要。想想你終的app版本——這是一種精神的鼓勵。為了達到這個目標(biāo),你需要一步一個腳印扛過每一個低潮——有時候甚至都想放棄編碼了。好好記住我的話,你以后也會有很多次想要放棄的時候。
如果出現(xiàn)了這種想法,那么你的精神需要休息了。過會兒再來看看問題,想想異常所有可能的來源。也可以向周圍尋求幫助。并且當(dāng)你修復(fù)了這個bug的時候,小小地慶祝一番。然后再來個深呼吸,繼續(xù)干。
獲得社交關(guān)系上的幫助。
學(xué)習(xí)代碼不應(yīng)該是一種閉門造車的行為??梢宰稍兌械呐笥?。他們會教你一些在谷歌中搜不到的知識。加入相關(guān)內(nèi)容的同城群,有需要的時候可以尋求幫助。Stack?Overflow是個提問的好地方,并且你會發(fā)現(xiàn)你碰到的問題,你的前輩們早八百年前就給出答案了。像Airpair這類在線咨詢平臺,通過支付一定的費?用你就可以接觸那些頂尖的程序員(雖然我還沒有試過)。
結(jié)?對編程也能讓人受益。如果你的目標(biāo)是加入一個開發(fā)團隊,那可以假設(shè)自己是一個專業(yè)的編碼人員。每個團隊都有自己的方案、工作流程和工具套組,這些通常是由?那些穩(wěn)坐高級程序員寶座的人決定的。一開始可以先從和朋友們一起搞業(yè)余項目著手。如果你所在的是一家初創(chuàng)企業(yè),里面的開發(fā)團隊正在耐心地帶新人,那你也?可以參與到這個志愿活動中,協(xié)助寫一些代碼。
Ruby?on?Rails必勝。
學(xué)習(xí)代碼之前,我們先需要決定學(xué)習(xí)哪種編程語言。
對于我而言,我的決定并不是按照什么科學(xué)依據(jù)來的。初我選擇Python,是因為我看到大家將其視為“一種理想的初學(xué)語言”。后來我轉(zhuǎn)而投向Ruby的懷抱是因為我的一個同事熟悉它。這是由我的社交關(guān)系所決定的(見前一點)?,F(xiàn)在回想起來,總體來看還真是這樣。
除了能獲得很多幫助,Ruby也是干凈的語言之一,因此很容易閱讀和學(xué)習(xí)。同時,Rails有大量的插件,可以賦予app各種能力——如用戶認證、內(nèi)容管?理系統(tǒng)或管理儀表板——“開箱”即可使用,非常方便。功能齊全得讓人感覺構(gòu)建一個Rails程序就像是將幾個小的app擬合在一起一樣簡單。
所以,如果你的目標(biāo)是盡可能快速地設(shè)計出一個工作原型,那么Ruby?on?Rails就是通往目的地的門票。
管理期望。
想要通過寫代碼而晉升職位是需要時間的。如果你所在的是初創(chuàng)企業(yè),你想要通過提交一些前端代碼為自己增加籌碼,那么學(xué)習(xí)HTML、CSS和Git可能只需要?幾周時間就夠了。如果你是一位有志向的企業(yè)家,正試圖建立一個web應(yīng)用程序,那么學(xué)習(xí)必要的技能則取決于你有多少時間可用于學(xué)習(xí),而這有可能需要數(shù)個?月。所以要合理安排自己的期望,記住,一直努力總有看到黎明的那一刻。
下面是一些我想要分享的想法:
編程只是一個工具。
我總是需要考慮在學(xué)習(xí)編程的過程中我應(yīng)不應(yīng)該去學(xué)習(xí)其他東西,例如學(xué)習(xí)管理技能、設(shè)計原則,如何制作實物模型以及如何成為一個更好的記者。
這個問題很重要,在你開始編程之前就應(yīng)該想好,雖然我自己本身也沒有就此給出一個滿意的答案。哪怕我已經(jīng)學(xué)習(xí)了兩年,我有時候也會發(fā)現(xiàn)我現(xiàn)在的努力方向可能并不適合我的目標(biāo)。
假設(shè)你是一家初創(chuàng)企業(yè)的CEO,各種資源有限。學(xué)習(xí)編程對你而言可能并不如了解用戶體驗設(shè)計、用戶測試、數(shù)據(jù)分析和其他開發(fā)人員可能并不具備的技能等來得有用。極客營溫馨提示:你只要記住這一點,編程只是一個工具,是另一種打造成功產(chǎn)品的工具。