为什么软件开发很难?(为什么软件开发需要重构技术)

1.软件设计为何所以难

作者 | Jeremy Mikkola翻译者 | 战神策画 | 百盛软件设计为何这般之难?责任编辑指出此种十分困难与C语言毫无关系,因为当代的C语言早已足够多好了所以,其原因到底是什么?有一类看法指出,采用更好的C语言就会让软件设计变得更容易、更高工作效率。

2.为何软件设计须要这般长的天数

在编订或 Fortran 时代,此种看法无疑是对的然而,当代的C语言早已足够多好了,目前的主要十分困难和改进机会出现在其它方面程式设计依然极难,但导致此种十分困难的其原因却与所采用的C语言毫无关系1安萨尔运动定律当你有一系列须要顺利完成的连贯性各项任务时,安萨尔运动定律就会有所作为。

3.为何软件设计要死板

安萨尔运动定律告诉他们,通过大力推进其中的两个各项任务来大力推进整座系列各项任务的速率是有限制性管制的例如,煮沸水须要 10 两分钟,然后煮意大利面也须要 10 两分钟即使你能够找到一类能更慢把水煮沸的方法,你做早饭的天数也绝对不会多于煮意大利面所需的 10 两分钟。

4.为何软件设计须要操作过程

一般的式子是这样的,假如某类各项任务的总天数占比是 p,所以你永远都无法赢得大于 1/(1-p) 的快速假定各项任务的一部份挤占了 90% 的天数,所以 p=0.90,将这个部份强化到零天数,将使整座工作速率提高 1/(1-0.90)=10 倍。

5.为何软件设计薪水那么高

安萨尔运动定律的突破点在于,你所要赢得的快速受到了你所强化部份的大小管制程式设计之所以十分困难,其原因有很多为了简单确保安全,他们能把十分困难的事情想象成必须按次序顺利完成的各项任务毕竟,人类并不擅于多各项任务处理在任一两个关键时刻,你或者在采用构筑工具,或者在阅读文件格式,或者在撰写标识符或者参加会议。

6.软件设计十分困难的根源

你一次只能应对一项各项任务,所以安萨尔运动定律大致适用假如你想尽办法将构筑天数降至零,所以工程项目的顺利完成天数也只会短一点儿你的工作效率依然受制于顺利完成工程项目所需的其它事项过去,把两个流程译成计算机系统能运行的东西是非常十分困难的远古时代,须要先将流程转换成 1 和 0,然后再两个两个地输入到计算机系统。

7.软件设计为何Sauve

我不知道这须要花费多少天数,但为了便于讨论,他们假定须要挤占 90% 的天数这意味着,假如有一类更好的方式来告诉计算机系统该做什么(比如 Python),所以程式设计工作效率将提高 10 倍现在,他们有了更好的C语言,能花更少的天数告诉计算机系统该做什么,生产力得到提升。

8.为何软件设计认识论让你觉得差劲

将流程转换成标识符不再须要 90% 的天数,现在只须要 10% 的天数这意味着他们能从中赢得的最大改变是 1.11 倍,这比以前能赢得的快速少 81 倍!这是因为软件设计其余的 90% 各项任务都是十分困难的各项任务,两个更好的C语言不会让它们变得更容易。

9.软件设计越来越难做

2如何做到“没朋友”我的意思是,程式设计的难度与C语言毫无关系为了理解其中的其原因,他们先假定不须要操心与计算机系统相关的东西,你只须要告诉你的朋友要做些什么你不能作弊,不能让他们依赖常识性的东西,你必须替他们做出所有的决定。

10.为何学软件设计

你会发现,你须要花很多天数来解释背景你的朋友须要了解计算机系统流程要处理的东西在现实世界中是怎样的,以及流程应该要做什么你须要解释各种缩略词和术语,须要讨论一些外部因素你的朋友须要知道所有可能出现的情况,有大量的小细节须要处理,例如用户不能在购物车中输入负数个产品。

用户可能会尝试做出所有可能的行为,会发生各种可能的事情,例如包裹在运输操作过程中弄丢了,你会发现有大量的边界情况须要告诉你的朋友向你的朋友解释这一切是很十分困难的首先,你须要了解与工程项目相关的所有现实世界的细节 (产品可能缺货,可能有折扣,等等)。

其次,你须要做出流程在各种可能的情况下应该做什么的决定第三,你须要以一类你的朋友能够理解的方式与他们交流这意味着你须要组织好你的想法,让它们易于理解假如你写过文章或博客,你就会知道传达大量的信息并不是一件容易的事情!。

请注意,到目前为止,这些各项任务都还没有涉及计算机系统,当然也就不涉及C语言了解现实世界,了解流程应该做什么,以及如何组织这些想法,这些都是非常十分困难的各项任务3描述与规范这里有两个容易就掉进去的陷阱,人们很容易忽略描述与规范之间的区别。

例如,当你做出两个描述 (“一辆红色的汽车”),你能测试两个东西是否符合这个描述 (“是的,它是红色的,但它不是一辆汽车”),但这不足以告诉你如何制造一辆汽车,因为制造汽车须要制造汽车的规范创造出一样东西须要做很多决定。

假如你把每两个决定的结果都写下来,就有了两个(未组织的)规范开发流程须要你做出这些决定,所以仅仅进行描述是不够的——你须要两个规范当你做出两个描述 (“它须要把文件列出来”),指出它就是两个规范,却忽略了你还须要做出其它无数个细小的决定 (“它应该以什么次序列出文件?它们应该按照自己的路线走下去吗?”)。

