編者按:無論從近期還是遠(yuǎn)期來看,傳統(tǒng)制作業(yè)的一般崗位都面臨著萎縮或者錢景不佳的情況。很多從業(yè)者都面臨著職業(yè)轉(zhuǎn)換的問題。而軟件開發(fā)將是很長一段時(shí)間內(nèi)前景最光明的職業(yè)之一,是很多人改行的首選。但是缺乏基礎(chǔ)想要改行談何容易?如果為了打下基礎(chǔ)而放棄手上的工作專心進(jìn)修但最后還是找不到工作怎么辦?從化學(xué)工程師成功轉(zhuǎn)行軟件工程師的Austin Tackaberry也許能給你啟迪。在這篇文章中,他詳細(xì)介紹了自己是如何一邊工作一邊自學(xué)最后成功找到一份軟件工程師的工作的。
每當(dāng)我開始閱讀成功故事的時(shí)候,我都會(huì)馬上去查找作者的背景是什么,希望能適合我。但是我從來都沒發(fā)現(xiàn)那些人的背景跟我一致,所以我的很可能跟你的背景也不一致。
不管怎樣,我希望我的故事能夠激勵(lì)其他人,同時(shí)能夠充當(dāng)一個(gè)有用的數(shù)據(jù)點(diǎn)補(bǔ)充到你的成功故事數(shù)據(jù)集上。
充分披露
高中的時(shí)候(9年前)我上過VBA的課程。我在新生工程課程(7年前)中學(xué)習(xí)了一些C、Python、Mathlab以及Labview的知識(shí)。我從一所很好的大學(xué)畢業(yè),拿到了化學(xué)工程學(xué)位,我的GPA成績也不錯(cuò)(3年前)。離開學(xué)校(高中或者大學(xué))以后我從來都沒有編過程,直到去年我決定要去學(xué)一下。
大學(xué)畢業(yè)后,我在一家精煉廠拿到了一份工藝工程師的工作。在我改行到軟件工程之前我一直在那里工作。
為什么我要換職業(yè)
我喜歡解決技術(shù)問題,但我知道到了某一刻我還是要進(jìn)入商業(yè)/初創(chuàng)企業(yè)世界的。我一直都有讀MBA的想法,但每次看到頂級(jí)商學(xué)院的價(jià)格時(shí),我的興趣馬上就沒了。
2017年5月27日,我又上去Google了一下MBA,但是不知怎的就看到了軟件工程方面的東西。而且這東西看起來挺適合我的。
對(duì)軟件工程師的需求日益旺盛,工資水平也很高,而且也是進(jìn)入到初創(chuàng)企業(yè)世界的完美行業(yè),并不需要太多的啟動(dòng)資金。你需要知識(shí)一臺(tái)計(jì)算機(jī),而且你的機(jī)會(huì)(幾乎)無限。
在這里你只需要有個(gè)想法,開始開發(fā),然后展示給用戶,再用一點(diǎn)點(diǎn)資金進(jìn)行迭代就行,進(jìn)入門檻也很低,其他任何一個(gè)行業(yè)都做不到這一點(diǎn)。在化學(xué)工程,基本上你需要有一間運(yùn)營的工廠,或者需要很多錢去設(shè)計(jì)一家工廠,如果你有個(gè)新產(chǎn)品的想法的話。
我聽說過有人辭職去參加訓(xùn)練營,但是我在網(wǎng)上看到這些情況越多,我就越意識(shí)到其實(shí)我完全可以自學(xué),如果我夠投入和專注的話。
你也許會(huì)提出不參加訓(xùn)練營的話豈不是會(huì)失去那里提供的關(guān)系網(wǎng)絡(luò)和職業(yè)建議?的確,但是我很幸運(yùn),因?yàn)槲疑钤跒硡^(qū),所以可以去出席一些回憶,在那里我建立了自己的關(guān)系。
此外,最糟糕的情況也只是我發(fā)現(xiàn)自己一個(gè)人學(xué)不來,真這樣的話我再辭職參加訓(xùn)練營也不遲。
目標(biāo)
你需要有目標(biāo)。尤其是如果你想一邊干全職一邊自學(xué)的話。如果你不給自己額外的壓力的話你的學(xué)習(xí)就會(huì)一拖再拖。所以你需要給自己施加內(nèi)部壓力。你的目標(biāo)應(yīng)該是簡單的、可量化的。你應(yīng)該進(jìn)行充分研究,提出合理的目標(biāo)。我的目標(biāo)是這樣的:
在1年之內(nèi)拿到一份薪水跟我現(xiàn)在相同或者更好的軟件工程工作。
計(jì)劃
一旦你制訂了目標(biāo),就需要一份計(jì)劃來幫助你實(shí)現(xiàn)。這個(gè)時(shí)候你需要盡可能多地去了解別人的成功故事。當(dāng)然他們的情況都不會(huì)跟你一致,但你可以從每個(gè)人身上吸取一些經(jīng)驗(yàn)。我利用Reddit的子版塊learnprogramming、FreeCodeCamp論壇以及Medium等資源來制訂我的計(jì)劃(并且不斷修訂)。
2017年5月27日,我決定開始我的學(xué)習(xí)編程之旅,下定決心之后我可以說是一個(gè)猛子就扎了進(jìn)去。我決定每周的工作不能超過40小時(shí),這樣我就有時(shí)間在工作之后以及周末去進(jìn)行編碼。你很幸運(yùn),因?yàn)槲野盐业恼麄€(gè)學(xué)習(xí)過程都詳細(xì)記錄下來了。
我的計(jì)劃經(jīng)過多次迭代之后,最終大概是這樣的:
上一門計(jì)算機(jī)科學(xué)入門課程,對(duì)核心計(jì)算機(jī)科學(xué)概念有可靠的基本了解。
跟著freeCodeCamp學(xué)直到我自己可以開發(fā)出組合層面的全棧web app。
通過重構(gòu)來清理代碼,增加測試,專注于先進(jìn)的概念。
給開源做貢獻(xiàn)
準(zhǔn)備面試
我的計(jì)劃一開始是非常簡單的。那時(shí)候我認(rèn)為自己應(yīng)該按照Google的技術(shù)指南去學(xué),所以我選了一門他們推薦的入門課程,Udacity CS101。
第0個(gè)月——Udacity CS101,HarvardCS50
做出這一重大決策讓我充滿了能量。我一下班回到家就迫不及待開始編碼而且直到上床前都不愿停下來。然后整個(gè)周末都是這樣。Udacity CS101會(huì)跟蹤完成百分比,這對(duì)我是一大激勵(lì)。我每天編程完之后都要記錄我們的完成百分比。在10天內(nèi)我就完成了前面的75%。最后的25%側(cè)重在遞歸方面,這對(duì)我來說有點(diǎn)難??偠灾?,最后我用了20天完成了Udacity CS101。
我在上Udacity CS101的同時(shí),還一邊開始相當(dāng)頻繁地上Reddit的learnprogramming子版塊去看。我我在上面了解到正在尋求改變職業(yè)的自學(xué)開發(fā)者在網(wǎng)上活躍是非常重要的。我決定用自己的全名在Twitter、Reddit、Stack Overflow、Medium以及Quora上面開設(shè)新的賬號(hào),以便在網(wǎng)上刷存在感。
此外,我還決定不再看Instagram、Facebook以及非編程方面的Reddit子版塊,以免造成分心。我只有在查看編程相關(guān)的新聞和帖子時(shí)才會(huì)翻看我的手機(jī)。這一點(diǎn)很關(guān)鍵,因?yàn)榭梢源_保我能找到最好的學(xué)習(xí)路徑和學(xué)習(xí)資源。正是因?yàn)檫@樣我才在edX上發(fā)現(xiàn)了Harvard CS50。
一開始我只是滿足于上一門入門課程,但每個(gè)人似乎都推薦Harvard CS50,所以我決定再試試這門課程。其他學(xué)校計(jì)算機(jī)科學(xué)的學(xué)生也上了這門課,并且說他們?cè)诠鸬腃S50上面學(xué)到的東西比在自己的大學(xué)學(xué)習(xí)1、2年的計(jì)算機(jī)科學(xué)所學(xué)到的東西都要多。大家的普遍共識(shí)是這門課程很難但是值得。到了第0月的月末,我已經(jīng)完成了前5節(jié)課以及家庭作業(yè)。
第1個(gè)月——Harvard CS50,Linux,第一次聚會(huì),freeCodeCamp
大概到了這個(gè)月的一半時(shí)間時(shí)我終于完成了CS50。關(guān)于學(xué)CS50的體會(huì)我不想談太多,因?yàn)槲乙呀?jīng)在這篇文章詳細(xì)談了我的經(jīng)歷。
總而言之:這是一門很棒的課程,我高度推薦。David Malan是一位優(yōu)秀的講師,而且有很多資源可以幫助你通過這門課程。你從C語言開始,然后再到Python,最后完成web開發(fā)。安排非常緊湊,涉及大量材料,但我認(rèn)為是非常值得的。
在CS50之后,我決定把我的XPS 15配置成Windows和Ubuntu雙啟動(dòng)。那是一個(gè)令人沮喪的周末。我把分區(qū)搞砸了,筆記本幾乎變成了一塊磚頭。我差點(diǎn)就想把那臺(tái)筆記本扔了買臺(tái)新的。
我慢慢放棄了Windows,最終主要以Ubuntu作為平臺(tái)。我想強(qiáng)迫自己適應(yīng)一定程度上可行的命令行方式,但是仍然有很長一段路要走。
我開始了百日寫代碼之路,以確保自己保持專注和每天都寫代碼的節(jié)奏。記錄自己的進(jìn)度非常重要。如果你每天都能取得進(jìn)展,盡管看起來似乎不大,但是日積月累之后回過頭,你就會(huì)意識(shí)到其實(shí)你已經(jīng)走了挺遠(yuǎn)了,而這又會(huì)激勵(lì)你繼續(xù)前進(jìn)。
我知道,關(guān)系網(wǎng)絡(luò)決定了我的成敗,所以我鼓起勇氣參加了自己人生中的第一次編碼聚會(huì)。我此前從未參加過任何聚會(huì),更不用說編碼聚會(huì)了。所以一路上我都非常緊張,以至于開車到那里停好車走進(jìn)門之后,幾乎就想轉(zhuǎn)身離開回家了。
這是那個(gè)團(tuán)體的第一次聚會(huì),這一點(diǎn)很有幫助。我迅速意識(shí)到自己沒理由緊張。大家誰都不認(rèn)得誰,沒人來這里是為了給別人下結(jié)論的,每個(gè)人都渴望學(xué)習(xí)。而這只是一場聚會(huì)狂歡的開始。在9個(gè)月內(nèi)我最終出席了超過50場聚會(huì)。
很高興,我很早就開始參加聚會(huì)。大多數(shù)人只是在尋找工作的時(shí)候才開始出席聚會(huì),但到那個(gè)時(shí)候幾乎已經(jīng)太晚了。要早點(diǎn)參加的理由太多了。這里僅列舉少數(shù):
培養(yǎng)關(guān)系需要很長的時(shí)間。早點(diǎn)開始意味著后面找工作的時(shí)候你保證可以有關(guān)系可以依賴。
跟陌生人討論編程時(shí)準(zhǔn)備面試的很好手段。
你可以學(xué)習(xí)新的框架,了解到走走你前面的那些人的學(xué)習(xí)資源。這些會(huì)影響你的未來學(xué)習(xí)計(jì)劃。
我的編碼之旅走到這個(gè)時(shí)候出現(xiàn)了一點(diǎn)不確定性。到這時(shí)候我需要決定自己想要成為什么樣的軟件開發(fā)者。
到最后,我選擇了web開發(fā),因?yàn)樗男枨笏坪醴浅M⒚礋崆芯W(wǎng)上有很多資源。一旦我想明白了這一點(diǎn),我就需要弄清楚接下來要做什么。一些人建議到這一階段我應(yīng)該考慮想要開發(fā)什么樣的web app然后繼續(xù)。一些人向我推薦The Odin Project或者freeCodeCamp。
那個(gè)負(fù)責(zé)籌劃我每周都參加的聚會(huì)的家伙會(huì)Ruby,也想用Ruby做項(xiàng)目。我決定全身心投入到The Odin Project里面,這是其中的一大原因。
然后2天之后我又決定放棄這個(gè)想法了。
這就是走自學(xué)路線的缺點(diǎn)之一。一分鐘前你以為你已經(jīng)找到了前進(jìn)的方向,然后第二天你又會(huì)懷疑你有沒有走對(duì)路。
我了解到Ruby正在失寵,并且通過搜索對(duì)比Ruby和JavaScript的就業(yè)機(jī)會(huì)來證實(shí)了這一點(diǎn),所以我最后決定開始freeCodeCamp。freeCodeCamp比較令人困擾的一件事情是項(xiàng)目的想法是他們想出來的,所以每一個(gè)參加訓(xùn)練營的人都做相同的項(xiàng)目。然而,一開始我感到擔(dān)憂的是我希望能做應(yīng)聘者當(dāng)中脫穎而出。然而,我最后還是愛上了freeCodeCamp,現(xiàn)在我高度推薦你們要學(xué)這個(gè)。要想了解更多我關(guān)于freeCodeCamp的體驗(yàn)和推薦,請(qǐng)參考我的這篇文章。
第2個(gè)月——YDKJS,freeCodeCamp前端,React
我開始讀《你不懂JavaScript(YDKJS)》,因?yàn)槊總€(gè)人都推薦它作為freeCodeCamp的補(bǔ)充。我被迫重讀了好幾個(gè)章節(jié),因?yàn)樗膬?nèi)容特別緊湊,但這是學(xué)習(xí)詞法范圍、閉包、預(yù)定等你聽到也想學(xué)到但因?yàn)楹茈y從未試過的有關(guān)JavaScript的一切的完美資源。
我完成了freeCodeCamp的前端部分的學(xué)習(xí)。其檢查表格式以及估算完成時(shí)間起了不小的幫助作用,這激勵(lì)了我要迅速完成。我還恨不得馬上進(jìn)入下一章節(jié)去學(xué)習(xí)React。然而,這也意味著我的項(xiàng)目都是極簡風(fēng)格。我除了竭盡所能去實(shí)現(xiàn)用戶故事之后就不再做別的東西了。
事后看來,也許我應(yīng)該把精力放在讓項(xiàng)目更吸引人上面。也許這會(huì)讓我更深入了解CSS。
下一步就是學(xué)習(xí)React,我忙得差點(diǎn)緩不過氣來。
我已經(jīng)聽說過React的很多,并且已經(jīng)準(zhǔn)備好要成為酷小孩的一員了。然而,我還有一點(diǎn)躊躇,因?yàn)楫?dāng)時(shí)的許可問題。我真的很高興這不再是問題了。學(xué)習(xí)React對(duì)我來說很困難。當(dāng)時(shí)我還沒有發(fā)現(xiàn)任何好的教程(但是現(xiàn)在似乎到處都是)。
我嘗試閱讀文檔,按照Facebook的一字棋教程去做,但我其實(shí)不是很理解它是怎么做的。我被告知這不適合我,這意味著我對(duì)JavaScript的理解還不夠。于是我又返回來繼續(xù)讀《你不懂JavaScript》,但再次地,里面的內(nèi)容對(duì)我來說太高深了。
第3個(gè)月——freeCodeCamp React,CodeClub,開始freeCodeCamp后端學(xué)習(xí)
最后,我決定去做freeCodeCamp React項(xiàng)目練手,看看它究竟是怎么做的。寫出來的代碼很難看,但的確幫助我更好地理解了React。
我參加的每周聚會(huì)決定全棧都用JavaScript而不是Ruby來做項(xiàng)目,并且他們還確定了第一個(gè)項(xiàng)目將是給這個(gè)聚會(huì)小組開發(fā)一個(gè)網(wǎng)站,CodeClub.Social。
我利用React和Meetup API開發(fā)了卡片,讓用戶可以通過我們的網(wǎng)站注冊(cè)報(bào)名參加接下來的3場聚會(huì)活動(dòng)。這對(duì)我來說有點(diǎn)難,因?yàn)槲业脮和reeCodeCamp學(xué)習(xí)來做這個(gè),但這是一個(gè)我不容錯(cuò)過的機(jī)會(huì)。我很高興能跟一小群人一起做項(xiàng)目。這也幫助我學(xué)習(xí)了Git和Github。
在這個(gè)月結(jié)束前,我開始在freeCodeCamp學(xué)習(xí)后端開發(fā)。
第4個(gè)月——完成freeCodeCamp后端學(xué)習(xí)及Yeggle開發(fā)
我練完了freeCodeCamp所有的API項(xiàng)目,但我開始從freeCodeCamp抽身出來做Image Search Abstraction Layer這個(gè)項(xiàng)目。
我迫不及待想要開發(fā)全棧web應(yīng)用,所以我看到這個(gè)項(xiàng)目的名字時(shí)馬上就有了自己的項(xiàng)目想法。我想做一個(gè)節(jié)點(diǎn)app,用來存儲(chǔ)隨機(jī)imgur URL到數(shù)據(jù)庫上,然后再做一個(gè)前端來輸出這些隨機(jī)圖像的用戶指定數(shù)字。大家的說法是對(duì)的:當(dāng)你做一個(gè)自己想出來的項(xiàng)目時(shí),你會(huì)更用功也更成功。
當(dāng)我把項(xiàng)目做成了之后,一股自豪感油然而生。雖然它很丑很笨拙,但是最重要的是能用。
我在freeCodeCamp的學(xué)習(xí)過程中,還了解到了哪些項(xiàng)目是我的能力范圍之內(nèi)的。當(dāng)時(shí)我經(jīng)常會(huì)去跑步,在跑步過程中我時(shí)不時(shí)會(huì)冒出一些想法,等我回到家就把那些想法寫下來。這樣等我準(zhǔn)備好時(shí)就有了一個(gè)項(xiàng)目清單了。
最后,我終于感覺自己已經(jīng)做好準(zhǔn)備,可以把自己的有用且光鮮的全棧web app分享給用戶并且納入我的組合里面了。我已經(jīng)摩拳擦掌,迫不及待。
在找新飯店的時(shí)候,我總是會(huì)打開Yelp去看看別人的點(diǎn)評(píng),然后再打開地圖看看別人的點(diǎn)評(píng)。如果我做一個(gè)app來把這兩個(gè)一起比較一下呢?
于是我做了Yeggle,這個(gè)東西用了Node/Express/React,再加上Google Maps和Yelp API。當(dāng)時(shí)有好幾個(gè)障礙我認(rèn)為自己是沒法克服的,但到最后我還是設(shè)法完成了,我對(duì)這個(gè)app也感到非常自豪。然后我把它發(fā)到了Reddit上,可是沒人在意。這有點(diǎn)令我失望,但我是不會(huì)被這種情緒打倒的。
第5個(gè)月——StockIT
這個(gè)月我做的東西不多,因?yàn)槲遗艿饺毡竞吞﹪燃偃チ耍?周!
但是我還是開始并完成了下一個(gè)項(xiàng)目。我不斷讀到自學(xué)開發(fā)者找到工作是多么的難,于是我認(rèn)為自己得做點(diǎn)獨(dú)特的事情。我記得有一個(gè)游戲是當(dāng)?shù)拉偹构善弊邉輬D開始活動(dòng)時(shí),你有一個(gè)買入的機(jī)會(huì)和賣出的機(jī)會(huì),其目標(biāo)是擊敗市場。這個(gè)游戲的目的是想讓你看清楚擊敗市場有多困難。
我的想法是做一個(gè)類似的游戲,但是你的對(duì)手不是市場,而是機(jī)器學(xué)習(xí)算法。于是我創(chuàng)建了StockIT。
我在Pandas和Scikit Learn上面學(xué)習(xí)了一些涵括多種機(jī)器學(xué)習(xí)技術(shù)的視頻教程。我原先是希望做一些很酷的深度學(xué)習(xí)技術(shù),但我意識(shí)到這需要大規(guī)模的數(shù)據(jù)集和時(shí)間,那些是我耗不起的。
相反,我采用了簡單的線性回歸模型。我以為這會(huì)是困難的部分,但其實(shí)不是。讓D3跟React配合工作才是。這兩個(gè)庫都想控制DOM。還有一些別的庫可以幫助把這兩個(gè)庫湊合起來,但是我認(rèn)為引入新的庫會(huì)讓項(xiàng)目太臃腫了。我最終用D3生成SVG,用React處理DOM,情況看起來相當(dāng)不錯(cuò)。
我再次把它分享到Reddit上面,這一次大家都很喜歡!
結(jié)果表明,就像VC一樣,上Reddit的人也都對(duì)機(jī)器學(xué)習(xí)著迷。Reddit用戶的厚愛讓我的信心有了極大的提升。大家都玩我的游戲并且喜歡上了!
第6個(gè)月——jobSort(),找工作前的準(zhǔn)備
在StockIT之后,我又開始了下一個(gè)個(gè)人項(xiàng)目。我希望做一個(gè)崗位看板,把一些小規(guī)模的面向技術(shù)的職位列表網(wǎng)站,比如Stack Overflow、Github以及Hacker News上的就業(yè)機(jī)會(huì)都集中起來展示。為了增加它的獨(dú)特性,我決定根據(jù)用戶對(duì)職位的技術(shù)需求以及需求程度進(jìn)行排序。
比方說,假設(shè)我正在尋找一份需要了解JavaScript、React及/或Python的工作,并且招聘者對(duì)JavaScript和React的需求非常迫切,對(duì)Python就沒那么關(guān)注。這種要求量化下來可能是JavaScript分?jǐn)?shù)是3,React分?jǐn)?shù)也是3,Python則是1.這樣就能把清單排好序了。
做這個(gè)項(xiàng)目的時(shí)候我碰到了各種各樣的障礙,圖中被迫調(diào)整了幾次航向,但我最后還是做出了一個(gè)自己滿意的產(chǎn)品。我的最后技術(shù)棧用的是React/Node/Express/MySQL。我把項(xiàng)目發(fā)布到Reddit cscareerquestions子版塊上,瀏覽量是650,因?yàn)樗麄儾辉试S放個(gè)人項(xiàng)目上去所以被下架了。
“最后”的產(chǎn)品在這兒,如果你對(duì)我的折騰過程和重構(gòu)感興趣的話,也可以看看我的這篇文章。
由于我自己的原因,jobSort()用掉了我那個(gè)月蠻多的一部分時(shí)間。我最后跟在第一次聚會(huì)上認(rèn)識(shí)的一位朋友去喝了一次咖啡,他建議我現(xiàn)在可以去申請(qǐng)工作了。我總是看到有人說自己等待了太長的時(shí)間才去申請(qǐng)。而且,每每我看到詢問什么時(shí)候該申請(qǐng)工作的帖子時(shí),被點(diǎn)贊最多的回答總是“現(xiàn)在”。
我原先的想法是按照自己的結(jié)構(gòu)化計(jì)劃完成個(gè)人項(xiàng)目組合來提高自身實(shí)力,然后再去給開源項(xiàng)目做一些貢獻(xiàn),最后再去準(zhǔn)備面試,然后申請(qǐng)工作。這位朋友說服我拋棄那個(gè)計(jì)劃開始申請(qǐng)。于是這個(gè)月我做了一份材料和簡歷。下一個(gè)月我將開始申請(qǐng)。
第7個(gè)月——測試,求職
這個(gè)月我的精力主要集中在我自己的項(xiàng)目以及申請(qǐng)工作上面。我還想學(xué)習(xí)一下測試以及Redux。
我給CodeClub.Social增加了彈性框讓它成為響應(yīng)式布局。我改善了jobSort()的移動(dòng)UX。我給jobSort()增加了測試,我用的時(shí)mocha/chai/enzyme,這個(gè)設(shè)置很難,不過起步很容易,但是要想100%覆蓋很難。
到了月末,我已經(jīng)申請(qǐng)了63份工作。我把這看成是自我評(píng)估。我的組合/簡歷是不是足夠好了?如果是的話,我需要做哪些事情來準(zhǔn)備面試?一開始我是通過Hacker News: Who is Hiring和Indeed去申請(qǐng)的。
在Hacker News上,我用jobSort()來確定申請(qǐng)哪一份工作。在Indeed上,哦嘗試了非軟件類公司看看是不是也能拿到邀請(qǐng)或者面試機(jī)會(huì)。
起初,我申請(qǐng)很快,沒有對(duì)簡歷/求職信做什么個(gè)性化處理。然后,我決定要對(duì)我的求職信和簡歷進(jìn)行個(gè)性化處理,然后試著發(fā)一封郵件給公司的某人。這個(gè)辦法顯然比天女散花的做法更好。
那個(gè)月我收到了5個(gè)電話——其中兩個(gè)是來自招聘公司的,另3個(gè)是來自軟件公司的,包括:
在一家.com公司的DevOps/測試角色,是份合同工
一家B輪的視頻分析公司
一家相當(dāng)大且成功的初創(chuàng)企業(yè),最近剛被一家大企業(yè)收購
我通過了其中兩家HR的篩選,但是對(duì)方都沒有要我去現(xiàn)場面試。當(dāng)然我對(duì)這3個(gè)電話都比較滿意,從中也學(xué)到了很多東西。
網(wǎng)上的每個(gè)人都提到初級(jí)開發(fā)者不要指望一開始就了解那么多,他們只需要對(duì)學(xué)習(xí)抱有激情和興奮就行。所以我認(rèn)為這是很簡單的。我對(duì)學(xué)習(xí)就很有激情和興奮感。不過我從這些來電中學(xué)到的是,沒人會(huì)找一位初級(jí)開發(fā)者。他們希望你從第一天開始就知道該怎么做。
這些電話教會(huì)了我需要:
從第一天開始就足夠好,能給對(duì)方帶來價(jià)值
要足夠自信說服他們我能從第一天開始給他們?cè)黾觾r(jià)值
第8個(gè)月——夜班,Redux,開源,現(xiàn)場面試
從這個(gè)月開始我除了全職工作外還上夜班——每周6天,每天12小時(shí),從下午5點(diǎn)到凌晨5點(diǎn)。
我知道這個(gè)月我沒法做那么多事情了,但是我有自己的目標(biāo),我想實(shí)現(xiàn)它,這樣的話我就可以有一個(gè)月的空了。
我用Redux重構(gòu)了jobSort(),令人驚喜的是這沒有我想象的那么難。我收聽了很多關(guān)于它的播客,也去讀了關(guān)于它的博客,但是那些理論都沒有太大的作用,直到我開始使用。
我真的非常喜歡Redux的數(shù)據(jù)流處理?,F(xiàn)在看到有人抱怨Redux是很有趣的。我并不認(rèn)為我有神馬資格發(fā)表什么觀點(diǎn),但是我的確喜歡reducer模式。
這個(gè)月本來我的打算是做開源的。我計(jì)劃是要做我的第一個(gè)開源貢獻(xiàn),這本來是對(duì)一個(gè)很好的庫的一個(gè)很好的貢獻(xiàn)。我打算給React寫點(diǎn)東西!
每個(gè)人都說這個(gè)代碼庫很難讀,更別說給它做貢獻(xiàn)了。但我需要脫穎而出,我需要凸顯獨(dú)特。我知道我的貢獻(xiàn)不會(huì)非常顯著,但我還是想去做。
我會(huì)從閱讀所有的文檔開始,然后再去了解代碼庫。查看每一個(gè)問題,每一份新聞稿。完整閱讀React文檔是一次很好的練習(xí),很高興我做到了。但我迅速意識(shí)到給React做貢獻(xiàn)的問題是“好的第一手問題”其實(shí)并不多,因?yàn)閱栴}很快就被人搶走了。
一次我去參加聚會(huì)時(shí),Anthony Ng建議我可以試試Downshift,那是Kent C. Dodds開發(fā)的一個(gè)自動(dòng)完成庫。這成為了一個(gè)游戲改變者。這個(gè)東西正好適合我發(fā)揮。難度合適,問題數(shù)量也合適,協(xié)作者也不太多,超級(jí)幫忙的維護(hù)者,整齊且經(jīng)過很好測試的代碼。除此以外,它還是我的jobSort()應(yīng)用遇到的一些問題的完美解決方案。
這個(gè)月中的時(shí)候,我收到了上個(gè)月申請(qǐng)的一家公司的電子郵件。他們進(jìn)行了一輪初步的電話篩選,然后是技術(shù)電話篩選。他們正在尋找的技術(shù)正好是我學(xué)過的——React、Redux以及D3。我主要談了我的項(xiàng)目以及為什么我要做出特定的決定。此后,他們讓我去現(xiàn)場進(jìn)行面試。這是我的第一次現(xiàn)場面試!
我根本就沒有為面試做過準(zhǔn)備,所以我的期望很低,并不指望能拿到那份工作,但是我會(huì)收獲寶貴的面試經(jīng)驗(yàn)。因?yàn)槲疫€在上夜班,所以每天的睡眠時(shí)間只有3個(gè)小時(shí)。幸運(yùn)的是,技術(shù)部分不是寫白板,而是1個(gè)小時(shí)的結(jié)對(duì)編程。這是相當(dāng)直截了當(dāng)?shù)奶魬?zhàn),但是我非常緊張。
一開始的時(shí)候,我擔(dān)心的是要確保我不用查東西也能了解一切。當(dāng)我意識(shí)到自己沒法完成挑戰(zhàn)時(shí),馬上就意識(shí)到自己需要停止擔(dān)心面試官會(huì)怎么看待我的事情,于是我就去Google/Stack Overflow上面找答案。我最后沒有完成,預(yù)期自己會(huì)有一個(gè)悲慘結(jié)局。
既然我認(rèn)為我的結(jié)對(duì)編程已經(jīng)失敗,在面試的剩余時(shí)間自己反而放松下來。最后,我昂首挺胸地離開了面試。最糟的情況下我也收獲了寶貴的面試經(jīng)驗(yàn),最好的情況是我會(huì)得到我的第一份工作。
第9個(gè)月——工作邀請(qǐng)
從我決定改行深入學(xué)習(xí)編程的第一天開始,經(jīng)過9個(gè)月零7天之后,我終于拿到了第一份工作邀請(qǐng)。因?yàn)榈谝淮蚊嬖嚲湍玫搅艘环輔ffer,我感到自信滿滿,但與此同時(shí),如果我不接受這份工作,如果這會(huì)是我?guī)讉€(gè)月內(nèi)收到的唯一一份offer的話該怎么辦?我最終接受了那份工作,并且對(duì)我的決定感到滿意。我希望能夠通過寫代碼掙到錢!
建議
到這里,我基本上已經(jīng)把我的故事分享得差不多了,其中也提供了一些建議。如果你讀到本文的話,很有可能不是在考慮改行就是為了改行而在學(xué)習(xí)編碼的過程中。我希望下面的建議能夠幫助你制訂計(jì)劃或者堅(jiān)持目前的計(jì)劃,最后達(dá)成你的目標(biāo)。
找到激勵(lì)你的東西并善加利用。對(duì)我來說,這個(gè)東西是檢查表,對(duì)過程的記錄,以及跟不同編程社區(qū)的互動(dòng)。如果你沒有受到實(shí)現(xiàn)目標(biāo)的激勵(lì)的話,那任何其他東西都不重要了,因?yàn)槟阃瓿刹涣说摹?/p>
制訂目標(biāo)并且實(shí)現(xiàn)目標(biāo)。要我說你應(yīng)該有月度目標(biāo),甚至有每天的目標(biāo)更好。月度目標(biāo)是為了確保你走在實(shí)現(xiàn)主要目標(biāo)的正確軌道上,每天的目標(biāo)則是為了確保你每天都能取得進(jìn)展。對(duì)我有用的一個(gè)策略是前一天晚上制訂次日的目標(biāo)。這樣的話你就不會(huì)一整天都去做沒有生產(chǎn)力的事情卻又覺得自己取得了進(jìn)展。這會(huì)迫使你將每天的成就與每天的目標(biāo)進(jìn)行比較。
盡早參加聚會(huì)活動(dòng),不要等到覺得自己準(zhǔn)備好了才去。參加聚會(huì)也許令人心生恐懼,就像我前面提到過那樣。但通常每個(gè)人都是很好的,并且愿意幫忙。你也許會(huì)發(fā)現(xiàn)有的人對(duì)跟你討論沒有興趣,但那是少數(shù),而且沒人喜歡當(dāng)判官。此外,每個(gè)人都喜歡提供建議(就像我現(xiàn)在所做一樣)。
盡早給開源做貢獻(xiàn),不要等到你覺得自己已經(jīng)準(zhǔn)備好才做。剛你開始編程的時(shí)候,Github似乎是個(gè)你永遠(yuǎn)也不想去的可怕地方。但其實(shí)那里是非常歡迎初學(xué)者的,而且也是學(xué)習(xí)好代碼以及讓別人審核你的代碼的好去處。如果你仍然不相信,不妨看看我的文章《為什么你現(xiàn)在就應(yīng)該給開源做貢獻(xiàn)》。
盡早申請(qǐng)工作,不要等到你以為自己已經(jīng)準(zhǔn)好了才去。這一條對(duì)我而言很困難,因?yàn)槲艺J(rèn)為我不一樣。我認(rèn)為我不需要去市場試水一下看看是什么情況。我以為我已經(jīng)知道自己什么時(shí)候已經(jīng)為申請(qǐng)做好了準(zhǔn)備?,F(xiàn)在我告訴你。你不會(huì)知道什么時(shí)候可以去申請(qǐng)。所以其實(shí)你可以現(xiàn)在就去申請(qǐng)。當(dāng)然,你不應(yīng)該連for循環(huán)語句都沒學(xué)就瘋狂去向300家公司提出申請(qǐng)。但你應(yīng)該知道的是,了解自己應(yīng)該學(xué)什么的最好辦法就是去申請(qǐng)工作并且去試探一下市場。
好了,現(xiàn)在該你上場了,去寫代碼吧!
原文鏈接:https://medium.freecodecamp.org/how-i-went-from-newbie-to-software-engineer-in-9-months-while-working-full-time-460bd8485847
編譯組出品。編輯:郝鵬程。
聯(lián)系客服