想成為一名頂級(jí)程序員,17歲開始學(xué)編程晚么?
年齡太大了,真的不能當(dāng)工程師么?
我22歲開始學(xué)習(xí)編程,以下是我的學(xué)習(xí)“大事記”:
-
22歲 – 我學(xué)了什么是if條件判斷語句。
-
24歲 – 我在Fackbook找到了一份分析師職位的工作
-
25歲 – 我在Facebook的職位變成了工程師
-
26歲 – 我業(yè)余時(shí)間做了個(gè)小項(xiàng)目,賺到一大筆錢,我在Facebook拿死工資是永遠(yuǎn)賺不了這么多錢,于是我離開了Fackbook,用這筆錢開了一家創(chuàng)業(yè)公司。通過Y-combinator(譯者注[1]),我從一家***風(fēng)投公司獲得一大筆投資。
我今年正是26歲。
我很幸運(yùn),但我并不特別。如果你也全身心地投入到一件事中去,你也可以做到這樣。接下來,我將要告訴你我的故事,希望這能激勵(lì)你去做你感興趣的事,永遠(yuǎn)不要因?yàn)橛X得“太晚了”而放棄換一份新工作,放棄學(xué)習(xí)新知識(shí)。
這是我之前針對(duì)Quora里某個(gè)問題的回答,后來我郵箱里收到了50多封郵件,請(qǐng)求我把我的故事分享給大家(貌似這些郵件都是來自印度的大學(xué)生)
如果你只是想看看我關(guān)于如何學(xué)習(xí)編程的建議,那你可以直接跳到文章結(jié)尾。
如果你要問我問題,我的Twitter賬號(hào)是@whatsdonisdon。
更詳細(xì)的“大事記”:
2007年(18歲):成為瓦薩學(xué)院(Vassar College)醫(yī)學(xué)預(yù)科班的一名大一新生。
與其他新生一樣,我告訴自己以后就是醫(yī)學(xué)預(yù)科班的一員了。
2008年(19歲):大二,把專業(yè)換成了經(jīng)濟(jì)學(xué)。
這一年,我喝了好多啤酒,玩了滑雪,在經(jīng)濟(jì)學(xué)中學(xué)到了許多有趣的知識(shí)。
2009年(20歲):大三,發(fā)現(xiàn)教科書很多知識(shí)值得一學(xué)。
這一年,我染上了mono病毒,大部分時(shí)間都躺在床上,不能上課。所以我只好看書,看著看著發(fā)現(xiàn)能從書中學(xué)到很多東西,真希望我在畢業(yè)前能把它們統(tǒng)統(tǒng)學(xué)完。
2010年5月(21歲):大四,總算取得了好成績。
好吧,我寫得太夸張了。過去,我的成績也算是體面,但這一年我***次得了全優(yōu)(straight A)?。ㄟ@是我16年學(xué)習(xí)生涯中的頭一遭…)
大四之前,我一周只有一天花在學(xué)習(xí)或工作上。我想出一個(gè)好辦法,這樣我可以花最少的時(shí)間卻能成績良好(B)。事后想想,這很重要。因?yàn)槲覠o情地把我的工作放在優(yōu)先位置,所以我不得不花最少的時(shí)間應(yīng)付考試,這樣我才能騰出更多時(shí)間做其他事情。
如今,我從書中學(xué)到了很多,再加上我有能力分清工作的主次,終于得了優(yōu)秀(A)。
2010年7月(22歲):大學(xué)畢業(yè)。開始在Morningstar公司工作,職位是數(shù)據(jù)分析師。
我成為了Morningstar這家金融公司的一名數(shù)據(jù)分析師。當(dāng)時(shí)的我完全不會(huì)寫代碼。
2010年8月(22歲):為Morningstar公司的新主頁出了個(gè)主意,他們挺喜歡的。
所在項(xiàng)目:FindData
當(dāng)時(shí),我提出為公司開發(fā)個(gè)新主頁的想法,他們很喜歡,因此給了我一個(gè)5人團(tuán)隊(duì)來實(shí)現(xiàn)我的想法,這5個(gè)人都是新招的兼職員工。
這是我***次“管理”一個(gè)項(xiàng)目,或者說,是我***次帶領(lǐng)別人跟我一起實(shí)現(xiàn)自己的想法。這對(duì)我來說十分困難,所以我犯了很多錯(cuò)。其中最嚴(yán)重的一個(gè)是我 沒有聽從團(tuán)隊(duì)的建議。如果你只知道一條關(guān)于如何管理一個(gè)創(chuàng)意團(tuán)隊(duì),那這一條無疑是:把自主權(quán)交給你的團(tuán)隊(duì),而你只需要聆聽。你的時(shí)間應(yīng)該花在為他們提供所 需要的一切(因?yàn)槟懵犓麄兊模约捌渌麄儧]時(shí)間完成的工作,通常是與一大波潛在客戶溝通。
我每每有個(gè)新想法,我總是無法自己來實(shí)現(xiàn),因此只能依靠我的團(tuán)隊(duì)來實(shí)現(xiàn)我的產(chǎn)品。但他們是兼職員工,除了我的項(xiàng)目外,還要完成自己的本職工作,可我卻希望項(xiàng)目能進(jìn)展得快一些。于是我開始學(xué)習(xí)編程。
2010年12月(22歲):開始學(xué)習(xí)編程
所在項(xiàng)目:FindData
我開始學(xué)習(xí)HTML、CSS和Javascript,這三個(gè)術(shù)語可以理解成構(gòu)建一個(gè)網(wǎng)頁的三種“語言”。從博客,到普通的網(wǎng)站,再到Facebook —— 所有這些都是用這三種語言寫成的。如果我學(xué)會(huì)了它們,我就能自己完成我的產(chǎn)品了。
我從www.w3schools.com開始學(xué)習(xí)。在這個(gè)網(wǎng)站上,我學(xué)會(huì)了HTML和CSS,并為我老爸的公司開發(fā)了公司主頁。這個(gè)主頁很挫,我老爸沒用————真是個(gè)明智的選擇。
接著我去lynda.com,學(xué)了jQuery,它本質(zhì)上就是javascript。現(xiàn)在我可以為一個(gè)網(wǎng)站做出交互式原型了。
在lynda.com上,我又學(xué)了PHP和MySQL。這樣,我就可以將數(shù)據(jù)存在數(shù)據(jù)庫中,我的網(wǎng)站有了“后端”(backend)。到目前為止,我總算修成了“全能型”碼農(nóng),可以自己搭建一個(gè)完整的web應(yīng)用了。
兩個(gè)月內(nèi),我從對(duì)編程一無所知,到能夠搭建一個(gè)完整的web應(yīng)用。雖然這個(gè)web應(yīng)用看上去不夠好,但至少能用了。
2011年(23歲):Morningstar沒有將我的項(xiàng)目上線。我搭建了4個(gè)網(wǎng)站。
所在項(xiàng)目:FindData、BarCraft、Morningstar圖形交互、Amuse.me
Morningstar不喜歡我的產(chǎn)品(FindData)。他們沒有上線使用。事后想來,這是個(gè)明智的選擇,如果是我,我也不會(huì)上線使用這個(gè)產(chǎn)品。
但我對(duì)這事耿耿于懷。我轉(zhuǎn)到另一個(gè)團(tuán)隊(duì),在新團(tuán)隊(duì)里,我每天的工作都跟Excel打交道。我不喜歡這樣的工作。于是我又回到了以前的習(xí)慣:每周拿出一天把本職工作做完,另外四天都花在編程上。五個(gè)月左右的時(shí)間里,我?guī)缀趺總€(gè)月都搭建出一個(gè)新的網(wǎng)站。
2012年(24歲):12次面試后,成為Facebook的一名分析師。收獲很多,也搭建了更多網(wǎng)站。
所在項(xiàng)目:Tickur.com、Lookgr.am、Roomidex.com、Searchnwork.com
Facebook的標(biāo)準(zhǔn)面試流程并不需要12輪面試。我最初申請(qǐng)的是項(xiàng)目經(jīng)理的職位,但幾輪面試下來,我被拒了。
不過數(shù)據(jù)分析團(tuán)隊(duì)對(duì)我挺有興趣。我著迷于消費(fèi)類網(wǎng)站,懂?dāng)?shù)學(xué),而且有些許金融行業(yè)背景。經(jīng)過了幾輪面試之后,他們錄用了我。
Facebook的那段時(shí)間,整個(gè)工作環(huán)境迫使我的內(nèi)心不斷成長。因?yàn)槲抑車耐氯急任衣斆鳎也坏貌槐M自己***的努力,讓自己不斷前進(jìn)。曾經(jīng)的大學(xué)生活以某種方式讓我的想法達(dá)到了另一個(gè)層次,如今Fackbook再一次推動(dòng)著我前進(jìn)。
我不能胡亂給出一個(gè)問題的答案,并讓同事們接受培訓(xùn),因?yàn)樗麄兌继珣辛耍辉敢馊ニ伎蓟蚴窃u(píng)判我的邏輯是否正確。如果我給出了錯(cuò)誤的答案,我要馬上自己糾正它,如果我給出了正確的答案,我就應(yīng)該順著這個(gè)思路繼續(xù)想下去。就這樣,我成長了。
我還學(xué)到了世界上***秀的面向個(gè)人的科技公司是如何運(yùn)作的。我發(fā)現(xiàn),當(dāng)你看到Mark Zuckerberg是如何做決策時(shí),像“數(shù)據(jù)驅(qū)動(dòng)(data driven)”、“最小化可行產(chǎn)品(minimum viable product)”這些流行術(shù)語根本就不起作用。我在報(bào)紙和博客上讀了很多關(guān)于公司的介紹,還參加了公司的每周五例行的與Mark的答疑互動(dòng)活動(dòng),并從中 探尋真相(不管怎么說,這個(gè)真相至少是來自專家的觀點(diǎn))。
因此,白天,我學(xué)著如何運(yùn)作一款產(chǎn)品、一個(gè)項(xiàng)目、甚至一個(gè)公司。
晚上,我繼續(xù)寫代碼,實(shí)現(xiàn)自己的想法。現(xiàn)在想來,當(dāng)時(shí)寫的代碼爛得很,但我的編碼水平不斷地在進(jìn)步,從中吸取了很多經(jīng)驗(yàn)教訓(xùn),構(gòu)建網(wǎng)站的速度也越來越快了。
2013年(25歲):成為一名Fackbook的工程師
所在項(xiàng)目:DataFinder(Fackbook的項(xiàng)目)
我不是個(gè)優(yōu)秀的工程師,雖然我知道什么是“繼承(inheritance)”,在構(gòu)造個(gè)人項(xiàng)目時(shí),也能將PHP用得很好,但僅此而已。我不知道什么是“排序(sort)”,并且對(duì)算法和數(shù)據(jù)結(jié)構(gòu)一無所知(不僅當(dāng)時(shí)是這樣,現(xiàn)在也還是…)。
我只知道針對(duì)分析團(tuán)隊(duì)使用的內(nèi)部數(shù)據(jù)工具(基于網(wǎng)站)可以進(jìn)行哪些改進(jìn),并且我很清楚該如何做。因此我以工程師的身份加入了數(shù)據(jù)工具團(tuán)隊(duì)。
雖然我寫代碼的速度可能只有科班出身的工程師的十分之一,但由于我之前做過分析師,而且在交互及視覺設(shè)計(jì)方面能力不錯(cuò),因此團(tuán)隊(duì)內(nèi)部給了我較高的評(píng)價(jià)。
2013年4月:開始構(gòu)建Blockspring.com
所在項(xiàng)目:Blockspring
我業(yè)余時(shí)間跟我的一個(gè)高中同學(xué)一起合作一個(gè)小項(xiàng)目。他是個(gè)聰明而且努力的人(我只是委婉地說說而已:D),比我還更不算個(gè)工程師,因?yàn)樗欢恍┗A(chǔ)。那時(shí)候他剛辭了咨詢師的工作,開始創(chuàng)業(yè)。
那時(shí)候我已經(jīng)接過很多私活了,但Paul是我真正開始建立一個(gè)公司時(shí)的***個(gè)共同創(chuàng)始人。
我們項(xiàng)目中的其他共同創(chuàng)始人都是兼職的,Paul是***個(gè)全職加入的。
其他幾個(gè)共同創(chuàng)始人總喜歡就著網(wǎng)站的著色,以及是否需要加入一些小的功能而爭論,這花費(fèi)了我們大量的時(shí)間和精力,實(shí)際上我希望在我構(gòu)造網(wǎng)站的時(shí)候,他們?nèi)プ鰻I銷的工作。Paul每個(gè)月都邀請(qǐng)?jiān)S多人訪問我們的網(wǎng)站,同時(shí)他還自學(xué)編碼,并幫我一起構(gòu)建網(wǎng)站。
我并不是想說我的***批共同創(chuàng)始人很糟糕,我認(rèn)為主要是我不知道如何處理與他們之間的關(guān)系,也不知道怎么為自己設(shè)定一個(gè)預(yù)期目標(biāo)。當(dāng)你擁有一家創(chuàng)業(yè)公司時(shí),你要做的最重要的事之一就是為公司設(shè)定好預(yù)期目標(biāo)及所有權(quán)。
我們完成了Blockspring項(xiàng)目。
2014年3月(26歲):為Blockspring.com找到了個(gè)客戶
我們?cè)囍蛟S多公司推銷這個(gè)產(chǎn)品,但都失敗了。
我們產(chǎn)品介紹公開在博客上,一個(gè)來自紐約的聰明的家伙認(rèn)為這個(gè)產(chǎn)品有潛力。于是我們飛往紐約去做推銷。但我們還是沒能將產(chǎn)品賣給他,不過他答應(yīng)讓我們?cè)诩~約呆上一周繼續(xù)開發(fā)Blockspring,這一周的費(fèi)用由他來承擔(dān)。
我當(dāng)時(shí)還是Facebook的全職員工,所以以“有急事”為由請(qǐng)了一周的假,呆在紐約繼續(xù)開發(fā)Blockspring。
業(yè)余兼職并不違反Fackbook的規(guī)定。每個(gè)工程師都有自己的業(yè)余項(xiàng)目或者興趣愛好。如果你想留住那些有創(chuàng)業(yè)精神的員工,你就得讓他們追求他們的 “雄心壯志”,同時(shí)你還得把你的公司環(huán)境打造得更有吸引力,讓他們覺得相比兼職,他們更喜歡這份本職工作 ———— 是不是覺得這種做法太瘋狂了?去Fackbook工作,體驗(yàn)一下吧!
但無論是我推銷Blockspring,或是花時(shí)間繼續(xù)擴(kuò)展它的功能,都分散了我的精力,沒法集中于Facebook的本職工作,我認(rèn)為這無論對(duì)公 司還是對(duì)團(tuán)隊(duì)都不公平。如果我還想繼續(xù)開發(fā)Blockspring(雖然這個(gè)網(wǎng)站幾乎沒有用戶,而且只有一個(gè)潛在的客戶),我就不得不離開 Facebook(雖然Facebook給我提供了全世界***的工程師的職位,高額的薪水和福利,還讓我交到了很多好朋友,諸多種種…)
于是,我離開了Fackbook。
2014年6月:Y-Combinator公司
我們加入了Y-Combinator公司,這家公司為創(chuàng)業(yè)公司進(jìn)行估值,并提供全世界***的條件加速發(fā)展。
我們一共工作了三個(gè)月,每天工作16個(gè)小時(shí)。
這種方式可一點(diǎn)兒也沒意思。有些校友稱之為“高壓鍋”,這算是最不夸張的形容。大多數(shù)人在一個(gè)項(xiàng)目上連續(xù)工作兩天就會(huì)感到厭煩了。在加入Y- Combinator之初,我們?cè)诎装迳蠈懴铝艘粋€(gè)數(shù)字:85。這表示從那時(shí)起至產(chǎn)品演示,一共有85天時(shí)間。用85天來擴(kuò)展產(chǎn)品功能。我們做累了睡(算 是睡了吧…),睡起了做,跟各自的女票說她是全世界最體諒我們的人,然后再接著干活。
85天過去了,我們向大家演示了我們的產(chǎn)品,也因此獲得了投資。
2014年8月:回到正常生活
我們結(jié)束了與Y-combinator的合作,搬到了舊金山的新辦公室。我開始把自己的周末從 Blockspring項(xiàng)目中解放出來。這種狀態(tài)大約持續(xù)了一個(gè)月,現(xiàn)在,我又開始周末也寫代碼了,實(shí)現(xiàn)一些與Blockspring有關(guān)的功能,學(xué)習(xí)圖 像、動(dòng)畫、博客技術(shù),看看人們?cè)诰W(wǎng)上都是如何交流的,等等。
這就是我的全部經(jīng)歷。
總體說來,我比較擅長于吸引人才加入我的公司,并讓他們對(duì)我的想法感興趣。同時(shí),我還能自學(xué)編程,這意味著,我能做到一邊促進(jìn)自己的事業(yè)發(fā)展,顯露自身的管理才華,一邊促使我提高自身的執(zhí)行能力。
如果你現(xiàn)在就希望自己成為一名工程師,那么以下就是你的任務(wù)清單:
1. 到w3schools.com網(wǎng)站上學(xué)習(xí)HTML和CSS。
2. 思考一下你想做一個(gè)什么樣的網(wǎng)站。已經(jīng)有想法了?很好,那么開始實(shí)現(xiàn)吧,不管別人告訴你這個(gè)想法有多么困難。
3. 在你的電腦上打開一個(gè)文本編輯器(不是Word),并保存成index.html。把你從w3schools.com學(xué)到了HTML和CSS的知識(shí)應(yīng)用到的你網(wǎng)站上,試著在頁面上顯示些內(nèi)容,看看你能實(shí)現(xiàn)多少功能。
4. 到lynda.com網(wǎng)站上,看一些關(guān)于HTML和CSS的新手視頻。
5. 盡量往index.html文件中加你所想的內(nèi)容,仿照你喜歡的網(wǎng)頁上的配色。如果你遇到無法解決的難題,到“jsfiddle.com”網(wǎng)站上測試你的代碼,并把問題貼到StackOverflow上尋求解答。
6. 到lynda.com網(wǎng)站上看一些關(guān)于jQuery的新手視頻。引入這個(gè)技術(shù)將使你的頁面交互變得非常簡單。
7. 在index.html文件中加入jquery,這會(huì)讓你的頁面使用起來像個(gè)真正的網(wǎng)頁,你可以在上面虛擬一些交互。至此,你的網(wǎng)站原型就算構(gòu)建好了。
8. 把index.html轉(zhuǎn)成Rails項(xiàng)目?,F(xiàn)在你可以算是一個(gè)全能型的網(wǎng)頁開發(fā)者了,雖然技術(shù)還很挫,但至少你已經(jīng)會(huì)做了。你所需要的是努力提升自己的水平。
9. 繼續(xù)實(shí)現(xiàn)你的項(xiàng)目,遇到難題找google,或者把問題放到StackOverflow上求助。你一定會(huì)為自己的飛速進(jìn)步吃驚的。
10. 繼續(xù)構(gòu)建你的網(wǎng)站。
你也許會(huì)說:“可這個(gè)清單寫得實(shí)在太不具體了,而且聽說w3schools差得很,我朋友告訴我代碼只能在GO上寫。”
我將這么回答你:“我的小乖乖,當(dāng)你成為一名工程師時(shí),你最厲害之處應(yīng)該是能獨(dú)立解決問題。因此,跟著這個(gè)任務(wù)清單去做,是將你帶上一條學(xué)習(xí)曲線。順著路線走,你會(huì)真正學(xué)到如何把自己的想法構(gòu)造成產(chǎn)品,這會(huì)讓你對(duì)自己更加有信心,相信自己無所不能。”
好了,我說完了,可以把這一大堆廢話貼到Quora上了…