我2年學習程式設計的經驗總結

2015-06-22    分類:程式設計師人生、首頁精華1人評論發表於2015-06-22


有時候,我會覺得自己很厲害。比如我寫下自己的第一個指令碼並且成功執行的時候。又比如說在我部署我的第一個app給伺服器的時候。以及寫下我的第一個爬蟲來填充資料庫的那一瞬間。我感覺自己就像阿拉丁一樣,得到了一個無所不能的神燈。

程式設計就像毒品一樣,儘管一開始的針管有點疼,但是慢慢的我已經離不開它了。下面我將總結一下我這兩年學習編碼的經驗。

作為工程師的樂趣

就像很多技術人員一樣,我既著迷於矽谷又崇拜那些那些技術大腕。

這裡有一個非常有意思的變化——在不久以前,我還在一所大學唸書時,由於工程師給人的印象是缺乏時尚感和社交技巧,所以別人要是說我看上去像一個工程師——我會覺得非常尷尬。

當然現在聽上去很蠢,但是當我還在大學的時候,“矽谷”對我而言也只是一個地理名稱而已。

還有一件你可能不知道的事情——我曾經是一所中學的IT俱樂部的會長。我會使用HTML和Flash,在我的空餘時間喜歡玩Sim City 3000,並且建立了一個關於這個遊戲的網站。

在我大學的最後一年,社交網路開始展現頭角。我剛一畢業就作為高科技記者參加了新加坡的新興行業創業場景賽。


我所接觸的每一個人都表示了對程式碼的酷愛。不想成為高手的程式設計師,就不是好程式設計師。

學習程式碼的門檻也變得非常低。各種資源和文件,只要一個谷歌搜尋就全有了。

現在的程式碼學習儼然已經成為了一個產業,這也說明了一個事實,即好的工程師一直存在著缺口。

現在已經是2015年了。如果你也想為自己做一個新一年的程式設計技術提高計劃,那麼歡迎閱讀這篇文章。我從我個人的學習歷史總結出了以下這些真理:

你的過去決定了你如何學習編碼的方法。

我是在2012年底才學的程式設計——在我開始了我的第一份工作的一年多以後。這讓我處於嚴重的劣勢,如果我的目標是成為一個職業開發人員的話。

因為我可能需要和那些12歲就開始程式設計,剛剛新鮮出爐的畢業生同臺競技。他們的期望薪水會比較低,他們的關係承諾會比較少。我將不得不改變我的人生軌跡,並作出一定的犧牲來追逐這種職業生涯。

但是現在的情況是這樣的:我已經在媒體行業淫浸了很多年。甚至,我還蠻喜歡我當時的工作,工作中並沒有碰到什麼過不去的難關。總之我還沒有足夠的財力和動力能讓我轉而去投資一個全新的方向。

因此,我只能在我空閒的時間裡學習編碼,同時還要保證不能干擾到我的日常工作。犧牲掉我的空閒時間是很艱難的一個決定,但是我別無選擇。

在承諾之前,先理解你的最終目標。

學習程式碼可能對你的目標完全無用,也可能是不可缺少的。

如果你是一個學生,編碼可能會為你開闢更多的未來規劃,比如說,在你25歲的時候或許就能賺到一百萬美元。

如果你是一個對當前工作感到厭倦想要有所改變的年輕“專家”,在你已經累計了初期財富之後想要來點冒險的話,或許可以考慮一下程式設計,這將是一種更富有成效的職業生涯。

當然,程式設計可能並不適合那些已經在大公司就職需要養家餬口的CEO。不過如果你是一名年輕的高管並且希望能在一年內開辦自己的高科技企業,那麼學習程式設計就很有價值了,因為它能有助於你與開發人員親密協作或者自己建立產品。

你或許會說,學習編碼很難或者完全沒有必要。這當然是可以的,沒有人能強迫你。不過也有可能你學習的原因就只是想讓別人以為你也是很厲害的(很多新入行的喜劇演員往往是因為這種原因而去演喜劇),又或者你直截了當地表示你就是想程式設計。當然如果你的目標是想提高薪資收入,也成。

對我來說,上面這些原因或多或少都有:

