通过上一章,我们大致明白了:大多数时候,我们项目的难点并不在于无法逾越的“高精尖”技术,我们使用的通常都是一些业也成熟的大众化的技术。这些技术对于外行而言可能很神奇,看代码就像看天书一样,但对于业类程序员而言,“技术含量”其实并不高。过了那个门槛,无非就是熟练与否的问题。
由于已经有了强大的框架/平台、丰富的组件,所以开发一个应用项目,更像是一个搭积木,或者组装汽车的过程。框架/平台就相当于汽车底盘,组件就相当于轮胎方向盘,这样打比方你就大概能明白了吧!
既然如此,软件开发应该很容易啊?项目管理有什么难的呢?为什么那么多创业团队直到关门散伙,产品都还没能上线?
一个原因是因为“大”。“量变引起质变”,任何一个事物,如果大到一定程度,一定会产生难度上的障碍。修一个两层楼的小房子乡里的泥瓦匠就能搞定,但要建成两百层高的大厦就没有这么容易了,绝对不是把两层楼的房子扩大一百倍就OK啦!否则的话,造航空母舰都不难——不就是把船造得大一些大一些再大一些么?一个项目,功能堆砌,哪怕都是些很简单的功能,只要数量上了一个层级,组织管理这些功能,都是一个相当麻烦的事。
但我们的功能不复杂啊!你可能会问,就做一个最简单的demo,为什么就始终拿不出来呢?
这很有可能,就是因为另外一个人神共愤的东西:需求变更。说“人神共愤”并不准确,应该是开发人员恨之入骨,产品经理没感觉——因为一般来说,这需求就是他改来改去改得不成人形的。所以知乎有这么一个火热的问题:你为什么想打产品经理?如果要排程序员最恨的人,HR估计还只能排第二。
说道理很累,讲两个小故事吧。
我做装修公司的时候,需要做一个企业网站。那时候我还根本不懂编程之类的东西,所以联系了一些“科技”公司,他们的业务员拎着一个包就到我办公室来了,问问我的需求,用A4纸给我画个界面,列几条需求,就要我交定金,然后出样图……哈哈哈哈,我仰天大笑,小样!我就是收定金出图纸的行家,会着了你的道?
像我这样的聪明伶俐小郎君,三下五除二就摸清了里面的套路,很快就联系了一个小伙子,1500块钱,就能把网站给我整出来,首页、后台、论坛、邮件、投票……数都数不过来的功能,全套!江湖传说,这种网站后期的维护很重要,我押了他500块钱的质保,网站上线后半年付清。一切都很顺利,设计通过(其实就几个页面样图),验收通过(花了不到半个小时看他给我演示),网站上线,付钱。
但过了两天,我发现了一点“小问题”,于是给小伙子打了个电话,他很快就修复了;又过了几天,我觉得投票功能不人性,得改改,小伙子有点不情不愿的,但还是承认改一下;接着这网站越用问题越多,这小伙子就急了:“叶总,你这些都是需求变更了,不好弄啊!”
“就这么改一下有什么不好弄的?又不是我们做装修,要敲砖拆墙的!”我觉得很奇怪,“而且这些是你设计上面的问题啊?怎么能算改动呢?你本来就没做好:图片上传之后都变形了。还是我给你想的办法,要先裁剪一下。你看QQ传头像都这样做的……”
这小伙子一副苦得说不出话来的样子,特让人可怜。我想起自己做装修也特别烦客服改方案,“那这样吧!我们也不来‘掰’是谁的责任了。只要不是页面死链打不开之类的,每次你改,我还是给你点辛苦费,怎么样?”
小伙子想了又想,“那也行吧!”
结果付了他两三次辛苦费之后,再给他打电话,他已经跑到广州去了?“后面的尾款你还要不要?”我问。
“算了算了,你那几个问题你另外找人做吧!”
还找得到屁的个人!这个网站已经被改散架了,用重庆话说,叫“捡都捡不起来”了。没改之前好歹还能跑,改了之后到处报错,而且是各种稀奇古怪莫名其妙的错误……
是不是我不该找私人,应该找个“正经”公司?
三四年后,在上海,我已经做程序员好几年了。我一个同学接了一个单子,也是做网站。她擅长前端,还需要一个后台开发人员,就找到了我。我们一起和客户见了面。
客户说要给网站做一个“改版”。他越说越激动,义愤填膺:“这么一个网站,我花了三万块钱!专门找的网站公司,他们接单的时候吹得不得了,技术多强多强……现在烂成这么一个样子,简直是没法用了的啦,你知道吧?”
是个什么样的网站呢?按客户的话说,“就仿‘凡客’做的一个小网站”。用三万块钱,做一个“凡客”一样的“小”网站,你牛逼!我在心里给他竖了个大拇指。更牛逼的是这网站公司还硬是给他捣鼓出来了,该有的功能还都有——就是不能“细”用,噼里啪啦的四处报错。
看着客户在电脑左一下右一下的点,东一句西一句的讲,这什么问题,那什么毛病……我突然有一种时空错乱的感觉。回过神来,想起我一脚踏进IT圈已经这么多年,不胜唏嘘。
现在我已经明白,网站公司其实是用的现成的模板,按客户的要求,在上面做一些改动而已。不然1500一个网站,3万块一个凡客,这么容易?改头换面还好(其实真要大幅度的改头换面都很难),涉及到后台的功能增减,稍不注意就“崩”了。
没有编程经验的人,会以为网页就像word文档一样,复制粘贴,这边移到那边,上面改到下面,很简单的嘛?功能加一个少一点,也不是大事,“调”一下就可以了呀?
程序猿宝宝心里苦啊!多想来一句:you can you up?
“我是不懂,但你们程序员厉害的呀!写个脚本,抢个月饼,不分分钟的事嘛?”
好了,吐槽完毕,我坑过程序员,也作为程序员被别人坑过,可以说点公道话了吧?
首先,能不能事先就把需求确定好?
这可能是程序员最梦寐以求的愿景!但事实上这基本上是不可能的。
这其实就涉及到另外一个问题:为什么需求会一直在变更?是不是CEO脑子抽风,是不是产品经理做事不认真?为什么软件不能像汽车一样,事先就设计好,然后流水线的造出来,一气呵成端庄典雅?
我这里提供一个新的思路:不是需求的变更驱动着软件的不断更改,而是“软件可以随意更改”的这种特性刺激了不断的需求变更。
装修好的房子,是不是住一段时间之后就会觉得这里不舒服那里不合适?少了一个插座,该加一个龙头,橱柜用着不顺手……“要是能改改就更好了!”只是这样的改动太费力,所以大多数时间我们都还是算了。
汽车也一样,开着开着想换个自动挡,开个天窗,加一个陡坡起步的防滑坡功能……只是你加不了而已!所以只好将就用,直到最后换个新车。
但软件不一样!理论上怎么改都可以,而且好像改动没多少成本?既然如此,这些我用着不舒服的地方,为什么我不改呢?改其实是一种“改进”,是一个不断完善产品的过程。“没有最好,只有更好”,所以只要产品在用,就一定会有不断的持续改进。“敏捷”所强调的“拥抱变化”,不是无奈之举,也不是为了装酷,而是有很深刻的现实基础和逻辑支持的。
所以程序员必须改变观点,正确的认识“需求变更”。偶尔的吐槽可以缓解压力,但在思想上必须认识到:需求变更不是一种我们必须无奈接受的折磨,而是我们必须勇敢面对的挑战,是项目迈向卓越的机遇和必然。
那么,接下来的问题就是:如何应对需求变更?
+++++++++++++++++++
太忙了。找个借口,给自己偷个懒:每篇点赞过30再更……累死了! =_=
多快好省!前端后端,线上线下,名师精讲
更多了解 加: