导读:鲁迅曾说:这世上本没有路,走的人多了,也便成了路。作为一个非计算机专业的程序员,我的架构师成长之路也许有点另类,但是另类的路走的人多了,也就成了寻常的路。

因为,这世上本没有路。

作者:李智慧

来源:大数据DT(ID:hzdashuju)

01 初入江湖

大学期间我所学的专业是工业自动化,第一份工作是到一家国企做仪表工程师,就是维修各种化学分析仪器仪表。这些仪表的各种气路经常出故障,这些气路管道如果漏气就会影响化学成分的分析精度,所以我的主要工作就是找到这些气路管道的泄漏之处,每天拿肥皂水涂在很细小的管道上,观察是不是有气泡渗出。

这份工作做了两年。一想到这样涂一辈子的肥皂水,我就开始有点崩溃了。以前在大学的时候,我喜欢写程序,经常用C语言写各种小游戏给自己玩,所以我就想,能不能找份程序员的工作呢?于是我跑到人才市场去找,也没带简历,其实带了也没用,总不能写自己涂了两年肥皂水吧。

在人才市场,我找到一家招聘软件工程师的企业,跟人家说我会用C语言编游戏,你们需不需要。招聘的人告诉我,他们需要会Delphi的人开发企业管理软件。我说,我可以学的,我学编程很快的。

对方说,“那你学一下Delphi,编个仓库管理软件,编好了再到我们公司来”。然后给我名片就让我走了,他可能只是想尽快把我打发走,但当时我却觉得很开心,我有机会换个更有意义和价值的工作了。事实证明,这个机会彻底改变了我的人生。

从人才市场出来,我去新华书店买了一本Delphi编程的书,看了一晚上,觉得学得差不多了,第二天借了个电脑过来开始编写仓库管理软件。不到一个星期,感觉自己的程序写得还可以,就拷了代码跑到那家公司,给他们看——这就是我用Delphi写的仓库管理软件。

就这样,我从一个涂肥皂水的弱电工程师,摇身一变成为一个写代码的软件工程师。

现在回过头来看这段经历,会感激当时年轻的自己,人在年轻的时候,世界是崭新的,人也是崭新的,有无限的可能,可以去做各种尝试。即使尝试失败了也不要紧,至少也成了一个有故事的人,而人生就可能在各种尝试之中找到自己的方向。

刚开始做程序员的时候觉得很紧张,因为自己不是计算机科班出身,没有系统学习过软件开发的基础课程,也不知道能不能胜任工作。于是我买了各种软件专业的教科书,花了一年多的时间,把数据结构、操作系统原理、数据库原理、离算数学各种计算机专业基础都补习了一遍。

这时我又困惑了,教科书里各种高大上的原理在我当时的工作中一个也用不上,天天复制粘贴代码、数据库增删改查,感觉跟以前涂肥皂水没什么两样。当时我就想,要去更厉害的大公司,写一点有技术含量的代码。但是,作为一个半道出家,在塞外小城小公司工作的野路子程序员,我连大公司的门在哪儿都摸不着。

于是我决定考研,成为计算机专业的研究生,以此作为进入大公司的敲门砖。

说干就干,我选了一个有技术含量又有前途的专业—北京工业大学人工智能专业。经过努力我考上了,当我兴致勃勃去北京参加复试时,结果学校通知,今年报考人工智能专业的人太多,而汽车专业需要有计算机背景的人才,就这样我被调剂到汽车专业,读了三年汽车专业的研究生,我的人生之路真是曲折。

我读研时虽然学的不是计算机,但是还是学了很多计算机专业的选修课,可以说把计算机的专业基础知识重新扎实地学了一遍,也为自己后面的技术进步奠定了基础。

人在年轻的时候,要勇于去做各种尝试,无论成败曲折,都可能在你未来的成长中发挥作用。人生所有的汗水都不会白费,你的路走得越远,曾经付出的努力就越能显现出作用。

