1 前言

这个题目有点大。工作也有些年头,从开始入行的被动接受,什么流行就学什么;到有一些想法,会去思考为什么使用这种技术;再到主动去学习一些前沿框架。

从开始的不理解,事不关已高高挂起,不在其位不谋其政;到也成为了团队中的中坚力量,去据理力争应该使用某些技术,把觉得好的技术安利给同事,试图引入到团队中;有成功有失败;也有迫于种种因素使用一些所谓“过时的技术”,有时候有在想,这种“被迫”或"过时"是“为了技术而技术”吗?

本人从事的是 JAVA 后端开发,从业七八年,时间不长,但也经历了不少。

从需要使用 juqery,easyui 等各种前端技术,到前后端分离成为主流;从一开始的 hibernate+structs/structs2 框架大行其道,到后来几乎消声匿迹;从最初的 redis/memcache 两者之间还能一较长短,到 redis 一统江湖。

从 spring mvc 到言必谈 spring boot,微服务。不来两句服务化,降级限流熔断,高并发你都不好意思出门。

后来转战“大数据”领域。那时 mapreduce 已是明日黄花,strom 以及阿里巴巴主导的汉化版 jstorm 也是江河日下。而 spark 正当其时,如日中天。遂入坑。

到 flink 异军突起,阿里巴巴再出汉化版 blink,与 spark 分庭抗礼,直至略占上风。后来者只知 flink,而鄙视 spark 之风气,怪异而可爱。

从传统关系型数据库到非关系型数据库,NOSql,NewSql,到数据湖,再到兼顾 OLAP,OLTP 的各种分布式数据库如雨后春笋般出现。

这时期的数据库已无法像传统关系型数据库那样三足鼎立(o+m+else)( java 位面下),而是春秋时期百家争鸣的局面,各家大厂根据自身的业务需求订制化了许多产品,包括不限于 Fusion,mariadb,OceanBase,TiDB,ClickHouse,greenplum,dorisdb,kudu 等等。

对于普通开发者,这是好事?坏事?

对于技术团队,这是好事?坏事?

有了更多的选择权?要学的东西更多了?

怎么选择一种技术框架,从是否开源,是否 KPI 开源,开源社区是否活跃/持续/稳定(我没有说阿里,别乱说),是否有国内大厂使用,社区(特别是问答社区)是否活跃,中文资料是否够多,都是影响普通开发者/团队选择某种技术的原因。

下面将从效率(技术本身),环境(开源,社区),团队(负责人/骨干的技术水平和技术偏好)三个方面来谈谈我的看法。

为避免说教的意思,以及倚老卖老(并不老)的嫌疑,首先声明,以上以下只代表个人观点。

2 效率

2.1 没有绝对的效率

我有点害怕技术讨论会上,上来就说据XX公司/官网测试,XX比XX效率高出5%(8%or10%...)

这就有点像面试中上来就问 QPS 多少。不才曾经做过一个广告竞价平台,日均访问量几千万,听起来好像很牛逼的样子,但该系统是纯内存计算,严格限制单次访问时间,这种系统谈 QPS 根本不具备任何横向参考意义。

或者像面试中多次被问到 spark/hadoop 集群多少个节点的问题。我一般会回答一个大概的数字,然后补充一下集群 cpu cores/内存/存储空间总数,必要时补充集群任务数,单日/总处理数据量。如果只是性能空间并不太好的有限物理机,用容器虚拟成上千个节点,那就达到了大厂的集群规模了吗?

只有在控制变量的前提下,谈论单一指标才有意义。

效率并非不重要。但为那点3%的效率牺牲其它东西,值得吗?这是值得衡量的。说句诛心的话,那点性能优势对于绝大多数公司,我觉得可能是你自己想多了。还不如好好优化一下那堆shit山。

2.2 效率是否绝对重要

在RocketMq(阿里牛逼!)没有开源前,消息队列一般有三种选择 RabbitMQ,ActiveMq,ZeroMq。

