`

漂亮的代码

阅读更多

    Ruby的创造者为《代码之美》撰写的文章标题是《代码如散文》。程序和散文有一些共性,首先是两者都必须有清晰的意图,散文内容是什么,想表达什么,程序的功能是什么,能做什么;其次两者在意图的表达上(功能的实现上)都依赖于写作的具体风格,编程的隐喻之一就是写作。你想表达的思想是好的,但是如果表达得难以理解,那么要把这个思想传播给读者将非常困难。代码被读和修改的次数是相当多的,因此一个很重要的观点就是你写的代码是给人读的,你需要考虑可读性的问题,归结于写出漂亮的代码。
   判断代码是否漂亮似乎没有什么国家标准,更没有国家免检。代码是写给人读的,从这个角度上看,如果一段代码能让人很容易地读懂,让人感觉心情愉快,修改起来也不费什么力气,这似乎就是漂亮的代码咯。那么显然,漂亮的代码的真正含义是帮助程序员感到快乐和提高生产率 。有了这个指导性的方向,你可以从这么几个方面去努力写出漂亮的代码:简洁性、保守性、简单性、灵活性和平衡。
   简洁性,文中以Ruby和Java版本的Hello World入手比较,在Ruby和其他动态语言中,你所做的就是你想表达的:打印Hello World

<!---->print   " Hello World\n "

换成java,哦,你先要定义一个类,这个类有个入口main方法,在main方法中调用System.out对象的println方法打印:

<!---->class  Sample{
   
public   static   void  main(String []args){
     System.out.println(
" Hello World " );
   }
}

我记的我初学java的时候就特别不理解为什么要定义一个类,为什么方法要static、args,而我仅仅想要的只是打印一个字符串,可语言硬塞给了我太多的概念:类、方法、入口、参数。这些额外的东西牵扯了太多的注意力,而往往却忘记了初衷是什么。因此在《unix编程艺术》一书中对OO的一个评价是:鼓励具有厚重的胶合和复杂层次的体系,大大降低了代码的简洁性和透明性,你无法一眼看出代码是想做什么的。OO的抽象能力很强大,因此在很多场景下是这种抽象能力的滥用,实现最简单的功能也是一定要有类,有类才有对象,有对象才有光:)而往往这些对象却非问题领域中的自然实体,而是某种胶合物,为了抽象而抽象。
   简洁同样意味着消除冗余。代码的重复是万恶之源,拷贝黏贴是滋生bug的温床,在重构概念如此深入人心的今天,这一点毋庸置疑。因此,谨记请DRY原则。语言级别的冗余可能是需要的,例如Ruby允许方法调用省略括号:

<!---->task :name => :test
task({:name
=> :test})

这两行代码想表达的意思一样,显然第一种方式更简洁,这种语言级别的冗余显然是有利于程序员的,尽管将实现的难度推给了语言的设计和实现者。
   漂亮代码另一个有争议的方面就是它的熟悉性,人们对于新东西的接受程度远没有想象中的高,大家都喜欢自己熟悉的东西而非全新的思考方式(嗯,极客例外)。这其实是Ruby一直鼓吹的最小惊奇原则的另一种表达。Ruby看来就是这么个保守的语言,他有很强大的OO能力,但是没有全然照搬smalltalk,他有FP的能力但是却没有让你惊掉下巴,他仍然遵循着古老的顺序、循环、选择的程序结构。
   简单性强调是减轻程序员的工作负担,语言和类库API的优化应当有利于使用者,将困难留给实现者。前面提到的语言的冗余性就是一例。程序的复杂性来源有这么几个:商业上基于推销热点而非实际需求考虑出发带来的“特性清单”、业务领域本身的复杂度、程序员的自傲心理,最根本在于软件的开发的复杂性。如果能将复杂的功能,用人人理解的简单代码表达出来,当然漂亮!
   简单并不意味着简陋,保守也不意味着死板。灵活性同样是代码漂亮与否的判断标准,是否隔离了变化点,是否拥有一定的扩展能力,是否无需借助工具的增强而实现某些巧妙的调用。同样以Ruby为例,open class和元编程给了内置你在语言级别的“工具”,你无需借助antlr、cglib等等类库去做一些看似复杂的东西。你将感受到编程的快乐,而非为了工具而去做一些违背本意的事情。灵活性可能是把双刃剑,过分的强调灵活性、可扩展性也可能带来复杂的代码,注意你的“炫耀”心理。
   最后要强调的是平衡,在这些因素之间做出平衡,我觉的吧,没有更多实践的经验想平衡这些因素是相当困难的,如果了解了平衡的艺术,也许算是透出那么点“编程的艺术”的味道。Matz一直强调的一点是编程的乐趣,如果没有乐趣,我想我不会干这行,如果没有乐趣,我想我的工作效率将极度低下,从你认为是枯燥的工作中找乐子,存了这么个心理,你总能找出很多可以做的有趣事情,问题在于,你肯不肯做?


1
1
分享到:
评论
1 楼 yangzhihuan 2008-10-10  
说得比较深.
看的时候,觉得句句都正中心坎.
看完之后,好像没啥收获.

还是要自己试过,实践过,体会才会深.

相关推荐

    完整无错的电脑公司漂亮代码

    “完整无错的电脑公司漂亮代码”,这一概念涉及到了软件开发的多个重要方面。首先,“完整无错”表明了代码的健壮性和稳定性,这是对程序员编码能力的基本要求。健壮的代码需要经过严格的测试,以确保不会在运行中...

    写出漂亮代码的七种方法

    ### 写出漂亮代码的七种方法 在编程领域中,编写美观且易于理解的代码是一种艺术形式。本文将从美学角度出发,介绍七种帮助您编写更漂亮代码的方法。 #### 1. 尽快结束 `if` 语句 在编程时,过度嵌套的 `if` 语句...

    编写漂亮代码

    ### 编写漂亮代码:追求代码可读性的艺术 #### 引言 在软件开发领域,编写高质量的代码是一项至关重要的技能。好的代码不仅能够提高软件的可靠性和维护性,还能提升团队协作效率。本文将深入探讨代码可读性的概念...

    Java好看又漂亮的界面风格的登录窗口源代码

    本资源提供了“Java好看又漂亮的界面风格的登录窗口源代码”,这将帮助开发者了解如何利用Java实现具有视觉吸引力的登录窗口。这篇文章将深入探讨Java GUI设计、组件使用以及可能涉及的设计原则。 首先,Java GUI...

    网站底部代码_底部客服二维码动态导航代码_鼠标滑过显示层代码

    在这段代码中,开发者可能利用CSS选择器、盒模型、浮动、定位以及过渡效果来实现底部导航的动态变化。例如,当鼠标悬停在某个链接上时,可能会触发一个显示层,显示更详细的信息或者客服二维码。 "footer.html" ...

    书写漂亮的代码(author:Laura Thomson)-推荐

    - **常见问题解答**:针对初学者常遇到的问题提供了解决方案,帮助他们更好地理解和掌握编写漂亮代码的方法。 #### 总结 Laura Thomson在这份演讲稿中深入探讨了如何编写既美观又实用的代码。她强调了简洁性、架构...

    漂亮代码的开发者可以向艺术家们学习一些东西

    为“最漂亮的代码”,其涉及应用领域虽广,而代码之美却一以贯之。如果我们承认编 程是一门艺术—具有高度创造性和人类智慧参与的活动,不是艺术是什么?—那么, 这33 篇文章恰恰体现了这门艺术的最高境界。

    个人主页程序简洁漂亮HTML代码

    自己用HTML编写的主页程序,简洁高效,适合当成网页程序作业 自己用HTML编写的主页程序,简洁高效,适合当成网页程序作业

    漂亮的验证代码漂亮的验证代码

    漂亮的验证代码漂亮的验证代码漂亮的验证代码漂亮的验证代码漂亮的验证代码漂亮的验证代码漂亮的验证代码

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

    在每章中的漂亮代码都是来自独特解决方案的发现,而这种发现是来源于作者超越既定边界的远见卓识,并且识别出被多数人忽视的需求以及找出令人叹为观止的问题解决方案。 本书介绍了人类在一个奋斗领域中的创造性和...

    代码之美书籍资源下载

    在每章中的漂亮代码都是来自独特解决方案的发现,而这种发现是来源于作者超越既定边界的远见卓识,并且识别出被多数人忽视的需求以及找出令人叹为观止的问题解决方案。  《代码之美》33章,有38位作者,每位作者...

    codesnapit:CodeSnapIt,分享漂亮代码的快照!

    分享您漂亮代码的快照! 在查看实时应用程序! 概述 CodeSnapIt的灵感来自于无法在社交媒体上共享突出显示语法的代码,而不需要截图和跳转。 当前,CodeSnapIt是一个完全独立的社交媒体网站,用于共享代码,对该...

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

    写出漂亮代码是每个程序员都应该追求的目标,因为它直接影响到代码的可读性、可维护性和团队协作效率。以下是一些改良程序的技巧: 1. **尽量保持方法简短**:一个方法应该只做一件事,且尽量控制在5-20行内,避免...

    代码之美(中文版)------

    - **漂亮代码**:除了功能上的高效外,还包括代码结构的清晰、逻辑的合理、命名的规范等,使得代码易于理解和维护。 - **程序设计**:涵盖了从需求分析到最终实现的整个过程,涉及编码技巧、设计模式、架构选择等...

    html5漂亮源代码

    这个"html5漂亮源代码"很可能是包含了一系列利用HTML5特性制作的美观、功能丰富的网页模板或示例代码。 HTML5的核心优势在于其增强了网页的结构性和语义性,引入了新的元素如, , , , 等,使得网页内容的组织更加...

Global site tag (gtag.js) - Google Analytics