職場系列: 如何在全職工作9個月內從新手到專業軟件工程師

職場系列: 如何在全職工作9個月內從新手到專業軟件工程師

在這篇文章中,我將分享我在九個月內從零到專業軟件工程工作,同時全職工作並自學成才。

每當我開始閱讀成功故事時,我會立即尋找作者的背景,希望它與我的相符。 我從來沒有找到像我一樣擁有相同背景的人,而且很可能我的確不會與你相提並論。

儘管如此,我希望我的故事能激發他人的靈感,並將其作為一個有價值的數據點,可以添加到您的成功案例數據集中。

全面披露

我在九年前參加了Visual Basic for Applications(VBA)課程。 在我七年前的新生工程課程中,我學到了C++,Python,Matlab和Labview。 我畢業於一所擁有化學工程學位和良好GPA(三年前)的優秀大學。 在學校以外,高中或大學裡,我沒有做任何編程,直到去年我決定要學習。

大學畢業後,我在一家煉油廠找到了一份工藝工程師的工作。 我在那里工作,直到我將職業轉變為軟件工程。

為什麼我想改變職業生涯

我喜歡解決技術問題,但我知道我想在某個時候進入商業/創業世界。 我一直想著MBA的想法,但每當我看到頂尖學校的價格標籤時,我的興趣就會減弱。

2017年5月27日,我發現自己再次在Google上搜索MBA,不知怎的,我偶然發現了軟件工程。 這似乎是一個完美的契合。

軟件工程師的需求越來越大,工資也很高,而且它是一個完美的行業,無需大量的初始資金即可進入創業領域。 你所需要的只是一台電腦,你的機會是無限的(有點)。

在任何其他工程學科中,您都不能有一個想法,開始構建它,向用戶展示,並以少量資本和低門檻進行迭代。 在化學工程中,如果您對新產品有所了解,那麼您基本上需要運行工廠或大量資金來設計工廠。

我聽說有人辭掉工作並參加訓練營,但我越是在網上看到它,我就越意識到如果你堅定並專注,你可以完全自學。

你可能會爭辯說你正在失去一個訓練營提供的網絡和職業建議。 這可能是真的,但我很幸運,因為我住在灣區,這讓我參加了幾次聚會,所以我就這樣聯網了。

此外,最糟糕的情況是,我意識到我不能自己做,然後我會辭去工作去參加訓練營。

目標

照片來自Robert BakerUnsplash

你需要有一個目標。 特別是如果你想在全職工作的同時學習。 如果你沒有任何外部壓力推動你,你很容易讓你的學習繼續下去。 所以你需要創造內部壓力。 你的目標應該是簡單和量化的。 你應該做足夠的研究來提出一個合理的目標。 我的是以下內容:

在一年內獲得一份軟件工程工作,薪水與我現在的工資相同或更高。

計劃

攝影: Glenn Carstens-Peters來自Unsplash

一旦你有了目標,你需要一個計劃來幫助你實現目標。 這是您盡可能多地消費成功故事的地方。 它們都不符合您的確切情況,但您可以從每個人那裡獲得一些建議。 我使用諸如learnprogramming subredditfreeCodeCamp論壇Medium之類的資源開發(並迭代)我的計劃。

2017年5月27日,我決定讓編碼陷入困境,然後我首先陷入困境。 那天我決定每週開始工作不超過40小時,這樣我下班後和周末都有時間編碼。 幸運的是,我做了很好的記錄我的進展。

通過多次迭代,我的計劃最終看起來像這樣:

  1. 參加CS課程簡介,深入了解核心CS概念
  2. 關注freeCodeCamp,直到我可以自己構建組合級別的完整堆棧Web應用程序
  3. 重構清理代碼,添加測試,專注於高級概念
  4. 有助於開源
  5. 準備面試

首先,我的計劃很簡單。 當時,我以為我會遵循谷歌的技術指南,所以我開始推薦他們推薦的入門課程,Udacity CS101。

