1. 程式人生 > >從程式設計師到架構師——踏上架構旅途 思考從未止步

從程式設計師到架構師——踏上架構旅途 思考從未止步

在我心裡,程式設計師可以分為三個層次:普通程式設計師、工程師和架構師。

普通程式設計師是編寫程式碼的人。編寫程式碼的方式有很多,只要能讓程式跑起來,能正確地處理業務流程和對資料進行計算,就可以說“會編寫程式碼”。程式設計師需要熟悉整個程式的邏輯及處理過程,需要熟悉程式語言的特性,還需要熟悉一些計算機作業系統的互動呼叫方式,才能寫出從使用者側互動,到資料和業務邏輯處理,再到與計算機系統互動的程式碼,有效地把使用者資訊、資料、業務和計算機串聯和拼裝出來。

從程式設計師到架構師——踏上架構旅途 思考從未止步

然而,其中一些程式設計師發現,只讓程式碼跑起來是不夠的,因為這個世界是不斷變化的,他們發現自己需要花更多的時間來維護程式碼:增加新的需求,擴充套件原有的流程,修改已有的功能,優化效能……一個人完全維護不過來,還需要更多的人,於是程式碼還需要在不同人之間輪轉;他們發現程式碼除了需要跑起來,還需要易讀、易擴充套件、易維護,甚至可以直接重用。於是,這些人使用各種各樣的手段和技術不斷提高程式碼的易讀性、可擴充套件性、可維護性和重用性。

我們把這些有“潔癖”、有工匠精精、有修養的程式設計師叫作工程師,工程師不僅僅是在編寫程式碼,他們會用工程的方法來編寫程式碼,以便讓程式設計開發更為高效和快速。他們把程式設計當成一種設計,一種工業設計,把程式碼模組化,讓這些模組可以更容易地互動拼裝和組織,讓程式碼排列整齊——閱讀和維護這些程式碼就像看閱兵式一樣舒心暢快。

但是故事還沒完,這些擁有工匠精神的工程師們還是難以解決某些問題,這些人漸漸地發現,這個世界上有很多問題就像翹翹板一樣,只能要一邊,這一邊上去了,另一邊就下來了。就像要麼用空間換時間,要麼用時間換空間一樣,你很難找到同時滿足空間和時間要求的“雙利解”;就像 CAP 的三選二的理論一樣,這個世界不存在完美的解決方案,無論什麼方案都有好的一面和不好的一面。而且,這些工程師還漸漸發現,每當引入一個新的技術來解決一個已有的問題時,這個新的技術就會帶來更多的問題,問題就像有一個生命體一樣,它們會不斷地繁殖和進化。漸漸地,他們發現,問題的多少和系統的複雜度呈正比,而且不僅是線性正比,還可能呈級數正比,此時就越來越難做技術決定。但是有一些資深的工程師開始站出來挑戰這些問題,有的基於業務分析給出平衡的方案,有的開始嘗試設計更高階的技術,有的開始設計更靈活的系統,有的則開始簡化和輕量化整個系統……

這些高智商、經驗足、不怕難的工程師們引領著整個行業前行。他們就是架構師

感覺 Bob 大叔的系列著作好像也在走這個過程,Clean Code 教你寫出易讀、可擴充套件、可維護、可重用的程式碼,Clean Coder 教你怎樣變成一個有修養的程式設計師,而Clean Architecture(《架構整潔之道》)基本上是在描述軟體設計的一些核心理論與觀念。《架構整潔之道》大體分成三個部分:程式設計正規化(結構化程式設計、面向物件程式設計和函數語言程式設計),設計原則(主要是 SOLID),以及軟體架構(其中講了很多高屋建翎的內容)。總體來說,這本書中的內容可以讓你從微觀(程式碼層面)和巨集觀(架構層面)兩個層面對整個軟體設計有一個全面的瞭解。

從程式設計師到架構師——踏上架構旅途 思考從未止步

但是,如果你想從這本書裡找到一些可以立馬解決具體問題的工程架構和技術,恐怕你會感到失望。這本書中更多的是一些基礎的理論知識,看完後你可能會比較“無感”,因為這些基礎知識對於生活在這個高速發展的喜歡快餐文化的社會中的人來說,可能很難理解其中的價值——大多數人的目標不是設計出一個優質的軟體或架構,而是快速地解決一個具體的問題,完成自己的工作。然而,可能只有你碰過足夠多的壁,掉過足夠多的坑,經歷過足夠多的痛苦後,再來讀這本書時,你才會發現本書中的這些“陳舊的知識”是多麼充滿智慧。而且,如果有一天,你像我這個老傢伙一樣,看到今天很多很多公司和年輕的程式設計師還在不斷地掉坑和掙扎,你就會明白這些知識的重要性了。

我個人覺得,這本書可視作架構方面的啟蒙讀物,但經驗不足的讀者一時間不會產生最多的共鳴。有 3~5 年程式設計經驗、需要入門軟體設計和架構的工程師或程式設計師,則完全會有不同的感受。

從程式設計師到架構師——踏上架構旅途 思考從未止步

最後,我想留下一個觀點和一組問題。

觀點:無論是微觀世界的程式碼,還是巨集觀層面的架構,無論是三種程式設計正規化還是微服務架構,它們都在解決一個問題——分離控制和邏輯。所謂控制就是對程式流轉的與業務邏輯無關的程式碼或系統的控制(如多執行緒、非同步、服務發現、部署、彈性伸縮等),所謂邏輯則是實實在在的業務邏輯,是解決使用者問題的邏輯。控制和邏輯構成了整體的軟體複雜度,有效地分離控制和邏輯會讓你的系統得到最大的簡化。

 

問題:如果你要成為一名架構師,你需要明確地區分幾組詞語(如何區分它們正是留給你的問題),否則你不可能成為一名合格的工程師或架構師。這幾組詞語是簡單 vs.簡陋、平衡 vs.妥協、迭代 vs.半成品。如果你不能很清楚地定義出其中的區別,那麼你將很難做出正確的決定,也就不可有成為一名優秀的工程師或架構師。

我相信這個觀點和這組問題將有助於你更好地閱讀並理解這本書,也會讓你進行更多的思考,帶著思考讀這本書,會讓你學到更多!


本文選自《架構整潔之道》Clean Architecture,電子工業出版社10月出版。

整潔之道再續新篇

Bob大叔封山之作

熔舉世熱門架構於一爐

揭通用黃金法則以真言

左耳朵耗子|餘晟傾情作序

瞭解本書詳情:https://u.jd.com/zzVkmM