獨家專訪Randy Shoup:架構(gòu)師要學(xué)會權(quán)衡取舍
原創(chuàng)【51CTO獨家特稿】在軟件行業(yè)中,架構(gòu)師往往是從那些出色的程序員中蛻變而成。然而,出色的程序員都能成功的晉級為出色的架構(gòu)師么?這是51CTO開發(fā)頻道年終活動《架構(gòu)師最怕程序員知道的十件事》的主旨。雖然并非每一個程序員都希望能成為一個架構(gòu)師,但潛意識里他們是尊敬架構(gòu)師的——而一個優(yōu)秀的架構(gòu)師往往在舉手投足中顯示出一個編程大師的風(fēng)范。
51CTO開發(fā)頻道年終巨獻(xiàn):架構(gòu)師最怕程序員知道的十件事
為了深入的了解這些問題的答案,51CTO開發(fā)頻道展開了對國內(nèi)外幾個著名架構(gòu)師的一系列郵件訪談。本次訪談的對象是eBay的杰出架構(gòu)師Randy Shoup先生。
架構(gòu)師個人簡歷
eBay杰出架構(gòu)師Randy Shoup
Randy Shoup是eBay市場架構(gòu)團隊的杰出架構(gòu)師(Distinguished Architect)。他從2004年開始成為eBay搜索基礎(chǔ)設(shè)施的主要架構(gòu)師。在eBay之前,他是Tumbleweed Communications的***架構(gòu)師,并在甲骨文以及Informatica公司擔(dān)任數(shù)職。他是斯坦福大學(xué)的數(shù)學(xué)與計算機系以及政治科學(xué)系的本科畢業(yè)生。
以下是此次訪談的具體內(nèi)容。
51CTO編輯:不同的企業(yè)和項目經(jīng)理對架構(gòu)師往往定義不完全相同。在您的團隊中,對架構(gòu)師是如何定義的?對于招聘的架構(gòu)師會有怎樣的技能要求?
Randy Shoup:在eBay,一個架構(gòu)師的任務(wù)就是設(shè)計一系列的技術(shù)方案,這些方案必須滿足商業(yè)上的要求,同時還要能夠維持高標(biāo)準(zhǔn)的功能,性能,可伸縮性,可管理性,安全性,以及可用性。一個架構(gòu)師與開發(fā)團隊、產(chǎn)品團隊和運維團隊通過緊密的合作來實現(xiàn)上述的這些目標(biāo)。
在產(chǎn)品團隊開始醞釀一個新的主意的時候,架構(gòu)師是產(chǎn)品團隊***個接觸的人:架構(gòu)師會幫助他們把可行性、技術(shù)需求以及權(quán)衡取舍等因素一一剖析清楚。一個架構(gòu)師之后的工作可總結(jié)為以下幾條:
◆設(shè)計整體的技術(shù)實現(xiàn)步驟
◆與開發(fā)團隊一起,完成設(shè)計與實施的細(xì)節(jié)
◆與開發(fā)團隊和運維團隊一起,完成部署的過程
◆與運維團隊一起,進(jìn)行部署之后的維護和故障排除
一個架構(gòu)師設(shè)立好技術(shù)風(fēng)向標(biāo),并確保整個項目的進(jìn)展按照這些方向進(jìn)行。一個架構(gòu)師不愛下達(dá)命令,他往往通過影響力來領(lǐng)導(dǎo)團隊。一個架構(gòu)師考慮“大的”和“長期的”,并在各個因素之間做出權(quán)衡。
由于eBay是一個大站,每一個架構(gòu)師都要為這個站的不同方面負(fù)責(zé)。有些對垂直功能負(fù)責(zé),如買、賣、搜索、付款等功能。有些對水平功能負(fù)責(zé),如數(shù)據(jù)庫、事件與消息系統(tǒng)、服務(wù)基礎(chǔ)設(shè)施、展示框架等功能。
我們在招聘架構(gòu)師時有如下要求:
◆在設(shè)計與開發(fā)大型系統(tǒng)方面有10年以上做為開發(fā)者和技術(shù)管理者的經(jīng)驗
◆技術(shù)領(lǐng)導(dǎo)能力
◆出色的交流和處理人際關(guān)系的技能,尤其是向開發(fā)者和非開發(fā)者解釋高級技術(shù)話題的能力
◆出色的分析和解決問題的能力
◆對我們的技術(shù)堆棧有相當(dāng)程度的經(jīng)驗
◆對于商業(yè)需求和客戶需求有著很強的理解能力,尤其是對權(quán)衡取舍方面有著出色的把控能力
51CTO編輯:假設(shè)有三名優(yōu)秀的程序員,A尤其擅長溝通與團隊管理;B的編程功底深厚,且對新技術(shù)能快速掌握;C在邏輯思維和抽象能力方面表現(xiàn)優(yōu)秀。您會重點培養(yǎng)哪位程序員成為架構(gòu)師?
#T#Randy Shoup:一個優(yōu)秀的架構(gòu)師需要同時兼有A,B和C的能力。我們希望我們招聘的架構(gòu)師擁有以上所有這些能力,這也是為什么并非每一個***開發(fā)者都能夠成為一個優(yōu)秀架構(gòu)師的原因:-)
如果一定要排序,那么我會按照C、B、A的順序。條理清晰的邏輯思維能力可能是一個架構(gòu)師最重要的技能了,而我們往往發(fā)現(xiàn)擁有這種技能的人就像稀有動物那樣難找。不過,這個能力僅僅在和大量的實際開發(fā)經(jīng)驗、豐富的理論背景和好的領(lǐng)導(dǎo)能力相結(jié)合的時候才能體現(xiàn)出它的價值。
51CTO編輯:對于一個剛剛從程序員轉(zhuǎn)型過來的架構(gòu)師,通常有哪些問題是他最難把握的?
Randy Shoup:做為一個從菜鳥成長起來的架構(gòu)師,我還真記得幾次挑戰(zhàn):
◆習(xí)慣了思考細(xì)小的方面:有時候,一個新手架構(gòu)師很容易在具體的代碼編寫和實施上花費太多的精力。一個架構(gòu)師最基本的職能是往廣處思考,把系統(tǒng)看做一個完整的個體來思考,以維護并增強可伸縮性和可用性這些系統(tǒng)級的特性為目標(biāo)。一個架構(gòu)師不能將實施細(xì)節(jié)拋之腦后,但她***的價值在更高的層次。
◆習(xí)慣了單獨工作:有時候,一個新手架構(gòu)師會覺得她的工作就是獨自開發(fā)出一個項目的架構(gòu)和設(shè)計,并將這一整個成品交給一個團隊來完成實施的部分。不過據(jù)我所知,大多數(shù)成功的架構(gòu)師都喜歡與其他團隊成員一同完成架構(gòu)和設(shè)計這一塊的工作。這不僅對架構(gòu)本身有利,而且會令實施過程進(jìn)展的更加平滑。
#p#
附錄:與Randy Shoup郵件答復(fù)內(nèi)容的英文原文
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.