课程总结

1)回顾你的第一周的计划,你完成的程度如何?请举出具体数据和例子

回顾一下第一周的计划,当时我认为中重要的5项技能有:1.Design/架构设计,模块化设计,接口设计;2. Implementation/模块实现,逐步细化; 3.Performance/效能分析和改进 4. Conmmunication/线程之间进程之间,不同平台进程之间; 5. Comprehension/理解已有的程序,阅读分析,Debug。

我觉得完成结果如下:

  1. Design/架构设计,模块化设计:在对联项目中,我主要负责前端代码的编写,在前端的架构设计上,与后端的接口实现上我都花了较多时间,有一定的提升,但不积跬步,无以至千里,要完成我的目标,还要靠日后的努力。
  2. Implementation/模块实现, 对于模块化的实现,同样也花了较多的时间,从最初的设计稿,到最后的可以点击的交互界面,实现过程中这方面也有较大的提高。
  3. Performance/效能分析和改进,这一项我们还是比较有发言权的,刚开始的时候,小程序运行的速度可以说是非常的慢了,平均下来一张图片的处理需要至少30s,对于用户体验和服务器质量上面来说都是极为不合格的,但后期进行了较为大刀阔斧的代码重构。
  4. Conmmunication/线程之间进程之间,不同平台进程之间,因为我本身做的是前端,涉及到数据在不同的文件中进行传输,也涉及到数据在前后端之间的传输,所以这方面也是花了比较多的时间。
  5. Comprehension/理解已有的程序,在结对编程的过程中,需要看懂对方的代码,大量的时间也有练到这一方面。

由于对于上面所述的这些点来说的话,是比较难以进行量化的,上面只能说一些比较模糊的,对于具体的数字可以这么计算:

    1. 词频统计(3*5=15h):Design/架构设计(10%),Implementation/模块实现(20%),Performance/效能分析和改进(50%),Conmmunication/线程之间进程之间(10%),Comprehension/理解已有的程序(10%)
    2. 对联项目(5*20=100h): Design/架构设计(10%),Implementation/模块实现(30%),Performance/效能分析和改进(30%),Conmmunication/线程之间进程之间(15%),Comprehension/理解已有的程序(5%)
    3. 阅读作业(10h):阅读作业的话,因为阅读了比较多的·关于软件工程,的例子以上的内容不与涉及
    4. 案例分析(10h):当时是以CSDN app为例子说明的,对bug的理解更加深入吧

2) 你在课程开始快速浏览了《构建之法》,提了 5 个问题, 请回顾那些问题, 自己回答它们。如果不能回答,为何软件工程课不能让你回答这些问题?

问题:

Q1:P48 第三章 3.2软件工程师的职业发展

 书中介绍了几种证明个人能力的办法和模型,例如考级,Steve McConnell,大公司版本等,有很多方法是很早以前的,对待迅猛发展的IT行业,这些”过时“的方法还适用吗,如果适用的话,那他们又是怎样适应目前这与日俱增的信息量和知识量,还有不同的时代特点,而且很多是只有定性没有定量的方法,对于这样的问题只需要进行定性分析吗?软件工程随着时代的变化必然会产生新的学科新的方向,新的领域,那这些衡量版本是否会失去了衡量的价值?软件工程师在整个团队中的任务分工都是不相同的,但是却用同样的测试方案会不会不准?还有就是书中只告诉了我们评估的方法方案,那我们评估的结果要如何提高呢?还有就是有没有可能将这些分级方案放到课程打分上来,让软件工程课程打分更加科学多样呢?

回答:

我认为评分的机制是发展的导向,非常重要,各种各样的的评分机制也随着时代的发展更新着,过去的方法自然不适用于现在,但有一定的参考价值。

问题:

Q2:P72 第四章 4.5结对编程

 书中讲了很多例子例如跳舞等例子来说明结对编程并非一朝一夕能够练成的,练成以后就威力无穷,第一次难免会遇到许多的问题和不解之处,书中也给出了一一解答,但是我还是有一些疑问:极限编程是对两人水平差异性有要求吗?我想了一下假如一个啥都不会,就纯粹是在教学了,所以我觉得肯定是有要求的,那么这个要求是怎么样的呢?是两个水平相同的人结对编程效率高,还是稍有差异效率高?还是完全取决于两个人的差异(毕竟是代码复审的极限编程),怎么样的合作才是极限编程效率最高的合作?(我觉得这个问题非常有意思)还是就像找女朋友一样需要找一个合适的黄金搭档呢?我奇思妙想了一下,有没有可能做一个辅助程序员的结对编程AI program?这样的话一个人也能做到结对编程,而且成本还低,还能做一些个性化定制。

回答:

我现在觉得结对编程不在于水平,而在于不同,因为是不同的人会看到一个问题的不同面,并且对于理解彼此的代码有利,在这个方式中,水平的差异不是那么的重要。

问题:

Q3:P85 P90 第五章 5.2软件团队的模式 5.3开发流程

 书中讲了各种各样的团队模式和各种各样的开发流程,读完之后我依然有一些疑问:我觉得两者有着非常紧密的联系,我认为软件工程就像做菜一样,团队里面的人就像食材一样,各有各的作用,而各种各样的团队模式就像各种各样的炊具,而各种各样的开发流程就像做菜的工序一样,我觉得食材(人才),炊具(团队模式),以及工序(开发流程)要互相配合好才能做出美味的菜肴(软件),是不是这些开发流程与团队模式毫无关系呢? 如果有关系,那么各种各样的团队模式又与各种各样的开发流程会产生怎样的火花呢?那么什么样的项目人适合怎么样的开发模式,开发流程的组合呢?那么在使用了不适合的开发流程和团队模式会导致怎么样的效果呢?如何及时发现我们的团队模式或者开发流程存在问题呢?

