技術總監需要有技術嗎?

Denny
The Bayesian Trap
Published in
10 min readApr 24, 2023

--

我不是技術狂酸民,更不是純 soft skills 傳教士,但這是一個很好的機會來討論所謂的「資深」、「技術」職位到底需要什麼;不管你是不是軟體工程師,我相信只要你「可能」會跟任何科技業的人共事,這分享對你會有一些價值。
如果你是軟體工程師的話更好,說不定以後面試看這篇就夠了。(絕對不夠)

just kidding

本文的大綱

  1. 前因後果
  2. 我有什麼資格討論這件事
  3. Coding Interview 到底是怎麼樣的?
  4. 模擬面試的深入簡出
  5. 技術和 Soft skills 的抉擇
  6. 總結:你該買這個課程嗎?

1. 前因後果

台灣的軟體工程師 YouTuber 並不多,Hack Bear 泰瑞在他的頻道上發布了一個名為「誠徵資深實習生|面試過程公開」的影片。

內容乍看是面試過程,但實則是另一位工程師 YouTuber「在地上打滾的工程師 Nic 」賣課的業配:

因為我沒有收錢,所以就不放連結了,有興趣的人自己去找,結論是我可能會推薦,但有些前提,同時也會提供你如果不買這個課程的話,你能怎麼樣實現「專業」的成長

這聽起來沒什麼大問題,但 Nic 在面試的過程中極度雷殘,雖然他在最初表明自己其實是管理職,沒時間碰技術;但面試的表現還是受到許多軟體工程師觀眾質疑。

大眾也分成了兩派,一派是覺得沒技術就是垃圾,另一派則是認為 Nic 的確有他獨到的地方,而 Nic 也在事後發表了另一則影片來回應,包含了影片的本義是為了呈現面試的真實樣貌,並解釋自己近一年來將重心轉移到管理上,所以才會有這樣的呈現。

同時說「技術為重」跟「不需要技術」都對實在太滑頭了,聽君一席話如聽一席話就是這樣子,所以我想跟大家分享在怎樣的情況下技術為重是對的,在什麼樣的情況下 Nic 的方法是好的;以及如果科技業他媽終於停止裁員的話,你能在這場面試中跟 Terry 和 Nic 學到什麼。

我完全能理解這個影片可能只是在演戲,但我想做個大膽的假設:「技術總監的技術面試真的是這樣子」,就事論事這樣的表現代表著什麼,以及到底身為一個技術總監或管理職需不需要「技術能力」。我會忽略最前面「資深實習生」的幽默部分,因為不管是實習生到 VP,在面對 coding interview 時都是平等的。

2. 我有什麼資格討論這件事情

這是我的 LinkedIn,我不喜歡用資格論來當討論前提,只是想表達除了經歷過一樣的面試流程外,也跟所謂「高等級」的技術人員以及管理職工作過。
我曾經是面試者也是面試官,也幫助過很多人準備這種面試,所以兩方想法我都能理解,也更能看到盲點是什麼。
而相較於 Nic 學經歷背景,我們有著不一樣的劣勢,因為我是文組轉職軟體工程師的;想跟大家說文不文組、學不學店太小家子氣,你會走得多遠最終只跟你自己有關係。

3. Coding Interview 到底是怎麼樣的?

很多人會跟你說:「解不出來沒關係,只是要看你思考跟溝通的過程」,我可以保證這絕對是唬你的;如果每個被面試的人都溝通波棒、想法清晰的時候,當然選有完美解出來的那個。
說到底 coding interview 只是一個篩人的考試,我沒有要爭論工作上是否用得到資料結構或演算法,但單純論這個考試的話可以粗分為三大面向:

  1. 溝通能力
  2. 演算法與資料結構
  3. 實作能力

理解演算法跟真的能把 code 寫出來是兩件事情,這很重要,但我只講一遍,因為講三遍已經過時了。

之所以在軟體公司間如此普遍就是因為想要更「客觀地」評估一個人的技術能力,是不是能在需要學習或遇到難題時快速 ramp up,我不覺得它是最完美的,但就像軟體工程的所有事情一樣,這是個投入時間與獲得資訊的 trade off 。

接下來讓我用兩分鐘的時間,跟你介紹面試官到底在乎什麼:

