在上这门课之前,经过两年各种基础课程的学习,感觉做软件这个事还是遥不可及。尽管写过一点大作业,比如java的,c++的,但都是“关起门来搞建设”,以练习新语言为目的,写出来的小工程简直不堪入目,除了能跑以外自己都不能忍,更不要说用户体验,团队合作,迭代开发......
我当然不是否定这些青涩的写简陋软件的经历,这都是程序猿的进化之路。然而,除了基本技能的练习,也需要更多提炼的实践中的思考,来确实的将技能转化为可见的友好的实物。邹老师的软件工程课就给我们提供了这样的一个转折点。
我认为软工课最重要的是老师讲解和同学实践两个线程并行,所有的理论知识都亲切而紧密的嵌入实践过程,一旦割裂就容易变成传统软工课那样概念靠记,实践成了一个和软工没多大关系的大作业。我为什么感觉在这门课上收获很大,其一是因为理论都在实践中和我亲密会见了,前辈的思考也成为了我的思考;其二是老师在课余给我们的空间很大,不管是实践还是在理论学习上,我们真正的收获也是在课外(当然是从课堂延续下来的学习)。
我在课余基本看完了邹老师的讲义,阅读作业中的博客,我深刻感觉到学好数理化固然重要,但是开发中的哲学反思也可以决定一个软件的品质高低。
首先,我先谈谈前辈们为了让众多天才的头脑能够和谐工作而想出的合作开发模式(冒充一把极客^^)。
结对编程方法让我印象深刻,并在结对项目中感受到了这个方法的确对效率和正确率很有帮助。以往总是自己苦思冥想的设计算法和调试,现在旁边多了一个头脑和一双眼睛,在交流中理清思路,并会格外注意程序的可读性,代码的品质就上去了。
在团队项目中,daily scrum也是一种集中开发的方式,这个方式对整个项目的开发进度密切关注,非常高效和压力大。每天都有计划,每天都要做任务,并且一旦拖延容易成为团队中的“老鼠屎”,所以对每个人都是一种无形的激励,能很大的激发大家的开发能力。然而,毕竟我们不是全身心的在一个软件项目中,我们必须在各种课程和大作业中夹缝求生,因此我们并不能每天聚在一起详细的讨论,但是我们也尽量按照开发计划执行任务。
其次,我要说的是一种思维模式的转变。
以前的大作业从来不关注是否好用,是否美观,从来没从用户的角度看问题。团队开发中,不管是在功能性分析还是在用户体验调查中,都突出了用户对软件的意见的重要性,这样的思考角度让我们重新思考软件需求分析的重要性。我们在需求分析这一块做得比较少,主要精力都用在程序逻辑和代码上了,因此在后期运行的时候就发现体验不佳的问题,包括界面和游戏的难度等方面。因此,软件开发不是代码的累积,而是对现实问题进行精确分析后,用最高效的开发解决现实问题。
所幸,还有一个迭代开发的理念,本着对软件负责的态度进行多次开发。我们在α版本中发现的问题还能在β版本中补救,但是这个开发周期对这个比较大的游戏还是太短,因为没有实现比较好的用户体验,我们遗憾的跳票了。但是我们收获了一种态度,软件开发是周期进行的,后期的改进和维护的工作量也不可忽视。
最后,我要说习而学也是一种很重要的能力。
我在团队项目中做美工,photoshop基本不会,我就是用习而学的方法快速上手。因此我认为习而学对入门是很重要的,因为很多技能必须动手才能谈得上进一步学习。习而学并不是说将“学”弱化,在入门上手之后,如希望有更多提升,就应该再强调系统的学习。
这一学期的软工课很充实,并且所学到的东西在实践过程中已经深刻体会到了,学到的是“渔”,只要在今后的开发中常常运用所学到的思考方式,这些收获肯定是一辈子忘不了的。
但是,遗憾的是,各种大作业任务比较重,因此软工课投入的精力比需要的要少,否则应该收获会更大。