Project Description

《思路不對,搬再多的磚也成不了架構師》分享實錄

各位千聊的小伙伴們和開發者們,大家晚上好。先做一個簡單的自我介紹吧,我是來自聚合數據大數據部門的技術總監,我長期在一線從事基礎的技術開發和管理工作,所以在工作中,對開發者的需求,以及怎樣成為一個資深開發者,甚至成為一個架構師,有一些體會。

也非常高興和碼農基地以及千聊有這樣一個合作機會,把自己的感觸分享給大家。首先說一下為什么會選擇這樣一個話題呢?聚合數據不知道大家了不了解?聚合數據實際上是一家以數據接口形式,服務于開發者的服務平臺。我們提供了大概了兩百多種接口,包括生活常用、一些金融、汽車以及科學運算相關的數據,大家有興趣可以在juhe.cn上去看一下有沒有大家需要的數據。

因為聚合數據一直是以api的形式去服務開發者,我們在服務開發者的過程中,也接觸到了很多開發者。但是我們發現大多數開發者的思想層次還停留在一個開發人員的層面,他們對自己的工作僅僅是把功能完成,所以我也希望我自己的經驗能分享一下,希望能夠讓廣大的開發者能夠從術的層面到道的層面,有一個質的提升。

開發朋友們一定對架構師這樣一個角色非常向往,剛才也在交流群里看到,有一些開發朋友非常期待成為一個架構師,下面我們簡單列舉一下今天的分享的提綱。我主要介紹架構以及如何成為架構師。

提到架構師,那我們不得不簡單提一下什么是架構、架構是如何產生的。架構的產生在我看來,首先是源自于人類社會的一些分工,因為人在完成一些復雜任務的時候,我們的精力、能力和時間的局限性,導致我們必須把工作做一些拆分。在拆分之后,每個人都會對自己專精的事情有一些提升,這樣生產力自然會得到提升。

那我們怎么定義架構呢?在我看來,架構其實很簡單,就是把一個整體的工作切分成不同的部分,然后用不同的角色、不同的系統來完成這些分工,然后通過建立不同部分互相溝通、協作的機制,讓這些被分開的部分又有機地結合到一起,成為一個整體,并且完成我們最終的大目標,這樣就是一個架構。

那架構師在架構的過程中,他主要的工作是做什么?

提到架構師,我想先談一下,架構師他并不等同于資深的程序員。架構師和程序員之間的區別,有點類似于工匠和架構人員的區別。工匠其實是做好自己的工作,并且把自己的工作做到極致。那架構師除了對自己的工作有足夠的自信,還能夠幫助別人來解決問題,而且還能幫助組織和整個系統來完成整體的工作。

既然提到架構師需要完成的不僅僅是自己的工作,那我們就來看看架構師具體需要做些什么?在我看來架構師工作的本質,其實就是做兩件事情,一個是分,一個是合。分怎么分?分的依據是什么?這就要從架構師兩個核心的工作開始說其,這兩個工作一個是定義問題,一個是分解問題。

為什么我會先提到定義問題呢?因為我也發現,在工作中很多人拿到一個任務的時候,他其實拿到的只是我們想要的一個解決方案,比如老板可能需要我們去買一個錘子或一個榔頭,但是究竟老板真實的需求是什么?可能經過詢問,最后發現老板想要的只是把他手上的核桃給敲開,如果是這樣的需求,可能我們不需要去買一個錘子。

所以我認為架構師在做架構之前,對問題的定義至關重要。我們需要發現利益相關方,從多個角度去認真理解真實的需求,同時我們要抽象出核心的概念以及核心的需求,同時要把一些非功能需求給定義出來——這些非功能性需求可能不是最核心的。

當架構師對問題進行明確的定義之后,那我們就要進入下一個階段,就是分解問題。分解問題也就是對架構的切分,我們為什么要對架構進行切分呢?因為我們在某些利益相關點上,某些人的負載太重,或者在某些時間或空間點上負載太重,所以我們需要用單一職責原則,對模塊、對架構進行一些切分,切分的本質是要平衡各方的利益。

對架構進行切分之后,必不可少地就是對架構進行實施。實施這個階段,我們就需要對任務進行一些分解,在這個過程中我們必不可少地涉及到組織或人,這也是很多架構師可能會忽略的問題。實際上每一個架構的背后,都必不可少地涉及到人的問題或者組織的問題。

定義完架構師做什么之后,我下面給大家介紹一下架構師究竟長什么樣。我覺得優秀架構師實際上就是四度、兩性。