02 小试牛刀

研究生毕业之后,我加入了方正。方正接了一个据说是当时最大的国外软件外包项目。我去报到时,项目经理指着空荡荡的一层大楼说,过几个月,需求确认后进入开发阶段,这里全都会坐满人。但那时只有我们几个人,坐在一个角落里,每天看外方发来的需求文档和技术规范要求。

当时,外方找了国外一家技术咨询公司,负责整体架构设计。但是,这个咨询公司只给出整体的概要设计模型和一堆技术规范要求,没有详细的设计和技术落地方案。我就去找项目经理说,“要实现这些技术要求需要有一个技术框架支撑,现有的开源技术框架都不满足要求,我们是不是要自己开发一个?”

项目经理说:“确实,但是我手上仅有的几个技术高手都被派到国外客户方那里了,国内就你们几个新人,要不你带几个人开发这个框架吧。”

人生的机会通常都是以巨大挑战的形式出现的,而不是放在礼盒里打上蝴蝶结摆在你面前的,你几乎不可能以一种愉悦、轻松的方式面对机会,任何恐惧、逃避都会使你错失良机。

当项目经理跟我说,“你来负责框架开发的时候”,巨大的压力让我只想快速逃避这个任务。但是我知道,我一直想要摆脱的涂肥皂水的机会就在眼前,无论如何我都不能放弃。

于是我用周末的时间,研究了相关开源软件的实现原理,根据外方的技术要求,做了一个技术框架设计,用 UML 画了三四张架构图。第二周,项目经理邀请其他部门的技术高手过来做了一个设计评审,然后就开始开发了。

等外派到客户那里的技术高手回国时,这个技术框架已经开发完成,并且针对一个典型的需求场景开发了一个样例程序,运行良好。于是这个框架就成为整个系统的核心,也成为开发的基本技术规范。

项目进入开发阶段以后,果然每周都有几十个开发工程师入场,很快就坐满了一整层大楼,每周我都要给这些新加入的工程师讲框架的运行原理、开发的流程规范、接口的实现规则。

所有工程师都遵循框架的接口规范编程,跨团队开发的代码不会彼此调用,所有的程序都在框架的调用下运行,任何对流程的改变都需要经过我的确认,任何对开发规范的调整都需要通过我修改框架来实现,我成了全项目组最核心的人员。这是我第一次体验到做技术的快乐和做架构的乐趣。

如果你对人生有自己的追求,你迟早会处在某个风口浪尖上,是乘势而上迎着风浪做个弄潮儿,还是畏惧风雨退缩不前做个旁观者,人生的选择,一念之间。

03 拔剑四顾

在方正获得了大家的认可后,我逐步进入了新的舒适区。随着项目开发进入后期,框架已经完全稳定,开发规范也已经被严格执行,我几乎没什么事情可做,虽然工作真的是“钱多事少离家近,位高权重责任轻”,但是自己未来的前途在哪里?我又一次陷入迷茫。

这时,有个朋友跳槽到NEC,问我要不要去。我想既然在这里遇到天花板,不如换个环境试试,于是也去了NEC,但是这次是被当作技术高手请过去的。

我加入的是一个刚成立不久的团队,团队职责是配合日本本部维护开发一个类似Tomcat这样的Java Web容器。客户给的要求是先研究这个容器,然后再分配具体开发任务,可能也是想了解这个远在中国的团队的技术实力吧。

我加入团队的时候,大家问我,“我们已经把这个容器的代码都看过了,实现细节也都搞清楚了,但是我们该怎么办呢?”是啊,怎么让对方知道我们真的已经完成研究,可以胜任接下来的开发任务,甚至可以承担一些关键的开发呢?

了解了团队的问题和客户方面的期望后,我组织团队对这个Web容器进行了逆向设计,也就是根据代码反推设计模型,用UML将整个软件重新用建模语言描述了一次,然后编写成一个设计文档发送给客户。

