.

为什么软件开发编程这个工作这么难

白癜风公益惠民活动 http://baidianfeng.39.net/a_yufang/240412/a1oelip.html

有人认为好的编程语言可以减轻软件开发人员的负担,相应提高他们的效率。

毫无疑问,在很久以前的汇编和Fortran时代是这样的。然而,现在的编程语言已经足够好了,我们仍然面临一些其他的困难和挑战。现在很多开发者认为编程的难度还是很大的,但是这些难度与编程语言无关,原因如下。

阿姆达尔定律

这个定律的数学公式是:假设某个东西的总时间比是p,你永远得不到大于1/(1–p)的加速度比。假设这部分工作占用了90%的时间,即p=0.90。在优化过程中,如果这部分时间减少到0,整体工作速度将提高1/(1–0.90)=10倍。

阿姆达尔定律的关键在于,你能达到的最大速度提升受到优化工作比例的限制。

编程难的原因有很多。简单来说,我们可以认为这是因为我们需要处理的工作必须按照一定的顺序来完成。毕竟人类不太擅长多任务处理。在某个时间点,您可能正在使用构建工具、阅读文档、编写代码或参加会议。当然,你在会议中无私地写代码是可能的,但你只能做同样的工作,不能同时有写代码和开会。因此,我们可以应用阿姆达尔定律,假设你能设法把施工时间减少到0,但工程的整体速度只能加快一点点。你的工作效率还是会受到其他因素的限制。

曾经,很难将程序转换成计算机可以运行的代码。很久以前,我们甚至需要把程序转换成1和0,然后不厌其烦地输入电脑。我不知道要花多少时间,但是我们可以假设这个工作占用了90%的编程时间。这意味着,如果我们能找到更好的方法(比如Python)来告诉计算机做什么,我们可以提高10倍的编程效率。

但是,现在我们的编程语言越来越好,告诉计算机做什么用的时间越来越少,把程序变成代码用不了90%的时间。现在假设我们只需要10%的时间。这意味着,即使这部分工作的时间降为零,效率也只能提高1.11倍。效率提升降低81倍。

这是因为剩下的90%的软件开发工作是一项非常艰巨的任务,再好的编程语言也无法(直接)减轻我们的负担。

为什么编程这个工作这么难?

传达需求

首先,你必须掌握所有的实用细节;其次,你必须知道程序在每种情况下应该做什么;此外,你必须以你的朋友能理解的方式传达所有的信息。这意味着你必须有条不紊地组织信息,以确保它易于理解。

描述和规格

写程序的时候,你得到的规范往往只是一个描述。计算机不能“画一个矩形”,它必须知道这个矩形的显示位置、大小和颜色。在写这段代码的时候,你会发现很多还没有做出的决定。这些决定需要很多努力。我们经常会把这些作品的成因搞错,归咎于编程语言,但实际上这只是因为我们很难根据一个描述来创建一个规范。

计算机本身

接下来,回到电脑。开发软件不仅仅是知道软件应该做什么,把各种想法变成代码。计算机本身有许多程序必须解决的问题。你的程序必须在硬件和网络上快速运行。这个程序需要处理机器故障。工具和协议的复杂性导致该领域出现更多问题。这些困难不是向计算机解释做什么的过程造成的。它们也是需要解释的事情。

此外,你需要在你的头脑中运行某些程序。有时候逻辑很好理解,但有时候你无法把一系列事件和状态塞进脑子里。为了正确理解程序的详细信息,在出现错误的情况下修复程序,你需要知道程序本身在各种情况下的状态。

编写代码的过程可以让你清楚地了解程序是如何工作的。但是,程序永远不会停止变化。您将发现错误、添加新功能或修改现有行为。即使程序最初的组织非常有效,也不意味着它的结构总是正确的。你需要花时间结合各种情况,考虑未来的需求,以及在意想不到的事情发生时收拾残局。

人事合作

所有队员都必须履行自己的职责。为了不干扰彼此的工作,你们必须分工。为了建立合理的分工,首先你需要知道程序的结构。

每个团队都有不同的目标,所以你要权衡各方面。有时候,一个决定对其他团队非常有利,但会阻碍你的工作。设身处地为他人着想,找到一个合理的妥协方案,是一件非常困难的事情,但是必须要做。

在大型项目中,没有一个团队能够理解整个系统,但是需要弄清楚系统的各个部分是如何设计的,以及它们是如何组织在一起的。

如何解决软件开发的外部问题?

我们可以寻找一些不受阿姆达尔定律限制的方法。如果每个任务的速度不是完全独立的(比如优化一个任务可以加快另一个任务的速度),我们可以希望通过技术方案来改善这个问题。

我们需要一个更好的语言和开发环境。如果我们可以用更少的人编写程序,我们就可以大大缩小组织的规模。如果界面的前后台都是同一个人写的,就不需要开会讨论了。生产力的提高不仅可以降低写代码的成本,还可以改变工作方式,从而降低其他工作的成本。即便如此,这种方法也有局限性,因为程序员无法将所有的业务都融入到他们的头脑中。

迭代速度是另一个杠杆。为了写一个程序,你需要知道领域知识和你需要做的决定。要做到这一点,你需要知道所有的细节,然后建立一个心智模型。这种方法虽然可行,但不一定是最有效的。还有一种方法是基于一些显而易见的细节来构建一个小的心智模型。然后,根据这个模型创建一个小程序,实际验证这个思维模型。然后根据反馈进行迭代,这样每次创建的模型会更加丰富和准确。这种方法似乎更好,因为它更符合人的学习过程。为了保证这种方法的有效性,你需要快速测试并获得反馈。理想情况下,输入代码后,新代码会立即开始运行。改变开发环境,实现更快的迭代周期,可以让开发人员从第一种方法转变到第二种方法,从而帮助他们理解问题。




转载请注明:http://www.abachildren.com/jbzs/7603.html