腾讯高级工程师:屎一样的代码如此巧妙

作者:BLUESmp

写在前面:Martin是BLUES在腾讯ISD工作时候QQ秀团队的同事,去年我们一起创建了梅沙科技团队。团队成员招聘,尤其是程序员招聘,一直是非常有难度的事情,因为我们不想招只会根据产品经理需求呆板的写代码的程序员,我们期待程序员有独立思考能力,主动了解业务发展,对产品需求有自己的思考,自己决定做或者不做,并给出理由。

Martin负责梅沙科技的研发管理,今年新增了一个角色,在梅沙教育体系中进行《少年编程》的课程设计与教学,已经开始在深圳梅沙书院实验班进行讲授,实践经验丰富的高级程序员给中学生讲编程,在编程语言的理解和应用方面,或许比理论派的编程讲师更有优势,对Martin的挑战就在于如何深入浅出的把编程讲明白,并设计实践编程任务,让学生在体验式教学过程中领略编程的魅力,并具备一定的编程思维和能力。

你看,一个程序员,可以做的事情,远远不止写代码,但写好代码,是基础。

文章标题,有点标题党,但实际也是如此,很多年轻的程序员,看别人的代码,总是说像坨屎,后来轮到自己写,才知道原来那一坨屎,也有奇妙之处。

判断代码质量的优劣,也是程序员的技能吧。

做产品,不是每个阶段都追求完美的代码,有的时候,就是需要快速实现,用最快的速度让产品发布,快速验证需求。需求成立,再进行系统重构,逐步追求适合更大量用户访问量的产品架构,更高效的代码。

下面是Martin的原文:

本文来源于Martin七年互联网工作经验的总结和整理,面向技术新人,但大部分内容对非技术类岗位也是适用的。如果对你有所启发,那Martin非常高兴,如果朋友你发现有纰漏,欢迎斧正。

当年毕业进腾讯的时候,成长的历程有点像摸着石头过河,甚至有一次被leader当众骂的狗血淋头。初入职场,谁没犯过错,怕的是没犯过错。但如果有高人指路,少犯些低级错误,说不定会跑得更快。不幸的是,martin是个普通人,在腾讯里拿过5星、4星、3星的考核,甚至2星。幸运的是,这些是martin一路走来发现最有效的成长经验,或许对你有些参考价值。

腾讯每半年会执行一次员工考核,根据员工的业绩和贡献评定1星~5星共五等,5星为最优,5星、4星可以拿优秀员工奖,1星为最差,连续两次拿1星是要末位淘汰的。当然Martin的状态再差,也不是拿2星的料,但有时候为了顾全大局,必要的个人牺牲还是需要的。

图0:腾讯高级工程师:屎一样的代码如此巧妙

Part I 两个核心思维

1. 天下没有免费的午餐

首先明确一点,天下没有免费的午餐。所有的收获,都必须是有付出的,或者过去的,或者将来的。大多的性价比高的收益,来源于过去的努力付出。所以,那些想着在职场里混混日子的,建议不要从事互联网这个行业,因为真的不适合。互联网本来就是一个高强度高回报的职业,工作得好,你可以早点退休。在互联网行业里懒散,必定被快速推进的浪潮抛下,害人害己。如果你满腔热血,已经准备好了奋斗,那么请继续往下看。

2. 别像傻逼一样苦干

世界上所有事物,都有其自然规律,别忽视自然规律,撸起袖子蛮干,那样的出来的结果可能南辕北辙。如果没有确定好目标,分析事物的发展趋势,建议不要开始。

职场新人,处于懵懂时期,经常犯的错误是,别人让自己做什么,就做什么,也不去思考一下为什么要去做这件事情,做了有什么用,怎么做才能达到比较好的效果。

当年刚进腾讯的Martin,产品经理让做什么,就做什么。产品经理提出来的需求,都去实现,当然也包括变更和插入的需求。接到需求后,便是开始苦干去实现。需求是否合理,变更是否影响原来的进度,都没深入有思考,那么导致的恶果就是本来一周完成的需求做了快两周,而且打破程序原有的合理设计。就是这次,被leader痛骂。

感谢leader痛骂,Martin开始认真思考,从而有了后面的4星,5星。丢脸,Martin悟性低,从小接受的教育是好好读书,将来找份好工作,没有人告诉martin应该如何分析和处理事情,庆幸当年面试官看重的是技术知识。不过大家别误会,腾讯里的绝大多数都是各方面都很优秀的人,Martin也在里面得到了很大的成长。

图1:腾讯高级工程师:屎一样的代码如此巧妙

其实,职场上的新人,也有相当部分的人是单纯做事的角色,疏于思考。那么,合理的方式是什么。前面说了,万物都有其自然规律,这条规律就是。面对一件事情,要分析其后的原因是什么。拿工作中最常见的需求实现来说,首要的弄清楚这个需求的目的是什么,然后要思考怎么做,最优的实现方法是什么,最后才是动手去做。

Part II 四个行动要诀

1. 深入虎穴,不怕犯错

martin成长最快的,不是听了多少讲座,学了多少新知识,而是思考过后的勇敢尝试。

通常,在业务发展到一定阶段,都会沉淀了不少前辈留下来的代码,这些代码可能是业务实现逻辑的核心。新人羞于自己的学识,不够自信,通常不敢去对这部分代码有所研究,更别说要做改动了。但往往越是这样,也越容易出现问题。

2003年诞生的QQ秀,到2007年发展壮大,形象保存server代码,已经经历了QQ秀的起步到辉煌,可谓历经风雨,承受住了历史的考验。但总有需求,需要修改到这部分的逻辑,才能更好地适应时代要求。当martin被迫阅读和理解完这部分代码后,开发业务能力上了一个层次。后来,这部分核心代码年久失修,被另外一位同事重构了,所以,只要敢深入,你们都是那个可驾驭的人。

