什么造就好的代码?

翻译 2004年07月06日 20:08:00

Paul DiLascia ( James506译 )

当MSDN杂志让我就我关心的问题写一个专页,我说:“你是说像废除税收,车载电话,或者SUVs?”呵,他们的指的当然是一些关于编程的东西。经过一番思考,我意识到我所关心的问题是书写好的代码。从Redmond到Zwaziland,所有的图书和杂志往往会大肆宣传如何使用最新的API或者某些高级对象,但却没有关于如何写好的代码,什么是好的代码的报道。

一个好的程序很好的运行,没有瑕疵。但是什么内在的原因造就如此的完美?这并不神秘,我们只需要偶尔的提醒自己,无论你是使用c/c++,c#,Java,Basic,Perl,COBOL,还是ASM,进行编码,所有好的编码无不显示出同样的特点:简洁,易读,模块性,分层,设计,效率,优雅和明晰。

简洁意味着你能用五行完成的代码,就不要用十行。这需要你额外的努力去简化,但不要过分以至让代码晦涩难懂。组织,实现和设计的简洁,可以使你的代码更可靠,远离Bug,不出错。

易读就是要让别人能读懂你的代码。需要写好注释,遵循常规进行命名,不要自作聪明的任意命名。例如“taxrate”就比“tr”要好。

模块性是说你的程序像宇宙万物一样。这个世界是由分子组成的,而分子是由原子,电子,核子,夸克,还有弦(如果你相信的话)组成。同样,程序中的大型系统是由一些小的部分组成,而这些小的部分则由更小的模块组成。你可以写一个非常简单的文本编辑器,只含有三部分:移动,插入和删除。正如原子可以以各种奇妙的方式组合,组件可以被重用。

分层让你的程序从内部看像一块夹心蛋糕。应用程序建立在框架之上,而框架建立在操作系统之上,而操作系统又建立在硬件之上。即使是在应用程序内部,仍然需要分层,比如file-document-view-frame等。高层会对低层进行调用(调用下行,响应上行)。低层永远都不会知道上面的高层是什么。如果doc直接调用frame,事情就会变的很糟糕。模块和分层是通过API来定的,API对它们的边界进行限定。由此看来,设计是非常关键的。

设计意味着在你的程序建立之前,需要花时间对它进行很好的设计。毕竟,早期的认真构思比后期的费力调试要合算的多。一个值得称道的准则是用一半的时间进行设计。你需要有一份功能说明书(描述程序做什么)和一份开发计划。所有的API必须书写成档。

效率意味着你的程序运行快而且代价小。不会引起文件,数据链接等的冗余。它仅仅做它应该做的。有序的进行加载与卸载。在函数层面上,你总是可以在测试中不断的进行优化。但在更高的层次,对性能你必须有很好的计划。

优雅就像美,你很难去描述,但却很容易识别。优雅是汇集了简洁,高效和华丽,而创造的一种感觉。如下:
int fact( int n )
{
 return n==0 ? 1 : n * fact(n-1);
}

明晰是所有其他特性中最重要的一个。计算机为创造比物理硬件复杂的多的软件系统提供了可能性。编程最大的挑战就是管理复杂性。简洁,易读,模块化,分层,设计,效率和优雅都是非常好的达到明晰的方法,专门用来对付复杂性。
明晰的编码,明晰的设计,明晰的目的。在每一个层面上,你必须真正的理解你所做的,否则就是不明晰。一个不好的程序之所以失败,通常不是由于缺少编码技巧,而是没有一个明确的目标。这就是为什么设计是最重要的原因。它让你诚实,如果你不能写下来,你不能向他人解释,你就没有真正明白你所做的事情。

有太多的东西我没有说,但我必须再补充一点。不到万不得已不要放弃编程的准则,除非你为了得到某种便利,或者你已经陷入窘境,程序已经在运行而且你没有时间去改正。但要记住的是:你不按编程准则,必须要做的足够的巧妙,最好还带一点点美感。如果出了什么问题,不要怪我哦。愉快的编程吧!

完善的Socket Server程序

/* * Copyright (c) 2000 David Flanagan.  All rights reserved. * This code is from the book Java Exam...
  • skyyoung
  • skyyoung
  • 2002-03-27 10:16:00
  • 1097

面向对象的优点或者是一套好的代码有什么特点?

小编也是小白,面试经常被问到这个问题,这里解释一下: 1.可扩展性,你的代码可以随时的增加项目,修改项目,删除一部分功能,不影响代码的完整性。 2.可维护性,你的代码修改一个模块就是修改一个模块,...
  • Makefilehoon
  • Makefilehoon
  • 2017-12-27 06:37:06
  • 154

Caffe 初学拾遗(一) 简单命令

Original Source : Alex’s CIFAR-10 tutorial  本文以CIFAR-10数据集为例,对Caffe的train及test操作进行简单说明: 1. solver....
  • baidu_24281959
  • baidu_24281959
  • 2016-08-09 20:03:49
  • 1153

概念澄清:Caffe训练过程中的test_iter test_interval等概念

先上一张图,大家很熟悉的一张图。 首先说明一个概念:在caffe中的一次迭代iterration指的是一个batch,而不是一张图片。下面就主要说下2个概念 test_iter: 在测试的时...
  • wonengguwozai
  • wonengguwozai
  • 2016-04-27 22:40:41
  • 1722

好代码的特点

一个好的代码,最根本需要三个特点:正确,可读,效率 1.正确需求分析是否完整合适,是否真正理解了需求测试代码是否写了,是否足够测试代码的功能软件是否有很好的可测试性,参数检查,assert,足够log...
  • hongjiqin
  • hongjiqin
  • 2009-02-20 21:24:00
  • 2132

什么才是好的代码?

好的代码=牛逼的思想(架构)+ 毫无破绽的代码实现 牛逼的思想(架构)= 对变量和不变量的严格区分 + 对变量的良好抽象...
  • GoGleTech
  • GoGleTech
  • 2018-04-11 16:25:36
  • 10

源程序<em>的特点</em>(语法、词法)

匿名类<em>的特点</em> 立即下载 上传者: 罗罗诺亚-小鱼 时间: 2012-08-23 综合评分: 0 积分/C币:0 C语言<em>代码</em>词法扫描器 立即下载 上传者: l40618 时间: 2009...
  • 2018年04月09日 00:00

caffe下比对网络的配置文件以及特征提取<em>代码</em>

该文件包含VGG_M网络的网络配置文件,比对网络的网络配置文件,以及特征提取的python<em>代码</em>文件。综合评分:0 收藏评论举报 所需: 3积分/C币 下载个数: 8 开通VIP ...
  • 2018年04月10日 00:00

十个能让你成为牛逼前端程序猿的特征

如果能够做一些炫酷的网站, 并且能够写一手的好html/css/javascript的话,你是不是就觉得你是牛逼的前端程序猿了?...
  • qq_39345165
  • qq_39345165
  • 2017-12-10 14:04:46
  • 282

面向对象程序设计的4个主要特点

1.封装性. 它包含两个方面的含义.  将有关的代码和数据封装在一个对象中,各对象间相对独立,互不干扰.将对象中的某些部分对外隐蔽,隐蔽内部细节,只留下少量接口.        对象的内部实现和外部行...
  • fangfei_119
  • fangfei_119
  • 2008-07-23 10:31:00
  • 17379
收藏助手
不良信息举报
您举报文章:什么造就好的代码?
举报原因:
原因补充:

(最多只允许输入30个字)