关于作者:程序猿石头(ID: tangleithu),从十八县贫困农村一路逆袭上清华(点这里查看我的逆袭之路),BAT某厂P7,是前大疆(无人机)技术主管。
本文首发于微信公众号,原文链接,转载请全文保留。后台回复关键字 “1024” 获取程序员大厂面试指南。
背景
大家好,我是石头哥。
前一阵有幸获得了一个代码贡献奖,有不少同学感兴趣,我这里就简单给大家掰扯几句。
代码贡献奖?
这个代码贡献奖是阿里云下面的一个事业部设置的。(不过这个事业部也确实很很庞大就对了)
事业部专门设置这样一个代码奖,至少认为大佬们还是非常重视代码这件事情的。
这也承认了一线的基层技术同学的价值,营造追求卓越代码的工程师文化氛围。
评选过程是,先由每个小团队(一般10来人)提名,然后被提名的同学准备获奖材料。
获奖材料非常简单,就是准备一段代码,讲清楚这段代码设计的好处,背后的业务价值等等。
评审现场,花10分钟讲清楚代码和业务,5分钟回答现场评审提问。
不过,答辩现场很多同学都超时了,我们当初直接从3点搞到了8点多。最终获奖是从 14人选6个,还是没那么简单。
现场评委为P9、P10们,他们其实已经脱离一线较久了。但大家也基本从一线起来的,对好的代码,好的设计还是有认知的。
(怎么听起来感觉有点凡尔赛!)
在评审过程中,你讲代码设计多么精妙等等,但背后没有实际业务价值,仍然等于圈圈,所以业务很重要。
如下是整个大的事业部下面的获奖名单,有的人的花名还挺牛X的。
获奖理由
据我所知,提名过程是组织者拉齐了每个一线员工提交的代码数据(包括代码量,提交次数,CodeReview等等)作为参考,然后由主管提名。
但只有代码相关数据,够吗?
肯定不行,还是得靠背后的业务来支撑。
所以你看,在获奖理由里面,前半部分只是陈述了相关数据,重要的是后半部分这些代码背后的完成的具体业务。
这里就不太方便展开具体的业务了(度不太好把控啊,所以我很少在公众号谈工作上的具体事项)。
另外,从评选的数据维度可以看出,Code Review 也是其中很重要的环节。
我一直认为一个优秀的工程师,除了写自己的代码外,还需要多看别人的代码,指出别人代码的问题。当然在这个过程中,如果能学到别人代码优秀的设计之处,就更好了。
能获奖,当然值得高兴。
不过,除了精神奖励外,其实更希望能来点物质奖励,比如能加个薪啊之类的,哈哈。
不过,这也仅仅是幻想罢了。关于阿里的升职加薪这部分内容,我计划在“在XX工作是一种怎样的体验”这个系列来展开描述。开篇文章已经发出了 —— 福报厂,2周年了……
讲点代码规范上的吧
提起开发规范,我印象中最深的就是读研究生期间,带我的大牛师兄某导对我的要求。(后来这个大牛师兄留在清华任教当副教授了,再后来又参与创业了,再再后来去了快手,技术很牛的)
当时是开发一款 B/S 的 3D 渲染引擎(后来还有移动端的),其中 Web 部分由我负责,在大师兄在对我进行 code review 的过程中,对我提出了“严厉”的批评(也一直很感谢他当时的严格要求)。
原因不是别的,就是我开发的网页中有一部分是文字介绍,里面的标点符号是中英文混用,且代码也不规范,比如缩进不一致、该有的空格没有等等问题。
也就是从那个时候起,我对代码规范非常重视。这对后来自己写毕业论文等等方面也起到了良好的促进作用,因为导师对这块要求也相对严格。
回到代码规范这件事情上,好的代码读起来真的是赏心悦目,当然自己也一直在追求写出好的代码。
代码规范中的 code style 只是其中最简单的一种,好在现在有各种第三方工具已经帮忙做到自动化验证了。例如阿里巴巴的 alibaba-p3c 等。
尽管现在比如业界比较公认的 Java 开发手册对code style等都做出了严格的说明,但实际上能做到的人也不多。
按道理,这部分也是最容易做到的一种,因为有模板,直接遵守即可。但实际执行出来,确很难,团队风格各异,如果不是老板去 push,很难执行下去。
记得有一部电视剧(《硅谷》?)讲的就是一堆情侣因为纠结到底是用空格还是 tab 键(或者是 Vim 和 Emacs)分手,哈哈这当然是一个笑话。 (我刻意去找了下,感兴趣的同学可戳戳下面这个视频。)
https://v.qq.com/x/page/h0310ie8zhc.html
不过在一个 team 里保持统一的代码风格还是有必要的,毕竟你写的代码不是只有你一个人看,在不同的终端,不同的编辑器来讲空格和 tab 可能显示效果都不一样,也就影响了阅读体验。
并且当多人同时修改一个文件时,可能会导致各种冲突。(例如不同的人的 import
包顺序不一致,有的又用 import wechat.codershitou.*
)
对于代码规范来讲,我也希望通过自己的努力去感染身边的人。
比如之前在前东家的 hackthon 中,我就组队发起了一个叫 “code review advisor” 项目,实现的目的其实也很简单,就是让大家在预先统一的规范下编码,如果有违反规范的,直接以 Comment 形式告诉代码提交者需要修改。
尽管上文提到的Java开发手册源于阿里,但实际上,即便在阿里,严格的代码规范也只能是一个美好的愿景,因为各种历史等原因,其实大家的代码并没有按照预期的规范去执行和实施。
提供点参考资料吧
《Java开发手册(嵩山版)》,Java 的同学,就不用说了,推荐这个规范,可以避免不少坑。最好结合p3c插件,扫描违反规约的代码;更好的是结合CI流程,揪出并fix那些代码。请戳这里:github.com/alibaba/p3c
再推荐一本书 —— 《Clean Code》,中文译作《代码整洁之道》,原作者是 Robert.C.Martin,下面这个图是之前石头哥收藏的来源不详的此书的提纲。(可私信我获取此书)
- 其他的,再推荐 google 的 code style 吧,各种语言都有:
https://google.github.io/styleguide/
为了方便,我已经收集整理到一起,大家可以点击下方名片(或者微信搜索“程序猿石头”),回复代码规范
获取相应资料。
后记
最后,求关注、求星标,本号会定期分享一些技术干货、职场经验等,如果大家对阿里或者其他大厂感兴趣,也可以找我内推,我可以帮忙提供简历 review 等,希望能和大家积极交流讨论,一起学习、共同进步。
关于作者:程序猿石头(ID: tangleithu),从十八县贫困农村一路逆袭上清华(点击这里查看我的逆袭之路),目前在BAT某厂打工,是前大疆(无人机)技术主管。
欢迎扫码加入互联网大厂内推群 & 技术交流群,一起学习、共同进步。后台回复关键字 “0” 送阿里技术大礼包。