由一把手槍的設(shè)計(jì)引發(fā)軟件開(kāi)發(fā)者的深思
這是一把小型的Feinwerkbau P11空氣壓力手槍。它的售價(jià)大概1500美元,看起來(lái)主要是給競(jìng)賽活動(dòng)設(shè)計(jì)的。黑色的管是槍膛,發(fā)射子彈用的。銀色的管裝的是壓縮空氣。
如果你有一把壓縮空氣動(dòng)力的手槍,你自然很想知道剩余的空氣還有多少?但我并不認(rèn)為它的這種設(shè)計(jì)經(jīng)過(guò)了周全的考慮。
我對(duì)槍的了解并不很專業(yè),但我知道我不喜歡把槍口對(duì)著臉來(lái)看氣壓值。
每當(dāng)我看到這樣的事,我都會(huì)停下來(lái)思考,是否在軟件開(kāi)發(fā)領(lǐng)域里我也犯了同樣的錯(cuò)誤。糟糕的設(shè)計(jì)并不會(huì)只出現(xiàn)在槍上。
業(yè)務(wù)領(lǐng)域?qū)<?& 軟件
軟件設(shè)計(jì)上出現(xiàn)的錯(cuò)誤并不總是那么容易的被發(fā)現(xiàn),但經(jīng)常的,錯(cuò)誤的產(chǎn)生會(huì)歸結(jié)到同一個(gè)問(wèn)題上。做設(shè)計(jì)時(shí)你必須要知道基本的業(yè)務(wù)領(lǐng)域知識(shí)。這并不是說(shuō)為了開(kāi)發(fā)一個(gè)烹飪網(wǎng)站,你需要成為一個(gè)世界著名的烹飪大師,而是你至少需要知道其中的基礎(chǔ)知識(shí)。
如果你不知道這種專業(yè)領(lǐng)域知識(shí),那就找一個(gè)知道的合作伙伴。過(guò)去的這幾年里,我開(kāi)的一個(gè)應(yīng)用程序就是和一個(gè)不懂技術(shù)但卻懂得這個(gè)行業(yè)的人合作的。人們往往會(huì)低估這樣一個(gè)不能在編寫(xiě)代碼上貢獻(xiàn)力量的人的價(jià)值,但實(shí)際上他的價(jià)值很大。他的對(duì)行業(yè)的專業(yè)知識(shí)不僅僅能讓我們做出正確的產(chǎn)品,而且他還認(rèn)識(shí)那些可能會(huì)有興趣買(mǎi)這個(gè)產(chǎn)品的人。
一個(gè)好的創(chuàng)意和開(kāi)發(fā)軟件的能力并不一定能帶來(lái)成功。和一些處在可能會(huì)使用這個(gè)產(chǎn)品的原始用戶的目標(biāo)市場(chǎng)中的人合作,會(huì)大大的增加你成功的機(jī)會(huì)。如果你找對(duì)了人,你不僅可以獲得他在這個(gè)領(lǐng)域的專業(yè)知識(shí),而且能得到他的一個(gè)由很多遇到了相當(dāng)?shù)膯?wèn)題、需要你的軟件替他解決問(wèn)題的人組成的關(guān)系網(wǎng)。
也許有些人會(huì)指出,一個(gè)制造槍支的公司很可能擁有很多關(guān)于空氣動(dòng)力槍領(lǐng)域的專家,比我要專業(yè)的多。這很可能是事實(shí)。我對(duì)槍械領(lǐng)域知識(shí)有一個(gè)基本的了解,聽(tīng)過(guò)一些講座。任何時(shí)候我們學(xué)習(xí)槍械知識(shí),頭一個(gè)要知道的事情是,不要把槍口沖著自己的臉。
這就引起了一個(gè)重要的問(wèn)題。擁有專業(yè)領(lǐng)域知識(shí)和運(yùn)用這些知識(shí)是兩回事。
測(cè)試軟件
對(duì)于軟件,我們做大量的測(cè)試。讓程序能跑起來(lái),然后讓一些人使用它。有時(shí)候你會(huì)發(fā)現(xiàn),人們使用它的方式和業(yè)務(wù)領(lǐng)域?qū)<宜f(shuō)的人們會(huì)使用它的方式是脫節(jié)的。這并不是說(shuō)你的專家不專。他們也許在他們的領(lǐng)域里是個(gè)專家,但這并不意味著他是一個(gè)擅長(zhǎng)把他的知識(shí)解釋給你聽(tīng)的專家。經(jīng)常的在開(kāi)發(fā)過(guò)程中,他們會(huì)告訴你,你需要實(shí)現(xiàn)X,而當(dāng)他們使用了開(kāi)發(fā)出的這個(gè)功能后,他們改變了想法,告訴你應(yīng)該實(shí)現(xiàn)Y。
這并不是一件多么糟糕的事情,這是開(kāi)發(fā)出正確東西過(guò)程中的一些自然屬性。你所能做的,是讓這些教訓(xùn)盡早的出現(xiàn),使遭受到的影響最小化。
我不久前做了一個(gè)項(xiàng)目,我們把大部分的精力都放到了Web應(yīng)用的公眾所面對(duì)的前端部分。后端是一團(tuán)糟。它可以運(yùn)行,但很運(yùn)行的很糟。但這樣能讓我們迅速的發(fā)布這個(gè)應(yīng)用,獲得真實(shí)世界的用戶體驗(yàn)。此時(shí)我們準(zhǔn)備重新開(kāi)發(fā)它的后端,使用過(guò)它的用戶對(duì)他們需要的東西有了更清楚的認(rèn)識(shí)。很多最初他們認(rèn)為需要修改的東西,現(xiàn)在看來(lái)是不合適的。而當(dāng)初我們很多的假設(shè)現(xiàn)在看來(lái)也是錯(cuò)誤或需要修改的。
領(lǐng)域?qū)<彝ǔ?huì)給你指引正確的方向,但除非有人真的使用了你的程序,你不會(huì)知道是否真的把事情做正確了。
原文:http://www.aqee.net/why-you-need-domain-knowledge/
【編輯推薦】