我猜客户收到这个设计文档还是有点吃惊的,因为他们很快派了两个人来中国,跟我们当面交流,并表示对我们的技术很有信心,希望我们负责开发一个在Web容器上可插拔的应用防火墙插件。

开发的时候,我本来想自己开发最核心的一个模块,但看到团队成员都跃跃欲试,于是就都分给大家去开发了。后来负责这个核心模块开发的同事联系到国外一个类似的开源软件的作者,这个作者给了我们很多建议和指导。

这件事情让我很震惊。以前我做架构设计,会制定很严格的接口规范,限制工程师在开发的过程中自我发挥,以保证整个系统的统一。但是这位同事主动联系外部资源,结果完成得更加出色。

那时我意识到,把团队每个人的主观能动性发挥出来,产生的能量和价值是多么巨大。而在这样的团队中工作,收获的不仅是工作成就和个人成长,还有愉悦的人际关系。

其实当初离开方正到NEC,我也犹豫过,这里工作得这么开心,换一个环境,能不能适应,会不会被新团队接纳?

厌恶风险是人的天性,但是走出舒适区,也许可以看到更广阔的天地和更美丽的风景,还能收获更加美好的人生体验。

04 永远的江湖

在NEC的工作,随着产品和团队的成熟,我又变得无所事事,我决定再去外面看看别的机会。这次去的是阿里巴巴。

我去阿里巴巴面试时,上网看了看它的网站。因为前面做Web容器和应用防火墙的时候,需要开发一些Web应用进行测试,在浏览阿里巴巴的网站时,我发现,虽然这个网站的功能很多,但技术上不过是我们开发测试用例的水平,所以面试的时候颇有点自大。

面试官可能看出我自信满满的样子,开始问我一些分布式技术相关的问题,也就是海量高并发用户访问的技术方案。当时高并发互联网应用刚刚崭露头角,高并发相关的技术还不是软件开发领域的主流技术,这些技术当时我完全不了解。面试官看我目瞪口呆,说如果想知道答案就加入我们团队吧。

我加入的这个团队也是刚刚成立的,就是后来开发出Dubbo、Fastjson等多个知名开源软件的阿里巴巴平台技术部。当时,团队只有六七个人,其中一个同事坐在我背后,工号14,过了好几个月我才知道他就是阿里巴巴著名的十八罗汉之一。

其他几个同事,工号要么很小,一看就是公司元老,要么跟我工号差不多,一看就是新来的。

但奇怪的是,除我之外,其他成员不管新老员工,好像互相很熟的样子,讨论技术问题时他们都非常默契,对彼此的技术思路也很熟悉,技术水平也很高,思维和语速也非常快,每次开会我都有一种跟不上趟的感觉,觉得自己既不会做事也不会做人,非常有压力。

于是就拼命学习各种互联网技术,技术水平也很快提高了。

大概过了快半年我才知道,原来几年前阿里巴巴在开发淘宝的时候,一方面组织了自己的技术骨干,另一方面从一家知名外企请了几个外包人员,组成了一个开发团队,开发了淘宝和支付宝这两个核心产品。开发完淘宝和支付宝后,外包人员就离开了。

后来阿里巴巴要建立平台技术部,就把这几个外包人员又挖了回来,把几个技术骨干也转岗到这个部门。

这也就解释了明明是跟我一样的新员工,却和公司创业元老关系这么好,明明是从一家不做互联网开发的外企跳槽过来的,却对互联网技术这么熟悉的原因,原来他们曾经一起开发过中国最重要的两个互联网应用。

所以,我跟他们关系没那么好可以理解,我技术没他们好情有可原,想到这一点,我技术进步的动力忽然没有了,人还真是一种奇怪的生物呢。

在阿里巴巴工作了几年后,各种互联网技术也都熟悉了,我又开始思考,下一个技术浪潮在哪里?其实当时局面也比较明朗,就是云计算和大数据。

