架構師修煉之道

轉帖:架構師修煉之道

作者 InfoQ中文站 發佈於 2009年11月4日 上午1時7分

  • 宋瑋:InfoQ中文站Java社區首席編輯
  • 王瑜珩:InfoQ中文站.NET社區編輯,ThoughtWorks諮詢師
  • 趙劼:InfoQ中文站.NET社區編輯,微軟最有價值專家,現任某創業團隊架構師
  • 張龍:InfoQ中文站Java社區編輯
  • 李明:InfoQ中文站Ruby社區首席編輯,現任某通信公司架構師

1)在你的心目中,架構師意味着什麼?

張龍:架構師是一個項目組的靈魂人物,他決定着整個系統的技術選型、整體架構以及模塊劃分,同時還可能擔當與領導層的溝通角色,從某種意義上來說,架構師在很大程度上決定着項目的成敗與否,正所謂火車跑得快,全靠車頭帶。

王瑜珩:對我來說,架構師一直是一個很迷惑人的詞,似乎每個人的理解都多少有些不一樣。我認爲架構師更像是一個投資家,需要權衡各方面的利益和風險,反覆思量,最後給出一個現實可行的方案,爭取用最小的風險獲得最大的利益。

李明:我覺得,架構師不僅僅是一個頭銜,更是一份責任。所謂“在其位,謀其政”,我倒是覺得架構師更像是父母,而系統和項目則如同子女一般,需要架構師耐心的呵護和培養。完成一個項目,絕不是架構師工作的全部。通過代碼重構和架構改造,讓這個項目如同有了生命一般逐漸成長起來,這纔是架構師最終的目標。

2)架構師應該具備何種技能或者素質?

宋瑋:架構師應該具備一定的業務知識和業務分析能力,能夠準確地把握需求。要有較強的學習能力,對於新出現的技術、框架和工具,能夠快速掌握。紮實的基本功,能夠把握住技術方向。良好的溝通能力,能夠清楚地表達自己的意圖和想法。

李明:代碼能力絕對是很必要的。我見過太多只懂得畫圖的架構師了,“識大體不拘小節”這個說法,在架構師身上並不適用。作爲一名架構師,在系統的性能和可擴展性上,要有足夠的敏感性,既要充分利用現有資源,又要爲長遠做好打算。另外,對業務的理解是很多技術架構師所忽視的地方,只要徹底瞭解業務需求,技術才能派得上用場。

趙劼:在我看來,一個合格的架構師需要具備開放的眼光,各種平臺、系統、項目隨手拈來皆可組合,唯一的目標則是針對合適的環境選擇合適的做法,這顯然需要在成本和質量之間進行權衡。作爲一個架構師,應該具有很好的“彈性”,在真正的環境中,很少會遇見與過去一模一樣的情況,因此也需要架構師能夠大膽嘗試,靈活應對,使用踏實而嚴謹的做法來進行推測。一個架構師也必須有着足夠的溝通和交流能力,把自己的想法使用合適的方式告訴別人,並且根據別人的反饋進行不斷調整自己的觀點。沒有東西是永遠正確的,但是一個人往往會傾向於自己的結論,而作爲一個合格的架構師,需要有能力認識到自己存在的缺陷,使用各種方式進行彌補。

王瑜珩:架構師需要高瞻遠矚着眼未來,從外部功能與內部架構兩方面來考慮可能面臨的變化。誠如周愛民所說,架構師要在開發1.0版的時候就想到2.0、3.0,甚至更遠。然而在考慮未來的同時,也不能脫離現在,不能由於對未來的設想而大幅提高現在的開發成本,萬一未來並沒有到來,所有對未來的投資都將毫無意義。因此架構師需要平衡投資與風險之間的關係,以適當的風險來獲得最大的利益。架構師需要有良好的溝通能力,才能將自己的想法展示給開發團隊中的每個人,確保整個團隊對系統架構的理解是一致的。架構師不能脫離實際,設計一個無法實現或成本很高的架構。同時對於一個實際的團隊來說,也需要了解團隊中成員的能力,知道何種架構可爲,何種架構不可爲。

