架构人生:我技术生涯中的那些第一次
我从事软件开发这个工作已经20多年了,技术生涯中也经历过很多的第一次,回首往昔,每一个第一次我都记忆犹新、历历在目。这些第一次奠定了我的职业基础,也奠定了我的人生之路。
写第一行职业代码
我大学的专业是工业自动化,第一份工作是到一家国企做仪表工程师,具体就是维修各种化学分析仪器仪表。这些仪表的各种气路经常出故障,这些气路管道如果漏气,就会影响化学成分的分析精度,所以,我的主要工作就是找这些气路管道的泄漏:每天拿肥皂水涂在很细小的管道上,观察是不是有气泡渗出。
这份工作做了两年,一想到这样涂一辈子的肥皂水,我就开始有点崩溃了。以前在大学的时候,我喜欢写程序,经常用 C 语言写各种小游戏给自己玩,所以我就想,能不能找份程序员的工作呢?然后我就跑到人才市场,也没带简历,其实带了也没用,总不能写自己涂了两年肥皂水吧。
在人才市场,我找了一个招聘软件工程师的桌子,跟人家说我会用C语言编游戏,你们需不需要。招聘的人告诉我,他们需要会 Delphi 的人开发企业管理软件。我说:我可以学的,我学编程很快的。对方说,那你学一下 Delphi,编个仓库管理软件,编好了再到我们公司来。然后给我名片就让我走了,他可能只是想尽快把我打发走,但当时我觉得很开心,我有机会换个更有意义和价值的工作了。事实证明,我真的抓住这次机会,并且改变了自己的人生轨迹。
从人才市场出来,我去新华书店买了一本 Delphi 编程的书,看了一晚上,觉得学的差不多了,第二天借了个电脑过来开始编写仓库管理软件,写下第一行代码。不到一个星期,感觉写的还可以,就拷了代码跑到那家公司,给他们看:这就是我用 Delphi 写的仓库管理软件。
就这样,我从一个涂肥皂水的仪表工程师,摇身一变,成为一个写代码的软件工程师。
如果现在再总结下这段经历,我觉得,人在年轻的时候,世界是崭新的,人也是崭新的,有无限的可能,可以去做各种尝试。即使尝试失败了也不要紧,至少也成了一个有故事的人,而人生就可能在各种尝试之中找到了自己的方向。
刚开始做程序员,觉得蛮紧张,自己不是计算机科班出身,没有系统学习过软件开发的基础课程,也不知道能不能胜任工作。于是我买了各种软件专业的教科书,花了一年多的时间,把数据结构、操作系统原理、数据库原理、离算数学各种计算机专业基础都补习了一遍。
这时候,我又困惑了,教科书里各种高大上的技术,在我当时的工作中一个也用不上,天天拷贝粘贴代码,数据库增删改查,感觉跟以前涂肥皂水没什么两样。当时就想,我要去更厉害的大公司,写一点有技术含量的代码。但是,作为一个半道出家,在一个三线小城市小公司工作的野路子程序员,我连大公司的门在哪儿都摸不着。
于是我决定,考研,成为计算机专业的研究生,作为进入大公司的敲门砖。
说干就干,我选了一个有技术含量又有前途的专业——北京工业大学人工智能专业。成绩下来一看,考上了,兴致勃勃去北京参加复试,结果学校通知,今年报考人工智能专业的人太多,而汽车专业需要有计算机背景的人才,我就被调剂到汽车专业了。就这样我读了三年汽车专业的研究生,人生真的曲折呀。
我研究生虽然学的不是计算机,但是读研期间还是学了很多计算机专业的选修课,可以说把计算机的专业基础重新打扎实了一遍,也为自己后面的技术进步奠定了基础。前面我说过,人在年轻的时候,要勇于去做各种尝试,这些尝试无论成败曲折,都可能会在你未来的成长中发挥作用。人生所有的汗水都不会白费,你的路走的越远,曾经付出的努力就越显现出作用。
画第一张架构图
研究生毕业之后,我加入了方正。方正接了一个据说当时最大的国外软件外包项目。我去报到的时候,项目经理指着空荡荡的一层大楼说,过几个月,需求确认了进入开发,这里全都会坐满人。但那时候只有几个人,坐在一个角落里,每天看外方发来的需求文档和技术规范要求。
当时,外方找了国外一家技术咨询公司,负责整体架构设计。但是,这个咨询公司只给出整体的概要设计模型和一堆技术规范要求,没有详细的设计和技术落地方案。我就去找项目经理说,要实现这些技术要求,需要有一个技术框架支撑,现有的开源技术框架都不满足要求,我们是不是要自己开发一个?
项目经理说:你说的有道理,但是部门里的技术高手都派到国外客户那里了,要不你来开发这个框架吧。
人生的机会通常都是以巨大的挑战的形式出现的,而不是放在礼盒里打上蝴蝶结摆在你的面前,你几乎不可能以一种愉悦、轻松的方式面对机会,任何恐惧、逃避,都会使你错失良机。
当项目经理跟我说,你来负责框架开发的时候,巨大的压力让我只想快速逃避这个任务。但我知道,我一直想要摆脱的涂肥皂水的命运就在眼前,无论如何,我都不能放弃。于是我说:我来试试。
于是我用周末的时间,研究了下相关开源软件的实现原理,根据外方的技术要求,做了一个技术框架设计,用 UML 画了五六张架构图。第二周项目经理邀请其他部门的专家一起开了个会,然后就组织部门里仅有的几个人根据这几张架构图开始开发框架了。
后来等外派到客户那里的技术高手回国的时候,这个技术框架已经开发完成,并且针对一个典型的需求场景开发了一个样例程序,运行良好。于是这个框架就成为整个系统的核心,也成为开发的基本技术规范。项目进入开发以后,果然每周都有几十个开发工程师入场,很快坐满了大楼一整层,每周我都要给这些新加入的工程师讲框架的运行原理,开发的流程规范,接口的实现规则。
所有工程师都遵循框架的接口规范编程,跨团队开发的代码不会彼此直接调用,所有的程序都在框架的调用下运行。任何对流程的改变都需要经过我的确认,任何对开发规范的调整都需要通过我修改框架来实现,我成了全项目组最靓的仔。这是我第一次体验到做技术的快乐,做架构的乐趣。
如果你对人生有自己的追求,你迟早会处在某个风口浪尖上,是乘势而上迎着风浪做个弄潮儿,还是畏惧风雨退缩不前做个旁观者,人生的选择,一念之间。
第一次领导团队
在方正获得了大家的认可后,我逐步进入了新的舒适区。随着项目开发进入后期,框架已经完全稳定,开发规范也已经被严格执行,我几乎没什么事情可做,虽然工作真的是“钱多事少离家近,位高权重责任轻”,但是,自己未来的前途在哪里?我又一次陷入迷茫。
这时候,有个朋友跳槽到 NEC,问我要不要去。我想既然在这里遇到天花板,不如换个环境试试,于是去了 NEC杭州公司,但是这次是被当做技术高手挖过去的,领导一个刚成立不久的团队。团队职责是配合日本本部维护开发一个类似 Tomcat 这样的 Java Web 容器。日本方面给的要求是先研究这个容器,然后再分配具体开发任务,可能也是想了解这个远在中国的团队技术的实力吧。
我加入团队的时候,大家问我,我们已经把这个容器的代码都看过了,实现细节什么的也都搞清楚了,但是我们该怎么办呢?是啊,我们怎么让对方知道我们真的已经完成研究,可以胜任接下来的开发任务,甚至可以承担一些关键的开发呢?
了解了团队的问题和日本方面的期望后,我组织团队对这个 Web 容器进行了逆向设计,也就是根据代码反推设计模型,用 UML 将整个软件重新用建模语言描述了一次,然后编写成一个设计文档发送给日方。我猜日方收到这个设计文档还是有点吃惊的,因为他们很快派了两个人来中国,跟我们当面交流,并表示对我们的技术很有信心,希望我们负责开发一个可以在 Web 容器上可插拔的应用防火墙插件。
开发的时候,本来我想自己开发最核心的一个模块,但看到有个团队成员跃跃欲试,于是我说:你来负责。后来负责这个核心模块开发的同事联系到国外一个类似的开源软件的作者,这个作者给了我们很多建议和指导。
这件事情让我很震惊,以前我做架构设计,会制定很严格的接口规范,限制工程师在开发的过程中自我发挥,保证整个系统的统一规范。但是这个同事自己发挥,联系了外部资源,结果完成的更加出色。那时候我意识到,把团队每个人的主观能动性发挥出来,产生的能量和价值是多么巨大。而在这样的团队中工作,收获的不仅是工作成就和个人成长,还有愉悦的人际关系。
其实当初离开方正到 NEC,我也犹豫过,这里工作这么开心,换一个环境,能不能适应,会不会被新团队接纳?厌恶风险是人的天性,但是走出舒适区,也许可以看到更广阔的天地和更美丽的风景,还能收获更加美好的人生体验。
申请第一个专利
在 NEC 的工作,随着产品和团队的成熟,我又变得无所事事,我决定再去外面看看别的机会,这次的机会是阿里巴巴。我去面试阿里巴巴的时候,上网看了看他们的网站。因为前面做 Web 容器和应用防火墙的时候,需要开发一些 Web 应用进行测试,看阿里巴巴的网站,虽然功能很多,但技术上不过是我们开发测试用例的水平,所以面试的时候颇有点自大。
面试官可能看出我自信满满的样子,开始问我一些分布式技术相关的问题,也就是高并发高可用相关的一些技术方案。当时高并发互联网应用刚刚崭露头角,相关的一些技术还不是软件开发领域的主流,这些技术当时我完全不了解。面试官看我目瞪口呆,就问我,想不想知道答案,我说想,他说那你加入我们团队吧。
我加入的这个团队也是刚刚成立的,就是后来开发出 Dubbo、Fastjson 等多个知名开源软件的阿里巴巴平台技术部。当时,团队只有六七个人,其中一个同事坐在我背后,工号 14,过了好几个月我才知道,他就是阿里巴巴最早的程序员,著名的马云 18 罗汉之一。
其他几个同事,工号要么很小,一看就是公司元老,要么跟我工号差不多,一看就是新来的。但奇怪的是,除我之外,其他成员不管新老员工,好像互相很熟的样子,讨论技术问题时,他们都非常默契,对彼此的技术思路也很熟悉,技术水平也很高,思维和语速也非常快,每次开会,我都有一种跟不上趟的感觉,觉得自己既不会做事,也不会做人,非常有压力。于是就拼命学习各种互联网技术,技术水平也得到很快提高。
当时公司有一面技术荣誉墙,申请专利数超过3项,公司就会把申请人的照片挂到墙上。这堵墙在一个很显眼的位置,我每天都会经过,好几次驻足观看,我们团队的同事几乎都在这堵墙上,除了我。当时我就暗暗下了决心:我一定要让自己的照片挂到墙上。
当时我负责开发一个分布式存储系统,需要实现几个当时业界比较顶尖的技术指标,于是我绞尽脑汁在这个系统里进行了多个创新性的技术设计。项目结束后,系统达到了预期的设计目标,而我利用里面的创新技术一口气申请了5个技术专利。当我的照片也挂到荣誉墙上的那一天,我站在墙的前面,看了很久。
后来又过了很长时间,我才知道,原来几年前阿里巴巴在开发淘宝的时候,一方面挑选了公司内的几个技术骨干,另一方面从一家知名外企请了几个技术顾问,组成一个联合开发团队,开发了淘宝和支付宝两个核心产品。开发完淘宝和支付宝后,技术顾问就离开了。后来阿里巴巴要建立平台技术部,把这几个技术顾问又挖了回来,还把公司内几个技术骨干也转岗到这个部门,也就是我刚加入公司时遇到的那六、七个同事。
这就解释了,明明跟我一样的新员工为什么和公司创业元老关系这么好,明明从一家不做互联网开发的外企跳槽过来,却对互联网技术这么熟悉,原来他们曾经一起开发过中国最重要的两个互联网应用。
所以,我跟他们关系没那么好可以理解,我技术没他们好情有可原,想到这一点,我技术进步的动力忽然没有了,人还真是一种奇怪的生物呢。
出版第一本书
后来在阿里巴巴工作了几年,各种互联网技术也都熟悉了,我又开始思考:下一个技术浪潮在哪里?其实当时局面也比较明朗,就是云计算和大数据。
之后有一个去 Intel 的机会,我了解到Hadoop 大数据很多中国区的开源开发者都在 Intel,于是就加入了 Intel 大数据团队,参与 Hive、Spark 一些开源大数据产品的开发。应该说,这些世界顶尖大数据产品的开发者技术水平确实很高,我想大约可以代表软件开发的顶尖水平吧。和这样一些人合作开发代码,使我对软件编程这件事又有了新的认识。
大数据技术虽然也是分布式技术的一种,但是和互联网技术还是有很大不同。我在做大数据开发的时候,就想:我要把我在互联网技术方面的知识写下来。当时倒并没有想自己要传授什么知识,仅仅是想把过往的知识经验做个总结回顾。
于是辗转联系到电子工业出版社博文视点,正式开始写作。但是写作之路也是一样的崎岖坎坷,准备写的时候,觉得自己有无数的想法要表达,可一旦坐在电脑前要动手的时候,却又不知道该从何写起。为此出版社的编辑刘皎老师还专门赶到上海Intel,给我打气,让我坚持。
这样才有了《大型网站技术架构:核心原理与案例分析》的面世。这本书的出版正好赶上互联网创业的浪潮,传统企业应用纷纷转型为互联网应用,大量的技术人员也需要进行技术转型。这本书在此后几年一再重印,帮助了很多开发人员进入互联网领域,我又体会到一种技术之外的收获和喜悦。
如果人生可以重来
我们这个世界是建立在因果律上的,任何一个结果都必然有它的原因,而任何一个原因又必然是另一个原因的结果。当我们把此时此刻作为结果,追根溯源,会发现所有的一切都源于一个又一个的开始。我架构人生的开始是哪里呢?是第一行代码?第一张架构图?第一次培训同事?第一次面试别人?第一次领导团队?我想都是吧,因为技术,因为架构,我的人生走到一条从未设想过的道路上,这条路上,有快乐也有痛苦,有收获也有遗憾。但是如果时光倒流,人生可以重来,让我回到刚工作不久的时候,我想我依然会写下我人生的第一行代码。
发布者:admin,转转请注明出处:http://www.yc00.com/web/1747534462a4648838.html
评论列表(0条)