作為架構師,他需要在技術上有一定的廣度和寬度。所謂的廣度,是需要多領域的知識;所謂的寬度,是需要一定的技術前瞻性。另外從思維角度來說,架構師需要一定的高度和深度,高度是需要非常強的抽象思維能力,深度是能夠分析到問題的本質。架構師的兩性是架構師需要感性和理性,感性主要體現在,作為一個架構師,需要協調不同的開發力量、協調不同的業務部門,所以架構師需要非常強的溝通能力,不僅僅是能夠作為一個資深開發,而且需要協調其他開發人員來做相關的工作。另外從理性的角度來說,架構師需要排除自己的感性因素,從理性的角度、從系統的角度去考慮,把各方的資源進行理性地平衡。

那剛才提到了架構師長什么樣,架構師實際上具備四度兩性這樣的特征,是不是大家又開始懵了,覺得這樣挺難的?這樣的一些能力怎么去培養,下面我就從架構師的養成來給大家分享一下如何成為一個架構師。

首先,我覺得要成為一個架構師,必須要成為一個優秀并且務實的程序員,要重視代碼的質量,以及項目的可維護性。要成為一個優秀的程序員,相比高性能、高并發這些很酷的事情,

其實簡單清晰的設計以及可維護的代碼這些,顯得更加重要。

架構的抽象思維,實際上存在于工作的各個層次。日常的一些小工作,我們也可以通過訓練架構思維,在函數、類、模塊的各個層次,實現單一職責、最小支持、依賴注入這樣一些原則,遵循以上設計原則來使用一些技巧。

架構師養成法則第二點,我是覺得所有的架構師都要養成完整的知識體系,尤為重要,比如說數據結構,比如說設計原則的一些分工,比如說一些設計模式對各種技術既要知其然又要知其所以然。因為扎實的基礎知識在你找到問題的根源,會顯得,這些都會幫你更好地去定位問題。

另外我認為建立完整的知識體系,要通過系統的學習和閱讀,我們通過百度、谷歌,只能解決單一的問題,但是通過閱讀、吸收前人的精髓,我們能夠解決一類的問題。

架構師成長法則的第三點,我們需要從多個角度來理解業務需求,探尋解決的根本問題,學會平衡。項目的各方對同一需求的理解是不一樣的,架構師不能像程序員一樣,產品給什么需求我們就去做,而是要去分析需求的背后是為了解決什么問題,有沒有更好的、更全面的解決這個問題的應對方案。

除了應對方案之外,每個項目實際上資源、人和時間都是不夠的,架構師還需要去考慮到,從各個方面去平衡,去做出一些權衡,把核心的重要的功能甄別出來并且推遲一些不重要和不確定的功能。

那架構師成長法則的第四條,我覺得也是最關鍵的一條,也是很多程序員不具備的一條,那就是需要去練習高效、準確的溝通能力。從我個人經驗來說,要盡可能用對方理解的話術來描述問題,保障我們雙方能做同一頻道進行溝通。很多技術人員和老板及業務人員溝通的時候,非常喜歡用一些專業術語,這個實際上是比較忌諱的。

最后我再給大家重新強調一下架構師養成的四大法則。首先是架構師要先成為非常優秀和務實的程序員,要對自己有一定的要求,重視代碼的質量以及項目的可維護性;第二要建立完整的知識體系,對各種技術知其所以然。第三,要從多個角度理解業務需求,探尋要解決的根本問題,并且學會權衡。第四就是要練習高效準確的溝通能力。

今天我們的分享就到這里,接下來就是問答環節,我會在討論區挑選出一些大家比較集中、共性的問題進行解答。

Paul:請問如何建立完整的知識體系呢?每一門語言都要求精通嗎??

回答:關于如何建立完整的知識體系,我的理解是這樣的,我們需要進行體系化的學習。以前我也習慣通過一些博客、SF、知乎這樣的平臺去搜取一些問題的解決方案。但是后來發現當下的問題解決了,但是當你遇到其他類似問題的時候,你還是沒辦法解決。所以我的建議是,大家對自己要解決的問題,以及未來的發展方向,能夠有一個知識圖譜,和一個對應的書目。然后通過這樣的書目,我們再去進行系統化學習的時候,我們會發現知識點之間是相互串聯的,再去解決問題的時候,比如解決一個系統的問題時候,我可以從服務器、代碼甚至是從人性的設計角度,去考慮這樣一個問題如何解決。

