好代码的伪科学定义

郝萌主倾心贡献。尊重作者的劳动成果,请勿转载。

假设文章对您有所帮助,欢迎给作者捐赠。支持郝萌主,捐赠数额任意,重在心意^_^

我要捐赠: 点击捐赠

Cocos2d-X源代码下载:点我传送

游戏官方下载:http://dwz.cn/RwTjl

游戏视频预览:http://dwz.cn/RzHHd

游戏开发博客:http://dwz.cn/RzJzI

游戏源代码传送:http://dwz.cn/Nret1

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

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

方法

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

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

梳理这些问题的答案之后。可以分为31个不同的类,每组至少有2个类似的答案。

比如。以下这些答案通通归纳为可读一类:
可读。

  • 人脑可阅读。

  • 能自我解释。
  • 人们能读懂。
  • 非常easy理解。
  • 不用5分钟就能了解。
  • 没有文档。你也可以阅读并理解。
  • 可读,新来的开发者也可以理解。
  • 就如同文本一样可读。
  • 易于阅读,直线化的思维。

结果

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

当然,眼下最常见的答案是,代码必须可读(78.46%),差点儿10分之8的开发者觉得,好的代码应该易于阅读和理解。

然后是可測试的/測试过的(29.23%),这说明好的代码应当是经过自己主动化測试的(或至少是有可能运行測试的)。25%的受訪者觉得,良好的代码还应该是简单的——只是于复杂,当然还应该是可以工作的,意味其可以依照我们的意愿正常运行功能。前五条是,代码应该是可维护的(21.54%)。

奇怪的是,我们发现有两项内容是关于同一主题的:文档和代码凝视。

有的开发者觉得代码应该自文档化(不须要用文档解释)。而有些开发者则表示应该在代码中着重于注解,说明代码目的。

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

探讨

面试中的回答给了我们非常多有趣的可用于分析的定量数据,而有些数据非常值得一提。

以下这些是我们点赞量最多的答案,有的让我们会心一笑,有的有理有据值得深思:

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

  • 不要创建那些并不须要的玩意儿。
  • 不论什么人都须要写点凝视。好不好以后自然会知道。
  • 你看到它。它才有意义。
  • 你须要了解业务目的。
  • 你须要做的不只是写代码。
  • 不须要太过于特立独行。

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

开发者重视代码的可读性和可理解性并不奇怪。

可是令人有一点点吃惊的是,其余的回答却差点儿相同至少有50%的差异。

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

  • 可维护:由于我们大多数人都有过维护别人代码的经历(或者一段时间以后维护自己的代码),而且非常有可能度过了一段非常悲慘的日子。所以,我们期待很多其它的开发者可以编写出可维护的代码。可能有的人假设代码可读,那么一定易于维护。所以就忽略了这一条。
  • 可工作:编写代码的目的。就是可以为他人提供价值。

    编写可工作的代码,是我们的首要任务之中的一个。所以我们非常吃惊为什么并非每个开发者的答案中都囊括这一条。

  • 可測试/已測试过的:測试的重要性在这里我就不多说了,相信大家已经听到过不知道几百遍了。
  • 高效:话说,答案中包括“高效”的开发者比强调“不可过早优化”的开发者。要多两倍。而众所周知,“过早的优化是万恶之源”,所以,这太让人纳闷了。

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

“好的代码是可读的,可理解的,覆盖了自己主动化測试的。只是于复杂,而且能办好我们须要它做的事情。”

听起来就相当美,right?

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。

假设文章对您有所帮助。欢迎给作者捐赠。支持郝萌主。捐赠数额任意,重在心意^_^

我要捐赠: 点击捐赠

Cocos2d-X源代码下载:点我传送

游戏官方下载:http://dwz.cn/RwTjl

游戏视频预览:http://dwz.cn/RzHHd

游戏开发博客:http://dwz.cn/RzJzI

游戏源代码传送:http://dwz.cn/Nret1

时间: 2024-10-01 02:31:10

好代码的伪科学定义的相关文章

Resharper的配置(习惯使用了VS的F6编译和F12(快速非resharper查询编译代码)转到定义的默认设置)【设置了好多次resharper的使用了,特此记下简单的思路】

1:如何设置vs默认的快捷键方式: 2:重新设置resharper的F12及其其它选项设置: 3:通过以上两步,就可以使用默认的vs快捷方式和resharper的常用功能设置了. Resharper的配置(习惯使用了VS的F6编译和F12(快速非resharper查询编译代码)转到定义的默认设置)[设置了好多次resharper的使用了,特此记下简单的思路],布布扣,bubuko.com

