码农精进之路:我不相信35岁就做不了程序员
The following article is from 异步社区 Author 异步社区
我曾很多次被人问到,在软件的世界里到底有没有优雅的代码和整洁的架构?是不是所有想实现DDD和想要写好业务代码的职场新人都只能凌乱的摸索和反复尝试?答案是有捷径。
对于大多数初出茅庐的程序员们而言,张建飞的《代码精进之路:从码农到工匠》一书就是一条捷径。通过多年的学习和工作积累,张建飞研发了COLA(全称是Clean Object—Oriented Layered Architecture),COLA自开源以来,已经被多个技术团队使用,解决了DDD落地和应用扩展问题,受到了普遍关注和一致好评。
他提倡“工匠精神”,对于如何打造一个追求卓越、独具匠心的技术团队,如何量化考核工程师的技术贡献,都有着非常深入的思考和实践,并探索出一套切实可行的方法论。基于该方法论打造的“工匠平台”,在阿里巴巴内部被广泛使用,“工匠平台”丰富了对技术人员考察的维度,是除业务结果之外的从技术视角给技术人员“照镜子”的有效工具。让代码变得简洁,框架变得优美,有效减少了学习成本和探索路径,无论你是想通过一个代码支持多个业务,还是多个租户的场景,COLA都适用。身为码农圈的一员,更早地看到这本书可以说是一种幸运。
“我有一个梦想,我写的代码,可以像诗一样优美。我有一个梦想,我做的设计,能恰到好处,既不过度,也无不足。”
很多人会有一种固化的思维,认为只有伟大的人才配拥有伟大的梦想,但其实这个世界上原本就没有那么多伟大的人。所有伟大的梦想都是由普通人一点点的小愿望经过不断地努力,最终才变得不那么平凡,甚至称得上伟大的。张建飞一直觉得自己就是一个再普通不过的人,但是拥有自己小小的梦想,也愿意为了梦想坚持和努力。
坚强的母亲带给自己不愿服输的性格
张建飞于1982年出生在皖南一个很普通的农村家庭。出生的那天,全村人都在参加婚礼,也许是受热闹气氛的影响,他比预产期提前了好几天降临,直到建飞已经呱呱落地了,父亲才从酒席上赶回来。还好母亲心态好,一切也都顺利。
80年代的中国农村,虽然已经不存在温饱问题,但是日子过得还是很紧巴,一到下大雨的天气,家里的土房里就会下小雨。建飞从小就会帮助家里做一些力所能及的活儿,一家人虽然生活清贫但也拥有朴实的幸福。
在他7岁的时候,母亲决定建新房子。这可不是一件小事情,虽然妈妈和爸爸靠做衣服这个手艺挣到一些辛苦钱,但是离建房还差一些。就是在那种比较艰难的环境中,家里还是修起了新房子。建飞知道母亲在这其中做了很大的努力,这再次让他感受到母亲坚毅的性格,只要她决心要去做的事,一般都可以做成。
母亲有两个哥哥一个妹妹,在她9岁的时候外婆就去世了,外公是一个脾气暴躁、不会关心人的粗线条男人。母亲除了要给一家人洗衣做饭以外,还要在父亲发火的时候,保护妹妹。不好好的生活环境养成了她坚强不愿服输的性格,而这种性格从小又带给建飞很深刻的影响,让他自小就愿意多去尝试和努力,不会轻易服输。
张建飞和家人
成长中的无数小事,铺就了日后的路
小时候的张建飞并不是一个很自信的人,总觉得学习平平的自己在各个方面都很普通。小学5年级的时候,他和几个小伙伴在村里的一个池塘游泳。当轮到建飞的时候,他用最大的力气把自己抛向空,等砸到水里之后感觉一阵剧烈的刺痛,左脚被严重的割伤了,脚底几乎一半的肉已经被割开,可能是速度太快,伤口好像都来不及流血。正值小升初的关键期,这件事耽误了考试,他不得不在5年级又多待了一年。
但是塞翁失马,焉知非福,在留级的那一年,张建飞小宇宙开始爆发,成绩出奇得好,在各种竞赛中都拿到了很好的成绩。做惯了普通学生的他,突然发现自己也是有潜力变好的。后来在高考时分数刚刚跨过重点线,为了能选上一个比较热门的专业,他特意选了一所离家很远的普通211学校——云南大学。
离家遥远的代价就是每年他不得不坐上2天2夜的火车去学校上学,而且每年春运火车票非常紧张,连坐票也没有,只有站票。因为离家太远了,建飞基本上一年只在寒假的时候回家一次,暑假一般都留在学校勤工俭学。可以说,这个过程很大程度培养了他去探索和敢于吃苦的精神。
大学时候,张建飞有两个兴趣爱好,一个是英语,一个是打篮球。英语对编程的帮助主要还是在看书和看资料方面,打篮球也让他拥有健康的体魄。在建飞看来,人生是一场持久战,健康是1,其它都是0。更何况编程要学的东西非常多,没有一个好身体打持久战可不行。
人生每个转折点都是一种选择,工作让我更成熟
2007年计算机工程硕士毕业后,张建飞先后在软件公司InfoSys与互联网公司eBay担任高级研发和技术专家的职务。2007年到2010年是高级研发工程师,2010年到2014年是技术专家。这段工作经历最大的成长是在eBay学会了大型分布式系统的技术体系。
2014年,他加入阿里巴巴,先后在1688、ICBU和零售通担任技术主管。他非常认同阿里的文化和价值观,比如“客户第一,员工第二,股东第三”,就是一种利他文化,当我们越多地帮助他人成功的时候,自己才会成功。再比如“唯一不变的是变化”,阿里强调拥抱变化,他也非常认可。这两个价值观促使建飞不断学习、不断成长。
建飞在阿里工作最大的转折点发生在2015年年底,也就是加入阿里半年后。因为自己自小就不是一个太自信的人,而且还很敏感,非常在意别人的眼光和看法,所以在入职阿里之后,张建飞想要快速地去证明自己,这种“求功心切”的想法无形中给了他巨大的压力。在这种压力和焦虑之下,工作也很难做好,工作做不好又会更加焦虑,形成了恶性循环。最严重的时候,他连续失眠两个星期。
张建飞和朋友
使得张建飞状态逐渐调整好的方式是看书。这个阶段对他影响最大的有两本书,一本是《成长型思维》,另一本是《活出生命的意义》。
《成长型思维》教会了他要用发展的眼光看自己,焦虑不能改变现状,而持续学习、提升自己可以。《活出生命的意义》教会他生命的潜能是无限的,即使在最糟糕的境地,我们也有选择的自由。这之后张建飞逐渐放平了心态,平复了思绪,该学习学习,该运动运动,该努力努力,该度假度假,不再那么敏感,也不再那么在乎别人的眼光,这才有了后面的COLA,有了《代码精进之路:从码农到工匠》。
2018年的时候,建飞带领团队在部门的代码大赛上拿到了第一名。当时的奖励是和集团副总裁玄难共进晚餐。在晚餐会上,玄难同他们聊了很多有关自己的心得,这对张建飞有很大的激发。张建飞向玄难表达了想写一本书的想法,玄难表示很支持,还答应给书写序。
后面,每当在工作中遇到问题,玄难也会像朋友一样给张建飞指点,给了他很多的力量。
好奇心给我热情,写代码是一直探索到老的事情
对张建飞而言,当初选择了计算机专业并不是没有后悔过,选计算机专业没有别的,就是因为计算机是当时的热门专业,但其实他一度认为自己不适合编程。直到大学毕业那年,他也没有写过几行代码,还好学校的计算机课程大部分是不用编程的,否则建飞认为自己甚至会很难毕业。后来读了研究生,研究生的前半部分生活简直就是大学的延续,上课、寝室、球场、英语角……直到开始做一些小项目,才开始了张建飞真正的编程人生。
他是一个典型的慢热型程序员,虽然很慢热,但他一直没有放弃学习,没有放弃得的更好。建飞不相信什么“35岁之后做不了程序员”之类的话,他认为我们就是要活到老,学到老。写好代码不是一件容易的事,唯有不停地学习,不停地探索,向国外的编程大师们看齐,保持精进,才有可能把这件事做得更好。
好奇心对建飞职业的影响是他一直在探索如何写好代码。从开始工作的第一天起,就有这个想法,不过受限于当时的技术能力和经验,一直没有找到很好的方法。直到《代码精进之路:从码农到工匠》的出版,才算是找到一些门路。但他知道,这只是开始,未来的路还很长,自己会继续保持好奇,继续探索。
张建飞的偶像是维克多·弗兰克尔博士,正是他让自己看到人类如何在最恶劣的环境下仍然可以发出人性的光辉。反观自己,我们受的这点苦,根本就不值得一提。维克多·弗兰克尔博士说过:“人越是忘记自己——投身于某种事业或献身于所爱的人——他就越有人性,越能实现自己的价值。所谓自我实现,绝不是指某种可以实现的目标,因为人越是追求这个目标,越是容易失去。自我实现是自我超越唯一的副产品。”这些都给了建飞很大的启迪。
说到研发COLA(全称是Clean Object-Oriented Layered Architecture)的初衷,建飞觉得在做了多年业务技术开发之后,他发现“日子再也不能这么过”,为什么所有的业务代码都这么混乱,这么复杂?解决复杂度就是他研发COLA的初衷。
COLA的优点是它给那些想实践DDD、想写好业务代码的同学提供了一个可以落地的框架,可以减少他们的学习成本和探索路径。COLA对行业的最大贡献是让DDD从一个形而上的思想,变成一个可以看得见、摸得着的代码框架。同时其扩展点的设计是继承之阿里中台的扩展设计,对于那些想要通过一套代码支持多个业务,或者多个租户的场景也能提供帮助。
创作《代码精进之路》的初衷,写出更好的代码
2018年7月,张建飞在阿里巴巴内部的技术博客ATA发表了一篇文章《技术人自己的KPI》,表达了对技术团队越来越没有“技术味道”的担忧,以及技术团队除了业务项目之外,还应该有属于自己的KPI,而不是完全和业务的KPI绑定。让业务先赢应该是底线,而不是全部。文章中还提到,程序员要有工匠精神,并鼓励大家通过学习、实践、分享不断提升编码能力和设计能力。用工匠精神写每一行代码,而不是简单地通过代码堆砌实现业务功能来交差。
张建飞和阿里的同事
该文章在阿里巴巴内部和外部(在公众号“阿里技术”上也有发表)引起了不小的反响,道出了很多一线工程师和技术Leader的心声。大家纷纷表示技术味道的缺失不利于工程师自己的成长,从长远来看,也不利于公司的发展。我们需要做出改变,需要一种追求卓越的工匠精神。
基于这个出发点,建飞提出了一套对技术人员技术工作进行量化的指标,并通过“工匠平台”这个产品进行落地。“工匠平台”会收集这些技术指标,并对其进行评分和统计,从而提供一个更加全面的技术人员画像,更加客观地反映技术人员的技术贡献。
张建飞很多次在思考,在软件的世界里,到底有没有优雅的代码和整洁的架构呢?他想还是有的,但是更准确地说是:有优雅代码和整洁架构,但是没有一成不变的优雅代码和整洁架构。在软件的世界里,一定要学会变通,不能教条。
就是这样的,我们学会规则的目的是为了知道在什么时候打破规则。不是说你使用了COLA,就一定要遵守COLA的条条框框。不是的,你完全可以变通,可以发展,可以尝试不一样的做法。只要这种做法在你的语境下是合理的,就可以去做。
张建飞说,他有一个梦想,他写的代码,可以像诗一样优美;他做的设计,能恰到好处,既不过度,也无不足。他认为工程师最大的美德就是写出让人可以看懂的代码。
编后语:张建飞说过,他最希望将《代码精进之路》推荐给职场新人看,因为如果在你初入职场的时候,就有一个人教你怎么写好代码,那一定是一件很幸运的事情。
“种一棵树最好的时间是在十年前,其次是现在”。我不相信什么“35岁做不了程序员”,也不相信什么“年纪大了,精力不够”。我只知道有些人在持续学习,有些人过早地享受安逸。
愿你在新的一年可以快乐,也能有所收获。
《代码精进之路:从码农到工匠》
张建飞
本书是一本专门为专业程序员而写的书,主线是介绍如何化解代码复杂度,帮助程序员写出可读性好、可维护性好的代码。
本书共有13章内容,主要分为技艺部分、思想部分和实践部分。技艺部分详细介绍了编程技巧和方法论,并配以详尽的代码案例,有助于读者提高编写代码的能力,优化代码质量。思想部分主要包括抽象能力、分治思想,以及程序员应该具备的素养等内容。实践部分主要介绍了常见的应用架构模式,以及COLA架构的设计原理。
往期推荐
技术琐话
以分布式设计、架构、体系思想为基础,兼论研发相关的点点滴滴,不限于代码、质量体系和研发管理。本号由坐馆老司机技术团队维护。