台灣 JavaScript 社群的推手 — Caesar (上)

本篇訪談節錄自 Bernard 鐵人賽與頂尖工程師談「追求卓越」 系列

這篇會紀錄我的一位好朋友,也是在過去幾年對 ALPHA Camp 有非常多貢獻的老師 — Caesar 老師的一場對話。

Caesar 的開發經驗非常豐富,包括 D-Link、神通電腦 (Mitac) 這種大廠,以及近年的時間軸、Awoo 等新創。但大多數人認識 Caesar ,應該是透過他一手推動的台灣最大的 JavaScrip 年會 JSDC。

正如 ihower 對於台灣 Ruby-on-Rails 的發展影響深遠一樣,Caesar 可以說是台灣 JavaScript 背後的推手。

當 JavaScript 還是一個崛起的程式語言時,Caesar 透過各種分享、授課、活動,積極讓台灣的軟體社群與產業,更認識 JavaScript。ALPHA Camp 決意把課綱從 Ruby-on-Rails 改到 JavaScript 時,Caesar 也擔任我們的顧問,確保我們教材在技術上的品質。

這次,我跟 Caesar 會談到他個人的職涯發展,他對傳統資工、資管系的教學模式的看法、以及如何成為一個有價值的工程師。

https://ithelp.ithome.com.tw/upload/images/20201002/201292492yNXbAQGhY.png

從有人使用自己打造的成品開始得到成就感

Bernard:我們也合作了五、六年了,從老師到技術顧問。非常感謝你一路以來的支持。我們很多學生校友你也有帶過。現在他們已經畢業、當工程師了三、四年了。我們發現,他們目前都會覺得有點迷惘:「我程式碼寫的差不多了,工具也學的不錯,Vue 、 React 也有會,但是 project 一個接一個大概也差不多。我也不知道要繼續寫程式下去,還是像老闆跟我說的,要思考要不要帶人、要不要當管理者。」

老師你在這個產業這麼久了,一定是有抓到一些核心價值,或是在過程中有深刻的成就感,才能在這個領域堅持這麼久。所以這次希望透過這個系列,把你的經驗分享給大家,引導他們思考自己的職涯。老師你寫了多少年程式?軟體工程師當了多久?然後你是怎樣入行?

Caesar:我真正開始寫程式應該從大學開始。所以寫到現在應該有十多年的時間,然後最早最早一開始接觸應該就是小學,那時候國小國中的時候寫 FrontPage ,國中就開始寫 FrontPage,所以我算是蠻早的。

Bernard:FrontPage! 很久沒聽過這個名字了!所以你是就是從一開始就愛上寫程式?

Caesar:其實寫程式對我來說,中間並不是這麼順利。那段時間是我從國中開始寫網頁,中間有一段時間就希望可以寫「更硬」的東西。當時很天真的認為,網頁不太算什麼。我要學的是程式語言,比如說 C 或是 Java 等。當時我都是去買書然後自己來學,那時候買好幾本書,但讀完前面幾個章節 (chapter) ,我看完就讀不下去了。因為真的不好理解。

所以後來,這種較「硬」的程式語言也沒有繼續學。當時 HTML 還有 Flash 我其實還有一直在碰,因為它們比較簡單,而在那個時代,是可以用 FrontPage 還有 Dreamweaver 等工具,去拖拉一些簡單的頁面出來。所以對於當時不太會寫程式的我來講,我蠻享受那個雖然不完全瞭解在發生什麼事,但最後能做出東西來的狀態,讓我很有成就感。

Bernard:所以那是國中的時候嗎?

Caesar:對,大概在國中。然後去參加了些比賽與活動,也有一點成績,得到一些優越感,也讓自己覺得我好像做了一些事情。後來我去到五專,也幫學校打造一些網頁。後來透過朋友介紹,開始接一些外面設計更大公司的案子,就開始有收入。當然當時錢跟現在的比起來講不是很多,可是我覺得是一種肯定與成就感,還有打造一個網頁或網路產品,真的一個東西是屬於我做的、會被人使用。我蠻樂在其中的。

但當時其實真的有點像一種業餘興趣。一路到後面,到我進入聯合大學學程式的時候,才真的覺得自己是在寫程式。那時候老師給我們的題目是真的要我們去認真的思考。題目常會有些邏輯的處理,或是需要我們去思考如何將一個大問題再解成更小的問題,又或是去評估 bug 或是一些潛在技術風險。較過去自己摸索的時候,是更高層次的訓練。

Bernard:這就是你在聯合大學的訓練?

Caesar:對。我覺得那時候大學裡的訓練,對於我後來的工作是蠻有幫助的。

