专访李智慧:架构是最高层次的规划和难以改变的决定
http://www.csdn.net/article/2015-09-21/2825759
李智慧(微博、LinkedIn),目前任職宅米網CTO,曾供職阿里巴巴與英特爾亞太研發中心,從事大型網站、分布式系統、大數據平臺方面的研發工作。著有《大型網站技術架構 核心原理與案例分析》一書。
CSDN:你是如何走上技術這條路的?談談畢業這些年來在工作中的收獲和體驗。
李智慧:我大學學工業自動化,在校的時候一個偶然的原因在圖書館看到一本C語言編程的書,從此迷上編程,但是畢業后從事的卻是儀表工程師的工作。工作四年以后,難以割舍對計算機的熱愛,報考了北京工業大學計算機專業的碩士研究生,然而,錄取的時候卻被調劑到熱能工程專業,于是又稀里糊涂讀了三年汽車內燃機碩士。幸運的是,碩士畢業后我找到了一份軟件工程師的工作,開始了自己的職業編程生涯,而這時我已年近30,距離大學畢業也已經7年了。
所以我的工作體驗就是:如果你真的喜歡一樣東西,你不會在乎為她經歷多少曲折,蹉跎多少歲月。你不會盲從所謂過來人的經驗之談「30歲以后就不能編程了」,你會心甘情愿把青春獻給她,無怨無悔,無畏于任何結局。
CSDN:你目前最關注哪些技術領域?
李智慧:我目前比較關注的是云計算與大數據方面的技術。
一方面,云計算那種為整個星球提供計算能力的愿景讓我癡迷;
另一方面,我比較喜歡研究云計算技術中用到的各種分布式技術,在阿里巴巴工作期間也申請過幾項分布式計算的發明專利。
我在Intel工作期間開發過一些大數據相關的產品,也為開源大數據平臺ApacheSpark貢獻過代碼。大數據技術雖然現在火了又火,但是我認為大數據能提供的價值還沒有爆發出來,未來計算機與互聯網可以為人類提供更多個性化服務和主動服務,實現某種意義上的人工智能,現在做的還遠遠不夠。
CSDN:你曾在13年寫了《大型網站技術架構核心原理與案例分析》一書,能分享下寫書的原因?以及簡單介紹下這本書的特色等。
李智慧:我開始寫作《大型網站技術架構:核心原理與案例分析》這本書是在2012年,那一年中國互聯網出了幾件比較有影響的事,京東的促銷宕機事件,12306的春運宕機事件,以及多個重要網站的泄密事件等等,因此我覺得有必要普及下互聯網技術架構的核心原理與基本方法,讓新入行的互聯網工程師們少走些彎路。
因為定位在互聯網技術知識普及,所以整本書的行文都比較淺顯易懂,只需要一些基礎的專業知識就可以順利閱讀。這本書上市以后也得到廣大讀者的認可,很多讀者私信我說受益良多,也有些學校選用這本書做教科書,還獲得過CSDN2013最受讀者歡迎原創圖書獎、電子工業出版社2014最暢銷圖書獎。我自己很高興這本書能為中國互聯網技術進步貢獻一點力量。
CSDN:你個人對架構/軟件架構的理解是?
李智慧:關于架構的定義有很多,我自己比較喜歡這個:「架構是最高層次的規劃和難以改變的決定」。
軟件架構設計應該在一個很高層面上進行,在做架構設計的時候:
考慮產品需求和功能特性;
考慮性能、可用性、伸縮性、擴展性、安全性、運維監控、集成發布等非功能特性;
開發團隊經驗技能、組織分工、進度安排等項目管理方法;
產品運營目標、業務組織架構,使技術架構和產品特點與運營方案更好匹配;
甚至要結合技術發展趨勢、公司戰略目標、個人和團隊發展方向,為產品、個人、團隊、公司未來可持續發展去設計一個堅實而又有彈性的軟件架構。
CSDN:如何最大限度避免一個架構設計的失敗?
李智慧:我個人感覺無所謂失敗的架構,正如沒有完美的架構。只要產品還能繼續開發、維護、使用,再糟糕的架構也不能稱為失敗的架構;而一個產品如果開發中難以為繼,交付后難以使用,也絕不會僅僅是因為架構設計的失敗。
而要避免糟糕的架構設計,以及避免糟糕的架構設計給項目帶來更多的傷害,我認為最好的辦法就是讓項目組全體成員共同擁有架構;而不是架構師把架構當做個人的私有財產,拒絕他人染指。架構師設計架構,然后項目組共同討論修正,通過討論讓每個工程師都參與到架構設計的過程中,讓每個工程師都理解架構并遵從架構設計去開發。這樣即使架構設計存在問題,也會在開發過程中暴露出來,發現問題的工程師會積極和架構師討論進一步修正完善架構。
CSDN:大型網站有哪些典型的故障以及通常有哪些解決之道?
李智慧:網站的故障千奇百怪,各種不可思議,但是大多數故障都是處理高并發請求而直接或間接導致的。很多問題在用戶訪問量小的時候,根本不會成為問題,比如線程鎖的問題,磁盤爭用的問題,數據庫負載高的問題等,但是用戶訪問量一高,就會爆發出各種故障。高并發場景下的故障很難通過一般的功能測試發現,性能測試可以發現一部分問題,但是一定有一些問題只有在實際的高并發場景中才會出現。
淘寶的技術堪稱國內翹楚,但是每年雙十一為全球電商網站交易額創出新高的同時,也是淘寶技術部壓力最大的時候,所有工程師那一天無不戰戰兢兢、提心吊膽,不到狂歡結束,誰也不知道問題會不會出在自己寫的某一行代碼上。我在《大型網站技術架構:核心原理與案例分析》中專門有一章講「大型網站典型故障案例分析」,有興趣的同學可以參考。
CSDN:如何學習大型網站的架構技術?
李智慧:學習大型網站架構技術一個比較好的辦法是去大型網站工作。但是,大型網站進入門檻很高,而且內部分工明確,只有少數人能完整了解網站整體架構,你很難成為那少數的一些人。
學習大型網站架構技術一個更好的辦法是去一家創業公司,伴隨著這家創業公司逐步成長,成為大型網站,你參與其中,自然就學習了大型網站的架構技術。可是,創業公司千千萬萬,哪一家才能成長為大型網站?
所以,學習大型網站架構技術最好的辦法就是閱讀《大型網站技術架構核心原理與案例分析》,(笑),然后在自己的工作中實踐和提高。
CSDN:一名優秀的網站架構師必須具備哪些能力?
李智慧:良好的編程能力,雖然架構設計不需要編程,雖然很多架構師日常工作也不需要編程,但是如果你的編程能力不過硬,你幾乎無法設計一個良好的架構,設計出來也難以在開發過程中落實。最主要的,和一群挑剔的工程師合作,如果架構師缺乏良好的編程能力,幾乎沒有容身之地,遑論開展工作。
良好的溝通能力,架構師不是把架構設計出來就完事了,必須要讓項目組成員認可架構設計并在開發過程中落實架構設計,必須要和項目組成員頻繁溝通,在各種質疑、建議、疑惑中推進工作。同時,架構設計需要綜合考慮產品、業務以及公司各方面的情況,需要和相關團隊密切合作。總之需要處理大量的溝通協調工作。
此外,有一些不是必須具備,但是具備了會如虎添翼的能力
戰略眼光,跳出架構和產品,在一個更高的層面審視架構和產品,會獲得一種更開闊的胸懷和格局去看待自己的工作。
英文能力,緊跟世界潮流,獲得技術領域最新發展動態的第一手資料,對自己的工作有更多自信和思考。
項目管理,雖然有項目經理去管理項目,但是架構師懂項目管理,可以更好推動項目健康發展。
CSDN:在你的書中曾提到,「先成就他人,再成就自己」、「剛開始加入的時候不要急于證明自己,要先融入」、「最好的獎勵就是目標的達成,最大的懲罰就是目標沒實現」、「技術是要解決問題,但是我們要關心的是解決問題的人」、「學會妥協」、「越激烈的爭辯代表越關心這個問題」,對于入門或初級的架構師你有什么心得和經驗可分享?
李智慧:要勇于承擔責任,不要害怕失敗。不要怕自己的能力不足以勝任工作,既然公司安排了你做架構師,就是經過反復權衡慎重考慮的,你就是目前最適合這個職位的人。不要害怕自己犯錯給公司帶來損失,為員工犯錯承擔必要的損失是公司應付的成本之一。相對這些損失,鍛煉骨干、磨合團隊、打造敢拼敢闖的企業文化對公司的長遠發展更重要。
要虛心學習,不要不懂裝懂。作為新晉架構師,一定有許多不會的技能技巧,不要因為害怕被同事質疑自己的能力而不懂裝懂。不懂裝懂即使能糊弄過現在,你也不會有更加美好的將來。
CSDN:請談一下當前架構師所面臨的挑戰。
李智慧:架構師是一個非常有挑戰的工作:
一方面,架構師需要有足夠的閱歷和經驗,在某些領域有多年的積淀和訓練,才能對業務問題有深入的理解、對技術方案有充分的把握、對開發過程有嫻熟的掌控;
另一方面,架構師又必須對新技術保持足夠的敏銳和快速學習的能力,這樣在快速發展的技術變革面前才能保持持續創新能力。
這兩方面的要求對多數人而言是沖突的,很多人年輕的時候擅長學習新知識而缺乏經驗,年長后擅長總結經驗而對新知識反應遲鈍。架構師必須要克服這種沖突,在擁有經驗的同時不停更新自己的知識。Stayhungry,Stayfoolish。
CSDN:身為CTO您從技術人員轉到管理人員,有什么技巧?
李智慧:我做架構師的時候,發現如果開始能設計一個較好匹配業務的架構,并能和項目組成員就系統架構達成共識,整個項目開發過程并不需要投入太多精力,只要關注項目不要偏離目標即可。我相信大道應該至簡,觸類可以旁通。我做CTO也沿用這一思路,和技術部同學們就組織架構、技術體系、工作流程、業務重點達成一致并推行實踐,而不是企圖將個人意志加諸整個團隊身上。
CSDN:您現在每天還編程嗎?
李智慧:我在做CTO之前,在離開Intel前的最后三個月大概寫了一萬行代碼。但是做CTO之后沒有為公司寫過一行代碼,我會review代碼,review架構設計,但是我不會寫代碼,我覺得每個人都應該也有責任把自己的工作做好,CTO的工作職責不是寫代碼,CTO寫代碼是一種越俎代庖。
但是CTO應該編程以保持技術敏感性,他可以寫一些小項目做一些技術驗證,可以參與某個開源項目的開發。甚至也可以為公司寫一些代碼,但是最好不要將這些代碼提交到公司的代碼庫。
CSDN:您作為技術人員,可否分享下您的學習知識或技能的方法?
李智慧:軟件開發領域是一個變化特別快的領域,新的技術新的工具層出不窮。如果工程師不能快速學習新知識就會被淘汰,如果技術領導者不能快速學習新知識甚至會成為團隊進步的障礙。
學習知識技能首先需要時間,工程師應該用工作時間的20%去學習,如果工作時間抽不出空學習,可以用加班時間學習,如果加班時間也被安排滿滿的,至少能忙完這一陣(自己熟悉了情況后)可以有機會安排時間學習。如果這種機會和希望都沒有的,如果你對自己負責的話,我建議你還是辭職吧。
學習知識技能其次需要方法,工程師應該建立一套自己的知識體系,然后不斷把新知識新技能納入這套體系中。這套體系成熟以后,讀一本自己領域內的技術書,聽一次自己領域內的技術講座,需要學習的新知識不會超過20%,這樣讀書聽講座就會很輕松,也很容易就能吸收這些新知識,進入良性循環。至于如何建立自己的知識體系,每個人都有不同方法,但是有一點是共同的,那就是學校里的基礎專業知識一定要掌握好。
總結
以上是生活随笔為你收集整理的专访李智慧:架构是最高层次的规划和难以改变的决定的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: k64 datasheet学习笔记45-
- 下一篇: u盘被占用,无法弹出解决办法