張龍:很多優秀的架構師都是從一個優秀的開發人員轉變過來的,但優秀的開發人員未見得都能成爲合格的架構師。與架構師相比,開發人員所需擔當的任務相對狹隘的多,其最大的目標就是編寫出精良的代碼、做好充分的測試以及撰寫高質量的文檔等;而架構師所要面對的則相對寬泛得多,除了過硬的技術之外,還需要有良好的表達能力,同時還要有宏觀的駕馭整個系統的能力。

3)架構師需要不斷修煉和提高的是什麼?

宋瑋:擴充知識面,學習瞭解衆多技術及框架的特點和適用範圍。瞭解非功能特性的相關技術和方法,包括可用性、容錯性、可擴展性、可伸縮性等等;瞭解系統安全性方面的技術和框架以及系統性能和狀態監測方面的知識及工具。除了技術方面,還架構師還應擴展自身的業務知識,不斷提高業務分析能力。想要做到持續不斷的學習,保持對各種技術、框架、產品的濃厚興趣是必不可少的,另外還要掌握他們各自的優缺點及相應的適用場景。學習途徑和方式則是多種多樣的,但是有一點是可以肯定的,架構師們相互間經常交流對成長是非常有益的。InfoQ的《架構師》就提供了一個很好的交流平臺,通過大家的廣泛參與,相信《架構師》能夠在分享經驗、促進交流方面起到積極的作用。

李明:我覺得這個問題可以從兩個方面去談。一方面,架構師要緊跟技術潮流,瞭解技術的發展和趨勢,利用新技術、新方法來提升團隊的生產力,將技術轉化爲收益。這就要求了架構師平時要多關注所在領域或社區最新的新聞和報道,最簡單有效的方式莫過於每天都看看InfoQ中文站了。而另一方面,架構師要培養自己的專業領域。雖然從技術的層面上說,很多解決方案放之四海而皆準。但是,從業務的角度來說,很多行業的解決方案放到另外一個行業中,未必行得通。這就要求了架構師必須對所屬行業的業務十分了解才行,這也是一個平日裏需要修煉的地方。

趙劼:架構師的學習過程是痛苦也是美好的,一個合格的架構師應該可以從學習過程中找到,至少是追求“架構之美”,把架構當作一種“藝術”來對待,並且可以把這種美給傳播出去,帶領技術團隊把這種美變成產品,讓更多人體會得到。

張龍:架構師之路是崎嶇的,充滿了荊棘與挑戰,但這卻是無數開發者的夢想。架構師是多項技能與素質的綜合體,每一位以此爲目標的開發者都需要在平日的工作中不斷提升自己,在這裏我衷心的祝願架構師這個夢想能照進每一位有心人的現實。

對於合格的架構師應該具備的素質和技能方面,張龍還給出的詳細的列表:

有人曾說過,20幾歲的編程天才好找,但30多歲的優秀架構師難尋。架構師何其難?除了敏銳的洞察力之外,我認爲一個好的架構師必須具備如下幾方面的素質:
  • 過硬的技術能力:有人說架構師就不需要編寫代碼,只需設計整體架構就行了。但我認爲這是很片面的,試想一個人如果長時間不寫代碼,他還能具備持續的技術敏感度麼?當然了,這裏所說的寫代碼並非一般開發人員的行爲,而是讓自己保持住對代碼的感覺。還有人說架構師不一定是技術高手,這一點我很同意,但他一定是個優秀的開發者。
  • 良好的溝通能力:這一點尤爲重要,因爲架構師需要與項目組的開發人員以及領導層不斷交換意見,向對方傳遞自己的設計意圖與思想,沒有良好的表達與溝通能力是很容易出現問題的。這一點在溝通方式並非母語的企業中尤爲明顯。
  • 良好的軟件工程素質:雖說架構師不是項目經理,但我認爲他需要對軟件開發過程有清晰明確的認識,這裏的開發過程是個泛指,也許是RUP,也許是XP,是什麼無所謂,但這種工程素質是每個優秀架構師必備的品格之一。
  • 寬廣的知識領域:架構師的眼界一定要開闊,絕對不能侷限於眼前的小範圍事務,否則極易出現“鼠目寸光”的後果。這就需要架構師不斷學習,這裏的學習既包括技術上的,同時也包括業務上的以及溝通上的。
  • 領域知識:架構師務必對自己所從事的業務領域有深刻的認識,他未必要成爲業務專家,但他一定要對業務知識有深刻的理解。很難想象經常從事金融領域項目的架構師能輕鬆設計好電信領域的項目架構。知識需要積累,業務也是這樣的。
  • 處理系統非功能性需求的本領:架構師尤其需要對系統的性能、容錯、併發等非功能性需求方面有獨到的認識與解決辦法。一個項目到了後期,往往都是這些問題成爲整個項目的瓶頸,這時架構師就要發揮其優勢了。

