十多年研發、架構經驗老司機的技術選型哲學

作者|楊波編輯|小智不談具體技術,從更高層面看,技術選型應該怎麼做?寫在前面

技術選型是一個很熱門的話題,最近我看到自己的微信朋友圈有好幾篇關於技術選型的文章,讀者對這類主題的熱情很高。在技術組織內部,技術人員經常會面臨技術選型問題,有時候,技術選型還常常牽扯好幾波干係人,相互之間還會產生爭議,有的甚至還可能發展到派系鬥爭的地步。即便像我自己,已經有十幾年研發和架構經驗的老司機,不管是工作還是業餘,有很大部分時間的思考都是深陷在 A 技術和 B 技術的利弊權衡之中,不能自拔。無論如何,技術選型說小了關乎項目和團隊成敗,說大了關乎企業業務的發展,不可小覷。

本文所表達的技術選型理念應該是與具體技術無關的,但是由於我個人的背景更偏向互聯網後端的研發和架構,所以本文的視角更偏向後端技術的選型。

軟件的本質複雜性

近年,雲計算、微服務、容器和 DevOps 等新技術和理念層出不窮,技術人員對各種新技術的追捧熱情也空前高漲,各種新技術微信討論羣也如雨後春筍般冒了出來。這是一個好現象,說明我們的開發人員多了,技術環境也日趨成熟,有點百花齊放的感覺。同時也讓我有一點擔憂,我擔憂的是純技術和工具論的擡頭,也就是太過專注技術,認爲技術可以搞定一切,反而忽略了軟件研發的本質複雜性。回想當年,自己也曾是這樣的技術狂熱分子,EJB 剛出來的時候,我爲 EJB 搖旗吶喊,Spring 出來的時候,我也曾一度是該技術的死忠,簡單認爲這些技術是銀彈可以幫助解決所有的複雜性問題。

1986 年,人月神話的作者 Brooks 就提出,軟件的本質複雜性(Essential Complexity)存在於複雜的業務領域中(用技術的話講是業務領域建模複雜性),技術僅是輔助工具,它解決的問題是幫助將業務領域問題映射轉換成軟件實現,只解決次要複雜性(Accidental Complexity)。

作者同時指出,由於軟件本質的複雜性,真正的銀彈並不存在;也斷言在十年內,沒有任何一項技術或者方法可使軟件工程的生產力提高一個數量級。30 年前作者提出的論斷,今天依然閃爍智慧的光芒。人月神話已經出了 40 週年紀念版了,堪稱軟件工程的聖經,建議所有從事軟工行業的朋友學習。除了業務和技術,我還想強調軟件的本質複雜性同時隱含在企業的人、組織、流程和管理中,不容忽視。


架構師只有深刻理解軟件的本質複雜性,才能站在解決實際業務問題的角度,更好的做出技術選型,否則易陷入唯技術工具論的陷阱。

使用成熟的技術

大部分公司都是商業組織,不是科研機構或者純軟件研發機構。商業組織使用技術是爲了解決當下的業務問題,他們更應該使用成熟穩定的技術。

如下圖,技術的使用有明顯的生命週期,早期有創新者和早期使用者採用,我把這個階段稱爲試水趟坑期,也就是說這個階段技術不是很成熟穩定的,雖然嘗新者可能佔據一定的技術領先優勢,但是他們常常需要以踩坑填坑作爲代價;如果這項技術經過早期驗證則會跨越鴻溝進入早期大衆階段,這個階段技術會逐漸走向成熟,處於上升期,坑逐漸被填平,技術被大衆所採納;之後技術緩慢經過末期大衆階段,最終走向滯後期,一直到生命週期的結束退出歷史舞臺。


技術選型的一大智慧是不要盲目追求新技術,老老實實採用成熟穩定的技術,讓那些喜歡追新的人去踩坑

發佈了24 篇原創文章 · 獲贊 20 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章