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

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

Bernard:我們來討論一下技術。先好奇問,你個人最熟悉或最喜愛的程式語言是什麼?

Caesar:我最喜歡的當然是 JavaScript。對我來說它已經像是 mother language 這樣子。

Bernard:我覺得這跟個性有關。Caesar 你是非常隨意、很有彈性的人。所有對 JavaScript 這種「這樣寫 OK、那樣寫也可以」的語言,就很能接受。我就完全受不了。Callback 更是一種莫名其妙的事情。

Caesar:哈哈!我就覺得 JavaScript 真的是很棒!我是先學 Java 與 PHP 的。碰到 JavaScript 後來發現:「原來寫程式可以這麼輕鬆!為什麼我以前那麼累。浪費時間在那邊 compile ,每次都覺得可以先去泡杯咖啡。以前用 Java 寫 mobile,debug 還要確定半天之後才可以 run。

思考如何改善現有工作流程  落實溝通與教學

Bernard:那我問個我們學生常問的問題:這年代要當軟體工程師,需要用的工具其實蠻多的。可以看成是開發門檻大大被降低了,但也到了一個眼花撩亂的狀況。十多年前我們畢業的時候,基本上一套 PHP 可以打天下。你也沒有什麼選擇。

現在的年輕工程師,有學不完的技術與工具。你可能換一個工作環境,公司用的不是你那一套,就要學另一套工具。有或者是老闆會跟你說,想用 Vue 或 React 來開發下一個專案。對於工作了兩三年的工程師,我們常聽得的疑問是,有很多東西要學,但到底要如何選擇、如何規劃?你對後輩們的建議是什麼?

Caesar:我講實在的,我會覺得說通常你工作兩到三年,你會對於工作上的 skill set 其實是蠻清楚的,然後你對於工作上基本應該做的一般應該要 debug 部分,都懂得差不多,我覺得其實接下來,你可以做兩個部分,

一個是去 enhance 你可能想要做的事情,另外一個是你可以去了解之前 legacy 的部分。

我指的這兩個部分是說,第一個你想 enhance 的部分,一定會在很多 meeting ,或者是很多開發上的討論說,我們要把 CICD 掛進來,或者是台灣大家最常掛在嘴上,我們一定要做 testing ,很多就只是嘴巴講而已,然後你面試也都會問大家,可是實際上,每一個團隊都沒有真的做這件事情,那這個時候其實就很適合把它抓個時間放進來做,然後用 3rd party 的一些 tool 做整合,我覺得這個只是第一步。

做完整合之後,第二步的部分是你要教導還有說服團隊所有人去做這件事情,這個部分才會是最難的一個階段,因為我以前在其他工作的時候,其實都不注意這個部分,可是其實這個部份才會是你能不能把這個 tool 落實的一個關鍵。

身為想導入這個 tool 的人,你接下來要跟大家講,我們這樣做之後,可以減少多少時間、多少流程,讓我們以前的 StepA 、 StepB 、 StepC 可以全部剪掉,大家就可以 happy hour ,或是下班以後你可以安心的睡覺等等,你要和大家講它的 progress and count 。

然後有一些基本的流程、基本的說明,或者是不管是寫在 GitHub 上面, HackMD 之類的,或非常簡單的 document 都好,總比你沒有文件、沒有說明,然後就叫大家硬要用這樣子,因為你硬要推一個東西,沒有人會聽你的,不可能,這件事情永遠沒有發生過,除非大家是天才。

Bernard:聽起來你要學一個工具、一個技術,當然你希望這個東西能夠在你的工作環境提供一些價值,要提供價值的話,這絕對不是只有技術的東西,就是人的問題,所以你嘗試過、玩過,發現它的價值之後,下一步你要研究就是怎麼落實,怎麼透過培訓分享,然後跟老闆談,把東西拉出來。

Caesar:對啊說服大家,大家遇到一些問題 FAQ 要寫上去,這就是很煩的一部分,但是這個就是你能不能把這個工具落實到團隊的一個關鍵點。

