你如何定义好的代码?本文通过咨询65个开发人员同一个问题从而得出了一个伪科学的答案。

首先我们相信写好代码是非常重要的。为什么呢?首先,好代码比差代码更有趣,成本更低。其次,代码好,就意味着你正在构建的产品有可能会更好。第三,也是非常关键的一点,写出好的代码是我们的职责:毕竟,我们的工作就是写代码。

方法

由于此65名开发人员都是我们某个职位的应聘者,所以这意味着这些样品开发人员大多偏向于使用Java或Scala技能,并且通常有着5年及以上的工作经验。

问题统一:“怎样写好代码?你如何定义好代码?”并且在面试时由同一人(面对面或通过电话),历时约1年,从2014年1月至2015年1月,来执行此地调查。

梳理这些问题的答案之后,可以分为31个不同的类,每组至少有2个相似的答案。例如,下面这些答案通通归纳为可读一类:
可读。

  • 人脑可阅读。

  • 能自我解释。

  • 人们能读懂。

  • 很容易理解。

  • 不用5分钟就能了解。

  • 没有文档,你也可以阅读并理解。

  • 可读,新来的开发人员也能够理解。

  • 就如同文本一样可读。

  • 易于阅读,直线化的思维。

结果

这65位开发人员的答案总共统计出288条不同的内容,平均一个人4.43条。

当然,目前最常见的答案是,代码必须可读(78.46%),几乎10分之8的开发人员认为,好的代码应该易于阅读和理解。

然后是可测试的/测试过的(29.23%),这说明好的代码应当是经过自动化测试的(或至少是有可能执行测试的)。25%的受访者认为,良好的代码 还应该是简单的——不过于复杂,当然还应该是可以工作的,意味其能够按照我们的意愿正常执行功能。前五条是,代码应该是可维护的(21.54%)。

奇怪的是,我们发现有两项内容是关于同一主题的:文档和代码注释。有的开发人员认为代码应该自文档化(不需要用文档解释),而有些开发人员则表示应该在代码中着重于注解,说明代码目的。

其他的,如,可扩展的/可重复使用的,恰当的命名规律,代码解耦或者称为小方法的重要性——当然这个“小”在不同开发人员的眼中概念还不一样:“10-15行”到“<50行”莫衷一是。

探讨

面试中的回答给了我们很多有趣的可用于分析的定量数据,而有些数据非常值得一提。下面这些是我们点赞量最多的答案,有的让我们会心一笑,有的有理有据值得深思:

  • 再怎么测试也不会发生崩溃。

  • 不要创建那些并不需要的玩意儿。

  • 任何人都需要写点注释。好不好以后自然会知道。

  • 你看到它,它才有意义。

  • 你需要了解业务目的。

  • 你需要做的不仅仅是写代码。

  • 不需要太过于特立独行。

  • 差的代码也能做很多事情,但就是通通做不好。

开发人员重视代码的可读性和可理解性并不奇怪。但是令人有一点点惊讶的是,其余的回答却差不多至少有50%的差异!

以下这四条就属于让人惊讶的后者:

  • 可维护:因为我们大多数人都有过维护别人代码的经历(或者一段时间以后维护自己的代码),并且很有可能度过了一段非常悲惨的日子。所以,我们期待更多的开发人员能够编写出可维护的代码。可能有的人假设代码可读,那么一定易于维护,所以就忽略了这一条。

  • 可工作:编写代码的目的,就是能够为他人提供价值。编写可工作的代码,是我们的首要任务之一。所以我们很惊讶为什么并不是每一个开发人员的答案中都囊括这一条。

  • 可测试/已测试过的:测试的重要性在这里我就不多说了,相信大家已经听到过不知道几百遍了。

  • 高效:话说,答案中包含“高效”的开发人员比强调“不可过早优化”的开发人员,要多两倍,而众所周知,“过早的优化是万恶之源”,所以,这太让人纳闷了。

最后,我们总结出好代码的定义:

“好的代码是可读的,可理解的,覆盖了自动化测试的,不过于复杂,并且能办好我们需要它做的事情。”

听起来就相当美,right?

作者:小峰

来源:51CTO

