---
title: "作為工程師，我們與專業的距離"
date: 2020-09-28T00:00:00+08:00
publishDate: 2020-09-28T11:22:49+08:00
lastmod: 2022-01-17T14:20:52+08:00
tags: ["心得","工程師"]
toc: true
permalink: "https://blog.aotoki.me/posts/2020/09/28/The-distance-to-become-a-professional-programmer/"
language: "zh-tw"
---


不知不覺工作已經四年左右了，如果是從開始接觸程式語言計算的話似乎快要二十年。這幾年也開始擔任公司負責面試的主管，也看到越來越多工程師培訓班的出現以及更多的人挑戰轉職工程師。在這樣的狀況下，每次跟同事交流，我總是覺得我們不夠專業。

這也一直讓我在思考，作為一個「專業」的工程師應該要滿足什麼條件？

<!--more-->

## 年資

我想年資應該是一個非常容易判斷的方式，畢竟大多數的職缺都會說希望有幾年經歷。不過年資真的適合作為一個評斷的標準嗎？

如果從我開始寫程式來計算，至少有十五年的時間。不過實際上我工作的時間也只有四年左右，而扣掉工作的這幾年過去這十年的「累積」真的是有在持續成長的嗎？

事實上，在剛接觸的時候我至少有五年的時間耗費在摸索這個領域，雖然是因為在那個時間點大多只能靠自己看書跟查資料（當時也不容易找到資料）來學習，所以效果一直都非常有限，直到朋友推薦我去參加研討會（Conference）之後才讓我接觸到原本在學習 PHP 上不一樣的觀念，第一次瞭解到什麼是框架等等概念同時也認識了很多能夠做技術交流的朋友，也因此才在短時間內快速的進步。

這也是大部分的技術社群都會推薦參加社群活動的原因，即使是單純的吸收資訊也遠比自己研究的快很多，雖然很多時候不一定是當下自己能吸收或者需要的。

簡單來說，使用一個技術的時間跟能力並不一定相等，從培訓班的出現向我們證明了如果有適合的老師跟教材，要在短時間入門是非常容易的。

## 經驗

既然年資不影響能力，時間拉長之後就不會進步了嗎？我想這也是否定的，我們需要討論的是「經驗」也就是在同樣的時間裡面，我們累積多少「經驗」的問題。

舉例來說，我接觸程式語言的前五年左右，我不斷的重複在練習 CRUD 和一些常見的網站系統（大多是書上教的）除此之外就是把 HTML/CSS 的應用不斷的加強，當時 JavaScript 並沒有像現在如此興盛，因此就只有在做簡單的效果會使用。

實際上我前五年練習的東西，如果在培訓班的角度來看只需要幾個月密集的練習就有一部分的人能做到「熟練」的水平，這也是年資對「能力」的影響不一定成比例的關係，我們如果一直止步在同樣的技術跟知識上，總會達到一個極限。

跟其他人的交流以及挑戰和嘗試新的技術就變成一個很適合累積經驗的地方，從另一個角度來看新創公司因為需要靠自己做的事情相對的多，所以也就能夠讓人快速的累積大量的經驗。

## 知識

然而累積經驗雖然豐富了，但很多時候卻無法用一個能「說服」其他人的方式描述這個經驗。這也是我認為我現階段「卡住」的地方，雖然我透過在接案公司經手各種專案以及自己的練習、黑客松等情境，在不同領域跟情境下累積了非常多的經驗，也因此能夠處理非常廣泛類型的專案開發，但是卻很難將這些東西教給其他人以及「說服」其他人使用。

我認為這是一個「廣度」跟「深度」的問題，現在我們有非常多的網路資源以及文章可以參考，很多時候我們都是基於某個文章的說明來解決工作或者自己專案上的問題，但是很少深入去探討問題的原因、解決方案能解決的原理以及這個做法帶來的影響。

這樣的狀況就造成了對客戶無法用合理的數據或者分析來解釋我們如何處理這些需求，而對於帶領團隊上則無法給予適合的指示或者建議只能盲目的嘗試，也就造成了在需求跟開發上的時間成本。

> 雖然需求的決定還有很多因素，但是如果我們能更專業的說明問題是否就能更快說服客戶使用我們推薦的作法呢？

回過頭來看，作為非資訊相關科系畢業的人就會發現自己缺少的那一塊還是回歸到了學校是否學好這些東西，不然像是 CS50 這類課程、演算法、資料結構等等資工系學生都學過的知識，就不會在社群裡面被大力的推薦跟討論。

