胡喜:我是如何从菜鸟做到架构师的

  作为一个不是科班出身、没有正规学习过计算机知识的架构师,想在这里把我这几年学习的经历体验和大家分享一下,谈谈自己对架构师成长之路的一些感想。

  奠定扎实的理论基础

  千里之行,始于足下!技术不是一蹴而就的事情,而是长时间积累的成果。扎实的基本功是做好所有事情的开始。到现在我还记得对我影响非常大的几本书:

  ■《C++编程思想》

  ■《深入浅出MFC》

  ■《Windows 核心编程》

  ■《数据结构》《编译原理》

  我学习计算机正是按照这几本书的顺序,之前学习C的经历就不必说了,而转折点正是《C++ 编程思想》——它让我感觉到程序和语言竟然这么有意思,至今仍对虚表的概念记忆犹新,尤其指针的用法,对我以后学习Java语言有很大的帮助,对多态和语言的特性也有了很高的认识。

  《深入浅出MFC》这本书,记忆最深刻的还是其中强大无比的宏定义和对象层次设计。然而学习MFC的过程中,我遇到的最大问题就是:很多东西都是黑盒的,这引发了我刨根问底的欲望。所以后来我学习了《Windows核心编程》,这本书给我的最大收获,就是了解了很多操作系统底层的知识,操作系统是如何运行的。不过遗憾的是,如果当时从Linux 或者Unix 开始学习,应该会了解得更系统一些。

  之后我深入学习了《数据结构》和《编译原理》。这是我经过了很多实践以后,又回过头来重新学习。拿《编译原理》来说,以前对这门学科的了解非常有限,后来为了实现一个东西,要用到脚本语言,找来找去找到了Velocity(后来想想使用Groovy 应该更好一点),用了以后觉得很好。以前修改程序逻辑,是需要重新编译或者修改配置重新发布才能OK,而现在只需要编辑然后保存一下,就能得到自己想要的结果。这令我着迷,于是想知道它是如何实现的,翻看源代码才晓得原来还有 JavaCC这个东西。就这样,我从解释语言入手,逐渐开始了疯狂学习编译原理的过程,越发觉得编程语言非常有意思。

  回头想想以前和现在学习的语言,感觉程序语言就是在不断抽象:从汇编、C、C++, 再到Java、C#,再到更动态一点的语言如Perl、Python、Ruby 等等。不管它再怎么变、再怎么抽象,还是编译原理应用的产物。

  讲了这么多,就是想强调理论基础知识的重要性!虽然我们现在使用的框架如此之多,但是如果你有了扎实的基础理论知识,这些东西就跟玩具一样。基础就是一个无招胜有招的杀手工具。

  培养完善的抽象思维

  抽象的能力也是作为一名好的程序员必须具备的能力。我们在考虑问题的时候可能会遇到错综复杂的场景,从这些迷雾中找到一条明路是我们做好程序员的关键。这些年来学习了很多框架,回过头来想想自己都有点后怕,这也令很多初学者望而生畏。但认真想想,真的有那么可怕吗?

  让我们从语言层面逐渐剖析这个问题,应该很容易做出解释。程序语言就是我们在某种场景下交流的工具,汇编是机器语言;C和C++ 是编译型语言,它们是一种针对汇编的高级抽象;而Java 和 C# 就是更高级的抽象了,甚至于抽象了一层虚拟机出来(这个产生的影响就是,之后的很多高级语言评判标准,都是“是否支持虚拟机”),再到后面的许多动态语言,那就是更抽象了。说到这里你会问到,讲这么多语言类的东西和学习框架有什么联系?让我慢慢道来。

  我们使用一种语言就是用它的语法进行编程,而学习一个框架实际也是为了用这个框架所提供的语言来写程序:Struts——我们使用很多配置还有 Action 和Form ;Spring——我们使用Bean 模型,这是它的最基本模型(现在 Spring 已经庞大得让很多人无法学习了);iBatis——我是用它的XML-SQL 模型;JBPM——使用它所谓的GOP模型(面向图元的编程);Web flow——是在使用它的页面流模型。这样的例子我可以举出很多(这也是DSL现在如此流行的原因)。

  很多人会说:学习这么多我已经晕掉了!不妨想想,为什么会有这么多东西存在? Struts 是为了解决Web编程的困扰;iBatis、Hibernate 是为了解决在数据库编程时的麻烦;原有的Web页面编程都是独立的具体单元,Web flow能够让这些页面形成流的形式,让开发更顺其自然;从JBPM的GOP可以看出,JBoss 的开发人员对抽象的理解度很深。我举这么多例子,实际是让大家不要害怕现有的这些框架,有了扎实的基础,抽象的概念是很容易理解的!缺乏抽象的能力,你就不能更快更好地解决问题。

  实际抽象能力衍生出来的一点就是,需要我们对已学过的知识定期进行梳理。这样能让你巩固已有的知识,为以后的学习做好准备。知识就好比一棵生物进化树,最终目标都是一样的,关键是看如何选择进化的路线,让自己的知识结构能够有机的结合在一起。做到学以致用。过一段时间就梳理一下,你会有更多的发现。

  扩充现有的知识层面

  在巩固原有知识结构的前提下,我们更需要扩充现有的知识面。井底之蛙,看到的永远是井口大的那片天,只有跳出来,才能看见无限美好的蓝天白云。我曾经也常常局限在自己已熟悉的那块领域沾沾自喜,但是走出来以后才发现,自己原本是多么肤浅!学习的知识越多,对新事物的洞察力将会越准确!这样有助于你巩固已有的知识,系统地学习新的知识。

  那我们是否需要无限平行式的学习知识呢?我的答案是“No”。人的知识面是有限的,我们需要一个T型的知识结构。你的知识面要广,但是对于某些技术点要专,这才是做好一个架构师的关键。有时 “专”可以让你对很多“广”的知识产生触类旁通的感觉。

  实践也是非常重要的一环,不要有畏难心理,觉得这个东西太难,我无法完成!有时候事情的结果可能是糟糕的,但是过程是非常宝贵的,其中可以学习到很多东西,同时也可以让自己避免轻浮的心理。

  还要着重培养自己良好的沟通与解说能力。架构师面对客户群具有多样性,有技术工程师、业务人员、公司管理层,甚至直接面对客户等。要把一个高度抽象又复杂的系统说清楚,这对于架构师来说也是一种挑战。所以架构师必须掌握技巧,应用多种表达方式来阐述架构与产品设计、与具体业务、与公司战略之间的关系等。培养良好的沟通能力,多和周围的人进行沟通,你能够学到更多的知识!

  “平衡”是架构设计的艺术,我们设计一个东西,就是在平衡各方面的利益。平衡有可能是时间上的,比如需要支持多少年的系统可用性;平衡有可能是纵向的,比如要支持系统的向下兼容性,要保证程序员编程模型上的简单性等等。这种平衡就是因人因时因地而异了。平衡的把握很可能就是评判一个架构师架构水平的标准!架构师在设计的时候应该权衡维度、整体性和扩展性,考虑问题时不要局限于自己的一亩三分地。多种点田,会长出很多庄稼的!

  拥有一个扎实的基础,不断扩充自己的知识面、完善知识体系,在对现有知识抽象的基础上,不断去沟通实践,你将获得更强的架构平衡能力。最后我还要说,业务知识非常重要,这个是你实践的关键!

  作者简介:

  胡喜,就职于阿里巴巴集团旗下支付宝(中国)网络技术有限公司。担任技术架构师,负责支付宝技术架构规划,解决方案等相关工作。平常喜欢研究 OSGi、SOA、动态语言等技术。