第0個月 – Udacity CS101,哈佛CS50

做出這個重大決定的高潮給了我很多精力。 我下班回家後就開始編碼,直到我上床睡覺才停止。 整個週末再來一次。 Udacity CS101跟踪完成百分比,這對我來說是一個很大的動力。 我在編碼後每天記錄完成百分比。 我在10天內完成了第一個75%。 最後的25%在遞歸中很重,對我來說有點困難。 總而言之,我花了20天才完成Udacity CS101。

當我使用Udacity CS101時,我開始非常重視閱讀learnprogramming subreddit 我讀到,對於那些希望將職業轉變變為在線活動的自學成才的開發者來說,這一點非常重要。 我決定使用我的全名創建新的Twitter,Reddit,Stack Overflow,Medium和Quora帳戶,以便我可以建立一個在線狀態。

此外,我決定停止閱讀分散注意力的媒體,如Instagram,Facebook和非編程的subreddits。 我只會查看手機上與節目相關的新聞和帖子。 這對於確保我找到最佳學習路徑和學習資源至關重要。 正因為如此,我在edX上發現了關於哈佛CS50的內容。

我原本滿足於只做一個介紹課程,但每個人似乎都推薦哈佛CS50,所以我決定深入研究下一個。 其他學校的CS學生參加了這門課程,並表示他們在CS50學到的知識比在大學學習CS一年或兩年學到的更多。 普遍的共識是,該課程很難但值得。 到第0個月結束時,我完成了前5個講座和家庭作業。

第1個月 – 哈佛CS50,Linux,第一次聚會,freeCodeCamp

我在這個月的中途完成了CS50。 我不會過多評論我對CS50的體驗,因為我在這裡寫了一篇關於我的經歷的深入帖子。

TLDR:這是一個很棒的課程,我強烈推薦它。 大衛馬蘭是一位優秀的講師,有大量的資源可以幫助你度過難關。 您從C開始,繼續Python,然後完成Web開發。 它非常密集,並且有很多材料,但我認為它非常值得。

在CS50之後,我決定將我的XPS 15設置為雙啟動Windows和Ubuntu。 這是一個令人沮喪的周末。 我弄亂了我的分區,差點把我的筆記本電腦弄髒了。 我差點把我的筆記本電腦拿起來換一個新筆記本電腦。

我慢慢地讓自己脫離了Windows,最終只使用了Ubuntu。 我想強迫自己對我認為在某種程度上工作的命令行感到滿意,但我還有很長的路要走。

我開始了100天的代碼,以確保我每天都保持專注和編碼。 記錄您的進度非常重要。 如果你每天都在取得進步,那似乎並不多,但是當你回顧一個月或幾個月時,你會發現你實際上取得了相當大的進步,這促使你繼續前進。

我知道網絡會成就或者讓我失望,所以我鼓起勇氣去參加我的第一次編碼聚會。 我從來沒有參加任何聚會,更不用說編碼聚會了。 我很緊張,在那裡開車,停車,走到門外,我幾乎轉過身回家。

這有助於它成為該集團的第一次聚會。 我很快意識到沒有理由感到緊張。 沒有人相互認識,沒有人是評判,每個人都渴望學習。 這是聚會狂歡的開始。 我最終在9個月內參加了50多次聚會。

我很高興我很早就開始參加聚會。 大多數人在尋找工作時才開始參加聚會,但那時候已經太晚了。 有很多理由要儘早開始。 僅舉幾例:

  1. 發展關係需要很長時間。 提前開始意味著您有聯繫,可以在以後找工作時為您擔保
  2. 談論與陌生人的編程是準備面試的好方法
  3. 您可以從領先於您的人那裡學習新的框架,工具和學習資源。 這可能會影響您未來的學習計劃。

