第三次作业:阅读《构建之法》1-5章有感

这个作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2178

阅读《构建之法》1-5章有感


 

第1章:概论

      作为一个软件工程的学生,对于软件,程序和软件工程的理解如下:

         软件=程序+软件工程;程序=数据结构+算法;软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。

        1.1节中阿超从一开始简单程序,随着需求增长,渐渐变成一个复杂的工程,从扩展到一个满足各种功能的应用软件,再扩展到一个保证服务质量的软件服务。一个复杂的软件不但有合理的软件架构,软件设计与实现,还要有各种文件和数据来描述各个程序文件之间的关系和参数传递关系等。

       那什么叫软件架构?现在架构师岗位需求也不少,工资也属于此计算机行业算高的,为什么架构师目前那么热门呢?

“软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口_(计算机科学)来实现。 ”

--------------------- 本文来自 白及 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u010098331/article/details/51490633?utm_source=copy

        这篇博客详细地解释构架,通过建筑师设计楼房对比,形象地说明架构就是在组件,彼此间和与环境间的关系,引导设计发展原则中体现的系统的基本结构。

       飞机的安全功能更说明一个问题:客户的需求有时候可能没有很明显地提出了,相信没有一个客户会向航空公司提意见,我觉得你们飞机安全不保障。很明显如果连安全问题都不保障,还有谁敢来这家航空公司坐飞机。但作为一个设计者是需要考虑到这些“常识”,这就1.2.4节中软件工程的目标——创造“足够好”的软件所说的要消灭一个个的“bug”。一个好软件需要考虑用户用的舒不舒服,系统会不会时不时死机,登不上,可不可以维护等问题。只有全方面考虑才可以做个好软件!

        本章疑问:要作为一个架构师需要多少经验才算是优秀的?


 

第2章:个人技术和流程

    一个工程师在软件开发中的工作是需要一个大致一样的流程,作为一个优秀的开发者,你所做的每一个步骤都需要考虑到团队的进度,这就要求在写技术模块的规格说明书的时候,要越详细越好,最好各项要求都可以表示一个单元测试用例,要考虑到时整个项目所有周期的其它工作人员是否能快速理解你的代码。但现在越来越多的程序员并不怎么想写单元测试。很多开发人员知道他们写的代码大多数都不会应用在实际项目中,或者很快被后面的代码覆盖掉,就懒得测试。而且现在还有专门的测试人员。

    但我却赞同一些有业界良心的博主的观点:

“对于程序员个体而言,测试最大的意义在于‘建立和维持对代码的自信心'”。

--------------------- 本文来自 墨镜小空 的segmentfault ,全文地址请点击:https://segmentfault.com/q/1010000002415710

    作为一名开发者你的目标应该不仅限于会用,还要知道它到底怎么工作的,要如何改动它一适用更多要求,测试要成为你项目的指南针,指导项目一步步发展过来。测试良好的项目,其代码本身也很清晰·干净,易于阅读和理解。

    让自己的程序跑得又快又好这是每个程序员的目标,但也不能不经分析就盲目优化,也许会事倍功半。凡是都是有度才能把项目做的更好。

    本章疑问:2.2节中两种分析方法抽样和代码代入还是不大能理解和区别。


第3章:软件工程师的成长

    初级工程师是通过积累相关的开发软件知识,提升技术技能还有积累问题领域的知识和经验,积累开发思想,提升职业技能,衡量自己的工作成果对这一次项目开发等而成长。多阅读多思考多写代码是成为一个优秀软件工程师必备的。3.3.2节中迈克康奈尔也为员工提供了一套成长路径。他把工程师分为8个等级,一个工程师从一个级别升到另一个级别需要各方面的要求。例如要达到”工程管理的熟练水平“需要做到阅读经典文献,参与完成6个具体项目,参加3个专门的课程等。越高级别还需要获取证书,发表论文等。

    自我评估是软件工程师成长的一部分,只有理解自己,才有进步空间,才是真正意义上的精通这个领域。那如何提高自己能力呢?