回答:

开发流程和团队模式当然是要互相配合才好啊,他们是针对过程的两个方面,其中开发流程是从软件出发的,团队模式更在于人,两方面都做好,才会达到最好的效果。

问题:

Q4:P231 第十二章 用户体验和质量

 书中这章介绍了各种各样的改进用户体验的例子,其中印象特别深刻的是GE公司总裁杰克韦尔奇的核磁共振机的故事,我一直认为作为产品,质量是第一位的,但在故事里放弃质量追求用户体验的情况却取得了成功,但会不会是因为质量的下降恰好是用户可以接收的范围,假如图像完全的失真,我觉得这样的改进应该是不会成功的,那作为一个决策者要去重视哪一方面的重要性呢?书中韦尔奇是一面之词,1000个人就有1000个哈姆雷特,他所说的用户体验的改进可能是对应其他人用户体验的下降,那如何权横这就是大多数人用户体验好的的改善?工程师要如何不断提升自己软件的用户体验而不受个人偏好的影响?有没有可能做一个权衡一个软件各方面的优势雷达图,用改雷达图表现出这款软件各个方面的评价,然后正真的去统计这些产品的后果,为决策有参考意义。

回答:

在产品质量可以接受的情况下,用户体验应该是摆在第一位的,我们的对联项目充分说明了这一点,我们团队秉持着用户第一的原则,虽然在过度阶段又提出需要改善对联质量的问题,但最后时间是有限的,比起对联质量用户才是第一位的,毕竟最终的使用者是人,最后我们的用户量也说明了这一点,再举个例子,有道翻译和其他的翻译软件,因为有道翻译有画词翻译的功能在阅读英文文档的时候就非常的方便,但对比其他没有此功能的软件,翻译的质量虽然比有道翻译要好,但是我们还是选择有道翻译。

问题:

Q5:P319 第十六章 只先一步

 书中这一章可以说颠覆了我很多原来错误的想法,但是还有有些疑问:依然不懂为什么大众对创新会产生这样的一条鸿沟,它就像一个零界点一般,刚刚大于一点点的话就可能成功,而小于的话就一定会失败,这种鸿沟产生的原因是什么?为生么就会在那完整的断开,那我们是否就要问怎么寻找这个鸿沟?怎么寻找这个创新接收的最佳时机?假如这个时机是可以确定的,是否意味着非创新者可以投机取巧窃取创新者的劳动果实?我理解的是刚开始用户会很少,然后随着时间的迁移,用户会越来越多一直到这个东西过时了,用户一点一点减少,但为什么会出现鸿沟是个有意思的问题,另一个问题就是文中说成功的公司创新只是维持技术,但是不管是google还有facebook,都集中力量做AI,请问这么理解这件事?

回答:成功这件事本身就与很多因素相关,营销方式,用户体验,软件质量。。。创新只是中的一部分,仅仅用这个作为一个软件成功与否的指示器,就比较片面了。

3) 看看还有什么新的问题产生,请列出来,建议列出 2-3 个新问题。 可以让老师和助教来回答

问题1:在做项目的时候,我不知道燃尽图是为了PM画的,还是对于所有成员画的,我觉得有时候并不需要知道其他的部分做到什么程度了,我们自己的进度,自己又更加清楚。还是一中大家向PM汇报的一种方式,我想确认一下怎么最好的发挥他的作用。

问题2:项目中按难免会遇到那种为了赶deadline必须砍feature的时候,这个时候一般在微软是怎么决定砍去那些feature的呢,怎样的决策才能最大限度保证它的科学性。

4)你看了一些软件工程的文献, 你的团队也做了一两次 “事后诸葛亮”分析,  可以再去看一遍,现在有什么新的感想?

最主要的感受是,其实一个团队PM的思想很重要,就像电影导演一样,导演很烂的话,再好的演员,再好的剧本都出不了好戏,这一点我充分肯定大成在我们团队发挥的作用,一个软件的成败和PM有直接关系,PM的思想导向最终决定了这个软件的去向。其次是我觉得用户体验真的很重要,其实在质量上用户有一个期望,达到那个期望,功能质量就没有那么重要了,用户会更加的在意使用的感觉,而这种感觉直接决定了用户量以及最后软件的成与败。就拿我常用的几个软件来说吧,一个是有道翻译,之前已经说过了,另一个是texstudio,在写论文的时候,latex是一个很好的选择,编辑latex的软件很多,为什么都可以编译latex但texstudio最终是我的选择呢,因为它左边代码右边pdf实时翻译的功能,造成非常好的用户体验,在这里用户的期望就是能编译出pdf。

5)对比一些技能评价表,你有什么提高? 还有什么收获是不能用数字衡量的?

我觉得Design/架构设计,Implementation/模块实现,Comprehension/理解已有的程序各提高了两个点,而Performance/效能分析和改进,Conmmunication/线程之间进程之间提高了三个点,当然是和队友的友谊是不能用数字衡量的啦。

6)设想一年之后, 你到了你职业发展的下一个阶段(高年级, 读研,工作),回头看这门课, 你对于这门课的教学方法, 老师和助教的工作,和其他课程的衔接,有什么意见和建议?

我认为这门课程和大学里设置的课程不太一样,总体的设计非常好,把时间还给学生去真正的去动手,动手的方式学习,这一点我很赞同,与其他课程的衔接上我希望,这门课以后可以多一些与我们的研究方向related的内容,因为我们都比较junior,这样的练习能够让我们学习软件工程的同时也获得专业技能的提高。

你可能感兴趣的:(课程总结)