軟體開發如同木匠做桌子

2022-08-31 07:24:10 字數 1939 閱讀 5317

做一張桌子看起來十分的簡單。任何人都可以做,不是嗎?找個大塊的四方形木板,四個等長的木頭柱子,四個釘子和乙個錘子。把四個柱子釘到四方板的四個角上,你就做成了乙個桌子。噹噹當!

現在來讓乙個真正的木匠為你打造一張桌子。首先他要花時間跟你討論桌子的用途和功能——用在室內還是室外,廚房還是餐廳,主要用來展示還是使用,它需要能夠承受多大的負載。然後他需要確定使用什麼樣的材料——軟木還是硬木,用木板還是三合板還是鐵軌枕木。然後他會研究桌子的風格——桌邊的截面設計,桌腿底座設計,桌腿是按在**還是四角。這最後,他才去動手做這張桌子,他花大量的時間去斜截,鑿眼,契合所有的連線點,安裝撐條,使用高質量的粘膠,木釘,螺釘,他要檢查表面平整,打磨它,著色,封蠟,拋光——打造出一張能夠引以為豪的桌子。看起來是一大堆的事情要做,不是嗎?它只是一張桌子,不是嗎?

兩種做桌子的方法存在著很多不同之處,你看出來了沒有?

只用了四個釘子的桌子看起來很毛糙,它不穩,因為桌腿不牢固,桌腳不平,頂多能用乙個星期,它的乙個腿就會扭斷,根本承受不起乙個鹽罐子的重量。木匠的桌子看起來更好,好用而且美觀,它很牢固,不搖晃,桌腿經過矯正,直的,很平,沒有稜角,能用很久,你完全可以放心的在它上面擺上一頓豐盛的晚餐跟一群客人享用。你更想要哪個?

當人們談論起軟體,大多數人想像的工作量很像第一張桌子的建造過程。只需要建立乙個資料庫,填上一些資料,畫出一些介面,這就完了,你就得到了乙個軟體產品。我無論如何都想不出人們這樣的一種認識是怎麼產生的。也許是人們用慣了excel——「我可以用excel做這些,所以程式設計應該很簡單」。什麼?

開發軟體不容易。需要做很多的工作。非常像那個木匠做桌子的方式。作為設計師和程式設計師,我們需要理解業務、使用者用例,以及產品功能。我們需要討論和理解誰將要用它,它有什麼功能,它如何和其它軟體整合,它要用在什麼地方,資料量如何,等等,等等。我們然後才去花大量的時間搭建架構,確保它能承受使用者和資料負載壓力,要能夠公升級和擴充套件,要能處理大資料量情況(例如單錶負載)。我們然後需要更多的時間寫出有質量的、可讀的、可維護的**,測試每個元件,確保它們正確、快捷的執行,改正bug,清除瓶頸(在資料庫表模型上使用正確的結構和關聯)。我們還要使用更多的時間來把這些元件組合到一起,確保每個介面都正確的呼叫,確保錯誤都**捉到,確保介面設計可用,簡單,美觀(桌子的切截,鑽孔,契合,打磨,著色,拋光)。最終,我們交付客戶乙個完整的可信賴的產品,乙個符合需求的產品,乙個我們和你們都引以為豪的產品。

我相信,木匠很少會遇到像程式設計師需要面對的那樣讓人抓狂的事。也許他的客戶也會抱怨做這個桌子花了太長的時間,或造價太高。也許他的客戶並沒有說桌子的用途或應該是個什麼樣,然後大聲的抱怨它跟他從未說出的期望的樣子不一致。也許他們的客戶會瞪著他說做這樣的桌子只需要幾塊木板和幾個小時,木匠做桌子已經有幾千年的歷史了,這種桌子能有什麼不同。也許他們的客戶會說這很簡單,所以應該很快,很便宜,魔術般的做出來,我猜測他們是這樣想的。

我們的客戶完全也是這樣。而且幾乎每次都這樣。從沒例外過,最初給我們新需求時說「這只需要你花幾個小時的時間…」,或「你可以這樣做…這樣更簡單」,或「你只需要簡單的把它改成…」。什麼?

對軟體產品增加新功能可不像多釘一顆釘子或多加乙個柱子。我們需要理解新功能的形式和功用,建立它,測試它,寫文件,確保新增加的功能不會影響現有的系統。如果我們不這樣做,軟體就會做出錯,到處是bug,不能正確的執行,給使用者來帶來大量的問題。有很多軟體專案都是這樣,任何用過這種有問題的軟體的人都不會信任它,甚至不願意使用它。就像那個搖晃的桌子。

如果你需要乙個新功能,儘管提,但你要做好準備跟我們的木匠——程式設計師們認真仔細的討論它。我們會用正確的方案開發你要的應用,保證讓它正確的執行,一直正確的執行。你到我們這裡來是想要有質量、可信賴的軟體,就像是你要從木匠那得到乙個有質量的桌子。

千萬不要告訴我們這樣多簡單,多容易——除非你自己做過。如果你真的認為能既迅速又簡單的做出來,你自己試試。幹吧,拼裝出乙個搖晃的桌子。

如果你希望得到乙個好的產品,你要理解明白開發需要時間和技能,有很多你根本想象不到的問題在裡面,工匠們也是人,是有感情的,乙個好的產品是乙個永遠讓人快樂的事,值得我們付出努力和耐心,這樣,它將成為我們所有人能引以為豪的東西。

站在巨人的肩膀上做軟體開發

不管你相不相信,不管你承不承認,雲計算已經大面積鋪開了。雲計算產品按照提供的服務類別大致有以下三類 1.infrstructure as a service,提供虛擬機器供使用者使用,基本上就是將硬體虛擬化,然後在上面安裝一台虛擬的作業系統,使用者可以遠端訪問提供出來的虛擬機器,代表是amazon的...

python軟體開發目錄 軟體開發目錄規範

為了提高程式的可讀性與可維護性,我們應該為軟體設計良好的目錄結構,這與規範的編碼風格同等重要。軟體的目錄規範並無硬性標準,只要清晰可讀即可,假設你的軟體名為foo,筆者推薦目錄結構如下 foo core 存放業務邏輯相關 core.py api 存放介面檔案,介面主要用於為業務邏輯提供資料操作。ap...

迭代軟體開發

迭代軟體開發 整理 一 迭代軟體開發介紹 在迭代式開發方法中,整個開發工作被組織為一系列的短小的 固定長度 如 3周 的小專案,被稱為一系列的迭代。每一次迭代都包括了需求分 析 設計 實現與測試。採用這種方法,開發工作可以在需求被完整地確定之前啟動,並在一次迭代中完成系統的一部分功能或業務邏輯的開發...