摘要
- 文章編號:20051203
- 投稿日期:2005/11/25
- 作者:張騉翔
- 備註:
本文分享有關軟體架構的發展策略,所謂的軟體架構意指能幫助軟體在發展時的基礎建設,都可稱之為軟體架構;例如微軟所出的.NET
Framework、昇陽出的Java Platform,這些平台提供了程式語言及相當多豐富的應用程式介面(Application
Programming Interface),來幫助程式設計師簡化軟體開發的工作。
好的軟體架構相當重要,可簡化軟體開發過程中相當多的工作,若讀者曾經開發過商業應用程式,會發現絕大部份的應用程式種類是屬於資料庫應用系統,大部份程
式撰寫的工作都在針對某個資料庫表格做新增、刪除、修改、更新的動作,這些程式碼都大同小異,並且可歸納出某些規則;若有一軟體架構可簡化這些工作,例如
可以指定某個資料庫表格就產生相對應的使用者介面及程式碼,那麼可大幅簡化軟體開發的工作,並且由於程式是由軟體架構所產生,也會有一致的風格,也較方便
維護。
本文以個人生涯發展的角度(亦適用於組織發展),來探討如何打造適合本身的軟體架構或是該如何學習軟體架構:
- 若讀者屬於研究性質可參考「最有價值的軟體架構」。
- 若讀者已在公司打滾多年,想要突破瓶頸可參考「最具獲利潛力的軟體架構」。
- 若讀者剛是社會新鮮人可參考「最能於市場生存的軟體架構」。
最有價值的軟體架構
要談到最能名留青史的發展方向的話,應屬研發新的軟體分析及設計方法,例如目前相當熱門的服務導向架構(Service Oriented Architecture),可以探討此架構出現後,如何將服務(Service)的觀念用於系統分析及上。
面對軟體界開發工具快速地發展,其實背後的原理並沒有太大的改變,以業界的專案而言,若非走硬體的程式設計,幾乎90﹪以上都是開發資料庫系統;最近
Microsoft推出了Visual Studio 2005,整個系統開發的核心觀念還是不脫資料庫的設計(Database
Design)及結構化查詢語言(Structured Query Language,以下簡稱SQL)。
SQL的發展算是非常的漂亮,其背後的原理是用Relational Algeria,發展的研究學者用數學證明其可下任意組合的查詢,只要資料庫設計的宜即可藉由;它的在學術界及實務界都獲得了大成功。
發展最有價值的架構,讓我們不必追逐技術與工具,反而會成為技術與工具的領導者;就像UML的發明者一樣,先創造分析與設計的描述語法,接下來再有工具支援。
發展最有價值的架構,以個人或是組織的角度來看,能轉型顧問或是顧問性質為主的單位,而且在市場上會面臨無競爭對手的狀況,具有主導市場的能力,就像現在UML的標準幾乎已被Rational公司所壟斷。
發展最有價值的架構,需要有非常高級的人材來參與,且要有研究的環境來支持,初期不易看到成效;而且研究團隊要能得到足夠的實務回饋,才能夠研發出具有關鍵影響的方法。
最具獲利潛力的軟體架構
這裡所謂最具獲利潛力的架構,先將範圍談清楚,指的是在臺灣的市場;根據筆者的經驗及觀察,在臺灣的資訊市場獲利模式以接案為主。若讀者有曾經獨立接案的經驗或是在公司開發專案的經驗,相信會遇以下的情況:
- 案子的範圍只要稍大,通常客戶很難明確定義出軟體的規格,接案者要身兼數職,要同時兼業務、需求分析、系統設計、程式設計及文件撰寫…等;在軟體界產業的分工相當的模糊,很難進行明確定位。
- 案子的範圍只要稍大,專案的延遲幾乎成了鐵律,由於在軟體開發的過程中,每個階段在實際運作上,很難被明確切割;造成結案的困難,結案困難導致財務運作困難,財務運作困難導致生存困難。
- 最重要的一點在於委任者與受任者對於價值與價格的看法差異太大;委任者以看結果為主,常會認為只有一點點的功能不值那麼多價格,但其實系統的單項功能從初步構想到需求的確認,是需要花非常多的時間及溝通次數的(不是只有程式碼值錢的~~)。
接案子的好處是,”感覺”會有立即的成果及收入,不過若個人或組織以接案為獲利來源,若無鎖定特定領域及範圍,會成為名副其實的「資訊界黑手」。
接案可以學到許多東西,收入也可能不錯,不過最大的致命傷在於靠時間來賺錢,無法透過一次的努力就賺取多次報酬,並且很難系統化的訓練人材;只要花發展到一定的規模就會遇到瓶頸。
在臺灣要發展產品亦相當的困難,最主要的原因在於它無法帶來立即的收入,臺灣的投資環境也不允許給開發者太多的時間;最近當紅的線上遊戲「魔獸爭霸」其開發的美國公司Bizzard花了5年的研發及測試時間才推出此產品,在臺灣的環境我想很難如此。
在臺灣要發展產品很困難,接案又相當辛苦;難道就沒有第三條路可走嗎?
其實有的,或許我們可以取個中間點,不完全是在發展產品,也不是在做接案性質的工作;而是以發展半成品的方式,鎖定領域來為客戶提供服務。
我們常談到以及常接觸到的架構性質,都屬於軟體開發基礎的架構,例如權限控管、版本控管、驗證工具…等;但是有另一種架構的性質,我們比較少去探討,那就是屬於特定領域的應用程式架構,例如學校的排課系統的架構、成績系統的架構…等。
分析特定領域的系統有哪些核心觀念存在,根據這些核心的觀念建構基礎的應用程式架構,再依特定客戶的需求再進行衍生及修改;例如發展學校的校務行政資訊
系,就會有些核心的觀念,例如學籍的觀念、課程的觀念、班級的觀念…等;將這些特定領域的核心語意及關係進行離清是最重要的,因為它們只要被規劃出來後,
是很難被改變的,筆者將這將上述的觀念稱為「語意模型」。
有了特定領域的「語意模型」後,我們建構在其上累積能量,並將這些觀念重覆利用,對每個客戶我們不需量身訂做,只需根據此語意模型稍加修改即可;例如像車
子的模型一般,把模子都打造好了,基本的引擎、車體結構都是一樣的,針對不同的客戶可客製化如車子顏色、防盗系統、衛星定位系統…等。
在商業策略的發展上,鎖定特定領域,初期少量接案來瞭解特定領域的需求,在接案的過程中採取良好開放式的設計,並設計系統的「語意模型」。
在銷售的策略上,與客戶談判方式就會有很大不同,若和接案模式來比較:接案子與客戶的談法是:「你需要什麼功能?我們討論以後,確認後協助你來完成系統。」我們在需求上完全是以客戶的想法為想法,只在實作上有彈性空間。
然而用發展應用程式基礎架構的方式去做銷售的談法是:「目前我們已有了基礎的系統了,可為你的需求量身訂做。」先建構基礎的應用程式架構,並搜集客戶的需求加入,我們以委任者及開發者的角度來討論這樣的模式有何優點:
- 開始有雛型系統的討論,可快速進入討論的氣氛。
- 委任者可較快導入系統試用,再依其需求修改。
- 初期不需投入大筆資金開發系統,可小額費用即可滿足需求。
- 不需確認需求後再委外,可逐步釋出需求,並立即看到成果。
- 開始有雛型系統的討論,由於有明確的系統來討論,對於前期需求分析的費用較易收取,也有較大的議價空間。
- 為每位客戶量身打造系統,能充分符合其需求。
- 有基礎的雛型系統及語意模型,可縮短開發時程。
- 搭配軟體租賃商業模式,創造穩健的財務運作模型。
有關上述提到軟體租賃商業模式,筆者再詳細說明,藉由搭配適當的基礎軟體開發架構(權限控管、帳號管理、版本管理…等),可以創造軟體租賃商業模式。
軟體租賃的運作方式是將主要的應用程式服務置於開發者的組織中,不需實際至客戶的地點進行安裝及測試,只需在開發者端做個軟體設定即可。這樣對於開發者後
續的維護及更新有相當大的助益;對於客戶所發生的問題,由於實體的邏輯及資料都在開發者組織中,所以相當容易進行障礙排除。
從商業利益角度來看,每月客戶只需固定費用即可使用所有及往後昇級的功能;我們所瞄準的是全市場的需求,而非單一特定客戶的需求、用的方式是開船出去撒網捕魚,或是自己建個池塘養魚,而非拿個魚竿釣魚。
當我們所滿足的不再是少數使用者的需求,帶給客戶的是全市場的需求時;以往接案性質只能被客戶牽著鼻子走,現在能反過來主導客戶:「要是你不跟我買的話,要自己去訂做的話,很難開發出現在有的功能哦,並且十家客戶跟我買後都有這樣的功能,你沒有的話很難跟同業競爭哦。」
藉由資訊系統開發很容易被重新組織及複製的特性來進行商業策略運作,將原本處於劣勢的接案模式,一舉能主導市場。但是這樣會不會有客戶不敢跟我們合作,怕
自己的資訊系統獨特性不夠,一講出來就會被同業使用;獨特性是一定會降低的,但客戶同時也會得到品質更好及成本更低的資訊系統,他們可將焦點放在其他可勝
過同業的地方。
本節所提到的軟體架構發展策略,在資訊界已有了名詞,稱之為應用程式服務提者(Application Service
Provider,以下簡稱ASP);經過以上討論後,筆者認為發展ASP的模式會是臺灣軟體可行的一條路,相當具有獲利潛力,尤其重要的是這樣的營運模
式,能讓開發者過有品質的生活,不會不工作,就無收入來源,可以有很多的休閒時間。