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

看板Soft_Job (軟體人)作者 (@EVERYWHERE)時間3年前 (2020/09/23 05:58), 編輯推噓48(557179)
留言241則, 77人參與, 3年前最新討論串1/1
原文刊於: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 , 花個三年時間把他裡裡外外都摸個透徹,未來要做一個新產品,那麼在技術方面 的時程估算,將會較簡單就估算出一個時程表,而且因為你對細節清楚,就更不 容易因為細節出包,而影響到專案的時程。 至於對於新鮮人該走那一條路,是要追求新科技,還是摸熟某一套技術,我在下 一章會有討論。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 76.103.177.223 (美國) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1600811930.A.7B5.html

09/23 06:21, 3年前 , 1F
最熱門的技術不一定是最新吧,大公司我看到的大多用成熟
09/23 06:21, 1F

09/23 06:22, 3年前 , 2F
許久的東西
09/23 06:22, 2F

09/23 06:35, 3年前 , 3F
每一個技術跟protocol都有pros & cons, 好的工程師不會說X
09/23 06:35, 3F

09/23 06:35, 3年前 , 4F
XX比較好,而是不同的constraint的情境下一定有一些比較突
09/23 06:35, 4F

09/23 06:35, 3年前 , 5F
出的選項。再來大公司明明都是用成熟的科技居多,你有看到
09/23 06:35, 5F

09/23 06:35, 3年前 , 6F
哪間大公司用Rust跟Kotlin當主力語言的讓我知道一下
09/23 06:35, 6F

09/23 07:06, 3年前 , 7F
推推
09/23 07:06, 7F

09/23 07:09, 3年前 , 8F
09/23 07:09, 8F

09/23 07:59, 3年前 , 9F
敢問你幾歲 工作多久了
09/23 07:59, 9F

09/23 08:02, 3年前 , 10F
另外~全部都回歸到JAVA我覺得言過其實了
09/23 08:02, 10F

09/23 08:13, 3年前 , 11F
java就難用的技術 當你想實現特別功能的時候 特別
09/23 08:13, 11F

09/23 08:13, 3年前 , 12F
Java 在生態系的部分是很穩又廣,大型系統的架構與效能都
09/23 08:13, 12F

09/23 08:13, 3年前 , 13F
還不錯。不過前幾年的 oracle 爭議,還有進步緩慢的語言
09/23 08:13, 13F

09/23 08:14, 3年前 , 14F
特性,會讓其他語言有追上的空間
09/23 08:14, 14F

09/23 08:14, 3年前 , 15F
難用
09/23 08:14, 15F

09/23 08:16, 3年前 , 16F
純用框架倒是還可以 但想追求好點的時候特別難受
09/23 08:16, 16F

09/23 08:19, 3年前 , 17F
09/23 08:19, 17F

09/23 08:26, 3年前 , 18F
json 跟 PB 那段我都要哭了。
09/23 08:26, 18F

09/23 08:27, 3年前 , 19F
要用成熟的工具去發展不成熟的事情啦
09/23 08:27, 19F

09/23 08:28, 3年前 , 20F
否則根本沒辦法專注在自己的問題上面,都在跟工具耗
09/23 08:28, 20F

09/23 08:28, 3年前 , 21F
曾在一案用json的原因就是 開發過程規格變動大 json好維護
09/23 08:28, 21F

09/23 08:29, 3年前 , 22F
結果被某工程師也是用效能的理由要求寫好的整套換成 pb
09/23 08:29, 22F

09/23 08:30, 3年前 , 23F
我當時建議先換幾個(不要全改)避免重構 影響開發時程
09/23 08:30, 23F

09/23 08:31, 3年前 , 24F
結果 該員無法實現自己的想法就森77離職了。
09/23 08:31, 24F

09/23 08:45, 3年前 , 25F
從熟悉的環境換到不熟悉的環境本來就要重新來過
09/23 08:45, 25F

09/23 08:46, 3年前 , 26F
和年齡歧視有什麼關係,而且換新工作,面試時就應該
09/23 08:46, 26F

09/23 08:47, 3年前 , 27F
知道會用哪些新技術,自己是否要先熟悉之類的
09/23 08:47, 27F

09/23 08:49, 3年前 , 28F
重點是態度應該要reset吧,用老鳥心態來看可能反而會
09/23 08:49, 28F

09/23 08:49, 3年前 , 29F
被認為難搞
09/23 08:49, 29F

09/23 08:59, 3年前 , 30F
標題與內文不符,內文講的很多點是不錯,可是工作是自己選的
09/23 08:59, 30F

09/23 08:59, 3年前 , 31F
看起來比較像您不適應新團隊在抒發吧,跟年齡歧視好像...
09/23 08:59, 31F

09/23 08:59, 3年前 , 32F
CDDA(Cataclysm: Dark Days Ahead)遊戲存檔用json,
09/23 08:59, 32F

09/23 08:59, 3年前 , 33F
遊戲data目錄約51M。不使用SSD時很慢。
09/23 08:59, 33F

09/23 09:00, 3年前 , 34F
我也覺得不太符,好像最後少了一兩段把他們關聯起來
09/23 09:00, 34F

09/23 09:15, 3年前 , 35F
一樣也是大齡工程師,超過十七年的程式生涯。完全不認同你
09/23 09:15, 35F

09/23 09:15, 3年前 , 36F
的想法。因為每一個新語言新框架都解決之前語言或框架的痛
09/23 09:15, 36F

09/23 09:15, 3年前 , 37F
點。
09/23 09:15, 37F

