如何成为一个很厉害的工程师

有很多人,包括我也困惑的一个问题,就是如何成为一个很厉害的工程师。类似的问题也有很多,如何成为一个很厉害的运营,如何成为一个很厉害的产品,或者跨行业的,如何成为一个很厉害的医生,如何成为一个很厉害的作家等等。

如何成为一个很厉害的工程师,我想是我的毕生追求,至少目前是。

榜样的力量
一个很好的方式,就是以业界成功或者知名的人来作为目标。从阿里来说,就有很多很厉害的人物,比如多隆,“他从阿里的第一位程序员,做到了阿里的合伙人,是神一样的人物”、“阿里扫地僧”、“一群工程师几天无法排查的问题,多隆一眼定位问题根源”。
比如吴翰清,“轻松瘫痪阿里内网,防御16亿次黑客攻击”、“20 岁入职阿里,马云 500 万聘请的天才少年”。类似这样的阿里人,多如牛毛,以上两个已经在互联网顺手拈来的神话般的人物。从阿里内部看,可能就更多了,无数的P10和P11都有各自的神话故事,也是每个技术人榜样。

不可复制的神话
在学校起,就涌现了很多互联网的天才人物,10岁的黑客,百万年薪的阿里星天才等。让人的感觉,此类人物天赋异禀,是常人无法企及的。比如多隆,一眼能看出的问题,我等屌丝程序员首先,要拿出电脑,打印错误日志上下文,拉上上下游同学,DEBUG一个星期,可能勉强才能定位:这尼玛,原来少传了一个入参。

因此除了望洋兴叹,我不知道自己能做什么。

不可复制的年代机遇
有些神话可能注定是神话,成功的人很多,但是没有一个成功是可以被复制的。成功不仅自身天赋很重要,也需要同时具备天时地利人和。
在互联网野蛮生长的十年,涌现了很多技术牛人,但是到了如今互联网红利吃紧的时代,缺没有新的技术大牛崭露头角,在如今,想成为技术大牛,却变得如此艰难。

从业前,
求伯君写出了WPS第一行代码,那时候我刚出生
马云去美国的时候,中国没有互联网。
马化腾QQ用户50万的时候,我还在高中的破网吧里,着急向网吧老板2块钱买个QQ号。
新浪微博走红的时候,我还在研究生期间写论文。

从业后,
人手必备的迅雷已无人问津
红极一时的暴风影音关门大吉

而今,
大大小小的公司纷纷裁员。

年代已不在,当初的互联网有多火,现在可能就有多悲伤

于是乎,大多数人这么做
没有天赋,没有时代的红利,如何成为一个厉害的工程师,变成了一种奢望和工匠般的追求。
大多数人,开始了抢滩逃难,有去考公务员的,有去国企的,有去开店的,当然,还有去送外卖的。

但是更多的,是在潮水褪去,光着身子,站在沙滩上,无所适从。于是,“摸鱼”成为了一个程序员最佳的选择。“摸鱼”成为了一种态度,也成为了一种工作方式。
战略,无战术,从以前的指哪打哪,变成了打哪指哪。
撸码随心所欲,跑起来是检验系统成功上线的唯一标准。
编码狂放不羁,半年内不出问题是编码的唯一标准。
“可维护”,搞笑吧,半年后我可能跑路了,维护不维护跟我有啥关系;
“可扩展”,逗我玩吧,业务半年后也要挂了,扩展啥玩意;
“高可用”,瞎扯了,就几十个几百个人访问,挂了几天也无所谓。

当石匠喝完酒来建别墅,当奔驰在索马里创办工厂,当当红小生来主演历史剧,可想而知,我们理想中要的精致和现实中的粗糙会有多大的反差。

此时,一本《论演员的自我修养》应该给演员一个大大的耳光。同样的,一本《论程序员的自我修养》也应该摆在大多数有追求的程序员面前。

至少,此时我,还想有一些追求,追求设计出优雅结构的系统、落地快速发展的业务、追求成为一名优秀的工程师。

