都说编程是一门艺术,优秀工程师写的代码往往赏心悦目,好代码源于好情怀,好东西自然需要分享出来。回想阿里内部曾组织过一个很有情怀的大型代码分享活动——“向代码致敬,寻找你的第83行代码”,对外以《码出高效》的稿费成立的第83行计划,旨在帮助盲人工程师和山区优秀学生。今天是8月3日,也是《Java开发手册(嵩山版)》发布的日子,在这个数字高度匹配的日子里,我们开怀畅聊一下技术情怀。
立即下载《Java开发手册(嵩山版)》电子书:点击这里
工程师是什么样的人?
工程师是一个特殊的群体,在阿里巴巴的占比越来越高,预估即将超过50%,在未来的企业竞争格局中,技术发挥着越来越重要的作用,向技术要红利,向技术要未来。个人以为在技术拓展商业边界之外,需要额外加一条:技术拓展价值边界。这个价值边界的内延是指技术的进无止境,让工程师的人生价值不断升华,不断挖掘自己内心深处的Power,不断提升内心对这份事业的执着感和成就感。价值边界的中延是指打造个人的技术影响力,形成独特的技术品牌,影响到身边的人。价值边界的外延是指有一天你突然发现,不断开拓创新的技术已经影响到世界的每一个角落,甚至是引导一代人的成长。
那工程师又是什么样的用户画像?闷骚、男性为主、理性思维、人不狠,话不多、更愿意人机互动、自我中心感偏强烈、对代码有着强烈的自尊感、对于别人的代码偶尔会有着发自内心的鄙视感。入职一家新公司并在电脑面前看别人的代码时,大部分人的第一反应:脏、乱、差,很少有人觉得别人的代码写得妙笔生花,通俗易懂。所以重构往往是技术同学的情结,重构的理由能够讲得天花乱坠,重构的频率随着人员频繁更替越来越高。
如何让工程师们成为更好的自己,成了一个绕不开的话题。在阿里巴巴,把人的文化想象成一个同心圆,对于每个人的最内核价值要求是公司的六脉神剑,次外层是人才观,即:乐观、皮实、聪明、自省,其中我最看重的是聪明和自省。聪明指的是打开自己的能力和阅读别人的能力,计算机专业的毕业生智商自然不低,甚至是天赋异禀,但是恃才傲物,不打开自己,不共享优秀的经验和代码,无法使个人的优秀产生集体化学反应;不阅读别人,无法高效地与他人合作,从而影响到组织的效能。至于自省,如果你觉得肯定、一定、绝对是对的,一般是错误的开始,懂得自省,不是否定自己,而是下一个成功的开始。单纯的价值观和人才观不足以驱动工程师这个群体更好地进步与创新,那么我们需要一种更立体的技术情怀来驱动个体、团队、组织继续前行。
技术情怀是什么?
情怀是近年的热词,可是谁也没有清晰地解释过情怀是什么。个人认为情怀是一种难舍难分的感情,即使风雨兼程,依然故我,坚信雨后彩虹会更美。退一步说,即使没有彩虹出现,享受雨后带着泥土芬芳的清新空气,享受追求梦想的历程就好,用武侠文化来说,情怀是行侠仗义之于江湖,快意潇洒之于恩仇,大江南北,侠之大者,为国为民;侠之小者,为红颜,为知己。
技术情怀是一种匠心,是一个偏务虚的词语,工程师是偏向于数据驱动的群体,希望能够用数据来量化定义,能够明确符合什么特质,达到什么程度的人,才是具有技术情怀的。我尝试从三个维度来解读一下技术情怀,总结成三个关键词:热爱、思考、卓越。热爱是一种源动力,思考是一个过程,卓越是一个结果。如果要给这三个词加一个定语,以使技术情怀更加立体、清晰地被解读,那这个定语就是:奉献式的热爱,主动式的思考,极致式的卓越。对于工程师来说,即使他热爱架构设计,热爱写代码,并且能写好代码,但是他不奉献不分享,同样会使技术视野变得很窄。思考如果是被动式的,是主管、业务方叫你思考,那么这种思考有时候往往是缺乏想象力和创新力的。卓越如果有顶点,那么容易固步自封。
奉献式的热爱
热爱,是一种兴趣,一种爱好。奉献,这种兴趣和爱好,能够普惠他人,造福社会,有着吃亏是福的豪气。有时候技术总是孤独的,我写了几千页的总结,这些总结都是深夜、周末、假期中,一个人走过来的。有时候被挑战、被否定、自己难受的时候,蹲下来,抱抱委屈的自己,便能有所缓和,继续自己的追求和热情。因此,有人说我的花名是孤独的尽头,简称孤尽(真正释义是风清扬的“独孤九剑,破尽天下武功”的说法)。
人们通常有两个常见的毛病:患得,患失。而热爱一件事情,除了执着,不会在得失上顾虑太多。很多人觉得《Java开发手册》是阿里巴巴KPI的产物,我并不反对KPI,但内心的热爱,与这些暂时的得失又有什么关系呢?马总说除了智商,情商,还有一种叫爱商——爱家人、爱恋人、爱朋友。扩展一下,热爱自己的事业,并且这种热爱不会因为短期的质疑、否定而放弃。
经常有人问我,编写和推广《Java开发手册》如此费心费力,什么样的信念让我如此执着?陆川的电影《可可西里》印象非常深刻,很多事情因为坚持而有希望,而不是有希望才坚持。为可可西里自然保护区的设立做过巨大贡献的索南达杰,毕生都献给了藏羚羊的保护,放弃了很多,甚至献出了他宝贵的生命,人因为信念而坚持体现出人类的伟大。忽悠是把我不相信的东西说给大家听,但是信念是把相信的东西用行动传递给大家。手册的愿景是码出高效,码出质量,码出未来,帮助到更多的人,推进世界的规约文化进步,能够觉得协同开发是一件幸福的事情,开发是一件有创造力的事情,开发是一件能够改变世界的事情,而不是为了琐碎规则的意见相左而消耗巨大的能量,影响了算法效率和架构设计的优雅性。
主动式的思考
很多人以为,《Java开发手册》只是信息收集整理后的文档而已,代码规约的70%内容完全出自平时个人的总结和技术提炼。冰冻三尺,绝非一日之寒,展示给大家的小板凳,已经是第n只,并且还在不断地改进中,不断地自我思考中,去提升自己对知识的认知层次和抽象水平。
我习惯去做摘记,从入职第一天开始,总共沉淀了近2300页的笔记,分为四个文档,搜集、整理、专题、哲学。知识快速进入搜集区,包括听到的、看到的、疑惑的,不断地去思考,不断地去清理、复核、总结之后,沉淀于整理区,这是点维度的总结。把这些点的知识串成一个专题是线维度的总结。而最后的知识上升到哲学方法论级别,是面维度的总结。有一些至今没有搞清楚的知识点,在搜集区已经沉淀了多年,依然会不断地去Review一下。所以,我对于知识的记忆非常清晰,因为那是不断进行主动式思考的结果。经过一段时间的整理之后,形成某个知识体系,比如,高并发处理、Docker技巧、函数式编程等,会形成一个新的文档——体系化总结。而最后的思考就是把知识体系抽象成哲学思维,任何问题上升到高层抽象就是哲学知识。主动沉淀、主动思考、主动提炼,才能使我们的技术境界不断升华。
极致式的卓越
对客户我们要求Stay humble,对技术我们提倡Keep ambitious,敢于卓越,敢于极致。极致与卓越,似乎是一个意思,即出类拔萃,超出期望。极致式的卓越,是把卓越再往前提升一个等级。如果一个人处在一个无人可以比拟的高度上,那么他要学会自我驱动,持续进步,不但卓越,还要追求个人内心极致的追求。“自信人生二百年,会当水击三千里”,坚持成就更好的公司,更好的未来,自然会成就更好的自己。
对于写代码有极致追求的人,总会不断地去Review自己的代码,并且和同事进行Code Review,极致式地追求代码的清晰、可读性。追求到极致,就是能够有9行完成的代码,坚决不写10行;能够写出50ms的接口,坚决不写成100ms。常常Review一下自己的代码是否符合开闭原则,是否有利于维护和扩展。
希望《Java开发手册(嵩山版)》是陪伴大家的床头书,地铁中翻一下神清气爽的工具书,内功修炼的武功秘籍。因为卓越,所以经典,只有这样百尺竿头,才能更进一步。有人曾经留言说到这个手册与星爷的电影一样经典,我真的非常感动。追求卓越,追求极致式的卓越,是技术情怀的核心。
《码出高效》的写作是在深度拷打我的情怀和使命感,中间的痛楚与质疑,让自己的内心一度怀疑写书是一件错误的事情,忽略了时间和空间,忽略了家人,忽略了身体。如果一定要给技术情怀加一个续的话,那么我希望大家响应毛爷爷1952年的号召:发展体育运动,增强人民体质。把知识传播给大家,帮助到一代程序员的成长,需要奉献、需要不断地精进、需要不断地深度思考。
嵩山归来
天龙八部给我最深的印象是扫地僧从容淡定地在弹指之间制服两大绝世高手,功力之高深莫测,清幽现云山,虚静出内功,是一种武学情怀。《Java开发手册》从华山到泰山,一路星夜兼程,今天的嵩山版经过不断地精进与苦练,已经日臻完美,它的内功提升之处在于:
- 第一、增加前后端规约。打通前后端的任督二脉,形成前后端协作开发的共识。
- 第二、重画分层图例。新图更加突出分层的清晰度,并且去掉图中有歧义的向上箭头。
- 第三、修正BigDecimal的equals错误。3.0与3.00在我们的常规认知里是相等的,但是equals比较的结果由于考虑到精度因素,所以返回为false。
- 第四、修正泰山版的部分文字描述错误。