软件开发工具的成长速度远远超过开发人员的成长速度,这是现实。
每个月,甚至每天,我们都可以见到新的类库、框架、工具、语言。它们或者极大地降低了开发的成本,或者极大地提升了开发的效率。
随之而来的问题就是,如何让开发人员妥善地运用好这些工具?
曾经有好几个做开发的同事跟我说:“写软件谁不会?从网上找些开源的类和项目来改改就是了”。目前也确实充斥着这种“改改就是”的工作思维。介绍某个类库和项目如何安装和调用的文章俯拾皆是。
但是每种工具究竟有什么优缺点?适合用来解决什么问题?需要以怎样的方式来解决问题?因此还需要做怎样的权衡?这样的问题基本没有人考虑,但是,它们又很重要。
这有点像练武。斧钺钩叉、刀枪剑戟,制造手艺日渐精良;可是习武的人心里没有分寸,该劈的时候提了枪,该刺的时候抡了斧…… 耍几下花把式还算足够,真正打起来哪能取胜?
我在面试新人中经常提的问题是:NoSQL分为哪几种类型?每种类型的典型代表和应用场景是什么?要知道,用过MongoDB和Redis的人比比皆是,但回答不上这几个问题的也大有人在。这样的候选人,我是决计不敢要的。稍加不注意,他们就可能用Redis存文档,用MongoDB做复杂运算,甚至“大胆”用Redis来替换数据库以解决性能瓶颈——噢,你说起“事务”,Redis也是有“事务”的呀。
对这样的人,你真让他们去研究MongoDB或者Redis,让他们去通读一本专著,似乎有点划不来,他们自己也没有那么多耐心。所以我常想,有没有一本“薄而广”的书,专注于开拓大家的眼界,并教导大家用“正确的方式”来使用各种已有的工具。如今我们虽然有海量的框架和类库,有突飞猛进的云服务,但是只要没有掌握“正确的应用方式”,就无法保证“把事情做对”,就只能开发出某几个方面明显不及格的产品。
所以当我看到曾健生编著的《App后台开发运维和架构实践》时,不由得眼前一亮。这正是一本“薄而广”的书,它绝不像《打狗棍法》或者《辟邪剑法》,不负责地教你把某门特别的武功练到极致,而更像《十八般兵器入门》,告诉你刀枪剑戟各适合什么场景,使用时有什么注意事项。典型的例子如关于Redis的部分,它讲的不是Redis如何安装,如何调用,而是结合发送短信、社交关系计算等典型应用场景讲解Redis的使用方式,并介绍在Redis提供内建集群之前,市面上的各种集群的方案和优劣。这样虽然只有一章的篇幅,但为普通开发人员提供的价值绝对要比两三本Redis专著都要大,而且读起来更有效率。
古代练武的人,未必人人都要做武林高手,许多人只是把十八般兵器都耍熟,就已经足够防贼、保平安,受益匪浅了。同样的道理,对今天的App后台开发人员来说,把基本的点都踩到、踩准,把系统拎到及格线以上,避免明显的缺憾,对大多数场景来说,已经是意义重大了。
余晟–软件开发老兵,微信公众号“余晟以为”