App后台开发运维和架构实践

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