如何培養架構性思考 (談軟體架構師必經之路) - 投影片分享

架構師並不能只是了解自己的系統、元件、模組、.NET Framework、或是其他 Java Virtual Machine 軟體執行平台即可,架構師最好還對 OS、甚至是網路系統、NLB、Load Balance 架構、Ap Server 或說是 (IIS/Apache) 、或甚至是硬體執行環境、RAID 等...有一定的了解,因為你所開發的是網站、你的網站會在這些環境中執行,一定會使用到這個硬體環境、網路資源 等等,那麼當然你也得對網路相關通訊協定有些概念,否則、當出現問題時,你只能在旁邊乾瞪眼,而不知問題在哪,如何處理。

這次的 Techdays 2014 中,筆者在 Geek 技術充電區分享關於如何培養架構性思考、談軟體架構師的必經之路,在這個不長的 30 分鐘裡,筆者分享自己的親身經歷、從小PG,慢慢提升自己為軟體架構師,這之中的甘苦經歷。

 

重點整理

筆者整理一下在這一次短短 30 分鐘的演講中的幾個重點,稱職的軟體架構師必備的幾個特質、或者說是技能。

一、能屈能伸

架構師必須要有宏觀的眼光,能夠隨時可以切換自己的角色。也就是說,軟體架構師除了要能夠以宏觀的眼光來看整個系統的架構之外,還要能夠隨時切換自己的角色,也就是說,我可以是 SA、必要時,我又可以是 SD,必要時我也可以是 PG。重點是,軟體架構師必須是可以從頂端來看整個系統的概況,同時又可以縮小到關注程式碼的運作。我把它稱作能屈能伸。

 

二、豐富的 Troubleshooting 經驗

其實不管是稱職的架構師、或是您想往顧問發展,Troubleshooting 的能力都是非常重要的,因為 Troubleshooting 能力強,也代表你對軟體系統、網路、硬體環境相當了解,如果你輕易可排除許多問題,那麼也代表你所設計的架構穩固無虞,為什麼?因為相關系統可能會出現異常的狀況在您在設計系統架構時都考量進來了。

所以架構師並不能只是了解自己的系統、元件、模組、.NET Framework、或是其他 Java Virtual Machine 軟體執行平台即可,架構師最好還對 OS、甚至是網路系統、Ap Server 或說是 (IIS/Apache) 、或硬體執行環境 等...有一定的了解,因為你所開發的是網站、你會使用到網路資源,那麼當然你也得對網路相關通訊協定有些概念,否則、當出現問題時,你只能在旁邊乾瞪眼,而不知問題在哪,如何處理。

 

三、背爛系統的經驗多

曾經在爛系統中尋找出路,尋找生機,因為,為了讓 Production 可以正常 Work、可以快速開發,你得改變既有系統架構,重構、想辦法讓它變好、讓它變得容易擴充。以我來說,我有蠻多這種經驗,甚至改寫掉整個既有系統架構 (但是看情況,成本可能很高),這都會幫助你在架構師這條路上,增加許多經驗值,又與前面的 Troubleshooting 相輔相成。

 

四、會寫程式

筆者認為架構師還是要會寫程式,為什麼呢?因為,魔鬼往往藏在細節裡,你若不會寫程式,你早晚會忘記那些細節。會寫程式,你也才可以驗證你架構的可行性,否則你無法說服團隊、客戶說,這樣的架構是可行的!

 

五、從無到有、獨自 Hard Code 撰寫規劃、開發、系統相關經驗

軟體架構師必須要有獨自規劃、開發軟體、專案、等系統的相關經驗,這麼一來,你也才會了解軟體專案開發從開始到結案的每一個細節,會影響你案子的細節有哪一些,你該注意什麼等等

而且,另外,軟體開發中,比如:當你要使用一個 ScheduleJob 時,有些人可能會建議你說,找現成的套件就好,已經有現成的幹嘛自己開發? 不過,有時我會建議開發人員,有時適當的重複造輪子,會讓你更了解底層的運作原理,這對於你今後的程式設計身涯,會很有幫助。

 

六、懂得多、懂得廣

軟體架構師得隨時充實許多相關知識,從書本獲得也是一種,這對您在實際的進行架構設計時也比較能夠做出最正確的取捨、與判斷。再結合前面五項特質,再來就是不斷的累積實務經驗,就可趨於所向無敵的境界。

 

七、維持對軟體的熱情

如果您是因為興趣而撰寫程式,那麼恭喜你!你已經具備了基本條件。至於興趣如何培養可參考筆者先前的文章:關於「興趣」這件事。

 

八、對市場需求、解決那些問題 (自己有那些問題) 有足夠的洞察力

在最近一次的軟體開發之路甘苦談中,筆者與大家聊到「不要盲目的追求新技術」,因為新技術不見得適合現階段的「你」、「團隊」使用,技術有技術適合用的情境,也就是說,你瞭解「你」、「團隊」、「專案」的現在情境嗎?可能先有團隊共同規範或許來的更重要一些。

另外,也不要排斥學習新技術,前提是,如果經過評估是適合使用的且值得投資的話,這我另外以第九點來說明。

 

九、軟體架構師必須對於技術、工具有(評估/選擇)的能力

軟體架構師在具備前八項技能之後,慢慢的,對於新技術、可適用性、前瞻性、對專案的衝擊、人員的訓練 等等,就會有(評估/判斷)的能力。

 

十、接受改變、擁抱改變、切忌一成不變、相信事情永遠有更好的解決方法

這是最後一項,也是第十項,這十項我列為稱職的軟體架構師的基本要件,身為一個資深的軟體開發者,所處的即為一個極端、極快變動莫測的世界中,如何快速反應,未來可能也會是必要技能選項之一了。為什麼這麼說呢?除了技術推成出新,這不提外,開發方法、觀念也一直在進步,我常常提醒開發人員,切勿閉門造車,有活動(Techdays/study4/twmvc/scrum taiwan/社群/.. Others)等,社群活動有時間就參加,彼此互相交流、交換意見、想法、任何在軟體開發上的心得,絕對會對你在軟體開發這條路上有不少幫助。因為,瞭解外面的世界在幹什麼,才會瞭解軟體產業的脈動,瞭解軟體產業的脈動你就會瞭解趨勢,瞭解趨勢你就不會被淘汰。因為稱職的軟體架構師相信,每件事情都會有更好的解法出現。

軟體開發之路-甘苦談2017(新春網聚)中,筆者也有提到相關的內容,有興趣可參考文章:今夜,我學什麼好?

軟體開發之路-甘苦談的投影片,如下:

如何培養架構性思考(談軟體架構師必經之路) from Gelis Wu

 

希望對想朝這個方向走的朋友有幫助微笑

 

下方是當天的錄影連結 Channel 9:

Techdays2014 MVP Geek- 如何培養架構性思考 -談軟體架構師必經之路


 

簽名:

學習是一趟奇妙的旅程

這當中,有辛苦、有心酸、也有成果。有時也會有瓶頸。要能夠繼續勇往直前就必須保有一顆最熱誠的心。

軟體開發之路(FB 社團)https://www.facebook.com/groups/361804473860062/

Gelis 程式設計訓練營(粉絲團)https://www.facebook.com/gelis.dev.learning/


 

如果文章對您有用,幫我點一下讚,或是點一下『我要推薦,這會讓我更有動力的為各位讀者撰寫下一篇文章。

非常謝謝各位的支持與愛護,小弟在此位各位說聲謝謝!!! ^_^