工程師的核心競爭力是什麼?

陳董 Don Chen
量子方舟 — Kuantark
10 min readMar 26, 2020
拿坡里車站 — Photo By Don on Unsplash

「掌握一門開發語言、精通一套框架」

也許我們都曾期望把競爭力寄託在這個方向上。
經過時間的磨練以後,終於明白這可以是一個方向但一定不是終點。

About Don

大學時期選了金融系。
後來有了一個機會讓我決定開始自學程式開發。
從 2014 年到今天差不多 6 年過去了。
這段期間多數的時候都是以 Freelancer 的身分接案為生。
接觸過 iOS / Android / Backend / Web 開發,不同技術上的學習有深有淺。

同時也在 2016 年加入「好想工作室」。
和夥伴共同在台南建起資訊綠洲,聚集、培養出許多優秀的人才。
在這片綠洲上我結交朋友,也擔任過一段時間 Mentor 的角色。
成功引導學員得到人生的轉變,也建立不少難忘的回憶。

工程師的核心競爭力是什麼

關於這個話題,我們在工作室裡有許多的討論。
有人認為掌握好開發語言、精通一個框架是很重要的。
也有人提到邏輯能力、溝通能力、想像力、熱情、自律是很重要的。

很多人都有提到軟實力的重要性。
而我對工程師的核心競爭力也是這樣理解的,
它不應該是單一能力的體現,而是一種綜合能力的體現。

學習能力

學習能力很重要,但這個能力應該從哪裡體現出來?
我們通過一張圖來思考。

對於 App 開發者來說,過去用 Objective-C / Java 寫 iOS / Android 但我們都知道 Swift 和 Kotlin 是現在的趨勢。

學習 PHP + Laravel 的後端的同學,可能不知道過去有一段時間 PHP + Codeigniter 也紅極一時。

學習 Web 的同學應該都知道過去掌握 JQuery 就可以完成多數的需求,如今哪一位前端工程師不懂一兩套前端框架呢。

如果你剛開始學習,對於技術的變化還沒有什麼感覺,可以試著去回憶 Adobe Flash 在過去輝煌的日子,有多少人投入了大量的時間、精力通過 Flash 製作影片、網站、遊戲。

當時精通 Flash 的開發者,如今的競爭力在哪裡?

所以,我認為掌握一門語言或者精通一個框架還不足以成為核心競爭力
學習能力的體現應該是在於你能否快速的掌握一門新的技術。

解決問題的能力

如果你能把一門技術學的好,但是卻不懂得怎麼用好它,就很難產生價值。
所以,學習能力只是核心競爭力中的基石。

解決問題的能力是一種綜合能力的體現

  • 發現問題的能力。
  • 分析問題的能力。
  • 提出解決方案的能力。

工程師的日常工作有什麼?

  • 新功能的開發:分析需求,將需求抽象設計,實作功能。
  • 調試:這是解決問題能力的核心體現,你要去發現問題、分析問題、解決問題。
  • 重構:提高程式的性能、可維護性。

從一個需求開始

我們來通過一個需求思考看看。

今天有位案主,他帶著一個社群網站來找你增加新功能。

  • 他希望可以讓使用者上傳圖片到照片牆,通過付費解鎖圖片。
  • 他希望增加消費者的購買慾望,於是希望圖片解鎖前可以有模糊效果。

你會如何去思考這個需求?

今天如果這是一個工作室內部的挑戰賽題目,
我想許多同學都可能會直奔主題。

  • 後端同學:我開一隻 API 讓你上傳一張高清的圖片、一張模糊的圖片。
  • 前端同學:沒問題,我去找一個可以模糊圖片的工具。

然後他們就把功能開發完成,拿去給案主看了。

這樣就完成了嗎?
載入圖片會不會有下載速度的問題?

案主拿起手機打開了網站開始測試。
三個人面面相覷等了一分鐘才把照片牆的圖片都載入畫面。
案主說:這載入速度實在太慢了把?

前端同學才意識到網站可能由手機端訪問,下載速度不一定很快。

同學想了想,如果可以根據不同設備來抓取不同大小的圖片就搞定了吧?
於是前端同學主動提出,使用者選好圖片以後,就處理成六張圖片上傳,之後訪問網站就根據裝置取載入不同大小的圖片。

這樣就完成了嗎?
會不會有瀏覽器兼容、多張圖片上傳速度慢的問題?

案主再次拿出了手機測試,前端工程師暗笑這下沒問題了吧。
結果案主通過 Wechat / Line 打開網站,圖片模糊效果失靈。
後來又通過手機瀏覽器上傳圖片,結果上傳很久甚至會失敗。

同學似乎沒有想到模糊圖片的工具並非所有瀏覽器都支持也同時忘了上傳圖片也是會慢的。

這一次後端同學跳出來了。
不然前端負責上傳一張圖片,剩下的交給後端來處理吧!

這樣就完成了嗎?
伺服器會不會因為同時處理大量圖片出現效能的問題?

這一次學員決定在找案主以前,先讓一群夥伴一起來測試。
當大家都在測試的時候出現了一些奇怪的現象。

有時候網站可以正常使用,有時候沒辦法。
有時候會圖片模糊失敗。
有時候沒有成功處理成六張圖片。

後端同學反覆的看自己的 code 試著尋找問題
但是自己測試的時候不論是模糊圖片還是調整圖片大小都沒有問題。

這時候後端的同學想不出別的辦法了,他跑去找 Mentor 求救。

Mentor 聽了前因後果以後反問。

