技术选型的一点个人思考
时间:2021-11-03 14:19:37
手机看文章
扫描二维码
随时随地手机看文章
[导读]1 前言这个题目有点大。工作也有些年头,从开始入行的被动接受,什么流行就学什么;到有一些想法,会去思考为什么使用这种技术;再到主动去学习一些前沿框架。从开始的不理解,事不关已高高挂起,不在其位不谋其政;到也成为了团队中的中坚力量,去据理力争应该使用某些技术,把觉得好的技术安利给同...
1 前言
这个题目有点大。工作也有些年头,从开始入行的被动接受,什么流行就学什么;到有一些想法,会去思考为什么使用这种技术;再到主动去学习一些前沿框架。
从 spring mvc 到言必谈 spring boot,微服务。不来两句服务化,降级限流熔断,高并发你都不好意思出门。
到 flink 异军突起,阿里巴巴再出汉化版 blink,与 spark 分庭抗礼,直至略占上风。后来者只知 flink,而鄙视 spark 之风气,怪异而可爱。
这时期的数据库已无法像传统关系型数据库那样三足鼎立(o m else)( java 位面下),而是春秋时期百家争鸣的局面,各家大厂根据自身的业务需求订制化了许多产品,包括不限于 Fusion,mariadb,OceanBase,TiDB,ClickHouse,greenplum,dorisdb,kudu 等等。
对于普通开发者,这是好事?坏事?
2 效率
2.1 没有绝对的效率
我有点害怕技术讨论会上,上来就说据XX公司/官网测试,XX比XX效率高出5%(8%or10%...)
2.2 效率是否绝对重要
在RocketMq(阿里牛逼!)没有开源前,消息队列一般有三种选择 RabbitMQ,ActiveMq,ZeroMq。
三者控制变量的前提下,TPS 测试结果表明 ZeroMq 效率最高。但那些年我所待过的公司,我了解到的情况(同事,网络),消息队列基本都在 RabbitMQ,ActiveMq 两者之间选择,鲜少使用 ZeroMq。
3 环境
3.1 国内开发大环境
最典型的例子就是 mybatis vs hibernate.
除了银行之类的老项目,现在有新项目在使用 hibernate 吗?就算有,hibernate 在国内也早就远离了主流。
可是,在国外,hibernate 依然是绝对的主流。
在 stackoverflow 上的 tags 数量,看对比图,hibernate 热度碾压 mybatis,两者根据不是一个数量级。
3.2 技术社区的影响
有个笑话,外行人看到程序员在工作,觉得好牛逼,全英文的界面。知乎也常有提问,英语不好,学编程可行吗?
底下回答,很多鼓励,英语跟编程没有太大关系云云。这句话有毛病吗?这至少透露出来两层意思。
- 不是说编程方面英语不重要。英语好,优势巨大。
- 国内程序员很多英语不好。以本人常年混迹小公司的经验来说,好多程序员连 eclipse 或者 idea 上常用的界面按钮上的单词都认不全。唯手熟尔。不懂就百度。这个很多,是好多,无法统计,但个比例绝对不低。
-
国内 IT 圈子是一个比较封闭的圈子。虽然,用的技术基本都是发源于国外,但国内的规模保证了资源的足够。比如 spark/flink 不需要去官网阅读一手资料,各个论坛网站上公众号各种二手三手N手的资料满天飞。
有追求的程序员,或者大厂的大佬觉得嗤之以鼻,遇 BUG 先必称看源码,再次 github issue,stackoverflow,搜索必须 google,资料必须原文。
所以英语跟编程没有太大关系,这不是一个疑问,对很多程序员来说,这就是事实。大量分布于各类中小型公司,严重依赖于国内各种社区学习(copy)技术,解(zhi)决(zao)问题,赚钱养家。
国内头部公司/团队用什么,大多数的公司/团队/个人就用什么。
这件事情的另一个力证是 spring cloud vs apache dubbo,两者隐隐有在国内分庭抗礼之势。但在全球范围呢,我就不放 google trend 图了。有点欺负人。
但是因为 apache dubbo 是阿里巴巴出品,进而影响到了国内整个程序员圈子,社区,所以大家也逐渐愿意去用,虽然被之前的开源社区挺尸行为伤过。就像一个渣男,但他是高富帅啊,自带光环。
4 团队
4.1 团队负责人及核心骨干的技术积累以及技术偏好
2017年新公司进行一个流计算项目。当时整个团队都是新组建,尚处于磨合期。当时我个人偏向于 spark streaming,用得比较熟,上手快,能够提前排坑,能快速解决线上问题。但当时的技术负责人在召开技术研讨会,听取各方意见后,决定使用 jstorm。我当然服从决定。
当时的 jstorm 尚有余晖。而且据说那时 jstorm 在开源社区诈尸了。颇有几分卷土重来的架势。加上当时负责人力排众议,让我觉得很安心,他应该是很懂 jstorm 这项技术栈的。
后来项目顺利上线。再后来,不出意外,运行一段时间,遇到棘手线上问题。几次团队沟通后,我得出一个结论,决定使用 jstorm 的负责人并不了解 jstorm,甚至应该不懂 java 技术栈(客观白描事实,无情绪输出,技术管理者并不一定要懂技术);所以,整个团队最懂 jstorm 的好像就是我了。
肝吧,骚年。在经历了好几个后半夜,并成功在国庆享受了三倍工资(并没有)后,BUG 解决。
后来回想,如果当时上的是 spark streaming 就不会出现同样的问题,就算出现这样的问题,凭借对 spark streaming 的较深入了解,也能够快速解决。
上述这段经历,我想表达什么?
- 一个程序员的竞争力包括什么?不是会用某一种技术,也不是能够快速上手某种新技术。
-
学习新技术的欲望,动力,能力;快速上手,保证任务,这些只是基本功。对于新技术,能够利用经验,快速理解原理内幕,预排坑道,又快又好解决线上问题,更为重要。所以,当决定使用某种新技术(哪怕技术并不新,如果团队当中没人使用过,没有深刻了解过)时,并不能仅满足于“能快速上手”。
- 技术本身没有立场。没有好的坏的,没有国外的国内的。有些技术栈,并没有 mybatis 和 hibernater 那么悬殊,如何抉择,很大概率就看技术团队的偏好,类似于 spark vs flink,spring cloud vs apache dubbo,不管谁是胜出者,都很隐。
-
除了团队的学习成本,还要考虑其它成本.
- 比如,运维成本,比如,用 scala 还是 java 开发 spark。
- 用 java 的好处是虽臃肿但新手外行上手超快。用 scala 好处是它是 spark 开发语言,熟悉 scala 便于查看 spark 源码,语法强大,逼格高(我真见过 scala 开发 spark 的鄙视使用 java 的);坏处是,语法强大,语法糖很爽,但有时天马行空对于团队合作开发真的是灾难。
-
行政成本比如招人成本。
-
等等