在我的編碼過程中,此時存在一些不確定性。 這是關於什麼時候我需要決定我想成為什麼樣的軟件開發人員。

最終,我選擇了網絡開發,因為它似乎有很高的需求和很多在線資源。 一旦我明白了,我需要弄清楚下一步該做什麼。 有些人建議在這個階段我應該考慮我想要構建的Web應用程序,然後開始使用。 有人推薦了Odin Project或freeCodeCamp。

我參加的每週聚會的人都知道Ruby並想用Ruby做項目。 這是我決定全力投入奧丁項目的一個重要原因。

兩天后,我放棄了這個想法。

這是走自學路線的缺點之一。 一分鐘你認為你知道應該採取什麼樣的路徑,但第二天你想知道這是不是正確的舉動。

我讀到Ruby已經失寵了,我通過搜索Ruby vs JavaScript作業證明了這一點,所以我最終啟動了freeCodeCamp。 讓freeCodeCamp困擾我的一件事是他們提出了項目的想法,所以每個露營者都做同樣的項目。 起初這讓我很擔心,因為我想要讓招聘人員脫穎而出。 但是,我最終喜歡freeCodeCamp,現在我強烈推薦它。 有關freeCodeCamp的經驗和建議的更多詳細信息,請查看我的文章。

第2個月 – YDKJS,freeCodeCamp前端,React

我開始閱讀你不知道JavaScript ,因為每個人都建議它補充freeCodeCamp。 我不得不重新閱讀幾個部分,因為它非常密集,但它是學習詞彙範圍,閉包,承諾和JavaScript的所有部分的完美資源,您聽到並想要學習但卻從未這樣做,因為它們看起來很難。

我完成了freeCodeCamp的前端部分。 清單格式和預計完成時間有助於我快速完成。 我也渴望繼續下一節並學習React。 但是,這也意味著我的項目具有最小的樣式。 我做了所有用來完成用戶故事的內容,僅此而已。

事後看來,也許我應該專注於讓項目更具吸引力。 也許,這會幫助我更深入地學習CSS。

下一步是學習React,而且我非常精力充沛。

我聽說過這麼多,我已經準備好適應那些很酷的孩子了。 但是,考慮到當時的許可問題,我有點猶豫不決。 我真的很高興這不再是一個問題。 學習反應對我來說很難。 我當時並不知道任何好的教程(但現在好像有一點)。

我嘗試閱讀文檔並跟隨Facebook的Tic-Tac-Toe教程,但我並不完全了解所有這些。 我被告知如果這對我不起作用,那就意味著我對JavaScript不夠了解。 所以我回去閱讀你不知道的JavaScript,但對我來說再次那麼密集。

第3個月 – freeCodeCamp React,CodeClub,啟動freeCodeCamp後端

最後,我決定通過freeCodeCamp React項目來研究它是如何進行的。 那段代碼很難看,但它確實讓我更了解React。

我每週參加的聚會決定他們將用完整的堆棧JavaScript而不是Ruby來構建項目,他們決定第一個項目是為聚會組建立一個網站CodeClub.Social

我使用React和Meetup API開發了卡片,允許用戶從我們的網站註冊接下來的三次聚會。 我從freeCodeCamp快速休息一下來做這件事有點困難,但這是一個我無法理解的機會。 我很高興與一小群人一起開展一個項目。 它還幫助我學習了Git和Github。

在月結束之前,我開始研究freeCodeCamp的後端部分。

第4個月 – 完成freeCodeCamp後端,Yeggle

我在freeCodeCamp中完成了所有API項目,但是我開始偏離圖像搜索抽象層項目中的freeCodeCamp。

我很想製作完整的堆棧Web應用程序,所以當我看到這個項目的標題時,我對自己的項目有了一個想法。 我會創建一個節點應用程序,將隨機imgur URL存儲在數據庫中,然後創建一個前端,輸出用戶指定數量的隨機圖像。 每個人都說的是真的:當你在做一個屬於自己想法的項目時,你會更加努力工作並取得更大的成功。

