一 每个好架构师都是一位出色的程序员(卓越的程序员)
架构师,听起来是如此神秘的一个称号。尤其是在开发领域刚入门不久的菜鸟级程序员眼中,架构师都是高手,都是牛人,都是如此高高在上的存在。
不过,在搞了四、五年编程之后,程序员们往往早已失去了当年对这些“高级”职位的神秘感,甚至会对自己所在项目的架构师抱怨不已,背后里称他们是一群水王。所以有江南白衣曾撰文述说:“国内的架构师到了三十岁以后很多就往理论上跑,而国外的架构师在往上发展的同时保持下面的编程体验,所以国内多水王,而国外则多大师。”
这就是我们今天这篇文章的论题:一个优秀的软件架构师,首先一定是一个出色的程序员。
这句话按照Fred George先生 的话来说,那就是“不编程的架构师的职业生涯是短暂的”。他说这句话的背景主要是针对有些架构师的设计与实现有断层的问题而言的,因为如果架构师不去实践,只是想当然的认为“没问题,这个想法能实现”,那么对于项目的落实而言是个很大的隐患。支付宝架构师冯大辉 也表示过,架构师是一个比较“虚”的岗位,主要的问题都在“落地”的过程中。
而一个架构师确认一个想法究竟能不能落地的最直接的方法,就是自己编写代码,尝试“实现一个系统最难实现的一部分”(Fred George)。看看Fred,他自己就是最好的示范:年纪一大把了,仍然每天都在编写代码。事实上,我们可以列举出一个长长的顶级架构师的列表,你会发现他们没有一个不是顶级的程序员。
我们可以列举出一个长长的顶级架构师的列表,你会发现他们没有一个不是顶级的程序员
不过这在逻辑上或许没有多少说服力,因为似乎这并不能证明一位资深架构师凭自己的经验感觉不能够知道一个想法能不能落实。如果你觉得上面这些只是某些西方老头儿对编程的古怪癖好,那么不妨看看eBay的架构师Randy Shoup先生 是如何总结架构师在项目中的职责的:
1. 产品团队要做一个新产品,架构师开工了。架构师要帮助产品团队把可行性、技术需求以及权衡取舍等因素一一剖析清楚。
2. 技术需求出来了,架构师的主要工作开始了:设计整体的技术实现步骤。Randy在后面补充说“大多曮标,分析产品的定位和产品业务,整合现有的技术领域用最佳的方式来实现产品的概念。
2、产品实现规划能力
对于任何一个互联网产品如何实现是架构师的重要责任之一,需要保证产品功能的现实,产品功能的可持续性,产品的稳定性及产品的可用性等。产品的这些需求都依懒于架构师对产品技术的规划。我们团队在产品的现实规划上有自己明确的目标和具体的可行性实施方案,以满足产品在升级,改版的需要。
3、横向沟通能力
一个产品它会分成多个部门的合作,各部门沟通的有效性直接会影响到产品的质量和产品的进度。聚聚呀产品现在有7个部门的同事协同工作,对于架构师的溝通要求是需要去同各个部门间进行沟通,交流,获得更多的产品信息,业务数据,运营指标,产品需求等各种信息的汇集才能作为产品架构决策的基础数据。
51CTO编辑:要成为一个架构师,是否存在快速成长的捷径?普通程序员如何一步步向架构师的目标靠近?
梁远华:成为架构师严格上来说是没有什么捷径的,架构师从产品的生命周期上来看,他所涉及的层面很广,而且他所需要的知识面也会很广,需要过程更需要时间的学习和磨练。
我们的团队也会有一个培训机制,会挑选出一些比较有发展潜力的开发人员通过引导培训方式让他们走上架构之路。
我们的经验是从以下几个方面着手:
1、 扩大知识面:提升对互联网行业的认知度,对互联网产品的分析,并且通过小团队分享方式对互联网“热门现象”进行案例分析。
2、 专业度训练:提升横向和纵向的技能培训,特别是对专业态度的培训很重要,要求开发人员对自己的做的工作有强烈的责任心。
3、 分析思维训练:提升开发人员对产品功能需求的分析以及对产品业务需求的分析整合能力。
51CTO编辑:假设有三名优秀的程序员,A尤其擅长沟通与团队管理;B的编程功底深厚,且对新技术能快速掌握;C在逻辑思维和抽象能力方面表现优秀。您会重点培养哪位程序员成为架构师?
梁远华:我会选择C在逻辑思维和抽象能力方面表现优秀,架构师需要很强的抽象能力。
51CTO编辑:在一个软件项目中,通常有哪些问题是架构师最难把握的?
梁远华:我感觉有下面两点——
1、 对问题的定位,分析
2、 权衡取舍
以上二点在做聚聚呀产品过程中有深刻的体会,特别是第二点,一个产品会有很多的东西要做,什么是可做的,什么是重要的,什么是将来能做的,每天都做做选择题。