仅针对这3章的阅读,已经可以感觉到本书的风格和其他我所遇到的专业书籍有很大的区别。就像在正式章节前,我看到的读者反馈里的观点一样,它与很多同类书籍是不同的,不似其他书籍告诉读者各种开发模型怎么怎么样或是叙述很多专业用件,而是更多的在于培养一种意识,书中对很多软件工程方面的介绍也真的解决了现阶段我对它所产生的一些疑问(比如计算机科学与技术和软件工程这两大专业)。很巧妙的对话形式以及那些通俗易懂有说服力的例子能够让我以一种很轻松但也不断思考的方式去阅读。每一遍的阅读都是思考性的阅读,第一遍心里带着作业所需要想的问题去读,对一些话语会进行勾画;第二遍对于自己阅读时勾画的语句会再读它的上下文,试着去理解,然后提问,再理解,再提问;第三遍就是针对我最想要详细了解的点,择问题而思考,在查阅资料的时候又会有新的想法、新的问题出现,然后再查阅,再解答。这种在查阅中以自问自答的形式去解决问题,除了能够将问题得到部分解答,同时能够让自己了解到这个领域的更多的东西,也不断地扩充了自己的知识面。
以下就是我在读完1、2、16章后的一些问题和感想。
Chapter1 概论
读完第一章,我对软件工程这个专业又有了新的认识,可以说是真正重新认识了这个专业。作者在文中对软件工程和计算机科学与技术两个专业的异同点的分析和说明,加上读完之后我自己从各个不同方面查询两者的区别,真正解决了一直以来我对两者所产生的疑惑。加之书中对于软件工程知识领域的介绍,我才知道了,原来软件工程它其实也涉及了那么多方面。
引1:“IT专业的大学毕业生找工作时声称:我精通Java,会用C++写‘Hello World’程序,我懂软件工程,我画了很多图,写了很多文档,最后得了很高的分数……”(P8)
Q1:对于现在的大学生,什么阶段的学习应该求精?对于本科生阶段,开设的课程不少,所以在对IT行业没有明确的选择定位时,是否应该对于所学科目都持有学而精的心态,还是限于求博、各方面都懂却不精通的状态。如果真的是一个本科生毕业之后要找工作,对于本科四年所学的知识到底要精到哪种程度才算是合格的?
A1:对于前两个小点,我自己其实还在思考中,我觉得如果是对于毕业之后选择读研的本科生来说,研究生阶段更适合求精,因为那个时候自己对未来的方向一定是有规划的,那么在基础知识还算扎实的情况下,是对于自己以后发展方向求精的最佳时机;然而如果对于本科毕业就找工作的学生,我是没有很明确的想法的,就不是很能判断两者的利弊。对于最后一个问题,我在网上搜了很多关于各大IT公司的一些笔试、面试的题,这个链接里面是各大IT公司校园招聘程序猿笔试、面试题集锦 http://blog.csdn.net/mmbbz/article/details/40300343?locationNum=11&fps=1 ,我发现很多都是关于算法、数据结构、数据库之类的问题,然后我将关键字变成了软件工程面试题,随机点开了一个博主关于这方面的总结——软件工程常考笔试面试题http://blog.csdn.net/shi1451042748/article/details/52457384。我以我现在仅有的知识比较了两者,我觉得差别还是蛮大的,所以自己对于这方面还是存在疑问的,对于IT这个行业,在进入那些很好的公司之前,对于一个合格的、精通自己技术的软件工程师、IT者,对“合格”和“精通”的定义、希望到底是要到达哪一种地步
引2:“计算机人工智能研究的一个重大挑战,就是计算机程序能否在国际象棋这个游戏中打败人类。”(P13)
Q2:AI迅速的发展已经成为现在所有人谈论的话题,2016年10月,AlphaGo以4:1的总比分打败李世石,2017年5月,以3:0打败柯洁,同年10月,DeepMind团队又公布了AlphaGo Zero(阿尔法元),它在没有人指点,从零开始自己参悟的情况下,以100:0打败了阿尔法狗。是不是通过不再局限于人类所接触到的知识、积累的经验的人工智能可以更厉害,在未来的发现领域中,人类的经验起到的作用会一如既往的重要还是微不足道呢?
A2:因为我对人工智能这方面还算蛮有兴趣的,也会时常通过网络或者一些书籍去实时跟进、了解它,尤其是对于阿尔法狗,所以当看到这本书提及人工智能的时候,虽然不是重点,但是也就自然地把这四个字做上了记号,面对其他我在书中做的笔记然后提出来的问题,最后我还是选择把上面这个问题写进这次作业中,更多的是想知道老师们、同学们对它的看法。人工智能我觉得真的算是当今社会几乎所有计算机方面的科学家在研究的东西了。我觉得它很厉害,它带给了我们很多以前不敢想的东西,我是通过同学在朋友圈分享的一篇关于阿尔法元的文章,知道了阿尔法元的诞生,也再一次了解了一些关于机器学习的知识,文章结尾有提到一个很有趣的命题:“在一些与日常生活有关的决策问题上,人类经验和机器经验同时存在,而机器经验与人类经验有很大差别。我们又该如何去选择和利用呢?”我也不禁想到霍金对人工智能的看法——“警惕人工智能”。虽然我现在也并没有深入了解人工智能,仅仅只是很浅显地知道一些东西,但是我还是会时刻关注一下它的实时,多了解、看不同人写的文章、博客,自己的知识面,想问题的宽度和深度,我觉得多多少少还是可以提高的。
其它了解到的术语解释
没有银弹——没有任何一项技术或方法可以能让软件工程的生产力在十年内提高十倍;
Chapter2 个人技术和流程
第二章讲的单元测试、回归测试、效能分析以及个人开发流程等,第一遍读的时候感觉还是比较生涩,在读第二遍的时候,随着自己的勾画查询了很多不太懂的术语,加之自己在这方面没有过实践,以至于提问这块都比较浅显,不过看见老师也分享了一些关于单元测试的链接,自己有时间会多去实践,有了一定实验基础之后,会再回来读这一章的,再去仔细想、提出问题。
引3:“单元测试应该覆盖所测单元的所有代码路径,包括错误处理路径。为了保证代码覆盖率,单元测试必须测试公开的和私有的函数/方法……100%的代码覆盖率并不等同于100%的正确性!……”(P27)
Q3:什么是单元测试?什么是代码覆盖率?对写出一个好的单元测试应该有怎样的态度?
A3:单元测试——对软件中的最小可测试单元进行检查和验证;
代码覆盖——软件测试中的一种度量,描述程式中源代码被测试的比例和程度,所得比例称为代码覆盖率。在我查询代码覆盖的时候,我发现很多资料显示代码覆盖率达80%-90%就很好了,也有说90%的覆盖率不一定比70%的质量高等等,这些观点都表明代码覆盖率不一定是越高越好吗?对于代码覆盖,应该怎样去判断以及书写?
在读第二章的时候,我至少都读了3遍,因为自己对于单元测试并不懂,所以在读整个第二章的时候,对于很多术语之类的就是一点也不懂的状态,所以前前后后查阅了很多资料,可以说到现在,我可能稍微地懂了一点点单元测试这个东西,看了很多博主写的博客,以及知乎里对单元测试的认识,有吐槽的,有觉得写单元测试写着写着就会很烦躁的,但是几乎每一个人都提到了一点,就是写它是对自己代码的负责,也是一种保障,反反复复写、修改,始终利大于弊。因为并没有亲身经历,所以通过自己查阅的资料有了解到一些关于写单元测试的时候应该持有的心态:
越重要的代码,越要写单元测试,好处并非立刻体现;
代码做不到单元测试,应该多思考如何改进而非放弃;
边写业务代码,边写单元测试,而不是完成整个新功能后再写;
多思考如何改进、简化测试代码;
最后看了关于单元测试这么多东西,尤其是很多人关于写单元测试时的一些心态变化,我也还是生出了一个疑问,因为书中有提到“单元测试必须由最熟悉代码的人(程序的作者)来写”,我当然能理解这一观点,但是如果是团队合作的话,有更多的交流与探讨,会不会在写的时候、陷入bug的时候就没有一个人奋战时候那么烦恼了?
Chapter16 IT行业的创新
每一个行业都需要创新,作者最先通过“迷思”两个字去介绍创新,在文中我印象最深的是作者很直接的提到“不但大众不喜欢创新,甚至连创新者自己都不例外,有些创新者甚至恨创新”以及“颠覆式创新的困境”,这样的语句、术语是我第一次看到,以前我都是很积极地、正面地看待创新,这样从另一个角度看创新,也让我的视角拓宽了,想法更多了。
引4:“有强烈的好奇心——创新人士不满足于‘就是这样’,而是探究背后的道理‘为何会这样,如果换一个方式会怎样?’一个设计公司,为了研究用户如何使用传统的拖把,花了几个月的时间去观察、录像,并反复琢磨那几百小时的录像——看人们怎么拖地、洗拖把。在很多专业团队打退堂鼓之后,他们仍在探索,最后研发出全新的拖地板产品。3年之后,新产品创造了5亿美元的销售额。”(P360)
Q4:这个示例作者想说的是创新需要有强烈的好奇心,我觉得创新的确需要很强烈的好奇心,但是通过这个示例我更多看到的确实恒心和毅力,仅有好奇心并不足以让他们能够坚持。所以当对某一事物有了一定的好奇心的时候怎样才能让这种心情持续,在面对同行竞争强大,探究可能无果的情况下,一直坚持去体验?以及Swiffer问世之前都有哪些挑战以及坚定的目标?
A4:当我看到这一段文字的时候,我就很想知道到底是哪个公司这样做了,所以去查找了关于这个示例的更多的故事。我知道了Continuum在设计宝洁公司的Swiffer(就是文中描述的拖把)产品时,对清洁前后地板上的灰尘做了个小分析,发现要除掉这些灰尘最好别用水。而且还发现大多数人在拖地之前会先扫一遍灰尘,拖完地之后还要花更多时间清理扫把上的灰尘。
以下截图是我在一个博主的博客里面了解到的
该公司的创始人认为,真正的创新在于对体验的重新定义,这是我第一次看到对创新的又一层理解,我觉得这个说法还挺有趣的。创新它不仅需要强烈的好奇心去发现,在发现、挖掘、创造的同时,如果是通过体验,这样的一个过程会不会让创新者有更多的耐心和时间去完成自己想要创造的方面,我觉得这不失为一种让自己好奇心持续的一种方法。在面对自己所不熟悉的颠覆性的创新面前,人们更多时候是持怀疑态度。但也就是像书后面提及的,创新者和团队需要有坚定的价值观促使他们继续。我觉得一个颠覆性的创新或者是渐进式创新的问世都需要考虑到很多方面,用户的需求、对市场的预测,广告人员、设计人员、技术人员各方面的要求。所以Swiffer的问世,一定是在各方面都有很坚定的信念以及正确的判断才得以成功的。
引5:“SWOT分析框架”(P366)
Q5:SWOT分析方法是书中提到的一种创新的招数,通过查询资料我知道它是一种企业内部分析方法,对于企业创新是有一定作用的,那么对于SWOT它是否也利于个人分析呢?如果可以,应该怎样对个人进行分析?
A5:通过查询资料,SWOT分析方法是企业根据自身的既定内在条件进行分析,找出企业的优势、劣势及核心竞争力之所在,从而将公司的战略与公司内部资源、外部环境有机结合。其中,S代表strength,W代表weakness,O代表opportunity,T代表threat;S、W是内部因素,O、T是外部因素。按照企业竞争战略的完整概念,战略应是一个企业“能够做的”(即组织的强项和弱项)和“可能做的”(即环境的机会和威胁)之间的有机组合。
我觉得SWOT同样适合个人分析,尤其是对于现阶段的我们进行个人能力分析。看了网上一些关于企业的SWOT分析实例,很多都是同样适用于个人的。
S——优势分析,代表我们要去了解自己的优势,需要很清晰的认识到什么优势是别人没有但是自己有的,去客观的发现自己的长处。但是就有一个问题,我们应该通过怎样的方式去发现自己的优势呢,是通过他人对自己的评价,还是通过一些问题不断询问自己,还是其他更好的方法?
W——弱点分析,代表我们自身的弱点,十全十美的人微乎其微,所以扬长避短应该是我们需要做的。正确发现自己弱点可以通过自我提问的方式,比如问自己“有什么事情时自己通常会逃避,因为觉得没有信心去完成的?”或者“在自己想从事、想学习的方面还有什么是自己从未涉及的?”类似的这些多提问自己,我觉得这样能够较好的挖掘自己的弱点。把许多小事放大,从小事就可以看出自己的优缺。
O——挖掘机会,代表我们要时刻去抓住机会,寻找身边现有的、潜在的机会,在机会来临之前,尽一切可能去提升自己。在思考潜在机会的途中,很有可能会进一步挖掘自己的优势,也更进一步认识自己的弱点。关注自己的长处,并时常问自己这些长处是否开启了一些潜在的成长机会?不忘自己的弱点,并询问自己是否可以通过消除这些弱点制造更多的机会。但是我们通常都很难抓住机会,尤其是一些潜在的机会,我们究竟应该怎样通过现象、现状去对其进行思考分析呢?
T——正视威胁,面对威胁,我第一反应认为threat对于现阶段我们对自己的分析似乎用处不大,但是仔细想一想,它和weakness最大的区别在于环境。自己的弱点会导致威胁的出现,面对比自己擅长的领域更擅长的人的时候会有威胁出现。我觉得有些时候对威胁的分析,会不会恰恰为自己的发展提供了一些关键信息,它可以帮助我们指出哪些是需要做的事,将问题化为远景。
我觉得SWOT这样的分析方法很利于个人的发展,通过这样的分析法时刻剖析自己。但是要通过怎样的方式才能客观的分析这也是个问题。
以上就是我读了1、2、16章之后的一些想法。
我把每一种方式的授课方法都当做自己去更深地了解这个领域的一种督促性作用,重点不是方法,而是在于自己如何去学、去思考,适合自己的学习方法是掌握知识最快的捷径,对于我来说带着思考、带着问题去阅读,在阅读中不断查询、不断提问,再查询、再思考,这样的方式让我重新认识软件工程、重新认识创新,同时也了解到很多之前完全不知道的知识,对自己各方面都有很大的提升。