1. 程式人生 > >我30歲自學程式設計,當上高階工程師,幾度精疲力盡想放棄

我30歲自學程式設計,當上高階工程師,幾度精疲力盡想放棄

  【騰訊創業編者按】布拉德·克里斯平(Brad Crispin)原本是客戶服務行業的一名從業人員,在30歲之後才開始學習程式設計,最後成為線上教育平臺 Udacity的高階工程師。他是怎麼做到的?近日,克里斯平在社交網站Medium撰文講述了自己從零開始學習程式設計到成為軟體工程師的經歷。

  這是發生在我身上的一個故事:從一個零起點學習程式設計的小白,到成為Udacity的一名全棧工程師。(Udacity是一家致力於程式設計線上教育的創業公司)。

  在找第一份工作之前,幾乎每個招聘初級網路工程師的帖子都要求“電腦科學學位或兩年的工作經驗”,而我沒有人任何工作經驗,但我與其他人不同的時,我並沒有放棄,雖然異常艱苦,但是我堅持了下來。

  在探索計算機程式設計的這條路上,我經歷了許多磨難,與親人之間的關係一度非常緊張,我也耗盡了我的積蓄,曾經一度失去自信,甚至還中途放棄。後來,經過一年的反思,我以一種新的心態再次嘗試,並取得了成功。

  今天,我領導著一個由10名工程師組成的團隊,負責多個核心繫統的開發,包括入學系統、學生專案程式碼評審系統和論壇等。成千上萬學生在我們的平臺上參加免費課程或者參加付費的Nanodegree專案。在付費專案中,如果通過了我們的Nanodegree認證,他們將有機會獲得在計算機行業尖端領域的工作機會,包括React、iOS和Android等主流平臺的軟體工程師職位,以及更前沿的AI、機器學習和自駕駕駛汽車等領域的軟體工程師職位。

  下面是我的故事:

  我的失敗經歷

  我已經厭倦我幹了七年的工作,我不能忍受我的餘生一直從事這份職業。我想要成為一名軟體工程師。但我不知道我為什麼想成為一名軟體工程師,只是覺得它對我有一種吸引力,我想要建立某種東西。

  但是,我的數學不好,我也不認識任何一個程式設計師,我對這個工作缺乏瞭解,也不知道自己是否會喜歡它。好心的朋友向我提出了兩點意見:第一,我的這種想法是瘋狂的,第二,我太老了。鄭州看病便宜婦科醫院:http://www.xasgfuke.cn/鄭州男科醫院:http://mobile.tongji120.com/鄭州男科醫院:http://www.tongji120.com/鄭州男科醫院哪家好:http://www.tongji120.com/

  2014年1月,我參加了General Assembly的一個訓練營,學習程式設計。訓練營在當時是一種比較新鮮的事物,其培訓系統很不成熟。我們的班級很大,班級成員的學習起點很不相同,課程也在不斷變化,培訓過程讓人感覺很混亂。幾個星期過去了,我們開始聽到有些從這畢業的學生仍然沒有找到工作。一種明顯的焦慮感在我們中間出現了:我們放棄了原來的工作,花費一萬美元來這裡學習新東西,真的能成為一名軟體工程師嗎?

  終於,在第二學期開始之前,我還是選擇了離開。當然,我也在訓練營中學到了很多知識,也認識了一些很好的講師,我的幾名同學也在畢業後成功當上了網路工程師,或者找到了其他好工作。但是,就整體培訓效果而言,並不理想。

  離開培訓營後,我花費一個月時間建立了一個前端設計作品集,並開始接一些小型專案,做Javascript開發。這些早期的努力是有成效的,我確實獲得了一些兼職工作,我開始變得樂觀起來。但是,幾個月過去了,我的工作依然很不穩定,我不得不再次懷疑自己。·

  我發現,我用在尋找工作上的時間和程式設計的時間一樣多。獲得的專案斷斷續續,在編寫程式的過程中,也得不到很多技術反饋,同時收入不穩定,給家庭造成壓力,而更要命的是,沒有人能告訴你,你是否在學習正確的東西。在這些因素的影響下,我沒有了安全感。

  我開始留意怎樣才能找到全職工作。我聽說矽谷有很多自學成才的程式設計師,但是,所有招聘啟事都都明確要求有相關的學歷和資歷,為此我感到困惑和沮喪。每個招聘初級網頁工程師的帖子似乎都要求具有“計算機專業學位或兩年工作經驗”。如果需要學位才能獲得工作機會,那麼沒有學位的人又怎能獲得兩年工作經驗?自學的工程師怎樣才能得到工作機會?

  儘管如此,我也開始投簡歷。我開始研究面試試題,希望能得到一個機會。在此過程中,我也意識到自己對資料結構和演算法一無所知,也不知道如何開始學習。突然間,我再次陷入絕望。對於我想要的工作,我不符合它們的要求,我懷疑我即使獲得了面試機會也不會通過。

  這是一段艱難的歲月,六個月來,我的財務狀況和家庭關係都十分緊張。我是一個訓練營的輟學者,一名兼職Javascript開發者,我不得不面對事實,所以我做了一個很現實的決定——放棄成為一個軟體開發者。

  我告訴朋友和家人,我之前的行為是一時衝動,並且已經為此付出了昂貴的代價,我已經重新找了一份與我以前的職業生涯有關的、更好的工作。

  我是怎麼成功的

  只有當你放棄的時候,你才是真的失敗了,而我已經放棄了。面對我放棄後的生活與工作,我很快就後悔了。

  時間過得很快,一年過去了,我發現我還是不能釋懷。於是,我繼續利用空閒時間程式設計。程式設計成了我一個煩惱的興趣,它消耗了我很多時間,而結果往往令人沮喪,我沒有獲得什麼成果。但是,我無法抗拒那種吸引力,我想要創造某種東西,而不僅僅是去欣賞別人的工作成果。

  同時,我總結了上一次失敗的原因:首先,我放棄了;其次,我不知道自己的方向,也無法得到高質量的工作經驗或反饋。

  於是,我制定了一個應對方案:

  不要中途放棄

  找一個導師

  不計報酬,找一個好的實習機會

  告訴每一個人,我知道自己失敗了,但我還要再做一次

  那麼第一步,我需要積累工作經驗。但我該怎樣獲得一個實習機會呢?我想或許可以去尋求朋友的幫助。

  一年以前,我閱讀了Loren Sands-Ramshaw發表在Hacker News上的一篇關於網路安全的文章。我們是曾是大學同學,但當我還在忙著拿學分的時候,他已經去國家安全域性(NSA)上班了。讀完他的文章後,我立馬寫信給他,詢問我學習程式設計的可行性,隨後,他也給我寫了一封經過深思熟慮的、鼓舞人心的回信。

  一年後,我在LinkedIn上再次看到了他的資料,他建立了一個名為Parlay的移動博彩公司。 我馬上給他寫信,申請成為他的一名實習生。經過簡短的面試,他同意接受我,並願意給我一點補貼。

  這件件事完全改變了我的人生軌跡。現在,我終於可以投入真正的工作了。

  那麼我應該如何做好自己的第一份程式設計工作,成為一名優秀的實習生呢?上一次的工作經驗給了我答案。我來自服務行業,我的本能就是把這些經驗應用到實習中:

  迅速反饋資訊,儘量在五分鐘內獲得確認資訊。

  不要輕易拒絕,儘可能回答“yes”。

  保持積極狀態,以充沛的精力投入工作,你的導師將看到你的工作強度。

  問問題時也要保持思考,在你努力去發現、閱讀和理解之前,不要問導師某一行程式碼有什麼用處、如何突出某個特徵。就算努力研究後你還是有問題,那也會是更有建設性的問題。

  你要不計報酬地工作。我發現,如果你沉浸於工作,你將學得很快,沉浸是快速學習的祕訣。

  根據我的經驗,學習一門語言和學習程式設計一樣,關鍵都在於沉浸。我在俄羅斯的一所大學呆過幾個月。面對完全陌生的語言環境,我曾失去對週遭事物的理解能力,簡直令人絕望。但在這種環境裡沉浸了幾個星期後,我的語言能力飛快提升。

  我試圖用相同的方式去學習程式設計。

  沉浸,意味著100%集中精神。如果可能的話,不交朋友,不喝酒,不看電視,你的生活只剩下看程式碼和寫程式碼。如果你花5分鐘來閱讀新聞,請注意你正在打破沉浸狀態。你應該保持專注,保持耐心,你的心靈會適應這種狀態,消除所有的分心。你可能會發現,懷疑是最讓人分心的,沉浸是成功和失敗之間的分水嶺。

  那麼,你怎麼知道你是否達到了沉浸狀態?很簡單,如果你不是做夢都在寫程式碼,那麼你就還沒成功。

  如何獲得第一份正式工作?

  當我離開實習崗位,開始尋找全職工作崗位時,我開始建立一個新的程式設計作品集,重點突出React程式設計和Node程式設計。

  很多招聘網頁開發人員的帖子都要求具有React和Node程式設計能力,我很高興進入這個領域,而且我認為這個領域大有機會在。我在實習期間就是從事Node程式設計工作,我還在線上教育網站Udemy上學習了React + Redux課程。經過密集的Javascript開發訓練後,我發現我比以前更高效,更有信心 。無論是React、Redux還是Graphql,我都能輕鬆地學習,沉浸原則以及找一個導師,這兩種方法奏效了。

  同時在導師的建議下,我還利用空閒時間學習了強型別語言(Strong-Type Language),於是我報名參加了一個iOS專案,並學習Swift語言。在此我也強烈建議,程式設計學習者一定要學習一種強型別的語言 。

  在Swift語言課程接近尾聲時,我終於獲得了一份全職工作的面試機會。我要面試的是Udacity-Blitz(為Udacity學生介紹外包工作的平臺)的React開發工程師。招聘人員稱,我有三個月從事Javascript開發的實習經歷,加上我的React程式設計作品集,所以我得到了這次面試機會。我認為,對於一般的程式設計工作,你的程式設計作品集會比你為技術面試所做的準備更重要。

  同時,我也在努力尋找更多的工作機會。六個星期後,我又面試了Udacity的一個全職崗位。我花了兩個星期的時間準備,專門研究了Udacity的技術面試培訓課程。在精心準備下,我如願通過了面試。

  此後,我在工作中學習了資料架構,並在Udacity成長為一名高階工程師。

  回顧我為成為軟體工程師走過的這條路,有很多錯誤,當然也有很多經驗,比如在那失業的一年多時間裡,我學會了謙遜、堅持不懈和專注。

  我很幸運,能夠與很棒的同事一起工作,能夠為一家我喜歡的公司服務,做我喜歡的工作。而我給大家的建議就是:沉浸,找一個導師,不要回頭。我可以很肯定地告訴你,這些都是不容易做到的。