三者控制变量的前提下,TPS 测试结果表明 ZeroMq 效率最高。但那些年我所待过的公司,我了解到的情况(同事,网络),消息队列基本都在 RabbitMQ,ActiveMq 两者之间选择,鲜少使用 ZeroMq。

这个例子可能并没有很强的说服力。但大概就是这么个意思。

3 环境

3.1 国内开发大环境

最典型的例子就是 mybatis vs hibernate.

除了银行之类的老项目,现在有新项目在使用 hibernate 吗?就算有,hibernate 在国内也早就远离了主流。

可是,在国外,hibernate 依然是绝对的主流。

在 stackoverflow 上的 tags 数量,看对比图,hibernate 热度碾压 mybatis,两者根据不是一个数量级。

按 google 搜索趋势,过去五年,hibernate 的搜索量依然碾压 mybatis。

同样 google 搜索趋势,按国家地区划分。全球范围内,mybatis 热度胜过 hibernate 的,只有东亚地区。中日韩东亚三国最喜欢 mybatis。迷惑。。。

为何会有这种地区之间的巨大差异?有人说是阿里巴巴的带动作用。阿里对国内 JAVA 整体环境的带动和影响是毋庸置疑的,但在 mybatis 之所以流行这件事情上,完全归于阿里,也无法解释韩国和日本同样流行 mybatis 这件事。

不管怎么说,不管公司,团队还是个人,都是一定程度上从众的。既然大环境都在使用 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 的);坏处是,语法强大,语法糖很爽,但有时天马行空对于团队合作开发真的是灾难。

    • 行政成本比如招人成本。

      招一个使用 scala 的程序员不难,基本上会用 java 的都能快速上手,但要写出没有“java”味儿的 scala 代码,还真不容易。( scala 的 java 味儿,就是那种,你一看就是 java 程序员转过来的痕迹,满屏都快溢出来)

    • 等等

作者:是春壹呀

博客园文章地址:

cnblogs.com/eryuan/p/15223921.html

END

技术学习交流群

 「架构君」建立了读者群,可以添加我微信拉你进群

添加时可以备注城市+职位+年限】

往期推荐

一款神仙接私活儿软件,吊到不行!

架构之道:分离业务逻辑和技术细节

一份完整的聚合支付中心设计方案!

唯品会亿级数据服务平台落地实践

从朋友那里搞了 20 个实战项目,速领!

系统架构设计:平滑发布和ABTesting

重要提醒!人脸识别一定要穿上衣服!

图解 Git,一目了然!

厉害了!单点登录系统用 8 张漫画就解释了。。。

基于 SpringBoot 的仿豆瓣平台【源码分享】

如有收获,点个在看,诚挚感谢

