优秀Architect之路 (ZDNET CHINA 特稿 2002-03-19 ) 在我们所处的这个时代能够成为技术问题专家是一件再好不过的事情了。或许你会觉得能够进入企业的管理层才是非常了不起的事情。你可能品尝过个中滋味,而且也体会过进入管理层的种种好处,但事实上,从事管理工作的好处被世人过分的夸大了。在一般情况下,如果经济出现了衰退或者仅仅是表现出不景气的时候,企业的管理人员最有可能成为经济的受害者而体会失业之苦。现在,许多高级技术职位的薪水待遇是同那些高级管理职位的薪水和待遇不相上下的。在这些高级技术职位中,具有代表性的有:公司的首席技术官,软件工程师,或者高级程序开发设计师等等。 在这些职位上的人们通常都对决定信息系统的发展方向负有责任。他们所做的决定必须能够让公司在激烈的市场竞争中处于优势的地位。"建筑师"这个词就是用来形容这类人的。这么称呼他们是非常形象的,因为他们所做的,就是在构筑一个企业"大厦"的基础,企业要依靠这个"基础"才能够不断的发展下去。 上边所描述的只是一名"建筑师"的一个方面,如果想要成为一名优秀的"建筑师"就必须把众多的能力综合于一身。我曾经见过许多所谓的"建筑师",我称他们为所谓的建筑师是因为他们所做的,只是一名资深的程序开发设计人员应该做的罢了。所以,在我看来,把他们称为资深程序员也许才更为准确。在本篇文章里,我将会向大家具体的描述成为一名优秀的建筑师所需要的各方面条件。 要对现在及过去的技术有充分了解 想要做到优秀,建筑师们不但需要掌握最新最前沿的技术,而且还要对以前的那些技术也有一定程度的认识。这对于那些最近才进入专业软件开发领域的程序设计人员来说是有非常大的难度的。举个例子来说,刚从大学计算机专业毕业的学生对于计算机的三层体系结构可能拥有相当深厚的了解,但是他们可能并不理解这种三层结构在一台客户服务器上具有的种种优点。他们只知道三层结构包括了表示层(Presentation),商业规则层(Business Rules)以及数据层(Data),这是根本不够的。一个建筑师必须真正理解这个技术,理解它到底有何种优点,这样才能在一个特定的结构里充分的发挥出它的这些与生俱来的优点。 要准备好随时面对管理和分析的工作 一个建筑师必须对技术方面的事务了如指掌,并且还应该依据自己所掌握的为公司发展新产品定出正确的方向。许多的公司直到现在才开始明白这样的一个角色对公司来说有多么的重要。把全部有关技术的决定权交给那些资格最深的人在现在来说已经不是那么令人接受的做法了。为数众多的公司都曾在此问题上吃过大亏,损失过数以百万计的美元。这些公司在为客户提出解决方案以及具体的体系结构方面都失败了。现在,这些公司正在为把不同的系统综合于他们自己的组织结构之中花费着巨额的金钱。 一些必须要搞清楚的关键词 下面是一些与这个行业有关系的重要名词的列表,这些专业名词都是一个建筑师必须稔熟于心的,并且要知道什么时候会使用到与这些词有关的内容: l 数据库的独立性(Database independence)l 平台的独立性(Platform independence)l 可升级性(Scalability)l 性能表现(Performance)l 微软公司的交易服务器(Microsoft Transaction Server)l 企业版的JavaBeans软件l 可扩展标记语言(就是指XML语言)l 负载平衡(Load balancing)l 动态服务页面(ASP编程语言)l Java服务页面(JSP编程语言)l Servletsl 活动错误信息(Active/active failover)l 冗余(Redundancy)l 设计方案(Design patterns)l 无线访问协议(WAP)l 应用程序服务提供者(Application Service Provider) 作为一名建筑师,必须对上边的这些名词以及它们所包含的意思,技术等等各个方面都要做到滚瓜烂熟。你必须对处于三层结构体系中(3-tier architecture)不同层面上的不同技术都要充分的予以理解。举个例子来说,你就必须得知道HTML所代表的是什么,HTML驻留在什么位置,以及HTML与XHTML之间到底有着什么样的联系。而且,更为重要的是,你必须弄清楚在你的组织中向着XHTML的发展是否有着充足的理由。上面的这些问题如果你还没有弄明白的话,那么就让我来告诉你:HTML是一种处于表达层面(presentation tier)上的表达技术。而XHTML则是一种遵循了XML标准的继承了HTML内涵的另一种新的技术形式。如果在你的公司中原来并不是使用HTML页面的话,那么,在你的公司中使用XHTML也是不必要的。而且,这样做的花费也将会是巨大的,尤其是没有一个合理的商业理由来让你完成这种转变的时候,这么做更是没有必要。 建筑师必须清楚的了解Jscript, JavaScript, 以及VBScript这三者之间的关系,并且对于Servlets, JSP, 以及ASP这三种编程语言的不同点也要了解的相当透彻。同样,熟练掌握商业逻辑层面(business logic tier)上的各种技术也是非常重要的。举个例子来说,你是否真的清楚到底在什么时候才会需要使用到消息序列(messaging queue)呢?对于消息服务器来说,你拥有哪些选择呢? 要坚持不断的学习,才能跟得上时代的脚步 一个人要想学会所有的东西那是根本不可能的,但是怎样才能保证你所学习的那些东西对于你的工作来说是必要的呢?在相当长的一段时间内,绝大多数的程序设计人员都是使用一种或者很有限的几种技术来完成他们手头的工作的,所以,他们并没有广泛的接触到各种不同的技术。对于上边的这种情况,我的建议是,一个想要成为"建筑师"的程序设计人员,在他刚开始接触程序设计工作的最初几年里,至少每六个月就应该去学习一种别的技术,改换一种工作方式,以求获得尽可能广泛的各种不同的技术经验来丰富自己在这方面的阅历。如果你不能像上边说的那样自由的掌握不同的技术,那么,你就应该充分的利用晚上以及周末的时间来让自己学习各种新的技能。在你所从事的这个领域,事情总是在不断的变化。想要称职的完成一个"建筑师"的工作,就必须要跟得上这种不断变化更新的步伐,并且还必须会利用这种不断变化的形势,让公司从中获益。 成为优秀"建筑师"所应该具有的能力不是在课堂中或者书本中就能学得到的。这些能力都必须通过你自己的努力才能获得。你必须有明确的想要成为优秀建筑师的愿望,有了这个愿望,你就得为提高自己的能力,丰富自己的经验,来安排自己应该学习些什么,单纯依靠别人是没有任何用处的。如果想获得成为优秀建筑师的一些介绍性的信息,就可以考虑参加微软公司提供的第1298号课程。这个课程的名称是:Mastering Distributed Applications Design Using Microsoft Visual Studio(使用微软公司的Visual Studio来掌握设计分布式应用程序的能力)。这是一种为期三天的课程,该课程为学习者提供了有关各种不同技术的信息,这些信息主要都是集中于设计以及开发分布式应用软件方面的。微软公司提供的这种课程对于那些工作于JAVA环境的程序设计人员也是同样适用的,这是由微软公司在开设这门课程时的指导思想决定的。MTS类似于EJB服务器,而且微软公司的Microsoft Message Queuing与Java Message Service相比,也具有了相同功能。 关于此课程,我要提醒大家的是:一定要证实你的讲师是拥有从事这方面的工作的实际经验的。有许多的讲师只是从书本上获得了这方面的知识,如果是这样的话,你同样也能够从书本上获取相同的信息。你所需要的,是经过实践检验的经验。 选择一种能够持续发展的技术也能够促进你事业 在软件开发领域中,并没有一种固定的模式来促进你事业不断发展。所以,想要成为一名优秀的建筑师主要取决于你是否找到了适合你自己的发展之路。就我的那些同事们来说,成功的秘诀主要是由于他们选择支持了一种能够不断发展的技术。这种技术必须能在某种程度上对以前的编程方式做出改变(在由Geoffrey A. Moore, Paul Johnson, 与Tom Kippola合著的名为猩猩的比赛(The Gorilla Game)的书中,有关于能够持续不断发展技术的概念的详细描述)。现在,微软公司就正在设法把它的网络服务也变成这样一种可以持续发展的技术。我就曾经见过我以前的一个同事是如何从使用C语言以及C++的多平台环境下编制程序转向使用JAVA技术来编制程序的。我的这个同事的这个决定是使他成为一个拥有超过五十名软件工程师的公司的首席建筑师的直接原因。你也许也希望能够在你所处的公司中完成一次这样的飞跃吧。 结束语 本文的主要讨论的就是,你必须要不断的学习学习再学习。在信息技术产业中生存发展,需要你坚持不懈的升级各种有关的技能。而要成为一名优秀的建筑师,则要求你必须对过去,现在的各种技术都有相当深厚的了解,并且还要在需要使用它们的时候就能够自如的使用它们。时间是一种最容易流逝的东西,你可能经常会这样对自己说:"我没有足够的时间来学习了,怎么才能不落伍呀!"事实上,想要不被淘汰,你就必须挤出一切的时间来完善自己。这样才能在这个领域中不断的发展下去。