首先是很多人忽略的第一件事:對於資深的職位(包含技術管理職),Coding Interview 不會是面試裡最重要的部分,招募者通常會把重點放在「行為面試」以及「系統設計」上;就算你是無情的解題機器,你還是可能會 Fail 掉;換言之,如果你在 Coding Interview 上有些瑕疵,通常都是能夠被原諒的,畢竟一個「資深」的人員有著太多 coding 以外的技能,從系統設計、溝通、組建團隊、規劃再到通靈 blah blah,真的是 team 有一老如有一寶啊!是不是簡單的邏輯呢?

第二件重要的事情是:如果只是要通過 Coding Interview,你不需要是資料結構與演算法的高手,只要有最基本的觀念就行;想考倒面試者的面試不會是個好面試。

所以我們在當面試官時,對這些資深職位的「疏於準備」都是有心理準備的,同時也不期待能多深入探討各種奇技淫巧;但,Nic 的例子是屬於「有點瑕疵」嗎?讓我們看下去。

4. 模擬面試的深入簡出

如果你不是軟體工程師,或者對細節沒興趣,我會把對 Nic 面試的總結寫在最前面(🟢:給過、🔴:不給過、🟡:有疑慮)

  1. 溝通 🟢:非常的順暢,儘管在答不出來時仍然有清楚表達他的想法,這不是單純的嘴砲,我真的能理解他在想什麼。
  2. 演算法與資料結構 🔴:優秀溝通能力在這裡是福也是禍,因為太過清晰所以可以看得出來並不是不熟,而是幾乎沒學過
  3. 實作能力 🔴:Nic 的 code 跑不動或是有明顯的錯誤,但他並沒有發現;侃侃而談地溝通能力在這裡也讓我理解他不是因為緊張才失常

🟡 不是因為我硬要湊紅綠燈,這個黃燈是給面試官泰瑞的,在很多地方他其實可以在 Nic 的思考火車走遠前給提示,這樣能有更多機會觀察 Nic 如何實作的,因為在前半段已經明顯可以知道面試者對演算法及資料結構的知識掌握不足,沒有必要在上面浪費過多時間;但最後在寫不出答案時,泰瑞問了如何 Optimise,讓 Nic 能分享他的想法,而不是尷尬地解不出題目,我覺得是個很棒的 follow-up,所有的面試官都應該是要希望面試者能成功並有個好體驗的。

小結:

  1. 穩穩的 🔴,不是因為面試失常或疏於準備,而是在這場面試中,他展示了近乎零的基礎知識與實作能力,這裡是單純以「技術面試」的結果來判斷,而不是以工作經歷;實際一點說,我們不可能從短短的面試中認識一個人數年間做了什麼事情,而技術面試是其中一個方式來理解面試者的技術能力,因為要了解一個人,是看他做了什麼,而不是他說了什麼,所以當我說 Nic 的基礎知識與實作都不足時,不是在否定他的經歷,而是客觀呈現他在這場面試裡的成果。
  2. 如果公司並不會遇到任何技術上的難題,或需要的是「純管理」的 People Manager,那也許這些缺點是能被忽略的;但如果他仍須帶領工程團隊並做出會影響任何技術大方向的決定,套句我阿嬤常說的話:⋯⋯阿彌陀佛。

好了,如果你對細節分析沒有興趣可以跳到 5 了,接下來比較詳細的面試解析:

首先是 Nic 在這場面試中非常出色的部分:

  1. 在一開始的時候確認題目,理解面試官想要得到的答案是什麼
  2. 主動跟面試官說需要時間思考
  3. 活用 IDE 跟 code 來說明自己的想法,不會天外飛來一筆讓人跟不上
  4. 大膽的想法:「我可以 Google 嗎?」儘管很多人在嘴這個,但我不覺得這件事有啥不對,因為工作上本來就會 google,而事實也證明就算搜尋了也影響不到其他部分
  5. 就算不知道自己在說什麼,還是勇敢地說下去,在 Nic 提到時間複雜度那裡:題目中有 N 個 node 要 traverse,但他說出 run time 是 log N(是錯的),最後結論又好像又說了一句似是而非的話(這裡面試官通常會追問下去);很多時候,不熟題目的面試官就會覺得好啦好像是對的。

