[心得] 工程師年齡歧視的真象

作者: HYL (@EVERYWHERE)   2020-09-23 05:58:47
原文刊於:https://elderengineer.github.io/book-sillicon-valley/52.html
# 工程師年齡歧視的真象
大齡工程師面對的技術挑戰,是我最近碰上的一堵高牆,真的等撞上後才知道,並不
是那麼容易跨過,且願意去跨過的。
以我為例,我的工程師生涯是隨著 Java 生態系一起成長的,十五年來 Java 生態系
的東西我大多有碰過,十年來同時還用了 Scala 生態系的一些東西。但是去年換到一
間五歲左右的軟體公司,公司用的技術是 Scala, GRPC, Akka, Slick, Sangria,
Json4s, Consul, Envoy, Python, Airflow 等,我就有點適應不良了。
原因是,我本來就有一整套運作良好的軟體架構跟函式庫在我腦袋裡面,這些函式庫
經過 Java 生態系十多年來的驗證,大大小小的功能都有支援了,然後 Bug 也在十多
年來被清除乾淨,有許多的最佳實例(best practice)可以參考,不用重新摸索,
可以很快的變即戰力。
像是 Json4s 完完全全比不上 Jackson-Json 這套函式庫,但是因為這是 Scala 原
生的函式庫,所以得到我們團隊的採用。其他更不用說 IoC 的架構,有 Spring 或
Guice 的架框輔著,可以更有效率的使用,但是我的前團隊寧願重新造輪子,用
cake pattern 加上 IoC 的觀念,來把軟體元件串接起來。
我在這個新團隊中,被迫要把熟悉的架構,一個個都抽換掉,重新再摸索一個不同的
函式庫,看他怎用不同的手法解決同一個問題。對我來說,既使一個新的函式庫有比
舊的函式庫好上 10% 好了,對我個人的總生產力只有增加 1% ,若是扣掉學習的時
間,算上機會成本,對我反而是沒有幫助的,同樣的時間,我可以花在學習新的領域
上面,擴展我的知識範圍。
在這段時間,我體會到「技術是熟的好」,不管是什麼技術,用上手就好,反正到最
後分高下的,大多是對工具的熟悉程度最重要。**大多數人是把二十多歲前接觸的世
界當常態,然後用一輩子在這個時間凍結的世界內,最佳化自己的生活方式。**
# 知識探索的過程
Matt Might用了幾個簡而易瞭的圖片清楚的形容了博士的工作到底是在做什麼。
http://matt.might.net/articles/phd-school-in-pictures/
* 把人類的所有知識想像是一個大圓
* 當你小學必業後,你有一些理解
* 高中之後,你又多學了一些
* 到了大學,你開始學習專業領域
* 到了碩士,你又多精深了一些
* 到了博士班,開始讀論文後,開始達到某個領域的最前線
* 放大
* 經過幾年的努力,一直推進
* 總算,某一天,你有個小突破
* 這個就叫博士學位
* 但是別太自滿,從巨觀看來是這樣的
# 新程式語言
為什麼過去 20 年來,我們有這麼多的新函式庫新語言興起,然後熱門了幾年後,
最後大多數公司還是回歸 Java 生態系,為什麼軟體產業要花這麼多的心力,重造
輪子,探索不一樣的可能呢?
因為沒有了這些從新造輪子的知識探索過程,人類的科技不會進步,所以軟體業在
可見的將來,都會一直發明新的語言,用不同的實作方式,來解決同一樣的問題。
在過去的二十年間,有許多的語言興起,如 PHP、Java、C#、Python、Ruby、Java
Script / Node.JS、Typescript、Coffee Script、Groovy、Kotlin、Clojure、Go
及 Rust 等語言,各有優劣,有些變成主流語言,有些在風頭過了之後,就漸漸平
淡下去。
如果你是軟體行業的新人,你是否該追求新技術,還是要學習穩定好用的技術呢?
這影響到了你未來的職場生涯。
像是矽谷的大公司,一定是選用最新最熱門的技術,因為最新最熱門的技術,才能
吸引到源源不決的新鮮人加入公司,新鮮人才是公司的未來,需要這些勞動力來推
動公司的業務。如果一間公司選用了非熱門技術,那麼使用者的總量少,挑選到一
流人材的機會更就少了,而且這有可能變成公司成長的限制,無法找到足夠的人材
來推動公司的新業務。
而對於新鮮人來說,選用新興的語言技術,有除了市場需求以外的好處;羅馬不是
一天造成,軟體的複雜度也不是一天造成的;我常聽到有人報怨 Spring 太過於複
雜,但是對我來說 Spring IoC 是很精巧的,只是因為大環境的改變, Spring IoC
從一開始的使用 XML 來設定,演化到使用自己的 Annotation 來設定,最後是到
Java 標準化的 JSR-330 來使用,對於新進用戶,只需要學習其中的一種就好。
我能夠理解這些,是因為我跟著這個框架一起成長的,理解它在過去因為什麼理由
而做出變更,跟什麼歷史遺留做出妥協,為什麼一個功能會設計成這樣。也因此我
建議新鮮人,要學習市場上新興熱門的技術。你可以從頭,當一個框架很精巧時,
把它的程式碼讀完,當它每一次新增一個功能時,想想,如果是你會怎麼做,為什
麼官方會做出這些取捨。
# 技術是熟的好
但是在追求新技術外,你也要考量到,現在多數的新技術,是設計給大公司用的,
除非你要一直幫超大型網路公司上班,你學習的技術往往是過度複雜,甚至是不合
用的。
例如現在許多的開源專案,使用 Protocol Buffers & GRPC 來做序列化(Serialization)
,把記憶體中的狀態寫到磁碟上或透過網路傳送到遠方,但是 PB 的許多設計是
為了減少通訊時使用的空間的,像是 PB 會省略掉欄位的名稱,用 index 來取代
,在內容上也會用一些方法壓縮空間。這些做法對谷歌來說都是合理的,因為谷哥
的資料量太大,如果可以省下百分之一的空間,那麼就可以幫公司省下數千萬數億
美金的網路傳輸費用及儲存費用,但是大多數公司不是谷歌不是臉書,你的公司的
網路流量連谷歌的萬分之一都不到,不需要去做這些最佳化,而且有修改是無法向
前相容的,是要靠人腦去做的調整的,例如把一個欄位從 int 改成 long ,等你
的資料有 1TB 時,再來考慮最佳化吧,程式設計師的工資是很貴的。
我是建議大多數人用 json 來做 RPC protocol ,用 json 來做資料庫內的 blob
,用 json 來做 hadoop / big data 的格式, json 最大的好處是好讀,大家可
以用人眼就可以讀他的內容,不需要靠其它程式來轉換,而且 json 的支援很廣
,不管是什麼大數據框架都支援 json 。我上一份工作,有一部份的時間,因為
不同系統吃不同的格式,就花在 json / protobuf / parsec 的資料格式轉換上面。
扯遠了,如果你學習一套運作良好的全棧 full-stack 框架,例如像是 Rails ,
花個三年時間把他裡裡外外都摸個透徹,未來要做一個新產品,那麼在技術方面
的時程估算,將會較簡單就估算出一個時程表,而且因為你對細節清楚,就更不
容易因為細節出包,而影響到專案的時程。
至於對於新鮮人該走那一條路,是要追求新科技,還是摸熟某一套技術,我在下
一章會有討論。
作者: sorryla (Mr.東)   2020-09-23 06:21:00
最熱門的技術不一定是最新吧,大公司我看到的大多用成熟許久的東西
作者: drajan (EasoN)   2020-09-23 06:35:00
每一個技術跟protocol都有pros & cons, 好的工程師不會說XXX比較好,而是不同的constraint的情境下一定有一些比較突出的選項。再來大公司明明都是用成熟的科技居多,你有看到哪間大公司用Rust跟Kotlin當主力語言的讓我知道一下
作者: alihue (wanda wanda)   2020-09-23 07:06:00
推推
作者: zzshcool (台灣人)   2020-09-23 07:09:00
作者: laicher (laicher)   2020-09-23 07:59:00
敢問你幾歲 工作多久了另外~全部都回歸到JAVA我覺得言過其實了
作者: superpandal   2020-09-23 08:13:00
java就難用的技術 當你想實現特別功能的時候 特別
作者: alihue (wanda wanda)   2020-09-23 08:13:00
Java 在生態系的部分是很穩又廣,大型系統的架構與效能都還不錯。不過前幾年的 oracle 爭議,還有進步緩慢的語言特性,會讓其他語言有追上的空間
作者: superpandal   2020-09-23 08:14:00
難用純用框架倒是還可以 但想追求好點的時候特別難受
作者: dream1124 (全新開始)   2020-09-23 08:19:00
作者: NDark (溺於黑暗)   2020-09-23 08:26:00
json 跟 PB 那段我都要哭了。
作者: dream1124 (全新開始)   2020-09-23 08:27:00
要用成熟的工具去發展不成熟的事情啦否則根本沒辦法專注在自己的問題上面,都在跟工具耗
作者: NDark (溺於黑暗)   2020-09-23 08:28:00
曾在一案用json的原因就是 開發過程規格變動大 json好維護結果被某工程師也是用效能的理由要求寫好的整套換成 pb我當時建議先換幾個(不要全改)避免重構 影響開發時程結果 該員無法實現自己的想法就森77離職了。
作者: OriginStar   2020-09-23 08:45:00
從熟悉的環境換到不熟悉的環境本來就要重新來過和年齡歧視有什麼關係,而且換新工作,面試時就應該知道會用哪些新技術,自己是否要先熟悉之類的重點是態度應該要reset吧,用老鳥心態來看可能反而會被認為難搞
作者: yfr   2020-09-23 08:59:00
標題與內文不符,內文講的很多點是不錯,可是工作是自己選的看起來比較像您不適應新團隊在抒發吧,跟年齡歧視好像...
作者: enthos (影斯作業系統)   2020-09-23 08:59:00
CDDA(Cataclysm: Dark Days Ahead)遊戲存檔用json,遊戲data目錄約51M。不使用SSD時很慢。
作者: DCTmaybe (竹竹人)   2020-09-23 09:00:00
我也覺得不太符,好像最後少了一兩段把他們關聯起來
作者: liddle (Guderian)   2020-09-23 09:15:00
一樣也是大齡工程師,超過十七年的程式生涯。完全不認同你的想法。因為每一個新語言新框架都解決之前語言或框架的痛點。
作者: yfr   2020-09-23 09:16:00
只能勉勵自己隨著年資培養硬實力之外也要培養軟實力吶
作者: mimi9126 (煩呀)   2020-09-23 09:25:00
“即時一個新的函式庫...好上10%好了...” 這段是不是代表,一個函式庫即使比較好,也會因為原po不熟所以抗拒?反而新鮮人因為什麼都不熟,不會有這種抗拒,也因此不用特別去說服新鮮人,最後就演變年齡歧視了...
作者: jack0204 (Jarbar王朝)   2020-09-23 09:42:00
我也同意樓上說的,好10%代表公司產品更有競爭力了,應該要支持才對,怎麼會用對自己只有1%的幫助就不想學了?技術是熟的好,這不就是不想接觸其他工具/語言的說法?每個技術最好都接觸一點,了解優勢跟劣勢
作者: YukiTW (ゆうき)   2020-09-23 10:02:00
樓上,這很好懂,原文是寫新領域,那大概就是指情願把時間拿去學投資理財或養生保健,也不想花時間學新的框架吧
作者: hegemon (hegemon)   2020-09-23 10:31:00
說Java難用的真的建議不要再碰軟體開發了....
作者: vikamirror   2020-09-23 11:08:00
原po的意思應該不是學不學新框架的問題 而是框架要花時間學 新公司商業邏輯也要花時間熟悉 公司要做出產品重要 還是學習用新框架造輪子重要 時間不夠的兩難台灣80%的公司軟體服務流量不大 使用人數不多 如果新的框架語言改善10% 公司沒有因此減少10%成本/多賺10%站在公司角度就不必要 這只是站在公司角度 但工程師應有自己的技能樹規劃
作者: KY1998 (HAN)   2020-09-23 11:35:00
早點財富自由比較實在,工作會比較沒壓力
作者: ddoll288 (風兒卿卿)   2020-09-23 11:36:00
現在語言/工具異動幅度很大,大概只有3年內還有在使用的才有參考意義
作者: Agde (Agde)   2020-09-23 11:41:00
標題的「真象」是什麼意思?是「真相」嗎?
作者: fantasychese (林阿宅)   2020-09-23 11:44:00
看起來真的跟年齡歧視沒關係,就只是原PO完全只會站在自己的角度思考而已。
作者: brianhsu (墳墓)   2020-09-23 11:47:00
看不出來和年齡歧視有什麼關係+1
作者: jej (晃奶大馬桶)   2020-09-23 12:19:00
唉 呂方的歌 老屁股有一段歌詞 人說屁股總是老的好 共享之
作者: dreamnook (亞龍)   2020-09-23 12:19:00
感覺其實是老惹不想再學東西惹這樣是不是找個養老村之類的
作者: lance70176 (十三夜)   2020-09-23 12:36:00
標題下的有點不太好吧 之前寫的還好一些
作者: jlhc (H)   2020-09-23 12:39:00
同標題切入點不太好, 但內文的json vs PB 真的是很好的舉例寫prototype跟 MVP的時候沒有一定要用PB吧...
作者: mimi9126 (煩呀)   2020-09-23 12:46:00
...我被某樓建議不要再碰軟體開發了,哭哭
作者: myth6818 (DDcoder)   2020-09-23 12:53:00
整篇就是老人的抱怨文已經待了10幾年難道不知道軟體業唯一不變的就是變嗎你今天找工作不找一個java base的公司,跑去新創抱怨別人怎麼不用java,這才是重點吧......一堆公司都還在用ja
作者: smalldra (ha。)   2020-09-23 13:04:00
我也覺得反過來,學的快才是強。
作者: MaxGDAM (波多野台妹)   2020-09-23 13:08:00
感覺就是在抱怨
作者: CodingDuck (框框)   2020-09-23 13:12:00
真抱歉,我們純軟公司一千多人追求效能走 GO/C++, 追求快速走 Python,還真沒有什麼回歸 Java 的跡象。還有 pb 的好處不只傳輸量,在版本的控制及跨語言的通用性也是優於 json,這是有規模有計畫的開發才會看到的區別。
作者: myth6818 (DDcoder)   2020-09-23 13:15:00
我們公司完全跟樓上一樣哈哈
作者: CodingDuck (框框)   2020-09-23 13:15:00
個人感覺您的文章分析的面「象」不夠齊全,錯別字也有點妨礙閱讀,非「報」怨,但個人建議修正一下。
作者: csieflyman (風之驕子)   2020-09-23 13:25:00
寫 java 應該轉用 kotlin 怎麼會跟 scala 比較 所以你找 scala 的工作當然很痛苦 公司內原本就會寫 scala的人就沒這問題
作者: justaID (快樂崇拜)   2020-09-23 13:28:00
覺得有些論點可以探討,但說「最後大多數公司還是回歸 Java 生態系」太武斷了
作者: csieflyman (風之驕子)   2020-09-23 13:31:00
使用 kotlin 的人數一直在成長 現在我公司新專案也從java 轉移過去了 現在2020年沒有 java 工程師會選擇轉 scala 的
作者: XJHYJia (科舉重人)   2020-09-23 13:40:00
大公司一定是成熟的技術,不然出問題很麻煩,學習新技術的部分,就是成長型思維和固定型思維的差異
作者: longlyeagle (長鷹寶寶實驗室)   2020-09-23 13:50:00
Scala那麼可愛 請不要歧視他
作者: honochung (http://lol.moa.tw)   2020-09-23 14:27:00
groovy躲在旁邊哭
作者: iiiii (I take 5)   2020-09-23 14:34:00
新技術包括新語言,還有新的算法,新的平台等等,太多能追了,不追新語言,追新算法或是新平台,轉眼又五年
作者: eva19452002 (^^)   2020-09-23 14:34:00
我覺得解決問題的能力應該比用什麼語言來得重要吧,語言或平台或框架什麼的不就只是工具而已嗎?
作者: csfgsj (切割對半)   2020-09-23 15:15:00
時代的洪流,只能說可憐,想想修鞋匠,想想那些被時代淘汰的行業
作者: dong531 (貓王)   2020-09-23 15:26:00
不懂跟年齡有什麼關係,程式本來就是一直學
作者: Louis5213 (slash5213)   2020-09-23 15:50:00
推eva1945,語言框架只是工具
作者: guanting886 (Guanting)   2020-09-23 16:21:00
就舒適圈待久了 遇到新環境不適應 結案。
作者: jobintan (Robin Artemstein)   2020-09-23 16:31:00
若工程師無法對新的技術或事務感到好奇想去玩看看的話,那估計是老了,會有被取代掉的危機呀!
作者: wisehuang (認真點!)   2020-09-23 16:38:00
工程師重點應該是解決問題,語言是工具語言很重要在於什麼情境下用什麼合適的語言解決問題
作者: noahleft (NoahLeft)   2020-09-23 17:40:00
不用盲目追求新技術,但是要持續了解新技術的目的pros.cons.serialization 蠻有感的。每個技術要處理的問題不同
作者: aas5566 (aas5566)   2020-09-23 17:46:00
自己不想學新的怪誰 這行業本來就會一直有新東西
作者: rodion (r-kan/reminder)   2020-09-23 17:58:00
沒看見歧視 只看見一個墨守成規不求進步的範例
作者: abraxas (Abr.)   2020-09-23 19:08:00
故步自封
作者: brianhsu (墳墓)   2020-09-23 19:15:00
Groovy Spock 拿來寫 Java Code 的單元測試超棒的,比 ScalaTest 好用,覺得是用過最方便順手的 Test Framework
作者: chi972121 (沈默之語)   2020-09-23 19:20:00
作者: wulouise (在線上!=在電腦前)   2020-09-23 19:30:00
所以年齡歧視就是歧視老了不想學的人...
作者: unmolk (UJ)   2020-09-23 20:11:00
有點文不對題 但認真寫還是給推
作者: superpandal   2020-09-23 20:29:00
能用自己積累的東西當然是好 但是說到底也不可能完全符合需求 尤其是對java而言 稍微動態就要一些前置作業 如果還有時間壓力那很痛苦 有一定話語權當然可以如此 沒話語權就會發類似這篇java 難用的點在於LIB不同框架粒度不同 銜接起來很麻煩 底層也是同樣狀況然後動態方面又特別囉唆
作者: Murasaki0110 (麥當勞歡樂送)   2020-09-23 23:04:00
這篇完美展現什麼樣的人會被淘汰 原因絕不是年齡
作者: yyc1217 (somo)   2020-09-23 23:13:00
覺得是下標的問題XD以前有"研討會開發導向"一詞 就是聽別人說有什麼新技術也不管三七二十一就要轉換過去 不換就是跟不上時代但新技術要成氣候是需要時間和認同的前端大爆發的時代更是每隔一陣子就有新框架提出現在的感想是 評估該技術的能力比掌握技術的數量重要
作者: NewSpec (新規格)   2020-09-23 23:21:00
看你就只剩 在矽谷 這三個字能吹了
作者: x246libra (楓)   2020-09-23 23:54:00
不是最常說,語言不重要,工具不重要?
作者: CoNsTaR ((const *))   2020-09-24 04:46:00
Java 唯一優點:可以用 0% 腦容量無止盡寫糞 code
作者: internetms52 (Oaide)   2020-09-24 08:31:00
內容有點文不對體,要不要重新編輯一下
作者: bill1216 (sun day)   2020-09-24 08:35:00
好文推 慢慢消化
作者: dophin332 (...)   2020-09-24 09:49:00
文中不是寫他每天都在團隊弄新東西嗎..哪來不學新的
作者: aids61517 (奇歐巴肯)   2020-09-24 10:01:00
茪W,文中不是也在抱怨說就算新東西好上10%,對他總生產力只增加1%,扣掉學習成本還不划算嗎我第一句的亂碼是"樓上",抱歉
作者: kingofsdtw (不能閒下來!!)   2020-09-24 10:21:00
修過opensource你就知道框架沒如此夢幻
作者: WashFreeID (免洗)   2020-09-24 12:12:00
推 語言工具本來就很重要 應用軟體的架構這麼複雜選不熟悉或不成熟的語言工具 很容易踩雷 可能後續開發徵才都比較困難
作者: snow0112 (小雪)   2020-09-24 16:07:00
要用什麼就去學就好了阿 = =
作者: mdkn35 (53nkdm)   2020-09-24 16:41:00
oracle表示開心
作者: chchan1111 (123)   2020-09-24 17:32:00
結論:不想離開舒適圈
作者: kvjo (同名專輯)   2020-09-24 19:27:00
我覺得 等大家都有年齡 大概 不會 這樣推文人生是有限的 把所有精力都拿來不停地學東西 不見得 人人愛
作者: aids61517 (奇歐巴肯)   2020-09-24 20:22:00
不一定人人愛啊,但是至少不要把自己不想學推到工程師的年齡歧視,就只是技能樹不符合這公司而已,應該找更符合自己的公司才對
作者: guanting886 (Guanting)   2020-09-25 00:45:00
說真的 跟年齡無關 過40也不會這樣想 你那個team用著你看不順眼的作法兜系統 我覺得可以反過來思考為什麼你這麼經驗豐富的老司機 要降級去這種團隊勉強自己原因?無權帶領上面還有一個比你大?團隊程度不好 只知道這種作法反正各種狀況都有但你今天是在一個團隊 大家程度不一樣 本來就會有你看不慣的作法專案可能還會有技術債、架構問題之類的包袱你本來就要稍微放棄一些個人的意見 中你還是要先把目標完成說真的 程度好 經驗多 看什麼都看不慣 反正你可以用你的經驗找出很多問題但作為一個資深工程師 這時候你就可以發揮你的價值如果不行 早點走一走卡實在(媽的ios14打字一直lag至於為什麼有人會重造輪子 因為隨著需求跟使用環境改變會有很多新問題產生你社群也未必會立即解決 因為主力貢獻者也有他們開發主線要走 甚至有些東西改版後產生更多的問題要嘛你自己硬幹 要嘛另外找方案當然你也可以選擇等待趨勢變化或特定你關注的技術發展到一個程度等待該語言、框架開始收割開發成果
作者: wildli0422 (wild)   2020-09-25 02:18:00
不太認同你的認同,用pb跟json的差別就像是rdbms與mongo的爭論一樣阿,pb在計劃性資料有優勢,JSON可以多變,要更改pb本來就是要付出一定的成本,至於新的技術付出學習的時間成本去增加程式的效能不就是工程師的價值所在嗎?
作者: crazylunar (橘色光束)   2020-09-25 05:35:00
在大量有非同步的需求上,你不會想用Java的,另外重新造輪子這件事,如果公司有給予足夠時間,反而很不賴吧?造輪過程中也能重新去看前人怎實現,一些觀念和奇淫巧技又能有更深入的體會
作者: jyunwei (jyunwei)   2020-09-25 11:06:00
簡單來說,你希望自己的沉沒時間成本能兌現,那你應該去找只用傳統Java的團隊,而不是希冀還沒投入時間成本或不介意多學點新東西的人,為了你而降低10%效率我是指前半段的部分…
作者: GoGoJoe (gogojoe)   2020-09-25 17:14:00
Java很強,讓原本無法成coder的人成為coder,但Java興起的那幾年也是Coder薪資成長停滯的年代,供需關係。
作者: ChoDino (Dino)   2020-09-25 21:22:00
文不對題嗎?他寫得就是為什麼會被歧視的真相阿
作者: superpandal   2020-09-25 23:25:00
最佳的兌現方式就是開公司 應用在別人事業上虧了都是吞得下去真的是勇者沒有高薪 前途保證都是假的
作者: bitcch (必可取)   2020-09-26 02:46:00
你後面建議使用json的時機真的會導致世界毀滅…
作者: geniusturtle (小龜)   2020-09-26 08:35:00
為什麼我覺得這篇看起來就是不想學新東西?是我還不夠老嗎?
作者: lukelove (午睡)   2020-09-26 20:01:00
確實展現了為什麼會被歧視
作者: snow0112 (小雪)   2020-09-27 04:03:00
你經驗這麼豐富沒道理適應不良吧...
作者: ekids1234 (∵:☆星痕╭☆)   2020-09-28 10:26:00
真相
作者: shooter555 (shooter)   2020-09-29 09:26:00
讓原本無法成為coder的人成為coder我認為是javascript
作者: kingofsdtw (不能閒下來!!)   2020-10-05 16:59:00
時間,空間,成本記憶體邊便宜自然有記憶體揮霍

Links booklink

Contact Us: admin [ a t ] ucptt.com