---
# System prepended metadata

title: 工程師必備技能分析

---

# 工程師必備技能分析

### 軟體工程師的真實生活

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

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

讓我們來聽聽 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>


