软件研发的核心问题 -- 效率,质量,成本与产出的关系
软件工程的核心问题-质量,时间,内容与投入之间的关系
质量,时间,内容,三者各在一个端点。三者构成一个三角形关系,三者围成的三角形面积就是一个软件投入。
在面积不变即投入不变的情况下,任何一个提高单一端点的行为都会降低剩余的两个端点。
质量。指代码的质量。
时间。指软件的开发时间。包括开发时间,测试时间。
内容。指系统包含的模块,功能点等内容。
软件开发的本质就是在一定的投入下,在一定的时间内,以一定的质量,开发出一定数据量的内容(功能模块或功能点)。
这个规律是普遍存在的,就是事物的内部矛盾,矛盾的各方都是相互制约,又相辅相成的情况。
在没有明显的技术进步的情况下,单纯的想在不增加投入的情况下提示软件的一个指标必然会造成其他两个指标的下降。
软件工程现在还远远算不上一个工业。还配不上“工程”这个词。
“枪匠们靠手艺养活自己,虽然致富的并不多,但比农民收入明显高很多,温饱小康无忧。
在这种情况下,枪匠们只要提高产品的质量和可靠性就够了,枪械档次越高、工艺越精美,附加价值就越高,枪匠赚得就多。
整个枪械制造业缺乏发明创新的动力,因为任何一项尝试都会花费时间和成本,都会有失败的风险,这对于手工业生产者来说是难以承担的。
与其他产品一样,前工业时代枪械的创新速度很缓慢,某一些创新还是由贵族、富户而非枪匠主导的。
此外,不同行业的手工作坊有不同的传统和行规,枪械零部件作坊之间很难协同创作新产品。
即便枪匠制造出了博人眼球的新产品,产量跟不上,也完全无法形成更高的利润。
正因如此,燧发步枪在200多年间没有发生太大的变化。
在手工体制下,枪械越复杂越难以制造、越容易损坏、越难以修理。
其实无论福赛斯的香水瓶还是乔舒亚·肖的火帽,都只是简单的更换已有燧发步枪的击发部分。
更复杂的武器机构在工业革命前是难以普及的。” --《19世纪美国枪械发展史》
现在的所谓软件工程从历史发展阶段上看,连第一次工业革命的门都没摸到。
第一次工业革命的本质是动力产出方式和生产方式的革命,在此之前的动力源要么是动物(人也算),要么是自然力(水力,风力)。
这些动力源都是不稳定的。动物得吃饭,自然力得看地理条件,靠水靠山。
第一次工业革命解决了这个问题,瓦特的蒸汽机可以以较高效率稳定输出动力。为机械大工业生产提供了动力来源基础。
有了这种源源不断的能源动力,为之后的机械大工业生产奠定了基础。
那么请问,软件开发的动力源是什么?现在来说,是一个个软件工程师,是人。
既然是人,那么就要受限制,人会饿,会累,会不高兴,会闹脾气,最终结果-会出错。
无论什么行业,只要是已人为劳动主体,那就必然会出错,这也是墨菲定律决定的。
人是一定会出错的,不论你的规章制度多好,那也是要出错,这个问题无法避免,因为小概率事件必然发生。
唯一可以解决这个问题的办法就是让人尽可能少的参与生产过程。
自第一次工业革命以来,在生产过程中,人的重要性在不断的下降。
人,从生产的主体变成了机器的附庸。
我们现在说一个人技术好,他是一个好床工,好钳工,好车工,那也是在机器的辅助下才能干活
谁能手搓一个螺丝帽?手搓一个零件?能搓出来吗?搓出来符合公差标准吗?敢用吗?
工业化,就是一个不断投入资本,不断减少劳动的过程。
如果要实现工业化,就必须遵循工业化的基本原理 标准化 流程化 规模化。 福特T型车引入流水线装配。背后是产能的极大提高,从而使生产能力追平甚至超过需求。 把复杂的单个问题变成简单问题的重复,重复的东西可以自动化解决,复杂问题无法自动化解决。
比如电脑处理器是没有单独的减法器和乘法器的,那他是怎么处理减法和乘法的。
云计算时代是怎么解决常规服务器算力不足的,是研发高性能服务器吗,还是在现有的硬件基础上拓展规模? 马克思主义观点,事物总是螺旋上升的,一个核心矛盾的解决往往会让其他的次要矛盾上升为为主要矛盾。
当你把主要矛盾解决之后,次要矛盾就会上升为主要矛盾。想要一劳永逸的解决问题是不可能的,要做好思想准备。