你還想當軟體工程師啊(二)是不是不夠在乎技術了

Denny
The Bayesian Trap
Published in
9 min readOct 17, 2021

--

TL;DR 越來越少分享自己在關注的「技術」,並不是追求工程卓越不再重要,而是隨經歷累積,這只是職涯中的一部分,更重要的是找到自己想成為怎樣的軟體工程師

Photo by Karl Pawlowicz on Unsplash

目錄

  • 到底該去大公司還是小公司文章連結
  • ✅ 是不是不夠在乎技術了?👈 你在這裡
  • 你能同時 senior 又 open-minded 嗎?(文章連結
  • 🚧 最值得投資時間的事是什麼?
  • 🚧 寫程式能寫到老嗎?

技術:泛指任何跟特定電腦科學、程式語言、框架⋯⋯等有關的知識。

這篇文章包含了:

  • 一段過去的小故事
  • 我要成為「技術霸權」時期
  • 問題或兩難(Problem or Dilemma)
  • 薪水的迷思
  • 找到自己的使用方法
  • 管理職與大齡工程師
  • 結論

一段過去的小故事

在五年前剛下定決心要寫程式的時候,因為想學 JavaScript,買了一本 O’reilly 的 HeadFirst Java(?

剛開始沒多久就卡關,在上網發問後還因為寄信問問題被兇了一波,這是當初在 ptt 發問的那篇文章:https://www.pttweb.cc/bbs/java/M.1384920117.A.55E

回頭看之後,儘管這問題有點可笑,但這就是每次進入未知領域學習時要經歷的事情。

新手問題乍看都很傻,答案就在 google 搜尋結果第一頁第一個的那種,但新手最大的障礙不是找資料,也不是問問題,而是連發生什麼事都不知道,我把這個情況稱為「新手困境」。

經歷多次「新手困境」之後,我有兩個很大的體悟:

  • 沒有遇到困難就是進入舒適圈:如果工作上再也遇不到新手困境,可能不是自己跟琦玉老師一樣不小心變太強,而是手上的挑戰太簡單
  • 「新手困境」跟資歷無關:當發現同事陷入新手困境時,不要覺得「這麼簡單還要問」、「為什麼不看文件呢」,要想的是該怎麽讓他從中解套;至於對方是否能勝任這份工作,這是面試時要想的,不是一起工作時要煩惱的

我要成為「技術霸權」時期

在 ptt 發文完後有一度覺得自己可能不是這塊料,為了完全對成為軟體工程師這件事死心,我想把所有東西都試過再放棄;所幸網路上有許多基礎的課程:演算法、OS、計算機結構,各種設計模式以及軟體工程的東西。

簡單說就是表面閃電學習,實則囫圇吞棗。

為什麼會選擇這個路線,其實社群的影響很大。

台灣的技術社群,對於一個新手來說意義非凡,因為不是每個人都足夠幸運能學好英文,而且中文是在台灣最容易取得跟消化的資訊來源,所以讓我有點囉唆地在這裡在感謝一次所有為繁體中文貢獻的人。
但是,社群裡的人有一種很高的同質性:

  • 對技術狂熱:以前翻譯過一篇文章,可以更好解釋這現象《喜鵲工程師
  • 喜歡強調「基礎」:如底層系統知識,儘管大部分人都是在做「產品」而非處理系統問題

以上兩點都沒問題,但會不知不覺讓你認為:只有這樣才能成為一流的軟體工程師⋯⋯一生懸命把技術點滿、能多底層走多底層、去設想那些平常不會遇到的巨大技術問題。

在最初幾個月,這樣的心態是一件好事,雖然明白自己沒有辦法像本科系,或是五歲抬頭六歲寫 code 的人一樣基礎深厚,但終於掌握了溝通的通訊協定(Protocol)。

這個時期的我,也喜歡一直用 CS 的 Reference 來顯得自己很「geek」。

追根究底除了感到熱情之外,也是害怕自己被當成異類;然而這也是在多年後才敢承認的事情。

所謂「技術霸權」是我和朋友在聊天時蹦出的名詞
軟體工程師很像是人跟電腦的通譯,像斯卡羅裡面的阿水一樣(還沒看的人可以看前兩集就好);你只要跟其他人說這個技術上做不到然後再堆砌大量技術詞彙,大家就只會摸摸鼻子嫌你溝通能力爛但拿你沒辦法,這個就是技術霸權(?)

問題或兩難(Problem or Dilemma)

在職涯上遇到各種「兩難」後,讓我重新評估了「技術就是一切」的這個想法。

  • 問題(problem):通常會有一個解法,你只需要想出來就沒事情
  • 兩難(dilemma):沒有完美解法,只能權衡內做出你認為最好的決定

有很長一段時間,我都以為只要技術夠強就能夠想出一個超屌解法,把「兩難」變成「問題」,可惜我沒有無限的時間精力,智商更是有限。

舉例來說,「言論自由」看似有嚴謹定義,但如果去問每一個人,都會有不一樣的答案,當你做出一個讓用戶有辦法發表評論的平台時,該怎麼定義怎樣叫「言論自由」,這就是目前許多平台的「兩難」,而不是「問題」。

聽起來好像解決兩難比較屌,可惜的是如果總是在思考「兩難」就會什麼事情都做不到,總是解決「問題」就會失去大局的方向。這些都不是單純掌握「基礎」就有辦法解決的。

「技術就是一切」不是問題,但只成立在:

  • 你的技術超凡入聖
  • 你對其他事物沒有興趣

很不幸的是我最終發現自己不是這樣的人,但有很長一段時間不願意承認這件事情,因爲這樣不就顯得我不夠在乎技術,也像在昭告天下我終究沒辦法成為一個「好」的軟體工程師嗎?

薪水的迷思

什麼樣叫做一個「好」的軟體工程師,最膚淺的評估能力方式就是看錢。「技術就是一切」的另一層含義就是:「只要能解決難得要死的問題,薪水就會高得不像話」
任何有工作經驗的人都會知道這假設不完全正確,最主要是因為下面兩點:

  • 難度是相對概念:很多人擅長 system programming 但對 UI 很頭痛,反之亦然
  • 投資報酬率:付出大量時間學習,不一定會有回報;如果你是寫 web UI 的人,你把分散式系統的知識登峰造極時,薪水可能還是平步但沒有青雲

把自己手上的牌打得最獨一無二才是重點,薪水高的工作很多時候不一定有道理,但花了很多時間卻沒有回報一定有原因。

我認為要往「好」的方向前進,首先是要弄清楚自己的使用方法。

找到自己的使用方法

要怎麼知道自己前進的方向是對的,首先是要設定目標,對我來說兩個最簡單的考慮方向就是薪水以及快樂。

  • 錢。如同前面說的,它很無聊,但就是一個最好拿來衡量的指標
  • 快樂。對我來說這很重要,因為如果你做這件事開心,你可能連睡覺都在進步,這樣到底要怎麼輸嘛?

在考慮一件事對自己的職涯重不重要時,我都會提出這兩個大哉問:

  • 錢有比較多嗎?
  • 啊你有爽嗎?

那用這兩個面向來看待「鑽研技術」這件事,它確實不能為我帶來更高的薪水和快樂,坦白說意識到這件事時我很失望。

但如果退一步看待「鑽研技術」,除了技術之外,真正成長並且能夠帶到任何不同技術領域的是:

  • 不害怕學習新東西的心態
  • 短時間內上手任何技術的技能

認可自身在這些面向成長多少,能更健康地在這個產業活下去,而不是永遠擔心受怕地在追逐所謂「典範轉移」。當你不再害怕時,也就更好看出哪些人只是來販賣焦慮;確定自己穩定又快樂地成長之後,自然就放下了「自己還不夠技術」的執著⋯⋯反正如果連睡覺都在進步,還真的不知道有什麼好擔心的。(誇飾啦誇飾不是真的在睡覺)

很喜歡在 Principles 這本書裡面提到幫隊友寫棒球卡的概念,讓隊友知道你的強項在哪、該怎麼使用你,而退一步寫下對自己的想法也能夠讓你更好認識自己,畢竟你就是你人生中唯一不離不棄的隊友。

以下是我認為目前擅長或喜歡的事情:

  • 對於產品大方向的想法、策略
  • 不錯的溝通表達能力
  • 放到哪裡都可以上手的學習速度
  • 不管難度怎樣都能把東西兜出來的靈活度

我不擅長或討厭的是:

  • 解需要通靈的 bug,在解開之後我通常不會得到太大的滿足,只會覺得過程痛苦而已
  • 對於細節、美感的處理

這也是我會跟同事和主管分享的使用方法,在幾年內應該不會改變,就先寫在這裡了。

管理職與大齡工程師

儘管工作上的不完全放在技術上,但還是不代表就要變成管理職,因為轉到管理職是轉換職涯跑道而不是升職。

工作久了會發現,管理職和資深工程師的界限其實不明顯,因為夠資深後,還是得處理很多「人」的事情:像是幫助一些比較少工作經驗的人找方向之類的。

許多人好像會把「管理職」當成年紀到了之後不得不的選擇,雖然這會是另一篇文章的主題,但我認為這是個值得說一說的誤區。

在這個很年輕的產業裡面,「大齡」的定義可能是「四十歲」。

學習速度從來都不是重點,工作夠久的人都容易看出「pattern」,所以理論上工作效率應該會越來越高,而不是有些人認為的「學東西變慢」。(參考:Software engineer and hitting 40, how to set up for another 20 years of coding

年紀到了以後,要擔心的是身體經年累月的折磨(久坐、長時間盯著螢幕、熬夜、缺乏運動以及垃圾食物造成的後遺症),還有家庭的變化(照顧老人、伴侶或小孩),所以必須將很多東西看得比工作優先。

也就是說,年紀和轉換職涯跑道無關,因為當主管後,並不會讓前面這些事情變輕鬆。

真正淘汰掉大齡技術職的是對這個工作不切實際的想像,像是:

  • 不眠不休地追逐技術、參與黑客松
  • 不計代價地採納新技術

以及任何永遠把工作排在第一順位的事情。

同事中屬於「大齡」區間的工程師,做事反而比「年輕人」更快,因為他們更知道什麼要優先解決,以及該怎麼推動改變;雖然他們也更早下班、更常請假,但只要產出的結果是好的,「是否把其他事排得比工作更優先」就不是我們該在乎的。

既然大齡工程師看起來可行,目前想法是只要我還享受寫程式勝過幫助他人時,就算我的「牌組」看起來很適合,也不會考慮管理職。
回頭看都是簡單的,難的是對未來的準備,但「老了」以後的工作規劃我想放在這系列的最後一篇再說,這裡就先點到為止。

結論

總而言之,「技術」並沒有因此而變得不重要,只是它變成牌組中的一個選項,該怎麼搭配你的技術能力來玩好這場遊戲才是重點。

很多人喜歡在吵「非本科」的問題,但這個工作之所以有趣就是因為可以遇到形形色色的人,這也代表著你能夠成為你想當的那種「軟體工程師」,而不是參考任何一種模板。

當路越走越遠以後,越會發現每個人的技能組都很特殊,沒有什麼是一定的;跟其他人或主流的想像不一樣,你仍然可以是一個很讚的軟體工程師。

不管其他人怎麼想,反正我是覺得很讚,我很讚,希望有把文章看到最後的你也是👍

--

--