成為軟體工程師的條件:每日工作內容、重要技能、面試如何準備

在工作內容以外 進一步思考自己能創造的價值

Bernard:這個再給我五分鐘再探討一下,因為很多人尤其現在年輕人,當工程師把 code 寫好就好了,反過來說,你把這個推好出去,不知道你的經驗是有什麼結果,但是你也可以說,老闆不一定會加分,因為這個老實說不在你的 job scope 裡面。

如果現在你把這工具發展出去,有人可能跟你說,為什麼我要做這個事情?為什麼我要花這個時間?然後我還需要推,推完老闆跟公司對這個東西的 appreciation ,他會不會感激你都不確定,那我為什麼做這個事情?你會怎麼去引導他們理解這個價值在哪裡?

Caesar:我覺得這件事情坦白講不是每個人都會做,但是這件事情是你必須由內而外的,就是說你自己真的想要去改變,或者是你想要做一些什麼事情的時候,才會有這個動機出現,所以我相信而且我很確定,這件事情不會是全部的人都想做。

假設以我現在的角度,我是團隊的主管,我會看底下如果有這樣的人,我會給他一些機會和 resource 去 try ,因為這樣子特質的人其實不多,大部分人其實的確就像你剛剛提的,的確是把公司的事情做完,公司的事情就很多了,你為什麼還要去搞其他的事情

我們自己都當過工程師,你其實自己也很清楚,你一天真的有認真工作超過五個小時嗎?對不對。

這個很現實,你被老闆拉去開會浪費時間,然後你可能又要陪其他同事去散散步,時間就沒了,你想要開工之前還要先 warming 一下,先讓整個環境都完成,你真正 coding 的時間到底還有多久?

其實沒有很久講實在話,可是公司工程師的產值就這樣子,我們真的自己三個小時內可以做完真的很多很多事情,尤其是我對這個東西很熟的時候,我解 bug 或是在做一些東西真的很快,除非它是一個非常新的東西,或者是一個需要 creative 的狀態,可能那是另外一回事,可是我們剛剛提到情形都是,我已經在這間公司兩到三年,你如果兩到三年,做公司的事情和解公司的 bug ,你不可能還要解很久。

你在過程裡面一定會遇到一些 bottleneck ,或者是以前曾經趕工所造成不好的結果,甚至是大家想要做,但是一直覺得很卡不曉得怎麼進行的,其實這件事情就是你視而不見繼續就悶著頭,就當做事情很多繼續走,或者是你可以花一些時間,然後讓大家工作更舒服,或者是讓你工作更舒服。

其實工程師的特點就是要懶,就是我們會希望五分鐘就可以把以前要花三十分鐘或一小時的事情做完,今天其實老闆不 care 你到底花多少時間,可是你能不能讓自己永遠在一個最簡潔的狀態下,而不是讓自己好像一直在做一個很蠢的事情,重覆在做,我覺得這個才是工程師最大的價值。

Bernard:理解,所以有一部份是讓自己能夠最輕鬆、最舒服、最簡潔把事完成,把自己的效率提高,然後另外的部分是一種從內而外希望把東西變更好,把這個工作變更好。

覺得從這個主管來說,自己把事情做好是基本的,但是如果這個員工、這個 team member ,能夠想到更有動力去把這個環境、把這個 team 做得更好,這是非常有價值的 team member ,的確很需要的,重點是前提你要喜歡這個環境、這個團隊,我覺得蠻重要的。

Caesar:你習慣整個工作環境之後,接下來你要想的是,我如何讓它變的更好,或者是我如何讓我自己更快的把這件事情做完。

技術團隊主管的培養人才之道:如何與團隊溝通和共同成長

從社群組織參與培養領導力  了解人的本質

Bernard:懂懂懂,最後兩個題目,一個是想針對 JSDC 這件事情,我覺得跟過去一樣,好好寫程式不就好了,為什麼要搞社團、搞這麼多年會、推廣,所以 JSDC 的起頭是怎麼出來的?然後你這些投入這麼多年了,你在想什麼?