后来有一个去Intel的机会,了解到Hadoop大数据很多中国区的开源开发者都在Intel,于是我又加入了Intel大数据团队,参与Hive、Spark一些开源大数据的开发。

应该说,这些世界顶尖大数据产品的开发者技术水平确实很高,我想大约可以代表软件开发的顶尖水平吧。和这样一些人合作开发代码,使我对软件编程这件事又有了新的认识。

有句话叫“不忘初心”,我想我这十几年的职业生涯,一直在追求更好的技术、更有挑战的编程体验,这也算是不忘初心吧。还有句话叫“念念不忘,必有回响”,如果你对一件事心心念念、朝思暮想,你几乎就不会错过任何机会,也一定会收获相应的回报。

关于作者:李智慧,资深架构专家,同程旅行交通首席架构师,曾在NEC、阿里巴巴、Intel等知名企业担任架构师,也曾在WiFi万能钥匙等企业担任CTO。长期从事大数据、大型网站的架构和研发工作,领导设计过多个日活用户在千万级以上的互联网系统架构,实战经验丰富。曾设计、开发过 Web 服务器防火墙、分布式NoSQL 系统、大数据仓库引擎、反应式编程框架等各种类型的软件系统。

本文摘编自《架构师的自我修炼:技术、架构和未来》,经出版方授权发布。

延伸阅读《架构师的自我修炼:技术、架构和未来》

点击上图了解及购买

转载请联系微信:DoctorData

推荐语:大型网站技术架构作者李智慧新作,通过架构师的4项自我修炼,构建你的架构师知识体系,完整展示架构师修炼之道。

划重点????

干货直达????

  • 数据分析怎么学?我画了一个导图,又找到22本书

  • 3个最常见案例详解DBA日常维护

  • 终于有人把平均数、中位数和众数讲明白了

  • 史上最全!用Pandas读取CSV,看这篇就够了

更多精彩????

在公众号对话框输入以下关键词

查看更多优质内容!

PPT | 读书 | 书单 | 硬核 | 干货 讲明白 | 神操作

大数据 | 云计算 | 数据库 | Python | 爬虫 | 可视化

AI | 人工智能 | 机器学习 | 深度学习 | NLP

5G | 中台 | 用户画像 1024 | 数学 | 算法 数字孪生

据统计,99%的大咖都关注了这个公众号

????