如何成为一个厉害的工程师
从知乎上一个经典的理论,“以大多数人的努力程度之低,根本轮不到拼天赋”,即大部分对于自己梦想付出的努力,还远远不到拼天赋的地步。换句话说,每个人只要真正努力,就可以超越大部分人。

保持学习
前两天跟公司的一位P9沟通,他说,我至少几个月要保持学习一门新语言,从学习新语言里学习新的思考方式。对于普通程序员来说,不仅要保持学习的态度,更要保持学习的深度,学习是唯一不落后的最佳渠道。

我在项目里,就学习java8的语法,用新语法来尝试新业务,效果出奇。而且据我观察,往往有追求的大佬和新同学,都对新技术渴求和渴望。

即为明显的一个例子,我根据多年的交易经验,设计了一套轻量级业务隔离框架,一个P9大佬,在我做完技术汇报后,硬是单独拉着我,咨询我框架是如何实现,并且直接阅读我写的源代码,一直到问懂了才恍然大悟。

学习,可以是学习书本知识,可以学习当下的知识付费,可以学习跨界思维,还可以学习人,学习大师,学习身边的同事。

REVIEW
学而思,学和思本来就是互相补充的关系,而REVIEW在互联网界,有着更深的含义,有CODE REVIEW、故障REVIEW、项目REVIEW、技术方案REVIEW等等。互联网变得很快,有时候快是第一要素,先行抢占市场,抢占用户才能胜者为王。但是快,往往也会忽视很多问题,忽略方案上的漏洞、忽略代码上的缺陷、忽略团队上的管理和沟通,此时要停下来,REVIEW自身和项目,继续做到每日精进。

借势和借力
前几周末,跟CTO做技术REVIEW,我汇报的主题是交易系统架构。谈到跨部门的合作问题和难点,CTO一句话让我醍醐灌顶,如何推动项目。他说,做业务,要懂得借势和借力。借势指的是两者目标一样,自然能促进业务发展和跨团队合作,借力是指复用已有的产品能力、技术架构。两者合二为一,驱动业务发展自然水到渠成。

总结和抽象
我一直认为,从低层次往高层次走,最重要的一个特性,就是“总结和抽象”。这是一种能力,也是一种思考方式。
前两天看到有很多同行在脉脉吐槽阿里的中台,“徒有其表”、“炒作概念”、“无需中台”的评论。为什么从中台哺育了整个阿里经济体技术框架的中台,在这些人里一文不名?我想除了不懂阿里内情、视角不同外,很多人缺少“总结和抽象”的能力。

总结,是把一篇文章,用一句话概括;能从下笔千言里,找到最重要的一句话;能把做了半年的系统,用一个序列图完美释义。信息泛滥的互联网,总结变成了一种非常重要的能力,能剔除垃圾信息,找到最重要的值得付费的一句话。

总结是精炼,类似咖啡萃取,将最精华的部分提炼出来,可以理解成量变,只不过是将大的化小,化繁为简;而抽象是质变,将一个业务和一个系统,抽象到更高的层次,抽象成更为通用的理解方式。抽象,用哲学来说,是还原一个事务最本质的面目。在JAVA面向对象编程里,一个非常重要的特性,就是接口定义,接口就是对业务具体逻辑实现的抽象,抽象出一个模块具有的能力。
举个例子来说,钉钉有很多功能,IM聊天会话、审批、打卡等,抽象起来,这个能力叫:办公协同。
抽象可以让用户在更高层次上去思考,拓宽业务和系统边界。这也是为什么老板一句话,属下做一年。正是老板在更高程度的抽象,而实际落地,却是需要补充无数的血肉,才能真正落地一个业务。
之所以老板可以高瞻远瞩,而我等屌丝只能一线撸码,相信也是总结和抽象能力让我等望其项背。

最后
读一本书,不会成为很厉害的人,但是想成为很厉害的人,可以读一下《如何成为一个很厉害的人》,知乎推荐书目。