为项目填写迭代细节

“迭代细节”一次,是我根据“iteration detail”直接翻译过来的。中文名词里是什么,我不清楚。

我们项目的第一阶段终于完成了,最后的任务就是填写迭代细节表格:包含了用户需求、使用案例、估计时间与风险时间、任务说明以及最后的迭代细节。其它的部分我们一开始都填好了,但迭代细节我们一直留着没填。这本来应该是在项目开始的时候填写的,为什么留到现在才弄呢?

原因和过去一样,我们选择了一条偷懒的方法。开始的时候就填写迭代细节,有点无的放矢。虽然这样做并不是正确的方式,但相对来说容易一些。我们的另一门课《分布运算》课上老师给我们讲过类似的情况:以往的第二个作业是做一个服务器-客户端模式的任务管理系统,交作业的时候要叫做出的成果和设计的报告。本来设计报告是要在项目实际操作之前写的,但老师发现学生们都是先完成系统,再写报告。于是后来老师就把这么一次作业分成了两次作业了,于是现在的第二个作业成了设计一个这样的系统,提交设计的报告,而第三次作业则成了实现你设计的系统。

虽然道理我明白,不过过去我一直觉得做文字上的设计会影响一瞬而逝的灵感,应该抓住灵感后马上开始写代码。想我们项目这种巨细靡遗的迭代细节,我是连想都没想过的。Knuth倡导的Literate Programming,像在程序里写文学作品一样的做法,我是更无法接受的。

通过上次的经验,我体会到完成详细的文档对后面的维护是相当必要的,因此我才话了很长时间为几乎每个函数都写了尽量详细的Javadoc。过去我看Java api的源码,感觉似乎注释比代码还要多。现在我觉得这是应该的了。

全Mac团队

今天讲一件我前天发生的事情。

这学期我选了一门《软件工程》课,课程要求我们组成5人或6人的开发小组完成老师布置的项目。小组模拟现实生活中的软件开发进行XP编程:小组中的一人充当用户,由他在老师给下的软件要求的基础上进行充实,我们关于软件要求的问题也问他;另外的人分成两个小队,分配任务后进行结对编程。前天正好是我们小组约定第三次开会的日子。

我讲的事情与敏捷开发无关,而是关于我们的开发环境的。

我之前写过一篇文章《学校应当使用跨平台软件》,提到我在得知我们小组使用Java来做我们的项目时有多么课开心。得知这一消息是在我们小组第一次开会之前,那时我们还没见面,只是简单的用电子邮件讨论了一下。

在我们第一次的会议上,我就看到我们小组5人中,除了我以外有两人在用MacBook Pro。这让我一下子安心了许多。第一次的会议决定了用eclipse来作为我们的开发环境就顺理成章了。不过由于eclipse的GUI Builder不如NetBeans那么好用,我们又换成了NetBeans这样的工具。

几天后我与和我组队的同学进行结对开发的时候,我发现她带了和我一样的MacBook。这样我们小组用Mac的人又多了一人了。这样就只差我们组的用户没有被确认了。中间的一次会议中,他来的有点晚,我们还猜过他用什么电脑,有人说他可能是用的PC,不过都不会影响大局了。

前天的会议末尾,我们“正式”的问了他的开发环境,他向我们确认了他也在使用Mac。这下我们全部的成员都使用MacBook了。我们的leader打趣说,我们甚至可以使用Cocoa来开发程序的界面,因为结合XCode,用Cocoa写界面实在太简单了。我们还讨论了大家用Mac的原因,多数人同一它的笔记本质量实在太好了。这一点我是深有体会。

其实,全组成员都用Mac倒不是重点,重点是大家都使用Java。我在那篇《学校应当使用跨平台软件》上表达了对学校要求学生使用非跨平台的软件的不解。我觉得学生有权利选择自习喜欢的平台,而学校强制学生使用单一平台上的软件,相当于剥夺了学生对平台选择的权利。有人说Windows平台的使用人数最多,证明Windows平台好用,因此学校使用Windows平台教学也无可厚非。对于哪个平台好用,我觉得别人永远都无法代替我做出决定。即时全球的人都用Windows,我还是觉得Windows难用。我对Word的态度也是一样。

那篇文章发布了之后,过去的同学在Twitter给我说“Windows已经是事实上的标准,而且买电脑都有Windows的使用授权。世界上有那么多人选择windows本身已经证明windows好用了……”,最后还诘问我“我很难理解你为什么对m$那么大意见,而不是对intel”。其实我对微软没有什么意见,从一个计算机专业的学生的角度来看,微软能做出像Windows这样的产品本身就很了不起了。微软的前领导人Bill Gates我也非常尊重。我也从来不写“M$”,因为我觉得微软的软件定价也没有不合理之处。只是Windows的操作习惯不符合我的口味而已。Intel的CPU好不好,我不做CPU层面的开发工作,无法判断。不过我身边有同学用HP的笔记本,用的是AMD的CPU,经常开机没一会风扇就嗡嗡响倒是真的。

我非常感激Sun,它的Java基本上实现了跨平台的理想。Swing也比.NET、Cocoa、GTK+、QT之类的图形类库更跨平台。我曾经想过,如果Sun运作得当的话,可以像Apple那样推出家用计算机,硬件上用自己的Sparc,软件跑的是Solaris,应该也会相当不错。只可惜没落到了今天这般地步。