▲由于上周天我临时请假匆匆买了车票回家乡看病了,当时还没发布作业,只带了电脑回去,没有带课本,然后返校是周六晚上才返校的,为了完成作业就在家里下载了电子版《构建之法》看,所以没有标上页码,望理解。
提出问题
快速通读教材《构建之法》,并参照提问模板,提出5个问题。
如何提出有价值的问题? 请看这个文章:*http://www.cnblogs.com/rocedu/p/5167941.html* ,以及 在互联网时代如何提问题。 还有这些要点:
- 在每个问题后面,请说明哪一章节的什么内容引起了你的提问,提供一些上下文
- 列出一些事例或资料,支持你的提问。
- 说说你提问题的原因,你说因为自己的假设和书中的不同而提问,还是不懂书中的术语,还是对推理过程有疑问,还是书中的描述和你的经验(直接经验或间接经验)矛盾?
一个模板可以是这样:
我看了这一段文字 (引用文字),有这个问题(提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。
或者这样:
我反对作者的观点(提出作者的观点,自己的观点,以及理由)。
大学生应该能写出自己的思考, 而不是摘抄书本内容。
提示:编程经验不多的同学,建议看16章 “创新”, 提出自己的问题。
一、结对编程不是“平等”的
在4.5.2 为什么要结对编程中,作者提到:在结对模式下,一对程序员肩并肩、平等地、互补地进行开发工作。
既然说到结对编程中这一对程序员是平等、互补的,那么,这对程序员的能力,我觉得应该是势均力敌的,才能实现真正意义上的平等互补。 在百度百科[1]中也有说到:“其实结对编程做起来很简单也很有趣,找个水平差的不太远的程序员和自己配成一对……” 所以我认为,这种和谐合作的前提是水平相当,这里就涉及了一个结对编程拍档的选择原则或标准的问题。但若所有的结对编程都如此严格要求,这将会使项目的起步存在难题。 在我看来,这个平等应该是心态上的平等,是一个虚心合作的态度所赢得平等。并不是真正意义上的平等。虽说“三人行必有我师”,但人的能力终归有高低之分。 所以,我觉得结对编程是一个“不平等”的有倾倒向的过程,但是可以是一个互补的过程,在结对编程的过程中两人相互学习相互监督以达到项目完成的最优。这个可能有点过于牛角尖了,但是我觉得还是有必要说一说的。
[1]参考自:结对编程 百度百科
二、程序各方面的质量并不是取决于一对程序员中各方面水平较高的那一位的
同样的一章节,作者在后文又写到:在结对编程中,因为有随时的复审和交流,程序各方面的质量取决于一对程序员中各方面水平较高的那一位。
这里也说到了“取决于各方面水平较高的那一位”,这里就在某种角度和上面的观点有所冲突。既然有处于相对决定性地位的一者就不应该说是“平等”的。 另外,我认为这句话相对片面。既然说了,结对编程是一个互补的过程,那么就存在各方面水平较低的一位在某一方面相对突出的可能。就好比两个厨师做一道菜,A在刀工、调味等方面都优于B,控制火候的能力却没有B好。而有些肉质菜品对于火候控制的要求是相对高的,那么最后完成这一道肉(咕噜噜~)的决定性因素除了调味就是火候,火候的适当调控会使肉质更好地体现出来,也许火大了就太硬太老了,火小了就煮不熟煮不透。那么,你说这道菜的成功是取决于A么,不能这么说吧。 emmm这么说应该吃货都会懂我的意思了吧=w=,所以我认为不能写得这么果断。
三、敏捷流程是否等同于敏捷开发?
在6.1 敏捷的流程里作者没有给出一个明了的定义,只是提出:在软件工程的语境里,“敏捷流程”是一系列价值观和方法论的集合。
由此我对敏捷流程的定义产生了疑惑,于是查阅网页,没有查到“敏捷流程”这个概念,而看到了“敏捷开发”这个词汇,里面说到:敏捷开发是以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。[2] 我到目前为止看书所得到的对“敏捷流程”的理解,我认为他们应该是同一个概念。但转而又觉得开发是一个“动态性”的过程,而“流程”一词在百科的定义是这样的:“基本意思是指水流的路程;事物进行中的次序或顺序的布置和安排;或指由两个及以上的业务步骤,完成一个完整的业务行为的过程。”[3]是一个“静态性”的过程,由此我又认为他们并不是等同,希望得到解答。
四、还有哪些敏捷开发方法论
在书中,作者一直在强调敏捷这个字眼,而在书中也点到了几个经典的方法论:问敏捷的方法论有哪些?
答:比较有名的是:
爱抚弟弟(FDD – Feature Driven Design)
史克朗姆(SCRUM)
极限编程(XP)我查询网络稍微了解了一下这些方法论,并且得知了另外的几个方法: ①水晶方法 ②DSDM-动态系统开发方法 ③测试驱动开发(也就是TDD) ④Lean软件开发(精益软件开发)[4] 不知道能不能把这些方法论理解为一些原则的集合,就比如lean软件开发的准则是:消除浪费、增强学习、尽量延迟决定、尽快发布、下放权力、嵌入质量、全局优化,是不是说明它是这些准则的集合,符合这些准则的方法就称为LEAN软件开发? 对书本也是粗略扫了一遍,有点云里雾里不明所以QAQ。
[4]参考自:FakerWang:敏捷开发方法简介
五、学生的个人能力衡量与发展?
在课本3.1 个人能力衡量与发展里由职业篮球选手入手点到了软件开发的工作量和质量怎么衡量:
a . 项目/任务有多大?说明项目的大小,一般用代码行数(Line Of Code,LOC)来表示;也可以用功能点(Function Point)来表示。
b . 花了多少时间?可以用小时、天、月、年来表示。一组人所花费的时间可以用(人数×时间)来表示,例如某项目花费了10个人×月。
c . 质量如何?交付的代码中有多少缺陷?这样子看来是没错的,但学生的个人能力似乎不能这样子衡量,毕竟作为一名学生,不会像一个职业人员一样守着一个项目钻研上一整天,学生还是由每天的学习进度需要去跟上,这样子零散的编程时间或者说是完成一个项目的时间很难得到捕捉并截取下来作为一个数据来衡量,而且学生目前的项目一般不会大哪里去。那么要如何去衡量呢。
【附加题】
请将问题提交至豆瓣:*https://book.douban.com/subject/27069503/*, 并在博客中给出链接
在豆瓣页面的最下方 “读书笔记” 那里发言, 《构建之法》的作者会亲自答复问题
豆瓣提交链接