通過上面諸位的發言,我們可以看出,架構師得是一個“全才”,不但在技術上和業務上要做到“兩手抓,兩手都要硬”,更是得需要持續不斷的修煉和學習,才能成爲一名合格的架構師。雖然這是一條充滿挑戰的道路,但也同樣充滿了樂趣與收穫,正所謂“無限風光在險峯”,讀者朋友們,你們做好準備了嗎?

 

自勉 : 一些架構師招聘需求

Job description
Job Responsibilities
- Lead the team to resolve critical technical and non-technical problems to archive the project goal.
- Lead/build a high performance development team to deliver the solution within schedule and with good quality, also improve the development efficiency by adopting the new development methods.
- Work independently or collaborate with world wide architect team to get deep understanding of business requirements and customer needs
- Provide architectural design for large-scale web application creation, upgrade, transformation, integration or optimization.
- Demonstrate strong technical leadership to development team and work closely with testing team, business analyst team and project management team across the world.
- Review technical proposals, provide technical guidance to development teams.
- Work with department manager to set departmental technical direction and strategy.

Job Requirements: (skills/experiences/Qualifications)
- At least 8 years experience of requirement analysis, design, development and implementation of large-scale Java EE web applications
- At least 3 years leadership experience in architectural design, assessing staff skill levels, assigning work appropriately, making technical decision, solution estimation.
- Broad knowledge of Java technology and SOA, including but not limited to EJB, JSP, Servlets, JMS, Web Services
- Be familiar with popular web development frameworks and tools, such as Struts, Spring, Hibernate.
- Be familiar with popular development tools, such as Eclipse, CVS, Ant, JUnit, etc
- Broad knowledge on modeling, design patterns, refactoring, unit test.
- Broad knowledge on Agile methodology and practices, such as SCRUM, Extreme Programming (XP), Test Driven Development (TDD), Continues Integration, etc.
- Broad knowledge on Database application development and LDAP
- Strong software engineering, project management knowledge & experience
- Architectural thinking style, and thinking from big picture.
- Deep understanding of IT trends, keeping eyes on emerging technologies in the areas of Java, Open Source, SOA, Web2.0 Business Intelligence, Database, Security, etc.
- Strong business acumen, be able to lead department's technical direction setting and strategy design
- Bachelor or master degree in computer science or equivalent experience
- Excellent written/spoken communication skills in English
- Strong communication skill

Personal Qualities:
- Esay-going, open-minded
- Good teamwork spirit
- Quick learner
- Creative thinking
- Passion to business
- Willing to give back

Others as plus:
- Industry experiences is a strong plus
- Work experience in large-scale foreign company
- Work experience in Geographically Distributed Development (GDD) team
- Knowledge on IBM products: WAS, WPS, DB2, Domino, Message Broker, MQ Series, DataPower, Cognos, ClearCase, ClearQuest.
- Be familiar with IBM development tools: WID, RSA, RAD, Buildforge, Rational Function Tester.
- Knowledge on SAP application development, administration.
- Knowledge on Unix or IBM mainframe.
- Globalization development knowledge & experience, Unicode
- Technical writing, patent filing

Qualifications(Education/Major/Certificates)
M.S or above in Computer Science, Electronic Engineering or Technical English
Excellent English writing skills (please specify the details of your English skills in the resume, e.g. the score of CET6, TOEFL, IELTS, or GRE) 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章