Matt DeBoard本是一名退伍軍人。他在12周的時間內(nèi),由一名非程序員成長為一名專業(yè)開發(fā)者。對于如何成為一名程序員?他有著自己獨(dú)到的心得與學(xué)習(xí)經(jīng)驗(yàn)。他在博文《How I Became a Programmer》中介紹了自己成為一名程序員的學(xué)習(xí)經(jīng)歷,并通過問答形式,分享了很多學(xué)習(xí)經(jīng)驗(yàn)和心得。CSDN對該文進(jìn)行了編譯,譯文如下:
我昨天在"HackerNews"上發(fā)表了一個簡短的回應(yīng)——有關(guān)于反對"Ruby on Rails"的八星期指導(dǎo)課能夠令你成為一名初級RoR開發(fā)人員的聲音。我沒有得到很多贊成票,所以我得到一個結(jié)論即是互聯(lián)網(wǎng)上的談話正越來越趨向于融入大眾輿論。你可以想象一下,當(dāng)我在收集來自世界各地的少數(shù)有價值的郵件的時候,我是多么驚訝。這些郵件大多在問:我過去做了什么,我是怎么做的,以及我是怎樣得到一份工作的。我做了一個假設(shè)——由于在這些少數(shù)的郵件里面有來自遙遠(yuǎn)的洪都拉斯,那么一定有很多人想知道應(yīng)該怎樣去追尋一個程序員的職業(yè)生涯。
首先聲明兩點(diǎn)
請注意這個博客的標(biāo)題是“我如何成為一名程序員”,而不是“你如何成為一名程序員”。我不是一名自學(xué)專家,也不是一名聰明、優(yōu)秀程序員。而我在人生轉(zhuǎn)折點(diǎn)做了很有意義的事, 并獲得了成功。
和女朋友協(xié)商后,我傾注了所有時間,以期成為一名職業(yè)程序員,而這個過程僅用了12周,而非我之前說的10周。
我的故事
簡單來說,我在海軍陸戰(zhàn)隊(duì)服役10多年后,于2010年7月退伍。同年八月,我在一家國立彩票機(jī)構(gòu)做PR的工作,于今年的二月中旬失業(yè)。今年五月中旬,我在“DirectEmployers”協(xié)會找到一份叫做“初級用戶體驗(yàn)工程師”的兼職工作。八月末,我成了公司正式的“用戶體驗(yàn)工程師”。
當(dāng)我結(jié)束了那份PR工作時,我覺得自己已經(jīng)受夠了,我想成為一名程序員。我拿出所有積蓄,并整日以方便面和水為食。我的家人(尤其是父親)簡直要急瘋了。今年的二月至五月期間,我連走路的時候都在學(xué)習(xí)編程,學(xué)習(xí)Linux,學(xué)習(xí)計算機(jī)科學(xué)。我自學(xué)了Python, Django, 并學(xué)會了一些函數(shù)式和命令式編程。此外,我對Linux的命令行已相當(dāng)熟悉。
瞧,不再說廢話,接下來我要談?wù)勎也⑽醋龅氖虑椋缓笪視卮餎mail中的部分問題。
我并未做過的事情
Email中問到最多的一個問題是:你如何在11周內(nèi)學(xué)會了Django?
在此我想澄清一下,起初我并非為了學(xué)習(xí)Django而學(xué)習(xí)Django。Django只是一個很不錯的抽象工具包,它可以幫助Python很容易地開發(fā)各種Web應(yīng)用。我專注于學(xué)習(xí)Django只是件偶然的事情。
我過去,乃至現(xiàn)在都沒有期望成為一名Django開發(fā)人員。至今我也不確定自己是否喜歡被稱為Python程序員。
換言之,如果我過去為成為一名Django抽象層方面的專家而花費(fèi)過度精力,而不是用心鉆研Django工作原理,那么如今我肯定不會獲得現(xiàn)在的能力。
來自郵件的問題:
問:你是通過網(wǎng)絡(luò)或書籍開始學(xué)習(xí)的嗎?
答:是的。Django擁有豐富的說明文檔,StackOverflow是更加綜合性的學(xué)習(xí)資源。此外,對于普遍的學(xué)習(xí)問題,我認(rèn)為MIT的公開課“Introduction to Computer Science”視頻課程系列是非常棒的計算機(jī)科學(xué)資源。
問:你每天,每周投入多少時間來學(xué)習(xí)?
答:很多時間。有時8小時,有時12小時,有時甚至16小時。我計算機(jī)編程很狂熱,并如饑似渴地學(xué)習(xí)。我從不給自己偷懶和自我滿足的機(jī)會,并付出了比平時多十倍的努力。我不玩游戲機(jī),不看電視,甚至整天不睡覺。我每天所做的事情只有學(xué)習(xí)代碼,黑客技術(shù),編程和開發(fā)。
問:有人為你指導(dǎo)嗎?
答:有。有個非常聰明的人一直在指導(dǎo)我學(xué)習(xí)編程,雖然我現(xiàn)在有了很大進(jìn)步不再需要過多依靠他了。他幾乎用了所有的方法,來引導(dǎo)我成為一名合格的程序員。在編程知識(尤其是Python和Django開發(fā))、命令行、emacs & vim的學(xué)習(xí)上,他都給予了詳細(xì)的指導(dǎo)。他是一個成功的、很受人尊重的、見多識廣的懷疑論者。
問:你之前的工作背景和經(jīng)驗(yàn)對你的自學(xué)有什么特殊的輔助作用嗎?
答:有一定作用吧。我之前是一個計算機(jī)極客,在80年代末泡過很多論壇,學(xué)習(xí)了QBasic 和VisualBasic,還斷斷續(xù)續(xù)地學(xué)了幾年的Python。除此之外就沒有了。
問:你最初為什么選擇學(xué)習(xí)Django?
答:一直作為我職業(yè)發(fā)展榜樣的人憑借Django獲得了成功。為此我也選擇了Django。
問:介意分享一下你的學(xué)習(xí)過程嗎?
答:我想再次說明一下,我不是自學(xué)專家,也不特殊。我只是非常努力,因?yàn)槲疑詈芷D苦,并將自己逼到了死胡同,我別無選擇,只能成功。我花掉了我所有可以花費(fèi)的積蓄,就是希望可以找到一份我喜歡的職業(yè)。這就是我的學(xué)習(xí)過程。
問:請分享一下您學(xué)習(xí)Django的過程,及學(xué)習(xí)Django(或者HTML/CSS, JavaScript等前端技術(shù))的技巧、網(wǎng)站、書籍;
答:除了認(rèn)真的學(xué)習(xí)這門技術(shù)外,我沒有其他技巧。為了學(xué)習(xí)Django,我花費(fèi)了大量的時間,其中也有很多樂趣。
正如我上面說的,我并不覺得“學(xué)會了Django”,“學(xué)會了Ruby on Rails”,或者“學(xué)會了Noir”就成功了。我認(rèn)為我之所以成功,因?yàn)槲以趯W(xué)習(xí)這些語言的同時,還學(xué)習(xí)了這些語言背后的原理,之后我通過運(yùn)用Web框架進(jìn)一步深入學(xué)習(xí)了這些語言??蚣芤彩窃谂既粰C(jī)會學(xué)的。
閱讀一些Django文檔,加入irc.freenode.net中的#Django,經(jīng)常在里面提問。這是我經(jīng)常做的,感覺還不錯。坦白講,我不會死坐在那看這些東西,我會試著編寫一些程序以加深理解其中的概念,然后再閱讀來驗(yàn)證我的結(jié)果。有些人可能覺得沒效果,但對我十分有用。用不用這種方法,最終由你決定。
現(xiàn)在HTML&CSS的學(xué)習(xí)資料非常多,它們也較容易學(xué)習(xí)。我學(xué)習(xí)了我能用到的所有HTML&CSS相關(guān)知識。我記不太清楚HTML&CSS的工作原理,比如語法&語義。我不知道如何創(chuàng)建“Gradient”,但我可以找到創(chuàng)建它的方法。我認(rèn)為這是很重要的。
問:你是怎樣向公司展示你的技術(shù)技能的?是否給他們看過你之前的作品?
答:Github。我十分強(qiáng)調(diào)使用Github。做一個項(xiàng)目,把它導(dǎo)入Github,以此向大家展示你的激情、智慧和好奇心。
當(dāng)然,還有網(wǎng)絡(luò)。參加一些技術(shù)會議;多和同行進(jìn)行交流;要善于用Twitter、博客。多在自己專注語言領(lǐng)域的社區(qū)中進(jìn)行交流;去認(rèn)識更多的技術(shù)人員;同時向大家展示你是多么熱愛編程工作。在我得到第一份編程工作前的一個星期里,我在Fabric上發(fā)起了一個關(guān)于“Python中Capistrano”的小型對話。這件事讓我擁有了自己的人際小圈子。
結(jié)論
如果對我所做事情進(jìn)行一個總結(jié)的話,我想說的是:
● 多提問,充滿好奇心,充滿熱情;
● 要努力學(xué)習(xí)一種語言,而不是Web框架;
● 努力工作;
● 運(yùn)用互聯(lián)網(wǎng),多參加技術(shù)會議,多用Twitter和博客。多參加社交活動,向大家展示你對工作充滿熱情,是團(tuán)隊(duì)的光榮;
● (可選項(xiàng))把自己置于絕望的境地,除了成功,別無選擇。
我最后想表達(dá)的觀點(diǎn)是——我很幸運(yùn)。我不是一個很了不起的程序員。今天結(jié)束后我仍然是一個新人,仍然有很多東西要學(xué)。我的職業(yè)生涯才剛剛開始。我通過努力改變了自己的人生,我感到十分自豪。希望我的經(jīng)歷能夠幫助大家。
更多信息請查看IT技術(shù)專欄