当你要开始写两个流程时,你不得不面对这样的现实,即你的规范实际上只是描述而已电脑不会接受类似“画两个矩形”这样的描述,它须要知道矩形应该出现在屏幕的什么地方,应该多大,应该是什么颜色的将想法变成标识符,你还须要做出很多决定,而做出这些决定须要付出很大的努力。

人们倾向于将此种努力归咎于C语言,却不愿承认这样两个简单的事实:仅给出描述是极难得到规范的4回到计算机系统上来开发软件不仅仅是理解要做什么并将其转化为标识符计算机系统本身存在一些问题,这些问题也须要流程来解决流程要能够在硬件和网络上快速运行,可能须要处理机器故障,而工具和协议的复杂性带来了更多问题。

这些问题并非是在向计算机系统解释应该做什么的操作过程中造成的,它们都是原本就须要做出解释的事情你须要在脑子里“运行”部份流程有时候,逻辑就像听故事一样容易理解,但有时候,事件次序和状态跟踪复杂到无法放在脑子里赢得运行正确的流程——或者纠正它们不正确的行为——须要了解流程在各种情况下的状态。

写标识符能将你对流程的想法具体化,但流程不会保持一成不变你会发现 bug,想要新的特性,须要改变现有的行为两个解决方案在一开始可能行得通,但这并不意味着它将一直是可行的最终,你须要花天数去预测未来,去收拾烂摊子,你会不可避免地发现自己并没有“千里眼”。

5康威运动定律假如你自己不写流程,就须要和其它人一起工作,这带来了一系列全新挑战所有参与工程项目的人都必须以某种方式组织起来,每个人都有自己的工作要做你不希望人们互相妨碍,所以必须分工合理的分工要求你对流程的结构有很好的理解,这个时候康威运动定律就有所作为了。

假如你有多个团队,事情就会变得更加十分困难每个团队都有不同的目标,因此会针对不同的事情进行强化对其它团队有利的决定可能会阻碍你顺利完成工作了解其它人的立场,并找到两个好的妥协方案,这是一项艰难的各项任务,但你必须顺利完成。

在大工程项目中,不可能有哪个团队(更不用说哪个人)能了解所有的东西,但你依然须要弄清楚如何设计系统的各个部份,并让这些部份相互配合,这比你自己做出整座设计要十分困难得多6“打破”运动定律他们能尝试找到安萨尔运动定律无法有所作为的地方。

假如个体各项任务的速率不是完全独立的——假如你能通过强化两个各项任务来大力推进另两个各项任务——所以就有可能找到对你有帮助的解决方案更好的C语言和开发环境可能是他们能加以利用的地方假如流程能由更少的人来开发——比如说两个人,而不是两个团队,或者两个团队,而不是两个部门——那就能大大地减少组织方面的开销。

假如你自己实现接口所有的标识符,就不须要通过开会来决定如何设计接口工作效率的提升不仅会降低撰写标识符的成本,还会改变工作的形式,从而降低其它各项任务的成本也就是说,这里的管制变成了你能在这条路上走多远,因为两个流程员不可能把所有跟实现业务相关的东西都装进脑子里。

迭代速率是另两个能加以利用的杠杆为了开发两个流程,你须要了解这个领域的问题和须要做出哪些决定为了顺利完成这些各项任务,你须要把收集到的所有细节都装到脑子里,然后形成两个心理模型这是一类可行的方法,但可能不是最有效的方法。

另一类方法是基于某些明显的细节建立两个小的心理模型,然后根据这个模型创建两个小流程来测试这些想法是否符合现实,并根据反馈进行迭代,每次都创建出更丰富和更准确的模型这似乎更适合人们实际的学习方式为了让此种方法奏效,你须要能够快速测试想法并赢得反馈。

理想的状态是,在你顺利完成输入后,新标识符就能开始运行通过改变开发环境来实现更慢的迭代周期,将使开发人员从第一类方法转到第二种方法,帮助他们更好地理解问题一类表达能力更强的C语言是否能有效地提高生产力,对于这一点我并不是特别乐观。

我希望的是能有更好的开发环境假如他们有更好的工具来理解现有的标识符,有更慢的开发迭代周期,繁琐的工作变得更少,就可能会改变软件的开发方式,并以一类复合而非递减的方式给他们带来回报原文链接:http://jeremymikkola.com/posts/2021_01_01_why_software_development_is_hard.html

今日好文推荐流程员的“黄金时代”,死去又重来?放弃大厂高薪的流程员,涌进体制内硅式鄙视:他们还在996,他们早已连955都不要了InfoQ 读者交流群上线啦!各位小伙伴能扫描下方二维码,添加 InfoQ 小助手,回复关键字“

进群”申请入群回复“资料”,获取资料包传送门,注册 InfoQ 网站后,能任一领取一门极客天数课程,免费滴!大家能和 InfoQ 读者一起畅所欲言,和编辑们零距离接触,超值的技术礼包等你领取,还有超值活动等你参加,快来加入他们吧!。

点个在看少个 bug👇

创业项目群,学习操作 18个小项目,添加 微信:88888  备注:小项目

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 sumchina520@foxmail.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.152668.com/1842.html

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注