基于《构建之法》的几个小见解
第一章 计算机科学和软件工程的关系
中国大陆的高校中大致有下面三种将计算机软件的机构:
计算机科学与技术系或学院
软件学院
软件工程系、软件工程学院
问题1:
这一章有讲到这些概念的区别和共性,但结尾又说到“希望读者不再纠结科学和工程的问题,而是在不同的学习与工作阶段,投入到最适合的项目类型中去”。我虽然对这些概念的分析和这句话表示非常赞同,但当下仍有一个现状,那就是本科大学在代码能力方面要比专科技术学校的软件工程专业稍有逊色。软件工程是工科,注重动手能力,而绝大多数计算机方面的本科更重视理论,理论都是大同小异,那么区分这些概念的意义在哪里?
很多大学生在毕业后都在抱怨本科四年自己根本没学到什么真本事,到了单位还要遭受白眼。我之后在各大平台上看了一些关于软件工程专业专科和本科的好与坏,众说纷纭,但是却始终离不开一个宗旨——一切都得靠自己。不管是实践的机会多或少,还是偏科学或是工程,实践少了就自己课下多敲敲代码,基础知识不懂就多看看书,我认为这才是一个大学生应有的态度。
第二章 个人技术和流程
单元测试应该覆盖所测单元的所有代码路径,包括错误处理路径。为了保证代码覆盖率,单元测试必须测试公开的和私有的函数/方法。
问题1:
对于单元测试这块我对“覆盖”这个动态过程不太理解,于是我去查找了相关资料才恍然大悟,用我自己的话来解释就是执行语句,不仅是表面的语句覆盖,还有逻辑上的覆盖,比如下面的这个例子:
int foo(int a, int b) { return a / b; }
假如带入值去测试:
TeseCase: a = 10, b = 5
那么代码覆盖率达到了100%,虽然语句覆盖率达到了所谓的100%,但是却有一个最简单的bug,比如,当b=0时,会抛出一个除零异常。
第十六章 创新的招数
除了技术的创新,还有很多方面的创新:
商业模式的创新
用户体验的创新
生态系统的创新
问题1:
看到这儿,我不禁想到了一个游戏,叠纸开发的《恋与制作人》。这个游戏画面、声音等制作非常精美,服务器也算跟得上,可以说用户体验在同类产品中是很不错的,但是这个游戏非常氪金,所以我没玩多久就卸掉了。我有些疑惑,是不是所有用户体验很棒的软件都需要金钱来支撑?
后来想想,金钱是必要的。一个企业不会做赔本的买卖,就算是一个免费的软件,比如腾讯QQ,它也会在黄钻、会员等增值业务上是收费的;淘宝也是免费的,但阿里巴巴怎么赚钱我们都知道;《王者荣耀》会通过出售游戏道具来赚钱。每个成功的公司都会有自己的商业模式,加上自己的技术和创新,投入金钱和人力,才能使一个软件周期得到最大延长。