09/23 09:16, 3年前 , 38F
只能勉勵自己隨著年資培養硬實力之外也要培養軟實力吶
09/23 09:16, 38F

09/23 09:25, 3年前 , 39F
“即時一個新的函式庫...好上10%好了...” 這段是不是代
09/23 09:25, 39F
還有 162 則推文
09/25 01:10, 3年前 , 202F
混口飯吃而且夠專精的東西可以讓你在這個環境混下去
09/25 01:10, 202F

09/25 01:14, 3年前 , 203F
我覺得原PO標題、團隊開發遇到的不愉快經驗 以及對
09/25 01:14, 203F

09/25 01:14, 3年前 , 204F
於新技術的看法 我覺得像是三件事
09/25 01:14, 204F

09/25 01:37, 3年前 , 205F
然後 技術對我來說就是完成目的工具
09/25 01:37, 205F

09/25 01:38, 3年前 , 206F
掌握特定的語言或框架或許可能可以在特定公司吃穿很
09/25 01:38, 206F

09/25 01:38, 3年前 , 207F
久 但是環境總是會變化
09/25 01:38, 207F

09/25 01:40, 3年前 , 208F
早期學舊ASP的人都沒想過ASP.net後面會發展這麼久
09/25 01:40, 208F

09/25 01:40, 3年前 , 209F
早期學的人還有人覺得寫這個很變扭
09/25 01:40, 209F

09/25 01:41, 3年前 , 210F
早期也有人死守VB6 不願意跳C#
09/25 01:41, 210F

09/25 01:46, 3年前 , 211F
我記得也有朋友的美國友人死守Adobe Coldfusion 就是
09/25 01:46, 211F

09/25 01:46, 3年前 , 212F
不想學新的 對他來說 這個東西就是很穩 而且他而言他
09/25 01:46, 212F

09/25 01:46, 3年前 , 213F
就是開發的很快
09/25 01:46, 213F

09/25 02:18, 3年前 , 214F
不太認同你的認同,用pb跟json的差別就像是rdbms與mon
09/25 02:18, 214F

09/25 02:18, 3年前 , 215F
go的爭論一樣阿,pb在計劃性資料有優勢,JSON可以多變
09/25 02:18, 215F

09/25 02:18, 3年前 , 216F
,要更改pb本來就是要付出一定的成本,至於新的技術付
09/25 02:18, 216F

09/25 02:18, 3年前 , 217F
出學習的時間成本去增加程式的效能不就是工程師的價值
09/25 02:18, 217F

09/25 02:18, 3年前 , 218F
所在嗎?
09/25 02:18, 218F

09/25 05:35, 3年前 , 219F
在大量有非同步的需求上,你不會想用Java的,另外重新
09/25 05:35, 219F

09/25 05:35, 3年前 , 220F
造輪子這件事,如果公司有給予足夠時間,反而很不賴吧
09/25 05:35, 220F

09/25 05:35, 3年前 , 221F
?造輪過程中也能重新去看前人怎實現,一些觀念和奇淫
09/25 05:35, 221F

09/25 05:35, 3年前 , 222F
巧技又能有更深入的體會
09/25 05:35, 222F

09/25 11:06, 3年前 , 223F
簡單來說,你希望自己的沉沒時間成本能兌現,那你應該去
09/25 11:06, 223F

09/25 11:06, 3年前 , 224F
找只用傳統Java的團隊,而不是希冀還沒投入時間成本或不
09/25 11:06, 224F

09/25 11:06, 3年前 , 225F
介意多學點新東西的人,為了你而降低10%效率
09/25 11:06, 225F

09/25 11:07, 3年前 , 226F
我是指前半段的部分…
09/25 11:07, 226F

09/25 17:14, 3年前 , 227F
Java很強,讓原本無法成coder的人成為coder,但Java興起
09/25 17:14, 227F

09/25 17:15, 3年前 , 228F
的那幾年也是Coder薪資成長停滯的年代,供需關係。
09/25 17:15, 228F

09/25 21:22, 3年前 , 229F
文不對題嗎?他寫得就是為什麼會被歧視的真相阿
09/25 21:22, 229F

09/25 23:25, 3年前 , 230F
最佳的兌現方式就是開公司 應用在別人事業上虧了都是
09/25 23:25, 230F

09/25 23:25, 3年前 , 231F
吞得下去真的是勇者
09/25 23:25, 231F

09/25 23:26, 3年前 , 232F
沒有高薪 前途保證都是假的
09/25 23:26, 232F

09/26 02:46, 3年前 , 233F
你後面建議使用json的時機真的會導致世界毀滅…
09/26 02:46, 233F

09/26 08:35, 3年前 , 234F
為什麼我覺得這篇看起來就是不想學新東西?
09/26 08:35, 234F

09/26 08:35, 3年前 , 235F
是我還不夠老嗎?
09/26 08:35, 235F

09/26 20:01, 3年前 , 236F
確實展現了為什麼會被歧視
09/26 20:01, 236F

09/27 04:03, 3年前 , 237F
你經驗這麼豐富沒道理適應不良吧...
09/27 04:03, 237F

09/28 10:26, 3年前 , 238F
真相
09/28 10:26, 238F

09/29 09:26, 3年前 , 239F
讓原本無法成為coder的人成為coder我認為是javascript
09/29 09:26, 239F

10/05 16:59, 3年前 , 240F
時間,空間,成本
10/05 16:59, 240F

10/05 17:00, 3年前 , 241F
記憶體邊便宜自然有記憶體揮霍
10/05 17:00, 241F
文章代碼(AID): #1VQdEQUr (Soft_Job)
文章代碼(AID): #1VQdEQUr (Soft_Job)