支付逻辑,电子钱包,这种涉及到用户金钱的系统,一般都格外谨慎。其实这部分在梅沙科技里的业务也有,如果我们都不敢碰,肯定是运行不起来的。真正了解并开发实施后,也没有那么让人敬畏。不过,谨慎还是必须的。

图2:腾讯高级工程师:屎一样的代码如此巧妙

其实别人可以做到的,你也可以。那些最后真的做到非常棒的人,他们也会遇到难题,与普通人不一样的是,前者接受挑战,深入分析问题,找到解决问题的思路和方法。其实人类的恐惧来源于未知,只要你去分析了解发现未知事物真面目,发现也不过如此。但是,如果在困难面前畏首不前了,我们也就停滞在这里了。

2. 勇于承担,不怕背锅

每家公司为了激励员工,都会设立员工考核制度,考核的指标包含但不限于员工的业绩、个人成长。对于开发来说,按时发版,少出bug,同时对团队技术建设起推动作用,便是开发的考核指标。

正是这种考核指标,部分人担心影响考核结果,往往会把问题遮掩起来,殊不知,这种掩耳盗铃的做法,其实毫无利于个人的成长,直到问题越滚越大,造成严重的后果。

可能有人说,我偷偷改掉不就可以了吗,既达到不公开的目的,也达到成长的目的。

上面的做法看起来聪明,但实则上忽略了问题公开后对个人的监督和鞭策作用,这种监督作用让当事人快速寻找原因,找到解决问题方法和避免以后再犯。不要忽视这种无形的力量,它相当强大,一个没有担当的人,大家会期待他真正能挑起重担吗。公开问题后,一来是团队的力量可以帮忙快速解决问题,另外一方面可以给团队分享交流知识。所以,领导通常不会太在意一个人是否会犯错误,看重的是这个人在错误中是否能吸取教训和得到成长。

3. 前紧后松,把握节奏

新人里经常遇到的问题是,项目连续性延期。一周时间开发的项目延期1、2天,每次如此。通常情况下,开发在评估开发时间时,会盲目乐观,认为这个时间段一定可以完成。这种乐观,导致了前期的开发节奏偏慢,花掉大量的时间去处理无关紧要的问题。

(1)前期过于乐观

(2)难以克服的拖延症

一个项目的完成时间,不只是估计的开发时间,还要包括UI、产品经理验收以及验收问题修改时间,还有测试和修改bug的时间。经常遇到项目延期情况的新人,建议把开发完成时间控制在整个项目时间的三分之二处。

4. 善于总结,乐于分享

据研究表明,总结是最有效的学习方式。很多人的“学习”是把书买了回来,把别人的文章收藏起来,把别人的资料保存到电脑里,之后从来没有再打开看过。大家不要笑,我们看过的知识,听过别人的讲座,如果没有整理,其实和拿来的书本差不了多少。总结归纳,才真正是把知识吸收到自己大脑里的过程。

关于分享,有句话叫做“台上一分钟,台下十年功”。这句话说得没错,如果能做到把自己的知识分享给别人,那么需要花大量的时间收集和整理资料,这个整理的过程肯定遇到平时自己没注意到的问题,需要思考和推敲。把思路理顺了,这部分知识也真正属于自己了。

图3:腾讯高级工程师:屎一样的代码如此巧妙

分享,同时也是建立起个人影响力的过程。尽管很多人不愿意承认,很多人都是很功利的。只有真正对自己有价值的事情,大家才会积极去做,才会看重,无论是直接的价值或是间接的价值。分享,是传播者给接受者带来价值的过程,也就是传播者是有价值的,也就会被看重,这种被看重便形成了个人影响力。

职场上多通过邮件、文章写总结,有机会现场分享,都是非常有助于建立起个人影响力的方法。

PartIII 技术新人的快速融入

作为技术新人,很多是从学校步入社会的大学生,大多数非常聪明,不过容martin啰嗦几句,一定要了解事情的目的,了解业务的背景和目标,如下可能是有效方法:

(1)深刻理解现有业务

(2)根据业务读懂现有代码

(3)根据文章上面的建议去开发、去成长

Martin在梅沙科技也一年半了,加上在腾讯的五年,观察到形形色色的人。在接到业务需求后,有人完全没有了解业务便开始看业务代码,更有甚者连代码都没看便开始编码。对于没了解业务便开始看代码这种做法,我只能说这不是最有效率的做法。别人花半天看懂的代码,你可能要花两天。

对于当年在QQ秀里经常被产品经理问业务逻辑,只能呵呵了。不过真的不能怪产品经理,业务太复杂而且团队换血导致业务逻辑没有一个人能完整说清楚整个业务。如果团队里有懂业务逻辑的人在,开发就该庆幸吧。

在有条件了解业务逻辑的前提下,肯定是先了解。警察破案里面,都肯定是先了解犯罪动机。因为人做事的方式总是先有想法,然后再去实施。所以先了解背景和动机,是顺着脉络理解整件事情最高效的方法。如果你偏要反过来走,不是不可以,只是付出的工作会更多。

很多人初看别人的代码,感觉都像一坨屎,想把它重写一遍。重写的人写着写着,发现不太对劲,随着自己深入理解业务,发现那屎一样的代码竟是如此巧妙。

最后,如果问Martin还有什么必须强调的,那就是遵循规律,首先分析理解事情的目的,找到达到目的的方法,然后拆解目标去实施。引用大名鼎鼎的微信领头人张小龙那句名言,我所说的都是错的。思考分析过了,才是自己的。

余下全文(1/3)
分享这篇文章:

请关注我们:

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注