零基礎程式設計師如何花 8 個月時間獲得特斯拉實習機會?
以下為譯文:
在過去3個月裡,我的一位好友一直在特斯拉實習。這日,我問他:“你現在跟埃隆·馬斯克(特斯拉CEO)應該混得很熟了吧?”
“說了你都不信。有一陣子,我的桌子距離埃隆·馬斯克不到五米遠。”
“你就吹吧。”我說道。
“真的。第一天,當他們告訴這是你的辦公桌時,我都嚇傻了。我感覺埃隆·馬斯克隨時可以看到我的程式碼。所以,我趕快設法換了辦公桌。”

“兄弟,這也太瘋狂了吧。你還剩幾個月?你從九月份開始實習的吧?”
“嗯,我還有3個月。”
“但是,你是如何獲得在美國工作的許可的呢?最初你拿的不是旅遊簽證嗎?”
“說來話長。我歷經艱辛……”
“跟我說說。這一切究竟是怎麼回事。”
朋友笑道:“真的嗎?一切?”
後來,他給我講述了整個故事。
學習Starfleet課程
“2018年1月,我乘坐飛機到矽谷42號。我爸給我的錢只夠付Airbnb的房租。在最初的幾個月裡,我所有的錢都給了Airbnb,我窮得連飯都吃不上。有時候,一整天我才吃半個炸玉米餅,有時吃一點義大利麵。就這麼熬著。”
“天啊,兄弟你好慘。不過,這與Airbnb的聯合創始人當初的遭遇也差不多,他甚至連房租錢都沒有。” 我說。
“是啊,那段時間非常艱難。我都餓得不行了,快堅持不下去了。我去找了Starfleet課程(https://www.42.us.org/program/42-starfleet-academy-1-year-software-engineering-program/)的主管,問他:‘我可以參加你們的課程嗎?’但是他拒絕了。因為我只有6個月的旅遊簽證,但Starfleet課程需要一年的時間。我鍥而不捨地一再央求,最後他終於接受了。”
“你絕對是一個瘋子。老兄,你永不放棄。你簡直瘋了。”
“如果你飢寒交迫,就快要破產的時候,你也能豁出去。我從法國大老遠來到這裡,我就必須參加這個Starfleet課程。我極其渴望在矽谷工作。”
“你說的對。”
“後來,在我加入Starfleet課程幾個月後,我的一位朋友問我想不想要一間宿舍。他們在接納我之前看過我做的專案,我覺得他們應該也是發現我是一個非常認真的人所以才同意我搬進來的。自從搬進宿舍後,我終於有錢吃飯了,而且我可以把所有時間都花在學習程式設計上了。”
“從那以後,我們的工作量大的驚人。我記得當時我需要同時兼顧corewar(一個通常需要一個月才完成的VM專案)、42sh(最難的shell專案之一)和PHP piscine(兩週激烈的PHP挑戰)。我們經常熬夜做專案,還習慣於凌晨5點出去買吃的。那段時光真是太瘋狂了。”
“你不知道我是多麼嫉妒你啊。”我說。
“是啊,那段時間雖然艱難,但是很有意思。有時工作量大到無法承受,比如,有一次我們同時做6個專案。我記得我們必須編寫ft_p (客戶端和伺服器通過TCP / IP網路傳輸檔案)、Hypertube(用於視訊流的網路應用,通常需要2個月才能實現)、Walking Marvin(一個AI專案),還有一個Zappy(通過TCP / IP網路進行多人遊戲的伺服器、圖形介面和AI客戶端。它是UNIX分支的最後一個專案)。”
“客觀地說這似乎不太可能吧?” 我由衷地問道。
“並非不可能,但確實很難。我想到的解決方案是著重關注Zappy專案。此外還有個主要問題是最初的小組成員中,最終留下來的只有我和另一位波蘭的朋友。”
“我覺得換作是我也會這麼做。但是,Zappy是UNIX專案的最後一個吧?如果之前的專案沒有做完的話,一定非常艱難。”

專案截圖,從左到右分別是:Hypertube(網路分支結束)、21sh(shell / Unix)、ft_p / IRC(Unix / DevOps)、Walking Marvin(AI)以及最右邊的Zappy專案(最終驗證了!)
“有點兒。對於Zappy,我們必須編寫圖形介面、伺服器和客戶端,最糟糕的部分是那些離開矽谷的原始團隊成員留下來的‘死程式碼’。值得一提的是,當時我們只有兩週半的時間交付這個專案。所以,我對自己說:‘管他的呢,來吧!’我去和Starfleet課程的其他人交談,問他們是否可以和我們合作。”
“你很了不起啊。你告訴別人工作的內容以及原因。你取得了專案中每個人的信任,最終領導了整個團隊。”我微笑著對他說。
他笑了:“也許吧。我找到了一個正在編寫Bomberman(C ++視訊遊戲專案)的人,問他是否願意幫忙編寫我們的圖形介面。他好像不太情願地說:‘我不想讓Bomberman的隊員失望。’我很堅持,我告訴他Zappy中有很多很酷的新東西需要學習,而且矽谷42號中沒有人完成過這項重任,我們會成為第一個。他說他需要點時間考慮一下,我只好告訴他我回頭再找他,看看他是否改變了注意。結果,兩個小時後我再找他,他就加入了我們小組。”
“你這有點咄咄逼人啊,老兄。你永不言敗啊!”

最終的圖形介面,由Bomberman的那個人實現
他笑了:“也許吧。總而言之,在截止日期前兩週,我們有一些圖形介面的程式碼,有完成了一半的伺服器程式碼,和一個可以執行的客戶端。我波蘭的朋友設法將這些不同的‘死程式碼’連線起來,然後讓伺服器(最難的元件)工作。可是就在那時,她開始對整件事感到有些沮喪,並決定休假一週。在她離開後,我設法除錯她的程式碼——因為那些程式碼沒有註釋、晦澀難懂且不合邏輯。”
“天啊。這種局面可真是太可怕了。有時間改這些程式碼還不如從頭重寫呢。”
“是啊,太難了。等她休假回來,我們進行了長時間的討論。我說讀懂她的程式碼需要花費的時間太長了,她聽後很難過。當天晚上我甚至做夢夢到我已經放棄了Zappy。可是,到了第二天早上,奇蹟出現了:我的這位波蘭的朋友交出了一份漂亮的程式碼,不僅實現了所有必要的功能,還改好了我之前所有的反饋。”
“太難以讓人置信了。”
“瘋狂吧?”他說道:“後來我們三個人熬了好幾個通宵,終於完成了這個不可能完成的專案。如今這個專案運轉良好!”
“好厲害!我希望我也能有這麼棒的經歷。”我說,“那麼特斯拉呢?你是怎樣拿下特斯拉的面試的?”
拿到特斯拉的面試
到此為止,我們就矽谷42號的精彩專案談論了大約一個小時。接下來,他要談談如何設法拿下了特斯拉的面試,併成功獲得了在特斯拉實習的機會。
“7月份的時候,整個Zappy專案和C ++ piscine(面向物件概論;大約兩週的小型C ++專案)都結束了。週日是世界盃的最後一場比賽,法國隊獲得了比賽權(我和我朋友都是法國人)。由於我住在免費的宿舍,所以我攢了一些錢。去巴黎的雙程票非常便宜,而且我很想家,所以我決定乘飛機回法國。”
“怎麼可能!?”我說著說著,不禁大笑起來。
他也笑了:“我真的很想回家。我週六到家,看了決賽,然後宅在家裡大約一個星期。後來,我覺得我不能繼續悠哉悠哉了,我必須回去程式設計。”
“所以,你真的只在法國待了一個星期?”我說。
“差不多吧。當我從法國回來後,學校的主管來找我。他開啟膝上型電腦跟我說:'我的這位朋友在特斯拉工作。我打算給他發一封電子郵件,推薦你去實習。'”
“你好幸運啊!”
“也許吧。但當時的我感覺‘除了piscine之外,我沒有太多C++的經驗(實習技術棧要求C++),所以我覺得現在發申請未必是最佳時機。可以等幾個月嗎?但是,這位總監已經在寫郵件了。他跟我說:‘哦。你沒有太多用C++程式設計的經驗,是嗎?你可以學啊!’說著,他寫完最後一句話,點選了傳送郵件。我……Kwame(總監的名字)!”

矽谷42號(前任)總監在推特上的照片
“不能吧?那你怎麼辦?”我說,感覺有點莫名其妙。
“我別無選擇啊,只好再發了一封郵件,並附上我的簡歷和一封求職信。然後,我說他們可以隨時面試我。”
“等等,你說你需要幾個月才能真正掌握C ++?!”
“是啊,而且我覺得我錯了。結果不到20秒特斯拉的那個人在回覆中說:‘好啊,下週三見見吧。’那天是週日。我不可能在4天之內做好準備啊,所以我跟他解釋說,我需要一點時間完成一個尚未開始的專案。後來我們把面試定在了兩週內。”
“太嚇人了吧。這樣一來你有足夠的時間準備面試了,是嗎?但是,C ++真的很難。我覺得就算是有兩週的時間,你可能也學不到任何實質性的內容。”
“這就是為什麼我寧願集中精神做一個有趣的專案,給他們展示,而不是學習C++。另外,總監告訴我,他們會經常檢視我們的專案,檢查我們的程式碼。”
“有道理。那麼最後一個專案是什麼?”
最終的專案
他回憶說:“我想做一些與特斯拉有關的事情,所以我嘗試了幾十種不同的想法,但都沒能讓任何人信服。每天,我都會帶著一個新課題去總監的辦公室。他看著我說:‘你的想法都很糟糕,你真的很失敗啊。’終於有一天我找到了一個讓我信服的專案:一個自動駕駛汽車交通的模擬器。”
“嗯,我記得你跟我說過這個專案。”
“哦,對,我們可能已經討論過了。本來我讀了很多很多數學的論文,我關心的並不是方程,我只想找到一種方法來實現一個很酷的演示。我找來了Bomberman組的那個人,還有我最好的兩個朋友(包括我波蘭的那位朋友),然後我們開始寫程式碼。我們非常地努力,因為只有一週的時間來編寫所有的程式碼。如果我沒記錯的話,我最好的一個朋友有全職的工作,所以我不得不說服他下班以後來矽谷42號幫忙。”
“這一次你真的是在管理一個團隊的專案!”
“差不多吧。你知道我承受了多大壓力嗎?但是,每當我想起那段時光,都會為我們取得的成就而感到自豪。”
“那肯定呀。後來面試怎麼樣了?”我好奇地問道。
面試

特斯拉
“首先,我和那個人進行了電話面試。他告訴我上午11點舉行電話面試,我從11點一直焦急地等到11:45,一遍又一遍地看手機,最後手機終於響了。那個人很好,他詢問了我的個人生活,我以前做過什麼,我的專案等等。”
“後來,我與在電話中交談的那個人進行了面試。我們相約在中午,他邀我去吃午飯。午餐期間,我一直在想下午他要問我什麼問題。我只有一個星期準備面試。我所做的只是完成了那輛自動駕駛汽車交通模擬器。我甚至沒有複習二叉樹問題等基本的計算機知識。我看過一本C ++書,僅此而已。”
“這很冒險啊。但是,我覺得你時間有限,所以也沒辦法做那麼多準備吧?”
“是啊。吃完飯後,他帶我去見了他的團隊成員:‘你說你喜歡數學,對吧?這是我的一位工程師,他擁有數學博士學位,你們兩個應該合得來。’然後我跟著這位博士去了一個房間,裡面有很多人正在吃午飯。我們無法使用白板,所以這位博士就直接開始問我C++的問題。”

如果有想要學習C/C++的小夥伴,可以關注小編【C/C++企鵝群374890319】,wx公眾號:CPP_cx 小編也有5年程式設計經驗了,免費送一套比較系統的資料、教程和工作經驗,就當是福利吧!21天速成加QQ群:374890319
“我的天。真是怕什麼來什麼啊。”
“誰說不是啊。尤其是在矽谷42號他們只教了我C++98標準,所以我完全沒有準備。第一個問題是:“你能定義一個智慧指標是什麼嗎?”,這是一個現代C ++的問題。”
“那你怎麼說的?”
“我儘可能地回答了這個問題,談論了編譯的運作機制等等。在回答所有的問題時,我總是說:‘我不知道這個問題的答案是什麼,但是我的印象中它是這樣的。’我覺得可能他喜歡我的這個說法。”
“這表明你很謙虛,而且你知道自己的知識有限,很了不起。”
“可能吧。後來,他開始問我‘未定義行為’的例子,我不知道該怎麼回答,當時我大腦宕機了(笑)。突然之間,我想到了之前專案中的一個例子:‘當多執行緒時,如果你宣告一個沒有volatile關鍵字的變數,那麼編譯器可能會最終刪除該變數(我猜是出於優化原因),導致未定義的行為。’面試官說:'好吧。你有沒有一個更簡單的例子?’最終我給出了一個更低階的例子,比如亂序執行。”
我大笑道:“也只有你才會給出如此複雜的答案。我覺得這可以表明你有C ++程式設計經驗,而不只是背誦開發手冊。後來怎麼樣了?”
“是啊,我覺得我還算有一些C++的經驗。在問完這些問題後,周圍的人都吃完午飯了。他開始使用白板,寫了一個二叉搜尋樹的問題。這倒是挺容易的,因為我們在本科的數學題中就做過這樣的準備,還記得嗎?”
“最後,在我完成那道題後,有人來了,我們不得不離開這個房間。我的面試官說的唯一的一句話是:‘看著可以啊。’所以我感覺我算是過關了。整個C++的面試以及白板考試花費了大約一個小時。後來,工程經理回來了,他又面試了我一個小時。他問的都是有關編譯的非常低階的問題,因為他曾經與負責clang的優化團隊合作。”
“厲害啊,你表現得很出色啊。”
“所以,這就是我面試的全部經歷。從那以後,我沒再去過特斯拉,直到開始實習。”
“你說的很好。你從來沒參與過黑客馬拉松嗎?”
“哦,有黑客馬拉松。簡而言之,在參加完特斯拉的面試幾周後,最終我與矽谷42號的朋友們參加了歷時很長的黑客馬拉松。我們算是贏了吧,所以我獲得了一次機會,與一位瞭解特斯拉人公司的人交談,甚至還向他展示了我的自動駕駛汽車交通模擬器。”
“很酷啊。”
“謝謝。最酷的部分是,當他與特斯拉的團隊交談時,他們說:‘哦,那個人啊,我們認識,幾周前我們見過。’所以到此時此刻我知道我已經拿下了實習的機會。”
“真厲害,”我說著,對眼前這個傢伙充滿了敬畏,“從你抵達矽谷以來,你所做的一切都讓我刮目相看,你給了我很大的鼓舞。與你的這番談話讓我有種衝動,想現在立刻(凌晨2點)殺到巴黎42號開始程式設計!”我大笑著說。
他也大笑著:“好啊,我也很高興能與你交談。我覺得你並不需要這個故事來給你動力,你自己也做過一些很瘋狂的事情啊。”
“對。但是與你的交談仍然是一個巨大的動力。如果我將我們的談話寫成一篇博文,你介意嗎?”
如果有想要學習C/C++的小夥伴,可以關注小編【C/C++企鵝群374890319】,wx公眾號:CPP_cx 小編也有5年程式設計經驗了,免費送一套比較系統的資料、教程和工作經驗,就當是福利吧!21天速成加QQ群:374890319
“完全沒問題。”他說。