“重要的并不是经验本身,而是‘努力的学习’,也就是要不断地挑战自身能力之外的东西。一些狂热的爱好者花费了大量的时间去下棋、打高尔夫球或者玩乐器,但他们可能始终停留在业余水平上,而一个训练有素的学生却可以在相对较短的时间里超越他们,原因就在这里。值得注意的是,在提高水平方面,花费在下棋上的大量时间(即使参加各种比赛)似乎还是比不过专门的训练来得更为有效。训练的主要价值在于发现弱点,并有针对性地进行提高。”

 -------------------- 本文来自在《科学美国人》的一篇名为“The Expert Mind”(专家思维)

    “努力的学习”意味着,要常常去处理那些刚好在你能力极限上的问题,也就是那些对你来说有很大可能失败的事情。如果不经历一些失败的话,你可能就不会成长。你必须不断地挑战自我,超越自己的极限。

     本章疑问:中国现在计算机考级证含金量究竟怎么样?公司只看项目经验不看证的吗?作为一个大三学生需要什么证书公司才会招聘你?


第4章:两人合作

    现代的软件都是在相互合作中完成的,所以“如何看懂别人家的代码”和“如何让自己代码让别人看懂”是合作中不可缺少的问题。做一个有商业价值的项目,代码规范是相当重要。代码风格规范每个公司都有自己一套,每个员工都会按照公司要求来完成公司项目;但如果个人项目的话,一般会按常规来编写。代码设计规范牵涉到设计设计、模块间的关系、设计模块、运行环境等方方面面。

    代码复审是代码设计规范的一个环节,无论多牛逼的大神,总有考虑不全的地方,在开发前期越早发现问题,修复代价就越低。代码复审可以发现很多问题,所以如果我们都处于这一种状态那项目开发会更好,所以才有了结对编程,结对编程让两个人所写代码不断处于”复审“过程,程序员可以及时发现并解决问题·避免把问题拖到后面阶段。

    那什么时候结对编程是最有效的方法?

“最主要的因素是技术与挑战相匹配。在独自编程中,如果技能和挑战能互相匹配,最高产的模式就是流模式(Flow)。结对编程添加了一个更有效的模式——指导模式(Coaching),它能够提高全队当前与未来任务的生产率。” 

--------------------- 本文来自 jobbole 的 iteye ,全文地址请点击:http://www.iteye.com/news/20082

    结对编程成功模式要不就是两人互相学习进步,要不老手带新手。当然也有失败模式,浪费时间没有专业指导,结果什么都没有解决。

    本章疑问:如果结对编程的两位已经进入失败模式,那是该换人还是双方都退一部勉强完成一个不怎么好的作品?


 

第5章:团队和流程

    团队是有一致的目标,虽有各自分工,但却互相依赖工作,共同完成这目标。团队模式有很多:在5.2节中,列举出:“一窝蜂模式”、“主治医师模式”、“明星模式”、“社区模式”、“业余剧团模式”、“秘密团队”、“特工团队”、“交响乐团模式”、“爵士乐模式”、“功能团队模式”、“官僚模式”等。

    其中瀑布模型是最早出现的软件开发模型,在软件工程中占有重要的地位,它提供了软件开发的基本框架。重计划,重事先设计,重文档表达成为瀑布模型开始后的模型一个共同点。这一类方法集大成者要算RUP。以及后面出现的MVP和MBP。

    本章疑问:还是不怎么理解MVP和MBP思想,想问有相关文档可参考?这是我在网上搜索到的文件,但还是不大清楚。链接:奥特曼超人Dujinyang 的CSDN 博客 :全文地址请点击:https://blog.csdn.net/djy1992/article/details/51258774?utm_source=copy

 


总结:

    国庆七天,读完前五章,明白了团队合作的重要性,也为未来的大作业提供了意见,课本简单易懂,但本人学术不精,还是很多不大理解,稍后再多多琢磨一下,希望能理解更透彻。

猜你喜欢

转载自www.cnblogs.com/fulanjiang/p/9747888.html