Try   HackMD

工程師必備技能分析

軟體工程師的真實生活

「軟體工程師真的要懂這麼多嗎?」技術面試、白板題、還有行為面試等等,為什麼會有這麼多關卡?軟體工程師到底在做什麼?

我們除了事先預演過面試的問題、準備好答案之外,更重要的,就是要知道「為什麼」雇主會提出這些問題,以及面試內容與軟體工程師實際工作內容之間的關聯又是什麼。

讓我們來聽聽 Mike 學長分享他在外商軟體公司當「前端工程師」的生活:

雖然這是位前端工程師的分享,但其實後端、全端、甚至 iOS 工程師的工作職責並沒有很大的不同。在延伸閱讀,你可以參考幾個國外的例子。

先來總結一下 Mike 分享的工作內容與所佔時間:

而這三大類,也可以分成以下的細項:

產品需求討論、釐清 產品開發 個人學習、成長
  • 跨部門溝通、釐清需求以及討論技術上的可行性
  • 定義開發策略與優先順序
  • 跟主管、工程團隊討論規格與技術可行的實作方式
  • 寫程式
  • 透過討論、翻查技術文件、自我研究去解決各種技術困難
  • 測試與抓蟲 (debug)
  • 撰寫文件
  • 個人職涯與工作規劃、討論
  • 讀書會 (study group) -- 學習新技術與其他領域(後端、資料科學)的知識

不同項目所需的能力與人格特質有所不同,因此雇主便會設計多樣的面試方式與考題,驗證面試者在各方面的表現。

AC 其他的文章與教材裡,我們提過當工程師的必備能力有:

  • 技術力
  • 溝通能力
  • 團隊協作
  • 拆解與解決問題
  • 學習能力

接下來,我們會針對工程師的每一項工作內容,分析所需要的技能與人格特質,列出對應的面試題目,並提供你練習方式。

從技能、面試、到該如何準備

跨部門與技術討論:釐清需求,定義規格與實作方向

要具備技能
與人格特質
  • 溝通能力:聆聽力、勇於表達想法、主動參與討論
  • 勇於面對新挑戰、陌生任務的態度
  • 解決問題 (problem solving):有清晰的思維與邏輯,能拆解問題,一步步尋找可行的解決方案
面試方式 面對面口試:自我介紹、個人專案討論、白板題
練習方式 【專案實作】
  • 打造個人專案,挑戰課程教材以外的技術
【口試練習】
  • 撰寫並練習一個清楚、流暢的「自我介紹」,讓面試官能在短時間認識你
  • 在每一份作業或專案之後,透過文字或影片,練習介紹專案內容、遇到的技術困難,並如何解決
  • 跟同學一起練習白板題,練習如何作有效的討論,包括聆聽題目、拆解問題、表達想法

開發產品:寫程式、團隊協作、解決技術問題

要具備技能
與人格特質
  • 技術力
    • 熟悉語法工具,有一定的開發速度
    • 瞭解程式碼該有的架構,能寫出結構清楚、容易維護的程式碼
    • 對資料結構、軟體框架與設計模型有正確的概念並嚴謹遵守
    • 注重細節與測試,能有效率地 debug
  • 技術溝通與尋找答案:能清楚提問,能跟資深工程師討論技術概念,並擅於查找及應用線上資源
  • 團隊協作的專業素養:每一份專案有清楚的版本控制以及技術文件
面試方式
  • 線上技術測驗
  • 任務測試:在有限時間內完成一個技術任務/作品
  • 面對面口試:技術概念、情境題、白板題、個人專案討論
練習方式
  • 練習線上程式測驗(如 HackerRank),針對網路上找到的技術考題作練習(AC 有提供),並定期複習基礎概念與使用情境,建立紮實基礎
  • 研究資工觀念,如演算法、時間跟空間複雜度等,並練習打造小程式
  • 口試與文字練習:透過跟同學模擬面試及撰寫學習筆記與技術文章等文字產出練習,深化對程式語言、開發概念的認知,並加強針對技術觀念的溝通技巧
  • 專案實作:
    • 打造小專案,要求自己在有限時間內完成
    • 思考該如何測試自己寫的程式碼,不斷地重構優化
    • 找有技術背景的朋友/同學幫忙 code review

Becoming a software develolier

從現在開始,AC 將幫助你建立工程師必備的能力。以下是我們提供的資源,以及對你學習方向的建議。

專業能力養成

  1. 大量的動手實作
    要真正掌握一個新技能,唯一的方法就是大量實作練習。課程中我們安排了一定數量的個人與團體練習機會,但也你必須試著自己尋找課外練習方向,不能止步於教材提供的題目。而在八週課程的尾聲,我們都會舉辦期末黑客松,讓同學們體驗「接到需求>在時限內跟隊友腦力激盪>完成功能開發」的過程。

  2. 反覆的刻意練習
    我們會持續挑戰你在「速度」、「細膩度」的表現。作為新手,很難立刻就掌握所有技能,但你必須要求自己:一定要十足把握自己能迅速精準地完成已經學會的事物。

  3. 說明專案內容與過程
    在完成每個稍有規模的專案後,我們會要求你錄製一小段影片或是撰寫部落格,解釋你的專案過程、遇到的困難、做了哪些新嘗試,這麼做也能幫助別人認識你的作品!

  4. 專業素養
    不論是個人專案或是團隊協作,都要養成撰寫說明文件的習慣。在小組協作專案中, AC 的技術顧問與助教們會審查你的技術文件與開發流程。技術文件包括 Git commit comments、 GitHub Readme 以及程式碼的組織架構和註解。

  5. 能力評估
    期末時,我們會提供完整的技術測驗,幫助你了解自己對基礎能力的掌握是否到位、哪些部分需要努力。

瞭解軟體產業

在課堂之外,我們也會準備各式職涯活動、閱讀素材,讓你更貼近並了解軟體業界的趨勢。

建立你的求職策略與武器

最後,我們的【求職攻略課程 Launchpad】,會一步步引導你建立求職所需的能力與材料,替即將到來的求職行動做準備。

如你所見,工程師的養成之路,工作量真的不少!但請記得,你已經在成為工程師的道路上了,好好專心、保持心情穩定、盡情享受學習的苦與樂。

日後回頭,你會感謝在修煉的路上,持續付出、專心致志的自己。

延伸閱讀
如果對其他工程師的工作內容有興趣,可以參考這幾支國外影片。我們找的都屬於帶有新創風格的公司:
想瞭解轉職該如何準備的同學,也可以先參考這兩篇文章。但要記得,【求職攻略課程 Launchpad】裡有更詳細的說明。