【导语】
马丁(Robert C. Martin)撰写的《代码整洁之道》(Clean Code)一书中提出了代码质量与其整洁度成正比,干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础,并由此揭示代码整洁之道。文中讲述了:当你在做 Code Review 时,从审查者的言辞平静或是激烈的词语中,可以领略到你写的代码是Bad Code还是 Good Code,这或许是工程师们经常会遇到的场景,能否写出“优质”的代码,或许也是考核一个“优质”的程序猿必解难题。
代码就是程序猿/工程师们的武器。 代码的不规范会带来很多负面影响,比如对审查阅读时的不方便,后期维护的复杂度也会随之增加,降低团队的工作效率。 最重要的是,不规范的代码也可能不小心中埋下bug,比如参数、异常处理、日志等不规范都会让你背锅。 优雅的代码读起来让人赏心悦目、通俗易懂,对后期重构也大有帮助。
在感恩节到来之际,我们要向程序员们送出感恩节小福利——向一直以来奋斗于工作岗位的他们说一声“谢谢”,感谢一起不断追求卓越的技术伙伴们,殊不知他们指尖下的一行行代码赋予了视听更加美妙的体验~
为了帮助大家更多了解“关爱“程序员群体,也帮助程序猿进行经验的交流和分享。小编特意邀请了5位优秀的爱奇艺程序猿葛葛,用他们多年从业经验,为大家讲讲程序员写代码的那点儿事儿~
好的代码长啥样?
关键词一
易读性
“大家可能都觉得可读性太easy了,其实看似最简单的确实最难做到的。”
软件开发方面著名作者和国际知名演说家MartinFowler 说过:“任何一个傻瓜都能写出计算机可以理解的代码。唯有写出人类容易理解的代码,才是优秀的程序员。”
代码的第一阅读对象是人,其次才是机器。可阅读性应该是代码的首要标准之一。因为写代码不是一项单打独斗的工作,不能自说自话,而是需要一个团队的配合,因此能够让别人读懂你的代码,是一件非常重要的事情。其次,写一个“人能看懂”的代码更大的好处在于提高其可维护性,大部分的代码完成之后至少需要跑个几年以上,代码的开发其实只占整个产品生命周期的一小部分,大部分时间则是用于维护。Bug已经很令人忧伤了,如果准备改bug的时候发现代码写的还不是“人话”,那真的是非常的“秃然”了。所以一定要可读才易于维护,但可读性也仅仅是爱奇艺程序员对自己的最低要求。
关键词二
可扩展性
如果说易读性是个基础性需求,那么可扩展性就是爱奇艺程序员高一段位的“进阶要求”了。互联网时代“先开枪,后瞄准”,在爱奇艺创新和效率是我们的制胜法宝。****所有的产品都在不断的更新迭代中,因此对于产品的可扩展性要求就非常高。
可扩展性追求的是在不修改原有代码的情况下,可以去扩展更多功能,其优点就是效率高,减少开发成本。也就是贴合了我们所强调的“既要低头拉车,也要抬头看路。”在完成现有产品需求的基础上,多想几步,为“未来”铺路。
关键词三
高内聚低耦合
高内聚低耦合也是爱奇艺程序员评判代码好坏的标准之一。
“高内聚”是用来普遍评判软件设计质量的标准,行话叫做“功能内聚“,高内聚要求软件系统中的各个元素具有较高的协作性,因为在我们在完成软件需求中的一个功能,可能需要做各种事情,但是具有高内聚性的一个元素,只完成它职责内的事情,而把那些不在它职责内的事情拿去请求别人来完成。
"耦合“是对某元素与其它元素之间的连接、感知和依赖的量度。而“低耦合”则是指要将自己的模块和其他模块的边界划分清楚,降低相互依赖性,尽量避免“牵一发而动全身“的事情发生。实现“高内聚低耦合”能有效地提高代码可维护性及维护成本,还可提高其可变更性。
写代码的时候
有什么好的习惯、经验分享?
工具一
code review
经常性的进行code review是必须注入的一剂强安利!
无论是个人对自己的代码定期、经常性的停顿和回顾,还是团队内互相进行code review,都是在coding时的一个好的工作方法。
个人review:采访中小编get了一个概念:WTFs/per min(字面意思,不过多解释),意思就是要有一定频率的换位思考,重新审核自己过去的代码,查找各种缺陷,包括代码缺陷、功能实现问题、编码合理性、性能优化等。提高代码质量的同时也可以及早发现潜在缺陷,降低修改/弥补缺陷的成本。
通过采访,小编也了解到,爱奇艺的每一个团队基本都有自己的code review的机制 ~除了能够促进团队内部知识共享,提高团队整体水平之外,review的过程对于团队成员来说,也是一种思路重构的过程,能够帮助更多的成员理解系统。
工具二
利用好注释
后台产品研发部的聂同学提出,注释是被许多程序员忽略掉的重要工具。目前大部分人都是为了写注释而写注释,内容更多的也都是简单描述实现层的内容。但实际上,注释应该更多的描写设计意图相关内容,或加入图示标注。这样可以在code review的过程当中更好的回忆起当时代码设计的思路,有助于代码的维护、重构等。
=============================================================================================================================================================
工具三
多学习优秀的源码,重复造轮子
对于程序员来说,类似Github等“直男交友俱乐部“中,丰富的开源代码其实是笔极为宝贵的财富。 如果能充分学习、利用好开放源代码的资源,不仅可以学习代码的编写规范、设计等基本内容,还可以掌握多种编程方法,提高实践能力,还能获得好的思想,激发编程灵感。 而爱奇艺自身就有优秀的开源代码,如QLB,在业界有一定的影响力~(大家可以多多学习哦~)
“多按学习优秀的源码来重复造轮子,有时尝试模仿着去做一个类似的东西的时候,学到的东西会更多。 “
你认为程序员必备的核心素质是什么?
一、
抽象层建立
许多程序员在代码编写的时候更多关注与实现层,关注点在于how而不是why,这就会导致很多系统的扩展性差、架构乱,一改就瘫一大片。所以对于程序员来说,抽象层的建立尤为重要,大家需要更多的关注内在逻辑。
这与我们的OKR制定十分类似,O就是这个系统的抽象层,也就是why,O是保持不变的,而KR就是我们的code,它是实现O的工具,也就是how。
举个简单的栗子:如果我们开发一款手机日历app,用户可上传文字,也可上传图片。那么在后台的处理中,我们将文字对应红色,将图片对应绿色进行区分。这时程序员需要明确的是,我们这么处理的目的是为了区分内容的类型,而并非单纯的颜色。
所以我们需要更多的将自己从机械的coding中抽离出来,明白系统建立的内在逻辑,对于整体系统的建立都起着至关重要的作用。
二、
好奇心
对于程序员来说,好奇心也是一个必不可少的素质之一。
没有好奇心就没有驱动力。互联网行业发展飞速,瞬息万变,现在掌握的技术很快也会变得陈旧,现有的概念很快也会落伍,所以就需要好奇心驱动着踏出舒适区,主动去了解新的技术、新的思路、新的想法,及时掌握行业动态。在这个信息大爆炸的时代,提炼出有用的观点和内容,融入到自己的知识框架,学以致用。
三、
团队精神
现在的软件开发已经不再是20年前个人英雄主义的时代,一个超级程序员就能够搞定一切的情况已经很少存在了。我们已经从单兵作战切换为团战模式,所以当我们以团队的形式进行系统的设计和开发时,团队精神也变得越来越重要。
设立一个清晰的、共同的目标,并在技能上互补,共同朝着目标贡献自己的力量,这就是一个优秀的开发团队应有的状态。
干货来啦!****推荐书单/论文
专业书单:
《重构——改善既有代码的设计》MartinFowler
《代码整洁之道》 RobertC. Martin
《Java开发规约中文版 》阿里巴巴集团约码项目组
kubernetes官方文档
敏捷软件开发 原则、模式与实践——solid原则
Design Pattern(在solid原则之上的维度)——软件方面,关键定势、素养。模板,下围棋的棋谱、固定的招式的感觉。落地上述几个原则的固定套路
code complete ——技术类的百科全书
clean code ——关于代码风格的
彩蛋书单:
程序猿必读生存指南
互动话题:
请告诉我你所在专业领域的实用书单?
在推文下面留言,且获得点赞最多的前7位,即可获得爱奇艺定制的精美礼品哦~
end
也许你还想看
那些你不知道的程序员的多重身份
代码质量提升之道——代码覆盖率原理与移动端工程实践
扫一扫下方二维码,更多精彩内容陪伴你!
本文分享自微信公众号 - 爱奇艺技术产品团队(iQIYI-TP)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。