软件工程的历史虽然说只有短短的四十多年时间1968 年提出),但是软件工程的主体– 人类– 已经出现在世界上好些年了。  人还是那些人,事儿还是那些事儿,  好的,坏的,可笑的模式同样会出现。我看到同学们在分析前面的学生的软件项目的时候,link1link2)我不禁想起一个相声– 画扇面。  我们不妨拿它和软件工程做个比较:

 

画扇面

做软件工程团队项目

相声是一门说学逗唱的艺术

 

我刚买了一把纸扇

哦,拿来看看,一把白纸扇… 上面空空如也太可惜,拿不出手啊。如果能画上画就更好了。我这几天也没什么事我就给你免费画画!

软件工程讲究的是需求分析项目管理开发测试和维护

 

我觉得咱们团队项目做一个好用的小工具就好了,  我已经做好了一个原型。

这想法固然好,  但是我们这么些个编程高手就做这么小的一个工具未免拿不出手。我们要把它搞大!

 

太好了,您能画什么?

画个美女图怎么样美女出浴图或美女春游图都可以考虑。

我激动ing…

那我们做什么呢?

我们扩展一下把所有工具都实现了,一统天下。几种工具结合起来!

我激动ing…

 

 

过了几天甲问我那美女画好了么?

喔,美女画好了!你看这美女的小脸蛋儿,眼睛稍稍大了点  但是我不如给你改成张飞算了!都是人体,  我可以很快重构一下我画张飞最拿手了,过几天就好。

 过了几周

通过调研才发现这么多工具都有自己独特的需求不同需求互相冲突,不好协调, 怎么办?

我们可以做成一个通用的工具,统一需求解决用户从头到尾的问题。

 

过了几天... 

甲问我那张飞?

乙:张飞?!喔对的,张飞也画得差不多了你看这张飞的胡子,这身躯…  是粗了点… 要不咱们画成山水,这张飞,这张飞...  马上就可以变成一块怪石!

甲:  大热天的我等这扇子... 我容易吗... 

过了几周

通用的工具听上去很好,  但是太通用了不好掌握,我们到底要实现哪些具体功能呢?

我们可以做成一个开放式的平台!这样所有人都可以做一个插件来实现这个平台的一些功能!而且别人还可以用我们这一个通用的框架开发任意别的软件。你想想 - 任意软件啊! 

我激动,不过我们软工课快要结束了, 要交作业啊

 

 

过了几天,

我那山水?

啊,山水  我也画好了。  你看那巨石,很巨大很给力吧…  构图有点那啥… 容我再改改。 

您什么时候画好 这夏天都快过了! 

乙: 嗯,  我的山水画还是有些宋人风格的... 假以时日...     如果你急着要用扇子,  这样吧我把扇面全涂黑了你再找人往上写金字好了!

 

过了几周

项目发布时间到了我们的平台还没有,工具还没连起来,怎么办?

咱们可以把项目开源到网上另外也许有很多开源的朋友闲的没事,可以给我们的代码写一些注释等等。这是我们对开源运动作的巨大贡献, 输出价值观, 这可不是每个程序员都能做到的啊。

 

甲: 那期末怎么交差啊?

乙: 赶紧写 PPT! 

 

 

很多学生学了一些编程语言, 读了一些技术博客, 一般都豪情万丈.  他们做一个项目恨不得展现自己平生所学, 再加上前沿技术, 做一个轰动性的创新。 这固然值得鼓励, 但是经验显示, 这些往往都不能成功。

 

我们看看成功的例子, 他们是怎么开始的, 例如Linux 刚开始的时候: 

I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones...  (source)

 

我们还看到管理学大师 Peter Drucker 的忠告 –

Those entrepreneurs who start out with the idea that they'll make it big – and in a hurry – can be guaranteed failure. (source)

 

解决大问题固然让然感觉美妙,  但是把小问题真正解决好, 也不容易, 我们回头看看博客园, csdn 等IT 人士云集的网站, 每天都有很多巨大的新想法、惊世骇俗的评论冒出来,   争论美女/张飞/巨石的重构问题,  对一些通用的框架/平台发出一些人云亦云的评论, 等等。 这些文字, 大多数会转化为墨水, 把扇面涂黑,  让后人在上面写下金字。