代码精进之路 / 你写的每一行代码都是你的名片
范学雷
Oracle首席软件工程师,Java SE安全组成员,OpenJDK评审成员
 
  • 课程目录
  • 课程介绍
  • 开篇词 | 你写的每一行代码,都是你的名片

    写代码这件事,还真的有点“看山是山,看山不是山,看山还是山”的味道。

  • 01 | 从条件运算符说起,反思什么是好代码

    写代码,不仅仅是一个人的事情。

  • 02 | 把错误关在笼子里的五道关卡

    优秀的代码,都经历了哪几道重重关卡?

  • Q&A加餐丨关于代码质量,你关心的那些事儿

    今天和你分享一下几个同学关心的问题,也许对你也有帮助。

  • 03 | 优秀程序员的六个关键特质

    看一下你是不是也有这些特质呢?

  • 04 | 代码规范的价值:复盘苹果公司的GoToFail漏洞

    作为程序员,我们需要对代码有一种“洁癖”。

  • 05 | 经验总结:如何给你的代码起好名字?

    计算机科学只有两件难事,废弃缓存和取名字。取名字有哪些需要注意的地方?

  • 06 | 代码整理的关键逻辑和最佳案例

    整理代码,就像写文章一样,要层次分明,条理清楚。

  • 07 | 写好注释,真的是小菜一碟吗?

    写好注释,需要注意哪几点?

  • 08 | 写好声明的“八项纪律”

    声明作为我们和标识符初次见面的地方,第一印象也就显得非常重要了。那么怎么声明一个标识符呢?

  • 09 | 怎么用好Java注解?

    什么情况下可以使用Java注解?

  • 10 | 异常处理都有哪些陷阱?

    上一讲中我们聊了聊怎么用好Java注解,今天我们谈谈怎么处理异常。

  • 11 | 组织好代码段,让人对它“一见钟情”

    前面的几讲中,我们讨论了注释、声明、格式、注解等编码规范。现在,是时候把这些零散的知识放到一块儿了。

  • 12丨组织好代码文件,要有“用户思维”

    上一讲中,我们讲了如何组织代码段,今天我来讲下,如何组织代码文件。

  • 13 | 接口规范,是协作的合约

    对于接口规范,我们要有意识地使用下面的这条原则:接口规范是使用者和实现者之间的合约。

  • 14 | 怎么写好用户指南?

    一份合格的用户指南,要帮助用户减少产品使用的障碍,快速地使用产品。

  • 15 | 编写规范代码的检查清单

    今天要讲的这个清单,是我看代码的时候,通常会使用的检查点。你也可以参考一下。

  • 16丨代码“规范”篇用户答疑

    今天,我来解答一下留言里的一些疑问。这里挑选一些还没有解决掉的问题,深入讨论一下。

  • 17 | 为什么需要经济的代码?

    从今天起,我们来聊聊怎么让代码“跑得又快又好”。

  • 18丨思考框架:什么样的代码才是高效的代码?

    代码的性能是关于如何管理内存、磁盘、网络和内核等计算机资源的。该怎么衡量这些资源管理的好坏呢?

  • 19 | 怎么避免过度设计?

    影响代码效率的最重要的两件事情,就是需求的膨胀和过度的设计。

  • 20 | 简单和直观,是永恒的解决方案

    影响代码效率的两个最重要的因素,需求膨胀和过度设计。今天,我们来聊聊怎么解决这些事情。

  • 21 | 怎么设计一个简单又直观的接口?

    接口设计的困境,大多数来自于接口的稳定性要求。摆脱困境最有效的一个方法就是要保持接口的简单直观。

  • 22丨高效率,从超越线程同步开始!

    线程的同步是学习一门编程语言的难点。刚开始线程同步的困难,主要在于了解技术;跨过了基本技术的门槛后,更难的是掌握最基本的概念。

  • 23 | 怎么减少内存使用,减轻内存管理负担?

    管理内存,向来都是一个难题。要想让内存使用得更有效率,我们需要掌握一些成熟的实践经验。

  • 24 | 黑白灰,理解延迟分配的两面性

    延迟分配是用来减少运行时的实例数量的一个重要的思路。

  • 25 | 使用有序的代码,调动异步的事件

    今天,我们讨论一下异步的一些基本概念,以及异步对于效率提升的作用。

  • 26 | 有哪些招惹麻烦的性能陷阱?

    今天,我们主要讨论一下哪些容易被忽略的性能陷阱,以及它们的解决方法。

  • 27 | 怎么编写可持续发展的代码?

    这一次,我们就来讨论代码的规模扩张能力,以及一些常见的陷阱。

  • 28 | 怎么尽量“不写”代码?

    这一次,我们讨论代码复用的问题。商业的规模依赖于可复制性,代码的质量依赖于可复用性。

  • 29 | 编写经济代码的检查清单

    今天,我们一起把前面讨论到的观点总结一下,并探索一下编写经济代码时的最佳实践检查清单。

  • 30丨“代码经济篇”答疑汇总

    到这一篇文章,意味着专栏第二模块已经更新完毕。今天,我来集中解答一下留言区,还没有解决掉的一些疑问。

  • 31 | 为什么安全的代码这么重要?

    今天,我们通过一个具体的安全漏洞的案例,来感受下计算机代码是多么的脆弱。

  • 32 | 如何评估代码的安全缺陷?

    今天,我们讨论一下如何评估软件存在的缺陷问题,以及安全缺陷的评价标准。

  • 33 | 整数的运算有哪些安全威胁?

    今天,我想和你聊聊,那些“道理我都懂,但代码就是写不好”的老顽固问题。

  • 34 | 数组和集合,可变量的安全陷阱

    今天我们通过一个案例,来体会一下数组和集合都会带来哪些安全陷阱?

  • 35 | 怎么处理敏感信息?

    在互联网世界里,敏感信息真的是无处不在,你知道有哪些编码技术可以保护敏感信息吗?

  • 36 | 继承有什么安全缺陷?

    成熟技术发展的背后,需要做出一些小妥协。我们该如何妥当处理这些小妥协呢?

  • 37 | 边界,信任的分水岭

    边界是信息安全里一个重要的概念,我们该如何守护好边界呢?

  • 38 | 对象序列化的危害有多大?

    序列化是一个美妙的想法,但是为了实现这种美妙,我们又付出了怎样的代价?

  • 39 | 怎么控制好代码的权力?

    我们讨论过“敏感信息经过授权才可以使用”的这样一条实践。授权使用信息和资源,需要遵循“最小授权”的原则。

  • 40 | 规范,代码长治久安的基础

    如果从安全角度去考察,软件是非常脆弱的。该怎么保持代码的长治久安呢?

  • 41 | 预案,代码的主动风险管理

    做好代码的风险预案,是我们管理风险的一个很重要的手段。

  • 42 | 纵深,代码安全的深度防御

    前面我们聊了保持代码长治久安的两个策略,这一次,我们接着聊代码安全管理的另外一个策略:纵深防御。

  • 43 | 编写安全代码的最佳实践清单

    当大家看到“最佳实践清单”这个标题的时候,就意味着这一个模块又到了总结的时候了

  • 44 | “代码安全篇”答疑汇总

    今天,我来集中解答一下留言区里的一些疑问。

  • 45 | 尾声:如何成为一个编程好手?

    这个专栏设立的愿景,是想要传达编写优秀代码的理念,帮助你保持长久的竞争力。

