软件开发 为什么你的编程语言会越来越受欢迎?(深度好文)
发表时间:2023-09-09 16:00:30
文章来源:炫佑科技
浏览次数:207
菏泽炫佑科技
软件开发 为什么你的编程语言会越来越受欢迎?(深度好文)
出品| CSDN(ID:)
有人认为,好的编程语言可以减轻软件开发人员的负担,并相应提高他们的效率。
这在很久以前的汇编和时代无疑是正确的。
然而,既然编程语言已经足够好了,我们仍然面临着一些其他的困难和挑战。 如今,许多开发人员认为编程仍然很困难,但这些困难与编程语言无关。 原因如下。
阿姆达尔定律
当我们需要执行一系列任务时,我们会想到阿姆达尔定律。 该定律告诉我们,通过加快一项任务所能获得的总体速度提升是有硬性限制的。
假设水烧开需要10分钟,然后煮面条需要10分钟。 即使你找到了更快烧水的方法,煮饭的时间也不会少于10分钟。 无论炉子的功率有多大,都无法使烹饪速度提高一倍。
该定律的数学公式是:假设某个事物的总时间比率为 p,则永远无法获得大于 1/(1 – p) 的加速比。 假设这部分工作占用了90%的时间,即p=0.90。 在优化过程中,如果这部分时间减少到0,则整体工作速度将提高1/(1 – 0.90) = 10倍。
阿姆达尔定律的关键在于,您可以获得的*大速度提升受到优化工作比例的限制。
编程如此困难的原因有很多。 简单地说,我们可以认为这是因为我们需要处理的工作必须按照一定的顺序完成。 毕竟,人类不太擅长同时处理多项任务。 在某个时间点,您可能正在使用构建工具、阅读文档、编写代码或参加会议。 当然,你也可以在开会的时候无私地写代码,但是你只能做一份工作,不能同时写代码和参加会议。 所以我们可以应用阿姆达尔定律,假设你可以设法将构建时间降低到 0,但项目的整体速度只会快一点。 您的生产力仍然会受到其他因素的限制。
曾几何时,将程序转换成计算机可以运行的代码是非常困难的。 很久以前,我们甚至需要将程序转换成1和0,然后不厌其烦地输入到计算机中。 我不知道这需要多少时间,但我们可以假设这项工作占用了 90% 的编程时间。 这意味着,如果我们能找到更好的方法(例如)告诉计算机要做什么,我们可以将编程效率提高多达 10 倍。
然而,现在我们的编程语言越来越好,我们花在告诉计算机做什么的时间越来越少,将程序转换成代码并不需要90%的时间。 假设现在我们只需要 10% 的时间。 这意味着即使这部分工作的时间减少到0,效率也只能提升1.11倍。 效率提升较之前降低81倍。
这是因为剩下的90%的软件开发工作是一项非常艰巨的任务,无论编程语言有多好,都不能(直接)减轻我们的负担。
为什么编程还是这么难?沟通需求
我在这里所说的编程困难实际上与编程语言无关。 为了找出原因,想象一下我们根本不使用计算机。 你不需要告诉计算机做什么,但你需要告诉你的朋友做什么。 不要欺骗或告诉你的朋友自己处理,你必须为他们做出所有决定。
您可能会发现需要花费大量时间来解释关键背景信息。 您的朋友需要了解该程序需要处理的现实问题,以及您认为该程序应该提供哪些功能。 您必须解释所有首字母缩略词和术语,还需要讨论各种外部因素。
你的朋友需要了解所有可能的情况,并且有很多细节需要处理。
同时,还需要考虑不同功能的状态组合、用户可能尝试的各种操作以及所有可能发生的事件。 你需要和你的朋友讨论很多极端的情况。
向你的朋友解释这一切有几个困难。 首先,你必须掌握所有实际细节; 其次,您必须了解程序在每种情况下应该做什么; 第三,你必须以你的朋友能够理解的方式传达所有信息。 这意味着您必须有序地组织信息以确保易于理解。
请注意,到目前为止我们还没有提到计算机,当然也没有提到编程语言。 理解需求、掌握程序应该做什么、组织演示都是非常困难的任务。
描述和规格
人们很容易混淆描述和规格之间的区别,这是我们经常陷入的心理陷阱。 如果只有描述(“一辆红色汽车”),则可以测试实际情况是否与描述相符(“是红色软件开发 为什么你的编程语言会越来越受欢迎?(深度好文),但不是汽车”),但描述不足以传达如何建造汽车。 这就是规格的用途。
创造事物需要做出很多决定。 如果你记录每个决定的结果,你就会有一个(杂乱的)规范。 当你编写程序时,你需要做出这样的决定,所以仅仅描述是不够的,你需要一个规范。 当我们看到描述(“列表文件”)时,很容易假设这是一个规范,因此我们认为我们应该能够告诉计算机执行该操作。 但实际上,有大量的决定需要考虑(“文件应该按什么顺序列出?每个文件一行?”)
编写程序时,您获得的规范通常只是一个描述。 计算机无法“画矩形”; 它必须知道矩形出现的位置、大小和颜色。 当您编写此代码时,您会发现许多尚未做出的决定。 做出这些决定需要付出很大的努力。 我们经常错误地把这些问题的原因归咎于编程语言,但这只是因为很难从描述创建规范。
计算机本身
接下来,我们来谈谈计算机。 开发软件不仅仅是理解软件应该做什么并将想法转化为代码。 计算机本身也有很多问题需要程序来解决。 您的程序必须在硬件和网络上快速运行。 该程序需要处理机器故障。 工具和协议的复杂性导致该领域面临更多问题。 这些困难都不是在向计算机解释要做什么的过程中产生的;而是在向计算机解释要做什么的过程中产生的。 它们也是需要解释的事情。
另外,您需要在头脑中运行某些程序。 有时逻辑很容易理解,但有时您无法理解一系列事件和状态。 为了正确理解程序的细节并在发生错误时修复它,您需要了解程序本身在各种情况下的状态。
编写代码的过程可以让你清楚地掌握程序是如何工作的。 然而,程序永远不会停止变化。 您将发现错误、添加新功能或修改现有行为。 即使程序*初是以非常有效的方式组织的,但这并不意味着它的结构总是正确的。 你需要花时间整理情况,考虑未来的需求,并在意外发生时收拾残局。
人员合作
很多时候,我们需要和其他人协作来编写程序,这也会带来挑战。
所有团队成员都必须履行自己的职责。 你必须分工,这样他们才不会妨碍彼此的工作。 为了建立合理的分工,首先需要了解程序的结构(参见康威定律)。
如果有多个团队,情况会更加复杂。 每个团队都有不同的目标,所以你必须权衡各个方面。 有时一个决定对其他团队非常有利,但却阻碍了你的工作。 设身处地为他人着想并找到合理的妥协是一项艰巨的工作,但这是必须要做的。
在大型项目中,没有一个团队,更不用说一个人,能够理解整个系统。 然而,您仍然需要弄清楚系统的各个部分是如何设计和组织在一起的。 这比自己承担整个设计还要困难。
虽然与人合作并不是真正的编写代码,但它是开发软件的一个非常重要的部分。
如何解决软件开发的外部问题?
我们可以寻找不受阿姆达尔定律限制的方法。 如果各个任务的速度不是完全独立的(例如,优化一项任务可以加快另一项任务的速度),我们可以希望通过技术解决方案来改善问题。
我们需要更好的语言和开发环境。 如果我们能够用更少的人来编写程序(例如两个人可以替代整个团队,或者一个团队可以替代一个部门),我们就可以显着缩小组织的规模。 如果界面前后端是同一个人写,就不需要开会讨论。 生产力的提高不仅降低了编写代码的成本,还改变了工作的完成方式,从而降低了其他工作的成本。 话虽如此软件开发,这种方法也有局限性,因为程序员无法将所有业务都记在脑子里。
迭代速度是另一个杠杆。 为了编写程序,您需要了解领域和需要做出的决策。 为此,您需要了解所有细节,然后建立心理模型。 虽然这种方法有效,但可能不是*有效的。 另一种方法是根据一些明显的细节建立一个小的心理模型。 然后,根据这个模型创建一个小程序,并实际验证这个心理模型。 然后根据获得的反馈进行迭代,使您创建的模型每次都变得更丰富、更准确。 这种方法似乎更好,因为它更符合人们的学习过程。 为了确保这种方法有效,您需要快速测试并获得反馈。 理想的情况是输入代码后,新代码立即开始运行。 更改开发环境以实现更快的迭代周期可以使开发人员从**种方法转向第二种方法,从而帮助他们理解问题。
更具表现力的编程语言能否显着提高生产力? 我不太乐观。 不过,我认为更好的开发环境还是有可能的。 如果我们能够使用更好的工具来理解现有代码,实现更快的开发迭代周期,减少繁琐的“手工”劳动,那么就有可能改变软件的开发方式,并在很多方面改进我们的工作。
炫佑科技专注互联网开发小程序开发-app开发-软件开发-网站制作等