`
xpp02
  • 浏览: 1010633 次
社区版块
存档分类
最新评论

你的代码可以是优雅的,但是还有更重要的

 
阅读更多
引用
软件设计有两种方法:一种是尽可能地简单,这种设计明显没有什么缺陷;另一种是尽可能地复杂,这种设计没有明显的缺陷。
——C.A.R. Hoare,1980年图灵奖讲座

在开发过程中,我的口头禅是: Your code may be elegant, by mine works。我为此而常常受到质疑,也有人反驳我“你不会使用最优方法!”“你在逃避测试!” 为了避免一次又一次地重复解释,我决定阐述下我的观点,仁者见仁,智者见智。

首先,我认为“项目可能会延期,但是代码会更好或更容易维护或更简洁”这句话是有问题的。项目延期,就是未完成,不应该用代码质量会更高作为借口。如果客户要在圣诞节进行推广活动,但你在12月29号才完成项目,即使提供了史上最好的产品,也是毫无价值的。

其次,我们来谈谈“最优方法”这个问题,“最优”是否意味着要写出更易于维护的代码需要更长的时间呢?其实除了大家都知道的《101个最优方法》以外,“最优”的标准是各种各样的。无论你对其进行怎样的定义,“最优方法”对所有程序员来说,应该是一种自然的编程标准。举个最简单的例子,经验丰富的程序员会自然地将变量命名为:$a、$b、 $c等,也能正确地缩进代码行。说得再深入一点,有经验的开发者知道在什么时候、如何提高效率以使得项目能如期完成。虽然 “最优方法”的标准有很多,但这些标准不会令你因此而延长项目时间。这引出我将谈到的下一点——Over-engineering(过度设计,指设计出来的系统比恰到好处要复杂臃肿的多,过度的封装、一堆继承、接口和无用的方法,以及超复杂的xml配置文件)。

像任何经验丰富的程序员一样,我了解那种想为每个项目搭建最好、最灵活、最耐用的系统的心态。但我也了解每个项目都有的商业限制:时间和资金。大多数项目都有明确的截止日期和项目预算,开发者要有意识地去控制项目规模以按时达到目标。你没有任何理由花一周时间,来为一个20行的table表上的数据库查询设置“恰当的”缓存层。多了解实用案例,如果只是为了实现一个页面访客计数器的功能而构建支持多种同时响应请求的XHR框架,是不现实的。要有眼界,这是我最强调的一点,最好的程序员不是精通如何构建最棒的系统的人,而是了解系统不需要的是哪些功能的人。

另外,在软件开发领域,上市时间是商业驱动力,在web应用开发领域,由于其动态性,这点更为明显。当时间成为关键,“最优方法”就是最简单的解决方案。

最后,我们来讨论一下技术债务(指为了匆忙实现一个功能,破坏了现有的程序库,在实现的过程中污染了代码库的设计)。如果在开发过程中,你在某个地方偷工减料了,那么就会产生无法解决的长期存在的技术债务,而且在之后的开发中,任何一个决定,都会受该债务的影响。事实上,在接手商业项目时,明白何时、如何对代码进行简化的能力是很关键的,这也是区分老手和菜鸟的标准。解决技术债务的办法有很多,但应尽量做到不产生技术债务。同样地,过度设计也不可避免地会产生技术债务。

通常人们在谈到技术债务的危险时,并没有包含商业影响。但其实技术债务与实际投资回报率是相对的,因为在许多情况下,早日上市更具成本效益。也有种情况是技术债务与收益同时存在,那么你可以慢慢偿还债务,但这会延长你的项目时间,很可能当你解决完技术债务时,你也失去了市场机会。

作为软件开发者,我们常常认为自己的工作就是开发软件,但其实这只是一种手段,我们的目的是令开发商达到他们的商业目标,你的代码也许很优雅很简洁,但如果不能达到目的,就丝毫没有意义。

英文原文:Your Code May Be Elegant
分享到:
评论

相关推荐

    ASP.NET的网页代码模型及生命周期

    同时,将ASP.NET中的页面样式代码和逻辑处理代码分离能够让维护变得简单,同时代码看上去也非常的优雅。在.aspx页面中,代码隐藏页模型的.aspx页面代码基本上和单文件页模型的代码相同,不同的是在script标记中的单...

    代码之美(中文完整版).pdf

    第14章 优雅代码随硬件发展的演化 14.1. 计算机体系结构对矩阵算法的影响 14.2 一种基于分解的方法 14.3 一个简单版本 14.4 LINPACK库中的DGEFA子程序 14.5 LAPACK DGETRF 14.6递归LU 14.7 ScaLAPACK PDGETRF 14.8 ...

    EasyCode代码生成器示例一源码

    EasyCode拥有全新的类设计界面,您只需要动一动鼠标,输入必需的参数,优雅规范的代码一 点即来!您的代码需要注释?EasyCode自动为您生成最详细、最规范的注释!您觉得每次生成类 太烦?EasyCode可以直接为您生成...

    卡特:卡特是框架,是ASP.NET Core上的扩展方法和功能的薄层,可让代码更明确,更重要的是更有趣

    Carter是一个框架,是ASP.NET Core上的扩展方法和功能的薄层,可以使代码更明确,更重要的是更有趣。 Carter只是在ASP.NET Core的基础上构建,使您可以拥有更优雅的路由,而不是属性路由,约定路由或ASP.NET控制器...

    JAVA上百实例源码以及开源项目源代码

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    jQuery权威指南-源代码

    所有案例的讲解都非常详细,不仅有功能需求分析和完整实现代码,而且还有最终效果的展示,更重要的是,将所有理论知识都巧妙地贯穿于其中,非常易于读者理解。如果读者能在阅读本书的过程中逐一亲手实现这些案例,在...

    如何编写优雅的代码

    Review是一种通过复查代码提高代码质量的过程,在XP方法中占有极为重要的地位,也已经成为软件工程中一个不可缺少的环节。本文通过对Code Review的一些概念和经验的探讨,就如何进行CodeReview和CodeReview中应该...

    dark-horse-arithmetic.rar

    内容包含数据结构与算法配套PPT教程,代码.数据结构和算法这门课程无论在哪个学校的计算机专业,都是...通过对基础数据结构和算法的学习,能更深层次的理解程序,提升编写代码的能力,让程序的代码更优雅,性能更 高。

    golang如何优雅的编写事务代码示例

    不知道数据结构和算法的重要性,以为靠硬件能解决运行慢的问题 架构不懂,搭建框架不会,搭建环境不会,使用的软件底层原理一问三不知 其实吧,很多人干了很多年,看似是老手,平时工作看似很忙,其实做的都是最...

    java编码规范

    个性应该体现在用更简单、更优雅、更易读、更易理解以 及算法实现效率更高等方面。 可读性,可理解性是代码的重要方面,本规范主要围绕如何去产生规范 易读的代码。另外,它也保证了大家有共同的先验知识。

    Objective-C基础教程+随书源代码

     Objective-C是创建Mac OS应用和iPhone应用的主要语言,优雅的面向对象编程环境与C语言特性珠联璧合,造就了它的不俗表现。  本书全面而系统地讲述Objective-C语言的基础知识和面向对象编程的重要概念,结合实例...

    如何写出漂亮的代码:改良程序的11个技巧

    当你第二天回头来看你的代码时,你就要开始阅读它了。当你把代码拿给其他人看时,他必须阅读你的代码。因此  有很多理由都能说明为什么我们应该写出清晰、可读性好的程序。最重要的一点,程序你只写一次,但以后会...

    python_context_management_sandbox:研究Python上下文管理器,以便编写代码可能更优雅

    Python上下文管理 研究Python中的上下文管理非常重要,这样您就可以通过封装资源的分配和释放来更优雅地编写代码。 参考

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    Struts2视频教程

    Struts2是一套非常优秀的Java WEB应用框架,...对于部分重要的知识点更是深入源代码进行剖析,而不是直接给出结论。 学习完本视频,你会真正理解Struts2相对于Struts1的优雅和简洁,并使你具备开发Struts2项目的能力。

    用于构建复杂数字硬件的 Python 工具箱_python_代码_下载

    最后,通过“生成”语句对逻辑程序生成(元编程)的支持非常有限,并且限制了代码可以被通用化、重用和组织的方式。 为了解决这些问题,我们开发了Migen FHDL库,它用组合和同步语句的概念取代了事件驱动范式,具有...

    MVC的JavaScript Web富应用开发(完整版)

    通过由浅入深的讲解,你将学会如何构建具有丰富交互以及优雅体验的JavaScript应用,书中同样提供了大量的示例代码,可以帮助你更深入的理解很多重要的概念。 揭开MVC的神秘面纱,教你如何设计合理的架构以及处理...

    基于MVC的JavaScript Web富应用开发

    有赖于强大的JavaScript引擎以及CSS3和HTML5新技术,如今...通过由浅入深的讲解,你将学会如何构建具有丰富交互以及优雅体验的JavaScript应用,书中同样提供了大量的示例代码,可以帮助你更深入的理解很多重要的概念。

    Prototype_1.6 JavaScript代码和中文帮助手册

    该资源包括两个文件,一个是prototype代码,另一个是中文帮助,非常值得下载 ========================================= 以下是prototype框架简介 prototype.js 是Sam Stephenson写的一个Javascript的小框架(实际...

Global site tag (gtag.js) - Google Analytics