Caesar:首先,大家都會問的問題就是 JSDC 到底怎麼開始的,其實一開始就是因為沒有,所以我們就去創了這樣子一個 conference ,很久大家以來就是 Ruby 都有 conference 了,為什麼我們 JavaScript 沒有 conference ,那時候我們第一場,我還記得2012年那時候第一年,我們特別有去問 ihower 怎麼辦一個 conference ,我們一群小屁孩就這樣坐下來然後圍著 ihower ,那時候我記得是 Ruby Thursday 還是什麼的,就是去問他這樣,所以非常感謝,真的一路走來非常多前輩的指點。

然後那個時候還有 OSFF ,包含在裡面的 Rock 和強哥,他們其實幫我們很多,讓我們省下非常多錢和非常多的一些做錯的事情,我覺得回到當初來講,就是因為沒有這個東西,所以我們想做這個東西,然後就一群年輕人有的創業,有的在公司待久了可能就是沒事做,那一年真的是很多優秀的人全部都集結在一起,大家用精華的時段,把這個conference 做出來,然後 initial 從2012年,一路就到現在2020年這樣子。

Bernard:最後一個問題,一些個人的職涯發展的分享,過去你自己創過業,做過專案公司,你也在不同的公司待過,好奇問你你自己個人的經歷來說,工程師到主管什麼的,有沒有碰過一些個人當時職涯的瓶頸?自己碰過一些 bottleneck ,然後最後是怎麼克服或是轉換一個跑道?

Caesar:其實坦白講遇到最大的瓶頸,我覺得是帶人,那時候我做 frontend ,也接觸 Node.js ,所以有一些兼著 backend ,然後後面就有機會可以帶一些新人,或者是對於 frontend 沒有那麼熟的人,那個時候其實遇到的最大瓶頸,真的就是帶人,因為我以前在一開始的時候,會覺得 ok 我就秀一段 pattern , task 寫很清楚,他就可以照做,實際上不是這樣子,後面他做不出來之後…

Bernard:

工程師都以為人是電腦,把指令寫清楚了,什麼東西都寫好了,就會發生。

Caesar:我都秀給你看,我都跟你講怎麼做了, Step 1 2 3 4 ,所以你就照做就好了,應該 result 就會跑出來了,可是沒有。

Bernard:懂懂懂,人跟程式還是有差別,所以後來是觀察到這個為什麼落差,看起來還是要跨過這件事情,當中是跟主管請教討論、看書還是什麼?怎麼去突破這件事情?

Caesar:以工程師轉主管工程師這件事情來講,對於我來說,比較多的時間是真的透過營運社群的經驗,和做社群的整個過程去反思,我該怎麼去管人的狀況,剛好我同時有做 JSDC ,然後有做 Node.js 的 community ,我覺得在當時也滿幸運的, JSDC 本身就有一個 group core team ,然後大家會一起開會做事情,同時間 Node.js 也有一群人可以願意跟我一起做,不管是開活動或是紀錄或者是攝影等等。

當然中間透過一些書籍來驗證可能觀點,或者是去找到說帶人的一些模式,包含說可能去了解社群怎麼運作,或者是組織架構怎麼進行這類的書籍,就去反覆的思考說,其實我可以把就是社群裡面的經驗,帶到這個工程的團隊上,其實可以這樣做。

Bernard:理解理解,今天大概差不多了,Caesar 老師分享了許多對工程師的期待,以及個人成長,我覺得跨過這個技術領域,可能蠻多人都是在思考技術,初學者重要先把技術的基礎先顧好,但是後面你發現就是不管是帶人,或是在公司推動新的技術,還是蠻容易遇到瓶頸的。

Caesar:很容易,一直都會有新的問題,很多時候不管是自己技術的關卡,或是大家給你的期望和想法。

我覺得技術到最後都不會是重點,其實最後的關鍵點還是在人。

招募主管如何定義優質技術人才?8 大 QA 揭密軟體工程師面試、薪水談判之道