# 工程師必備技能分析 ### 軟體工程師的真實生活 「軟體工程師真的要懂這麼多嗎?」技術面試、白板題、還有行為面試等等,為什麼會有這麼多關卡?軟體工程師到底在做什麼? 我們除了事先預演過面試的問題、準備好答案之外,更重要的,就是要知道「為什麼」雇主會提出這些問題,以及面試內容與軟體工程師實際工作內容之間的關聯又是什麼。 讓我們來聽聽 Mike 學長分享他在外商軟體公司當「前端工程師」的生活: <div style="position: relative;width:100%;height:0;padding-bottom: 56.25%;"> <iframe style="position:absolute;top:0;left:0;width:100%;height:100%" src="https://player.vimeo.com/video/424308501" frameborder="0" allowfullscreen></iframe></div> 雖然這是位前端工程師的分享,但其實後端、全端、甚至 iOS 工程師的工作職責並沒有很大的不同。在延伸閱讀,你可以參考幾個國外的例子。 先來總結一下 Mike 分享的工作內容與所佔時間: <div style="width:100%"> <a href="https://assets-lighthouse.alphacamp.co/uploads/image/file/12673/ExportedContentImage_00.png" target="_blank"><img style="max-width:700px;width:100%;" src="https://assets-lighthouse.alphacamp.co/uploads/image/file/12673/ExportedContentImage_00.png"></a></div> 而這三大類,也可以分成以下的細項: <table style="width:100%;"> <thead> <tr> <td style="text-align: center; width: 33%;">產品需求討論、釐清</td> <td style="text-align: center; width: 33%;">產品開發</td> <td style="text-align: center; width: 33%;">個人學習、成長</td> </tr> </thead> <tbody> <tr> <td> <ul> <li>跨部門溝通、釐清需求以及討論技術上的可行性</li> <li>定義開發策略與優先順序</li> </ul> </td> <td> <ul> <li>跟主管、工程團隊討論規格與技術可行的實作方式</li> <li>寫程式</li> <li>透過討論、翻查技術文件、自我研究去解決各種技術困難</li> <li>測試與抓蟲 (debug)</li> <li>撰寫文件</li> </ul> </td> <td> <ul> <li>個人職涯與工作規劃、討論</li> <li>讀書會 (study group) -- 學習新技術與其他領域(後端、資料科學)的知識</li> </li> </td> </tr> </tbody> </table> 不同項目所需的能力與人格特質有所不同,因此雇主便會設計多樣的面試方式與考題,驗證面試者在各方面的表現。 在 <a href="https://tw.alphacamp.co/blog/web-developer-job-preparation" target="_blank">AC 其他的文章</a>與教材裡,我們提過當工程師的必備能力有: * 技術力 * 溝通能力 * 團隊協作 * 拆解與解決問題 * 學習能力 接下來,我們會針對工程師的每一項工作內容,分析所需要的技能與人格特質,列出對應的面試題目,並提供你練習方式。 ### 從技能、面試、到該如何準備 #### 跨部門與技術討論:釐清需求,定義規格與實作方向 <table> <tr> <td style="text-align: center; background-color: #a2a2a2; color: #fff;">要具備技能<br />與人格特質</td> <td> <ul> <li>溝通能力:聆聽力、勇於表達想法、主動參與討論</li> <li>勇於面對新挑戰、陌生任務的態度</li> <li>解決問題 (problem solving):有清晰的思維與邏輯,能拆解問題,一步步尋找可行的解決方案</li> </ul> </td> </tr> <tr> <td style="text-align: center; background-color: #a2a2a2; color: #fff;">面試方式 </td> <td>面對面口試:自我介紹、個人專案討論、白板題 </td> </tr> <tr> <td style="text-align: center; background-color: #a2a2a2; color: #fff;">練習方式 </td> <td> 【專案實作】 <ul> <li>打造個人專案,挑戰課程教材以外的技術</li> </ul> 【口試練習】 <ul> <li>撰寫並練習一個清楚、流暢的「自我介紹」,讓面試官能在短時間認識你</li> <li>在每一份作業或專案之後,透過文字或影片,練習介紹專案內容、遇到的技術困難,並如何解決</li> <li>跟同學一起練習白板題,練習如何作有效的討論,包括聆聽題目、拆解問題、表達想法</li> </ul> </td> </tr> </table> #### 開發產品:寫程式、團隊協作、解決技術問題 <table> <tr> <td style="text-align: center; background-color: #a2a2a2; color: #fff;">要具備技能<br />與人格特質</td> </td> <td> <ul> <li>技術力 <ul> <li>熟悉語法工具,有一定的開發速度</li> <li>瞭解程式碼該有的架構,能寫出結構清楚、容易維護的程式碼</li> <li>對資料結構、軟體框架與設計模型有正確的概念並嚴謹遵守</li> <li>注重細節與測試,能有效率地 debug</li> </ul> <li>技術溝通與尋找答案:能清楚提問,能跟資深工程師討論技術概念,並擅於查找及應用線上資源</li> <li>團隊協作的專業素養:每一份專案有清楚的版本控制以及技術文件</li> </ul> </td> </tr> <tr> <td style="text-align: center; background-color: #a2a2a2; color: #fff;">面試方式 </td> <td> <ul> <li>線上技術測驗</li> <li>任務測試:在有限時間內完成一個技術任務/作品</li> <li>面對面口試:技術概念、情境題、白板題、個人專案討論</li> </ul> </td> </tr> <tr> <td style="text-align: center; background-color: #a2a2a2; color: #fff;">練習方式 </td> <td> <ul> <li>練習線上程式測驗(如 <a href="httlis://www.hackerrank.com/" target="_blank">HackerRank</a>),針對網路上找到的技術考題作練習(AC 有提供),並定期複習基礎概念與使用情境,建立紮實基礎 <li>研究資工觀念,如演算法、時間跟空間複雜度等,並練習打造小程式</li> <li>口試與文字練習:透過跟同學模擬面試及撰寫學習筆記與技術文章等文字產出練習,深化對程式語言、開發概念的認知,並加強針對技術觀念的溝通技巧</li> <li>專案實作: <ul> <li>打造小專案,要求自己在有限時間內完成</li> <li>思考該如何測試自己寫的程式碼,不斷地重構優化</li> <li>找有技術背景的朋友/同學幫忙 code review</li> </ul> </li> </ul> </td> </tr> </table> ### Becoming a software develolier 從現在開始,AC 將幫助你建立工程師必備的能力。以下是我們提供的資源,以及對你學習方向的建議。 #### 專業能力養成 1. **大量的動手實作** 要真正掌握一個新技能,唯一的方法就是大量實作練習。課程中我們安排了一定數量的個人與團體練習機會,但也你必須試著自己尋找課外練習方向,不能止步於教材提供的題目。而在八週課程的尾聲,我們都會舉辦期末黑客松,讓同學們體驗「接到需求-->在時限內跟隊友腦力激盪-->完成功能開發」的過程。 2. **反覆的刻意練習** 我們會持續挑戰你在「速度」、「細膩度」的表現。作為新手,很難立刻就掌握所有技能,但你必須要求自己:一定要十足把握自己能迅速精準地完成已經學會的事物。 3. **說明專案內容與過程** 在完成每個稍有規模的專案後,我們會要求你錄製一小段影片或是撰寫部落格,解釋你的專案過程、遇到的困難、做了哪些新嘗試,這麼做也能幫助別人認識你的作品! 4. **專業素養** 不論是個人專案或是團隊協作,都要養成撰寫說明文件的習慣。在小組協作專案中, AC 的技術顧問與助教們會審查你的技術文件與開發流程。技術文件包括 Git commit comments、 GitHub Readme 以及程式碼的組織架構和註解。 5. **能力評估** 期末時,我們會提供完整的技術測驗,幫助你了解自己對基礎能力的掌握是否到位、哪些部分需要努力。 #### 瞭解軟體產業 在課堂之外,我們也會準備各式職涯活動、閱讀素材,讓你更貼近並了解軟體業界的趨勢。 * <a href="https://tw.alphacamp.co/blog/get-remote-job" target="_blank">遠距工作8問,如何找到遠端工作,成為專業的遠距工程師?</a> * <a href="https://tw.alphacamp.co/blog/data-science-or-web-development" target="_blank">資料科學或網頁開發,程式開發該選哪個領域?</a> #### 建立你的求職策略與武器 最後,我們的<a href="https://lighthouse.alphacamp.co/courses/30" target="_blank">【求職攻略課程 Launchpad】</a>,會一步步引導你建立求職所需的能力與材料,替即將到來的求職行動做準備。 如你所見,工程師的養成之路,工作量真的不少!但請記得,你已經在成為工程師的道路上了,好好專心、保持心情穩定、盡情享受學習的苦與樂。 日後回頭,你會感謝在修煉的路上,持續付出、專心致志的自己。 <div class="further-reading"> <div class="further-reading-inner-wrapper"> <h5>延伸閱讀</h5> 如果對其他工程師的工作內容有興趣,可以參考這幾支國外影片。我們找的都屬於帶有新創風格的公司: <ul> <li><a href="https://www.youtube.com/watch?v=5kas2jBObUY" target="_blank">What do I do as a Software Engineer?</a> (iOS 開發者)</li> <li><a href="https://www.youtube.com/watch?v=leOX1ehXHNM" target="_blank">What do I ACTUALLY do as a Software Developer?</a> (全端開發者)</li> </ul><br>想瞭解轉職該如何準備的同學,也可以先參考這兩篇文章。但要記得,【求職攻略課程 Launchpad】裡有更詳細的說明。 <ul> <li><a href="https://tw.alphacamp.co/blog/web-developer-job-preparation" target="_blank">想轉職軟體工程師?找工作前你需要這份「求職清單」</a></li> <li><a href="https://tw.alphacamp.co/blog/career-transition-and-interview-preparation-in-the-new-year" target="_blank">2020 年後轉職 Q&A:工程師面試該準備的問題與答案</a></li> </ul><br> </div> </div>