现代软件工程—构建之法》第一章 中出现的计算机专业术语
- 软件
- 程序
- 软件工程
4.二叉树
5.遍历算法
6.数据结构
7.算法 - 应用软件
- 软件服务
- 源程序
- 软件架构
- 软件设计与实现
13.依赖关系
14.编译参数
15.链接参数 - 构建
- 源代码管理
- 配置管理
- 质量保证
- 软件测试
- 需求分析
程序理解
- 软件维护
- 服务运营
- 软件的生命周期
- 软件项目的管理
- 用户体验
- 国际化和本地化
API
30.用户界面设计
31.计算理论
32.信息和编码理论
33.算法和数据结构
34.形式化方法
35.程序设计语言
36.计算机体系结构
37.并行计算和分布式系统
38.实时系统和嵌入式系统
39.操作系统
40.计算机网络
41.科学计算
42.安全和密码学
43.人工智能
44.模式识别
45.机器学习
46.数据挖掘
47.信息提取
48.计算机图形学
49.计算机视觉
50.多媒体
51.数据库和大规模数据处理
52.万维网
53.自然语言处理和语言
54.人机交互
55.冒烟测试
我提出的问题
1.我看了
- 我上班后,发现以前同事写的程序真是垃圾,根本看不懂,无法维护。我要推翻重写!后来一个老员工笑嘻嘻地告诉我,我们现在看到的程序,就是去年的新员工愤怒地推翻重写之后的结果,大家反映还没有以前的版本好用呢。
我对这段话所表达的意思有异议,因为这个新员工可能因为个人习惯不好或者编程能力不够,或者时间不足导致等出现了各种各样的问题,可这不代表未来的人重写的结果是怎么样,这个老员工很明显就是在警告这个新人,这完全是先入为主的想法,而且,我以前看过别人公司的项目,也不知道是什么时候开始写的了,里面的函数、类没有注释,并且结构混乱,有一些内容已经没有必要存在了,可是对于新人来说却无法做处理,所以这些老项目很可能真的有这些问题。第二,最后这句“还没有以前的版本好用呢” 意思是说新员工新完成的项目需要一步到位,虽然以前的很难维护,可它是经过好几代的修复bug,而新建的项目自然会有一些问题,难道以前的项目刚做出来时大家就没有怨言吗?满足所有人的要求,那可真是太难了。
然后根据我的经验,面对像这种从开始或者经过很多次修改导致项目更难维护,此时应该做软件重构,而不是推翻一切重写,因为那样太浪费精力和时间。
2.我对 源代码管理 不理解,书中的内容是
有些时候,我们要为了每个需求写一些特殊功能,不久后又要把这些功能在合并会主要版本。有些程序要配置不同的界面,运行在中文、英文或者其他语言的操作系统上;有些程序还有32位版本、64位版本等。
在 有些时候,我们要为了每个需求写一些特殊功能,不久后又要把这些功能在合并会主要版本。 这里我还是理解的,这个我在使用GitHub 或者git 时就会知道有时候会创建一些分支,当这些分支完成时便可以合并到主分支中。但是后面的 配置不同的界面 不涉及到分支的问题,还有后面的,一般都是通过 xml 或者 conf 等的配置文件完成这些设置,这只是一种配置程序兼容性时所使用的方法,无法理解这和源代码管理有什么关系。然后我通过 www.baidu.com 搜索 源代码管理 定义 找不到与之相关的信息,和 源代码管理 相关的也都是一些git 等软件相关的。不过我所不理解的问题倒是和 配置管理 有关。
3.我对 职业道德规范 不理解,因为我不知道这个道德规范的界限在哪里,何为道德,何为不道德。如果一个软件侵犯了用户的利益,比如个人隐私泄漏造成财产损失、名誉损失,这里完全可以通过法律诉讼来解决。以书中举的例子,限制用户安装其他软件,制作软件的公司应该也可以有自己的选择吧,如果说这种行为让用户很不爽,或者说浪费用户时间,很多软件也在未经过用户的统一的情况下展示广告,难道这也是不道德的吗?
4.我对第9页的软件工程的难题中的第二个复杂性 的“ 而软件工程师的肉眼通常一次只能看到30-80行源代码(相当于显示器的一屏)“的表述不太同意,虽然只能看到30-80行,但是现代IDE 提供hierarchy (层级浏览),或者文件大纲,再加上工程师的记忆力,而且只要记住关键点,这些方法都能够让工程师对自己所操作的部分有更高的把握。
5.我对第9页的软件工程的难题中的第五个“非连续性” 的解释有异议,现代软件需要拥有的特性就是提供给用户反馈,不管用户做了什么,需要提醒用户当前的操作是无效的,或者不支持当前操作,不能什么都不做,比如按下按钮,需要通过按钮的变化告诉用户你的操作确认了,等待完成就好了,并且这个操作也应该是立即的,如果是个耗时操作那就应该是线程了。如果一个软件进行了操作,一个软件,一个系统,却没有任何输出,包括视觉输出,那用户是很不乐意使用这个软件的。
6.在第14页引用的费曼的话,
你可以知道一种鸟的名字在全世界各种语言怎么说,但是说完之后,你还是不了解这个尿。所以我们要观察这个鸟的行动--这才是最重要的。
这句话好像就是说,我饿了,喝了一杯水,还是饿一样。
我选择的软件
1.这些软件的开发者是怎么说服你(陌生人)成为他们的用户的?他们的目标都是盈利么?他们的目标都是赚钱用户的现金么?还是别的?
- 王者荣耀 游戏 并没有谁说服我,最早接触的MOBA 的是英雄联盟,然后身边的同学开始玩王者荣耀,自己慢慢也开始玩了。目标是盈利,目标是赚取用户的现金,并不展示广告。
- Macro Droid 手机应用,没有人说服,自己想要找类似的软件而已。目标应该是盈利,并不展示广告,不过免费版的功能受到限制,想要破除限制,需要购买。
- draw.io web 软件 一个在线作图的软件,不盈利,没有广告
2.这些软件是如何到你手里的(邮购,下载,互相拷贝....)?你当时上几年级?你对这个软件的感觉如何?
- 王者荣耀 下载,大一,挺好的
- Macro Droid 手机应用 下载,大二,当时还不太会用,后面一段时间都没有再继续使用,等到大三时又重新下载了这个软件。
- draw.io web 软件,在手机上的浏览器使用的话体验很不好,如果是电脑的话,挺好的,没有广告,功能挺全的,当时是大二
3.这些软件是如何处理bug 的?又是如何更新版本的?
- 王者荣耀 用户发现bug 应该会告诉腾讯,然后再下个版本中就会更新了吧。
- Macro Droid 上架在Google Play 上,用户可以通过评论的方式告诉开发者,然后再下个版本中更新。
- draw.io 因为不需要下载,直接在网络上使用,所以用户可能不知道发生了更新
4.同一类型的软件之间是如何竞争的?
- 王者荣耀 虽然MOBA 类的手机游戏有很多,但腾讯腾讯本来就有大用的用户,同时作为MOBA 游戏,游戏模型构建的更好,作为在线游戏严格管理作弊问题也会让这款游戏有竞争力。
- MacroDroid 虽然有类似的软件,但是还没有说ui,操作有这款软件好的。因为这本来就是一个小众软件,不太可能会有很大的市场,用户为此花的钱也不会很多。