软件构造

漫谈:尽可能高效地写程序

在复习的时候,看到前面章节关于软件生命周期与配置管理的部分的时候,突然想起来前段时间刚刚结束的创业选修课中的精益创业与这段内容有异曲同工之处。因此决定联系一下两者进行一个简单的小结。

精益创业

基本概念

首先需要了解精益创业的概念:
精益创业最早是由硅谷创业者埃里克·莱斯于2012年在其著作《精益创业》中提出的。但其核心思想受到了另一位硅谷创业专家史蒂夫·布兰克的《四步创业法》中“的很大影响,后者为精益创业提供了很多精彩指点和案例。
精益创业的核心思想是先尽快推出一个“最小可行产品”(也叫最小可用品MVP),然后通过不断的学习和有价值的客户反馈,对产品进行快速的迭代优化以实行市场。
精益创业对当前的创业模式有着很大的实用价值。他虽然不能保证创业一定成功,但是可以大幅度减少创业的失败率,并且可以通过小范围的试错和失败来进行快速低成本试错,提升创业的成功率。
在这之前的传统创业模式被称为传统的“火箭发射式”创业。“火箭发射式”创业的逻辑起点,是以公司自我为中心,而不是以用户为中心。这种模式往往 开始于公司领导或者天才员工的天才构想或者灵机一动。这种创业模式将创业环境视为高度可控,未来环境视为高度可预测的。在这种情况下,创业者只需要按照原来制定的目标进行规划和按部就班的执行即可。
但是这种情况在现实中难以存在。我们难以预测未来的环境变化。因此“黑天鹅事件”层出不穷。

创业与软件开发的联系

实际上,从上面的叙述中我们可以很容易地看到,精益创业和软件开发中的敏捷开发管理有着千丝万缕的联系。毕竟两者同样源自于硅谷,而且两种食物实际上一开始都起源于对软件开发的理解。
两者之中,精益创业中“最小可用品“的概念与敏捷开发中的”原型建模“非常相似;两者都追求快速的版本迭代;都时刻 保持着与用户的高互动性,接触用户并从用户处获得反馈。事实上,精益创业可以理解为敏捷开发模式的一种延续。

软件开发

通过创业模式理解软件开发模型

传统软件开发模型中,最为基础和典型的就是瀑布型(Waterfall)模式。瀑布型模式按照构思、启动、分析、设计、构建、测试、实施和维护等阶段的过程,工作进行线性推进,阶段划分较为清楚,管理简单。但是缺点在于没有迭代过程。这可以形象地理解为“一遍过”的流程。
这种传统的软件开发模式,事实上也近似于创业模式中的“火箭发射式”创业,即按照一定的既定规则以及章程完成划分的各阶段的任务,然后合并。对于创业而言,一次“火箭发射式”创业成功的标志为产品获得成功;对于软件开发而言,成功则是被用户所接受。虽然看上去相同,但是两者在市场需求层面之间又有着一定的差距。
对于一次创业活动而言,我的首要目标应该是确定目标人群,而在选择目标人群的时候。因为基数较大的原因,即使目标人群在一定程度上发生了偏移,也不会造成特别重大的影响。最后,产品功能和原有既定的需求方有着一定的差距,也较容易找到解决方案(下家)。
而对于目前大多数的软件开发而言,需求目标由用户所提供的,开发者往往在一开始就陷入被动状态。而且软件产业相比于其他产业尤其是有实体的产业,有着周期短,世代快,需求变化巨大的特点。
因此,相较于“火箭发射式”创业活动而言,软件开发使用“瀑布式”模型更容易失败(虽然相对于创业活动失败成本可能略低)。
在“瀑布式”的基础上,通过一定程度的改造,形成了诸如“增量式”、“V字”、“原型迭代”、“螺旋式”等一系列模型。而敏捷开发,则属于其中最年轻也是最灵活的技术。

敏捷开发

敏捷开发很好地综合了增量模式和迭代模式的优点,以用户为中心,通过快速迭代和小规模的增量,快速适应用户需求的变化,从而减少可能造成的失败和成本损失。

从精益创业看敏捷开发

精益创业所用到的三个工具主要是::“最小可用品”、“客户反馈”、“快速迭代”。
最小可用品——意味着能被用户所直观感受到原型。在敏捷开发中,不仅可以指代最开始的原型模型,还可以认为,在每次进行增量操作的时候,增加内容中新的可用的那一部分。这部分为增量过程中可以实际反馈给用户的东西,并且可以直接使用,功能较整体而言具有一定的独立性。
相较于以往课程中学到的开发模式,往往在程序编写到最后才能有输出。也就是说,直到最后才会知道程序的错误,这时候再去回过头来从前边的代码中寻找错误,往往会变得异常艰难;而通过最小可用品的方式,将程序切割为若干个耦合度不是那么强的部分,在每次增加新的部分时,立即指定测试策略,编写相应的测试,从而保证增加的部分能够正常运行;或者甚至先编写测试策略和测试用例,然后通过测试来编写相应的代码完成增量过程。这样避免了传统开发过程难于捕捉到错误位置的情况。另外,由于先编写测试,因此在书写代码之前就已经对该增量部分的功能有了很详尽的了解,极大程度地排除了测试用例不够全面的问题。
客户反馈——是指通过直接或间接的方式,从最终用户那里获取针对该产品的意见。即围绕需求,时刻进行变更,由于最小化增量的引入,在每个增量过程中进行至少一次反馈,使得程序对于变化具有敏感性,从而便于时刻适应最终的需求,减少了整体回炉的可能性。
快速迭代——是针对客户反馈意见以最快的速度进行调整,融合到新的版本中。这部分的基础是最小化增量过程中对耦合度的降低,在增量过程基本完成之后,维护过程中,通过对这些小增量模块进行修改或者替换处理,可以尽可能地以娇小的改动完成替换。在实际操作的时候,实验中,代码修改实际上就是通过git完成版本迭代过程。另外,类似实验三,不同的小增量模块进行替换操作的时候有可能产生不同的分支,这些分支也会作为迭代的一部分而记录在整个过程中。

理论上,通过这些操作,创业可以达到快速、低成本、高成功率的特点。
而对于软件开发,可以实现的优势为快速(从整体上考虑)、高成功率(每个增量模块均极小概率出现错误)以及低时耗(从整体上考虑,考虑失败可能性)的特点。

写好的程序

总结上述过程,就精益创业的原理这一点展开,想要高效写好一个程序,需要尽可能满足以下条件(不完全):

(1)尽可能将程序细化、模块化。通过每次完成小增量并保证其正确性,从而逐步完成程序;

(2)降低各个增量模块之间的耦合度。这将有助于提升可复用性以及可维护性;

(3)每个模块尽量增加实时反馈机制。这将方便后续的测试以及反馈过程;

(4)为每个模块的功能进行具体的阐述(主要是spec),对于相似功能或者相关功能的模块进行一定程度的合并。这将使程序代码看起来更加清爽。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值