想成為一名頂級程式設計師,17歲開始學程式設計晚麼?

小胖妞妞發表於2015-04-03

有位年輕的童鞋在 Quora 提問,“如果想成為一名頂級程式設計師,17歲開始學程式設計晚麼?”FB 前程式設計師 Don Pinkus 針對這個問題,分享他從 22 歲開始起學習程式設計的經歷。


年齡太大了,真的不能當工程師麼?

我22歲開始學習程式設計,以下是我的學習“大事記”:

  • 22歲 – 我學了什麼是if條件判斷語句。
  • 24歲 – 我在Fackbook找到了一份分析師職位的工作
  • 25歲 – 我在Facebook的職位變成了工程師
  • 26歲 – 我業餘時間做了個小專案,賺到一大筆錢,我在Facebook拿死工資是永遠賺不了這麼多錢,於是我離開了Fackbook,用這筆錢開了一家創業公司。通過Y-combinator(譯者注[1]),我從一家頂級風投公司獲得一大筆投資。

我今年正是26歲。

我很幸運,但我並不特別。如果你也全身心地投入到一件事中去,你也可以做到這樣。接下來,我將要告訴你我的故事,希望這能激勵你去做你感興趣的事,永遠不要因為覺得“太晚了”而放棄換一份新工作,放棄學習新知識。

這是我之前針對Quora裡某個問題的回答,後來我郵箱裡收到了50多封郵件,請求我把我的故事分享給大家(貌似這些郵件都是來自印度的大學生)

如果你只是想看看我關於如何學習程式設計的建議,那你可以直接跳到文章結尾。

如果你要問我問題,我的Twitter賬號是@whatsdonisdon。

更詳細的“大事記”:

2007年(18歲):成為瓦薩學院(Vassar College)醫學預科班的一名大一新生。
與其他新生一樣,我告訴自己以後就是醫學預科班的一員了。

2008年(19歲):大二,把專業換成了經濟學。
這一年,我喝了好多啤酒,玩了滑雪,在經濟學中學到了許多有趣的知識。

2009年(20歲):大三,發現教科書很多知識值得一學。
這一年,我染上了mono病毒,大部分時間都躺在床上,不能上課。所以我只好看書,看著看著發現能從書中學到很多東西,真希望我在畢業前能把它們統統學完。

2010年5月(21歲):大四,總算取得了好成績。
好吧,我寫得太誇張了。過去,我的成績也算是體面,但這一年我第一次得了全優(straight A)!(這是我16年學習生涯中的頭一遭…)

大四之前,我一週只有一天花在學習或工作上。我想出一個好辦法,這樣我可以花最少的時間卻能成績良好(B)。事後想想,這很重要。因為我無情地把我的工作放在優先位置,所以我不得不花最少的時間應付考試,這樣我才能騰出更多時間做其他事情。

如今,我從書中學到了很多,再加上我有能力分清工作的主次,終於得了優秀(A)。

2010年7月(22歲):大學畢業。開始在Morningstar公司工作,職位是資料分析師。

我成為了Morningstar這家金融公司的一名資料分析師。當時的我完全不會寫程式碼。

 

2010年8月(22歲):為Morningstar公司的新主頁出了個主意,他們挺喜歡的。
所在專案:FindData

當時,我提出為公司開發個新主頁的想法,他們很喜歡,因此給了我一個5人團隊來實現我的想法,這5個人都是新招的兼職員工。

這是我第一次“管理”一個專案,或者說,是我第一次帶領別人跟我一起實現自己的想法。這對我來說十分困難,所以我犯了很多錯。其中最嚴重的一個是我沒有聽從團隊的建議。如果你只知道一條關於如何管理一個創意團隊,那這一條無疑是:把自主權交給你的團隊,而你只需要聆聽。你的時間應該花在為他們提供所需要的一切(因為你聽他們的),以及其它他們沒時間完成的工作,通常是與一大波潛在客戶溝通。

我每每有個新想法,我總是無法自己來實現,因此只能依靠我的團隊來實現我的產品。但他們是兼職員工,除了我的專案外,還要完成自己的本職工作,可我卻希望專案能進展得快一些。於是我開始學習程式設計。

 

2010年12月(22歲):開始學習程式設計
所在專案:FindData

我開始學習HTML、CSS和Javascript,這三個術語可以理解成構建一個網頁的三種“語言”。從部落格,到普通的網站,再到Facebook —— 所有這些都是用這三種語言寫成的。如果我學會了它們,我就能自己完成我的產品了。

我從www.w3schools.com開始學習。在這個網站上,我學會了HTML和CSS,併為我老爸的公司開發了公司主頁。這個主頁很挫,我老爸沒用————真是個明智的選擇。

接著我去lynda.com,學了jQuery,它本質上就是javascript。現在我可以為一個網站做出互動式原型了。

在lynda.com上,我又學了PHP和MySQL。這樣,我就可以將資料存在資料庫中,我的網站有了“後端”(backend)。到目前為止,我總算修成了“全能型”碼農,可以自己搭建一個完整的web應用了。

