AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

20 年编程老兵的代码价值观 | 极客时间

  • 2019-05-16
  • 本文字数:1647 字

    阅读完需:约 5 分钟

20年编程老兵的代码价值观 | 极客时间

代码,是我们交流的语言和处世的名片,更是未来你找工作的简历。


你好,我是范学雷,我想和你来聊聊“怎么写好代码”这件事。


2014 年 2 月,安全研究人员爆出苹果公司旗下的 iOS 和 OS X 操作系统出现了严重的安全漏洞,黑客可以利用这一漏洞轻松获取用户的数据。下面的这段 C 语言伪代码简单描述了当时的漏洞情况。


    if ((error = doSomething()) != 0)        goto fail;                 goto fail;        if ((error= doMore()) != 0)                goto fail;fail:        return error;
复制代码


相信你一眼就能看出来,在这段代码的第三行出现了多余的代码,导致后面的其他代码“失效”,这一低级错误也让所有的安全人员大跌眼镜。你可能会说,这开发人员真是太粗心了,是不是他复制代码的时候,多复制了一行,然后忘记删除了?


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


换句话说,这段代码就是所谓的“烂代码”。


工作中,你要是说谁的代码烂,那我估计很快你就会挑起一场战争。因为对于烂代码和好代码的定义,真的是千人千面。现实环境的变化,也影响着你我对于代码“好”与“坏”的判断标准。


虽然对于“什么是优秀的代码“难以形成一致意见,但是这么多年的经验,让我对代码“好”与“坏”积累了一些自己的看法。


“好”的代码应该:


  1. 容易理解;

  2. 没有明显的安全问题;

  3. 能够满足最关键的需求;

  4. 使用规范的命名;

  5. 经过充分的测试。


“坏”的代码包括:


  1. 难以阅读的代码;

  2. 浪费大量计算机资源的代码;

  3. 代码风格混乱的代码;

  4. 复杂的、不直观的代码;

  5. 没有经过适当测试的代码。


当然,上面的列表还可以很长很长,长到一篇文章都列不完、长到我们都记不住的程度。如果用一句话来概括的话,我觉得“最适合当前现实环境的代码,才是最优秀的代码。”我将会在极客时间上的专栏《代码精进之路》中详细阐述这句话的含义。

我是谁?

我是范学雷,现在是 Oracle 的主任工程师,也是 OpenJDK 和 Java 安全的评审成员。从 1998 年我参加工作以来,一直在一线从事编程工作,期间在 OpenJDK 社区参与代码评审的工作。作为一个代码评审者,不是批准或者拒绝提交的代码,而是提出合理的建议,帮助代码提交者规避这些失误或者错误,编写出更优秀的代码。


作为解决现实问题的软件工程师,不管资历深、资历浅,我们都需要编写优秀的代码,并且是越来越优秀的代码,因为这是我们生存的基本依靠。作为活在现实世界的技术工程师,我们需要保持长久的竞争力,甚至是越来越强的竞争力,因为这是改善我们生存质量的最好方式。


我常和一些程序员说:“每一行代码,都体现着程序员的修为,思考问题的深度,甚至是处理问题的习惯和态度。代码,是我们交流的语言和处世的名片,更是未来你找工作的简历。”

这个专栏我会讲些什么?

我会围绕代码的规范、性能和安全三个方面展开,选取工作中遇到的最高频的、实用的细节问题,从重要性、易犯错的场景以及最优的处理方案等角度来讲解,让你知道好的代码应该怎么写,怎么定义好的代码。

互动讨论

import java.util.HashMap;import java.util.Map;
class Solution { /** * Given an array of integers, return indices of the two numbers * such that they add up to a specific target. */ public int[] twoJia(int[] nums, int target) { Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { int complement = target - nums[i]; if (map.containsKey(complement)) return new int[] { map.get(complement), i }; map.put(nums[i], i); } throw new IllegalArgumentException("No two sum solution"); }}
复制代码


这段代码中你发现了几个错误呢?同时可以在留言区秀秀你最中意的代码,或者吐槽一下你今年遇到的那些烂代码,并且给你造成了哪些困扰呢?