2014年2月,安全研究人员爆出苹果公司旗下的iOS和OS X操作系统出现了严重的安全漏洞,黑客可以利用这一漏洞轻松获取用户的数据。

    if ((error = doSomething()) != 0)
        goto fail;         
        goto fail;    
    if ((error= doMore()) != 0)        
        goto fail;
fail:    
    return error;

其实这个漏洞产生的原因仅仅是因为出现了一行多余的代码,导致后面的其他代码“失效”,这一低级错误也让所有的安全人员大跌眼镜。你可能会说,这开发人员真是太粗心了,是不是他复制代码的时候,多复制了一行,然后忘记删除了?

可能是这个原因,但问题的源头肯定不是粗心。有专家在看完了代码文件之后,发现相关的bug代码没有正确使用缩进,也没有正确使用括号,并且其中的空格、制表符和代码注释也都不统一。

你看,苹果公司的这个案例给我们上了教科书般的一课,深刻地告诉我们编程的基础能力是有多么重要。一个小小的疏忽,可能就会造成严重的后果。

编写安全、高效、易读和可扩展的代码,是每一个程序员的毕生追求。那到底怎么才能实现这个目标呢?

为此,我们邀请到了范学雷老师,他将带你开启一段代码精进之旅。

范学雷,Oracle首席软件工程师,Java SE安全组成员,OpenJDK评审成员。范学雷是Java SE安全的主要推动者和贡献者之一,也是Java语言平台的设计实现者之一。

在专栏里,他将带着自己20多年的编程心得和丰富的代码评审经验,围绕代码的规范、经济和安全三个方面展开讲解,选取实际工作中最常遇到的40多个经典细节,通过多种语言来描述,帮你纠正错误的编码认知,带你挖掘实际工作场景中的编码隐患,教给你最具体实用的优化方案,一起培养良好的编码习惯,写出优秀的代码。

专栏模块

专栏共45期,分为4个模块。

  • 认知篇

什么样的代码是优秀的代码?如何才能写出优秀的代码?优秀的软件工程师什么样?这一模块将为你清楚介绍优秀代码的准则和达成路径,其中的核心认知将贯穿每一个程序员的编程生涯。

  • “规范”修炼篇

怎么给你的代码起好名字?写好注释很容易吗?异常处理都有哪些陷阱?这一模块将带你讨论代码规范的十个关键维度,结合正反面案例,手把手教你编写规范的代码。

  • “经济”修炼篇

Java垃圾管理器可以提高多少效率?列表查询速度可以提高多少?这些问题都能通过编写“经济”的代码搞定。这一模块将带你深入十余个编码细节,教你写出维护性高、兼容性好的高质量代码。

  • “安全”修炼篇

代码安全是老生常谈的问题,一个疏忽的小细节就有可能造成一个大漏洞。这一模块将从案例入手,教你规避编码过程中常见却又容易疏忽的安全隐患,编写“牢固”的代码。