软件工程的历史虽然说只有短短的四十多年时间(1968 年提出),但是软件工程的主体– 人类– 已经出现在世界上好些年了。 人还是那些人,事儿还是那些事儿, 好的,坏的,可笑的模式同样会出现。我看到同学们在分析前面的学生的软件项目的时候,(link1, link2)我不禁想起一个相声– 画扇面。 我们不妨拿它和软件工程做个比较:
画扇面 | 做软件工程团队项目 |
相声是一门说学逗唱的艺术…
甲: 我刚买了一把纸扇 乙: 哦,拿来看看,一把白纸扇… 上面空空如也太可惜,拿不出手啊。如果能画上画就更好了。我这几天也没什么事, 我就给你免费画画! | 软件工程讲究的是需求分析, 项目管理, 开发, 测试和维护…
甲: 我觉得咱们团队项目做一个好用的小工具就好了, 我已经做好了一个原型。 乙: 这想法固然好, 但是我们这么些个编程高手, 就做这么小的一个工具, 未免拿不出手。我们要把它搞大!
|
甲: 太好了,您能画什么? 乙: 画个美女图怎么样? 美女出浴图, 或美女春游图都可以考虑。 甲: 我激动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 人士云集的网站, 每天都有很多巨大的新想法、惊世骇俗的评论冒出来, 争论美女/张飞/巨石的重构问题, 对一些通用的框架/平台发出一些人云亦云的评论, 等等。 这些文字, 大多数会转化为墨水, 把扇面涂黑, 让后人在上面写下金字。