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