从8月份小学期开始到现在,已经过去了近四个月,我们的项目也随着时间的慢慢流逝,一点一点的从不成熟的想法变成了有那么一点意思的产品(虽然幼稚了一点,但是基本功能大部分还是实现了,对比一下需求分析,我们做得还是挺不错的!),下面是我们项目实现的大致日程:
8.15~9.27:
做基本的知识准备,听课(似乎也没有认真听),做需求分析,其中第一版在9月2号讨论得出,后来又经过修修补补,于9月4日最终定稿;
9.28~10.31:
继续储备知识,复习Java程序设计,复习数据库原理,了解Oracle的基本操作,画E-R图,设计数据库结构框架;
11.1~11.4:
验证表结构,建立数据库,建立表空间,表,约束,视图;
11.5~11.30:
实际编码,写文档,模块测试;
12.1~
整体测试,优化系统,写帮助文档;
截至现在(12.2),我们的C/S模块的客户端代码已经达到了22,000+ 行(当然,其中不乏质量低劣的代码,整个系统的集成度也还不够,我想这是两个导致代码量大的原因,另外一个重要原因是:我们选定的题目不够好,后面我将会提到),C/S模块主要由周滔,王靖,李道远三人完成,其中:
周滔主要负责乘车卡管理,安全事故管理模块,以及系统的美工,代码量 1,500+;
王靖主要负责人事管理,部门管理,业绩考核模块,以及数据库的建立和日常维护,代码量8,500+;
李道远主要负责车辆管理,线路站点管理,客户反馈模块,以及管理员登录界面,主界面,系统集成和数据库权限管理,代码量12,000+;
我们的B/S模块部分主要由林栋完成:
林栋主要负责客户查询线路、站点信息,查询乘车卡消费记录、余额,提交建议、投诉。
上面提到,我们选定的题目不够好,作为小组组长,我应该首先做自我检讨:
一方面,做公交公司运营管理系统是我提出来的,其实她可以算是一个企业级别的管理应用程序,但我不自量力,觉得我们可以把这个系统做好,实际上虽然实现了基本功能,但离真正的企业级应用还有很大距离。在没有动手之前,我们认为,“只要完成了需求分析里的功能,就可以拿出去卖了”,结果现在呢?我们确实完成了需求分析里的功能,但“就算给自己用,自己都不放心”。所谓“蚍蜉撼大树,可笑不自量”,也许说得就是我吧!
另一方面,我在最开始时并不十分了解这个系统究竟应该实现什么功能,只是简单的在网上找了一些介绍性的资料,而且我没有控制好需求分析,我们并没有到实地进行考察,而是通过自己的主观想象臆造出来的,有很多细节当时并没有想清楚,只是一味的好高骛远,以为功能是越多越好。
当然,做这个项目毕竟不是我们的最终目的,我们现在也根本没有能力和精力来做好这个项目,但是我觉得我们的确从中学到了很多东西,拿我自己为例:
第一,我知道了写代码并不是一件简单的事情。虽然以前也在学校ACM网站上做过一些题目,但真正应用到实际中,却又是另外一回事,ACM要求的更多的是算法与数据结构方面的知识,而实际应用中考虑的更多的是整体架构以及模块之间的契合,至于细节,我想考虑的最多的应该是异常处理吧,虽然我们的系统并没有过多的涉及;不仅是异常处理,整天坐在电脑前面敲代码也并不是一件很愉快的事情,项目做到一半的时候我的颈椎就开始疼,现在还在疼呢!难道这就是我们以后要过的生活?唉,这也太让人沮丧了吧!
第二,软件工程太重要了。我们的需求分析做得不够好,直接导致后来的实现上的诸多困难,也许现在我们还没有“软件工程里句句话都是血”这样刻骨铭心的经历,但是,这个项目的确给我敲响了警钟。以前看周爱民的《大道至简》,觉得他说的太玄了,做完项目后我又大致浏览了前面几节,似乎现在有那么一点“共鸣”的感觉了,呵呵,不知道到时候学习软件工程能不能深入理解。
第三,做一个管理者好难。前几天和另外一个组的组长聊天,他说:“没办法,我们不能扣他们的工资!”可能说得极端了一点,但有时候我也感到非常无奈,经常在组员面前觉得无所适从,究竟怎样才能让组员做事、做实事,怎样才能调动组员的积极性一直困扰着我。有一个网友在我们的Blog上留下了这样的话:“软件中价值的创造不仅取决于开发人员所知道的和所做的,也取决于他们之间的关系以及他们共同完成的事情。沟通、简单、反馈、勇气、尊重。”在完成这个项目的过程中,虽然没有出现什么大的问题,但我们之间的默契肯定没有达到,不是每个组员都是把这个项目当成自己的任务来完成的,不是每个组员都为这个项目贡献了自己的全部力量(或者很大部分力量)。一个优秀的团队需要相互信任,但我并没有充分信任组员,这是我的错误。我曾一度感到心力交瘁,也许真的,做任何事情都不简单,想要做好则更甚。
第四,做什么事情都不能及于求成。在没有正式开始写代码之前,一个组员估计一个星期之内就可以完成自己的模块,然而实际上他写了三个多星期,中间的过程似乎也是异常痛苦的。正因为我们都急于求成,所以需求分析没做好,看来做什么事情,脚踏实地,一步一个脚印才是正道。
第五,关于解决问题之道。曾经在网上看到一篇关于如何成为一个黑客的文章,文章建议拿到一个东西应该首先对它有一个大致的了解,然后遇到问题时可以高效的解决它。现在觉得,知识不是最重要的,重要的是思维、是能力,这也许是现在我们所缺少的。我一直在尝试培养自己的解决问题的能力,发现这种方法确实是挺高效的。以前从来没有接触过NetBeans,装上后先看看它的FAQ和帮助文档是相当必要的,所谓“磨刀不误砍柴功”,正是这个意思。
第六,独立自主与协同作战。以前还看过一篇文章,其中提到:绝大多数(或者全部)的黑客都是自学成才的,而且他们对待问题的态度都是自己一定可以解决掉问题,他们遇到问题时并不急于去问别人,而是自己认真分析,自己找资料,依靠自己的能力来解决问题。也许黑客有其自身的特殊性,但我认为独立自主解决问题无疑是提高自己的最快、最好的途径。至于协同作战,其重要性主要体现在大的项目中,但协同作战并不意味着抛弃独立自主。就像在大的战役中,士兵间的相互配合是很重要的,但如果抛弃了每个士兵的自主性不谈,恐怕相互配合是很难做到的。我想说的是,相互配合最终是要落实到每个个体上的,协同说到底还是体现到了个体的能力与素质之上。
第七,关于经验。以前看见什么招聘公告上都注明“有某某经验者优先”,开始觉得没什么,现在才稍微有一点感触。有很多东西是平时在课本上所学不到的,而要靠平时积累。自己慢慢在实践中摸索出来的东西才是最重要的。
第八,专业素质。听一个老师说保送研究生面试时不一定看你得了什么奖,老师们会跟你谈话,很容易就可以知道你是什么水平,也许这就是专业素质吧。我自己觉得通过做这个项目学到了很多,知识和能力方面都有所进步。至于专业素质,不是一朝一夕可以提高的,还有待进一步努力提高。
唉,越说越多,越扯越远,就此打住,总之,这样的实践机会并不多,感谢学院,康老师为我们提供这样一次难得的机会,也希望大家以后能珍惜这样的机会,珍惜短暂的大学生活,珍惜青春!