什么样的代码为好代码?好代码的科学定义相关推荐

  1. 实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    贺邦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数 ...

  2. Lombok!代码简洁神器还是代码“亚健康”元凶?

    以下文章来源方志朋的博客,回复"666"获面试宝典 关于Lombok,DD是一个重度用户,从我编写的Spring Boot教程还是Spring Cloud教程中,都可以看到几乎每个 ...

  3. java中普通代码块,构造代码块,静态代码块的区别及代码示例

    本文转自:http://www.cnblogs.com/sophine/p/3531282.html 执行顺序:(优先级从高到低)静态代码块>main方法>构造代码块>构造方法. 其 ...

  4. Java中普通代码块,构造代码块,静态代码块区别

    Java中普通代码块,构造代码块,静态代码块区别及代码 示例 //执行顺序:(优先级从高到低.)静态代码块>mian方法 >构造代码块>构造方法. 其中静态代码块只执行一次.构造代码 ...

  5. 代码和普通的java_Java中普通代码块,构造代码块,静态代码块区别及代码示例...

    对静态代码块以及构造函数的执行先后顺序,一直很迷惑,看了孙伟琴老师的<java面向对象编程>又结合毕老师的java基础视频中的讲解,现用下面的这段小程序来简明扼要的叙述一下,以加深理解,与 ...

  6. vim代码格式化自动加空格_vim格式化代码实际上就是 缩进代码, 命令是等号=

    vim格式化代码实际上就是 "缩进代码", 命令是等号= 格式化就是 vim 根据 文件的类型, 自动的对代码进行 缩进 缩进的类型有多种, 都是用等号命令: = 全部格式化 : ...

  7. 回滚master代码_[转]Git 代码撤销、回滚到任意版本(当误提代码到本地或master分支时)...

    两种情况(场景) 情况一 代码还只在本地,未push到运程仓库,想把代码还原到上一次commit的代码,此时操作为代码撤销 解决方案: 情况二 代码已经push到运程仓库,想把代码还原到上一次提交,此 ...

  8. 修改vb6的编译器c2.exe使它可以输出汇编代码_xv6笔记-启动代码分析

    首先看xv6 commit的第一个makefile OBJS = main.o CC = i386-jos-elf-gcc LD = i386-jos-elf-ld OBJCOPY = i386-jo ...

  9. c java 开发android_java代码与纯C代码混编完成android应用的开发

    在我们这个java与C语言的调用中,分为两个部分, 第一部分是java语言调用C语言的C库,也就是java调C; 第二部分是C语言调用java语言. 这里我主要讲解一下第一种java语言调用C库 这里 ...

  10. 说好的敬畏每一行代码呢?Antd代码彩蛋炸翻一圈人

    对于开源项目来说,一个细微的改动就会影响到无数使用该项目的产品.公司.生产环境.阿里是中国开源的先锋公司,对于事故的处理也一直都很有担当,阿里云"敬畏每一行代码,敬畏每一份托付"曾 ...

最新文章

  1. How does “Coded UI test” finds a control ?
  2. 推荐 7 个牛哄哄 Spring Cloud 实战项目
  3. SAP Fiori Elements 应用 manifest.json 文件里 resources.json 的含义
  4. Linux怎么把目录设置群组,linux设置目录和文件使用权限
  5. 利用Dockefile将Python的py文件项目代码打包为Docker镜像
  6. CCF201803-4 棋局评估(100分)【博弈+DFS】
  7. 企业数据采集的10个经典方法
  8. idea配置阿里格式化模板+注释模板
  9. ASP.net开发实践系列视频教程(总共53课) 天轰穿新的视频
  10. 软件工程师典藏 C# 程序开发范例宝典 第3版
  11. 分享一个麻将听牌算法(带癞子)(Lua)
  12. 企业里Win10 开启BitLocker锁定磁盘,如何备份系统,当系统出现问题又如何恢复,快速恢复又兼顾系统安全
  13. 大学物理复习4-保守力(做功)+功能原理+机械能守恒
  14. c mysql读取text_c 读入txt 数据库
  15. Github每日精选(第79期):虚拟数据生成库faker
  16. VS添加动态链接库的两种方法
  17. Go实战--使用golang开发Windows Gui桌面程序(lxn/walk)
  18. 虚拟主播频繁爆火,想了解虚拟主播的制作过程看这里
  19. 计算机房等电位,计算机房屏蔽及等电位防护措施(原稿)
  20. 此平台不支持虚拟化的 Intel VT-x/EPT。 不使用虚拟化的 Intel VT-x/EPT,是否继续?

热门文章

  1. 创建符合标准的、有语意的HTML页面——ASP.NET 2.0 CSS Friendly Control Adapters 1.0发布...
  2. 【转载】Java异常控制机制和异常处理原则
  3. 管理员用户SDE默认权限
  4. 【Maven学习】Nexus私服代理其他第三方的Maven仓库
  5. 《电子基础与维修工具核心教程》——2.6 节点分压原理
  6. 《Adobe Illustrator CC 2014中文版经典教程(彩色版)》—第1课0.15节创建剪切蒙版...
  7. Apache安装80端口被占用解决方案
  8. AudioStreamer电话打进时崩溃
  9. Windows7下最新Android开发环境搭建(JDK1.7 + Eclipse Indigo(3.7) + SDK-r12 + ADT-12)
  10. #ifndef、#def、#endif宏