《构建之法》1-5章读后有感
这个作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2178
第一章 概论
本章主要讲述了软件工程的基本含义,涵括的内容以及阐述一些软件开发过程中所会涉及到的难题。
(1)软件工程的核心内容是构建管理、源代码管理、软件设计、软件测试、项目管理等的程序后端设计,和用户体验、用户界面设计等的前端设计,整个过程设计的每一个环节都具有非常高的专业性,甚至在实际工作中企业都可以被划分成具体的工作岗位来按需招员。所以熟悉整个软件工程的各个环节,是本专业大学生未来就业必不可少的工作。
(2) 对于其中的“软件=程序+软件工程”,课本中有对其的扩展:“软件企业=软件+商业模式”,我则根据平时课后程序设计的经验,将其细化为“写软件=理清程序的基本需求+写可读性强的代码”,因为在日常的学习和未来的工作中,我可能会长时间处在写代码的底层工作中度过,清楚程序的基本需求有助于快速对程序的各种模块进行查找拼装,可读性强的代码则是为日后的维护和设计修改工作做铺垫。
(3)软件的以下属性,也为其的编写过程产生不少困难:
1、程序设计语言种类繁多,开发过程可能用到多种语言,所以多技术人员要求相对较高。
2、软件开发流程永远不是唯一的,不同的流程得到的效果也是不一样的。
3、软件团队中有专长不一的成员,他们各司其职,而充分调配其积极性和专业优势不是意见简单的事情。
4、软件应用的平台不同(如PC端和Android端),往往会造成不一样的效果,需要各个平台的工作人员相互协调平台间的设计。
疑惑:如果我确定了要当一名Android前端的设计师,那么除了专攻相关方面的专业知识,不去学习其他的知识,是有利,还是有害?
第二章 个人技术和流程
本章主要讲述了个人技术对软件开发过程的影响,内容囊括了单元测试,回归测试,效能分析和个人软件开发流程等等的知识。
(1)如2.1节中“软件的很多错误都来源于程序员对模块功能的误解,疏忽或不了解模块的变化”,我认为这是很有含义的,因为软件开发这一件事永远都不是个人的事情,甚至于不是一小段代码或子程序的事情。例如企业开发一套程序通常需要20到80人不等,各个程序员间所写代码的可读性将直接影响开发的进程;又例如每个模块的功能命名或输出输入因数的命名,极其需要符合相关的规范,甚至于模块间的跳转写入也是需要各个程序员的协调,尽可能避免意外的发生。
(2)如2.3节说明了个人开发流程中经验的重要性,有如对于程序的测试阶段,工作了几年的人往往比大三或大四的学生要来得熟练。因为在程序员这个行业中,每个程序员的经历往往是不尽相同的,有很多的错误或有效方案都是在实践中或者是犯错中寻找出来的,所以经常保持一定的代码量,有意识的参于到各种项目开发中去。是非常有必要的。
疑惑:对于像我这种基础知识不熟练的学生,是应该继续学习巩固基础知识,还是在做项目的过程中加以巩固,哪个方法更有效?
第三章 软件工程师的成长
本章主要讲述了软件工程师的成长,如何去衡量自己的能力与价值和规避困扰软件工程师的各种思维误区。
(1)作为一个软件工程科的学生,磨练个人能力是非常重要的。我从大一开始就觉得现在所学的专业,未来的工作顶多是个程序员,想要有所成就必须要学好学精其中的各种知识。但通过阅读本章的内容,我觉得凭借我之前所学的知识,我们将有机会成为一个初、中级的软件工程师,而软件工程师也不是和我想象中的遥不可及。程序员与软件工程师之间有很大的区别,以前我认为像是民工和包工头的关系。程序员被指挥,工程师当指挥。但现在我认为,程序员主要就是负责成天按照上级发的任务编程,而软件工程师是在一个项目里会有大量的建模,构思和设计并不明显存在上下级的关系,而是相互帮助,相互进步。
(2)在学校,我们要接触的知识,编程语言太多了,这往往给我们一种杂而不精的感觉。但是事实上在校期间几乎是没有多余的时间把它们学精的。所以有所取舍才是正确的做法,例如因为我喜爱于移动端的App,我就放弃了学精C和java的时间,转而认真学习Android的各种知识,这对我未来就业来说甚至可能说是一件好事。
(3)确实,像书上52页所描述。我们在平时的作业里,很多都是通过上网找资料得来的。在网上去寻找资料,充实我们的学习永远都是件好事,但其中的独立思考是必须的,因为网上的资料都是别人学习的结果,只有经过我们自己去思考和使用才能真正的化为自己的东西。
疑惑:为什么模仿别人的编程风格通常被说成是坏事,而不是一种快捷的学习方法呢?
第四章 两人合作
本章主要讲述了在编程过程中合作的重要性和当中可能发生的一些问题。
合作编程技术是一个非常简单和直观的概念,能达到事半功倍的工作效果。但是,人与人之间的合作不是一件简单的事情——尤其当人们都早已习惯了独自工作的时候。实施结对编程技术将给软件项目的开发工作带来好处,只是这些好处必须经过缜密的思考和计划才能真正体现出来。而另一方面,两个有经验的人可能会发现配对编程里没有什么技能的转移,但是让他们在不同的抽象层次解决同一个问题会让他们更快地找到解决方案,而且错误更少。
两个程序员具有相同的缺点和盲点的可能性很小,所以当我们采用结对编程的时候会获得一个强大的解决方案。而这个解决方案恰恰是其它软件工程方法学中所没有的。在我们平时的编程当中,如果遇到一个非常难解决的问题(困难到对该项目产生厌烦的态度),那么你势必会希望录求帮助,无论是从信息量庞大的网上,还是从身边的技术大师那里,你都会努力去解决(前提是你有对计算机知识的热爱)。这个时候不妨采用结对编程试一下,其它的不说,可能感觉就不同。其实结对编程坐起来很简单也很有趣,找个水平差的不太远的程序员和自己配成一对。只用一台计算机,大家选一个人坐在键盘前面负责输入,另一个人坐在后面口述。两个人要不断的交流,频率不应低于一分钟一次。整个的设计思想由后面只动口不动手的人主导,而由操键盘的人做实现。由于人的思维速度是快于输入代码的速度的。那么观看的人可以有空闲的时间做额外的思考,观察代码写的有没有问题,结构有没有问题。关于结对编程,发现了一些新的受益之处。首先,它可以促进参与项目的程序员自身的提高,一对程序员工作的时候,水平较低的一方会潜移默化地受水平略高的程序员影响,学到一些新的东西。而水平高的一方同样因为不断地把自己的想法说出来而整理了自己的思路。
疑惑:在合作编程的过程中,是注重培养与别人合作的默契度比较重要,还是注重在其中锻炼自己比较重要呢?
第五章 团队和流程
本章主要讲述了许多不同的软件团队模式和各个合作模式下的优势和不足。
本章的主要目的让我们了解到开发流程“我们在开发、运营、维护软件的过程中有很多技术、做法、习惯和思想。总结来说,本章继上一章的两人合作,深入讲解,介绍了团队的定义,模式,开发流程等,虽然有多种模式,也有多种开发流程,但这些各有其优缺点,有其适合的情况,所以在进行选择时,应该的更多的分析项目的需求,以及需要达到的目标,对质量的要求,是否需要在短时间内完成,是否需要尽早的得到用户的反馈,是否需要后期严格要求的维护等等,根据所做项目的特点,针对目前团队的人员能力水平,资源情况来确定具体的模式以及开发流程;实现队员能力的发挥,资源的合理利用,最终达到开发团队和用户的一致目标。
疑惑:在团队协作的过程中,配合队友重要还是提升自己重要呢?