技术选型的一点个人思考相关推荐

  1. IoT通讯技术选型及模型设计的思考

    作者简介 | 刘彦玮,负责阿里IoT事业部蓝牙物联架构设计和研发,8年全栈研发工程师,Github开源爱好者. 近几年随着大型物联平台的出现,智能设备数量和种类持续增长以及芯片厂商不断的技术突破,新的 ...

  2. IoT技术选型及模型设计的思考

    IoT是Internet of Things的缩写,对应的中文就是"物联网".在近几年随着大型物联平台的出现和智能设备数量和种类,不断增长,芯片厂商不断的技术突破,新的使用领域和互 ...

  3. 【SpringMVC】从Fastjson迁移到Jackson,以及对技术选型的反思

    为什么要换掉fastjson 直接原因是fastjson无法支持注解形式的自定义序列化和反序列化,虽然其Github上的Wiki上说明是支持的.但是实测结果表明:Test类的序列化被fastjson的 ...

  4. 关于跨平台技术选型的思考

    关于跨平台技术选型的思考 在我们进行技术架构和技术选型的时候,我们经常犯一个错误就是,试图找一个完美的解决方案即:坑少.功能多. 但是,无数次惨痛经历仍然难以记住这个事实,就是,好的架构是需要迭代的. ...

  5. 微服务平台建设之微服务2.0技术选型思考

    前言 前事不忘后事之师,本篇博客是在拜读和学习了杨波的<微服务架构技术栈选型手册>后结合自己的整理和思考. https://www.infoq.cn/article/micro-servi ...

  6. 简说创业公司的技术选型,从BearyChat的开发说起

    简说创业公司的技术选型,从BearyChat的开发说起 发表于2015-07-28 16:25| 3491次阅读| 来源CSDN| 5 条评论| 作者蒲婧 CTOCTO俱乐部创业工具管理实践CTO讲堂 ...

  7. 短视频自研还是选择第三方?技术选型前必看的自检清单

    2017 年,短视频成为了内容创业的新风口,各种短视频 App 如雨后春笋般先后上线.随着互联网内容消费升级,视频越来越像文字.图片一样,成为每一个 App 不可或缺的一部分. 为了能够更好地聚焦于业 ...

  8. 【译】前端框架技术选型 React vs. Vue (vs. Angular)

    这是该系列文章的第2部分:"Fundbox的前端技术选型".第1部分介绍了Fundbox的技术现状以及我们重新设计它的动机.第2部分介绍了选择新框架背后的考虑:是迁移到React, ...

  9. 数据中台功能架构和技术选型

    数据中台的典型功能架构: 广义的讲数据中台是直接服务于业务系统的数据服务工厂,狭义上讲,数据中台就是可复用的数据API. 站在企业架构的角度,从广义上来讲,数据中台(包含数据平台,数据仓库)应该提供的 ...

最新文章

  1. Silverlight中的拖拽实现的图片上传---1
  2. 从客户端中检测到有潜在危险的 Request.Form 值
  3. (转贴)给Repeater、Datalist和Datagrid增加自动编号列
  4. thinkphp-add方法错误
  5. TClientDataSet[28]: 读写其他格式的 XML 文件
  6. qmake 之 CONFIG 与 QT 乱谈
  7. 【效率】这个神器可以摆脱变量命名纠结!
  8. UC浏览器电脑版怎么自定义标签栏 标签栏位置修改教程
  9. 常用linux命令及图解(实践文档,小白都可以看得懂)
  10. 网站被攻击拿下—只因为程序员一个文件上传功能没写好
  11. html中写自增数字,CSS 小技巧:counter 实现有序列表编号自增
  12. java lc ctype_postgresql中的 LC_CTYPE、LC_COLLATE
  13. android app内存分析,Android手机App内存占用测试方法
  14. 人大经济论坛SAS入门到高级教程
  15. 信息安全-移动应用安全需求分析与安全保护工程
  16. java一键生成海报_小程序生成海报(java后端)
  17. C语言负数的小数次方,c语言 10 负次方
  18. 公司电脑加域之后用不了USB但是可以用鼠标键盘得解决方法
  19. 【24】NumPy IO
  20. 云服务器入门篇:搭建云服务器Java web环境(Ubuntu Server 16.04.1 LTS 64位)

热门文章

  1. Python dataframe绘制饼图_运用matplotlib绘制折线图、散点图、饼图、柱形图的定义代码以及案例详解...
  2. 戴尔外星人系列原厂预装系统重建恢复分区重新构建F12|SupportAssist OS Recovery恢复功能恢复出厂设置
  3. Android稳定性优化
  4. 仙人球模型matlab,数字人C4D建模课堂之十六:仙人球建模
  5. MP3文件结构解析(超详细)
  6. 豆瓣电影基本信息爬虫
  7. python并列条件_if函数如何多个条件并列
  8. 关于达梦数据库bak格式文件还原操作
  9. 【Python 百练成钢】报时助手、成绩分析、购物清单、字符串对比、FJ的字符串
  10. 微信找不到nfc功能_手机中的NFC功能不会用?试试微信“通用”中开启,网友:很实用...