天下武功为快不破,快意味着良好的用户体验,用户想要的很快就能达成。快意味着省,因为研发最贵的在于人工工资。省意味着你能获得更高的利润,或提供更有竞争力的价格。
如何让开发变得更快,换言之提高开发效率,是我在技术上追求的最终目标。产生这个想法是在进入达达后,我第一次接触并开发了大量的需求,常常会发现很多需求是有共性的,而天性偷懒的我特别不喜欢重复写类似的东西,于是当时就做了大量的工作来提高开发效率,包含自己写了组件化框架,和页面生成器。达达商城第一年,在只有3个研发的情况下,就达到了上亿的销售额。
最近在看一本书叫《技术的本质》,也给我之前的一些思路提供了更多的理论延展,摘录一些想法:
1. 技术是被现象驱动的,通过装置设定标准流程让某种现象反复发生。如导电钨丝可以发光,于是有了电灯。如人们看到东西会购买,于是有了电商。
2. 技术是有很多级的模块组合而成的。如一台电脑,有屏幕,鼠标,键盘,主机。主机里有cpu,显卡,电源。cpu里有芯片,接口,变压器等等。每一个技术都是由底层的组件一层层组合而来。
3. 同一类的技术会形成一个域,即同类型组件的集合,一个工具箱。在形成一个新技术时,为了实现某种现象,你可以从相关域的工具箱中选择一个组件,来搭建新的装置
4. 组件通过配置或插口来找到自己的位置,通过input, output来相互沟通。有时,组件也需要适配器来相互协调。
这个对于开发效率来说,就是:
1. 组件化很重要,把写过的每一个功能都组件化,定义input,output,配置和插口,并形成完善的文档,这样下一次就不用重新在写
2. 组件可以分的很细致,这样一个大组件如果有功能调整,只需要替换部分小组件即可
3. 形成一个域,根据业务,可以划分成很多领域,如运营模块,账户模块,图标模块等等,每个域都要形成自己完善的工具包。
4. 善于观察现象,并转化为装置。观察现象除了你的经验,还有很多用户数据,埋点数据可以分析。当你知道如何降一个现象稳固下来,就是一个成功的技术。
贯彻在实际的应用中,就是:
1. 形成自己的域工具箱,并仔细的文档化,这样对任何新业务都可以如搭积木一般把零件配起来
2. 形成自己的框架,或流水线。插件系统是一个框架,来配置和拼接各个组件,协调他们的交互,而更多的形式或规则可以制定,来规范化每个组件的插槽,I/O,自动化测试,自动生成代码等。开发也如同流水线一样,只有把一些东西标准化,你就可以更高效。
3. 面向业务开发,时时观察业务的发展和变化,监控业务数据,并把开发的外层接口能用业务的语言描述出来,拉近业务与代码之间的语言翻译精力。