獨家專訪Randy Shoup:架構師要學會權衡取舍
原創【51CTO獨家特稿】在軟件行業中,架構師往往是從那些出色的程序員中蛻變而成。然而,出色的程序員都能成功的晉級為出色的架構師么?這是51CTO開發頻道年終活動《架構師最怕程序員知道的十件事》的主旨。雖然并非每一個程序員都希望能成為一個架構師,但潛意識里他們是尊敬架構師的——而一個優秀的架構師往往在舉手投足中顯示出一個編程大師的風范。
為了深入的了解這些問題的答案,51CTO開發頻道展開了對國內外幾個著名架構師的一系列郵件訪談。本次訪談的對象是eBay的杰出架構師Randy Shoup先生。
架構師個人簡歷
eBay杰出架構師Randy Shoup
Randy Shoup是eBay市場架構團隊的杰出架構師(Distinguished Architect)。他從2004年開始成為eBay搜索基礎設施的主要架構師。在eBay之前,他是Tumbleweed Communications的***架構師,并在甲骨文以及Informatica公司擔任數職。他是斯坦福大學的數學與計算機系以及政治科學系的本科畢業生。
以下是此次訪談的具體內容。
51CTO編輯:不同的企業和項目經理對架構師往往定義不完全相同。在您的團隊中,對架構師是如何定義的?對于招聘的架構師會有怎樣的技能要求?
Randy Shoup:在eBay,一個架構師的任務就是設計一系列的技術方案,這些方案必須滿足商業上的要求,同時還要能夠維持高標準的功能,性能,可伸縮性,可管理性,安全性,以及可用性。一個架構師與開發團隊、產品團隊和運維團隊通過緊密的合作來實現上述的這些目標。
在產品團隊開始醞釀一個新的主意的時候,架構師是產品團隊***個接觸的人:架構師會幫助他們把可行性、技術需求以及權衡取舍等因素一一剖析清楚。一個架構師之后的工作可總結為以下幾條:
◆設計整體的技術實現步驟
◆與開發團隊一起,完成設計與實施的細節
◆與開發團隊和運維團隊一起,完成部署的過程
◆與運維團隊一起,進行部署之后的維護和故障排除
一個架構師設立好技術風向標,并確保整個項目的進展按照這些方向進行。一個架構師不愛下達命令,他往往通過影響力來領導團隊。一個架構師考慮“大的”和“長期的”,并在各個因素之間做出權衡。
由于eBay是一個大站,每一個架構師都要為這個站的不同方面負責。有些對垂直功能負責,如買、賣、搜索、付款等功能。有些對水平功能負責,如數據庫、事件與消息系統、服務基礎設施、展示框架等功能。
我們在招聘架構師時有如下要求:
◆在設計與開發大型系統方面有10年以上做為開發者和技術管理者的經驗
◆技術領導能力
◆出色的交流和處理人際關系的技能,尤其是向開發者和非開發者解釋高級技術話題的能力
◆出色的分析和解決問題的能力
◆對我們的技術堆棧有相當程度的經驗
◆對于商業需求和客戶需求有著很強的理解能力,尤其是對權衡取舍方面有著出色的把控能力
51CTO編輯:假設有三名優秀的程序員,A尤其擅長溝通與團隊管理;B的編程功底深厚,且對新技術能快速掌握;C在邏輯思維和抽象能力方面表現優秀。您會重點培養哪位程序員成為架構師?
#T#Randy Shoup:一個優秀的架構師需要同時兼有A,B和C的能力。我們希望我們招聘的架構師擁有以上所有這些能力,這也是為什么并非每一個***開發者都能夠成為一個優秀架構師的原因:-)
如果一定要排序,那么我會按照C、B、A的順序。條理清晰的邏輯思維能力可能是一個架構師最重要的技能了,而我們往往發現擁有這種技能的人就像稀有動物那樣難找。不過,這個能力僅僅在和大量的實際開發經驗、豐富的理論背景和好的領導能力相結合的時候才能體現出它的價值。
51CTO編輯:對于一個剛剛從程序員轉型過來的架構師,通常有哪些問題是他最難把握的?
Randy Shoup:做為一個從菜鳥成長起來的架構師,我還真記得幾次挑戰:
◆習慣了思考細小的方面:有時候,一個新手架構師很容易在具體的代碼編寫和實施上花費太多的精力。一個架構師最基本的職能是往廣處思考,把系統看做一個完整的個體來思考,以維護并增強可伸縮性和可用性這些系統級的特性為目標。一個架構師不能將實施細節拋之腦后,但她***的價值在更高的層次。
◆習慣了單獨工作:有時候,一個新手架構師會覺得她的工作就是獨自開發出一個項目的架構和設計,并將這一整個成品交給一個團隊來完成實施的部分。不過據我所知,大多數成功的架構師都喜歡與其他團隊成員一同完成架構和設計這一塊的工作。這不僅對架構本身有利,而且會令實施過程進展的更加平滑。
#p#
附錄:與Randy Shoup郵件答復內容的英文原文
1. How to define Architect
Usually, different project managers in different teams have somewhat different definitions for the term Architect. In your team, what does an architect do, and what's your recruiting criteria for an architect?
[rshoup] At eBay, an architect is responsible for designing technical approaches which both meet business goals and maintain high standards of functionality, performance, scalability, manageability, security, and availability. An architect works closely with the development team, the product team, and the operations team to achieve these goals. An architect is the first contact for the product team when they propose a new idea, to help them think through feasibility, technical requirements, and tradeoffs. An architect designs the overall technical approach, works with the development team on detailed design and implementation, works with the development and operations teams on deployment, and works with the operations team on post-deployment maintenance and troubleshooting. An architect sets technical direction, and makes sure it is followed all the way through. An architect leads by influence, rather than by command. An architect "thinks big", "thinks long-term", and makes trade-offs.
Since eBay is a large site, individual architects are responsible for different areas of the site. Some are responsible for vertical functions: selling, buying, search, billing, etc. Some are responsible for horizontal infrastructures: databases, event and messaging systems, service infrastructure, presentation frameworks, etc.
We look for architects who meet the following criteria:
* 10+ years of experience in design and development of large-scale systems, both as developer and technical lead
* Proven technical leadership abilities
* Excellent communication and relationship skills, particularly the ability to articulate advanced technical topics to developers and non-developers
* Excellent analysis and problem-solving skills
* Extensive experience with our technical stack
* Strong appreciation for business priorities and customer needs, particularly the ability to make effective trade-offs
2. Choosing the potential architect
Suppose you have 3 good programmers in your team. Programmer A tops in communication skills and team management. Programmer B tops in coding practices and theories, as well as coping with new technical skills. Programmer C tops in logical thinking and explaining abstract concepts. If you'd like one architect to come out from the three, which one would you prefer?
[rshoup] A good architect needs all the skills from A, B, and C. We look for architects that have all of those skills, which is why not every top-notch developer will make a good architect :-). If I had to prioritize among those skills, I would order them C, B, A. Clear and logical thinking is perhaps the most important skill for an architect, and it can be surprisingly rare to find. But it is only valuable in combination with extensive real-world development experience, excellent theoretical background, and good leadership skills.
3. From an experienced architect's point of view, what do you think are the main obstacles faced by those novice architects who just transformed from a programmer's role?
[rshoup] I can remember several challenges as a former novice architect: * Temptation to think too small: Sometimes, there is a tendency for a new architect to concentrate too heavily on detailed coding and implementation issues. The architect's primary role is to think broadly about the system as a whole, to maintain and improve systemic characteristics like scalability and availability. The architect cannot forget about the implementation details, but her greatest value is at the higher level.
* Temptation to work alone: Sometimes, a new architect may feel her role is to develop architectures and designs alone, and then hand them down fully-formed to a team for implementation. Most successful architects I know prefer to work collaboratively with other team members on architecture and design. This improves both the architecture itself and makes the implementation go more smoothly.


















