您现在的位置是:首页 > 正文

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

2024-01-30 22:23:21阅读 0

软件工程≠计算机科学

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

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

这次更偏向于议论文吧

 

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

网站文章

  • 用电脑开热点启用电脑无线配置

    用电脑开热点启用电脑无线配置

    电脑系统打开热点,不用安装360也能用电脑给手机开热点,给多电脑开热点无线。

    2024-01-30 22:23:16
  • 【算法竞赛学习】数字中国创新大赛智慧海洋建设-Task3特征工程

    智慧海洋建设-Task3 特征工程此部分为智慧海洋建设竞赛的特征工程模块,通过特征工程,可以最大限度地从原始数据中提取特征以供算法和模型使用。通俗而言,就是通过X,创造新的X’以获得更好的训练、预测效...

    2024-01-30 22:22:46
  • 进阶面向对象

    进阶面向对象

    对象是具体的事物,拥有所属类中描述的一切属性和行为。类是一种模型,这种模型可以创建出不同的对象实体。一个类可以有很多对象,而一个对象必然属于某个类。类用于抽象的描述一类事物所特有的属性和行为。将日常生...

    2024-01-30 22:22:39
  • 沈阳师范大学大一上册C语言PTA题目集以及答案(第六章 指针 编程题篇)

    沈阳师范大学大一上册C语言PTA题目集以及答案(第六章 指针 编程题篇)7-1 输出学生成绩 (20分)本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态...

    2024-01-30 22:22:32
  • 常用的CMD命令+Python

    cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd或cd ~ 返回home目录 cd - 目录名 返回指定目录 输入“cd\”敲回车会直接退回到当前盘根目录 在CMD程序里输入“d:”...

    2024-01-30 22:22:23
  • 远程服务和web服务和前端,三方通过socket和websocket进行双向通信传输数据

    在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。WebSocket是一种网络通信协议,是HTML5新增的特性,实现了基于浏览器的远程socket,使浏览器和服务器可以进行全双工通信。

    2024-01-30 22:21:55
  • RIPng配置(GNS3)

    RIPng配置(GNS3)

    1、拓扑图2、配置路由器(R3为例)给每个路由器配置RIP 1在每个路由器中对相应的接口配置相应的ipv6地址并将每个接口配置RIP 1 enable给R3的f0/0接口配置宣告默认路由给ISP配置静态路由3、测试网络连通性PC-1 ping PC-2 PC-4和外网PC-2 ping PC-1 P...

    2024-01-30 22:21:47
  • 多功能呀哩盒子iApp源码

    多功能呀哩盒子iApp源码

    多功能Iapp源码 – 上百种功能集成,简洁实用,适合游戏、动漫、漫画、小说等应用这款Iapp源码拥有上百种功能,包含游戏、动漫、漫画、小说等多种应用。其简洁实用的设计,使得它能够轻松地整合不同的功能...

    2024-01-30 22:21:39
  • 安卓基础:内容提供者ContentProvider

    一、基本概念 内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能, 它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访数据 的安全性。 二、自定义内容提供者实现增删改查 1、创建一PersonProvider继承ContentProvider,实现六个方法,增删改查以及onCreate和getType。(因篇幅限制,

    2024-01-30 22:21:09
  • 漫谈程序员系列:快来约这些女生,保你脱单

    漫谈程序员系列:快来约这些女生,保你脱单

    快来勾搭这几类女生,保你脱单……

    2024-01-30 22:21:03