“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

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"); }}
复制代码


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


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


公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2019-05-16 15:049299

评论

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

IDM下载器软件2024中文版

茶色酒

idm下载

webpack高级配置

Geek_02d948

JavaScript 前端

自建MQTT迁移IoT物联网平台实战——实践类

阿里云AIoT

监控 物联网 消息中间件 数据格式 网络性能优化

vue实战-深入响应式数据原理

yyds2026

Vue 前端

从0到1,亿级消息推送的稳定性保障 | 得物技术

得物技术

稳定性 消息推送

2023前端vue面试题(边面边更)

yyds2026

Vue 前端

更专业的出海服务商,融云荣膺 GTC2022 鲸鸣奖「优秀出海服务商」

融云 RongCloud

出海

面向复杂业务场景下的低代码平台组件设计与实践分享

百度开发者中心

低代码平台 amis

Zabbix 官方推荐的标签使用准则

北海

运维 zabbix 标签 IT运维 tag

致远互联2022年度净利9946.37万,研发投入增加;从人出发,人即流程、人即绩效

B Impact

设备端资源包文件(人脸库,音频库,图片资源等)更新方案——实践类

阿里云AIoT

阿里云 物联网 IoT 对象存储

京东物流实时风控实践

Apache Flink

大数据 flink 实时计算

企业IM即时通讯软件:就选安全稳定、自主可控的WorkPlus

WorkPlus

即刻下载|连锁零售数字化转型难?领先企业实践助你打开新思路

Kyligence

大数据分析 指标中台

物联网平台企业版:设备接入实例节点开发实战——实践类

阿里云AIoT

监控 前端开发 物联网 数据处理 网络性能优化

深度探讨react-hooks实现原理

xiaofeng

前端 React

深度剖析React懒加载原理

xiaofeng

前端 React

索信达宣布接入百度文心一言能力 加速推进AI在金融场景落地应用

索信达控股

FL Studio推出全新21中文版水果工具

茶色酒

FL Studio 21

前端监控稳定性数据分析实践 | 得物技术

得物技术

前端 前端监控 客服业务

百度百舸 · AI 异构计算平台,加速自动驾驶模型迭代

百度开发者中心

人工智能 自动驾驶 计算 AIIaaS

前端一面react面试题指南

xiaofeng

前端 React

iOS应用发布ITMS-90704错误解决

雪奈椰子

美团前端经典vue面试题总结

yyds2026

Vue 前端

得物供应链复杂业务实时数仓建设之路

得物技术

数据库 大数据 技术架构

融云「百幄」系列产品,两组套件、三类价值赋能政企八大业务场景

融云 RongCloud

产品 办公 百幄

党政军IM私有化搭建,WorkPlus构建军工行业即时通讯安全底座

WorkPlus

OpenCloudOS 如何利用 nettrace 进行网络故障诊断

OpenCloudOS

Linux

vue实战-完全掌握Vue自定义指令

yyds2026

Vue 前端

美团前端二面常考react面试题及答案

xiaofeng

前端 React

信息安全“狂飙”不止,WorkPlus为政企数字化保驾护航

WorkPlus

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