兩個月內,我從對程式設計一無所知,到能夠搭建一個完整的web應用。雖然這個web應用看上去不夠好,但至少能用了。

 

2011年(23歲):Morningstar沒有將我的專案上線。我搭建了4個網站。
所在專案:FindData、BarCraft、Morningstar圖形互動、Amuse.me

Morningstar不喜歡我的產品(FindData)。他們沒有上線使用。事後想來,這是個明智的選擇,如果是我,我也不會上線使用這個產品。

但我對這事耿耿於懷。我轉到另一個團隊,在新團隊裡,我每天的工作都跟Excel打交道。我不喜歡這樣的工作。於是我又回到了以前的習慣:每週拿出一天把本職工作做完,另外四天都花在程式設計上。五個月左右的時間裡,我幾乎每個月都搭建出一個新的網站。

 

2012年(24歲):12次面試後,成為Facebook的一名分析師。收穫很多,也搭建了更多網站。
所在專案:Tickur.com、Lookgr.am、Roomidex.com、Searchnwork.com

Facebook的標準面試流程並不需要12輪面試。我最初申請的是專案經理的職位,但幾輪面試下來,我被拒了。

不過資料分析團隊對我挺有興趣。我著迷於消費類網站,懂數學,而且有些許金融行業背景。經過了幾輪面試之後,他們錄用了我。

Facebook的那段時間,整個工作環境迫使我的內心不斷成長。因為我周圍的同事全都比我聰明,我不得不盡自己最大的努力,讓自己不斷前進。曾經的大學生活以某種方式讓我的想法達到了另一個層次,如今Fackbook再一次推動著我前進。

我不能胡亂給出一個問題的答案,並讓同事們接受培訓,因為他們都太懶了,不願意去思考或是評判我的邏輯是否正確。如果我給出了錯誤的答案,我要馬上自己糾正它,如果我給出了正確的答案,我就應該順著這個思路繼續想下去。就這樣,我成長了。

我還學到了世界上最優秀的面向個人的科技公司是如何運作的。我發現,當你看到Mark Zuckerberg是如何做決策時,像“資料驅動(data driven)”、“最小化可行產品(minimum viable product)”這些流行術語根本就不起作用。我在報紙和部落格上讀了很多關於公司的介紹,還參加了公司的每週五例行的與Mark的答疑互動活動,並從中探尋真相(不管怎麼說,這個真相至少是來自專家的觀點)。

因此,白天,我學著如何運作一款產品、一個專案、甚至一個公司。

晚上,我繼續寫程式碼,實現自己的想法。現在想來,當時寫的程式碼爛得很,但我的編碼水平不斷地在進步,從中吸取了很多經驗教訓,構建網站的速度也越來越快了。

 

2013年(25歲):成為一名Fackbook的工程師
所在專案:DataFinder(Fackbook的專案)

我不是個優秀的工程師,雖然我知道什麼是“繼承(inheritance)”,在構造個人專案時,也能將PHP用得很好,但僅此而已。我不知道什麼是“排序(sort)”,並且對演算法和資料結構一無所知(不僅當時是這樣,現在也還是…)。

我只知道針對分析團隊使用的內部資料工具(基於網站)可以進行哪些改進,並且我很清楚該如何做。因此我以工程師的身份加入了資料工具團隊。

雖然我寫程式碼的速度可能只有科班出身的工程師的十分之一,但由於我之前做過分析師,而且在互動及視覺設計方面能力不錯,因此團隊內部給了我較高的評價。

 

2013年4月:開始構建Blockspring.com
所在專案:Blockspring

我業餘時間跟我的一個高中同學一起合作一個小專案。他是個聰明而且努力的人(我只是委婉地說說而已:D),比我還更不算個工程師,因為他只懂一些基礎。那時候他剛辭了諮詢師的工作,開始創業。

那時候我已經接過很多私活了,但Paul是我真正開始建立一個公司時的第一個共同創始人。

我們專案中的其他共同創始人都是兼職的,Paul是第一個全職加入的。

其他幾個共同創始人總喜歡就著網站的著色,以及是否需要加入一些小的功能而爭論,這花費了我們大量的時間和精力,實際上我希望在我構造網站的時候,他們去做營銷的工作。Paul每個月都邀請許多人訪問我們的網站,同時他還自學編碼,並幫我一起構建網站。

我並不是想說我的第一批共同創始人很糟糕,我認為主要是我不知道如何處理與他們之間的關係,也不知道怎麼為自己設定一個預期目標。當你擁有一家創業公司時,你要做的最重要的事之一就是為公司設定好預期目標及所有權。

我們完成了Blockspring專案。

2014年3月(26歲):為Blockspring.com找到了個客戶
我們試著向許多公司推銷這個產品,但都失敗了。

我們產品介紹公開在部落格上,一個來自紐約的聰明的傢伙認為這個產品有潛力。於是我們飛往紐約去做推銷。但我們還是沒能將產品賣給他,不過他答應讓我們在紐約呆上一週繼續開發Blockspring,這一週的費用由他來承擔。

我當時還是Facebook的全職員工,所以以“有急事”為由請了一週的假,呆在紐約繼續開發Blockspring。

