英文原文:Why You Need Domain Knowledge,翻譯:外刊IT評論
這是一把小型的Feinwerkbau P11空氣壓力手槍。它的售價大概1500美元,看起來主要是給競賽活動設計的。黑色的管是槍膛,發射子彈用的。銀色的管裝的是壓縮空氣。
如果你有一把壓縮空氣動力的手槍,你自然很想知道剩餘的空氣還有多少?但我並不認為它的這種設計經過了周全的考慮。
我對槍的瞭解並不很專業,但我知道我不喜歡把槍口對著臉來看氣壓值。
每當我看到這樣的事,我都會停下來思考,是否在軟體開發領域裡我也犯了同樣的錯誤。糟糕的設計並不會只出現在槍上。
軟體設計上出現的錯誤並不總是那麼容易的被發現,但經常的,錯誤的產生會歸結到同一個問題上。做設計時你必須要知道基本的業務領域知識。這並不是說為了開發一個烹飪網站,你需要成為一個世界著名的烹飪大師,而是你至少需要知道其中的基礎知識。
如果你不知道這種專業領域知識,那就找一個知道的合作伙伴。過去的這幾年裡,我開的一個應用程式就是和一個不懂技術但卻懂得這個行業的人合作 的。人們往往會低估這樣一個不能在編寫程式碼上貢獻力量的人的價值,但實際上他的價值很大。他的對行業的專業知識不僅僅能讓我們做出正確的產品,而且他還認識那些可能會有興趣買這個產品的人。
一個好的創意和開發軟體的能力並不一定能帶來成功。和一些處在可能會使用這個產品的原始使用者的目標市場中的人合作,會大大的增加你成功的機會。 如果你找對了人,你不僅可以獲得他在這個領域的專業知識,而且能得到他的一個由很多遇到了相當的問題、需要你的軟體替他解決問題的人組成的關係網。
也許有些人會指出,一個製造槍支的公司很可能擁有很多關於空氣動力槍領域的專家,比我要專業的多。這很可能是事實。我對槍械領域知識有一個基本的瞭解,聽過一些講座。任何時候我們學習槍械知識,頭一個要知道的事情是,不要把槍口衝著自己的臉。
這就引起了一個重要的問題。擁有專業領域知識和運用這些知識是兩回事。
測試軟體
對於軟體,我們做大量的測試。讓程式能跑起來,然後讓一些人使用它。有時候你會發現,人們使用它的方式和業務領域專家所說的人們會使用它的方式 是脫節的。這並不是說你的專家不專。他們也許在他們的領域裡是個專家,但這並不意味著他是一個擅長把他的知識解釋給你聽的專家。經常的在開發過程中,他們 會告訴你,你需要實現X,而當他們使用了開發出的這個功能後,他們改變了想法,告訴你應該實現Y。
這並不是一件多麼糟糕的事情,這是開發出正確東西過程中的一些自然屬性。你所能做的,是讓這些教訓儘早的出現,使遭受到的影響最小化。
我不久前做了一個專案,我們把大部分的精力都放到了Web應用的公眾所面對的前端部分。後端是一團糟。它可以執行,但很執行的很糟。但這樣能讓 我們迅速的釋出這個應用,獲得真實世界的使用者體驗。此時我們準備重新開發它的後端,使用過它的使用者對他們需要的東西有了更清楚的認識。很多最初他們認為需 要修改的東西,現在看來是不合適的。而當初我們很多的假設現在看來也是錯誤或需要修改的。
領域專家通常會給你指引正確的方向,但除非有人真的使用了你的程式,你不會知道是否真的把事情做正確了。