目標結果我想讓人覺得我很厲害。(別噴我。)通過使用Ruby on Rails建立app,並通過利用各種API可以讓我的日常工作像作家和編輯一樣,這讓我覺得我很厲害很酷。很多人紛紛了離開這一行,但我堅持下來了,付出了不小的代價。不過,我也承認我現在的水平還不算高。挑戰自我。哇哦,我只想說,這真心是個大大的挑戰。我想知道web開發工作能否成為備選的職業發展新道路。可能不會。像其他職業一樣,程式設計涉及到很多類似於伺服器遷移、處理入侵者等等不愉快的任務。結合我對技術和媒體的愛好。圓滿完成。我想使用程式設計技術使得自己的效率更高。可能會實現吧。如果你認為我幹得好,請繼續閱讀:

一個接一個地開始專案。


說實話,編碼一點都不好玩。當然,編寫優雅的程式碼和修復bug是有收穫的,但是如果沒有最終產品,那這一切的努力就只能是付諸東流。

將你的程式設計之旅當作需要攀登的一系列高峰。登上一峰之後就攀爬下一峰。每一個專案都能讓我們學習到新的東西、修整舊的知識,一步一步地朝著我們的目標前進。下面是我解決的專案,按時間先後順序排列:
  • 文字遊戲。
  • 一個用於計數科技部落格標籤的Ruby指令碼,看看當前什麼話題比較流行。
  • 一個能抓取網站資訊並拷貝到另一個資料庫的Ruby指令碼。
  • 排序表格和柱狀圖。我將Ruby on Rails應用程式與D3.js——基於JavaScript的視覺化庫連線起來。
  • 一個Rails應用程式,將Wordpress掛鉤到谷歌分析API上以程式設計的方式生成內容。
  • 一個Rails應用程式,構建在緩衝API基礎上可以讓我重新在社交媒體上釋出內容。
  • 一個Rails應用程式,可在資料庫中填充連結。
  • Statsy,一個Rails應用程式,兼作檢索資料庫和以谷歌圖表為基礎的圖片製造商。
連續的專案會變得複雜。我一開始學習的是建立指令碼,然後是Rails。接著踏上了自己找專案的愉快旅程。正如一位程式設計師所寫的那樣:
“程式設計應該被當作是一種實實在在解決問題或者是更快解決問題的方法。在理解的基礎上進行深度的破解。這樣就有了學習的目的和動機了。程式設計是非常有意義的。但是很遺憾的是,很多人第一次接觸程式設計就是一堂乾巴巴的語法課(我就是如此)。我們只需要坐在那就可以了,不用回答,傻乎乎地聽著類似於天書一樣的言語。”

持之以恆,慶祝每一個小小的勝利。


如果你的目標是建立一個可正常使用的Web應用,一開始的時候難度並不大——就像Codecademy網站上面教授基礎內容一樣特別簡單。關於Ruby也有大量的資源可供你起步。

根據我的經驗,如果你想要建立一個完全成熟的web應用,你才會發現程式設計很難。為什麼呢?因為這時候你才知道你還有那麼多的東西需要學習。如果你正在學習的是Node.js,那麼你需要掌握的不是一種而是兩種程式語言:一種是伺服器端語言,另一種是面向客戶端的JavaScript。

此外,你還需要使用如HTML和CSS的標記語言,來製作網站的外觀,還要確保伺服器能夠執行起來(我建議初學者可以試試Heroku)。這還不是全部。每一種程式語言都有一堆的資料庫需要掌握,每個API都有它自己的文件。你還需要掌握資料庫的工作原理。這還不包括沒有學過的Git和測試驅動開發(TDD)。

我能理解那種不堪重負的感覺。但是種種困難都不能阻擋我前進的腳步。關鍵是要從小處著手,建立信心,以便能應對更大的專案。慢慢的,你的學習進度會加快,你會為你自己消化吸收的速度所震驚。

不過程式設計最讓人沮喪的是,app出現了問題卻一直找不到根源,我真是煩躁得都想扯自己的頭髮。由於我們的app是構建在其他人已經寫好的原始碼的基礎上,所以任何一個地方都有可能產生bug。學會高效除錯往往是很多人都低估了的技能。