當時也我做了一些學校系統開發,例如學校學務處網站、又或是學校的場地租借系統。接這些案子是,一開始也沒有什麼把握,反正就悶著頭去做了。當時候只有接觸過 PHP,AJAX 也才剛興起。反正就是摸著書、矇著看,一邊學一邊做。那時候慶幸是 JQuery 剛起來,它把開發門檻降很多。

所以我認為開源工具很重要。當時我已經算是一直有在做開發,但在對的時機點有一個好的工具讓開發更簡單、更輕鬆,就幫助我進入這個時代。

學校都在教縱向  要靠自己探索與嘗試橫向連結

Bernard:我相信其實 jQuery 也幫助很多人進入網頁開發這個產業。讓我先確定一下,雖然你在大學前已經靠自己學習在開發、在接案了。但你是所謂的「本科生」,在聯合大學是修資工、資管的,對吧?

Caesar:我一開始是走電子通訊,但後來發現我對硬體真的沒什麼興趣,所以我就轉到軟體。我是聯合大學的資訊管理系畢業的。

Bernard:你也知道我們很多學生其實不是「本科生」,而他們對這件事也會些焦慮,因為也有企業會說非本科生不請。因為你一開始是透過自學,後來有受過正規的資工系訓練。從你個人的經驗來看,你會對「非本科」的同學,有什麼建議?

Caesar:我覺得在大學裡面,在學的時候其實都不太清楚自己在學什麼。這是台灣所有教育最基本的問題。老師教授就是 “chapter-by-chapter” 一章一章教給你,可是他從來沒有跟你說你要學的原因、未來可能的應用。同時也缺乏一個連貫的過程與脈絡,只是把不同課程組合在一起。

舉例來講,我們那時候有一門課叫「專案管理」,課程裡包括了所謂的「專案管理模型」,教授整個專案模型是怎麼樣去建置,什麼是 waterfall 系統分析等等。可是課程中我們並沒有把這些系統套用在程式開發的過程中。

另外,我們課程中有不少專案或是所謂的 demo project。但這些專案都沒有明確、仔細的一個前講。沒有人會跟你講說,你以前學過的 design pattern 或技術可以套用在這個專案裡。到底這個專案要被如何執行,跟過去學過的又是如何連接等,都是靠自己探索、嘗試出來。

非本科系轉職軟體工程師,如何面試進一流公司?

Bernard:嗯。所以好像是缺乏了背後的一套清楚的脈絡?

Caesar:我覺得台灣的教育系統就是少了這部分。每一科獨立來看都教得很完整,都教得很仔細。可是我們實際到業界去用之後就會覺得搭不上。這是因為我並沒有辦法將我在工作要完成的任務,跟也學校學過的專案管理、design pattern、又或是 algorithm整個扣在一起。課程與課程之間,以及與產業問題之間,連結性是很弱的。

所以上完課後,我只知道 algorithm 就是解題,我也知道怎麼去算 BigO。可是我在寫程式的時候,我可能寫用很多 loop、效率很差的程式。因為我沒有把兩件事連在一起思考。

很多時候也是態度問題。學校並沒有把一個「當一個優秀的軟體工程師」的標準定義清楚。所以有些人在實際工作時會發現:「哦!以前學校曾經講過這件事情,那我去研究一下怎麼寫比較漂亮。」但更多壓根就是「反正我把這件事情完成就可以了」的態度。他已經忘記之前的「演算法」曾經教過這些,然後你其實可以做得更好。

所以我覺得在學校裡面,很多人說學校教的東西沒用。但是我覺得學校教的,當下你不一定知道會怎麼用,因為是它是「縱向」的教下去。在業界時,如果我把以前書再拿來看,我就會發現以前的東西其實都有講過,現在我要把這些觀念串在一起 — 這是一個「橫向」的過程。

演算法面試準備與LeetCode 刷題重點心法

最有價值的是尋找答案的過程  互相幫助的同學校友網路

Bernard:所以你在學校裡覺得學到最有用的是什麼?

Caesar:我覺得是教授教我們如何去尋找答案的過程。尤其是在做研究或是專案時,我們會不斷地去找前人家開發過的 paper,或是 IEEE 裡面的 model 之類的。我們會一直尋找不同的 source,以及這些 source 的 source。在這個研究過程中,你也會找很多你嘗試過才知道不適合的理論與工具。其實這種研究與試錯精神,才是業界所需要的。

在職場裡,沒有人會跟你講正確答案,我也不曉得什麼叫做百分之百的答案。你就是要不斷的去尋找,並判斷哪些是你要的,哪些又是你不要的。

Bernard:也是因為這樣,所以很多人說「剛出社會的大學生根本不能工作」。

Caesar:是的。那個 gap 是很大的。

Bernard:嗯。但不可否認,大學還是有它的價值。你自己也在國高中時自學的過程。相對在大學是的正規的資工、資管訓練,它給你的最有價值你覺得又是什麼?

