作为一个项目经理,在项目开始前一定会考虑一个问题:究竟采取什么方式去开发一个项目?这貌似是个很狗屁的问题,别去网上搜,因为大多数情况下你会得到这么一个答案:“视项目情况、客户要求而定”。在这里我不想讨论RUP是不是适合大型项目,敏捷是不是适合小型项目,更不想讨论10个人的team该算是大team还是小team,这又不是在争大老婆、小老婆。今天只想谈一点个人看法,就是怎么去使用工具去帮助一个team做开发。

先看一张截图(点击看原始大小)

inside.png

这是我们公司的内部主页,界面就不用评论了,我知道做得很漂亮:-)我敢说Nazca的UI在业内是排得上号的,只是酒香巷子深而已。看一下功能,mail,calendar,wiki,debug,blog。下面分别蛋一下

[mail] 这个就不多说了,是个公司都需要一个内部邮箱,一是公司品牌,印出去的名片上有@hotmail.com,有@gmail.com总不是一件心旷神怡的事情。二是基于一定的规范后邮件地址会比较容易记,比如原先Aug用的是是英文名,像我的就是jayxu@aug…。现在我们公司用的是姓名全拼,比如[email protected]。这里说一下gmail的公司邮箱,我们公司用的就是,使用gmail的邮件服务,但可以自己定域名,100人以下免费,而且天生跟google其它服务集成,比如calendar和gtalk。SaaS现在喊得很火,但真正做成功的没几个,而google是SaaS的先锋和最好的学习材料。gmail,calendar,gtalk,docs,google groups,这几个哪个都是该领域的佼佼者,再使用互联网这么一集成……难怪把m$吓得打算收购yahoo。对于其它竞争对手m$可以用钱把你砸死,而对于google这种创意比你好,技术比你强,拿钱互相砸也不输你的主,m$只能迂回了。其实面对google m$也挺郁闷的:什么都让你占了,还让不让人活了?

[calendar] 有会议、活动怎么安排?

  • “用outlook定schedule,发通知。”是个办法,但别忘了,office是收费的,而且还得架一个active server。
  • “直接写邮件。”“那收到的人怎么安排?”“记在记事本里,在显示器上贴tips……”“那怎么拒绝或者时间上有冲突怎么要求重新安排?”“回复邮件,组织者发邮件协调,敲定,重新安排……”好吧,我只能说你活得很坚强,或者,你比较适合活在上个世纪……最后一个问题,怎么在会议前提醒?“每隔半小时浏览显示器上的所有tips,看接下来的半小时内有没有会议。”可行,但是有点问题,什么问题?从技术角度分析就是如何处理异步事件(asynchronous event),这个问题我面试的时候经常会出。上面这种实现是典型的轮询(polling),轮询最大的问题就是:a)需要有后台进/线程;b)轮询周期很难设定,像上面这个例子,轮询周期30分钟,那假设你在10:00检查了一下,10:00到10:30没有会议。可是10:10的时候收到一封邮件,10:25有个会议,怎么办?你说你能记住,好吧,既然你能记住那你还要轮询做什么?对于这种情况有两种对策,第一,强制所有会议通知必须在半小时前发出;第二,缩短轮询周期,比如15分钟。还是有问题,比如有些比较紧急的会议安排……第二种对策也有问题,理论上轮询周期最好在不影响处理器多进程性能的前提下竟可能地短,比如java里一般我会使用十毫秒或百毫秒级,对于大脑,我觉得5分钟应该是极限了。但即使这样也会有问题,就是人体默认情况下是没有晶振的,即除了以一个更短的周期去轮询计时设备外你是不可能精确地知道“5分钟过去了”的。 好吧好吧,的确有些钻牛角尖了,但是,以计算机的思想去看这个世界,不是很有趣么:-) 那google是怎么帮你解决这个问题的呢?首先你可以认为它是一个outlook的网络版,包括活动定义,邀请,拒绝在内的功能它都有,而且因为google calendar是一个web应用,所以用户只需要有internet的接入能力,不需要任何安装、部署工作(SaaS的核心立足点),plus,google可以通过邮件,calendar的客户端或者短信方式(目前免费,同时支持移动和联通号)在会议开始前通知你。而这种通知方式,正是异步事件的第二种处理方式:事件回调。在绝大多数情况下,应该优先使用回调。

[wiki] 下一个问题,如何维护文档?

  • 文件服务器,版本控制服务器 谁来维护?
  • team lead 如果你对这两个问题没有概念,那可以忽略,继续同情你的teah lead目前的生活。如果你是teah lead,正处于水深火热之中,那推荐你的team使用wiki,由整个team共同维护项目相关文档,包括开发文档,知识积累,research report,这样你将会有更多的时间来看我的博客。对于wiki的各种介绍,可以上网搜,我们公司用的是MediaWiki,很成熟的wiki开源框架,这里只想提一下网易N年前的一句口号:“网聚人的力量”。虽然网易已经半死不活了,虽然网易当时想出这句话的时候根本没有web 2.0的影子,但是不得不说的是,这句话点到了web 2.0的精髓,即由用户分享信息,分享信息的价值。

[debug] 很难想象一个项目没有bug tracking会是怎么样,除非是一个人单干的小项目,我们使用mantis。

[blog] 哈,我们公司有自己的内部blog,有点意思。其实我更赞成用外部的blog。因为一个有激情的程序员是有表现自己的欲望的,尤其是在技术方面,而blog正是这么一种给大多数腼腆的程序员发泄自己的感情的途径。coding累了的时候聊聊java,逗逗m$,涮涮ccp,只要不被和谐,的确是一种减压的好办法:-)。我们公司使用wordpress。

蛋完了,上面这些工具都是开源或者免费的, 用到项目中会提高一些生产力,更多的实践心得,以后慢慢拿分享吧。