是不是人多的時候問題比較容易出現?
是不是大家在測試上傳照片的時候比較容易出現問題?
是不是有可能是因為同時處理大量圖片造成資源耗盡?
如果同時處理大量圖片是效能瓶頸,有沒有不用「同時處理」的方案?

同學去尋找答案,很快就找到了幾個關鍵詞 Job, Queue, Worker.
於是他把處理圖片、雲端存儲、記錄到 DB 的過程做成了一個 job
將一系列的 Job 放進了 Queue 中,在伺服器有空的時候接續處理。

這下不會有問題了吧?

其實還有很多地方值得思考,比如上面的解決方案,其實還有一個問題要去思考,要讓 Backend 不即時處理圖片,那前端該收到什麼樣的 response, 圖片處理完之前畫面又該如何呈現?
這一個問題就留給你去思考了 :D

又比如說,模糊圖片這個功能,其實常見的工具都是提供一個模糊係數讓我們設定,而我們通常都會給予一個固定的模糊係數。

然而相同的係數對於不同圖片的模糊效果其實是相差非常大的。
同樣是 30% 的模糊係數,有的圖片已經模糊到完全看不出是什麼,而有的即使模糊係數設定在 80% 也能夠清晰地看出輪廓。

這樣就不一定能滿足客戶的其中一個需求:增加購買慾望。

這個時候,是不是會聯想到讓機器學習給一張圖片賦予合適的模糊係數呢?

影響力

也許你有發現過,有一群人他們的學習能力和解決問題的能力都差不多,
但有些人能夠獲得的機會和資源就比較多。

  • 有些人喜歡幫助別人、喜歡分享,在團隊裡面有很高的聲望。
  • 有的人做事可靠,大家能夠放心把事情交給他,這是他積累的信任感。
  • 有的人參與過大型項目,在業界有一定的知名度。
  • 有的人寫 Blog 或做技術分享,在圈子裡面有一定的名氣。

這樣的影響力,不是兩三天就可以形成的,但可以說是工程師最核心的價值體現。

想要獲得影響力,你會需要不斷的去努力。

  • 不斷的去提高技術能力。
  • 不斷的從一個個項目中累積。
  • 不斷的通過幫助別人成長來累積。
  • 不斷的從分享文章中累積。

而一旦形成足夠的影響力,就會成為你職業發展上最牢固的護城河。

如何提高核心競爭力

提高學習能力

還記得我們如何定義學習能力的嗎?

快速掌握一門技術的能力。

要如何能夠擁有這樣的能力呢?

你要在一個領域學的足夠深。

前一段時間我想要研究一套新的技術也就是 Flutter.

一開始我的規劃是學習一個禮拜的 Dart,然後再用一個月的時間去研究 Flutter 框架中的每個 Component,然後再接著練習寫應用。

結果真的開始執行的時候,發現 Dart 不用特別花時間去學,於是第二天就直接開始練習寫應用了,結合別人的開源專案學習,碰到不認識的語法也是查一下就好。

回頭去想想看我們第一次接觸一門語言和框架的時候我們用了多少時間?

可能看語言就要一個月的時間,學習框架和各種相關的知識就半年過去了。

那為什麼學習一套新的技術棧的時間會變短呢?

因為有很多的概念都是你學過的,而這些不用重新學習。

  • variable, array, class, MVC, State Management, Token, OAuth, RESTful.
  • Permanent Storage, Reference Type, Design Pattern.
  • … …

這樣應該能夠明白,在一個領域學得足夠深以後的效果。

如何提高解決問題的能力

這過程是什麼樣的?

  • 首先要明確問題是什麼。
  • 當這個問題大到無法解決的時候,
    通過分析,把問題拆解成一個個小的可以解決的小問題。
  • 接著分別把這些拆分過的問題突破,你最開始要解決的問題就解決了。

其實這跟給自己訂目標是一樣的思路。

  • 明確一個你想要達成的目標,
  • 這個目標如果沒辦法一次完成,
    通過分析,將目標拆解成一個個小的可以完成的小目標。
  • 當你把這些拆分過的目標都完成以後,最初的那個目標就完成了。

如何通過實踐提高能力?

第一個方式:不斷的去挑戰更有難度的事情。

所謂的有難度是對自己而言的,並不是要去解決一個世界難題你才能夠進步,擺脫一直用熟悉的方法做熟悉的事情,就很有機會進步。

避免自己用一年的經驗做幾年的工作。

第二個方式:去幫別人解決問題

我有聽過「教會別人,自己就會失去工作」這樣的擔憂,但其實在我們這個行業完全不是這樣的,把自己研究好的東西分享出去的人多的去了。

教別人的過程裡收穫最大的往往會是自己。

工程師的經驗很多來自於解決問題時累積的經驗。

但是我們的工作往往不會有這麼多的問題需要去面對。

通過幫助別人解決問題,其實就是在幫助自己增加經驗。

如何提高影響力

第一個方式:成為一個領域裡面的大神。

比如說 Laravel / Vue / React 等等框架的作者。
不過這個目標雖然可以很明確,但是這個目標會比較長遠。

第二個方式:幫別人解決問題

前面已經介紹過幫別人解決問題的好處。
有些新人可能會想,自己能力還有限,能夠提供的幫助可能很少。
但你別忘了剛開始學的時候,你碰到的問題多的跟山一樣。
所以,你所學到的每件事情都有分享的價值。

第三個方式:寫 Blog 和做技術分享

不論你在什麼階段都能做的事情,而且寫文章有幾個明確的益處。

  • 寫文章可以整理自己的思路
  • 教別人的過程其實就是最好的學習方式。
  • 寫文章你會找到志同道合的朋友。
  • 寫文章也可能獲得工作邀約、合作機會。

--

--