内容选自极客时间代码精进之路专栏


2019-05-16 15:049543

评论

发布
暂无评论
发现更多内容

云上玩转DeepSeek系列之六:DeepSeek云端加速版发布,具备超高推理性能

阿里云大数据AI技术

人工智能 阿里云 模型部署 PAI DeepSeek

MCP Server 实践之旅第 1 站:MCP 协议解析与云上适配

阿里巴巴云原生

阿里云 Serverless 云原生 MCP

Redis可视化神器!Redis Desktop Manager 让数据库管理如此简单

Rose

Web3项目开发框架及性能

北京木奇移动技术有限公司

软件外包公司 web3开发 web3外包公司

Go Context 最佳实践

俞凡

golang 最佳实践

从企业数智化四阶段解读 TiDB 场景价值

PingCAP

数据库 #TiDB

HarmonyOS SDK助力鸿蒙版今日水印相机,真实地址防护再升级

HarmonyOS SDK

harmoyos

时序数据库 TDengine 助力石油石化业务, 平滑接替 Oracle 数据库

TDengine

数据库 tdengine 时序数据库

Microchip推出面向边缘人工智能应用的新型高密度电源模块MCPF1412

新消费日报

从边缘到云端,如何通过时序数据库 TDengine 实现数据的全局洞

TDengine

数据库 tdengine 时序数据库

苹果电脑免费截图工具:iShot for Mac

Rose

案例分享|基于 Altair SimSolid 的大型通用工装结构力学仿真分析及试验对标

Altair RapidMiner

仿真 CAE 有限元仿真 SimSolid 无网格技术

Dify+DeepSeek实战教程!企业级 AI 文档库本地化部署,数据安全与智能检索我都要

北京好雨科技有限公司

知识库 rainbond 企业号 4 月 PK 榜 dify DeepSeek

APTSell x TiDB AutoFlow:AI 数字员工,助力销售业绩持续增长

PingCAP

数据库 TiDB

(JS实现编辑DWG)AI实现网页CAD多行文本开发

WEB CAD SDK

AI编程 网页CAD 在线CAD AI协助CAD二次开发

阿里巴巴十亿级并发系统设计:实现高并发场景下的稳定性和高性能

程序员高级码农

Java 程序员 高并发‘’

开发者的终极选择!为什么顶级公司都在用DBeaver EE?

Rose

AI加持的修图革命!Lightroom 2024 智能调色一键惊艳

Rose

演讲实录:中小企业如何快速构建AI应用?

阿里云大数据AI技术

人工智能 云计算 大数据 阿里云

AI 乱写代码怎么破?使用 Context7 MCP Server 让 AI 写出靠谱代码!

Se7en

华为音乐走进西安交大“白鸽音乐节”,一起“碰”进春日音浪

最新动态

5 分钟搞定防御性编程:打造稳健的软件

俞凡

架构 最佳实践

数据分析与AI|面对 RapidMiner 一万多行汉化翻译难题:中国工程师如何直接实现自动翻译?

Altair RapidMiner

AI 数据分析 RapidMiner 人工智能平台

PingCAP“一号员工”唐刘:回顾我与 TiDB 的十年成长之旅

PingCAP

数据库 TiDB

火山引擎✖️希沃:助力1000万教师用上AI助手

新消费日报

区块链ETF的功能及开发

北京木奇移动技术有限公司

区块链技术 软件外包公司 区块链ETF

UX设计神器,Axure RP 9 让交互设计如此简单!

Rose

当东哥开始卷外卖:奶茶砍半价比拼多多还狠!附京东面试题

王中阳Go

面经 京东

企业AI落地指南系列文章:AI应用开发平台选型六大核心评估维度

UniverAI智宇苍穹

评估标准 开发平台 AI工程化 企业 AI 应用 AI落地

智象未来x商汤大装置:全栈赋能全球首个开放使用视频生成DiT模型

Lily

一家家具厂,如何用零代码搭建自己的 ERP ?

NocoBase

开源 低代码 零代码 ERP 家具行业

20年编程老兵的代码价值观 | 极客时间_语言 & 开发_范学雷_InfoQ精选文章