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

2021-09-19 21:20:55 字數 2403 閱讀 7653

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

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

然而,其中一些程式設計師發現,只讓**跑起來是不夠的,因為這個世界是不斷變化的,他們發現自己需要花更多的時間來維護**:增加新的需求,擴充套件原有的流程,修改已有的功能,優化效能……乙個人完全維護不過來,還需要更多的人,於是**還需要在不同人之間輪轉;他們發現**除了需要跑起來,還需要易讀、易擴充套件、易維護,甚至可以直接重用。於是,這些人使用各種各樣的手段和技術不斷提高**的易讀性、可擴充套件性、可維護性和重用性。我們把這些有「潔癖」、有工匠精精、有修養的程式設計師叫作工程師,工程師不僅僅是在編寫**,他們會用工程的方法來編寫**,以便讓程式設計開發更為高效和快速。他們把程式設計當成一種設計,一種工業設計,把**模組化,讓這些模組可以更容易地互動拼裝和組織,讓**排列整齊——閱讀和維護這些**就像看閱兵式一樣舒心暢快。

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

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

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

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

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

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

問題:如果你要成為一名架構師,你需要明確地區分幾組詞語(如何區分它們正是留給你的問題),否則你不可能成為一名合格的工程師或架構師。這幾組詞語是簡單 vs.簡陋、平衡 vs.妥協、迭代 vs.半成品。如果你不能很清楚地定義出其中的區別,那麼你將很難做出正確的決定,也就不可有成為一名優秀的工程師或架構師。
我相信這個觀點和這組問題將有助於你更好地閱讀並理解這本書,也會讓你進行更多的思考,帶著思考讀這本書,會讓你學到更多!

如何從程式設計師到架構師?

程式設計師是一種比較耗腦力 比較辛苦的職業。在中國,年齡比較大的程式設計師是很尷尬的,你去投簡歷,人家一看三十幾歲了,可能就把你往後排,看看有沒有那種小年輕 能夠加班的。程式設計師一定要規劃好自己的發展道路,到了某一天,你是繼續做開發,還是做技術管理,還是做產品,還是做架構師,或者說去送外賣,跑滴滴...

學習演算法 從程式設計師到架構師

include 意願 include 想象力 include 離散數學 include 思考 include 良知 include 意志 include 技巧 收穫 s 0 章節 n 1 章節號 收穫 p n 學習 while n 1 n 35 if 練習沒做 做練習 良知 思考 回顧總結 n 1 ...

從程式設計師到架構師過度 筆記

1.架構設計入門。2.領悟大系統架構設計。3.從需求到架構的全過程。4.結合工作,解決實際問題。關鍵思想 分而治之 和 迭代式設計 運用的方法 邏輯檢視 物理檢視 模組劃分的不同方法 功能模組 分層架構 用例驅動的模組劃分過程。設計方式 水平分層 垂直劃分功能模組 從用例到類 再到模組 想到哪切到哪...