關于是不是每一門語言都需要精通?我的理解是這樣的,架構師不一定需要掌握、精通每一門語言,但是他要具備快速掌握某一門語言的能力。我們要精通某一類語言,從而去衍生、掌握其他的語言。架構師其實他的能力范圍不僅僅在語言,這位同學可能還限定在開發的思維,其實架構師他的能力不局限于語言,比如說他對服務器的掌握、對計算資源以及對數據庫的掌控,都是我們在知識體系當中需要考慮到的。

小小程序猿:本來因為特別內向才學的程序員,如果往架構師方向轉的話,是不是要經常去做溝通的一些事情?感覺不是很擅長,應該怎么辦?

回答:性格內向但是又想成為架構師?我的觀點是這樣的,實際上并不是所有人都適合去做架構師,溝通是架構師一個重要的能力,但是溝通也是可以去培養的。我覺得這個朋友如果在技術上以及其他方面有自己追求的話,實際上可以去突破自己的溝通障礙,因為我們只有通過溝通才能挖掘出本質問題,針對本質問題來設計解決方案以及系統方案,同時去協調其他的一些開發比如說運維人員以及前后端,協調起來去解決整個系統的問題。所以我是覺得溝通很重要。

這位朋友如果是在溝通上,確實有一些難以克服的地方,同時對技術也有非常高的追求,也可以往技術專家的角色去培養,不一定每個人都要成為架構師。

任鵬舉-Allen:架構師需要去跟客戶溝通需求嗎?

回答:有必要的話,架構師個需要去跟客戶進行溝通。因為越是復雜的問題,經過越多的層級轉述,失真的可能性越大。為了抓住關鍵的問題,必要情況需要跟直接客戶進行溝通。

志強:產品經理,項目經理,架構師有什么不同?

回答:產品經理關注的是產品的表達、用戶體驗、商業邏輯。項目經理關注的是項目的安排、相關人員的協調。架構師關注的是如何依據技術資源,組織資源切分問題,形成子模塊子系統,并將其有機結合起來。

產品經理定義方向與目標,項目經理對其進行推進,架構師對其系統可靠性負責。

paul:問請問架構師和技術專家有什么區別?

回答:架構師需對整體進行把控,他們可以不是某塊具體技術的專家,但是必須熟知此技術或框架等能解決什么問題。

Black empire:問問羅老師能不能給提供一個架構師學習路線,和每一個階段可參考的相關書籍?

回復:好的,關于書籍和前面一位同學關注的網站,我稍后可以整理分享。另外主辦方送的人人都是架構師就不錯喲。

豪哥:問聽了羅老師的課,我對架構師的理解是:優秀程序員+需求分析師,這種理解對嗎?

回復:應該說優秀程序員是基礎,需求分析能力、系統方案提供和問題拆分能力,也極其為重要。

布布:問問架構師是否需要有整個項目的實現過程的技術經驗?

回復:需要,架構并不是一次性的工作,貫穿在整個項目始末,有完整項目經驗,對預知項目不同階段會遇到怎樣問題,怎樣在不同階段調整也很重要。

堅持:在技術方案選擇時,與同事發生分歧時,如何處理?

回復:架構師不僅僅是一個頭銜,也需要有實權。出現不可協調的分歧,一定以架構人員觀點為準。因為他是上帝視角考慮全貌。所以架構師也并不容易,也需要真的具有技術說服力來避免此類問題,不到不可避免情況,切忌用權力來說服開發。

很多公司所謂架構師并不具備架構師的能力,只是在做系統架構的設計工作而已。

何鋒:問請老師推薦些作為一個優秀的架構師應該掌握的工具,特別是針對需求梳理、拆分的時候,謝謝老師

回復:這個我感覺看個人喜好吧。我個人喜歡用markdown整理文字,用xmind之類畫腦圖,把問題列出。用omnigraffle來畫uml、架構圖那些。當然 一些在線的工具也是不錯,百度腦圖、processon這些。

今天分享先到這邊,非常遺憾許多小伙伴的問題也沒來得及回復,感謝大家聆聽和交流。

主持人:好啦,最后請羅老師選三個優質問題,贈送《人人都是架構師》書籍。

羅承成嘉賓:恭喜paul、豪哥、Black empire三位問題比較具有代表性,也有自己思考。希望人人都是架構師能有更多啟發,一起交流,共同進步!

主持人:恭喜這三位伙伴!感謝大家參與,下期再見!

index-icon-weibo index-icon-facebook index-icon-twitter github-1
wen-xin-2
? ??友情鏈接? ??| ? ??法律說明? ? ? ? ? 北京起步科技股份有限公司 ??2006-2017 ? ? ? ?京ICP備13007148號