从程序员到架构师的成长锦囊丨直播回顾

大家好,我是杨波,也是极客时间「微服务架构实战 160 讲」的课程讲师。很荣幸可以接受极客时间的邀请,来到极客 Live 和大家分享关于程序员成长的话题。这次分享会分为三部分:我的成长经历、程序员的面试技巧以及程序员的必备软技能三部分。
1999 年到 2001 年,是我从大学生到教师的转型。1999 年,我从计算机专业大学毕业,在无锡的南洋学院做计算机老师。
2001 年到 2004 年,辞职读研。2001 年我辞掉工作,回到江南大学读研深造。
2004 年到 2006 年,进入软件开发行业。加入了一家做网络通讯设备的公司,叫合勤科技 (Zyxel),从 UI 小模块做起,完成了从初级工程师到高级工程师的转变。
2006 年到 2012 年,耕耘积累阶段。加入 Bay 中国研发中心 (eBay CDC),从事开放 API 平台研发,从高级软件工程师成长为资深软件工程师。
2012 年到 2016 年,加入携程框架部担任资深架构师。完成了从架构师,管理者到技术总监的转型。
2016 年到 2018 年,在拍拍贷担任研发总监。搭建了微服务架构,基础框架等技术体系,既做技术架构,也做团队管理,也担任总监,协助公司技术战略的规划。
总的来说,在 eBay 像是坐大巴,你只需要按部就班做好自己的事情,同时你能接触到更多的人,看到更大的平台,有利有弊。而在携程则不同,我是随着公司在成长,我是司机,有些项目怎么走我说了算,所以更具挑战性。在拍拍贷就是坐过山车了,随时拥抱变化。所以不论公司的大小,对我们来说总是可以收获到很多。
如果说对自己的成长过程做一个复盘,我想有四个关键词可以分享给大家:
第一个是兴趣或者叫天赋。我应该是偏向于架构师型的,我小时候就比较喜欢折腾各种玩具,喜欢看科幻电影,从小看的杂志都是科幻小说、少年科学这类的。没事的时候做个风筝、造个小房子。我从一年级到六年级,几乎每年我都要做一两个风筝,所以对技术,Building 构造东西我比较感兴趣。
第二点是坚持。我的很多大学同学,很多已经不在这个领域了,去做其他的事情了。而我从 1999 年大学毕业,到现在,应该是将近十八九年了,一直在在软件开发领域坚持着。一直在打磨,一直在坚持。
第三个是机遇。人的成长是需要有机遇的,我有幸加入到合勤科技、加入 eBay、携程以及现在的拍拍贷,这是我的机遇,有机会加入业绩比较大的公司,也有机会加入快速成长的公司,对我个人成长非常有帮助。当中也遇到了很多人给了我很大的帮助。
第四个是勤奋。和同龄人相比,我算是比较勤奋的,当年在参加合勤技校招的时候,参加笔试的有几百人,我的编程笔试成绩是最好的。像 eBay 也会对软件编程能力做一些考察,我的成绩也都很不错。这些都和我勤奋学习有关系。
总结下来,对我成长帮助最大的四个关键字,是兴趣、坚持、机遇、勤奋。
成功它没有特定的模板,我们每个人 都要自己去实践,去思考,走出自己独一无二的道路来,你走的到道路和我可能完全不一样,你也可以成功。当然我还在继续学习和成长的过程当中。
很多程序员总会问,该如何通过心仪公司的面试。其实我在这些年,面试过的人非常多,除了面试一些基础的技术岗位,还包括一些管理者甚至总监,总体加起来应该超过上千人。
一般我面试的时候会侧重 2 点:
第一点就是 硬技能,简单讲,你能不能干活,你编程能力行不行,这非常重要。
第二块是 软技能,比如沟通表达能力,团队合作能力,甚至到文化价值观层面。
但对不同的人,我考察的维度不同,比方说 0 到 3 年的程序员,我会更多的考察他的硬技能,因为 0 到 3 年其实还是一张白纸,没有项目经验,能考察的就是基本功,有没有认真扎实的掌握数据结构算法这些编程基础。
对 5 年以上的,第一关还是数据结构算法,因为这是基本功。除此之外我会考察这面试者的潜质。所谓的潜质就是我今天要讲的一个很核心的内容:架构设计思维。
有人问什么是架构设计思维,我提炼了三个架构设计思维,抽象、递归、分治。
所谓抽象能力,就是关注本质,忽略细节的能力。我经常做架构评审,我的团队做项目架构的时候,让我去做评审,一个项目的架构设计我就关注两样东西,一个是数据模型 (或称领域模型),另外一个是接口模型。通过数据库表、表结构、API 接口模型,就能看出来抽象能力如何。抽象好了,我就觉得你这个架构就过关了。
递归能力。我的面试中一定会要求面试者写递归算法,有没有掌握递归,对解决问题的能力相差是很大的。比如编译器解析器、代码生成器、序列化算法都涉及到递归,没有递归思维的程序员,就搞不定这个层面的工作。
分治,也就是分而治之。也就是大问题先分解为小问题,依次解决小问题,再合并成解决大问题。这又是和数据结构算法相关的。
抽象、递归、分治,在数据结构当中都有体现,你学好了数据结构,有了解决原子小问题的基础,通过项目实践中去锻炼,就能解决更大的问题。
所以,我会比较关注架构设计思维,考察的方式就是数据结构,简单的讲让他去编数据结构,比如说栈、哈希表怎么实现,归并排序怎么做。有了这些基础,才有潜质成长为解决更大问题的工程师、架构师。
面试中第二个考察点是编程语言,我们写代码、做工程师、做软件开发,代码必须得过关。《代码大全》这本书有一句话“Programming into Language, not in a language”,这句话有一个 into 和 in 的区别,如果翻译成中文就是深入一种语言去编程,而不是只在一种语言里头编程。
我最近在极客时间的「微服务架构实战 160 讲」课程里,也有学员反馈互动,我发现有些学员只能在已有 API 上去编程,不能去深入语言里编程。如果发现某个 API 功能没有,他就做不下去了。但有些程序员他就可以深入到这种语言,API 没提供,我就深入到这个语言里面,构造新的 API 抽象,这叫深入一种编程语言。
扫码可试看课程
我在面试的时候,会让面试者讲 API 的实现原理、讲红黑树、讲底层实现。要考察面试者是否知道底层的实现,这样我才知道你对编程语言的理解程度。
比如 Java 语言最大的特点就是垃圾回收,有些面试者用了很多年 Java,GC 的原理他却讲不清楚。要求高一些的话我会问到多线程怎么玩?如何用 Java 多线程开发?
5 年以上的面试者,我还会问到设计模式、架构原理甚至工程流程,我们是工程师,和程序员是有区别的,程序员把代码写好就好,而工程人员要按流程做好单元测试,集成测试,性能测试,监控,还要按照规范流程发布。
我面试一般还会要求面试者写代码。我还会要求面试者介绍自己参与开发的实际项目,考察实战能力。我比较喜欢真正喜欢技术,并且能对项目投入热情的人,讲到自己开发的项目就两眼放光,滔滔不绝,那多半就是你了。
最后,我会考察软性能力,我把它叫做元能力 (能力的能力)。技术能力越强,越要看中他的软性能力,最近有一本书叫《奈飞文化手册》,奈飞公司文化里就提到了:只招成年人。
我们都希望一起合作的同事,是个能对自己行为负责的成年人,不是动不动就闹情绪的小孩子。所以我会衡量面试者的沟通能力、积极主动性、正直诚实。软性能力不易考察,我一般会用压力面试的方法来考察面试者,故意否定他,制造一些压力,看看对方的反应。人的软性能力到底如何,在压力面前常常能体现出来。
随着大家工作经验的增加,前面的 3 到 5 年关注的都是硬技能,后面 5 年或者 10 年,是一个分水岭,大家会越来越需要感性方面的提升。卡耐基曾经说过,一个人的成就只有 15% 是跟他的专业技能相关的,另外 85% 取决于他的软性能力。这句话送给大家。
这么多年来,我经过大大小小的公司不少,也招了很多应届生和年轻人。我会留心观察哪些年轻人成长比较快,他们有哪些特质?在这里总结梳理了 11 个成长锦囊送给大家,可以在焦虑的时候拿出来看看。
从学校走出来,在公司里,一定要做个思维转型。你从要从确定思维转到不确定性思维。学校多是填鸭式教育,都有标准答案。但在社会上,很多事情是没有标准答案的,对和错都是模糊的。你要自己去从问题中找问题,从思考中得到思考。
还有一个成长思维是空杯心态,不论工作了多久,都要保持学习状态。就像乔布斯说的:保持饥饿,保持愚蠢。告诉自己,我就是愚者,我就是来学习的,这样会成长得更快。然后是不确定思维,始终相信只要经过这个自己的努力,不断的去学习,不断的实践,一定可以得到成长。未来并不确定,你今天做的选择做的事情决定你的未来。
看了这么多应届生,有一个定律:凡是积极主动的,胆子大的,成长就快。因为机会就那么多,你不争取,就是对自己不负责任,也是对工作不负责任。你虽然替老板打工,但对自己也是很好的提升。积极主动的人会对做的事情负责,争取更多机会,让自己承担更大的责任。
在公司里工作,一定要与人合作,做的事情越大动用的资源就越多。我们都有自己的盲点,这就需要别人帮助我们来看问题。需要从别人的眼睛里看问题,来补足自己的视角不足,才能做更大的事情。
其实我是靠勤奋的,我虽然有些天赋,我主要是用勤奋的方式。国外比较崇尚天赋论,我在进 eBay 的时候,老板给一本书,叫《发挥你的优势》。每个人都是有天赋的,老天爷给了你一种能力,你就要把它发挥好,这叫天赋论,在中国,我们崇尚勤奋论,倡导勤能补拙。所以也有一本书,叫《一万小时理论》,不管你天赋不天赋,我只要磨炼一万小时,每天三小时,十年以后,我就是非常厉害。从我的经验来看,勤奋和天赋都起作用,如果两个都是 5 分,相乘就是最高 25,如果你天赋只有 3,但你努力到了 5 分,3x5 = 15,你也很厉害。
能不能找到自己的导师非常重要,因为这个学习是有成本的,光靠自己摸索,一定会踩很多坑。如果有机会,找到导师就可以把你成长历程缩短,身边也有很多这样的例子,找到了一个比较好的导师,个人飞速的成长。但导师不会等着你出现,你需要磨练好自身能力,积累核心竞争力,你有价值潜质才会有导师看中你。
虽然老生常谈,但很重要。我每天学习的时间是固定的,绝对不会低于一个小时,雷打不动。但是学习要做到价值驱动学习,做到闭环式的学习,你可以把学的东西落地,写文章做输出,给大家做一次分享,有产出的学习会让你的学习更加高效,比如我的「微服务架构实战 160 讲」课程对我来说其实就是一次闭环式有输出的学习。
与学校不同的是,在社会上你要独立谋生,要找到客户、建立关系。虽然说做软件开发么,比较少和一线客户打交道,但是有利有弊。不打交道就少很多麻烦,可以专注做技术。但我建议你可以接触客户,建立客户价值和产出意识,跟客户形成闭环。有机会的话还可以去做一些商业实践,不要被软件开发工程师的身份把自己限制住。
比尔盖茨和巴非特,这两个耳熟能详的人被问到:最重要的管理能力是什么?都不约而同的回答:聚焦 (Focus)。我们人的这个能力有限,你不可能样样都学,不可能样样都做。你要沉下心来思考,我应该要学什么,管理自己目标计划。每年都要梳理一下,这一年要学习的内容、要做的项目,把自己的精力聚焦好。推荐大家看《高效能人士的七个习惯》这本书,里面提到:要事优先。
在软件开发行业,我还没有看到特别天才的人。不论什么背景、什么名校,代码写的多牛,成长为架构都不得少于 10 年的积累。在很长的时间内,你都要在复利曲线的底部,每天积累,直到有一天拐点的来临。所以你如果真想在软件研发行业成为专家、心目中的牛人,你得做好 10 年的准备,不断的打磨,不断的去锤炼。
有一本书叫《反脆弱》推荐大家去看一看。我认为这个反脆弱和舒适区是讲的同一个道理,人的成长一定要有压力,如果你每天轻轻松松,准时上班,按时下班,如果 3-5 年都是这个状态,那被淘汰就在眼前。适度的焦虑、压力不是坏事,说明你在成长,在进步,要敢于打破舒适区。
我们每个人从优秀跨越到卓越,都要通过实践想清楚三件事情,你想做的、你擅长做的以及社会需要的。如果一个人能把这三者结合起来,就完成了从优秀到卓越的跨越,那么怎么知道我想做什么?我擅长什么?这个社会需要什么?这个需要你去摸索,去实践。最后我想说的就是,只有你才能认识你自己。
最后希望您能成为一名卓越的工程师。
延展阅读:
A:这个问题问法有问题,因为我们讲的服务化,在互联网这个时代是个永恒的主题,之前我们讲单块应用,后来我们发展到了 SOA,SOA 还是模块化,分而治之的这个思路。现在呢,微服务只是一个名词,可以说换汤不换药,它跟模块化,或者跟 SOA 的理念是一致的。微服务也好,包括现在有新的概念,Service Mesh,Cloud native,容器云,这些都跟容器、服务化是沾点边的,它们都是趋势,不会停止。
A:其实这个没有标准答案,有的架构师不怎么写代码,但是依旧工作很出色,因为他在工作的前几年积累了大量的实战经验,并且依然保持学习的心态。一般工作经验 10 年以上才能被称之架构师,所以你在工作前面 10 年以内,一定要积累大量的代码,有了这个基础以后才能在更大的视角上做事。成为架构师以后,为了做更大的事情,你会把更多关注点放在系统宏观层面,减少对底层细节的关注。
A:在我自己的成长过程中,不光 35 岁、我 25、30 岁,包括现在 40 岁了,我都有焦虑。焦虑永远存在,但这其实是一个信号,告诉你该做出调整和改变。年轻人不断的冒出来,35 岁以后,如你要是还和年轻人拼代码实现,那一定有瓶颈。所以当你在 35 岁之前,一定要拓展新的能力,并且是有差异化的能力,做些年轻人没法和你媲美的事情,这才是你的主战场。
添加极客 Live 小助手微信:geektime002,回复【杨波】获取直播回顾视频。
成为一名架构师几乎是每个程序员的梦想。微服务架构可以说是当前架构领域最受关注的话题。所以 掌握微服务架构技术栈相关技能,是从一名普通程序员到资深架构师的必经之路。
推荐大家订阅「微服务架构实战 160 讲」,课程结合我多年来的实践经验,通过原理讲解和实战操作,帮你掌握企业级的微服务架构核心技能。
我分成 8 个模块,每个模块专注讲解一个微服务架构的核心组件,可以利用碎片时间自由学习,并且随着难度提升,视频会伴有字幕,帮助你更轻松的学习。
订阅优惠:原价¥299,拼团价格仅需 199,立省¥100。
点击阅读原文,即可试看课程。
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

随时掌握互联网精彩
- 1 让铁规矩长出铁牙齿 7904317
- 2 人民日报:过紧日子非削减正当待遇 7809384
- 3 取消哈佛留学生合法身份行为被叫停 7711856
- 4 开放是破题之钥 合作是前进之道 7615892
- 5 《歌手》第二期排名 7519839
- 6 特朗普建议6月起对欧盟征50%关税 7428411
- 7 陈楚生 高音失误 7329509
- 8 董明珠回应孟羽童能否再回格力 7234609
- 9 伊藤美诚赢球后泪洒赛场 7136865
- 10 莫迪:不让巴基斯坦得到一滴水 7043765