• 成功的程序,成功的软件,成功的软件企业——软件工程第一章第四题 范世良


      首先想要讨论ACM比赛的程序是否是软件,我们需要先知道什么是软件。摘录了来自维基百科的软件定义:

      Computer software includes computer programs, libraries and related non-executable data, such as online documentation or digital media.

      在这个定义里面,明确说明了软件是指计算机程序和库也就是ACM比赛写出来的代码,还有不可执行文件,例如软件说明文档或者数字媒体。后面这部分是ACM比赛程序所没有的,所以我认为我们无法将ACM比赛程序定义为软件,那应该仅仅就是程序。

        

      那么写程序跟写软件的区别在哪里?个人理解为这两者的关注点不一样。依照维基百科定义,程序是:

      A computer program is a collection of instructions that performs a specific task when executed by a computer.

      也就是说程序的目的是可执行,可以实现该程序需要实现的结果。这里会涉及算法思想,数据结构,编程语言等问题。但是对于写软件,软件不仅仅由程序组成,还包括程序运行所需的所有组件及文档。因此写软件应该是包括写程序的。总结一下。软件是一个比程序更加宏观的一个词,两个不等价。

           在Dijkstra的话中,”how to program if you cannot”这里的cannot不是指不会写程序,而应该是指不会按照一定的规范去开发软件。个人认为这就好比训练士兵去打仗,如果士兵不会打枪,无论战术多么高明,都无法达到胜利的目标。这里士兵不会打枪就好比不会写程序。所以,想要取得胜利,前提是士兵需要会打枪,再加上严格的训练,让士兵之间形成默契的配合,辅以高明的战术,才可以取得漂亮的胜利。所以我认为会写程序是开发软件的前提。学会遵循软件工程的规范去开发合作,是写好好软件的前提。软件工程应该是关注后者。

           链接中提到的游戏开发团队做了很优秀的游戏,也进行了相应的商业推广,结果却是游戏销量不好。我自己是一个游戏爱好者,本科的时候经常跟室友一起玩游戏,单机到网游。当时有个游戏叫“天天酷跑”特别的火爆,从我的角度,我认为那款游戏非常的无聊。不过一次偶然的机会,我发现这款游戏这么火爆的原因是人们工作,上下班的时间,人手一部手机,没有事情做的时候,这款游戏成了消磨时光的好方法。所以我认为软件对于目标用户的确定及需求的分析是非常重要的。

  • 相关阅读:
    Windows系统批处理命令实现计划关机
    Git如何将本地test分支设置跟踪origin/test分支
    JavaScript动态实现div窗口弹出&消失功能
    深入理解 Array.prototype.map()
    JS中集合对象(Array、Map、Set)及类数组对象的使用与对比
    Vue的移动端多图上传插件vue-easy-uploader
    如何开发一个npm包并发布
    emlog编辑器探寻之旅
    linux下安装nginx
    原生JavaScript中动画与特效的实现原理
  • 原文地址:https://www.cnblogs.com/Tteam/p/5861811.html
Copyright © 2020-2023  润新知