时间: 2024-08-04 06:53:17

胡喜:我是如何从菜鸟做到架构师的的相关文章

胡喜:从菜鸟到架构师的蜕变

架构师是软件行业中一种新兴职业,工作职责是在一个软件项目开发过程中,将客户的需求转换为规范的开发计划及文本,并制定这个项目的总体架构,指导整个开发团队完成这个计划.架构师的主要任务不是从事具体的软件程序的编写,而是从事更高层次的开发构架工作.他必须对开发技术非常了解,并且需要有良好的组织管理能力.可以这样说,一个架构师工作的好坏决定了整个软件开发项目的成败. 架构师实际上就是软件的总体设计师.首席设计师就是总设计师,打个通俗的比方:邓小平是中国改革开放的总设计师,我们用现在的说法可以讲,邓小平是

一位五年工作经验架构师的感悟

写给五年陈的自己 写周报,写的兴起,编写周报,还边用虎跑泉,泡铁观音喝.自己写周报的习惯还是要改一改,自己是个性情中人,写个周报也透露了太多情感在周报里.有很多人肯定觉得不好,也许以后我也会改,改的越来越干练,掏心的话少说. 兴奋了,喝了茶,睡不着了.灵感闪动,本周是个值得纪念的日子,写个文章纪念下过去. 回想这一路路走来,还是很感恩收获的一切,我渐渐从一名菜鸟,成长为一位架构师,记得毕业的时候我给自己定的目标是:五年要成为一方面的专家.虽然,实际的成长比这个慢了两年,但是我还是庆幸自己当初果断

