0%

【文章翻譯】Life as a Dart intern

【文章內容使用 Gemini 1.5 Pro 自動翻譯產生】

Dart 實習生生活

我不知道。

這三個字每天都在軟體工程師的腦海中浮現。工程工作由謎題和問題組成,所以不知道某件事只是另一個指標,表明工程師有成長的能力。然而,缺乏知識也會產生自我懷疑。

在今年秋季開始實習之前,我對程式語言、類型系統,甚至變異數(這是我整個專案)都不太了解。據我所知,變異數只是一個我需要計算平方根的值,這樣我才能得到標準差。程式語言和編譯器似乎是一種讓大多數開發人員感到神秘的黑魔法。

值得慶幸的是,我的經理是一位讀心者,他理解我的感受,並消除了我的緊張情緒。

_”所以,我要坦誠相待,這個專案會讓你完全陷入困境。你還什麼都不知道,但這沒關係,因為我希望你提出問題,很多問題,”_他解釋說。

直接進入一個我幾乎沒有任何背景知識的新專案是很可怕的,但我知道我得到了經理的支援。他給了我_嘗試_的自由,_犯錯_的自由。這對我來說意義重大。

與經理的快速交談開啟了我第一個月的工作:我在西雅圖弗里蒙特見到了我的團隊,並準備將自己投入到這個叫做_變異數_的深不可測的未知領域,您可以在Dart 宣告端變異數一文中閱讀相關內容。

我每週都會和經理一起參加變異數訓練營,他會提供我必須轉化為程式碼的理論。我記得我讀過我將要實作的變異數功能的提案,並對完成該專案所需的七個里程碑感到不知所措:(1) 掃描然後解析新的關鍵字,(2) 修改 kernel AST,(3) 在子類型演算法中支援變異數,(4) 加入錯誤和警告,(5) 變更上下限計算,(6) 變更類型推斷規則,以及 (7) 處理執行階段行為變更。

在變更 kernel(編譯器的中間表示)和子類型邏輯之間,我需要序列化和反序列化變異數註釋。執行階段行為被認為是一個延伸目標,但我幾乎無法理解它之前的六個任務。我不確定從哪裡開始或如何開始。

但情況好轉了。

我每天早上 9 點開始工作。炒雞蛋、香腸、羽衣甘藍和柳橙汁就是我所需要的。我準備好眯著眼睛看程式碼,想知道人們究竟是如何製作第一個編譯器的。

我經常同時處理不同的組件。這讓我保持忙碌,而且我喜歡組織目標。每天早上我都會建立一個新文件,列出我想完成的任務,將目標分解成可管理的任務。

A to-do list with most items crossed out (done!).
典型的待辦事項清單

到了晚上,丹麥奧胡斯的 Google 辦公室就開始活躍起來。我知道我必須與幾位來自丹麥的工程師合作,所以我經常寫下我的問題,最後完成並在西雅圖深夜發送出去。程式碼審查時間提前了 9 個小時,但幸運的是,時間差也讓我可以在程式碼被批評之前更頻繁地校對自己的工作。

團隊的批評提高了我判斷自己程式碼的能力,並思考不同實作方式的權衡。我的審查者指出了我忽略的地方,並詢問了關於變異數是什麼以及如何使用它的問題。我會修復我的程式碼,回答他們的問題,並確保在未來注意相同的問題。更重要的是,我會深入挖掘並問自己,他們是如何想到這個改進的?除了程式碼的修正版本之外,我可以從中學到什麼知識? 對我來說,重要的是我從每條評論中學習,而不是漫不經心地點擊方便的 完成 按鈕。

我的學習方式是透過提問。作為一個固執的軟體工程師,在咬牙切齒地研讀那些毫無意義的程式碼和勉強地找程式碼庫中的專家幫忙之間,總是一種微妙的平衡。後者幾乎總是能節省更多時間。我更喜歡分配相當多的時間獨立工作,在遇到新領域時做筆記並寫下問題,然後當我有 2 或 3 個問題和一個堅實的障礙時,再去詢問其他工程師。我意識到,與單獨花 3 個小時排除故障相比,詢問那些需要花費 3 個小時排除故障的問題,與其他人花 10 分鐘指導和解釋相比,我的效率要高得多。

工作場所的安全也會提高生產力。

對我來說,安全是以提問、開玩笑和與團隊共進午餐的形式出現的。當時鐘閃爍到 11:30 時,我知道接下來的半小時將充滿溫暖的食物和明亮的面孔。每天我都會聽到最精心設計的故事和想法:擁有 6 根手指的好處、收到一隻煮熟的龍蝦作為聖誕禮物、在 Factorio 中混合兩根不同的管道後數小時的清理工作……任何事情。我的團隊在我犯錯和取得成就的過程中都支援我。一個好的團隊會讓早上起床去上班變得容易得多。

午餐前後的時間也同樣愉快。我大部分時間都在閱讀程式碼和理解新概念。Dart 編譯器由許多大型的、不斷變化的組件組成,這意味著我需要深入研究幾個不同的程式碼庫。我喜歡有機會與負責靜態分析的前端團隊以及管理執行階段行為的後端團隊聯繫。看到這些組件如何協同工作以在 Dart 語言中建立新功能,真是太棒了。

實作和理論之間的裂痕是我專案中最具挑戰性的方面。並不是每天都需要將證明變成有形的程式碼。在處理變異數時,當我有問題時,這種裂痕就會浮出水面——有時我的詢問會將語言提案的組件與適當的實作交織在一起。我尋求答案的人要么知道哪個檔案包含子類型演算法,要么知道子類型變更如何影響賦值運算,但從來不知道兩者兼而有之。這感覺就像用幾塊膠合板和藝術家對最終結果的渲染來建造樹屋。

儘管如此,在 Dart 上工作仍然是非常有益和有趣的。我喜歡挑戰,尤其是知道除了變異數之外還有很多領域需要學習。Dart 過去是,現在仍然是,不斷發展以更好地支援使用該語言的開發人員。當出現關鍵問題並需要立即關注時,我看到團隊像調校良好的時鐘一樣運作。我傾聽團隊回顧以前的錯誤,確保未來的流程不再重複這些錯誤。

我在 Dart 團隊的實習提高了我的工程技能、溝通能力以及對自身能力的信心。它教會了我擁有一個友好但功能齊全的團隊的重要性。它教會我理論轉化為程式碼的許多方法,以及這樣做的必要解決問題的技巧。它教會我更多關於我自己的知識,以及我在工作中所珍視的東西。

感謝 Dart。下次見。


Dart 實習生生活 最初發佈在 Dart 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。