軟體架構做什麼?


幾個月前跟朋友聊到架構的問題,那時候我們在外面一起吃飯,我坐在一根柱子旁。

我們聊到『軟體架構是什麼』這個題目?軟體業喜歡引用其他行業的用語,而這個詞源自於建築業,我敲敲了坐在旁邊的柱子說:這個叫『架構』。應用程式是房子裡面的傢俱,不管是電腦 (App)、冷氣、微波爐、還是冰箱 (Cache),他們都依附在這個房子之下,房子垮了,電腦、冰箱、冰箱都只是一推垃圾。

你去看房子的時候會看什麼?不會只看裝潢吧?921 大地震之後,房屋結構不會看的人應該不多。我會看水壓、電、瓦斯、樑柱、走道、動線、採光、排水、房屋結構、材質 …. 這些稱為『基礎設施 (Infrastructure)』。

這幾年我思考很多『軟體架構』相關的問題,實作了一些架構性的東西,讀了一些經典的軟體架構書籍,最後我自己的心得就是:系統架構就是能夠面對真實世界的問題與需求,具象的來說:安全 (Security)、可靠 (Reliability)、效能 (Performance)、依賴 (Dependency)、可測性 (Testable)、成本 (Cost)、維運 (Operational)

架構師做什麼?蓋一棟房子,可以承受地震、或者突如其來的車禍撞擊後,不會倒的房子。至於裡面的傢俱,房子不倒,應該都不會怎樣。重點是房子沒倒,人才會存活。

我在跟朋友吃飯的同時,窗外是台北某個知名的街道,如果有台車酒駕衝過來、有個地震,或者房子裡面有人突然去撞牆、有人打掉某一根柱子,那麼房子都不會因此有任何影響,這就是架構要做的事。

至於應用層的架構,要想的就是那台電腦本身機構的問題,就像你手上 MacBook Pro 的機構是否完善,那也是架構,只是範圍不一樣。我想的是房子的架構,一般應用程式開發者想的是手上電腦的(硬體)架構。

『幾個月前』其實是半年多前了。。。也就是 2017/12 or 2018/01 的時間。

延伸閱讀


Comments