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


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

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

  • 相关阅读:
    win10下python环境变量设置
    c++ primer第15章这几个例子中的构造函数形式不太理解
    ++与*
    C++符号优先级
    56-Remove Linked List Elements
    55. Binary Tree Preorder Traversal
    54. Flatten Binary Tree to Linked List
    野指针--内存泄漏--缓存区溢出--栈溢出
    数组指针和指针数组的区别
    53-Linked List Cycle II
  • 原文地址:https://www.cnblogs.com/Tteam/p/5861811.html
Copyright © 2020-2023  润新知