cywhoyi 2009-12-11
51CTO开发频道年终巨献:架构师最怕程序员知道的十件事
架构师个人简历
eBay杰出架构师Randy Shoup
Randy Shoup是eBay市场架构团队的杰出架构师(Distinguished Architect)。他从2004年开始成为eBay搜索基础设施的主要架构师。在eBay之前,他是Tumbleweed Communications的首席架构师,并在甲骨文以及Informatica公司担任数职。他是斯坦福大学的数学与计算机系以及政治科学系的本科毕业生。
以下是此次访谈的具体内容。
51CTO编辑:不同的企业和项目经理对架构师往往定义不完全相同。在您的团队中,对架构师是如何定义的?对于招聘的架构师会有怎样的技能要求?
Randy Shoup:在eBay,一个架构师的任务就是设计一系列的技术方案,这些方案必须满足商业上的要求,同时还要能够维持高标准的功能,性能,可伸缩性,可管理性,安全性,以及可用性。一个架构师与开发团队、产品团队和运维团队通过紧密的合作来实现上述的这些目标。
在产品团队开始酝酿一个新的主意的时候,架构师是产品团队第一个接触的人:架构师会帮助他们把可行性、技术需求以及权衡取舍等因素一一剖析清楚。一个架构师之后的工作可总结为以下几条:
◆设计整体的技术实现步骤
◆与开发团队一起,完成设计与实施的细节
◆与开发团队和运维团队一起,完成部署的过程
◆与运维团队一起,进行部署之后的维护和故障排除
一个架构师设立好技术风向标,并确保整个项目的进展按照这些方向进行。一个架构师不爱下达命令,他往往通过影响力来领导团队。一个架构师考虑“大的”和“长期的”,并在各个因素之间做出权衡。
由于eBay是一个大站,每一个架构师都要为这个站的不同方面负责。有些对垂直功能负责,如买、卖、搜索、付款等功能。有些对水平功能负责,如数据库、事件与消息系统、服务基础设施、展示框架等功能。
我们在招聘架构师时有如下要求:
◆在设计与开发大型系统方面有10年以上做为开发者和技术管理者的经验
◆技术领导能力
◆出色的交流和处理人际关系的技能,尤其是向开发者和非开发者解释高级技术话题的能力
◆出色的分析和解决问题的能力
◆对我们的技术堆栈有相当程度的经验
◆对于商业需求和客户需求有着很强的理解能力,尤其是对权衡取舍方面有着出色的把控能力
51CTO编辑:假设有三名优秀的程序员,A尤其擅长沟通与团队管理;B的编程功底深厚,且对新技术能快速掌握;C在逻辑思维和抽象能力方面表现优秀。您会重点培养哪位程序员成为架构师?
Randy Shoup:一个优秀的架构师需要同时兼有A,B和C的能力。我们希望我们招聘的架构师拥有以上所有这些能力,这也是为什么并非每一个顶级开发者都能够成为一个优秀架构师的原因:-)如果一定要排序,那么我会按照C、B、A的顺序。条理清晰的逻辑思维能力可能是一个架构师最重要的技能了,而我们往往发现拥有这种技能的人就像稀有动物那样难找。不过,这个能力仅仅在和大量的实际开发经验、丰富的理论背景和好的领导能力相结合的时候才能体现出它的价值。
51CTO编辑:对于一个刚刚从程序员转型过来的架构师,通常有哪些问题是他最难把握的?
Randy Shoup:做为一个从菜鸟成长起来的架构师,我还真记得几次挑战:
◆习惯了思考细小的方面:有时候,一个新手架构师很容易在具体的代码编写和实施上花费太多的精力。一个架构师最基本的职能是往广处思考,把系统看做一个完整的个体来思考,以维护并增强可伸缩性和可用性这些系统级的特性为目标。一个架构师不能将实施细节抛之脑后,但她最大的价值在更高的层次。
◆习惯了单独工作:有时候,一个新手架构师会觉得她的工作就是独自开发出一个项目的架构和设计,并将这一整个成品交给一个团队来完成实施的部分。不过据我所知,大多数成功的架构师都喜欢与其他团队成员一同完成架构和设计这一块的工作。这不仅对架构本身有利,而且会令实施过程进展的更加平滑。
附录:与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?