另类架构师:在国企涂肥皂水、考研被调剂、在阿里跟十八罗汉当同事……相关推荐

  1. 【阿里云生活物联网架构师专题 ④】分享可商用的ESP8266 SDK连接阿里云物联网生活平台的在线远程升级OTA笔记。

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.esp32接入阿里云物联网平台,实现天猫精灵语音控制: 2.es ...

  2. 收藏!架构师需要掌握的99条铁律

    经常有人问我:我是多少年某某行业工作经验,我现在是去创业公司做技术总监还是去大公司做架构师?我发现我都无法回答这个问题.因为多少年某某行业工作经验,并不能解析为具有怎样的知识结构和掌握的能力数量和深度 ...

  3. 架构师需要掌握的99条铁律

    经常有人问我:我是多少年某某行业工作经验,我现在是去创业公司做技术总监还是去大公司做架构师?我发现我都无法回答这个问题.因为多少年某某行业工作经验,并不能解析为具有怎样的知识结构和掌握的能力数量和深度 ...

  4. Android开发究竟该如何学习,附架构师必备技术详解

    前言 笔者是某211非计算机相关专业2018届本科生,在校期间有半年多的互联网小公司实习经历. 毕业之后投递360 ,入职了360企业安全成为专门的前端开发工程师,有幸进入一个很赞的团队,遇到很棒的导 ...

  5. 阿里P8架构师谈:从单体架构、到SOA、再到微服务的架构设计详解

    本文涉及的内容以及知识点如下: 1.单体架构 2.单体架构的拆分 3.SOA与微服务的区别 4.微服务的优缺点 5.微服务的消息 6.服务集成 7.数据的去中心化 单体架构 Web应用程序发展的早期, ...

  6. 阿里P8架构师谈:架构设计经验汇总

    架构设计更多的是实践经验总结,以下架构设计经验,我会陆续补充完整. 一:数据库拆分原则 阿里P8架构师谈:架构设计之数据库拆分六大原则 二:缓存选择原则 阿里P8架构师谈:分布式缓存的应用场景.选型比 ...

  7. 阿里P8架构师谈:微服务Dubbo和SpringCloud架构设计、优劣势比较

    本文主要围绕微服务的技术选型.通讯协议.服务依赖模式.开始模式.运行模式等几方面来综合比较Dubbo和Spring Cloud 这2种开发框架.架构师可以根据公司的技术实力并结合项目的特点来选择某个合 ...

  8. 阿里P8架构师谈:Restful、SOAP、RPC、SOA、微服务之间的区别

    内容大纲: 1.介绍Restful.SOAP.RPC.SOA以及微服务 2.重点谈谈SOA与微服务的区别 3.以及为什么要使用微服务架构 什么是Restful Restful是一种架构设计风格,提供了 ...

  9. 阿里P8架构师谈:java架构师面试技能24全点

    1,JAVA基础扎实,理解io.多线程.集合等基础框架,对JVM原理有一定的了解,熟悉常见类库,常见java api不仅会用更能知其所以然: 2,对Spring,MyBatis/Hibernate,S ...

最新文章

  1. android 隐藏底部虚拟按键
  2. 【swjtu】数字电路实验6_旋转编码器人机交互电路设计
  3. hadoop 2.7.3 java_java - Hadoop 2.7.3 Java运行时错误 - 找不到core-site.xml - 堆栈内存溢出...
  4. 字节输入流一次读取一个字节的原理
  5. Java连接SQL2005及SQL Server JDBC Driver 2.0中sqljdbc.jar和sqljdbc4.jar的区别
  6. centos 时间同步_ftp同步更新,ftp远程文件同步更新日志详情
  7. android标题栏的属性,android – 属性“titleTextStyle”已经定义?
  8. 《vue2.0基础系列》目录大全,你要的都在这里
  9. 虽然我们可能不想对元素应用3D变换,可我们一样可以开启3D引擎
  10. 云开发无需服务期无需域名壁纸小程序源码
  11. linux-安装-MySQL
  12. datagridview如何将sqlite实现多表查询_服气!月薪3W的Exceler,居然是这样合并多表数据的...
  13. [转]Android应用的自动更新
  14. CentOS 7.3 关闭默认防火墙远程登录
  15. CMU科学家们带一群机器人开房,并收集了28,000种不同的姿势
  16. AppWidget实现机制分析--launcher添加和删除appwidget深入分析
  17. 给小黑升级三星970EVOPlus固态硬盘手记(图文)
  18. 网络安全常用标准汇总
  19. mysql索引失效的情况
  20. 中小学python编程教学-小学信息技术教学中进行Python 编程语言教学的策略

热门文章

  1. Qt文档阅读笔记-数据驱动测试
  2. Qt笔记-Qt获取百度下拉推荐词
  3. Qt文档阅读笔记-Qt5录音功能的实现
  4. Qt修改QSS中的qlineargradient属性,实现颜色渐变
  5. C++工作笔记-调试release版的dll
  6. Qt工作笔记-对主事件循环的进一步认识
  7. hibernate保存mysql乱码_hibernate保存数据到mysql时的中文乱码问题
  8. px4 uavcan linux,PX4开发指南-12.2.2.UAVCAN固件升级
  9. java httpclient 异步请求_Java利用httpasyncclient进行异步HTTP请求
  10. 数据结构之树与二叉树的应用:哈夫曼树(最优二叉树)