軟件件系統的4大技術本質


軟件系統的4大技術本質




需求
        軟件定位在哪些用戶,能幫用戶解決什麼問題,給用戶帶來多少價值,選擇放棄的成本。
        需求是一個軟件最重要的東西,如果你的軟件不能幫用戶解決問題,那就是沒有意義的軟件。
        一個軟件服務的用戶範圍及給每個用戶帶來的價值決定着這個軟件的前景。每個開發人員一定要想清楚軟件服務的用戶範圍,從而得知軟件的用戶規模。
        比如你做一個類似QQ的即時通訊工具,那用戶範圍將是所有的網民。如果你做的是一個瀏覽器的腳本調試插件,那用戶範圍是開發瀏覽器軟件的程序員,普通網民根本不可能用你這個軟件。經常有一些程序員活在自己的世界裏,對自己做的軟件沒有清醒的認識。所以我們需要關心一些宏觀統計數據,比如,網民數量,使用某種軟件的用戶數,使用某種語言的程序員數,以前這些數據的變化趨勢預估。
        軟件能幫用戶解決什麼問題,這是一個發展的過程,初始版本一般解決的問題有限,隨着用戶的反饋及軟件升級,軟件能幫用戶解決的問題會越來越多。
有人說做軟件開發最怕需求變化,最好能前面就把需求明確好,責任人員簽字,防止變化,但實際上很少有人能精確描述需求,更難預估軟件的需求變化,所以如何做好需求分析,首先要定位軟件的用戶範圍,計劃解決的用戶需求是什麼,軟件發展過程中及時收取用戶反饋,使軟件能解決客戶的問題越來越多,敏捷與迭代開發更具有可操作性。
        除了一些大型基礎軟件,現在也很少看到幾年開發一個軟件的事情。Google的Chrome瀏覽器是版本帝,一年內發佈幾個大版本,市場點有率一直在上升,相比之下IE的步伐實在太慢了。
        在互聯網公司更是有系統天天發佈的現象,因爲系統發佈相比客戶端軟件成本低,並且互聯網公司的軟件需求大部份來自於用戶使用的反饋,所以如果沒有很好的系統升級及時性,客戶滿意度會大大下降。
    
界面與操作流程
        你的軟件界面友好嗎?操作及流程簡單清晰嗎?
        你的軟件界面是不是隻是一個信息保存工具,提供了大量增、刪、改、查功能,如果軟件要求用戶輸入的信息比給於用戶的信息還多,那這個軟件的價值何在。沒有人喜歡用幾十個文本框的輸入或查詢界面的軟件,如果有這樣的界面說明我們沒有深入瞭解客戶需求,我們只是堆積更多的功能讓這些用戶不要來煩我,讓用戶感覺“我已經提供了這麼多,你還想怎麼樣”的結果。
        你能設計一個如Google一樣的簡便的軟件嗎?你的操作界面能如iPhone一樣簡單和絢麗嗎?  像Google與iPhone這種的界面也許只有天才能會敢想並實現出來,再看看我們的軟件界面吧,估計要無地自容。   
        你是否會思考軟件佈局清晰,操作流程簡單。你的軟件是否經常要給客戶培訓操作,並且培訓後還有很多人不會用。
        你是否會思考用戶使用一個功能的操作成本,包括鍵盤輸入字符數,鼠標的總體移動時間,點擊次數,鼠標鍵盤切換次數、提示文字思考時間、錯誤操作概率等等。想想這些,感覺我的軟件可能不是在爲用戶解決需求,更多是在折磨用戶,甚至是考驗用戶智商。
        一個好的軟件界面及操作流程應該是不太需要給客戶培訓,客戶就直接會用了。


