时光荏苒,12周的课程转眼就结束了,作为在大学里学过与实践以及将来的就业结合最为紧密的一门课,个人收获颇丰,不得不说,邹欣老师所提倡的Learning by doing的学习方法确实是极为适合将来走向工作岗位,从事专业软件工程开发的计算机专业学生的,下面对这学期的学习历程做一个归纳,以及学得经验的总结。
坦诚的讲,在课程开始之前,并无兴趣对这门课做什么预先了解,印象里的这种课只是一些无聊的理论的集合(对于没有工程开发经验的人而言)并且包含很多落后于真正地应用在企业日常开发的知识体系,但是经历过几节课之后,我们开始了个人项目,这才让我感到不同,不管是规范的代码托管系统,还是技术博客,这些都是目前在开发人员中应用非常广的一些工具,而课程重视最终开发成果也和那句“talk is cheap,show me the code”契合度极高,就这样,我开始把之前了解的一些android开发的皮毛,应用在了软件工程的作业中,从最初的给小学生出题的软件开始(如图1)到带领团队项目结束(图2)。出题的小程序是用了一个下午一口气写完的,功能很简单,通过很朴素的界面支撑起同样简单的功能,一个纯粹为了完成作业而写的程序...但是对于软件的思考至此一发不可收拾(处女座的强迫症犯了),从基本的程序的功能的鲁壮性与以及界面交互是否的友好,到真正的从实用角度思考这个软件该如何做,让它成为用户生活中透明的一部分,让用户能够享受到这个app的功能而在使用的过程中沉浸在其中,而不在意这个应用本身,让它真正成为一个有生命的应用软件。如此之类,当然有很多的想法都是很美好的,在这中间又要平衡自己无比广袤的想象力与知识储备不够之间的矛盾。例如在这个出题软件中,因为存储方式采用的类内的变量,当一个activity生存周期结束时,变量内的信息便已经被清空了(activity之间用intent传递),故题库中的题只能是本次完成的,这当然是很不友好,但自己当时的知识只能做到这些,这种情况下,日后的知识积累过程中便有了一个侧重点,比如在黄金点游戏中,便能够做到把数据存储到手机里,在程序退出再次启动之时,还能够再次访问。在这一个阶段中,我开始重新审视程序的功能,一个好的程序究竟应该是怎么样的一个存在?只有庞大而复杂的程序才是最完美的软件么?好的程序究竟是为了解决100个无关痛痒的问题还是能够解决一个用户的痛处?我们是该做一个凌驾于用户之上,让用户看起来就高大上宛如万人瞩目的明星一样的软件,还是一个平易近人但是身怀绝技的万能管家(legal high里的服部叔那样的...),这种问题答案可能显而易见,但是我们在程序的开发过程中,很可能就会陷入这样的陷阱中,我们会做很多炫技的行为,我想这种行为就像一个掉书袋的作家一样,并不是用户所喜欢的,关于一个程序该是什么样,我想只有不断磨练技术,揣摩用户需求,才能在日后的开发过程中打造一款完美的产品。
图1
在这次的课程中,我学习到知识显然不只局限于技术,在结对编程与团队项目的开展过程中,如何与队员协作沟通,作为PM怎么把工作分配给自己的队员,如何把握项目的整体进度,最终的绩效考核标准如何确定,也都很锻炼人。在团队项目中,很高兴所有的队员都能积极热情地配合,这让我真的很感激,在这里向团队的所有成员表示感谢,很开心能与你们一起完成最终的项目。面对团队项目的各种零碎工作,所有的队员都各取所长积极地完成了各自应有的模块,最终取得的成绩很棒。在项目进展过程中,我深刻地理解到了凝聚力的重要性,所有队员都拥有一个相同的目标,才能驱动一个团队源源不断地进步。
总而言之,这半个学期确实收获很多,所有项目代码加起来差不多3000行,从把C/S应用到我们的团队项目中,到重新拿起photoshop为团队项目设计了几个UI方案(最终选中了图2的方案,与图一对比还是挺明显的),最终还收获了与队员一起奋斗的美好经历,回想起来,真是一段美丽的历程。
在此非常感谢邹欣老师,张老师不辞辛劳的教育,以及各位助教对作业认真的批改!
同时感谢邹欣老师奖励的小黄衫,“Build to win!”会一直激励着我往前走的~
图2