写软件不是造汽车
寫軟件和做其他事情是不一樣的。當(dāng)我們制造別的東西的時候——像汽車、玩具、椅子、畫作、甚至包括數(shù)字產(chǎn)品如平面圖片和3D模型——我們做出來的成品就是最終的結(jié)果。而開發(fā)軟件則不是,我們做出來的產(chǎn)品永遠(yuǎn)不可能有最終的結(jié)果——我們需要向計(jì)算機(jī)解釋如何根據(jù)任意的輸入來輸出任意可能的結(jié)果。
寫軟件不像造汽車,或者可以這么說,它更像是建立一個汽車裝配生產(chǎn)線。
我們很容易了解汽車制造的設(shè)計(jì)觀念,產(chǎn)品設(shè)計(jì)師只要拿著一張?jiān)O(shè)計(jì)圖紙,說一聲“照這個做”,然后工程師們就可以開工了,開始制造一個看上去真實(shí)存在的東西。
假設(shè)我們的產(chǎn)品設(shè)計(jì)師需要給一個網(wǎng)站開發(fā)一個用戶資料管理系統(tǒng),一個簡單而完美的設(shè)計(jì)也許就是在布局好的頁面中放置幾個占位符文本,用來顯示用戶名、用戶頭像和一些基礎(chǔ)資料數(shù)據(jù)。然而,這僅僅是開發(fā)軟件過程中的假設(shè)階段,實(shí)際操作很復(fù)雜。比如用戶如何編輯這些字段?窗口頁面太窄了怎么辦?頁面如何在各種屏幕的閱讀器中展示不錯的效果?產(chǎn)品設(shè)計(jì)師只是假設(shè)了一些理想狀況下的頁面,但是開發(fā)者卻需要將每一種可能遇到的情況都考慮到。
回到剛才打的“汽車裝配生產(chǎn)線”這個比喻,產(chǎn)品設(shè)計(jì)師提出一些看上去很簡單的需求,就像“可以把駕駛室的車門顏色由紅色替換成藍(lán)色嗎?”這樣的需求。這是一種誤導(dǎo)——做一輛紅色車門的汽車看起來很簡單,但實(shí)踐起來卻非常困難——我們需要調(diào)整生產(chǎn)線上的配色系統(tǒng)以便讓其支持噴刷多種顏色的油漆,這就要增加一些局部噴色的邏輯,并且需要增加配置選項(xiàng)以允許人們在生產(chǎn)線上可以選擇需要噴刷的油漆顏色。還有就是需要購買一些新的噴漆嘴,因?yàn)榧t漆比藍(lán)漆流動更快一些。而且需要安排更好的健康保險(xiǎn),因?yàn)橐坏╀N售人員知道你制造的汽車只有一扇門是紅色的,他們會瘋狂地扔?xùn)|西。
在軟件開發(fā)中也會發(fā)生類似的事情。“嘿,這個用戶管理系統(tǒng)看起來很不錯,可以在用戶生日的時候發(fā)送一條祝福消息嗎?”于是你又接收到了一條看似簡單的需求。
當(dāng)你在開發(fā)軟件的時候,你并不是在構(gòu)建用戶管理系統(tǒng)中的一個頁面,而是在創(chuàng)建一條裝配生產(chǎn)線,它由一堆的零部件組成,而且可以每次生成正確的用戶管理頁面。
總結(jié)
- 上一篇: 2021全球最美、最帅面孔TOP100出
- 下一篇: 云计算三大主流阵营的竞争与合作