架構與性能
        軟件需求包括已知需求和未知需求,實現需求的成本主要包括硬件成本及軟件成本,而軟件架構與性能的本質是讓人與機器發揮最大的生產力,讓實現需求的性價比最優。
        軟件的性能是硬件成本的一個主要因素,越好的性能當然需要的硬件越少或者配置更低。不同的程序員開發的軟件性能相差巨大,有時甚至達上萬倍,也就是說你用一臺大型機做事,別人用一臺上網本可能比你還快。
        軟件成本包括軟件開發成本及第三方軟件採購及學習使用成本,好的架構師在選擇好合適的第三方軟件的同時,會重點考慮軟件開發架構。我認爲軟件開發架構最終的目標是讓成員能高效工作,要讓成員高效工作,軟件架構應該能通過提取公共需求來減少重複工作,將複雜的問題簡單化,定義清晰的接口規範,通過分模塊及分層次的架構實現並行工作並減少溝通成本,在實現已知需求的情況下考慮未知需求對軟件變更的成本。爲了節約成本,軟件架構設計一定會考慮成員的技能水平及新架構技術的學習成本,所以選擇何種架構很大因素是當前團隊熟悉的或市場通用的技術架構,也不排除一些架構師個人喜好用新技術架構嘗試。
        選擇軟件架構沒有最優的說法,因爲每個團隊的技能基礎都不一樣,因此也可以看到各個大公司的技術架構千差萬別。好的軟件架構肯定不是爲了滿足牛人程序員的需求,因爲大部分程序員並不是牛人,不可能都是算法高手,也不可能是工作經驗非常豐富的人,大部份程序員都是普通開發人員,架構師設計軟件架構的目的就是能利用這些普通程序員的能力就可以更快的實現需求。

        架構不僅是要評估軟件的成本,還需要評估硬件成本,有時還需要平衡軟件與硬件互換的成本,還需要預估硬件的發展速度是否可保證實現未來需求。
        架構不僅要評估現在團隊資源的技能,還需要評估團隊資源技能學習的成本,新增團隊資源成本等等。
        架構不僅要滿足已知需求實現的可行性,還需要考慮實現未知需求的成本。人所掌握的知識是有限的,對已知需求的合理性都無法完全評估,未知需求就更難預測,所以一般架構師都是優先滿足已知需求,再從已知需求來分析未知需求產生的可能性,對於發生可能性非常高的未知需求,並且會增加大的變更成本時,才考慮適當的架構基礎。
        所以說架構是一種平衡藝術,她需要平衡各種資源,還需要平衡已知需求與未知需求,從而達到一定時間範圍內資源最優的生產力。
        架構還有一種藝術是隔離已知需求與未知需求,自己團隊只實現已知需求,對未知需求進行抽象並形成實現規範,自己做一些簡單實現示例,最終讓未知資源來實現未知需求。這類架構的代表作是Eclipse和Facebook,還有MySQL的存儲插件引擎接口,這類軟件架構的目的是提供解決需求的基礎架構,提供非常方便解決需求的方法,可以讓更多的人能參與進來,讓別人來免費爲你實現未知需求,從而達到更高一級的性價比。

安全與穩定性
        沒人願意使用一個不安全的系統,沒人願意把重要信息放在一個經常丟數據的系統裏,也沒人願意把機密信息放在一個別人可以輕易得到的系統裏。
        沒人願意使用隔三岔五停機維護的系統,也沒人願意在使用系統時經常出現異常錯誤。
        當你的軟件缺乏安全性與可用性時,即使你的其它方面都很好,客戶也會很快流失,因爲你沒辦法讓他認爲是一個值得依賴的東西,他隨時會拋棄你。
        所以如何讓軟件穩定運行是值得思考的,安全性除了軟件本身的缺陷外,還需要注意設計好數據網絡通訊及主機部署相關的安全性方案,隨着系統的擴大,很多都屬於系統運維技術。
        在可用性方面也更多是系統運維能力的考驗,包括如何保證系統的高可用性,負載均衡,容災切換,如何規範系統變更流程及操作規範,變更風險識別及應急預案准備等等。

簡單來說:
         需求決定你的客戶範圍,系統價值,也代表着系統潛力
         架構與性能決定你的建設成本
         界面與操作流程主要決定你客戶增長的速度
         安全與穩定性主要決定你客戶流失的速度



         當然,上面幾點只是軟件一些的主要技術方面,軟件要成功還需要很多其它重要因素,如人力資源、市場營銷、競爭對手分析等等。


發佈了78 篇原創文章 · 獲贊 8 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章