1. 程式人生 > >35歲是程式設計師工作的終點!?(完結)

35歲是程式設計師工作的終點!?(完結)

“35歲是程式設計師工作的終點。”這句話到底是什麼意思呢?

最終猜想:能力

35歲的程式設計師因為能力的不足而在潮流中沉底
職場之上,能力為王,菜是原罪!
如何提升?提升哪裡?

架構師能力模型

成為優秀的架構師是大部分初中級工程師的階段性目標。優秀的架構師往往具備七種核心能力:程式設計能力、除錯能力、編譯部署能力、效能優化能力、業務架構能力、線上運維能力、專案管理能力和規劃能力。

這幾種能力之間的關係大概如下圖。程式設計能力、除錯能力和編譯部署能力屬於最基礎的能力。不能精通掌握這三種能力,很難在效能優化能力和業務架構能力方面有所成就。具備了一定的效能優化能力和業務架構能力之後,才能線上運維能力和專案管理能力方面表現優越。團隊管理能力是最高能力,它對專案管理能力的依賴度更大。
在這裡插入圖片描述

程式設計能力

對工程師而言,程式設計是最基礎的能力,必備技能。其本質是一個翻譯能力,將業務需求翻譯成機器能懂的語言。
提升程式設計能力的書籍有很多。精通面向物件和設計模式是高效程式設計的基礎。初級工程師應該多寫程式碼、多看程式碼。找高手做Code Review,也是提升程式設計水平的捷徑。

除錯能力

程式程式碼是系統的靜態形式,除錯的目的是通過檢視程式的執行時狀態來驗證和優化系統。本質上講,工程師們通過不斷除錯可以持續強化其通過靜態程式碼去預測執行狀態的能力。所以除錯能力也是工程師程式設計能力提升的關鍵手段。很早之前有個傳說:“除錯能力有多強,程式設計能力就有多強。”不過現在很多編輯器的功能很強大,除錯能力的門檻已經大大降低。

除錯能力是專案能否按時、高質量提交的關鍵。即使一個稍具複雜度的專案,大部分工程師也無法一次性準確無誤的完成。大專案都是通過不斷地除錯進行優化和糾錯的。所以除錯能力是不可或缺的能力。
多寫程式,解決Bug,多請教高手是提升除錯能力的重要手段。

編譯部署能力

編譯並在線上部署執行程式是系統上線的最後一個環節。隨著SOA架構的普及以及業務複雜度的增加,大部分系統只是一個完整業務的一個環節,因此,本地編譯和執行並不能完全模擬系統線上執行。為了快速驗證所編寫程式的正確性,編譯並在線上部署就成了必要環節。所以編譯部署能力是一個必備技能。

讓盤根錯節的眾多子系統執行起來是個不小的挑戰。得益於SOA架構的普及以及大量編譯、部署工具的發展,編譯部署的門檻已經大大降低。基於應用層進行開發的公司,已經很少有“編譯工程師”的角色了。但是對於初級工程師而言,編譯部署仍然不是一個輕鬆的事情。

效能優化能力

衡量一個系統成功的一個重要指標是使用量。隨著使用量的增加和業務複雜度的增加,大部分系統最終都會碰到效能問題。 效能優化能力是一個綜合能力。因為:

1.影響系統性能的因素眾多,包括:資料結構、作業系統、虛擬機器、CPU、儲存、網路等。為了對系統性能進行調優,架構師需要掌握所有相關的技術。
2.精通效能優化意味著深刻理解可用性、可靠性、一致性、可維護性、可擴充套件性等的本質。
3.效能優化與業務強耦合,最終所採取的手段是往往折衷的結果。所以,效能優化要深諳妥協的藝術。

可以說,效能優化能力是工程師們成長過程中各種技能開始融會貫通的一個標誌。這方面可以參考之前的部落格文章“常見效能優化策略的總結”。市場上還有很多與效能優化相關的書籍,大家可以參考。多多閱讀開源框架中關於效能優化方面的文件和程式碼也不失為好的提升手段。動手解決線上效能問題也是提升效能優化能力的關鍵。如果有機會,跟著高手學習,分析效能優化解決方案案例(我們技術部落格之前也發表了很多這方面的文章),也是快速提升效能優化能力的手段。

線上運維能力

如果說效能優化能力體現的是架構師的靜態思考能力,線上運維能力考驗的就是動態反應能力。殘酷的現實是,無論程式多麼完美,Bug永遠存在。與此同時,職位越高、責任越大,很多架構師需要負責非常重要的線上系統。對於線上故障,如果不能提前預防以及快速解決,損失可能不堪設想,所以線上運維能力是優秀架構師的必備技能。

為了對線上故障進行快速處理,標準化的監控、上報、升級,以及基本應對機制當然很重要。通過所觀察到的現象,快速定位、緩解以及解決相關症狀也相當關鍵。這要求架構師對故障系統的業務、技術具備通盤解讀能力。解決線上故障的架構師就好比一個在參加比賽F1的車手。賽車手必須要了解自身、賽車、對手、同伴、天氣、場地等所有因素,快速決策,不斷調整。架構師必須要了解所有技術細節、業務細節、處理規範、同伴等眾多因素,快速決斷,迅速調整。

線上運維本質上是一個強化學習的過程。很多能力都可以通過看書、查資料來完成,但線上運維能力往往需要大量的實踐來提升。

業務架構能力

