为了快速又高质量的完成产品的需求和迭代,使用他人已经封装好的抽象是很重要的。

我见过各种奇奇怪怪自己写代码的:自己写正则解析 url 参数,自己用原生方法封装 ajax ,自己写正则提取 cookie 内容,自己实现数组去重、打乱、排序等各种奇怪的算法,自己实现各种奇奇怪怪的 util 函数…

最后都跟屎一样💩

只为了满足临时需求设计的丑陋 API,没有考虑到维护性、性能的临时丑陋实现,没有完善的测试用例,没有考虑到各种 corner case, 恶心的各种临时 util 函数绕的一团乱麻,维护困难,需求一变动头就大了,完全不敢动…

自己能实现不意味着要自己写,代码是有维护成本的,不写代码就不会有 bug,我的原则就是尽量自己不写或少写代码,加班写 bug 不是一件值得自豪的事。

但是用别人的代码也会碰到问题的。大约在我大学毕业几个月之后,发生了一件事情让我至今印象深刻。那时产品有个需求,评论支持图片,图片点击可以放大各种操作,于是我就从 github 找到一个图片轮播器,我一看 国内某大厂出品,star 数超多,也可以完美满足需求,各种双指缩放双击缩放左右滑动轮播,于是我开始接入,10 多分钟后我就完成了工作。然后开始出现各种奇奇怪怪的 bug ,而它的源代码就跟一坨屎一样,要修改 bug 太难了,以至于我那一周都在加班,周末都没了。最后提测的时候,这个图片轮播器大部分代码都被我重写了,因为那老代码实在写得太乱了。。

这次教训让我印象深刻,选择用哪些库是很重要的,现在每次选择一个库时我都会去看看源码和测试用例,甚至作者的其它项目。。

下面列的这些是我日常用的库存档,不定期更新中。考察标准有很多,API 设计,使用人数,代码提交活跃度, bug 反馈后修复速度,完善的测试等等。这些我就不一一列举了。