一旦我開始工作,我為自己感到驕傲。 這是醜陋和笨重,但它的工作。

當我在freeCodeCamp工作時,我正在學習哪些項目將在我的能力範圍內。 我當時經常跑步,所以我會在跑步時提出想法並在回家後寫下來。 這樣,當我準備好時,我會有一份項目創意清單。

我終於準備好開始製作我自己的有用和精美的全棧Web應用程序,與用戶分享並投入我的投資組合。 我已經準備好開始了。

在尋找新餐廳時,我總是發現自己打開Yelp查看評論,然後打開地圖查看他們的評論。 如果我製作了一個並排比較的應用程序怎麼辦?

所以我做了Yeggle 我使用Node / Express / React以及Google Maps和Yelp API。 有一些障礙我認為我無法克服,但最終我完成了,我為我的應用程序感到非常自豪。 然後我把它發佈到Reddit,沒有人關心。 這有點令人失望,但我沒有讓它讓我失望。

第5個月 – StockIT

這個月我沒有做得那麼多,因為我開始了兩個星期的假期去日本和泰國!

但我確實開始並完成了我的下一個項目。 我一直在閱讀作為一名自學成才的開發人員找工作有多困難,所以我認為我需要做一些獨特的事情。 我記得道瓊斯股票圖表開始趨勢的遊戲,你有一次買入機會和一次賣出機會,目標是擊敗市場。 遊戲的目的是向您展示擊敗市場是多麼困難。

我的想法是製作一個類似的遊戲,但不是市場,你會玩機器學習算法。 所以我創建了StockIT

我參加了關於Pandas和Scikit Learn的視頻教程,其中涵蓋了多種機器學習技巧。 我原本想做一些很酷的深度學習技巧,但我意識到這需要大量的數據集和更多的時間,而不是我想花的時間。

相反,我堅持一個簡單的線性回歸模型。 我認為這將是困難的部分,但事實並非如此。 使用React讓D3與jive合作是困難的部分。 兩個庫都想控制DOM。 有一些其他圖書館幫助加入了這兩個,但我覺得他們太臃腫了。 我最終使用D3生成SVG和React來處理DOM,這對我來說非常好。

這次當我與Reddit分享時,每個人都喜歡它!

事實證明,就像VC一樣,redditor就是關於機器學習的全部內容。 來自Reddit的所有愛情都是一種很大的信心提升。 人們在玩我的遊戲並享受它!

第6個月 – jobSort(),Job Hunt Prep

在StockIT之後,我進入了我的下一個個人項目。 我想創建一個工作委員會,匯總了較小的以科技為重點的工作列表網站,如Stack Overflow,Github和Hacker News。 為了添加我自己獨特的旋轉,我決定根據用戶在工作中想要的技術進行排序,以及他們對每個技術的需求有多嚴重。

例如,假設我正在尋找一個正在尋找知道JavaScript,React和/或Python的人的工作,我真的很想使用JavaScript和React,但我並不關心Python。 然後我可以給JavaScript一個3,React一個3,也許Python一個1.然後列表會相應地排序。

我遇到了這個項目的各種障礙,不得不改變課程幾次,但我最終得到了一個我很滿意的產品。 我最後的技術堆棧是React / Node / Express / MySQL。 我將該項目發佈到了cscareerquestions subreddit,並在它被取消之前獲得了650次觀看,因為它們不允許個人項目。

“最終”產品就在這裡 ,如果您有興趣了解我的掙扎和重構,請查看我的帖子。

由於我的問題,jobSort()佔據了本月的相當一部分。 我最初和我在第一次聚會時遇到的朋友喝咖啡,他建議我現在開始申請工作。 我讀到了所有人說他們等待太長時間申請的地方。 此外,每當我看到一個帖子詢問何時申請時,最高評論總是“現在”。

在我的腦海裡,我打算通過我的結構化計劃來建立我的投資組合,用個人項目,然後開發開源貢獻,然後準備面試,最後開始申請工作。 這位朋友說服我放棄這個計劃並開始申請。 所以這個月我做了一個投資組合和簡歷。 接下來的一個月我會開始申請。

第7個月 – 測試,求職

這個月我專注於修改我的項目併申請工作。 我也想學習測試和Redux。

我將flexbox添加到CodeClub.Social以使其響應。 我在jobSort()上改進了移動用戶體驗。 我使用mocha / chai /酶添加了對jobSort()的測試,這很難設置,易於上手,然後很難獲得100%的覆蓋率。

到月底,我申請了63個工作崗位。 我認為這是一種自我評估。 我的投資組合/簡歷是否足夠好? 如果是這樣,我需要做些什麼才能準備面試? 起初,我申請了黑客新聞:誰在招聘,而且確實。

在Hacker News上,我使用jobSort()來確定要申請的列表。 事實上,我試過非軟件公司,看看我是否能在任何地方接聽電話或面試。

起初,我很快申請,而不是個性化我的簡歷/求職信。 然後,我決定個性化我的求職信和簡歷,然後嘗試向該公司的某個人發送電子郵件。 這種方法明顯優於霰彈槍方法。

那個月我接到了五個電話 – 兩個來自招聘公司,三個來自軟件公司,其中包括:

  • 在互聯網公司承包DevOps /測試角色
  • B系列食品分析公司
  • 最近由一家大公司購買的一個相當大而成功的創業公司

我在其中兩個中通過了人力資源屏幕,但沒有一個人進行過現場採訪。 我很滿意這三個電話,我從他們那裡學到了很多東西。

每個人都在網上提到,初級開發人員從一開始就不會知道那麼多,他們只需要充滿熱情和興奮就能學習。 所以我想,很容易。 我很有興趣和興奮學習。 然而,我從這些電話中學到的是,沒有人在尋找初級開發人員。 他們希望你從第一天就知道你在做什麼。

這些電話告訴我,我需要

  • 要善於從第一天起增值
  • 要足夠自信地說服他們我可以從第一天起增加價值

第8個月 – 夜班,Redux,開源,現場面試

我本月開始工作,在我的全職工作中工作40天,每週工作6天,每天工作12小時,下午5點到早上5點。 啊。

我知道這個月我不能做得那麼多,但我有一個目標,我想見到它,所以我不能休一個月。

我重構了jobSort.tech以使用Redux,這令人驚訝地沒有我想像的那麼困難。 我聽了很多關於它的播客,並閱讀了關於它的博客文章,直到我開始使用它之前,它從未對我有意義。

我非常喜歡Redux的數據流。 現在看到人們抱怨Redux很有意思。 我認為我沒有資格強烈表達我的意見,但我確實喜歡減速器模式。

這應該是我的開源月份。 我打算做我的第一個開源貢獻,這將是一個偉大的圖書館的偉大貢獻。 我打算為React做出貢獻!

每個人都說這是一個難以閱讀的代碼庫,更不用說貢獻了。 但我需要脫穎而出,我需要獨一無二。 我知道我的貢獻不會很大,但我仍然希望這樣做。

我將首先閱讀文檔,然後介紹代碼庫。 每個問題,每個PR都要關注。 完全閱讀React文檔是一個很好的練習,我很高興我做到了。 但我很快意識到,為React做出貢獻的問題是,沒有那麼多“好的第一個問題”,而且它們很快被搶走了。

在我參加的其中一次聚會上, Anthony Ng建議我嘗試Downshift ,這是Kent C. Dodds的自動完成庫。 這是一個遊戲改變者。 它在我的駕駛室裡。 正確的難度,適量的問題需要幫助,沒有太多的合作者,超級有用的維護者,乾淨的經過良好測試的代碼。 最重要的是,它是我在jobSort()應用程序中遇到的一些問題的完美解決方案。