工程師抱怨產品經理的故事屢見不鮮,抱怨最多的主要原因來自於需求的頻繁變更。需求變更主要有兩個來源:第一個原因是市場改變或戰略調整,第二個原因是偽需求。對於第一個原因,無論是工程師還是產品經理,都只能無奈的接受。優秀的架構師應該具備減少第二種原因所導致的需求變更的概率。
偽需求的產生有兩個原因:

第一個原因是需求傳遞變形。從資訊理論的角度來講,任何溝通都是一個編碼和解碼的過程。典型的需求從需求方到產品經理,最終到開發工程師,最少需要經歷三次編碼和解碼過程。而資訊的每一次傳遞都存在一些損失並帶來一些噪音,這導致有些時候開發出來的產品完全對不上需求。此外,需求方和產品經理在需求可行性、系統可靠性,開發成本控制方面的把控比較弱,也會導致需求變形。

第二個原因就是需求方完全沒有想好自己的需求。
優秀的架構師應該具備辨別真偽需求的能力。應該花時間去了解客戶的真實業務場景,具備較強的業務抽象能力,洞悉客戶的真實需求。系統的真正實施方是工程師,在明確客戶真實需求後,高明的架構師應該具備準確判斷專案對可行性、可靠性、可用性等方面的要求,並能具備成本意識。最後,由於需求與線上系統的緊耦合關係,掌握線上系統的各種細節也是成功的業務架構的關鍵。隨著級別的提升,工程師所面對的需求會越來越抽象。承接抽象需求,提供抽象架構是架構師走向卓越的必經之途。

市場上有一些關於如何成為架構師的書,大家可以參考。但是架構能力的提升,實踐可能是更重要的方式。業務架構師應該關注客戶的痛點而不是PRD文件,應該深入關注真實業務。掌握現存系統的大量技術和業務細節也是業務架構師的必備知識。

專案管理能力

作為工業時代的產物,分工合作融入在網際網路專案基因裡面。架構師也需要負責幾個重大專案才能給自己正名。以架構師角色去管理專案,業務架構能力當然是必備技能。此外,人員管理和成本控制意識也非常重要。

專案管理還意味著要有一個大心臟。重大專案涉及技術攻關、人員變動、需求更改等眾多可變因素。面臨各種變化,還要在確保目標順利達成,需要較強的抗壓能力。
人員管理需要注意的方面包括:知人善用,優化關係,簡化溝通,堅持真理。

知人善用意味著架構師需要了解每個參與者的硬技能和軟素質。同時,關注團隊成員在專案過程中的表現,按能分配。

優化關係意味著管理團隊的情緒,畢竟專案的核心是團隊,有士氣的團隊才能高效達成目標。

簡化溝通意味著快速決策,該妥協的時候妥協,權責分明。

堅持真理意味著頂住壓力,在原則性問題上絕不退步。
在這裡插入圖片描述Java企業級電商專案架構演進之路 Tomcat叢集與Redis分散式和Java深入微服務原理改造房產銷售平臺,需要完整Java全套資料可以掃下方微信碼免費領取
在這裡插入圖片描述專案效果展示圖

成本控制意味著對專案進行精細化管理,需要遵循如下幾個原則:

1.以終為始、確定里程碑。為了達成目標,所有的計劃必須以終為始來制定。將大專案分解成幾個小階段,控制每個階段的里程碑可以大大降低專案失敗的風險。

2.把控關鍵路徑和關鍵專案。按照關鍵路徑管理理論(CPM)的要求,架構師需要確定每個子專案的關鍵路徑,確定其最早和最晚啟動時間。同時,架構師需要關注那些可能會導致專案整體延期的關鍵節點,並集中力量攻破。

3.掌控團隊成員的張弛度。大專案持續時間會比較長,也包含不同工種。專案實施是一個不斷變化的動態過程,在這個過程中不是整個週期都很緊張,不是所有的工種都一樣忙。優秀的架構師必須要具備精細閱讀整體專案以及快速反應和實時調整的能力。這不僅僅可以大大降低專案成本,還可以提高產出質量和團隊滿意度。總體來說,“前緊後鬆”是專案管理的一個重要原則。

4.專案管理方面的書籍很多。但是,提高業務架構能力同樣重要。積極參與大專案並觀察別人管理專案的方式也是非常重要的提升手段。
團隊管理能力

不想做CTO的工程師不是一個好的架構師。走向技術管理應該是工程師的一個主流職業規劃。團隊管理的一個核心能力就是規劃能力,這包括專案規劃和人員規劃。良好的規劃需要遵循如下原則:

1.規劃是利益的博弈。良好的規劃上面對得起老闆,中間對得起自己,下面對得起團隊。在三者利益者尋找平衡點,實現多方共贏考驗著管理者的智慧和精細拿捏的能力。

2.任何規劃都比沒有規劃好。沒有規劃的團隊就是沒頭的蒼蠅,不符合所有人的利益。

3.規劃不是本本主義。市場在變,團隊在變,規劃也不應該一成不變。

4.客戶至上的是專案規劃的出發點。

5.就人員規劃而言,規劃需要考量團隊成員的能力、績效、成長等多方面的因素。

市場上有很多規劃管理方面的書籍,值得閱讀。最優化理論雖然是技術書籍,但它是規劃的理論基礎,所以不妨多看看翻閱一下。從自我規劃開始,多多學習別人的規劃也是規劃能力提升的重要手段。

Java同行願更進一步者,來者不拒資料免費放送
在這裡插入圖片描述