在最开始老师推荐教材是这本《构建之法》时,我一直以为这本书和以往所见的教材一般,都是对各个知识点生硬的说明。但翻开书一看,竟发现不是如此。作者邹欣老师以生动的语言,如同聊天一般,将软件工程相关的知识传授给我们,让我受益匪浅。下面,我就谈谈我初步读这本书后的一些感想和疑问。
第一章
自从读了软件专业之后,我就发现我的几个计算机科学与技术专业的朋友,他们大一时学得东西与我们所学的并无二致。课程有所不同是从大二开始的,那就说明,我们两个专业的基础是相同的,但是所发展的方向不同。看了《构建之法》中说及软件工程和计算机科学的关系和区别,才知道计算机科学与软件工程之间是互相促进发展,互相依存的关系。并不只是我原本了解的“计算机科学是偏理论而软件工程偏实践”。这个说法并没有错,只是不完整而已。
然后看到第一章最后有说及关于bug问题,说是用于安装了一个公司的软件,但是在没有同意安装的情况下,被安装了许多奇奇怪怪的软件。就以金山毒霸这个软件来讲,这是2005年左右中国国内的电脑基本都有安装的杀毒软件之一。但随着时代的发展,金山毒霸的功能赶不上用户的需求,用户市场大量流失,像360等杀毒软件异军突起,金山系列软件逐渐没落。可是,金山并没有放弃,他们以另外的方式——捆绑安装,一直占据着我的老电脑。在我某次下载安装某个游戏后,暗地里金山毒霸就捆绑着安装在我的电脑内。在我卸载之后,竟然还能再次安装这个软件,因为我没来得及删除它的注册表。金山毒霸从一个杀毒软件做成了一个如同病毒般的软件,令我不由自主想起一句话——“屠龙者,最终变成了龙”。
那么问题来了,为什么像金山这样曾经在国内杀毒软件市场大红大紫的一个公司,却没能提高自己软件的可维护性和继续发展的能力,最后堕落到要靠捆绑安装来提高安装数?难道这样一个大软件公司不动的适应用户需求吗?什么导致了一个软件从下载量极高到卸载量极高的转变?在百度搜索关键字“金山毒霸”,扩展框中马上会出现“金山毒霸怎么卸载”“金山毒霸卸载不了”等相关问题。点进贴吧,知乎等社区,关于此类问题,用户们对金山毒霸这个软件一致的骂声一片。对这个软件的没落原因与我上文所说大致相同,但我想是否还会有别的原因?
第二章
第二章讲的是个人技术和流程,其中说及了单元测试、效能开发工具和个人开发流程。
在其中效能分析工具一节中的PSP数据比较中,对比大学生和工程师的花费时间百分比中,我了解到,比起大学生,工程师在需求分析方面需要花费更多时间,因为他们开发的程序大多是面向更多的用户,对于不同用户的需求分析更加严谨,也因此,在设计方面高压feud额时间回更多,但也因为在设计方面下了更多的功夫,所以工程师在编码阶段花费的时间反而少了很多。因为大学生更偏向于完成指定的任务而不是去满足用户的需求。
再有,实践一节。“我有银弹”一例简直就是之前的我。在赶工做完老师布置的项目作业,草草提交后就盲目认为这类工作简单,却没有考虑过项目的可发展性。就以之前做的新闻增删改查项目作业:从数据方面,我的项目没有翻页功能,不能支持大量数据;需求方面,查找功能只是一个框架;需求软件构建方面,甚至只能在我自己电脑上启用项目……我的代码量还是太少了,不论是做项目的代码还是做ACM-ICPC的一些基础题或者数据结构的题,我做的都不多,也应该着手做一些项目了。
文中提到了软件工程的作业不好出,如编程语言基础、数据结构练习或者复杂软件系统,都不完全是软件。而正确的是要做到复杂性和易变性或更多。那么我们在设计一个项目的时候怎么做到复杂性和易变性?我知道这些要从最基础的项目开始发展,复杂性从用户需求、用户数量等方面,易变性从软件构建方面……但是我觉得这些仍然不够。只是这样就算是一个完整的软件,或者说软件工程作业吗?
第十六章
第十六章讲的是IT行业的创新。软件工程专业作为一个工科专业,更加要创新,但是创新思维并不是单纯的灵光一闪后的天马行空,而是要有文中迷思之一说的:创新的成功,都要建立在有相应知识的基础上。再有,迷思之二,每个人都有创新的想法,但有的想法可行有的不可行,比如上学期的一个科研立项项目,我们想的是实时追踪每一件快递的物流信息,但是我们没有考虑到这个的成本和意义。
在其中的迷思之五,提到了,总是行业之外,而非本领域的专家提出了创新并且成功了。正如迷思之一说的创新一般都建立在相应的只是基础上,那么,本应该是本领域的专业人才更加了解这些知识?怎么反而是行业之外的专家更加容易创新成功?我个人认为,也许是本行业的专业人才由于对于本行业的了解更深,更清楚这个行业发展的瓶颈,但是这种了解反而限制了他们的想象力?带着这个疑问和猜想,我阅读了book.douban.com/subject/26340523的《像外行一样思考,像专家一样实践》一书的试读章节。其中就有一段话:
“要产生出好的创意,发明独创的技术,必须要有极端甚至是荒唐无稽的,或者我们一般所说的跳跃性的思维方式。而从现状出发,一步一步循序渐进的进行逻辑推理,最终得出结论。想着严格的思维方式就很难实现飞跃。要想成功的话就直接从结论起步去做,也就是从希望结果开始是非常必要的。这就是一种外行人的思考方法。”
这与我的猜想相仿,本专业的专家在了解了本专业的一些已有的理论之后,思维方式就容易拘泥于已有的框架,反而限制了发挥。而相对的,从已有的理论着手,再从中加以发展创新,这是外行人的思维方式,而这样的思维方式中,有的荒唐无稽的创意反而是可贵的创新。
以上是我阅读本书几个章节的疑问和理解。