软件工程≠计算机科学 之 思考

软件工程≠计算机科学

首先,这篇文章的英文比上次阅读作业的英文好懂多了

可能是因为上次的多是讲技术的,可以归类为科技英语吧,好多的词都不认识

这次更偏向于议论文吧

We need software that can be put together in a reasonable amount of time, for a
reasonable cost, that works something like its designers hoped for, and runs
with few errors.

我们需要的软件,是设计者所期望做的,把在一个适当时间内,有一个合理的成本价,也可能在运行时出现一些错误的那个东西。

我觉得翻译成“运行时几乎没有错误”比较合理吧

The question of whether a particular software system is highly maintainable
cannot be answered just by mechanically examining the software.

只是通过机械性地检查没有什么软件它回答不了的问题。 

只通过机械检查不能回答这个问题。

感觉译者估计是Google翻译了一下,然后对着修改,有些地方还是很别扭,提出上面两句,也是有意义的,下面会具体谈的

  

正式开始谈文章,我会从两方面来谈

第一方面,软件工程≠计算机科学

初看这个题目,感觉又回到了 程序=算法+数据结构 这个谈了好多次的话题上

原文从作者自身的感悟出发,作者学习算法感觉就像学习数学一样,一个概念接着一个概念的证明,每个算法都有理有据

而作者开始从事软件工程之后,却发现软件工程不像算法或者说其它计算机科学一样,反而感觉很不靠谱

软件工程一直在发展,按作者的说法,结构化编程,第四代语言,后来面向对象的编程方法,再后来又是极端编程,如今也许又是开源编程了

一直在变化,可以说是在发展中,但软件工程的发展,是发展了新的有很大的可能去推翻旧的

这跟数学或者物理或者计算机科学的发展也不一样

在我们的阅读作业中也曾谈过,各种开发模式,我们无法说哪一个开发模式是最好的

所以,最让人可以接受的理论是:

The results from disciplines below the line might be used by people, but
their results are not directly affected by people.

区别点在人,软件工程面临的对象是人,而不是理论

是人提出需求,也是人维护软件,最重要的,是人在使用软件

就说我们做的“打飞机游戏”吧

打飞机打飞机,自然最重要的是要打到飞机

那什么是打到飞机呢?

如果这是一个数学或物理题,那我们想到的肯定是求出子弹的路径,再求出飞机的路径

然后联立方程组,可以解出交点,也可以解出时间

但软件工程就不一样了,我们不用求出交点,只要随着时间轴不断的判断飞机与子弹的距离,当距离够小的就算是打上了

再举一个例子吧

比如有一个ListView,然后我们不断的收到消息,并比消息添加到ListView上显示

那我们首先想到的,肯定是收到一条,Add一次

但如果收到的很快呢?计算机的处理速度足以快到超过你的视觉暂留

于是ListView里确实在不断的增加信息,但你什么也看不见

这就是上面说到的,机械检查解决不了的问题,因为你的逻辑完全都是正确的呀

ListView也是按你的想法在Add呀,但你就是没有解决实际问题

可以说,计算机发展史的前几十年,全世界都在研究硬件

而近十几年来,软件的发展越来越重要,和受到重视,也不断的有所谓的“规范”去规范一个工程

我们不得不承认,这些“规范”对软件工程的发展起用了积极的作用

但终究到目前为止,软件工程跟“其它科学”还是有一定的区别,不能划上等号

第二方面,软件工程=计算机科学

软件工程跟计算机科学什么时候可以划等号呢?

那要我们什么来定义软件工程,以及我们如果定义计算机科学

这里的计算机科学,我就直接“偷换概念”为传统科学了,比如数学

我们去完成一个工程,完成的方法不唯一的,所以具体哪种用方法,不确定

同样的,我们去解一道数学题,答案是唯一的,但方法也不是唯一的

但这样还仅仅不够,数学题,即使我的方法不好,解出来了,也就可以算OK了

但软件工程不是,我做出了一个软件,我还得维护,即使我功能都做全了,还要易于用户操作

所以,这样想,软件工程因为人的参与还是与普通科学不一样

但这里还有一个问题,数学题是需求明确的

给出条件,求解

而软件工程不一样,我们首先要做需求分析,然后写设计文档,然后写代码,写用户手册

当然,你也可以说你要敏捷开发

我只是想如果把说明软件工程比作一道题目,但题目连题干都没有,如果有“科学”的方法去求解呢

那么,如果题意清楚呢?

我们需要的软件,是设计者所期望做的,把在一个适当时间内,有一个合理的成本价,鲁棒性很强的软件

那么,我们清楚的知道了我们的现有条件,比如工作人数、工作时间、工作效率等等,以及对鲁棒性、可维护性、可扩展性的等等要求

我们是不是可以去选择一种最合适的方案去开展工作呢?

其实我觉得这个问题没有太多争执的必要,如果软件工程没有其科学性的话

还有必要专门开一门叫软件工程的课吗,OO的发展、软件开发模式的发展一点意义都没有了,大家干脆每次都凭感觉走吧

综上所述,或许软件工程≠计算机科学,但软件工程必然是科学的

如何开发软件是不确定的

但如何开发一个软件,我想应该还是可以确定的

转载于:https://www.cnblogs.com/buaashine/archive/2012/12/07/2806382.html

猜你喜欢

转载自blog.csdn.net/weixin_34408624/article/details/94548455
今日推荐