为什么软件开发对于普通人而言这么难?怎么破?

在大众的眼里,都认为编程的难度非常大,其实对于编程语言而言,其中的难度差异并不是很大,每个语言都有自己优势和劣势的地方,但有一个难点是所有编程人员共同的问题:软件开发的难点。

本期就和大家一起来说说,如软件开发的难点,希望能够通过下面说的这些问题,帮助小伙伴即使解决自己的困难。

不少人都认为,一款好的编程语言可以使开发者在工作时事半功倍,帮助他们快速解决问题,毫无疑问,这一点在很久前的汇编与 Fortran 时代确实如此。现如今编程语言已经逐渐发展成熟,但编程者仍旧需要面临一些困难和挑战。但和编程语言无关,原因来自于以下几点。

01、阿姆达尔定律

作为编程人员,在需要执行一系列任务时,我们不禁会想起阿姆达尔定律:在计算机的处理器和内存之间,改变其中一个都可能让计算机速度性能得以大幅提升,但是,很多人都在该提升内存的时候,去提升了处理器,结果就是,花了最大最好的资源,却没有起到最好的效果。

举个例子来说,就是当你想要吃面时,把水烧开需要十分钟,煮面条也需要十分钟,即使你找到方法加快了烧水的方法,做饭的时间也不会减少到十分钟之下,也不可能烧面的速度提高两倍。

这就是阿姆达尔定律想要告诉我们的关键:你能够获取的最大速度提升受限于优化的工作所占的比例。

通过这个定律我们来对应着看编程工作会发现,造成工作难度大的原因有很多,首先,我们的工作需要按照一定的顺序完成,毕竟同时间做不同的事情很有可能导致每一件事情都做的乱七八糟的结果。

比如,每天的上班时间9点,你可能在尽情的敲代码、构建或是参加会议,但是你只能同时做一件事,不可能边敲代码边开会,我们将定律套入会发现,即使设法将构建时间降到0,但是并不会快速提升你的项目速度,其他的因素仍旧会限制你的工作效率。

就拿我们之前的例子来说,当编程语言还没有如今发展的这么成熟时,将程序转化成计算机可以运行的代码是一件十分困难的事情,甚至很久以前,我们需要将程序转化未1和0,然后手动将其输入计算机,这需要耗费我们在工作中的大量时间。

如果我们能够找到更有效率的方法(比如Python)来命令计算机,那么将大大的提高我们编程的效率。正如我们现在,编程语言发展越来越好了,不需要像以前一样使用傻瓜式操作,以前花费90%的时间的操作,现在只需要10%的时间就可以完成了,这意味着如今即便将这部分工作的时间降至0,也只能提高1.11倍的效率。效率提升比以前减少了81倍。

但是由于90%的软件开发工作都是非常困难的任务,而编程语言只占了其中的一部分,所以即使其再好也不能(直接)减轻我们的负担。

02、为什么编程的工作还是这么难?

传达需求

上述我们分析了,编程工作难其实和编程语言的关系不大,那编程的工作具体难在何处呢?这里用一个实验来告诉大家,首先假设我们不用计算机需要干什么,而是将一件需要做的事情告诉你的朋友,为你的朋做下所有的决定。

有没有发现,你需要花费大量的时间才可以向你的朋友解释清楚所有的背景信息,他需要了解程序处理的现实问题以及你需要提供哪些功能。你必须解释清楚所有的内外部因素。并且其中会发生的突发情况和需要处理的细节特别多。

同时,你还需要考虑不同组件的两两结合以及用户可能会尝试的各种操作以及会发生的事件,这些都需要你清楚的告知你的朋友。其中的难点不限于,你需要掌握所有的实际细节,并且通过朋友能够理解的方式来传达所有的信息等

而到目前为止,我们还没有谈及计算机以及编程语言,理解需求等,这些都是更为艰巨的任务。

描述与规格

描述和规格并不是十分容易区分,我们时常会踏入其的思维陷阱。如果你只有一段描述(“红色汽车”),则你可以测试实际情况是否符合该描述(“是红色,但不是汽车”),但是这段描述并不足以传达如何制造一辆汽车。而这就是规范的用途。

