[心得] 工程师年龄歧视的真象

楼主: 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