以下是一些我覺得 Nic 需要加強部分:

  1. 還沒想清楚就開始寫 code:e.g. 最開始的 visited 用 array 實作意義不明。
  2. 還沒想清楚就先講話:有個很經典的是在泰瑞問到如何加快速度的時候,膝跳反射般提了非同步,但沒想到一開始的需求是要照順序 Traverse;非同步就不會照順序啦!
  3. 趨近於零的基礎技術能力:應該是整場面試中我覺得最可惜的地方,這裡並不是曬優越或酸,但在系統夠巨大或問題夠艱難時,這能體現出最基本的「抽象化能力」;如果完全沒有的話,組織的技術天花板將會非常的低。平心而論,泰瑞給的問題幾乎沒有考到需要刷題或練習才能懂的演算法分析,只要有「基礎的抽象化能力」就應該能把答案寫出來。

5. 技術和 Soft skills 的抉擇

Soft skills 泛指溝通以及任何跟技術無關的職場技能

承上一部份,如果是純管理職,並不需要在意複雜的「技術難題」,但我會覺得⋯⋯怎麼不從讀 MBA 的人去找這些優秀的經理人就好,需要特別有一個「技術總監」。

不管是技術管理職或是高階技術職位,技術和 Soft skills 都是必須的,在上面的人不是只有處理人的問題,很多時候組織的問題來源是系統,而抽象化的能力在此就至關重要;當你在為下面那些兢兢業業的寫程式的工程師決定大方向時,你決斷的考量是硬技術、軟技能搭配上商業需求的綜合,缺了一條腿通常都會導致悲劇。

總而言之,這兩者並不需要選一個,當要解決的問題越來越大時,這兩個面向的能力是相輔相成的;你和其他職能間的界線會變得非常的模糊,但一個好的「資深」人員會懂得如何在這多種角色間切換,而不是摒棄掉任何一個。

6. 總結:你該買這個課程嗎?

視情況理由會不同,但我的答案統一是:「也許你可以買,但你可能不需要,因為很多最好的東西都是免費或便宜的」

我分享的都是英文版,但大多都有中文版或讀書心得,書不是比讀得多,而是要用得上,相信你讀完這幾本後就會像崎玉老師一樣強大

如果你認為自己有著過硬的技術實力但老是碰壁:也許你該買,但買之前可能最先做的是敞開心胸看看哪裡出了問題才讓自己這麼懷才不遇;我推薦你讀:

  1. The Effective Engineer — How to Maximize Your Impact 甚至還有免費的部落格可以看,非常佛心

如果你是想成為優秀的資深技術人員或管理職,也許你該買;但我想先推薦你這兩本書:Staff Engineer, The Making of a Manager: What to Do When Everyone Looks to You

如果你只是想轉換跑道當軟體工程師領高薪,也許你未來可以買,但現在除了大裁員之外,你要先有基礎的技術能力才能談 Soft skills,但也不要急著花錢去上課或報名奇怪的訓練營,這裡是為什麼:

  1. 為什麼你可能不需要「寫程式」補習班? | by Denny | The Bayesian Trap | Medium

很多好東西都是免費的,就像這篇文章一樣。(自己講)
分享這個也是希望當我們越來越多人在組織裡向上前進時,不要把成為管理階層當作升職,而是轉換跑道並深化了不一樣的技能;本質上,我們都仍然是 engineering 啊!
只是間接和直接創造的分別而已,希望大家在追求職涯成長路上不要捨棄了這一部份,我仍然相信一個好的高階職位可能不會有最強的實作能力,但抽象化以及化繁為簡的能力絕對是你最珍貴的資產,不要因為覺得自己等級太高就把自己真的當成經理人了。

如果你這些話題有興趣的話,我會非常非常不定期地在粉絲專頁及這個部落格上分享,歡迎追蹤:The Bayesian Trap | Facebook

題外話是這篇是我棒賽的時候在廁所靈光乍現使用 ChatGPT 順便打完的,想說不蹭白不蹭,然後又想到每次都會在廁所有靈感這件事情可能可以做一個 ShitGPT。

Appendix

  1. 誠徵資深實習生的影片:https://youtu.be/BkszA-MvjXA

--

--