第一章:概论
·计算机科学的领域
·软件工程与计算机科学的关系
·软件的特性
·软件工程的定义与组成部分
在阅读第一章的时候,一个很直观的想法就是:似乎这本书的作者知道我要问什么。虽然我学习的是软件工程专业,但对于它具体的一个定义,到目前为止还是没有一个清晰地答案。在学习过程中也会有疑问:为什么要学数据结构?学离散数学有什么用?这些知识在做软件的时候会用到哪里?我们和计算机专业的同学有什么区别,仅仅是学费不同吗?这些问题在阅读的过程中都得到了解释。但同时也有一些我不是很理解的地方:
问题1:在书中看到这样一段话“IT专业的大学生找工作时声称:我精通Java,会用C++写“Hello World”,我懂软件工程,我画了很多图......这些同学是真的懂软件工程,是一个合格的软件工程师么?”后面也有提到让读者在不同的学习与工作阶段,投入到最合适的项目类型中去。那什么才是真正适合现阶段我们学习的项目类型?书中软件的生命周期所涉及到的一系列步骤以及用户体验等等需要考虑的问题,结合到我们的实际学习,是完全不可能做到面面俱到的。我们的作业顶多也只能说是一个小程序,根本达不到这么高的要求,在这种情况下我们是否还要遵守上述步骤,一步步完成我们的作品呢?
问题2:书中不止一次提到“没有银弹”这个论断,恕我孤陋寡闻,并不能理解这其中的道理。在百度百科中我得到了这样的答案:没有银弹是指没有任何一项技术或方法可以能让软件工程的生产力在十年内提高十倍。这样一来,“软件的这些本质特性让“做一个好软件”变得很难”这句话就很好理解了,软件工程面临的问题在于我们已经清除了大部分的次要复杂度,而剩余的主要复杂度都无法改变,必要复杂度是从软件本身要解决的问题衍生而来,并无法被移除。(来源于百度百科)
第二章:个人技术和流程
·单元测试
·回归测试
·效能分析
·个人软件开发流程(psp)
在阅读第二章的时候,一些内容没能有效的理解,譬如在单元测试和效能分析中列举的例子,因为没有接触过相应的软件,对于具体的操作并不是很清晰。其他方面结合平时写Java项目的一些经验,基本上形成了自己初步的认识。具体遇到的问题如下:
问题1:在阅读完单元测试这一小节之后,我在想:a.我们之前写过的项目中的测试类算是一个单元测试吗?b.怎样才能将单元测试集成到自动测试的框架中?c.项目中一些在页面中显示的功能(例如一些弹出框),只有在实际运行下测试,它们的单元测试又该怎么写呢?通过查询有关资料之后,我了解到C语言中单元指一个函数,Java里单元指一个类,之前项目中每个模块对应的测试类就是一个单元测试;并且查找到关于前端单元测试的具体实现步骤,鉴于我学习较多的是后端的知识,对于一些过程还是无法理解,不过我看到这样一个说法:‘经常与单元测试联系起来的另外一些开发活动包括代码走读、静态分析和动态分析,其中动态分析就是通过观察软件运行时的动作,来提供执行跟踪,时间分析,以及测试覆盖度方面的信息’,似乎能够解释问题c;但我看了一些关于单元测试自动化解释之后,对于怎样才能称得上是自动化,还是没能有一个很好的答案。
第十六章:IT行业的创新
·关于创新,有哪些似是而非的论断?
·WIIFM(What's In It for Me)?
·创新者的困境,创新的时机,创新路上的鸿沟,先发优势和后发优势,改良的创新的颠覆式的创新;
·效能过剩,NPS,CAC,用户留存率。
在阅读过第十六章之后,对于创新,创业有了一个全新的理解。在大学现阶段的学习中,我也一起和几位同学一起组队参加了创新创业项目的比赛,现在正处于有想法未实施的阶段,但我读完这一章的内容,对我们之前的想法有了不一样的认识,我们的项目似乎并没有充分的优势和创造价值。同时也产生了一些疑问:
问题1:在书中第16.1.7中有这样一段话:“已有的销售团队往往不愿意推广颠覆性的新产品,因为市场没打开,利润极低。”,后面也有提到:“在一个有着悠久历史的稳定单位(例如大学中),它有固有的流程、价值观、文化都在自觉或不自觉地反对改变,反对创新。”那些口口声声说着鼓励大学生创新、创业的大学教育,其目的是什么?创新创业类的比赛其本质到底是什么?创新,创业谈何容易,它需要一个漫长的过程,这期间可能会有人来有人走,正如作者所说:‘不喜欢冒险,而是能够从多次失败中恢复并继续努力’,可我们现在似乎正处在一个‘不断冒险’地阶段,就像文章最后所说:创新的出路到底在哪里?