業餘兼職並不違反Fackbook的規定。每個工程師都有自己的業餘專案或者興趣愛好。如果你想留住那些有創業精神的員工,你就得讓他們追求他們的“雄心壯志”,同時你還得把你的公司環境打造得更有吸引力,讓他們覺得相比兼職,他們更喜歡這份本職工作 ———— 是不是覺得這種做法太瘋狂了?去Fackbook工作,體驗一下吧!

但無論是我推銷Blockspring,或是花時間繼續擴充套件它的功能,都分散了我的精力,沒法集中於Facebook的本職工作,我認為這無論對公司還是對團隊都不公平。如果我還想繼續開發Blockspring(雖然這個網站幾乎沒有使用者,而且只有一個潛在的客戶),我就不得不離開Facebook(雖然Facebook給我提供了全世界最好的工程師的職位,高額的薪水和福利,還讓我交到了很多好朋友,諸多種種…)

於是,我離開了Fackbook。

2014年6月:Y-Combinator公司
我們加入了Y-Combinator公司,這家公司為創業公司進行估值,並提供全世界最好的條件加速發展。

我們一共工作了三個月,每天工作16個小時。

這種方式可一點兒也沒意思。有些校友稱之為“高壓鍋”,這算是最不誇張的形容。大多數人在一個專案上連續工作兩天就會感到厭煩了。在加入Y-Combinator之初,我們在白板上寫下了一個數字:85。這表示從那時起至產品演示,一共有85天時間。用85天來擴充套件產品功能。我們做累了睡(算是睡了吧…),睡起了做,跟各自的女票說她是全世界最體諒我們的人,然後再接著幹活。

85天過去了,我們向大家演示了我們的產品,也因此獲得了投資。

 

2014年8月:回到正常生活

我們結束了與Y-combinator的合作,搬到了舊金山的新辦公室。我開始把自己的週末從Blockspring專案中解放出來。這種狀態大約持續了一個月,現在,我又開始週末也寫程式碼了,實現一些與Blockspring有關的功能,學習影象、動畫、部落格技術,看看人們在網上都是如何交流的,等等。

這就是我的全部經歷。

總體說來,我比較擅長於吸引人才加入我的公司,並讓他們對我的想法感興趣。同時,我還能自學程式設計,這意味著,我能做到一邊促進自己的事業發展,顯露自身的管理才華,一邊促使我提高自身的執行能力。

如果你現在就希望自己成為一名工程師,那麼以下就是你的任務清單:

1. 到w3schools.com網站上學習HTML和CSS。
2. 思考一下你想做一個什麼樣的網站。已經有想法了?很好,那麼開始實現吧,不管別人告訴你這個想法有多麼困難。
3. 在你的電腦上開啟一個文字編輯器(不是Word),並儲存成index.html。把你從w3schools.com學到了HTML和CSS的知識應用到的你網站上,試著在頁面上顯示些內容,看看你能實現多少功能。
4. 到lynda.com網站上,看一些關於HTML和CSS的新手視訊。
5. 儘量往index.html檔案中加你所想的內容,仿照你喜歡的網頁上的配色。如果你遇到無法解決的難題,到“jsfiddle.com”網站上測試你的程式碼,並把問題貼到StackOverflow上尋求解答。
6. 到lynda.com網站上看一些關於jQuery的新手視訊。引入這個技術將使你的頁面互動變得非常簡單。
7. 在index.html檔案中加入jquery,這會讓你的頁面使用起來像個真正的網頁,你可以在上面虛擬一些互動。至此,你的網站原型就算構建好了。
8. 把index.html轉成Rails專案。現在你可以算是一個全能型的網頁開發者了,雖然技術還很挫,但至少你已經會做了。你所需要的是努力提升自己的水平。
9. 繼續實現你的專案,遇到難題找google,或者把問題放到StackOverflow上求助。你一定會為自己的飛速進步吃驚的。
10. 繼續構建你的網站。

你也許會說:“可這個清單寫得實在太不具體了,而且聽說w3schools差得很,我朋友告訴我程式碼只能在GO上寫。”

我將這麼回答你:“我的小乖乖,當你成為一名工程師時,你最厲害之處應該是能獨立解決問題。因此,跟著這個任務清單去做,是將你帶上一條學習曲線。順著路線走,你會真正學到如何把自己的想法構造成產品,這會讓你對自己更加有信心,相信自己無所不能。”

好了,我說完了,可以把這一大堆廢話貼到Quora上了…


譯者注:

[1]Y Combinator(簡稱YC)成立於2005年3月,是一家以投資種子階段初創公司為業務的創投公司。與傳統的創投公司不同,Y Combinator比較像一個初創公司團隊的“孵化器”,並以孕育創業公司為目標的“訓練營”;他們不只會向初創公司提供一定金額的種子基金,而且會給予他們創業建議,以及每年舉行兩次,每次為期三個月的“課程”,以讓參加了的創業團隊增強他們的執行能力。Y Combinator會收取初創公司的總資產淨值的平均6個百分比的資金作為回報。(解釋來自維基百科)

相關文章