通過閱讀本篇文章,對於自己的工作有了更深刻的瞭解,當你覺得在一家公司發展到瓶頸的時候,你是否有考慮到是不是有很多的地方,其實是我們沒有深入去挖掘的。
同時本篇文章給出的思路,在你作爲架構師或者團隊小Leader去一家新公司的時候,問非常的有用。
1、歷史的代碼隨着人員的更替,業務的不斷迭代,肯定有很多的問題,單純的抱怨並不解決問題,我們要做的是在儘量不影響業務需求的同時,對架構和代碼進行優化。這是我們的價值所在。
2、對於歷史的代碼,不能直接推翻重構,對於人力和時間的消耗是很大的,會影響到業務的發展。需要和我們的合作方進行溝通,擺明說好重構的一些好處,在需求中不斷加入。就像一個大需求,我們也會拆分成小需求進行不斷迭代。
3、進入一家新公司以後,千萬不要說原來的架構很爛,原來的人水平不行。要給予肯定,兄弟們好牛X,原來這麼點人就支撐了這麼大的業務量,有助於於你快速的融入團隊。然後我們對整體的架構和業務進行梳理,整體出需要改進的點和優先級,和團隊一起過方案,主動推進和解決。
4、對於一個架構師而言,認知是非常重要的,技術認知和業務認知,以及這三項能力宏觀視野,中觀套路,微觀體感。
前 提
在一家BAT這樣的大公司,從技術角度來想會有什麼新業務嗎?大概率是很難遇到的。新人剛入公司基本也是從老員工手裏接手一些老的業務,舊的代碼,這些代碼有着這樣那樣的問題,技術棧陳舊,架構不靈活,無法滿足新業務,歷史遺留問題多,新需求還不斷。該怎麼辦呢?
新業務好嗎
-
自己去獨立負責一塊沒有的業務,從頭開始,對於一個高級工程師來說,這樣的業務往往比較小,或者並不受重視,從頭做起是簡單的,簡單的由你來做,有什麼挑戰呢?
-
大公司普遍有着創新者的窘境,所以從技術角度來說並沒有什麼新業務或者新技術,比如從0搭建一個react全家桶難嗎?想必並沒有什麼挑戰。
-
去做新業務也許只是你的杏仁核在作怪,這是一種尋求確定感的自我意識驅動。改別人的代碼往往並不能帶來一種掌控力和確定感,缺失這種感覺往往會讓你陷入自我焦慮,尤其是持續性的超負荷填坑,會讓你產生生理抗拒。
-
從零開始的業務往往是不成熟的,需求不明確的,是摸着石頭過河,很難有全局甚至宏觀的把握。初始設計的架構很難說能保持多久。
-
新業務會出成績嗎?對於一個開發來說,業務做的好壞從來都是基本盤,那是產品經理的kpi,開發應該關注的是通過業務沉澱出的能力。新是很難做到深的,而深纔是能力。
-
一個前景巨大的新業務,你的上級會把他交給你嗎?其他老員工早就看到了,還能輪得到你?
老業務不好嗎
-
一個需求爆炸的老業務,說明他依然具有很大的增長性。
-
在大公司裏一個需求旺盛的老業務,是被時間證明具有很高價值的。他牽扯的人也會更多,他們都是利益共同體,而這些人會讓他變大,變茂盛。
-
技術棧陳舊,架構不合理,說明他是一個可以從架構和頂層思維解決的問題,而這種思維纔是具有挑戰性的。也是從一個工程師想讓架構師轉變的好場景。
-
歷史遺留問題多,讓參與其中的每個人都感受過他的痛處,如果你能解決,將獲得更多的正反饋。
-
代碼陳舊與不合理往往帶來系統穩定的問題,而解決系統穩定性在大公司是非常關鍵的指標。
如何讓老業務代碼煥發新生機
你可能首先想到的是重構。但重構是推翻了重來嗎?
你應該重點關注以下幾點:
-
穩定性
-
開發效率提升
-
代碼學習成本降低,便於擴大開發團隊規模
-
工程化工具
-
頂層設計思維
該怎麼做?
-
完整的理清系統現有的業務邏輯,畫一張大圖,清晰的說明白。預期未來一段時間的需求,添加其中。
-
發現並羅列其中的問題,尤其是對你的合作方帶來的問題。
-
設計解決方案,向相關各方持續輸出 迭代自己的方案。出一張新的架構圖。
-
突出體現新方案帶來的業務價值,比如穩定性提升,人效提升,銷量提升,投訴率降低,體驗提升等。
-
漸進式的重構代碼,老需求不動新需求採用新架構,並逐漸替換老業務邏輯,千萬不要一上來就重做,重在設計不在代碼整理和重寫。
-
沉澱技術能力。
具體操作:
-
儘量快的梳理現有業務邏輯,邊做新需求邊熟悉。反覆與產品經理以及後端同學同步和完善這張大圖。
-
對於新需求的接入排期,給自己留足時間。對於一些改動較大的需求選擇性說服合作方暫且擱置。
-
一點一點的輸出新方案,向合作方表現出相當強的重構意願,贏得他們的支持。得到支持的目的是讓你獲得足夠的時間來重構代碼。
-
提高自己思考的維度,回到需求的原點,瞭解真正的需求是什麼,要解決什麼問題,防止遇到老代碼業務邏輯與需求脫離變形問題。
-
回到需求原點來設計業務架構。
-
軟件設計是一個非常專業的知識領域,多有很總結好的套路和方法,需要花時間學習。
-
用引擎這個概念來思考和拆分業務,而不是傳統的頁面,組件。一個軟件可以包含多個引擎,而每個引擎之間相對獨立,通過數據做流轉和連接。
-
數據,模型,邏輯分離。
-
清晰的編碼規範和思路,讓別人在你的框架約束下寫代碼,讓代碼整潔又可控。
-
能力沉澱,通過這次重構,有哪些技術能力沉澱下來,能批量解決什麼樣的一類問題。
核心關注點
能力型組織不拘泥於任何業務,他是一個批量解決問題的引擎。
-
業務提效
-
能力沉澱
總 結
作爲一個技術人員完成業務需求永遠都是基本盤,能力的提升纔是最重要的。而能力中最重要的是軟件設計能力(架構和視野)和深入研究能力(技術深度和專業性)。
作爲工程師,你需要把握三項能力:
-
宏觀視野(擴大知識面,比如瞭解編程範式,設計模式,不同語言特性,行業前沿狀態等)
-
中觀套路(大公司能給你的思考方式方法,規章制度,文化,管理經驗等)
-
微觀體感(自己在實踐中摸索的原則和感覺)