5分钟带你领略写出优美代码的核心要素(内含 感恩节彩蛋)

Wesley13
• 阅读 651

【导语】

马丁(Robert C. Martin)撰写的《代码整洁之道》(Clean Code)一书中提出了代码质量与其整洁度成正比,干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础,并由此揭示代码整洁之道。文中讲述了:当你在做 Code Review 时,从审查者的言辞平静或是激烈的词语中,可以领略到你写的代码是Bad Code还是 Good Code,这或许是工程师们经常会遇到的场景,能否写出“优质”的代码,或许也是考核一个“优质”的程序猿必解难题。

代码就是程序猿/工程师们的武器。 代码的不规范会带来很多负面影响,比如对审查阅读时的不方便,后期维护的复杂度也会随之增加,降低团队的工作效率。 最重要的是,不规范的代码也可能不小心中埋下bug,比如参数、异常处理、日志等不规范都会让你背锅。 优雅的代码读起来让人赏心悦目、通俗易懂,对后期重构也大有帮助。

在感恩节到来之际,我们要向程序员们送出感恩节小福利——向一直以来奋斗于工作岗位的他们说一声“谢谢”,感谢一起不断追求卓越的技术伙伴们,殊不知他们指尖下的一行行代码赋予了视听更加美妙的体验~

5分钟带你领略写出优美代码的核心要素(内含 感恩节彩蛋)

为了帮助大家更多了解“关爱“程序员群体,也帮助程序猿进行经验的交流和分享。小编特意邀请了5位优秀的爱奇艺程序猿葛葛,用他们多年从业经验,为大家讲讲程序员写代码的那点儿事儿~

好的代码长啥样?

关键词一

易读性

“大家可能都觉得可读性太easy了,其实看似最简单的确实最难做到的。”

软件开发方面著名作者和国际知名演说家MartinFowler 说过:“任何一个傻瓜都能写出计算机可以理解的代码。唯有写出人类容易理解的代码,才是优秀的程序员。”

代码的第一阅读对象是人,其次才是机器。可阅读性应该是代码的首要标准之一。因为写代码不是一项单打独斗的工作,不能自说自话,而是需要一个团队的配合,因此能够让别人读懂你的代码,是一件非常重要的事情。其次,写一个“人能看懂”的代码更大的好处在于提高其可维护性,大部分的代码完成之后至少需要跑个几年以上,代码的开发其实只占整个产品生命周期的一小部分,大部分时间则是用于维护。Bug已经很令人忧伤了,如果准备改bug的时候发现代码写的还不是“人话”,那真的是非常的“秃然”了。所以一定要可读才易于维护,但可读性也仅仅是爱奇艺程序员对自己的最低要求。

关键词二

可扩展性

如果说易读性是个基础性需求,那么可扩展性就是爱奇艺程序员高一段位的“进阶要求”了。互联网时代“先开枪,后瞄准”,在爱奇艺创新和效率是我们的制胜法宝。****所有的产品都在不断的更新迭代中,因此对于产品的可扩展性要求就非常高。

可扩展性追求的是在不修改原有代码的情况下,可以去扩展更多功能,其优点就是效率高,减少开发成本。也就是贴合了我们所强调的“既要低头拉车,也要抬头看路。”在完成现有产品需求的基础上,多想几步,为“未来”铺路。

关键词三

高内聚低耦合

高内聚低耦合也是爱奇艺程序员评判代码好坏的标准之一。

“高内聚”是用来普遍评判软件设计质量的标准,行话叫做“功能内聚“,高内聚要求软件系统中的各个元素具有较高的协作性,因为在我们在完成软件需求中的一个功能,可能需要做各种事情,但是具有高内聚性的一个元素,只完成它职责内的事情,而把那些不在它职责内的事情拿去请求别人来完成。

"耦合“是对某元素与其它元素之间的连接、感知和依赖的量度。而“低耦合”则是指要将自己的模块和其他模块的边界划分清楚,降低相互依赖性,尽量避免“牵一发而动全身“的事情发生。实现“高内聚低耦合”能有效地提高代码可维护性及维护成本,还可提高其可变更性。

5分钟带你领略写出优美代码的核心要素(内含 感恩节彩蛋)

写代码的时候

有什么好的习惯、经验分享?

工具一

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

也许你还想看

那些你不知道的程序员的多重身份

代码质量提升之道——代码覆盖率原理与移动端工程实践

5分钟带你领略写出优美代码的核心要素(内含 感恩节彩蛋)

扫一扫下方二维码,更多精彩内容陪伴你!

5分钟带你领略写出优美代码的核心要素(内含 感恩节彩蛋)

本文分享自微信公众号 - 爱奇艺技术产品团队(iQIYI-TP)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
劳伦斯 劳伦斯
3年前
JavaScript 代码整洁之道
作者:alivebao(https://github.com/alivebao/cleancodejs)
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
JavaScript 代码整洁之道
代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。本文并不是代码风格指南,而是关于代码的可读性、复用性、扩展性探讨。我们将从几个方面展开讨论:1.变量2.函数3.对象和数据结构4.类5.SOLID
Stella981 Stella981
2年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
2年前
JOptionPane修改图标
1.在Linux平台下.JOptionPane会显示Java默认的图标,在window平台不显示图标,如何替换这个图标了?2JOptionPane.setIcon(Icon)修改的是内容区域的icon,而不是左上角的Icon.所以需要通过修改Jdialog/Frame的图标来达到修改默认图标的问题.3.代码:if(JOptio
京东云开发者 京东云开发者
6个月前
代码的艺术-Writing Code Like a Pianist | 京东云技术团队
如何评定一个系统的质量?什么样的系统或者软件可以称之为高质量?本文将从主观和客观的角度,和大家探讨一下,作为程序员,应该如何写出整洁高质量的代码。
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这