在编程时需要做很多的决定,只是单单的记录下决策的结果,你就会得到一份杂乱无章的规划,所以在编写程序的时候,仅凭描述并不能很好的帮助你完成编程的工作,你需要一份规范。

在看到一段描述(“列出文件”)时,我们很容易认为这是一个规范,因此我们觉得应该能够告诉计算机执行该动作。但实际上,这中间有大量的决定需要考虑(“文件应以什么顺序列出?每个文件一行吗?”)

在我们编写程序的时候,规范往往只是一段描述,计算机无法知道“绘制矩形”,但是如果它不知道这个矩形的位置、大小等主要因素,它就无法运行,所以在编写代码的时候,你会发现很多尚未完成的决定,这也是为什么我们经常会产生错误的原因,我们很难根据一段描述创建规范。

03、如何解决软件开发的外在难题?

最快的解决方法是,我们可以寻找一些不受阿姆达尔定律限制的方法,如果任务之间的速度不是完全独立的(比如优化一个任务能够加快另一个任务的速度),那我们就可以考虑从技术方面入手解决这个问题。

在编程的时候,更好的语言和开发环境往往可以大大的加快效率,更少的人编写程序则可以减少组织规模。因为如果都由同一个人来编写接口的前后台,就可以削减沟通效率,不仅可以降低编写代码的成本,同时改变了工作的方式,还能降低其他的工作成本。

迭代速度是另一个杠杆。你需要了解所有的细节,然后建立一种思维模式。或者可以根据一些显而易见的细节,构建一个小型的思维模型。最后根据这个模型创建一个小程序,并验证这个思维模型,这样每次的编程过程都会为你累积模型,你的模型也会越来越丰富,越来越准确。

不过为了确保这种方法的有效性,你需要快速测试并获得反馈理想状态是在输入完代码后,新的代码就立即开始运行。改变开发环境,实现更快的迭代周期,可以让开发人员从第一种方法转变成第二种,从而帮助他们理解问题。

04、写在最后

更好的编程语言是否能够快速的提高工作效率于生产率?笔者认为相比而言,出现更好的开发环境的几率更大一些,作为一个优秀的编程者,我们需要做的是通过更好的工具来理解现有代码,实现更快的开发迭代周期,减少傻瓜式的劳动,

从多方面改进我们的工作,就有可能改变软件开发的方式。

相关文章

为什么都说Python简单,但我觉得难?

Python普遍被大家认为是编程语言中比较简单的一种,但有一位电子信息的学生说自己已经学了C语言,但仍然觉得Python挺难的,感觉有很多疑问,像迭代器、装饰器什么的……所以他提出疑问:Python真...

聊聊python的入门,真的很难吗?其实不一定哦!

Python 入门基础:从几个常用命令开始如果你是刚接触 Python 的新手,可能会觉得编程有点复杂。其实,Python 的语法很简单,只需要掌握一些常用命令,就能轻松实现很多功能。下面我们用几个小...

Python基础较难理解的15个知识点 python最难的部分

对于很多初学者来说,Python是一门入门相对简单的编程语言,但其中却隐藏着一些较难理解的知识点。今天,我们就来扒一扒Python中那些可能让你抓耳挠腮的15个知识点,帮助你更好地掌握这门语言,打下坚...

Python分析数据难吗?某科技大学教授说,很难但有方法就简单

用python分析数据难吗?某科技大学的教授这样说,很难,但要讲方法,主要是因为并不是掌握了基础,就能用python来做数据分析的。所谓python的基础,也就是刚入门的python学习者,学习的基础...

有人说,Python比C语言难?该怎么反驳

记得我第一次学编程语言,是本科时的C语言选修课程,当时的感觉是编程真的好复杂,什么指针、断言、动态分配等各种概念,完全搞不懂啊。后来哼哧哼哧考了个七十多分,算是过关了。后来知道C是偏硬件的编程语言,主...

python好不好学? python好学嘛

入门都不难,学好了都不易...