架构师的技术领导力之路:看环信一乐聊些什么

小欧有话说: 全球技术领导力峰会(GTLC)30日[Tim会客厅]环节,迎来了EGO北京分会第2小组的3名成员--环信首席架构师梁宇鹏.爱因互动联合创始人兼CTO洪强宁.当当架构部总监史海峰,一起聊聊他们的技术领导力之路. 主持人(左一):杨卫华(Tim Yang),新浪微博研发副总经理 从技术人到领导者 Tim:大家先做一个简单的自我介绍吧! 梁宇鹏:在技术圈大家都叫我一乐,我来自环信,这是一家做即时通讯云服务和全媒体智能客服的公司,我是环信的首席架构师,同时也兼任IM事业部技术总监,负责即时

14年的蜕变:从菜鸟到卡厂运维总架构师

 前言   大家好,我是任明. 很高兴和大家做这次在线的分享交流.今天我要讲的题目包括以下四个部分: 运维历程 运维体系 运维思想 从运维到放弃 希望能对运维的小伙伴有所启发和收获.     先放一张图说明几个数字: 交易量1亿/日 核心系统10年无故障 核心系统五个9 异地切换100秒 10000个节点管理 3000交易TPS   运维历程   阶段1:菜鸟呱呱叫(before 2006) 阶段特点: 用啥学啥  需求:协议分析  图形展现 组网 学习:使用fluke协议分析  tcp经典三卷

蚂蚁金服副总裁胡喜:金融科技进入2.0时代,拼的是基础技术升级

在2017年云栖大会上,ATEC金融科技开放峰会在杭州云栖小镇召开.在会上的演讲中,蚂蚁金服副总裁.首席技术架构师胡喜表示,与金融科技1.0阶段提供更为高效的便捷的普惠能力相比,金融科技2.0偏向于要把11日蚂蚁金服CTO程立所强调的BASIC进行进一步升级,要为消费者和金融机构提供更为便捷的服务. "1.0就是汽车的发动机,可以通过发动机去组装任何一辆汽车,"胡喜这样来比喻道蚂蚁金服在金融科技中的发展阶段,"但是2.0是汽车的流水线,不仅提供发动机,还提供定制汽车能力,甚至

【第二届PHP全球开发者大会】新浪微博移动应用服务高级架构师胡波:微博升级PHP7经验分享

5月14-15日的第二届2016PHP全球开发者大会在北京国际会议中心举行.新浪微博移动应用服务高级架构师胡波带来的分享是<微博升级PHP7经验分享>,他主要介绍了新浪微博在升级PH7时的部署系统.配置优化等过程中的实践经验.   演讲内容结构:    PHP7 新特性    为什么升级PHP7    我们升级的后盾    SLA分析系统    依赖梳理    升级代码    升级系统    灰度部署    配置.优化    成果 关键内容: 为本次大会合作社区,共享报道. PPT下载地址: 

我是一个php菜鸟,求帮助!

问题描述 我是一个php菜鸟,求帮助! 我做php很久了,但是我自己认为我还是菜鸟,没有大神那些那么强.每天就是做些重复的事,比如基于二次开发什么的,,,请问大师怎么可以提高啊!!相关链接

作为首席架构师,我是如何选择并落地架构方案的?

本文系转载.转载自:http://mt.sohu.com/20160516/n449639733.shtml   如何针对当前需求,选择合适的应用架构,如何面向未来,保证架构平滑过渡,这个是软件开发者,特别是架构师,都需要深入思考的问题. 本文首发于InfoQ垂直号「聊聊架构」,ID:archtime 无架构,不系统,架构是大型系统的关键.从形上看,架构是系统的骨架,支撑和链接各个部分:从神上看,架构是系统的灵魂,深刻体现业务本质. 架构可细分为业务架构.应用架构.技术架构,业务架构是战略,应用

对于有志于成为架构师的开发者,支付宝架构团队有何建议?

技术不是一蹴而就的事情,而是长时间积累的成果.此外,扎实的基本功是做好所有事情的开始!抽象的能力也是作为一名好的程序员必须具备的,我们在考虑问题的时候可能会遇到错综复杂的场景,从这些迷雾中找到一条明路是我们做好程序员的关键.实际抽象能力衍生出来的一点就是需要我们对已学过的知识定期的进行梳理,这样能让你稳固已有的知识,为以后学习的更多的知识做好准备. 实践也是非常重要的一个环节,不要有畏难心里,觉得这个东西非常的难,我无法完成!有时候你去完成一件事情,事情的结果可能会是糟糕的,但是解决这件事情的过