现代软件工程课的“年终总结”
先贴上课程相关的博客链接。
讲义目录,阅读和调查作业,团队项目要求,结对编程作业要求,博客列表,黄金点游戏(推荐!), Art&Fear
一个学期的软件工程课就结束了,回顾一下觉得这半年自己的收获很大。
在这个学期以前,我们所学的课程还基本都是基础课,自己写过的程序也都是类似图书管理系统的大作业。并没有真正的去做一个工程,更是没有听说过“敏捷开发”。我想如果没有上这门课的话,我所了解的软件工程应该就会停留在图书管理系统的阶段。
我觉得这学期让我收获最多的有两点:第一点就是在做作业的过程中真正感受到敏捷开发,这是从书本中学不到的,我们的团队项目就是用敏捷开发的方式,每天都有scrum,每天都要面对面地交流自己的成果,如果这天没有做什么的话还真的不好意思面对同组的同学。这对我这种“拖延症患者”是非常有用的,不然我就会拖到deadline再动手。而且经过两个开发周期,每个周期的设计、开发、测试阶段,敏捷开发的优缺点都体会到了。也算了解到真正的软件开发过程。第二点是阅读各种博客、文章和教材。写程序只是一方面,在读这些文章的时候,我能了解到那些在软件工程方面有着丰富经验的人是如何看待一些问题的。虽然我没有那么多的开发经验、对他们说的很多观点也不能做到感同身受,但是这些文章开阔了我的视野,让我知道软件工程并不是坐在电脑前面写好代码就行了。下面我来详细说一下这两点内容。
阅读推荐
这个学期我读了所有老师的讲义、大部分阅读作业中的文章、不到三分之一的《代码大全》(再次吐槽一下这个容易让人误解的名字。。。)。让我觉得收获最大的是这几个:
用户界面&用户体验的设计
关于这个我在之前的博客中也说过,我们之前写程序是在设计用户界面却从不考虑用户体验,觉得把功能都放上去就行了,但是却没想到用户是否喜欢这个设计、这样的设计是不是方便使用并且减少误操作。除了老师在讲义中提到的几个例子,我也注意到几个类似的情况。
1.人人网的“喜欢”和“回复”按钮
“喜欢”和“回复”按钮挨得非常近,很容易点错。而且我和几个同学已经点错过了。其实我觉得设计这样的按钮布局是很正常的,如果是我估计也不会想到这两个按钮很容易按错,但是体验过之后才发现这个问题其实很重要。而且有时候点错的后果很严重。。。人人网上已经有人吐槽了。
所以,从这点看出,用户界面设计不能只靠自己的想当然,有时候需要自己去试一下或者找用户来体验调查。
2.界面简洁很重要
现在的用户都很忙而且都很没有耐心,所以界面简洁非常重要,让用户在短时间内找到自己想要的信息。微软的WIN8系统就在向简洁方向发展。还有大家可以注意一下最新版的QQ登陆界面。
没有了原来的“取消”键,界面显得舒服多了。
Art & Fear
这篇博客是看到邹欣老师在微博上推荐后看的,看完后觉得很有感触,在这里推荐给大家。
《Art&Fear》这本书我还没看,不过它已经再我的日程中了。
This is a book about the way art gets made, the reasons it often doesn't get made, and about the difficulties that cause so many artists to give up along the way. David Bayles and I are both working artists, grappling daily with the problems of making art in the real world — the observations we make are drawn from personal experience, and relate more to the needs of fellow artists than to the interests of viewers.
博客中的一点值得我们思考:
(Page 29) The ceramics teacher announced on opening day that he was dividing the class into two groups. All those on the left side of the studio, he said, would be graded solely on the quantity of work they produced, all those on the right solely on its quality. His procedure was simple: on the final day of class he would bring in his bathroom scales and weigh the work of the “quantity” group: fifty pound of pots rated an “A”, forty pounds a “B”, and so on. Those being graded on “quality”, however, needed to produce only one pot -albeit a perfect one – to get an “A”. Well, came grading time and a curious fact emerged: the works of highest quality were all produced by the group being graded for quantity. It seems that while the “quantity” group was busily churning out piles of work – and learning from their mistakes – the “quality” group had sat theorizing about perfection, and in the end had little more to show for their efforts than grandiose theories and a pile of dead clay.”
这真的是熟能生巧的例子。对于没有像莫扎特那样天分的普通人,实现完美的方式最可能是practice。对艺术来说是这样,对代码更是这样。不断练习不断修改,熟练程度达到一定程度后才可能实现完美。
关于团队项目
在团队项目中,我的收获并不止是编程本身的。整个开发过程,让我了解到真正的软件工程的开发过程。最后的发布过程也让我收获颇丰。
“学霸”的工作量和功能其实不少,我们可以爬取其他学校、其他网站的计算机相关课程资源,可以从爬取的网站中抽取问答对,可以支持一个论坛的大部分功能。但是发布后收到的评价却并不好。除去一些问题较大的bug以外,大部分人在使用学霸时都没有意识到它所爬取和存储的丰富的资源。
这让我意识到一点:软件所能提供的服务要和用户说清楚,让用户能轻易发现。不是所有的用户都有兴趣一点点探索你的网站寻找新大陆,所以要把功能显而易见地展示出来,否则就会吃力不讨好。而且,用户体验很重要,用户体验好才会继续用你的产品。
最后的一点感想
从第一节课、第一个个人作业开始,我们就觉得这门课会是很辛苦、很充实的课。不像传统的软件工程课那样。老师在课上一直引导我们去体验去学习。半年下来收获确实很大,但是也有遗憾,在后半个学期,因为我们其他课程也进入大作业阶段,对软工课就不能像以前那样投入那么多精力了。导致团队项目第二个迭代周期做的成果没有M1那么多。
不过学习软件工程不能依靠某一门课,知识都是来自于实践。在今后的学习中,多动手多实践才是硬道理。