Caesar:我覺得在學校裡,尤其是資訊相關學校,你最好的資源就是:1. 你有老師可以問、2. 你在業界會有一堆同學,能互相幫忙、支持。雖然畢業後真的成為軟體工程師的比例不高…

Bernard:比例不高?

Caesar:對啊。以我聯大資管來講,drop rate 大概在七成左右。也就是說,剩下只有三成多的人會真的到業界在做軟體開發。

雖然只剩下約三成的同學,可是我們的社群裡也有學長姐。這些人可能已經畢業五年、十年了,他們已經是公司的主管或是經理,又或者自己在創業。這些人脈可以是很有用的,大家都蠻願意幫忙。譬如像當年也是因為我們一位大我們快三十年的聯大學長,他在 Yahoo! 當經理。然後他在聯大開了一堂課,請好幾位 Yahoo 的工程師來講課。這些都是難得的資源與機會。總結來說,我覺得有一個生態體系,是非常有幫助的。因為當你有問題,你知道要問誰,能到哪裡 call for help。

Networking 拓展科技業界人脈,你可以參與的開發者社群

從人才培訓中得到更深的成就感

Bernard:轉換一下題目,你當了這麼久的工程師,很多不同的經歷,那你覺得你自己最讓你自豪的是什麼?

Caesar:我蠻自豪的就是我帶了一些年輕朋友進入這個產業。他們都能夠自我成長,甚至活得比我還要更好 — 可能不管是薪水、成就,都比我還要更高。這讓我蠻開心的。(註:Caesar 多年來做過大大小小的各種培訓與課程。有些是非常長期的「師徒制」的 program。)

像我們的 “ST to DE program”:就是所謂的 “student-to-developer”,其實是希望延續以前 offline 的型態,但是我們用全線上的模式,讓有潛力的學生盡量讓他在短時間內,透過我的一群同好去 mentor 他們,幫助這些學生在短時間之內,成為一個業界可用的 developer。

Bernard:這個 program 大概要多久的時間?是怎樣的模式?

Caesar:大概是一個三到六個月的培訓。我們會給他們作業,然後也會有一些課程,更會邀請一些人進行分享,給大家一些方向。最後的部分跟 AC 的課程蠻像的,就是會有分組專案。而這些人畢業後,我們再會給適合的一些實際的案子,讓他們去參與業界的開發過程。

Bernard:這是幫你公司培訓人才嗎?還是單純一個興趣?

Caesar:主要的目的還是在看看我們能不能培育一批業界會搶著要用的人才。雖然不少人在過程中 drop 掉。可能是因為覺得這不是他想要的,又或是覺得壓力等等。但是能完成這個 program,再加上跟我們工作一陣子之後,基本上出去,我還沒有看到是低於年薪一百萬的。

技術能力以外  也重視自己的基本工作態度與素養

Bernard:那太厲害了!聽起來除了技術之外,實際工作經驗也是很重要的?

Caesar:我覺得大家都會說,軟體工程師講的是技術。可是實際上,很多時候講的人跟人的互動。就是你在工作上是否能把事情做更周全的思考。但何謂「更周全」,其實是主觀的。所以更重要的是,你要讓工作夥伴或是客戶覺得你是一個可以溝通、可以信任的人。在過程中,你就必須要多做一些事情。譬如說,最近流行 remote work。很多人只是知道要在 Slack 溝通,但到底如何溝通才是有效的?

例如當主管在 Slack 說「我們的專案要作這個修改。」訊息是溝通過了,但大家這個修改 OK 嗎?有些工作經驗淺的年輕人可能看到訊息後,心裏會想「喔,我看到了」。他會照著訊息裡的指示去做,但卻不會回應任何訊息。而這是主管就要猜,到底訊息是否被看到?這修改什麼時候會發生?這種溝通就是無效的。

我們都會要求員工一個最低的 baseline,就是當一看到訊息,一定要回覆,確定你有收到。另一個例子,我也會要求員工主動去回報問題。我們有個週會,很多人開始時,都只在週會當下才反應狀況。我們的要求是,你要把遇到的問題或是困難,先透過文字溝通,而不是在會議時才討論。

Bernard:談到這裡,我們討論一下人才好了。Caesar 你一直都蠻重視工作態度、與人互動等。甚至有時候更會放在技術能力前面。主管的訊息,看完不能已讀不回。要在會議前說清楚要討論的內容與目的。這些能否被理解為所謂的工作素養?

Caesar:我很乎這些事情。因為技術當然是基本。但不管技術能力如何,你都是要跟其他人 cowork 的。尤其是最近常被提到的 remote 工作環境。

你的目標是要讓團隊的其他人能「舒服」的跟你工作。如果你在 remote 的工作狀況中都能把溝通、協助做好,你到辦公室就一定沒有問題。

三分鐘小測驗,找到你的JavaScript學習入口