为啥多数软件越开发,就越臃肿

软件复杂度越大,开发和维护的难度不是线性上升,而是指数上升。这点很多经典的软件开发书籍都有谈到。在一个时程已经落后的软件项目中增加人手,只会让它更加落后。——佛瑞德·布鲁克斯《人月神话》当软件维护和开发的难度变大,程序员效率变慢,开发项目时间变长。这时候很多公司会去招更多的程序员。可是程序员之间沟通成本很高,加上新雇程序员的培训成本,很多时候都是在浪费钱,让公司结构更加臃肿。怎么解决?可以从以下几个方面下手。拔高招人门槛。包括提高面试题难度,增加面试数量等。聪明的人学习新知识更快,沟通成本更小。面试题经常测试被面试者是否能快速学习,会不会沟通,而不是纯粹测试技术能力。一旦新招员工的质量过关,《人月神话》里的问题就会不那么严重。这样做的公司比如谷歌,全职员工面试先要电话两轮,再把你飞到公司里面试整整一天。Dropbox 是个门槛更高的公司,实习生都需要谷歌全职员工的面试强度,以保证不选错人。选错人的损失对公司来说是很高的,要尽量避免。专注产品方向。当前领域还不够成熟时,跨足其他领域是件糟糕的事。Facebook 这么多年都没跨足社交以外,LinkedIn 一直在做职场社交,VMWare 一直在做虚拟机。他们有足够的人手去跨界,但都没有选择去,这是聪明的决定。反例如谷歌,涉足的领域非常多,但谷歌广告方面有非常高的收入,足够为这些实验品买单。还是是因为某种过度的,精益求精的心理,致使画蛇添足?这不是精益求精,而是在不明白自己精于什么的情况下乱精益求精。腾讯的产品也愈加臃肿,但核心的即时通讯还是做得非常好的,加上腾讯和谷歌一样,利润方面没有担忧,员工素质也高。在产品还不成熟的情况下就开始加其他功能,涉足其他领域,再加上员工质量一般,就只能是作死了。
■网友
这个嘛。。。话说,基本的需求做完了,产品经理总得找点新的事情来干,程序员也要吃饭啊,于是就有了想法,加入一些新的功能进去。还有一些人呢,就是脑子一拍,阿哟,功能XYZ很酷嘛,就加进去了。于是到最后,80%的人,默默的用着20%的功能。能不臃肿么?
■网友
你有一个需求,我有一个需求,我们在一起产生了两个需求,软件要满足我,软件要满足你,软件就需要集成这两个需求,我的需求满足,你的需求满足,两个需求让程序大小翻了番,就酱~
■网友
因为复制粘贴太多,随便改改什么都是On的复杂度,可能是语言原因,也可能是设计的烂
■网友
最主要是随着产品的迭代,功能越来越多,比如QQ,最开始只是通讯聊天,发展到现在俨然是一个大平台。解决办法:一个是严格控制产品的走向,不要一味地追求大而全;另一个是在已经相对臃肿的情况下,尽量做减法,砍掉活跃低的鸡肋功能,或者采用诸如web方式,客户端依然轻量级,承载功能却无限(参考微信、新版手机QQ内各种功能)。


    推荐阅读