當我成功從一名律師轉行成為 Google 軟件工程師的時候,我發表了《幫助我成功轉型的 10 個想法》這篇文章,之後我收到許多提問:
注意:我認為 「FAANG/FAMGA」 不足以概括所有好公司,所以我傾向於使用「大科技公司」,來指代包括這四五個令人着迷的公司在內的所有頗具盛名的公司。
我為什麼寫這篇文章雖然時下流行「推特長度的建議」,但我認為上述的每一個問題都值得用一整篇文章來回答。有意義的技能可不是幾百個字就能講清楚並被讀者吸收的。
所以在這篇文章中我將回答其中一個問題:
我所採用的方法。
如果你想要我詳細回答其他問題,可以告訴我。我會在這篇文章中穿插我的聯繫方式,只有通讀全文才能找到。😊 這樣做也是為了鼓勵你仔細閱讀這篇文章,而不只是為了一些「小貼士」略讀全文。
我持以下觀點:獲得面試機會比學習代碼難;在面試中表現出色和獲得面試機會一樣難;如果你不具備競爭對手同樣的紮實經驗,對於你來說,行為面試很困難。
當我零基礎轉行時,以及當我將目標設定在大科技公司的時候,我知道我將和博士生、從青少年時期就開始寫代碼(通常寫了 20 多年)以及在技術上有相當成就的人同台競技,而當時的我只有一年的相關經驗。
同時我不在美國,給挑戰又增加了難度。
所以我制定了一個不僅僅是「學習寫代碼」的計劃。
首先,讓我詳細介紹一下為什麼我認為「學習寫代碼」是準備環節中最簡單的部分。雖然從 2012 到 2018 年,我反覆嘗試失敗了 4 次。
這個想法是 2018 年產生的。當時我的創業公司正在垂死掙扎,為此我損失了大量的資金,2 年沒有任何收入。
但是我決定從我的信貸中取出 4 萬多美元,為什麼?去參加一個舊金山的訓練營(bootcamp)。
我離開了家人,只身前往舊金山,本來要參加為期 14 周的課程,但是在加入這個頂級訓練營的第一周我就放棄了,返回澳大利亞。
我曾十分期待這個訓練營(也為貸款感到焦慮),但是對訓練營的教學策略產生懷疑。我注意到老師和課程設置是幫助學員「學習寫代碼」而不是「成為一個程序員」。
根據我在 4 個國家以及其他 3 個行業的工作經驗來判斷,這種策略是一個錯誤。
學習寫代碼也是一種形式的「識字能力」,識字能力並不是技能。
我自己就是一個活生生的例子:這 4 次嘗試中,每當我專注於「學習寫代碼」,我都會在一個非常小的領域裡獲得成功,要麼是學會了 HTML 或者 Java,要麼就是跟着書本編寫了一個安卓應用,我總是能夠學會讀寫一些基本的內容。但是我不知道怎麼自己搭建一個有用的東西,當需要真正應用技能的時候我感覺絕望——我沒有真正的「技能」。
在這個時代,我們並不因為我們知道什麼而被僱傭,我們因為我們的技能被僱傭。
我馬上列出代碼訓練營對於我來說是一個錯誤決定的原因。
這個昂貴的訓練營可能會帶給我一些基礎的技能,甚至可以幫我找到「入門級別」的工作。但是我可以預見學習會變得非常倉促、標準化以及專注於「正確答案」。
我並不想在任務清單上「打勾」,我想要獲得技能、競爭力和信心。
另外,訓練營默認將每一位學員打造符合「初級程序員」的標準。
我當時已經 37 歲了,不滿足於「入門級別工作」的思維方式。另外即便是行業新人,我不相信任何有三年以上工作經驗的人是「初級」員工。
然後我發現訓練營的一些老師和助教是沒有找到工作的一些前學員。他們沒有轉行的經驗,有一些甚至沒有過「職業經歷」,職業輔導員甚至從來沒有過科技行業面試別人的經驗。
我怎麼從一些沒有經驗的人身上學習到我要的經驗呢?
還有地理上的困難。本來就生活在舊金山的學員有本地優勢,來自美國其他地區的學員沒那麼容易找到工作,並且在畢業後和拿到第一份工作前的這段時間很容易把錢花光。見鬼,我生活在澳大利亞,這可怎麼辦?
由此我得出清晰的目標。不是「學習寫代碼」——而是建立一個可以實現自我的職業。
另外,在研究訓練營的時候,我看到了「兼職學習」的可能性。我可以找一份工作,然後在晚上和周末學習,這樣做更容易堅持。兩年沒有收入之後,我必須有一點現金流來消除恐懼,才能專注成為一名專業的軟件工程師。
正如傳奇商人哈維·費爾斯通(Harvey Firestone)所言:
「據我所知,盈餘是對商業判斷的最大幫助。」
在學習期間有收入會讓我有信心做出更好的判斷。更好的判斷對於需要通過長期努力來實現的職業很重要。
毫無疑問,如果我在訓練營中學習 3-4 個月,我會「學習寫代碼」。
但是我學到的東西足以讓一個優秀的團隊買單嗎?我不相信訓練營和在線代碼學習網站會幫助我實現這一目標。
學寫代碼不會讓我走得太遠。我必須足夠優秀才能擊敗擁有相關學位、經驗和人脈的競爭對手。我想在代碼領域獲得一份職業。
所以我離開了訓練營,浪費了大約 9000 美元,回到澳大利亞。當然,我已經掌握了基本的代碼知識,可以通過訓練營的入學考試。但我遠非能勝任工作。
如果你是職場新手,可能很難理解這裡的分析。但你是否注意到許多人都玩音樂,但不是所有人都能勝任樂隊成員的職位。正如我的導師所說:
"邁克爾·喬丹不想學打籃球,他想進入 NBA。這兩者差異巨大。"
這一想法改變了一切。在 2019 年的 8 個月內,我獲得了我申請的所有 4 個開發崗位的 offer。而在這個過程中,我僅遵從了我和我的教練(非技術)制定的發展計劃。
不過不要被誤導。我有意想不到的優勢。使我受益的兩個主要優勢,一開始看上去是我的劣勢。
這不是我的第一次轉行,在曾經的職業生涯中我有近 10 年的招聘經驗。今天我也做技術方面的招聘,這些招聘模式非常類似。
我最大的優勢是我不以候選人的角度考慮招聘,而是從招聘經理的角度考慮招聘。這對我的計劃產生了重大影響,我了解招聘經理的想法——他們的限制、優先級、價值觀、業務需求、不喜歡的點、危險信號……
我的經驗(年齡?)讓我知道可以對團隊和組織產生什麼樣的影響,我可以向哪些人學習,誰可以給我提供想法、指導、建議和引薦,劣勢成了優勢 – 轉行的優勢。
關於優勢,我想指出一些重要的事情。
「殺手級別」的優勢顯而易見,讓人脫穎而出。聳聳肩說「當然——這就是他們成功的原因」很簡單。但人們常常忽略非常引人注目且嚴重的缺點。
對我來說,我的「缺點」是:
每天我都聽說上述原因是人們轉行的絆腳石。雖然我無法評論這些是否是真正的原因,但我確定,如果我們對自己的局限性喋喋不休,這些局限就會永遠伴隨着我們。
固守我們的劣勢並不能幫助我們克服它們。
在我的教練的幫助下和大量的心態/心理培訓,我挖掘出自己的劣勢並將其中的一些(不是很多!)轉化為主要優勢。就在那時,我意識到我在面試、招聘和資源配置方面的經驗對我制定策略有很大幫助。
優先事項一:職業轉變在學習寫代碼並將成為專業軟件工程師設為目標時,我發現我習慣性使用短線思維,並且對第一份工作抱有不切實際的幻想。
我希望我的第一份工作是光鮮亮麗的、證明所有對我的批判都是錯誤的、給我掙一大筆錢,讓我免於在餘生中自我懷疑和掙扎。
我必須訓練自己以不同的方式看待事物。我的第一份工作必須是讓我收穫學習和成長,為未來的成功做好準備。工資是市場水平,但如果團隊很棒並且確定可以從中收穫成長學習,我很樂意接受略低的薪水。它 不需要 是我夢寐以求的工作。
我非常明確地做出了權衡:
「搞定難題」或舒適不舒適不是首要任務。我的首要任務是成功地改變職業。
接受一份垃圾代碼工作(這種工作有很多......)對我來說並不是一個「成功的」職業轉變。但同樣,我轉行「成功」與否不取決於是否加入了大科技公司。成功的標準非常個人——對我來說,成功意味着熱愛我所做的工作並從中學到很多東西。
在分析了我的優勢和「可轉換」的劣勢之後,接下來我給自己定製了一個計劃。一個為我量身定做的,我可以相信的。
我需要一個考慮我的具體情況的計劃,包括我的脾性、經驗、信仰、價值觀、目標和技能。
請注意,我還沒有談到技術面試、算法和數據結構等等。在制定我的計劃時,我必須關注有與我的代碼技能或技術能力無關的部分。
計劃還需要考慮到我的心理「跑道」——在我放棄、失去希望或改變主意之前,我準備投入多少時間來進行職業轉變?如果不了解我需要多長時間來學習最低要求的技能,我無法回答這個問題。
為了回答這個問題,我需要研究和分析市場需要的最低技能有什麼。
為了回答這個問題,我需要分析市場上的幾十個軟件工程領域,哪些適合我的脾性、興趣、熱情和優勢。並找到我可以專注的領域。
我必須找到我的興趣、我的能力和市場價值之間的重疊。
同樣,我在招聘方面的經驗給了我(小但重要的)優勢。我知道純粹的技術技能是不夠的——這只是起點,「舞會的邀請」。
我也知道,優秀的團隊不僅會為技術技能招聘,也會為非技術屬性而招聘。這些屬性是什麼取決於技術領域、團隊文化、團隊組成等等。
或許你已經猜到了。定製化計劃是多維的,把事情做對只會提供少許幫助,而做錯會導致方向的巨大錯誤和時間的浪費。
由於我的職業生涯幾乎走過了一半,我決心不再重複過去的錯誤。我將:
我必須承認,堅持這些原則比我預期的要難得多。我失敗了很多次,尤其是前三點。但既然我已經寫下了定製計劃,它就是我的行為指導和真理的唯一來源。
我的計劃要求我專注於基本的編程技能,然後將其縮小到我認為與我的長期目標和技能相匹配的部分。對我來說,就是 web 開發。所以我要完全且無情地避免所有「光鮮亮麗的新玩意兒」,比如 Python 或 Java。
教程和沒完沒了的視頻不會讓我擊敗競爭對手。我計算出達成我所在城市開發崗位所需最低技能,需要 900-1100 小時專注學習代碼,以正確的順序練習正確的內容。
準備計劃花費了數周時間。我不斷地修改和強化它,不慌不忙。亞伯拉罕·林肯(另一位轉行的律師!)給我很大啟發,他曾經說過「給我六個小時砍一棵樹,我會用前四個小時磨斧頭」。
我很想直接進入我的計劃並變得「忙碌」起來,但忙碌並不等同於高效。一旦在我的認知範圍內,我確定計劃完善了,我就轉向全神貫注地執行該計劃。
執行意味着很多犧牲,很多很多天的自我懷疑,與改計劃的誘惑作鬥爭,學會管理精力。在此期間,我養成了一些驚人的習慣,但這是事後諸葛。在這6個月的執行中,我不斷受到不確定性、恐懼和偶爾失去希望的打擊。
後來,我在這個計劃的基礎上做了調整,為大型科技公司,尤其是 Google 制定了一個計劃,花費了 500-600 小時的刻意學習,這與我成為開發人員的計劃完全不同。稍後再談。
我從4年的試驗、錯誤和失敗中學到的另一個教訓是,我容易在中途改變計劃,轉換資源、課程或重點。
這是一個非常嚴重的問題,因為每次我們切換焦點或計劃時,我們都會放棄我們已經完成的辛勤工作,回到起點並……重新開始……全部……重新開始。
想象一下,如果你從 A 開車到 B 並不斷掉頭並返回並重新啟動。你永遠不會到達任何地方。
但我給自己做了一個承諾(信守一個承諾比信守一大堆更容易!):我要完成我的計劃,然後再決定是否繼續。這一次直到完成我的計劃,我都不會停下來。
我不必喜歡做這些事情,我只需要喜歡這些事帶來的可能性。
我的計劃有一個特定的時間,即使我還沒有準備好面試,我也會開始面試。但要達到那個階段,我必須善於創造面試機會。
我過去在其他職業中的經歷再一次幫助了我。我應用了我過去 18 年所學的知識,在幾周內獲得了 4 次面試機會,並獲得了全部四份 offer,儘管有很多候選人比我擁有更多的經驗、技能和資格。
這不是因為我更擅長寫代碼。怎麼可能是呢?我只有幾個月的經驗。
我相信拿到四個 offer 是因為 在面試過程中 , 在招聘官面前 我表現出了自己是更好的候選人的樣子。這是展示自己極為重要的一種方法。
收到 offer 很棒,但我遇到了一個意想不到的問題。由於我的計劃要求我對工作職位有清晰的認識,所以我相信這四個職位都是我新職業生涯的絕佳開始。我將如何選擇?
是的,這是一個甜蜜的煩惱,但這個決定不容易做!
為了聰明地解決這個問題,我學會了問自己一個非常重要的問題:
我是知道這一點 還是 我只是這麼想 ?
很多時候,我們根據完全未經檢驗的假設和信念做決定,我們將我們的意見或幻想誤認為是現實。我們實際知道的遠比我們未經驗證的想法要少得多。
有意識地要求我專注於我所知道的,而不是我希望的,或者僅僅是想的。我必須要麼找到證據來支持我的想法,要麼根據我的了解無視一些想法。
這個框架培養了我的分析能力,並幫助我在 2019 年初正確地選擇了第一份工作,那時我已經 39 歲了。
直到今天我還在使用 知道 vs 想 框架來思考日常決策,我發現它是分析複雜決策權衡取捨的絕佳框架。
回顧過去,我積累了很多關於如何堅持我的計劃、重新審視我的目標、自我意識和練習 有目的性 的經驗。
進入新崗位幾個月後,很多律師開始聯繫我,問我是怎麼做到的。奇怪的是,他們中的許多人曾經堅持認為我犯了一個巨大的錯誤,在人生這個階段想要學習代碼是不成熟和魯莽的。
現在他們想要「學習寫代碼」,讓人深思。
他們說「不可能」的時候,是 他們知道這一點 還是 他們只是這麼想 ?
我的目標沒有改變,對我來說,學習、成長和團隊仍然比品牌或金錢更重要。但我快 40 歲了,我還想以一種我在職業生涯的前半段從未有過的勇氣去探索生活。
所以我決定給自己設定一個新目標:我想了解在大科技公司做一名軟件工程師是什麼樣的。我以前在大公司工作過,我知道這並不適合所有人——這就是我一開始決定進入初創公司和小公司的原因。
但是,被所在領域(從工程到產品和銷售)「最佳」人的包圍,我不會學到更多東西並收穫更多成長嗎?我是知道這點,還是我只是這麼想的?
我進行了研究,發現一般來說人們對大型科技公司很滿意。但我也發現大多數人並不像我那樣目的性強。所以我把我的研究限制在那些對自己的職業非常有目標的人身上。他們(幾乎普遍)表示,即使他們決定離開,他們也從大科技公司中成長了很多。離開大型科技公司也是有意為之,以追求他們的最終目標。
所以我決定申請在硅谷、紐約和西雅圖的大型科技公司(包括 3 家 FAMGA 公司)和其他幾家公司。我仍然在澳大利亞,所以這是一個巨大的挑戰。
我重新設計了我的計劃。有幾個步驟是相同的,但必須對代碼課程進行大調整。我還需要了解美國大型科技公司的招聘情況,並使自己值得被推薦。
大約 7 個月後,我開始接受面試。在這 7 個月裡,我非常努力地證明自己值得被推薦,人們根據我的努力和被驗證的決心給我推薦工作。
我被引薦到了 Meta(當時它被稱為 Facebook),但我沒有得到面試機會,因為我的技能不匹配。這對我來說是一個寶貴的經驗,我一直認為自己小心翼翼地只申請與技能相匹配的職位——我錯了。
我意識到,職位描述對招聘公司來說一件事,對 公司之外 的人來說是完全不同的另一件事。這是因為不同公司使用相同的語言來描述不同的職位。招聘方和應聘方可能都不知道這一點!
匯總這些經驗之後,在 3 個月內,我收到了 2 家大型科技公司的 offer,還有一家沒有通過終面,因為我不知道如何從頭開始編寫文件系統(我對 Linux 世界一點也不了解!)。
然後我收到了 Google 的 offer。
再一次,我面臨着一個非常艱難的決定。Google 的名聲響亮,我很難客觀權衡,但我真的很想忠於我的目標、我的計劃和我的意圖。
當涉及到 Google 時,試圖將我所知道的與我想的區分開來非常困難。但我十分確定:面試我的團隊都是很棒的人。
這是我認為運氣很重要的地方。無論人們如何強調技能、大腦、智慧等,運氣和「魔法」在生活中都扮演着重要的角色。
我在Google遇到的面試官是友好、善良、開朗且高度專注的工程師。在面試中,他們不想證明我不行,而是幫助我證明我可以。他們熱情地回答了我的問題,讓我從一開始就感受到相互合作。
這是 Google 特有的嗎?也許。但後來,當我在 Google 接受技術面試培訓時,我見識到了多種多樣的面試官/招聘經理的風格和信念,我看到技能高超的候選人控制不了情緒,溝通不了解答過程等等。所以我很感恩機遇在我找工作中起到的作用。
所以是的——我很幸運,我遇到我的面試官,並且在面試那天我碰巧知道如何回答那些代碼題。
這也是我對 工作類型 和 相關技能 的超專注準備得到回報的地方。大科技公司有很多不適合我的職位(比如 Meta 的那個)。即使我之前有其他職業經驗,我也不知道軟件工程師的世界有多大,有多少種職業類型和偏好,區分它們有多難。
通過強迫自己有超強的目標感,而不是隨機、盲目地申請大科技公司職位,我抓住了小但重要的機會。我深入挖掘了每個職位,並通過與業內朋友交談來仔細研究它們(再次強調,我的年齡和經驗是一項資產,因為我已經建立了超過 15 年的關係,從沒想過它們以後會如此有用!)。
對於我得到的每一個 offer,我都進行了深入的研究,並為技術面試做好了充分的準備。在面試當天,就萬事俱備,只欠東風。雖然我不認為我「完美搞定了」我的面試,但我做得很好,傳達出我是 滿足團隊需求 的合適人選的信息。
這就來到下一個問題:我是如何為大科技公司的面試做準備的?
答:分兩個階段,我花了 500 多個小時執行。
第 1 階段:了解現實和競爭格局如果我想斬獲另一個國家的大型科技公司的職位,而我擁有不到一年的行業經驗,有15年以上不相關工作經驗,沒有計算機科學學位。我需要對現實有一個非常清晰的認識,尤其是競爭格局。
這意味着有準備的希望可能降臨,但白日夢,天上掉餡餅這類事情不會發生。
艱難的道理(可以查看我的 YouTube 視頻)、艱難的現實、艱難的工作。
我必須完全接受並且內化以下內容:
我知道每個人都期望有一份「靈丹妙藥」。或許是一些博客、視頻、資源、教程、播客、PDF清單……揭開代碼的所有「秘密」,學習效果立竿見影。
沒有。
直到入土,我都認為——信息是一種商品。
學習很困難,但由於免費信息太多,學習變得 _更加困難_。
我們都陷入了這樣的陷阱,認為自己了解的信息不夠。其實沒有。
為什麼?因為無論你住在哪裡,你說什麼語言,你的眼睛、皮膚或頭髮是什麼顏色,你的性別認同是什麼——所有資源都會教給你「有用」的東西。在一個非常基本的層面上,它們都是「相同的」。
它們 必須 如此,因為這就是計算機的工作方式。
如果你和我用 JavaScript、Python 或 Java 編寫相同的函數,我們將得到相同的結果。這就是計算機的工作方式——它們是確切的算法。
但是生活(和面試)絕對不是確切的。相同的努力、成績、技能、智力不會產生相同的結果。
再次強調,我必須 自學 。我必須將注意力從資源/博客/網站/課程上轉移開,放在建立堅實的思考模型、識別相關技能、深入研究概念而不是代碼實現、以新的方式應用我已經知道的東西,鍛煉推理、解決問題的能力,_並_ 在推理時溝通出來我的推理過程。
你會驚訝於我在準備 Google 和其他大科技公司面試時使用的資源。
是的,我使用過 Leetcode、Algoexpert、InterviewCake 和 Jenny 的 CS 講座可能還有一些其他的資源,但我沒有完整完成一個資源。
這不是因為我突然轉移了重點,我是故意的。我意識到他們都教同樣的東西,只是風格和內容略有不同。所以我使用這些資源來學習概念,並根據我對面試 模式 的分析混合和搭配這些資源。
我的理由很簡單。從招聘角度來看,候選人(在優秀公司)的質量每年都會提高。我個人認為專注於公司是一個巨大的錯誤——我們應該專注於團隊、人和工作。
但世界有自己的運行規律,因此所有人都湧向大公司。競爭的增強使招聘經理更難評估候選人。
招聘經理處理這個問題的唯一方法是提高標準,候選人的處境就更難。候選人的總數不斷增加,但被邀請參加面試的候選人「人才庫」保持不變,依舊很狹小——通常是 2-10 人。不管有幾百人申請,參與面試的人數永遠這麼多。
因此,沒有收到回復或遭到拒絕的候選人就越來越多,尤其是在牛市中。
如果競爭越來越激烈,互聯網上的資源也越來越多,但入圍人數幾乎保持不變,那麼「多學」就不是解決辦法。每個人都在「學習更多」,就相當於沒有提高競爭力。
我還意識到大科技公司會有面試問題清單(這是「高效的」,因為面試— 非常 耗時,因此通過擁有一個面試官可以使用的問題庫來節省時間是有意義的)。自然,如果這些問題被「泄露」,他們就不會使用這些問題——這會破壞面試過程。
因此,從邏輯上講,招聘經理不會問 Leetcode 或 Algoexpert 或其他網站上提供的問題。這就產生了一種「軍備競賽」——公開的問題越多,題庫中的問題就越多。這導致問題和招聘策略的更多創新和變化。
這讓我只有一個選擇。我必須學會使用思維模型和對問題的歸類總結。我可能永遠不會被要求對鍊表進行排序或實現戴克斯特拉的最短路徑算法。相反,我需要知道如何將這些算法應用於「現實世界」的實際問題。
通常,現實世界的問題看起來、聽起來或聞起來都不像我們研究的練習題。練習題和競賽代碼題往往被「整齊」地打包好,有明確的限制。
但作為一名面試官,我想知道候選人是如何思考、推理、分析、解釋信息和合作的。解決問題的能力是一個亮點。候選人如果採用正確的解決方案,但時間不夠用——但會提出很好的問題,並且清楚地知道如何解決問題。就仍然可以獲得 offer。
後來,作為 Google 的一名工程師,我總能判斷出有人是否 知道 如何解決問題,即使他們無法及時解決。同樣,當應聘者不知道如何解決某事時(這沒關係——我們都在學習),這一點也很明顯。
通過採用我理解問題類型和解決方案,而不是特定代碼實現的方法,我可以專注於學習推理而不是學習編寫特定算法。
這種方法意味着我完成了不到 40% 的 Algoexpert(當時它的問題是現在的一半)。我還完成了 Leetcode 上大約 50-60 個問題,其中大多數都不是「難」的問題。
我認為「難」問題可能會出現在 45 分鐘的面試中,大約有 20% 的時間出現,這意味着 80% 的時間它們會是簡單問題或中等問題。所以優化 80% 更有意義,因為我還是個新人,專注於困難的問題會妨礙理解簡單和中等的問題。
我使用這些資源來識別問題模式,而不僅僅是「做完」,並獲得認證。這就是為什麼我沒有完成任何一個題庫。我也沒有使用 「Cracking the coding interview」 這本書。
在此過程中,我還開始了理解系統設計問題。並將此記錄在了《系統設計面試問題》這個長博客中。
我還決定專注於一種語言:JavaScript。這不是面試的最佳選擇(經驗豐富的工程師在 Quora 和其他地方不鼓勵使用它),但我覺得不重要。面試的目的不是為了測試我對語言的選擇——而是為了測試我抽象思考和解決複雜的計算機科學問題的能力。
語言只是一種工具(我持有的另一個核心信念)。事實上,使用像 JS 這樣的無類型語言會讓我有機會談論它的局限性或優勢,證明我理解如何權衡語言選擇的利弊。這樣,我就可以展示更廣泛的知識和洞察力,而無需實際在代碼中體現。
但是我從使用 Java 和 C++ 學習了很多資源。這些語言是 Google 的主要語言。因此,被迫閱讀這些語言並理解背後的原則使我不要過多關注「寫出代碼」,而更多地關注代碼背後的推理,使我能夠真正寫出來。
那是我的全部計劃。實踐、模式識別、思維模型/第一性原理思維、系統設計、做好更少的事,專注於獲得面試機會,而不僅僅是學習更多的代碼。
正如我所提到的,我們都有優點和缺點。我們都認為我們的缺點是特殊的、巨大的,而我們的優點是普遍的、不起眼的,而且可能沒有多大用處。
這不是真的。從邏輯上講,如果我們都認為自己的缺點很嚴重,那麼我們都應該屈服於它們。然而,有些人克服了它們。並發現其他人的情況更糟並克服了 _這些缺點_。
專注於我們能做好的事情是更好的選擇。對我來說,我真的相信我可以為團隊帶去更多價值。我不在乎自己是最聰明的還是最好的。但我期望成為一名優秀的學習者,不惜一切代價保持我的成長心態。
所以我試着用它來儘可能地脫穎而出。我學會了向招聘人員、面試官和招聘經理提出非常好的問題。
但這有更深層次的原因。問好問題是我面試公司的方式。就像我說的,我不想重複我職業生涯前半段的錯誤。因此,提出真正好的問題對我來說很重要,以評估這家公司是否 適合 我。
因為我已經決定重視團隊和學習,所以在招聘人員提出薪酬之前,我從未詢問過。無論如何,這將低於我作為律師的收入!
相反,我非常專注於了解團隊、它的動力、團隊信念和價值觀、經理如何解決問題(尤其是人的問題)、團隊對什麼感興趣、公司部門對什麼感興趣、資產負債表如何,戰略是什麼,它的資源分配和預算是什麼樣的,等等。
所有這些都是我在其他行業學到的東西,作為個人貢獻者、經理、高管、創始人等等。
所有這些事情也表明我的目的性很強。我對團隊、公司、產品和未來真的很感興趣。這不僅僅是我申請的另一份工作。這是主動的和個人的……而不是被動的和機會主義的。
我相信這幫助我脫穎而出。雖然不是我面試的所有職位,但大部分面試我都獲得了 offer。
當我在招聘方面,我總是更喜歡那些真正對職位、人員、產品和公司感興趣的候選人。那些只是為了「找到工作」的人並沒有我想要的能量和動力。
面試計劃和策略我的路線圖的最後一部分要求我深入了解不同類型的面試過程。
這包括技術和非技術面試、面試的形式、公司組織、運行、計劃、配備、評估和權衡面試的方式。但這也要求我了解自己的長處和短處。
在美國尋找大科技公司時,我的目標是每月進行 2-3 次面試——這是一個巨大的挑戰,因為我不在美國,而且時區比西海岸早 17 小時。
我必須在奇怪的時間計劃和安排面試,這樣我才能配合我作為開發人員的日常工作和學習時間。有的面試需要 6 個小時,有的需要 10 個小時或更多。有些是「一整天結對編程」類型的面試。
所有這一切都需要大量的計劃和心理訓練。我必須有足夠的睡眠,足夠的鍛煉,保持我的心態和信心,完成我的日常工作,陪伴我的家人,學習並專注於我的目標。
為此,我必須對自己擅長的事情誠實。例如,我不是一個早起的人。但我可以忍受深夜。所以我相應地安排了面試、工作、睡眠甚至鍛煉。
有一些面試在凌晨2點或更晚,我之前不會睡覺(因為我真的不擅長按時起床!)。因此,我會在凌晨1點鍛煉以獲取能量並集中注意力,然後進行面試,然後睡到上午 10 點,去上班並管理我的日程安排。
我也會小心地計劃面試,這樣我就不會背靠背地做兩個,除非它們非常相似且有時間限制。例如,在同一周內進行帶回家的測試和定時測試需要與帶回家和實時代碼面試不同的計劃——同時還要管理工作和家庭。
為了適當地安排面試,我會與招聘人員密切合作,並對他們保持透明。這有兩個好處:我在招聘人員中獲得了協作和溝通的信譽和信任,他們還看到我還有其他機會,這增加了我的成果的機會。競爭是好事。
我相信你們中的許多人都期待這篇文章提供「內幕」技巧和某種特定的語言,以及要學習的 DSA 問題。我相信我給了你更好的東西。授人以魚不如授人以漁。
除了道德原因之外,內幕消息的價值本身有限,尤其是在大科技公司。在大型公司中,團隊與團隊、城市與城市的情況可能大不相同。你需要了解招聘和職業發展的原則,而不僅僅是特定的語言和算法。假設所有的面試都是一樣的,是一個很大的錯誤。
至於我們對數據結構和算法的痴迷……管理你的職業生涯是終極算法。你的頭腦是最終的數據結構。學習如何應付他們,儘管偶爾會失敗,但你總是會做得很好。強大的想法並不宏大——它們是優雅的極簡主義。
在閱讀的過程中,您會注意到我鏈接的一些內容,可以通過這些鏈接找到我。如果你想不僅僅只「學習代碼」,想要學習如何打造 適合自己 的職業,你也可以訂閱我的webinars、小課程和郵件 。
也許我能給你留下的最重要的信息是,痴迷於大科技公司是錯誤的。是的,成為大公司的一員是一件美差,但如果相信他們這是唯一的選擇,我們將錯過所有其他令人驚嘆的機會。
由於當今的文化趨勢,大科技公司具有相當的魅力。當然,為大公司工作很好,但是很多偉大的組織並不為人所知。甲之蜜糖,乙之砒霜。
你的第一要務是快樂、充實並過上你想要的生活。這不是來自公司。這來自與您共度時光的人(尤其是同事)和您所做的工作。與其他任何公司一樣,大科技公司也有糟糕的經理、隊友和工作。
如果你培養技能,在正確的心態之上制定一個正確的計劃,並訓練自己設定正確的目標,無論有沒有大科技公司,你都可以超越自己的夢想。
後記如果你想要了解更多我從律師轉行成為軟件工程師的過程,可以收聽播客 episode 53 來自 freeCodeCamp podcast,以及 Episode 207 來自 Lessons from a Quitter。這兩期播客大概介紹了我的成長藍圖。
如果你對自學代碼、轉行和成為自己的代碼合伙人感興趣,可以查閱這裡。如果轉行是你夢寐以求的事情,也可以查看我在 free webinar 上的轉碼文章。
原文鏈接:https://www.freecodecamp.org/news/coding-interview-prep-for-big-tech/
作者:Zubin Pratap
譯者:PapayaHUANG
