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