懂得慶祝每一個小小的勝利也很重要。想想你最終的app版本——這是一種精神的鼓勵。為了達到這個目標,你需要一步一個腳印扛過每一個低潮——有時候甚至都想放棄編碼了。好好記住我的話,你以後也會有很多次想要放棄的時候。

如果出現了這種想法,那麼你的精神需要休息了。過會兒再來看看問題,想想異常所有可能的來源。也可以向周圍尋求幫助。並且當你修復了這個bug的時候,小小地慶祝一番。然後再來個深呼吸,繼續幹。

獲得社交關係上的幫助。

學習程式碼不應該是一種閉門造車的行為。可以諮詢懂行的朋友。他們會教你一些在谷歌中搜不到的知識。加入相關內容的同城群,有需要的時候可以尋求幫助。Stack Overflow是個提問的好地方,並且你會發現你碰到的問題,你的前輩們早八百年前就給出答案了。像Airpair這類線上諮詢平臺,通過支付一定的費用你就可以接觸那些頂尖的程式設計師(雖然我還沒有試過)。

結對程式設計也能讓人受益。如果你的目標是加入一個開發團隊,那可以假設自己是一個專業的編碼人員。每個團隊都有自己的方案、工作流程和工具套組,這些通常是由那些穩坐最高階程式設計師寶座的人決定的。一開始可以先從和朋友們一起搞業餘專案著手。如果你所在的是一家初創企業,裡面的開發團隊正在耐心地帶新人,那你也可以參與到這個志願活動中,協助寫一些程式碼。

Ruby on Rails必勝。

學習程式碼之前,我們先需要決定學習哪種程式語言。

對於我而言,我的決定並不是按照什麼科學依據來的。最初我選擇Python,是因為我看到大家將其視為“一種理想的初學語言”。後來我轉而投向Ruby的懷抱是因為我的一個同事熟悉它。這是由我的社交關係所決定的(見前一點)。現在回想起來,總體來看還真是這樣。

除了能獲得很多幫助,Ruby也是最乾淨的語言之一,因此很容易閱讀和學習。同時,Rails有大量的外掛,可以賦予app各種能力——如使用者認證、內容管理系統或管理儀表板——“開箱”即可使用,非常方便。功能齊全得讓人感覺構建一個Rails程式就像是將幾個小的app擬合在一起一樣簡單。

所以,如果你的目標是儘可能快速地設計出一個工作原型,那麼Ruby on Rails就是通往目的地的門票。

管理期望。

想要通過寫程式碼而晉升職位是需要時間的。如果你所在的是初創企業,你想要通過提交一些前端程式碼為自己增加籌碼,那麼學習HTML、CSS和Git可能只需要幾周時間就夠了。如果你是一位有志向的企業家,正試圖建立一個web應用程式,那麼學習必要的技能則取決於你有多少時間可用於學習,而這有可能需要數個月。所以要合理安排自己的期望,記住,一直努力總有看到黎明的那一刻。

下面是一些我想要分享的想法:

程式設計只是一個工具。

我總是需要考慮在學習程式設計的過程中我應不應該去學習其他東西,例如學習管理技能、設計原則,如何製作實物模型以及如何成為一個更好的記者。

這個問題很重要,在你開始程式設計之前就應該想好,雖然我自己本身也沒有就此給出一個滿意的答案。哪怕我已經學習了兩年,我有時候也會發現我現在的努力方向可能並不適合我的目標。

假設你是一家初創企業的CEO,各種資源有限。學習程式設計對你而言可能並不如瞭解使用者體驗設計、使用者測試、資料分析和其他開發人員可能並不具備的技能等來得有用。你只要記住這一點,程式設計只是一個工具,是另一種打造成功產品的工具。

永遠不認輸。

我會很自然地規避風險,所以我習慣於一上手就想好另一個備用計劃。我會問自己:如果我放棄這個web應用的話,會發生什麼事情?我的回答是:
“至少我體驗到了它的樣子。”
“至少我知道這不適合我。”
“至少我更加理解開發人員,可以與他們更好地協作。”
“至少我學會了注重細節,並獲得了更好地解決問題的能力。”
“至少我的簡歷上又多了一條新的經驗。”
最後我往往能做到魚與熊掌兼得的結果(鼓掌)。
評論(1)

相關文章