作為入門級軟件工程師的經驗教訓

已發表: 2022-08-30

如果一年前你問我軟件工程師是做什麼的,我會說“通過代碼解決問題”。 這是一個簡單的答案,指出瞭如何評估我們製作的工作。 對於產品驅動團隊的工程師來說,這些問題可能包括如何實現客戶一直要求的新功能,或者如何提高現有功能的性能。

如果你今天問我同樣的問題,我會給出稍微不同的回答。 軟件工程師的任務是通過代碼解決正確的問題——如果得到有效解決,他們就能實現業務目標。 弄清楚要解決哪些問題以及如何解決這些問題是作為開發人員最重要的部分,而實際的實現細節則是次要的。

我的軟件工程之路

在大學一年級前的那個夏天參加了 Upperline Code 的課程後,我開始對編程產生了興趣。 我通過一個名為 The Opportunity Network 的大學和職業準備計劃獲得了這個機會。

Upperline Code 是我第一次接觸編程,我很快意識到我對學習編程很感興趣。 那年夏天晚些時候,我收到了我的聖母大學入學資料,並從藝術與文學學院轉到了工程學院,這樣我就可以主修計算機科學 (CS)。

我最喜歡的一些 CS 課程是算法設計/分析、雲計算和編程挑戰。 這些問題很有趣,教授們很擅長提出新想法和解釋概念。

在整個本科期間,我知道我想成為一名軟件工程師並使用我獲得的技術技能。 值得慶幸的是,在我大四之前的那個夏天,我有機會在 Kantata 實習,擔任軟件工程師,並與其他工程師結對編程以幫助交付功能。

我的實習經歷,以及教授們的鼓舞人心的演講,讓我有信心在我剛開始申請工作時不會滿足於任何其他角色。 在辦公時間花費了大量時間後,我於 2021 年畢業並獲得了計算機科學學位,並接受了在 Sprout Social 擔任助理軟件工程師的工作。

朱利葉斯·博阿滕和來自 Sprout Social 的一群同事

融入新芽社會

作為新角色和公司新人的一部分是必須同時發展通用軟件工程技能和特定於 Sprout 的領域知識。 我發現需要一般編程知識才能理解的任務對我來說是最容易解決的。 但是,需要了解 Sprout 架構的任務需要我花時間來解決,我不得不依靠我的團隊尋求幫助。 雖然您可以通過在線閱讀文檔來解決一些問題,但您並不總能找到與您正在做的工作相關的信息——能夠向他人尋求指導至關重要。

當我加入 Sprout 時,讓我印象深刻的第一件事就是開發過程的協作程度。 我知道需要整個團隊來開發功能,但我不知道在實踐中會是什麼樣子。 我很快意識到發布一個成功的功能需要許多不同角色的人一起工作——從定義項目需求的產品經理到創建模型的設計師和實現功能的工程師。 協作不是可有可無的,而是實現我們團隊目標的必要條件。

朱利葉斯划船和斯普勞特同事在芝加哥市中心考爾德火烈鳥雕像外的照片

學習如何瀏覽各種代碼庫並建立一個不同服務如何相互交互的心智模型是一個陡峭的學習曲線。 由於 Sprout 的核心業務是軟件,因此其架構在很大程度上取決於其業務需求。 隨著我的進步,我必須了解開發人員試圖解決的業務問題以及為什麼要做出以前的架構決策。

最初,我有點害怕拉取請求需要審查才能合併到代碼庫中。 了解代碼審查的主要目的是知識共享和維護代碼標準有助於改變我的觀點。

通過代碼審查有助於提高我的技術技能並提高我的拉取請求的質量。 讓同行給我關於改變什麼的建議,向我介紹新模式,並指出我代碼庫的相關領域真的很有幫助。 閱讀其他工程師的拉取請求也讓我對我不直接從事的其他服務有寶貴的了解。

你以前的經歷很重要

有一種流行的觀點是,當你進入人生的新階段時,你以前的經歷不再重要。 一旦你進入大學,你的高中經歷就不再重要了。 一旦你進入勞動力市場,你的大學經歷就不再重要了。

但經常被忽視的是,我們的經驗、知識和習慣會產生復合效應。 我們通常只能通過我們之前所做的工作才能實現新事物。 我之前獲得的知識和技能極大地影響了我作為入門級軟件工程師應對新挑戰的方式。

本科期間對我在 Sprout 的日常工作產生最直接影響的課程是編程挑戰和數據庫概念。 前者教會了我如何將大問題分解成更小的部分,以便更有效地解決它們。 它幫助我更加專注於如何構建我的代碼並提高了我的代碼的可讀性。

數據庫概念教會了我基本的關係數據庫概念,並涵蓋了數據庫模式設計和 SQL 等主題。 我學會瞭如何編寫查詢,這非常有用,因為我經常需要查詢我們的數據庫來解決問題或回答問題。

TurtleBot 機器人套件的​​ GIF 動畫。

我在課堂外獲得的機會同樣寶貴。 Java 不是我的大多數課程中涵蓋的語言,但是我有機會為我的一位教授領導的商業項目工作。 我獲得了編寫 Java、使用 MySQL 數據庫和創建 Docker 映像的實踐經驗。 學習 Java 尤其有用,因為 Sprout 的大部分服務都是用它編寫的。

我在本科期間獲得了許多其他我認為理所當然的技能,比如導航命令行和理解核心編程概念。 一個常見的誤解是,由於本科所涵蓋的大多數主題本質上都是理論性的,因此它們不會讓您為軟件工程職業做好準備。 然而,我認為情況正好相反——你在本科期間學到的技能很重要,即使它們並不直接適用於你的日常工作。

計算機科學是一個極其廣泛的領域

CS涵蓋多種專業,如人工智能、機器學習和數據科學。 您在本科期間獲得的經驗可以作為基礎知識,可以很好地為您提供各種入門級角色,而不僅僅是軟件工程。 從本科生跳到全職職位提供了一個機會來探索什麼樣的角色和專業最適合你。

如果您想開始從事軟件工程的職業,Sprout 是一個很好的起點。