这些年我技术栈的变化
不知不觉工作 7 年了,是时候做点总结了。
记得我是 2015 年 7 月 1 日正式入职,今天刚好 7 年多一点。
MySQL 数据库运维
刚开始的时候,负责维护公司的 MySQL 数据库,当时的数据库全部部署在 IDC 机房,有时候需要到现场维护,需要提前跟机房申请,后来服务全部部署到阿里云上面,不需要大半夜跑到机房去维护服务器。
当时犯过一个错误,我在公司内部机房的一个备份服务器上面试用一个开源的跳板机服务,误删了一些正式环境的数据库备份。幸亏只是备份,后来我司的备份全部存到阿里云的归档存储。
中间尝试开发过一些自动化系统,主要是一些报表:通过 Python 实现 agent,以 daemon 的方式在后台运行,主要是收集服务器和数据库的运行数据,数据汇总到一个中心数据库,然后每天出一份报表,对采集的数据进行分析,每次例会会过一遍数据。
后来服务器逐渐迁移到阿里云,阿里云有比较完善的监控,这套系统就没有再去维护。
后来逐渐向后端开发靠拢,给数据库做了慢查询的监控,后面来分析这些慢查询,想办法优化。
越来越觉得这些系统维护并没有挑战,因为业务逐渐上云,可做的事情并不是很多,我主要的精力逐渐往开发倾斜。
开发
一开始用的是 Ruby On Rails,但是写的最多的并不是 Ruby 代码,而是 SQL,记得当时一张报表有几千行 SQL。系统的报表模块有几十张报表,每张报表又有上百的字段,几十的查询条件,当时的开发小哥用 Rails 的 ORM 来实现报表,结果性能惨不忍睹,即使测试环境少量的数据也经常超时,看看日志,满屏的 N+1 查询。后来我接手这个模块,大概花了两个多月的时间,用 SQL 重新实现,有些需要快速响应的地方用到了物化视图,一些公共的地方做了 UDF。经过一段时间的调整,终于可以做到秒级响应。
我不太喜欢 Ruby 的语法风格,觉得里面有太多花里胡哨的东西,而不是真正定位于解决问题本身,太多的花样会让人对语言产生很重的心智负担。后来我的精力逐渐像 Java 和 Python 倾斜。快速实现一个简单的 demo,Python 几乎是一个完美的选择。在比较严肃的业务开发上,我更倾向于使用 Java,Java 可能是最接近完美的一种语言,在各方面没有明显的短板。虽然大多数程序员更喜欢去尝试那些更新、更酷的语言,就像曾经的 Rails 受到热烈的追捧,这让你看起来与众不同。
大家都在用的东西,你也用,会让你看起来平庸,不够酷,但是技术上的标新立异是有代价的,新的东西往往不太稳定。世界五百强的公司更喜欢用 Java,各种金融、证券、保险、电商喜欢用 Java,那些蓝筹公司更喜欢 Java。一些追求稳定运行的服务,更倾向于选择那些看起来有点保守的技术。
但是我并不反对探索,相反,我自己不断的去尝试一些新的技术,我尝试过各种新技术,有些尝试一些就放弃,觉得不值得花精力去看,有些东西还在研究。最近看 dart,在 null 安全机制上做的要比 Java 更好。
关于语言和业务
我是一个对语言没有宗教信仰的人,并不迷信某种特定的语言,不会跟别人面红耳赤的争论那种语言更好。我觉得最好是从产品和业务特点出发,比如说我要开发一款产品,一个系统,用什么技术方案最合适。而不是说我掌握了某种语言,我要用这种语言开发某个产品。
我觉得掌握绝大多数编程语言是没有什么障碍的,因为我们并不是要成为这门语言的专家,只是把它用好。
还有什么
做任何事情都是要计算投入和产出的,有些时候只考虑钱,这是不对的。人的精力也是需要考虑的,甚至比钱更重要。
就想到这些,后想起什么再写吧!