由一把手枪的设计引发的思考

fmms 12年前
     [本文英文原文链接:    <a href="/misc/goto?guid=4958329963354933381">Why You Need Domain Knowledge</a> ]    <p style="text-align:center;"> </p>    <p style="text-align:center;"><a><img title="气动力手枪1" alt="由一把手枪的设计引发的思考" src="https://simg.open-open.com/show/01cccace94c078d3466637c5ba202ad4.jpg" width="450" height="257" /></a></p>    <p>        这是一把<a href="http://www.amazon.com/gp/product/B005FB7YBM/ref=as_li_ss_tl?ie=UTF8&tag=mwshead-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=B005FB7YBM" target="_blank">小型的 Feinwerkbau P11 空气压力手枪</a>。它的售价大概 1500 美元,看起来主要是给竞赛活动设计的。黑色的管是枪膛,发射子弹用的。银色的管装的是压缩空气。</p>    <p>        如果你有一把压缩空气动力的手枪,你自然很想知道剩余的空气还有多少?但我并不认为它的这种设计经过了周全的考虑。</p>    <p style="text-align:center;"><a><img title="气动力手枪2" alt="由一把手枪的设计引发的思考" src="https://simg.open-open.com/show/0ab7f299e6066f05873490f6a369b4bd.jpg" width="450" height="321" /></a></p>    <p>        我对枪的了解并不很专业,但我知道我不喜欢把枪口对着脸来看气压值。</p>    <p>        每当我看到这样的事,我都会停下来思考,是否在软件开发领域里我也犯了同样的错误。糟糕的设计并不会只出现在枪上。</p>    <p>        <strong>业务领域专家 & 软件</strong></p>    <p>        软件设计上出现的错误并不总是那么容易的被发现,但经常的,错误的产生会归结到同一个问题上。做设计时你必须要知道基本的业务领域知识。这并不是说为了开发一个烹饪网站,你需要成为一个世界著名的烹饪大师,而是你至少需要知道其中的基础知识。</p>    <p>        如果你不知道这种专业领域知识,那就找一个知道的合作伙伴。过去的这几年里,我开的一个应用程序就是和一个不懂技术但却懂得这个行业的人合作 的。人们往往会低估这样一个不能在编写代码上贡献力量的人的价值,但实际上他的价值很大。他的对行业的专业知识不仅仅能让我们做出正确的<em>产品</em>,而且他还认识那些可能会有兴趣买这个产品的<em>人</em>。</p>    <p>        一个好的创意和开发软件的能力并不一定能带来成功。和一些处在可能会使用这个产品的原始用户的目标市场中的人合作,会大大的增加你成功的机会。 如果你找对了人,你不仅可以获得他在这个领域的专业知识,而且能得到他的一个由很多遇到了相当的问题、需要你的软件替他解决问题的人组成的关系网。</p>    <p>        也许有些人会指出,一个制造枪支的公司很可能拥有很多关于空气动力枪领域的专家,比我要专业的多。这很可能是事实。我对枪械领域知识有一个基本的了解,听过一些讲座。任何时候我们学习枪械知识,头一个要知道的事情是,不要把枪口冲着自己的脸。</p>    <p>        这就引起了一个重要的问题。拥有专业领域知识和运用这些知识是两回事。</p>    <p>        <strong>测试软件</strong></p>    <p>        对于软件,我们做大量的测试。让程序能跑起来,然后让一些人使用它。有时候你会发现,人们使用它的方式和业务领域专家所说的人们会使用它的方式 是脱节的。这并不是说你的专家不专。他们也许在他们的领域里是个专家,但这并不意味着他是一个擅长把他的知识解释给你听的专家。经常的在开发过程中,他们 会告诉你,你需要实现X,而当他们使用了开发出的这个功能后,他们改变了想法,告诉你应该实现Y。</p>    <p>        这并不是一件多么糟糕的事情,这是开发出正确东西过程中的一些自然属性。你所能做的,是让这些教训尽早的出现,使遭受到的影响最小化。</p>    <p>        我不久前做了一个项目,我们把大部分的精力都放到了 Web 应用的公众所面对的前端部分。后端是一团糟。它可以运行,但很运行的很糟。但这样能让我们迅速的发布这个应用,获得真实世界的用户体验。此时我们准备重新 开发它的后端,使用过它的用户对他们需要的东西有了更清楚的认识。很多最初他们认为需要修改的东西,现在看来是不合适的。而当初我们很多的假设现在看来也 是错误或需要修改的。</p>    <p>        领域专家通常会给你指引正确的方向,但除非有人真的使用了你的程序,你不会知道是否真的把事情做正确了。来自: <a id="link_source2" href="/misc/goto?guid=4958329964977073478" target="_blank">外刊IT评论</a></p>