完成优于完美?及有的没的。

现在时间是 17 点 09 分,背景音乐是韩国黑泡:Wonstein - 红外线摄影机,好久没在技术方面总结过了,稍微谈谈。

最近比较有成就感的一件事情是为工作写了个工具,大意可以解释为需要手动组装报文送给另一个系统,报文涉及到的字段有好几百个,维护在一份 Excel 文档。每次代码开发就需要对照 Excel 手动写组装报文的代码,以及肉眼检查字段名写错没。而且每次新需求都需要维护一份文档以及重复上面的步骤。

如果字段名写错了,报文里的值就是空或者默认值。理论上只要判断一下报文里的字段值,如果它是空或者默认值,那么就极有可能代码写错了。如果有值,则说明至少落值的代码是有了 —— 至于落的值是否是我们想要的,则需要另外考虑了。

动手。简单回顾下流程:第一个版本是写了判断的方法加在每次初始化报文之后,将报文里值为空或默认值的字段输出至一个文件。该版本下每次提交代码还需要删掉这个工具方法,而且里面还有许多特殊的逻辑,太麻烦了;第二个版本是是把方法独立出来,通过传入流水号获取各种信息,然后判断以及输出。该版本独立出来之后还可以切换测试环境,不像第一个版本只能测试本地环境;第三个版本,因为本来做测试就需要一个文档,于是找了读写 Excel 的方法将结果输出为一个 Excel 文档;第四个版本,因为项目组刚好开展做工具的活动,组长让把这玩意套成 B/S 端的,于是用 Spring Boot 套了一层,速成了 antd_pro,把前后端调通了。因为前期自己图方便写了很多魔鬼代码,这一步弄得很不像样,后面细讲;第五个版本用 JavaFX 套了层 GUI,感觉还不错。

目的是写个工具提高效率,所以各个方面都用了非常粗暴的解决方案。比如在内网环境的各种不便利,一开始为了图快,只能「能找到什么工具,先用它实现点功能再说」。比如写代码时,全局变量飞过来飞过去 —— 反正就我一个人用嘛。后来说做成 B/S 的,突然意识到,似乎同时两个人用也有可能出问题。再然后就是我一直觉得「完成比完美重要」,管他妈的,先把功能实现,后面需要什么再改。结果回头想改的时候,发现到处都是牵一发而动全身,到处都是莫名其妙的代码。

不过莫名其妙的代码也不能全怪我,因为现有的东西特殊点太多了,所以我就用了许多特殊判断去适配……嗐。这种「管他妈的先完成」的思维以后得平衡一下,「先完成」也得建立在一个稍微有点架构的基础之上。—— 先思考。不过思考的前提也得我有一定的经验嘛。没办法,管他妈的,先写嘛,多写垃圾代码,关键要长记性。

在工作这种环境中,写点工具就不能像平时那样玩了。因为写东西是为了提高效率,本来就是花空闲时间来写,把我空闲时间都用完了那就得不偿失了。所以上面提到的各种局限其实也是自己克制的结果。

还写了两个好玩的。一个大意是对应许多规则,每个规则对应数张表的数个字段,需要对每张表的每个涉及到的字段结合每条规则写一条 SQL。本来任务挺紧急的,当天下午分配,后天上午就要结果。不过干活前想了一下,其实只需要为每条规则写一条 SQL,然后将里面的表名和字段名替换成涉及到的表名和字段名就行了。于是任务就拆分为三步:1、编写规则对应的 SQL;2、找到涉及到的表和字段;3、进行替换。写了段替换的代码,心里有点小骄傲,可以慢慢干另外两件事啦。也帮许多同事节约了不少时间。

二是在开发机写了个脚本,解锁时自动打开一个 todo 文件,每天按月归档。一方面做提醒用,一方面汇总写周报。

两点反思:一是自己写东西只顾够用,考虑的经常不全面;二是自己没有一个很好的写玩具的流程。比如我在内网的 Gitlab 发现一个大佬,写了好几个 JavaFX 的工具(我就是拷的他的包),以及许多人有什么问题都会去想着写个 Python 脚本解决之类的。其实之前说起 JavaFX,我会觉得这多老的技术啊……可是像这些人,他们都有一个积累起来的流程了,能很快地干活。有什么问题都可以囊括进他们解决问题的框架。但我经常就是手里有什么,就用什么去解决。又或者常常追求新鲜的技术和工具。这样经常要去学习新的东西,而且没太大意义。所谓的学新东西也不过是面向搜索引擎、面向参考代码,根本没积累下什么。没有沉淀,每次想做点什么总是从头开始。

得改变下。

另外,之前稍微读了下 Spring 的源码 把 Spring 源码的基础部分拷贝出来复盘三大核心组件,感觉还是挺有用的,主要是对设计模式的理解以及各种抽象层的考虑,自己按这种思路写过一个小作业 hqweay/XX_MS。这些收获在我工作后熟悉项目给了许多帮助。具体以后有机会再聊。

如果只考虑干活的话,好像就是这样,一方面的经验迁移到另一方面还是挺快的,虽然不能让人很牛逼,也不能让人有很深的理解和造诣 —— 但能很快上手干活啊。虽然只有 Vue 经验以及了解一点点 React,但是上手 antd_pro 时我还是很快能把东西做出来……干活前我心想只要知道了数据流向,读读文档的基础部分,我照着已有的代码控制变量稍微改改应该就能搞定吧。虽然实际过程没这么简单,但确实「完成」似乎并不困难……

回到之前提过的话了,「完成比完美重要」。一方面,我觉得自己水平没那么屌,我能完成就已经不错了……另一方面,虽然说出来有点杀掉但我还是要说,似乎这世上能把事情完成的人也不多……

写到这,回头把标题改成了「完成优于完美」,其实全篇没多少东西和这标题有关……不过这标题着实不错。就这样吧。我去,现在是 18 点 30 分,背景音乐还在放韩国黑泡,去吃点饭,回来打会游戏放松下。