由一把手槍的設計引發的思考
這是一把小型的Feinwerkbau P11空氣壓力手槍。它的售價大概1500美元,看起來主要是給競賽活動設計的。黑色的管是槍膛,發射子彈用的。銀色的管裝的是壓縮空氣。
如果你有一把壓縮空氣動力的手槍,你自然很想知道剩餘的空氣還有多少?但我並不認為它的這種設計經過了周全的考慮。
我對槍的瞭解並不很專業,但我知道我不喜歡把槍口對著臉來看氣壓值。
每當我看到這樣的事,我都會停下來思考,是否在軟體開發領域裡我也犯了同樣的錯誤。糟糕的設計並不會只出現在槍上。
業務領域專家 & 軟體
軟體設計上出現的錯誤並不總是那麼容易的被發現,但經常的,錯誤的產生會歸結到同一個問題上。做設計時你必須要知道基本的業務領域知識。這並不是說為了開發一個烹飪網站,你需要成為一個世界著名的烹飪大師,而是你至少需要知道其中的基礎知識。
如果你不知道這種專業領域知識,那就找一個知道的合作伙伴。過去的這幾年裡,我開的一個應用程式就是和一個不懂技術但卻懂得這個行業的人合作的。人們往往會低估這樣一個不能在編寫程式碼上貢獻力量的人的價值,但實際上他的價值很大。他的對行業的專業知識不僅僅能讓我們做出正確的產品,而且他還認識那些可能會有興趣買這個產品的人。
一個好的創意和開發軟體的能力並不一定能帶來成功。和一些處在可能會使用這個產品的原始使用者的目標市場中的人合作,會大大的增加你成功的機會。如果你找對了人,你不僅可以獲得他在這個領域的專業知識,而且能得到他的一個由很多遇到了相當的問題、需要你的軟體替他解決問題的人組成的關係網。
也許有些人會指出,一個製造槍支的公司很可能擁有很多關於空氣動力槍領域的專家,比我要專業的多。這很可能是事實。我對槍械領域知識有一個基本的瞭解,聽過一些講座。任何時候我們學習槍械知識,頭一個要知道的事情是,不要把槍口衝著自己的臉。
這就引起了一個重要的問題。擁有專業領域知識和運用這些知識是兩回事。
測試軟體
對於軟體,我們做大量的測試。讓程式能跑起來,然後讓一些人使用它。有時候你會發現,人們使用它的方式和業務領域專家所說的人們會使用它的方式是脫節的。這並不是說你的專家不專。他們也許在他們的領域裡是個專家,但這並不意味著他是一個擅長把他的知識解釋給你聽的專家。經常的在開發過程中,他們會告訴你,你需要實現X,而當他們使用了開發出的這個功能後,他們改變了想法,告訴你應該實現Y。
這並不是一件多麼糟糕的事情,這是開發出正確東西過程中的一些自然屬性。你所能做的,是讓這些教訓儘早的出現,使遭受到的影響最小化。
我不久前做了一個專案,我們把大部分的精力都放到了Web應用的公眾所面對的前端部分。後端是一團糟。它可以執行,但很執行的很糟。但這樣能讓我們迅速的釋出這個應用,獲得真實世界的使用者體驗。此時我們準備重新開發它的後端,使用過它的使用者對他們需要的東西有了更清楚的認識。很多最初他們認為需要修改的東西,現在看來是不合適的。而當初我們很多的假設現在看來也是錯誤或需要修改的。
領域專家通常會給你指引正確的方向,但除非有人真的使用了你的程式,你不會知道是否真的把事情做正確了。
相關文章
- 由一個emoji引發的思考
- 由mv命令引發的對inode的思考
- 【高併發】由InterruptedException異常引發的思考Exception
- 淺談雙人遊戲的設計與魅力——由《雙人成行》引發的思考遊戲
- 由Siri和Alexa結婚引發的思考
- 由屎色自行車棚引發的思考
- 由 LG P4309 引發的擴充思考
- iOS開發基礎149-由UUIDString引發的思考iOSUI
- 由select for update鎖等待問題引發的深入思考
- 一個由line-height引發的血案與思考
- 由ASP.NET Core讀取Response.Body引發的思考ASP.NET
- 由《暗黑地牢》這款「地主模擬器」引發的思考
- 由script標籤引發了我對setTimeout非同步的思考非同步
- 由Object.prototype.toString.call( )引發關於toString( )方法的思考Object
- 一場由React引發的前後端分離架構的思考React後端架構
- JS學習筆記之由定時器引發的深入思考JS筆記定時器
- for...in引發的思考
- 口碑割裂,內憂外患 由《最後生還者2》引發的思考
- 電梯引發的思考
- 由Ghost漏洞引發的“血案”
- 由於一次內聯元素錯位引發的line-height思考
- 定時器引發的思考定時器
- 一個commit引發的思考MIT
- Flutter 中由 BuildContext 引發的血案FlutterUIContext
- 部門老大的發言引發的思考
- 首頁白屏的引發的思考(一)
- 由setContentView()方法引起的思考View
- 由一次安全掃描引發的思考:如何保障 API 介面的安全性?API
- Java設計模式之建造者模式(光頭強買電鋸引發的思考)Java設計模式
- 由OGG引發的資料庫故障資料庫
- 佇列順序性引發的思考佇列
- 一次Toast元件引發的思考AST元件
- 一條Python命令引發的漏洞思考Python
- 造後臺輪子引發的思考
- 一道排序題引發的思考排序
- 一道題引發的EventLoop思考OOP
- 從跨域引發的Web安全思考?跨域Web
- 一場由postcss-bem引發的血案CSS
- 槍械的美學設計與思路解析