【51CTO專稿】對于大部分的程序員來說,架構師都是一個令人向往的角色。可以說除了少部分對程序開發有著極度的熱愛并愿意為之奮斗終身的程序員,而大部分的程序員都只是把寫代碼作為一個獲得職業提升的一個必要的累積階段。在不斷的開發和學習各種知識,經驗,在自我培養和技能強化中不斷的提升,為他們的未來中成為一名合格的架構師打下牢固的基礎。
一名優秀的架構師,他們都是帶著極度的熱情,踏上正確的路上,不斷的堅持!這就是一名優秀架構師的態度。下面小編有幸采訪到了51CTO云計算架構師峰會的邀約講師,前任金蝶總體架構部SOA架構師,現淘寶網高級專家彭淵(花名:千峰)老師,跟我們一起聊聊關于他的架構師歷程。
前任金蝶總體架構部SOA架構師,現淘寶網高級專家 千峰
千峰簡介:從業Java技術領域十多年,撰寫過多款開源軟件,擁有軟件著作權的代表作有:BS系列軟件(包括財務進銷存、OA產品、CRM等)、FMS視頻會議、Flash網站生成軟件。其中BS系列軟件獲得過風險投資, FMS視頻會議獲得金山舉辦的首屆中國優秀軟件創新大賽優秀獎。其中《BS財務進銷存》、《FLASH網站生成軟件》在華軍、天空可免費下載。《淘寶分布式并行計算四合一框架Fourinone》是云計算方面作品,目前已經通過壓測并用于淘寶業務場景, wordcount和排序等經典指標均優于hadoop。
詳見技術博客 (可下載開發包和demo):http://3503265.blog.51cto.com/
專長與研究領域:千峰踏入IT行業至今差不多12年了,一直做Java技術領域,幾乎Java SE, Java EE,Java ME都涉及過。除此外,他還比較熟悉FLASH音視頻技術和少量的C技術,主要是因為Java在音視頻和操作系統層面控制比較弱的原因。而在應用方面,B/S結構的企業軟件架構更是他的專長,并擁有一系列軟件著作權。在淘寶先后在交易中心、中間件、核心系統部門,主要研究非法軟件防范(秒殺器,炒信用,代拍,爬蟲等)、大數據處理、語義分析、分布式計算、機器資源利用等領域。
從對IT熱愛到程序員生涯
我在高中時買了臺中英文小霸王游戲機(那時有電腦的家庭很少),可以接在電視上玩,里面有個Basic編程的,我第一次學會了goto語句。大學時喜歡打電腦游戲,后來又覺的游戲打的好不算什么,當時流行做個人主頁,有個漂亮的個人主頁很有面子,于是我就買了本FrontPage的書,暑假關著門學做網頁,穿插一些js動態效果和applet動畫,看見流行flash動畫,我又學習flash腳本。后來去找實習工作,別人說我搞的這些沒用,他們不需要網頁制作,他們要用PB+SQL Server,然后我又繼續學習數據庫應用,一直到畢業,我自學了很多VC++/MFC/ODBC等東西,也學習了Java。我大部分的編程都是靠自學,計算機課程和老師教的幫助比較小.我的第一份工作是基于Java編程的,還專門到bea公司進行了J2EE培訓,后來就一直做了下來。
有朋友問過我,為什么只做Java編程,不去做C編程。實際上,如果僅僅是編程語法語句,任何一種語言我都可以很快學會。關鍵Java技術已經是一個從無線到桌面到Web到ic卡的完整的技術體系和規范,并生長出各種技術生態系統,如果要考慮快速落地實現一個系統,很多處理經驗是要積累起來的。
從程序員到架構師的經歷
“從感興趣、學習、懷抱當比爾蓋茨理想”到“走入這個行業靠編程謀生并成長為一個架構師”是一個曲折蛻變的過程,我記的好像是在2004年左右,架構師這個崗位從國外傳入,很多公司出現了招聘架構師,以前比較多出現系統分析員。什么是架構師,各公司的標準也不一樣,架構師更多是個崗位,你只要聘上了就是架構師。我自己的經歷大概是這樣的:
1)架構師要能hold的住一個軟件或者系統的設計和開發
2002年我到廣東發展沒有經驗,被兩個老板騙到南海軟件園包吃住干過一段時間,當時去投標一個南海民政的項目,公司是打著北方一個分公司名義的皮包公司,找了幾個畢業不久的學生當工程師,又找了一個頭銜多的海龜說是他們的技術總監,湊成一只廉價成本的團隊去忽悠上百萬的項目,老板說這個項目副市長親口告訴他已經交給我們做了,只需要招標走走形式。
由于公司主要靠兩個老板的關系,沒有自己的技術產品,當時老板從其他公司找來一套民政系統軟件,Web化的,老板說是其他公司一個資深點小伙子寫的,說其實1-2個人就可以寫了,沒什么難的,叫我改成公司的產品去投標。當時接到這套完整的Web系統軟件時,雖然是Java的,但是沒有用到多少j2ee里面花哨的東西,都是jsp+Javabean這種簡化的技術,也有控制器等角色,都是jsp實現的,里面復雜的頁面流和大量Javascript腳本顯示出開發者嫻熟的Web編程功底,數據表可以自由搭建,里面有些簡化的生成管理模塊的工具。當時有種hold不住的感覺,感覺自己Web程序還寫的太少,還未積累大量Web編程的處理經驗和將業務系統通過構思設計轉換成軟件的能力。雖然急功近利的老板認為我可以,一再給我畫餅,主要原因是因為我們便宜。當時感覺技術不用花哨,簡單的技術只要用的多用的精,一樣可以設計完整高效的系統。
說白了,架構師能hold的住一個軟件或者系統的設計和開發,能將業務需求變成可實施的工程。后來看,那個能hold住民政系統的小伙子算是架構師吧。 老板缺乏對項目技術難度的認識,認為隨便找幾個工程師就能做,也許他之前也這樣忽悠到過項目,但是這個項目最后沒中,記的是東軟通過重重關系中標了。
2)有一天你發現自己的能力可以去當架構師了
從那以后幾年內,我都處處留意Web系統整個的架構設計,從登陸、用戶、權限、菜單、session、日志等基礎管理到從界面到動作處理到業務邏輯層到數據庫設計的整個過程,模塊的銜接和各種頁面流的轉發傳送,每種實現技術我都嘗試出最好的,并積累下來,我又從一個香港人那里學到一套更好客戶體驗的Web管理界面和交互方式,并轉換成自己的東西用進去, 我注重強化自己各方面的開發技能, 連簡單的美工也嘗試自己處理。
我能自己實現一個完整的Web系統后就自己開個工作室,接一些小項目做,直到后來為一個小公司的老板做外包,我演示了自己的Web架構給他看,他說我覺的你挺適合來我們公司做架構師,那是第一次有人說我是架構師,有點躊躇滿志。他們公司的主打產品是套domino的oa軟件,老板出身ibm,對domino/lotus熟悉,但是由于市場和客戶需求,想改成Java版的,但是又一直猶豫不決,我說我試試看吧。oa的主要核心技術是工作流引擎,他說他們已經做了很多年,Java沒那么容易實現的。那段時間我反復研究工作流的原理,簡化成工作流定義,工作流引擎,工作流實例幾個模塊融入進已有架構中,并做了他們沒有的Web界面編輯流程,工作流可以搭建并生成流程代碼,我順便把oa的常用辦公流程業務模塊也生成了出來,配合權限體系能完成一個基本oa系統審批功能了。隨著系統功能越來越完善,本以為他會高興的,誰知道他的臉色越來越難看,有天居然以莫須有的罪名把我炒掉了。
我也許有問題不善于揣摩老板的心思,但是他的心胸也絕對是有問題的,所以最好不要到小企業當架構師, 大企業就像海,容得下各種魚,小企業就象灘水,只容的下蝦米.后來我繼續寫oa系統并包裝成完整的產品,又找來小投資公司一起在社會上銷售和做軟件服務折騰了4-5年。
總結:如果你能冒著被k掉的危險設計出一個企業的核心產品了,那你可以去當架構師了。
3)聘大公司的架構師
我覺的自己相比經營公司更適合做技術.于是去大公司發展技術, 我應聘的第一家大公司是家金融軟件企業, 2007年在美國紐交所剛上市,號稱金融外包全國第一,當時紅極一時.面試官看上去像老總(其實只是經理,他們公司經理看上去都像老總),我說我要聘架構師, 他臉一沉,說不能都當領導,得有人干活,先從高級工程師做起吧。我不同意,他說那好吧,有三道算法題你上機做一下,不能上網。其實那三道算法題是有一定難度的,要在規定的時間做出來,并且要能運行出正確結果,當時有點緊張,因為知道他是在壓制我的自信,如果不能正確做出,肯定羞愧的不好意思再提聘架構師了。其中最難的一道是一個程序試探路徑的算法,遍歷出所有可行的路徑,好在我的編程功底還不錯,平時也喜歡寫寫這方面的算法,最后順利做出了。他讓一個研發工程師過來檢查,沒問題,然后似笑非笑的說,既然你堅持要當架構師,那就成全你吧,看你還算是個人才,給你加多1000塊錢,但是你兩年之內不要跟我提加工資,我們兩人定個君子協定。我只能接受并謝主龍恩。
進公司后我發現,其實他們公司其他的架構師都是不用寫程序的,而且架構師在他們眼里也就是一個干活的,比工程師好一點,但并沒有多少尊重。架構師的上面是項目經理,再上面是經理,總監,總監上面還有很多領導,架構師向項目經理匯報,由項目經理指揮派活。應聘項目經理的是不需要上機編程的,技術弱點也可以,只要溝通好,領導認可就行,而且待遇更高。
這個公司雖然有很多架構師,但只是另一種小主管意義的頭銜,當時在那個環境下也很迷惘,想往管理上轉型,但是他們不同意,認為我干活更合適。后來這家7000人的企業因為非常混亂的政治斗爭和在美國股市上做假賬,在2011年被退市,然后就迅速崩潰了,讓人感慨不已,這就是it行業,市場總在無情的洗牌。
說到這里,也許才踏入行業的程序員們有點失望,現實中的架構師沒有想像中的那么令人向往,國內技術路線發展也注定坎坷。但是每個企業對架構師的定位標準和尊重程度都不一樣,不能說天下烏鴉一般黑,互聯網企業比傳統軟件外包企業要好很多。而且上面說的也只是我個人的經歷和觀點,不代表所有的現實環境。
架構師的成長曲線
從如何加強技能到自我培養
1)加強技能修養
有句俗話說的:不怕賊偷,就怕賊惦記。只要惦記上要掌握某項核心技術,不掌握誓不罷休,總會不知不覺在提高的。
但是很多程序員加強技能修養是希望得到公司的升遷回報乃至市場的利益回報的,如果他發現技能提升并不一定得到認可和回報,那么也沒有多少人真正愿意往這條路上走了。因此,搞技術需要一點興趣的,就象平時喜歡搞點吹拉彈唱的那些人一樣,我平時也喜歡搞點編程什么的,所以一直還做著。
另外:
每個公司對架構師都有自己的定義,不一定是強調技術方面的技能,你會發現:
有擅長金融業務、ERP業務、電商業務的架構師
有擅長產品規劃的架構師
有擅長售前和解決方案的架構師
有擅長咨詢顧問的架構師
有擅長硬件網絡的架構師
有擅長RUP/軟件工程/CMM5/敏捷的架構師
有擅長管理協調的架構師
等等...
我在社會上各個公司里見到太多太多
所以不能簡單的認為提高了軟件編程的技能修養,就能達到所在企業架構師的標準了。要學會尊重不同類型的架構師,在大企業里往往這些崗位的存在都有他的現實意義和對公司的價值,沒有眾多架構師和領導的支持,很難推動起來辦成事。
2)如何自我培養
我個人從實踐中的成長更多一些,因為我大學畢業就投身這個行業去努力了,沒有繼續讀書深造。
但是實踐和理論都是重要的,有的人實踐中碰到障礙后,干脆從此就只做一個理論專家,或者是自身缺乏理論學習,到處散布理論無用論,兩種極端都不可取的。
從我的感受來說,我寫bs財務進銷存軟件時,苦于不懂財務理論知識,花了很多時間去學習會計憑證、資產負載、折舊算法這套東西,也包括當時為了做其他軟件去學習股票行情趨勢理論、博彩概率和分成理論等等。學這些都不為考試,就為軟件寫出來能賣出去。同樣的技術,如果做業務簡單不需要專業理論知識的產品,比如企業網站、圖書管理這些,太多公司都可以做,很難形成核心競爭力。現在做fourinone也參考了很多行業分布式論文理論。
我自己從程序員到架構師的成長上面經歷已經描述了,但是如上面說的各公司定義這個過程的成長標準是不一樣。
比如:
有的企業,為公司完成一定數量和規模的項目,就可以從程序員提拔為架構師了
有的企業,為公司解決一系列重大的問題,就可以提拔為架構師了
有的企業,前一任架構師走了,就可以提拔上去了
有的企業,經驗到一定程度,就升上去了
...
關于架構師的培養,有的國外牛人會認為不是每個程序員都能成為架構師, 一定要有比較強的抽象建模能力和邏輯思維能力才可以,就像不是每個司機都能成為賽車手。這個話如果拿到國內講估計會得罪很多人了,因為大家都會強調架構師的多樣性,都會按照自己的優勢去定位架構師的標準。
架構師成長模型
團隊中如何開展架構師相關工作
通俗的比喻,跟裁縫做衣服也差不多,首先要量體裁衣(收集需求),然后選擇布料(技術選型),設計草圖(建模)把腦海里的設計畫出來,做好一件衣服是要針線活功底和經驗的(技術積累),同時要利用現有的拉鏈、鈕扣等半成品(組件重用),最后把樣品做出來(架構開發),最后交給工人按照樣品重復性生產(基于架構實現重復性開發工作量)。
除了需求分析、技術選型、設計開發外,還有些其他的工作需要架構師做。
很多時候公司或者老板并不喜歡你把核心的東西提取出來,一個人單槍匹馬掌握了就完了,更希望你把團隊培養起來,把人才挖掘出來,所以架構師還肩負著帶徒弟做設計的職責。
另外還包括
技術培訓、協助軟件產品規劃、協助市場前景分析等方面工作。
堅持是最大的挑戰
這次參加infoq架構師峰會,看到有朋友討論到架構師應該獨立做,但是沒有團隊,沒有業務owner權,架構師設計出來的東西如何得到別人的支持呢,我以fourinone為例說明碰到的挑戰和如何去克服。
fourinone發布1年多以來,以無依賴100k大小實現眾多分布式核心技術,淘寶內壓測多項指標都ok,雖然遭受其他框架愛好者和信任者質疑,但是至今為止,也未見到挑出一些真正的明確的毛病。一項好的產品,如何讓大家能充分認識到他的優勢,并梳理清楚大家贊成或反對的技術或非技術原因,這是對架構師一項大的挑戰。
對人的攻關遠比對技術的攻關復雜,有時候就算產品做的好也是有人反對的,所以要盡可能去定位成一個協助者,而不是一個取代者,就象jdk可以實現hadoop所有功能,但是沒人覺的它是hadoop的取代者。fourinone更多的是定位在框架和api,為各種的分布式問題提供簡化而強大的支持,可以用它改進完善已有系統,也可以用它建設新系統。它是一臺縫紉機和一條拉鏈,而不是一件完整的衣服,不會對另一件衣服夠成沖突。
當然,最大的挑戰還是堅持往架構師這條路上走,朋友們如果碰到一時困難也不要著急,行到水窮處,坐看云起時,忽悠忽悠也就過去了。
最后感謝你們的真誠采訪,算不上成功權威,胡亂說了一通,希望大家有所借鑒和收獲。
【編輯推薦】