软件工程都是为了业务服务的,现在大多数公司里面工程是为了算法工程师或者客户服务的。大到一个框架,小到一个命令行工具,做好了,别人才愿意使用,软件工程的价值才能体现出来,一个没有人用的软件做得多精致都是失败的。如果用的人越来越多,工程的需求也会随之越来越多,工程的体量也会越来越大,价值也越来越大,随之而来的挑战也越来越多。无论是最开始的无人问津,到最后需求应接不暇,每一步都需要好好经营,如果把每个工程当成一个生态去建设,有长远的追求和视野,工程才能有更长远的发展可能。那么问题来了,如何建设软件工程的生态?
这个问题可以拆解成三个问题:
- 软件工程的生态是什么?
- 怎么一步一步打造软件工程的生态?
- 如何保持生态的长期发展?
参考ROS的生态,我理解软件工程的生态包括核心组件、领域特性和配套工具。核心组件是支持整个工程运作的基础模型,可能是通信为主、可能是调度为主、也可能只是些调用关系。核心组件是对业务进行高度抽象后得到的最基本的机制,从开始接受需求时,就要不断地总结和完善抽象出来的领域模型,把属于业务的东西剥离出去,留下最纯粹的机制,基本上就是核心组件了。有了核心组件就可以开始对接业务,初期可能直接接入业务,随着业务的增多,可以进一步把业务中较为通用的逻辑抽象成机制,统一地提供服务,方便更多的用户接入使用,避免重复造轮子,这些就是和业务关联性较大的领域特性模块,这些模块是吸引更多用户加入生态的附加价值,也有利于工程效率的提升,甚至可以结合底层机制的一些特性,对这些模块进行针对性的优化,提高软件的性能,这也是由工程团队实现这种模块的优势所在。在用户接入生态之前,工具是必不可少的,用户需要文档、编译、调试、部署,有效的工具是必不可少的,否则易用性太差,也会导致无人问津。生态里面,这三个是必不可少的,核心组件和领域特性一般大家都会给与足够的重视,工具却经常被忽视了,其实工具是一样重要的,在设计核心组件时就应该考虑在设计中,初步推出工程生态产品时,基本的工具必须要同步推出。
软件工程的生态该如何打造呢?首先,理解领域的业务,抽象核心模型,设计核心组件。设计的同时要考虑工程的特点,提前准备基础组件,如文档工具、开发环境、编译工具、单测工具、测试用例、benchmark、版本管理、log、DB、配置、bug跟进等。设计核心模型时,要考虑用户的易用性,工程的稳定性、一致性、扩展性和维护性,以及后期迭代的依据。把这些问题都想清楚了,设计文档逻辑完备,才能开始编码。一边编码一边测试一边写wiki,这三个东西要保持一致,同步修改,尤其是wiki,要确保及时的更新了。和用户相关的部分,如接口或工具必须坚决保持一致。开发出核心组件和基础工具之后,要积极热情的推广,帮助早期用户就是帮助我们自己,及时响应用户的问题,完善工程漏洞和文档。这个过程中既要积极响应,同时也要培养用户看文档的习惯。开始正常运转起来之后,就要开始考虑三个方面的事情,一是优化、二是迭代、三是探索。根据最开始设计建设的指标体系不断地优化之前的实现。不断接收新的业务需求,扩展工程能力,实现软件的版本迭代。探索可能的新需求和更好的实现机制,提前布局下一代的功能,以便及时响应用户的紧急需求。如此一来,工程就可以持续做大做强。
做好上面这些要求,软件工程才能保持高效、稳定、易用,才能吸引更多的用户。必要的时候,还可以做成社区,吸引更多资源的加入,也提高知名度。但无论如何,一个软件工程都不可能一直发展下去,随着语言的变化、业务的变更、硬件的升级,软件工程迟早会失去继续维护的价值,一般软件能持续几年的维护和发展就很不错了。因此,生态的发展一定不能太过局限,当社会在变化时,软件工程团队也不能只埋头拉车,还需要不断的抬头看路,适应新的业务需求。在做好了软件工程从0到1再到100的发展的同时,也要做好生态目标自身的演进。生态是为社会服务的,软件工程的生命力是团队赋予的,软件工程可能会局限于一个点,但创造这个生态的团队不能局限于一个点,要发散思维,扩展生态的更多可能,让大生态更加繁荣,生态才能有长期持续的发展。所以了解社会的发展脉络,掌握同类竞品的动态,行业的未来预期,及时调整生态目标,打造多样化的生态系统,才能长久的可持续发展。
总结一下,软件工程生态需要前期做好充分的设计,做好充足的准备,尤其是建立好用的工具和一致的文档,用易用性和稳定性吸引用户的加入。随着生态的发展,要不断的优化、迭代和探索,同时还要跳出工程局限,从更高层面去思考可以扩张的领域,打造多样化的生态。
网友评论