软件开发如同木匠做桌子

桌子

做一张桌子看起来十分的简单。任何人都可以做,不是吗?找个大块的四方形木板,四个等长的木头柱子,四个钉子和一个锤子。把四个柱子钉到四方板的四个角上,你就做成了一个桌子。当当当!

现在来让一个真正的木匠为你打造一张桌子。首先他要花时间跟你讨论桌子的用途和功能——用在室内还是室外,厨房还是餐厅,主要用来展示还是使用,它需要能够承受多大的负载。然后他需要确定使用什么样的材料——软木还是硬木,用木板还是三合板还是铁轨枕木。然后他会研究桌子的风格——桌边的截面设计,桌腿底座设计,桌腿是按在中央还是四角。这最后,他才去动手做这张桌子,他花大量的时间去斜截,凿眼,契合所有的连接点,安装撑条,使用高质量的粘胶,木钉,螺钉,他要检查表面平整,打磨它,着色,封蜡,抛光——打造出一张能够引以为豪的桌子。看起来是一大堆的事情要做,不是吗?它只是一张桌子,不是吗?

两种做桌子的方法存在着很多不同之处,你看出来了没有?

只用了四个钉子的桌子看起来很毛糙,它不稳,因为桌腿不牢固,桌脚不平,顶多能用一个星期,它的一个腿就会扭断,根本承受不起一个盐罐子的重量。木匠的桌子看起来更好,好用而且美观,它很牢固,不摇晃,桌腿经过矫正,直的,很平,没有棱角,能用很久,你完全可以放心的在它上面摆上一顿丰盛的晚餐跟一群客人享用。你更想要哪个?

当人们谈论起软件,大多数人想像的工作量很像第一张桌子的建造过程。只需要创建一个数据库,填上一些数据,画出一些界面,这就完了,你就得到了一个软件产品。我无论如何都想不出人们这样的一种认识是怎么产生的。也许是人们用惯了Excel——“我可以用Excel做这些,所以编程应该很简单”。什么?

开发软件不容易。需要做很多的工作。非常像那个木匠做桌子的方式。作为设计师和程序员,我们需要理解业务、用户用例,以及产品功能。我们需要讨论和理解谁将要用它,它有什么功能,它如何和其它软件集成,它要用在什么地方,数据量如何,等等,等等。我们然后才去花大量的时间搭建架构,确保它能承受用户和数据负载压力,要能够升级和扩展,要能处理大数据量情况(例如单表负载)。我们然后需要更多的时间写出有质量的、可读的、可维护的代码,测试每个组件,确保它们正确、快捷的运行,改正bug,清除瓶颈(在数据库表模型上使用正确的结构和关联)。我们还要使用更多的时间来把这些组件组合到一起,确保每个接口都正确的调用,确保错误都被捕捉到,确保界面设计可用,简单,美观(桌子的切截,钻孔,契合,打磨,着色,抛光)。最终,我们交付客户一个完整的可信赖的产品,一个符合需求的产品,一个我们和你们都引以为豪的产品。

我相信,木匠很少会遇到像程序员需要面对的那样让人抓狂的事。也许他的客户也会抱怨做这个桌子花了太长的时间,或造价太高。也许他的客户并没有说桌子的用途或应该是个什么样,然后大声的抱怨它跟他从未说出的期望的样子不一致。也许他们的客户会瞪着他说做这样的桌子只需要几块木板和几个小时,木匠做桌子已经有几千年的历史了,这种桌子能有什么不同。也许他们的客户会说这很简单,所以应该很快,很便宜,魔术般的做出来,我猜测他们是这样想的。

我们的客户完全也是这样。而且几乎每次都这样。从没例外过,最初给我们新需求时说“这只需要你花几个小时的时间…”,或“你可以这样做…这样更简单”,或“你只需要简单的把它改成…”。什么?

对软件产品增加新功能可不像多钉一颗钉子或多加一个柱子。我们需要理解新功能的形式和功用,创建它,测试它,写文档,确保新增加的功能不会影响现有的系统。如果我们不这样做,软件就会做出错,到处是bug,不能正确的运行,给用户来带来大量的问题。有很多软件项目都是这样,任何用过这种有问题的软件的人都不会信任它,甚至不愿意使用它。就像那个摇晃的桌子。

如果你需要一个新功能,尽管提,但你要做好准备跟我们的木匠——程序员们认真仔细的讨论它。我们会用正确的方案开发你要的应用,保证让它正确的运行,一直正确的运行。你到我们这里来是想要有质量、可信赖的软件,就像是你要从木匠那得到一个有质量的桌子。

千万不要告诉我们这样多简单,多容易——除非你自己做过。如果你真的认为能既迅速又简单的做出来,你自己试试。干吧,拼装出一个摇晃的桌子。

如果你希望得到一个好的产品,你要理解明白开发需要时间和技能,有很多你根本想象不到的问题在里面,工匠们也是人,是有感情的,一个好的产品是一个永远让人快乐的事,值得我们付出努力和耐心,这样,它将成为我们所有人能引以为豪的东西。

[英文原文:It Should Only Take You a Few Hours... ]
分享这篇文章:

16 Responses to 软件开发如同木匠做桌子

  1. cyler123 says:

    一般的习惯是,先要有个桌子。然后再慢慢研究

  2. myrual says:

    修改软件比修改桌子容易很多。

  3. sandyzhang says:

    做个会评估开发时间的好木匠

  4. haitao says:

    做一件事,外行可能会觉得很容易,外行也可能会觉得很困难
    但是前者更多

  5. loethen says:

    做软件的没事做做木匠也挺好的。锻炼了身体,也锻炼了自己的动手能力。
    不想做程序员的木匠不是好厨师。

  6. 阿蒙 says:

    桌子都是一次成型的东西,修改桌子比修改软件难多了。

  7. Prinze says:

    术业有专攻,一通则百通,如是而已!

  8. touvidia says:

    永远不要指望外行能理解这些。
    他们总是简单的认为,给你一把散弹枪你抬手就得能干掉一百米外的一只兔子。
    在他们的头脑里,世界就是如此简单顺畅,甚至他们以此粗犷的风格为荣。在他们的口中,技术人员只是一些“爱钻牛角尖的幼稚的人”。

  9. lioff says:

    字体能做个浏览器判断吗, 番茄花园用户表示微软雅黑,压力山大!

  10. Calvin says:

    这或许就像是近些年手机市场各大品牌没有款式上的突破,都一味的效仿苹果,这或许是一种追随,也或许是一种现代人思维上的惰性,不愿意去拓展自身的想法,敢于创新突破,如果这样的停止或许这个时代不会前进:)但愿时光也能够凝结:)我们都不会老去:)这时不可能的:)回到上面木匠,桌子,程序开发的话题也是一样,人们属实传统的流程华工序后就不会再有所或易于创新,思路被抑制模式化,很难有突破创作出新的”天方夜谭”:)请原谅我喜欢用这个词:)呵呵呵:)

  11. 寻觅 says:

    一般在公司内部这样的问题都落不到技术人员的头上,都是由产品经理去沟通。好在我现在所在的公司外行人都不会太自我认知,在询问相关开发难度时都会以技术人员的回复为准,一般不会出现“你可以这样这样做就容易多了”的话。

  12. camelwoo says:

    深有同感

  13. Sunkay says:

    作者难道是木匠?

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据