本月大約一半時間,我收到了上個月申請的其中一家公司的電子郵件。 他們設置了初始手機屏幕,然後是技術手機屏幕。 他們正在尋找的技術正是我所學到的 – React,Redux和D3。 我大多只是談論我的項目以及我做出某些決定的原因。 在此之後,他們讓我到現場接受采訪。 我第一次現場採訪!

我根本沒有準備接受采訪,所以我進入了它,期望我不會得到這份工作,但我會獲得寶貴的面試經驗。 我還在睡了三個小時,因為我還在夜班工作,這沒什麼用。 幸運的是,技術部分不是白板,只是一小時的編程對話。 這是一個相當直接的挑戰,但我非常緊張。

起初,我擔心確保在不抬頭的情況下知道所有事情。 當我意識到我不打算完成挑戰時,我意識到我需要不再擔心面試官對我的看法,只是google / stack溢出來尋找答案。 我沒有最終完成,我以為我失敗了。

由於我認為我沒有通過配對編程,我對其餘的採訪感到放鬆。 最後,我離開了採訪我的下巴。 最糟糕的情況我得到了一些有價值的面試經驗,最好的情況是我得到了我的第一份工作機會。

第9個月 – 工作機會

我在第一天的9個月零7天之後收到了我的第一份工作機會,當時我決定首先潛入編程,以改變職業生涯。 我感到很自信,因為我在第一次現場採訪後收到了報價,但與此同時,如果我沒有接受報價,如果這是我幾個月內收到的唯一報價怎麼辦? 我最終接受了這個提議,我很滿意我的決定。 我希望得到代碼付款!

忠告

到目前為止,我大多分享了我的故事,並提出了一些建議。如果你正在閱讀這篇文章,你可能正在考慮改變職業生涯,或者正在學習編寫代碼以改變職業生涯。 我希望以下建議可以幫助您制定計劃或堅持當前的計劃並實現目標。

  1. 找出激勵你的動力並將其用於你的優勢。 對我來說,這是清單,記錄我的進展,並與各種編程社區進行互動。 如果你沒有動力去實現你的目標,那麼沒有其他事情是重要的,因為你不會完成。
  2. 制定目標並滿足它們。 我認為你應該有月度目標甚至每日目標。 每月目標,以確保您正在實現您的主要目標,以及每日目標,以確保您實際上每天的進展。 對我有用的一個策略是在前一天晚上實現我的每日目標。 這樣,你就不能整天做非生產性工作,並且當你真的沒有時,感覺自己取得了進步。 它迫使您將您的日常成就與日常目標進行比較。
  3. 在你認為你準備好之前去參加聚會。 去參加聚會可能會感到很可怕,但正如我上面提到的那樣。 但是,總的來說,每個人都很友好,願意提供幫助。 你可能會發現那些不想與你交談的人,但他們是少數人,沒有人會評判。 此外,每個人都喜歡提供建議(就像我現在正在做的那樣)。
  4. 在您認為準備好之前,請參與開源方式。 當你第一次開始編程時,Github看起來就像你永遠不想去的那個可怕的地方。 它實際上非常適合初學者,是一個很好的地方,可以看到優秀的代碼並審查自己的代碼。 如果你仍然不相信,請查看我的帖子, 為什麼你現在應該為開源做貢獻
  5. 在您認為準備好之前開始申請。 這個對我來說很難,因為我覺得我與眾不同。 我以為我不需要對市場進行測試就能了解應該做些什麼。 我想我會知道什麼時候準備申請。 我現在告訴你 你不知道什麼時候申請。 所以你現在開始吧。 在學習循環之前,你不應該瘋狂併申請300家公司。 但是你應該知道,了解你需要學習什麼的最好方法是應用和測試市場。

現在回到那里和代碼!

發表回覆