不過這樣看來，資工系的學生作為工程師不是應該大部分的人做得更好，業界還是有一半左右的工程師是非本科系的原因是什麼？也許就是經驗上的差距吧，即使考試題目過關了但並不是每個人都樂於去挑戰不同的專案開發。

至少，在我這十幾年的經驗裡面「知識」跟「經驗」實際上是缺一不可的，只不過我們在「學校」跟「公司」大多偏重某一部份，能夠注意到兩者的平衡並且「加以整合」的人可能比我們想像中的要少，畢竟工作不一定會遇到需要這些知識的情況，或者單純的跟著其他人學習卻不知道該如何和自己的經驗進行連結。

## 視野

前面討論了這麼多，我們足夠專業了嗎？

也許作為一個「資深」工程師可能足夠了，要再繼續提升的話還缺少了什麼？我想是「視野」這個部分，一間公司的目標是以「賺錢」為目的，而我們卻只能看到自己眼前的錢（薪水）這樣是足夠的嗎？

我想很多人跟我一樣有察覺到一些跡象，雖然我在過去的工作中也逐漸地開始考慮「客戶的理由」這個問題，不過直到最近在 [TGONext](https://next.tgonetworks.org/) 結束後拿到來自導師 [Ant](https://blog.gcos.me/) 贈與的書——[知行](https://www.books.com.tw/products/CN11645111)以及結合過去跟前輩們學習的知識才對這樣的狀況有了一個比較能明確區分和認識。

書中將待在公司體制的工程師區分為兩種發展方向，分別是架構師（技術管理）跟技術專家（技術特化）兩種體系，如果是選擇管理體系的話就會要面對到處理人的問題，不論是對上司還是下屬都需要處理，但不管是哪一種體系的工程師，我們最後還是要面對的是「公司怎麼賺錢」的問題，也就回歸到了我們「看到多少」

也因此除了技術的問題之外，我們還需要將商業和人的問題也一起考慮到解決方案裡面，即使我們可以用完美的技術把問題解決但是趕不上時程呢？在經驗中處理某個情況用某個方法總是有用，但實際上我們的客戶卻是例外的狀況呢？

要能夠區分清楚這些問題，就沒辦法再以單純的「開發者」去看這件事情，同理可證即使是「開源專案」也要考慮到社群的發展、長期的經營等等問題。

> 我想我現在除了「知識」之外，就是要拓展「視野」的開闊度，因為他已經不是單純用技術好壞就能處理的問題，而是要能夠了解到手邊握有的技術能怎樣解決問題。

## 路

結合上面的過程，在我看來就是一條一條的路。

當你開始想前進的時候，可以跟著前人的經驗選擇一條安穩的路前進，如果想走得更遠就需要知識的累積來讓自己對這條路更加熟悉。不過不管怎樣，這都會是別人的路，如果想要走出自己的路就需要有自己的視野、看法，才能夠前進。

但是要開拓自己的路，就需要有足夠的經驗跟知識才能應對未知的危機。

如果想要獨當一面的話，大概就是要有自己的視野去選擇自己的方向並且能讓別人能跟著你的腳步前進吧！

對我來說，這是我目前所知道的「專業」的表現。

## 後記

這幾年除了速成工程師之外也開始出現網紅工程師等等各種不同的工程師類型，這大概是有一些人默默累積開拓出了這些可能性讓這些情況變得可行。不過與之相對的，大概就是這幾年聽說或看過的神奇現象也更加的嚴重，像是在社群網站上會看到只要業主開價太低就先攻擊而沒有仔細分析過需求和自己的能力是否適合說這些話、剛從培訓班上完課剛好遇到一些公司找不到人接手專案就能被當作資深工程師被招募進去卻以為自己能力非常好等等，也因為這樣讓我開始思考這個問題。

在運氣好或者整體環境使然所獲得的職位、名聲是而沒有思考過自身的能力是足夠、在這個領域還有多少需要學習，是否就是所謂的「心態」的膨脹或者「視野」太狹小了呢？

不過，最主要的還是想要提醒自己，現在有的能力跟自己「想象中」的能力還有差距多少。

> 心態的問題似乎不太適合在這篇文章討論，不過有一個有趣的部分是我花了很多年才找到「戰勝自己」的認知，雖然到現在都還是很難去避免跟其他人比較，只不過比較的對象已經逐漸能變成去觀察自己「進步了多少」

