前言
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 课程社区 |
这个作业的要求在哪里 | 作业要求 |
我在这个课程的目标是 | 学习软件开发过程 |
这个作业在哪个具体方面帮助我实现目标 | 了解软件开发的基本过程 |
阅读与提问
-
如何客观全面地评价一个软件是一个好的软件?有哪些因素。
什么是好的软件?一些同学认为,所谓好软件,就是软件没有缺陷(Bug),所谓软件工程,就是把软件中的Bug都消灭掉的过程。这的确是抓住了软件工程的一个要素。和软件打交道的专业人都知道软件有“Bug”,软件团队的很多人都整天和Bug打交道,Bug的多少可以直接衡量一个软件的开发效率、用户满意度、可靠性和可维护性。
诚然,Bug的多少的确是衡量一个软件好坏的重要因素,但是除此之外还有什么其他因素吗?例如课堂上讲过的使用率很少的功能,功能的丰富是否是衡量好坏的一个重要因素呢?同时现在越来越多的功能被开发团队加入到一个软件之中,这使得现在的软件体积越来越大,越来越臃肿,同时功能的丰富也会使得原本的软件不再“纯粹”。我们该如何建立一个客观全面的机制,来评价一个软件的好坏呢?
-
如何检验单元测试的正确性、全面性?
绝大部分软件都是由多人合作完成的,大家的工作相互有依赖关系。最典型的例子就是,某人负责的模块的功能被其他人调用。软件的很多错误都来源于程序员对模块功能的误解 、 疏忽或不了解模块的变化。如何能让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能得到稳定的、量化的保证?单元测试就是一个很有效的解决方案。
现在市面上的软件产品基本上都应该是通过了单元测试的,但是我们依旧会遇到软件时不时出现Bug的情况,尤其是在加入新的东西的时候,往往会出现很严重的Bug。在这种情况下,单元测试该如何处理?又该如何评判单元测试的好坏与完备?又改如何处理模块与模块之间的Bug呢?
-
在学习语言越来越多的情况下,我们该如何解决使用频率不高语言的低层次问题?
巴克斯顿说技能的反面是”Problem Solving“ 解决问题 ",这个听起来有点绕,我们看看IT人十分熟悉的一个例子吧。一个 IT 专业的大学生来面试,简历上写“技能:精通 VisuaI Studio C#编程“。于是面试官请他用 Visual Studio IDE 写一段程序 。 一个”不精通“的面试者的编程过程实际上就是一个“解决问题"的过程。例如:
- 嗯,怎么开始一个C#的命令行程序呢?
- 定义数组是怎么弄的?是”int [] arr“还是“int arr []”,还是ArrayList,还是Array 。我平时都是上网查的。哦,我不知道还有MSDN网站。
- 嗯,为什么编译没过呢,哦,这里少一个分号。
- 嗯,怎么设断点?怎么定义命令行参数?额,我要查一查······
你发现他把时间都花在”解决(低层次)问题”上了,你想考察的“算法技能"、"C#程序设计技能"都无暇顾及。注意,这是在他认为非常精通的编程工具和编程语言中出现这样的问题。你要这样的员工么?
现在市面上有很多主流语言,如C、C++、Java、Python等,他们的语言和规则又不尽相同。出于学习原因,我都学习使用过,但在实际生活中,我往往在不同的时间段使用不同的语言,这也就导致我对于不同语言的规则往往会记错,有时也要去查语言的说明文档,即把时间花在了”解决(低层次)的问题”上了。事实上,我们在实际使用过程中往往只钟情于一两种语言,对于其他语言,我们不是不会,只是不常用,在这种情况下,我们又该如何解决“低层次问题”和“算法技能”之间的关系呢?
-
如何将代码和注释写的“赏心悦目”呢?
我们经常抱怨阅读别人的代码很难,我们自己在写代码的时候,是否考虑到如何让代码更易于阅读和
维护呢?对于代码注释,我们该如何将其写的简洁、目的明确呢?这是否有一套模板能让我们套用呢?对于功能的使用或调用,我们又有必要给出一个例子来说明呢?
-
在当前的社会背景下,在IT行业的我们又该如何”创新“?
最近几年,我们整个社会似乎对创新都很感兴趣,媒体上充斥着创新型的人才、创新型的学校、创新型的公司、创新型的城市、创新型的社会等名词。有些城市还把“创新"当作城市的精神之一,还有城市要批量生产上千名顶级创新人才。IT行业也充斥了很多创新的新闻和掌故。对于创新,有一些似是而非的观点和传说(Myth,迷思)。
在当前的社会背景,我们在IT行业从事时,我们该如何创新,在哪里创新,创新之后的价值在哪些方面呢?虽然现在计算机还有很多地方的潜能没被发挥出来,但是,在我们将功能实现之后,又该如何认为这是有价的呢?