IOS Block代码块的定义与使用

代码块的本质是和其他的变量类似,不同的是,代码块存储的数据是一个函数体.使用代码块,你可以像调用其他标准函数一样的调用,可以传入参数,并得到返回值.     脱字符是代码块的语法标记.下图表示代码块的定义. 1.代码块的基本使用 //无参数无返回值 void (^myblock)() = ^() { NSLog(@"Hello, World!"); }; myblock(); //带参数无返回值 void (^myblock2)(NSString *string) = ^(NSStri

掌握java中的三种代码块的定义及使用

代码块概念 代码块本身并不是一个很难理解的概念,实际上之前也一直在使用.所谓代码块是指使用"{}"括起来的一段代码,根据位置不同,代码块可以分为四种:普通代码块.构造块.静态代码块.同步代码块,其中同步代码块本书将在多线程部分进行讲解,本章先来观察其他三种代码块. 普通代码块 直接定义在方法中的代码块称为普通代码块. public class CodeDemo01{ public static void main(String args[]){ {  // 普通代码块 int x =

iOS 使用宏定义函数和代码块

iOS使用宏定义函数和代码块 今天在开发过程中碰到一个问题:就是父类中要向外发送通知,然后子类中或者其他类中来接收它.当然一般是把它写到类方法中去,但是有个问题,就是如果调用的类不是它的子类,就不能直接调用,当然也可以采用静态方法实现,我这里主要是想用宏定义来实现,下面我分别介绍使用宏定义函数和定义代码块的方式进行,废话不多说了,直接上代码: 使用宏定义函数实现 //定义 #define SendNotification @"SendNotification" #define send

内联函数的定义及说明

一.什么叫inline函数? inline(小心,不是online),翻译成"内联"或"内嵌".意指:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置.这样做的好处是省去了调用的过程,加快程序运行速度.(函数的调用过程,由于有前面所说的参数入栈等操作,所以总要多占用一些时间).这样做的不好处:由于每当代码调用到内联函数,就需要在调用处直接插入一段该函数的代码,所以程序的体积将增大.拿生活现象比喻,就像电视坏了,通过

以前忽略了的 函数定义表达式【提升】 的小细节

区别函数定义的两种方式: var foo = function() {} //函数定义表达式 function foo() {} //函数声明语句 前者有提升现象,后者没有. 众所周知,javascript在中有 "变量提升"的现象--在变量声明之前使用该变量就会报错:原因是因为js 是从上到下执行,在使用一个还未定义的变量所以就会报错! 同理: foo()var foo = function(){ console.log(1) } => VM3022:1 Uncaught Ty

读书笔记 effective c++ Item 44 将与模板参数无关的代码抽离出来

1. 使用模板可能导致代码膨胀 使用模板是节省时间和避免代码重用的很好的方法.你不需要手动输入20个相同的类名,每个类有15个成员函数,相反,你只需要输入一个类模板,然后让编译器来为你实例化20个特定的类和300个你需要的函数.(只有在被使用的情况下类模版的成员函数才会被隐式的实例化,所以只有在300个函数被实际用到的情况下才会生成300个成员函数.)函数模板同样吸引人.你不用手动实现许多函数,你只需要实现一个函数模板,然后让编译器来做余下的事情. 然而在有些时候,如果你不小心,使用模板会导致代

ReactNative入门(4)代码结构

一.了解index.ios.js 大家都清楚,React-Native就是在开发效率和用户体验间做的一种权衡.React-native是使用JS开发,开发效率高.发布能力强,不仅拥有hybrid的开发效率,同时拥有native app相媲美的用户体验.目前天猫也在这块开始试水. 用编辑器打开index.ios.js文件,分析代码结构: 1.第一句:var React = require('react-native');有Node.js开发经验的同学都清楚,require可以引入其他模块.如果没有

【2017-2-17】C#基础-定义变量,输入输出

主要学习内容为: 控制台程序的创建,输出,输入,定义变量,变量赋值,值覆盖,值拼接,值打印两种数据类型,整型类型转换 编程语言文件名后缀为.cs 创建程序项目的步骤: 文件--新建--项目--Visual C#--.Net Framework 4--控制台应用程序--设置名称和位置--确定 解决方案资源管理器可以设置编写或启动某个项目 main函数中编写代码 打印内容: //往外输出内容的Console.WriteLine("输出的内容");    换行Console.Write(&q