软件开发的天然属性

什么是软件的生产制造过程?需求收集,分析,设计,开发,测试,打包,发布;这些是软件的生产制造过程吗?程序员

看上去好像没有问题,这不就是将软件从无到有制造出来的过程吗?好吧,那让咱们用下面这张图来比较一下:一辆汽车的生产制造过程和一个软件的生产制造过程有什么区别。微信

nature-of-software

汽车上到生产线,工人按照既定的程序不停“重复”的生产着一样规格的产品,对于汽车来讲,生产线上同一批次的汽车必定是同样的;对于软件来讲,若是是一样的软件,生产的过程能够被简化为“复制”和“粘贴”。而咱们所理解的所谓软件的生产制造过程其实对应的是“原型车”的设计过程,由于每次经历这整个过程的软件都再也不是统一批次(版本)。运维

从这个角度来讲,软件开发其实一直处于“设计”过程,而历来不会进入和传统制造业相似的“生产”过程。传统的瀑布模式的软件项目管理思路其实就是在用管理不停重复”生产“过程的方法来管理一个不断变化的“设计”过程,注定是不适合的。测试

yuan_befb91c29c0712b9c840b64f61431624

也许你们对汽车生产线仍是不够熟悉,那咱们来举个作菜的例子。你要作一道西红柿炒鸡蛋,正常的工序是:炒蛋,拿出,放油,放葱,放西红柿,放糖,放入炒好的蛋,放盐,出锅。没毛病,这就是一盘正常的西红柿炒蛋,按照这个工序,任何通过简单培训的人均可以很容易的快速复制这道菜。可是,假设你已经完成了放糖的步骤,这时候客人说他有糖尿病,怎么办?你只能倒掉西红柿历来,还好炒好蛋还能够用。又或者,客人点了西红柿炒蛋,上了桌客人说这个不对,我要的是黄瓜炒蛋 … … 做为大厨的你是否会提刀见客?好吧,其实软件开发的过程远比这个复杂,推倒重来算好的,盖好了大楼再拆掉地下室这种事在软件行业也是屡见不鲜,用户搞不清西红柿和黄瓜算好的,至少他认可搞不清,不少用户会要求你把黄瓜作成西红柿的味道。如今你理解为何会有程序员暴打产品经理的事情出现了吧?编码

这就是软件开发的天然属性,它不是一门科学,更不是一门工程;由于科学和工程都是把已经解决的问题做为经验/定理,供你们重复使用;而软件开发更像是炒菜,就算是最有经验的大厨,每次的菜也都要重作,再详细菜谱也没法保证炒出同样的味道;环境,时间,材料甚至大厨心情的都会对味道有影响。更糟糕的是,至少作菜的材料和过程是可见的,软件开发的过程是不可见的,你看到的只是设计人员写了一堆菜谱,程序员不停的把代码仍到锅里,而这些好像和最后那道菜都没啥关系。设计

牢记这一点,这才是软件开发的本质,任何但愿用既定的计划去约束这个过程,任何但愿用代码工人和管理流程代替开发人员的自主性和创造性的努力都将失败;软件开发永远在设计,就像陆远说的:每一个厨子都是一名设计师。code

101809373

我要说的是:不会作菜的程序员不是好设计师 … … 但至少咱们都是设计师,不是编码工人。项目管理


 

请关注微信公众号 【devopshub】,获取更多关于DevOps研发运维一体化的信息开发

qrcode_for_gh_b7c158df1fd1_430

相关文章
相关标签/搜索