最近老有客户问你,干个什么事,要多少钱,要多久? 但是对于一个做工程的人来说,这是很难回答的。因为完成一件事,有很多前题条件。当是对于客户来说,他是外行他关心的是他的付出和得到。符出钱、时间,得到你的劳动成果。这可能是大多数非专业人士的的认知水平。
前些天,大老板给全体码农提了一个要求,要求从提出需求到上线,两周内完成。速度要快,质量要好,我当然能理解大老板的需求,但是,但是,现在的技术水平是做不到,或者说只有在限定条件下才能做到。
什么样的工程才能做到按时按量的完成? 标准化的工程产品,典型的就是生产小汽车的流水线,需求是明确的,轮子大小,车身颜色,发动机。。。等等一切就是定好的,各个部位都是由专业的生产商生产,从零件生产到最后的组装,都可以进行精确的设计与优化。这样的工程是完全可以回答客户,多少钱,要多久。
另一方面,个性化的产品,是无法回答这个问题。典型就是培养一个优秀的人才,养大一个娃需要多少钱,多久。谁也不能保证。另一个典型的就是医生治病,对普通一般的病,大夫能说多少钱,大概多久能好。对于疑难杂症,没有大夫感打包票,对于手术,手术前患者签的一堆“知情告之,免责条款“也就说明了问题。
对于软件工程来说,和大夫一样,对于需求明确的工作,能够精确度的保质保量,对于复杂的需求,也就只能视情况而定,特别的软件是社会抽象的反映,由于社会的复杂,因此对软件的修改,也不是可以简单的以人的轻验判断。虽然现代软件工程,有devops,流水线之类的东东,但是它只是解决了形式上的速度,对于复杂的需求端,还是没有银弹。因为一件复杂的产品,不可能是由小功能组件,以简单拼装方式实现,必须是各种复杂的组合,就跟这个社会一样,不可能以一个简单的理论就能解释社会所有的现象。
从物理上说,对于个设计精良的体系修改,必定要做大量的功。两个原子合成新的原子,一个原子裂变成两个原子,其中都会伴随大量的能量的吸收和释放。同理,一个设计精良的软件产品,对其功能进行修改,也必定要付出大量的努力(也就是功)。
所以对于外行的问题,做事的人只能说明其复杂性,无法给出精确的答案。
网友评论