Let us prepare to grapple with the ineffable itself, and see if we may not eff it after all.

让我们时刻准备着向那些所不能说的挑战,看看最终是不是可以说。

——摘自Douglas Adams的作品Dirk Gently’s Holistic Detective Agency

我们所说的”Ruby Way“是什么意思? 我认为有两个相关方面: 一个是ruby的设计哲学; 另一个是它的使用哲学. 设计和是使用相关这是自然的事情, 无论硬件还是软件; 否则生物工程学如何产生? 如果我制造了一个设备并且在上面装了一个把手, 那是因为我希望别人可以通过把手使用这个设备.

Ruby有一种难以名状的品质让其与众不同。我们可以从这门语言的语法和语义上,也可以从用Ruby编写的代码中窥豹一斑。但一旦我们辨别了其中品质,我们就知道怎么回事了。很明显Ruby不只是创造软件的工具,而且是一种有主见的软件。为什么Ruby程序的使用原则不同于Ruby语言本身的使用原则?毕竟Ruby是高度动态和可扩展的。这两种层次的Ruby用法有所不同,原因可能是现实世界的不协调性。但总而言之,思想过程应该是一样的。Ruby语言可以通过Ruby来实现,用Hofstadter风格,虽然本文撰写时尚无例证。

我们不常想到”Way“这个词的本义;但是它被赋予两个重要涵义。一方面,它意为方法或者技术,但它也意为道路或途径。显然这两种意思是相关的,而且当我说“Ruby之道”的时候,两种意思都有。

所以我们我们所讨论的不仅是一种思考过程,而且是我们追随的一种做事方式。即使最伟大的软件领袖也不能宣称达成完美,而只是追随着完美主义。而且世间做事的方式不止一种,但我只能讨论一种。传统智者说:形态取决于机能。而且传统智者当然通常是正确的。但是Frank Lloyd Wright (在自己的领域)曾经说过:“形态取决于机能——已经被曲解了。形态和机能本为同一物,源于自性本体。”

Wright所说何意?我想他想表达的意思是真理不是你从书本上学到的东西,而是从经验中修证而来。

但是我以为Wright表达的真理在某些方面易于理解。他是一个伟大的简单性倡导者,他曾说过:“一个建筑师最有用的工具是草图板上的橡皮擦。”

所以Ruby美德之一是简单性。我可以在此主题上引用其他思想家的话么?按照 Antoine de St. Exupery的说法,“完美之道不在于无可添加,而在于无可剔除。”

但是Ruby是一门复杂的语言。我怎能说它简单呢?

如果我们更好地理解了宇宙,我们可能找到一种“复杂性的永恒法则”——一个现实中扰乱我们生活的事实,例如熵,以至于我们不能逃避,只能改变其分布。

而且这就是关键。我们不能逃避复杂性,但是我们能把它推到一边。我们能将其埋葬于视野之外。这就是工作中古老的黑盒原则;一个黑盒执行一个复杂任务,但是从外面看它具有简单性。

如果你还有耐心来听我引述,爱因斯坦的一句话此处非常适合:“任何事物都应简单到极致,而非更简单。”

所以从Ruby中我们看到了从程序员视角诠释的简单性(如果不是从Ruby解释器维护者的角度来看)。但是我们也看到了妥协所导致的特性。现实世界中,我们必须妥协一点。例如Ruby程序中的每一个实体必须是一个真的对象,但是某些值比如整数型是直接存储的。为了让计算机系学生感觉更亲切,我们已经牺牲了一些优雅的设计来达成实现的可行性。实际上,我们牺牲了一种简单性来换取另一种简单性。

Larry Wall关于Perl所说的话仍适用于此:“当你用小型的语言说话时,话会很冗长。当你用大型语言说话时,话会很简短。” 英语同样如此。生物学家Ernst Haeckel可以用三个词说出“Ontogeny recapitulates phylogeny”是因为他可以支配这些针对特定语义的强大词汇。我们允许语言的内在复杂性,因为这使得我们把复杂性从每个个体的表达中移走。
我想这样表达这条原则:不要写200行代码,如果10行可以搞定。

我理所当然地认为简洁是一个好东西。短程序段将占据程序员更少的大脑空间;作为独立实体,它将更易于理解。作为一个令人愉快的副作用,这种代码编写的时候,能钻进来的bug更少。

当然我们必须牢记爱因斯坦关于简单性的告诫。如果我们赋予简洁太高的优先级,我们终将无可奈何地陷入令人困惑的代码之中。信息理论告诉我们,压缩数据统计上接近于随机噪音;如果你看过C,APL或者正则表达式的标记法--尤其是写得很糟糕的--你已经直接地经历了这个事实。“简单,但不要太简单”;这就是关键。拥抱简洁,但不要牺牲可读性。

众所周知,简洁和可读性都好。但有一个深层次原因,它太根本了以至于我们时常把它忽略。这个原因是计算机为人而存在,反之不然。

什么是Ruby之道?相关推荐

  1. 第四章 Rails 背后的 Ruby

    第四章 Rails 背后的 Ruby 有了第三章中的例子做铺垫,本章将为你介绍一些对 Rails 来说很重要的 Ruby 知识.Ruby 语言的知识点很多,不过对一个 Rails 开发者而言需要掌握的 ...

  2. 【音乐随想】道,流浪者之歌 与神思者

    "道可道,非常道", 老子<道德经>的头一句话经常被人用来形容某一领域不可言传的至高真谛. 说来有些有趣, 这句话原本用来说形而上的"道"体的, 而 ...

  3. 收到猎头信息的一些感想

    今天晚上凌晨,忘了几点几分,打开javaeye想看hideto的博客,结果收到一封猎头的站内短信.信中内容是说:据说你在业内颇有名气,想招我入职. 看到信息的第一个反应就是,高兴.第二个反应就是,失落 ...

  4. 《Ruby程序员修炼之道》(第2版)—第1章1.2节剖析Ruby的安装

    本节书摘来自异步社区<Ruby程序员修炼之道>一书中的第1章,第1.2节剖析Ruby的安装,作者[美]David A. Black(戴维 A. 布莱克),更多章节内容可以访问云栖社区&qu ...

  5. 《Ruby程序员修炼之道》(第2版)目录—导读

    版权 Ruby程序员修炼之道(第2版) • 著 [美] David A. Black 译 钟凤鸣 陈雪静 责任编辑 杨海玲 • 人民邮电出版社出版发行 北京市丰台区成寿寺路11号 邮编 100164 ...

  6. 《Ruby程序员修炼之道》(第2版)—第1章1.4节易用的Ruby工具和应用程序

    本节书摘来自异步社区<Ruby程序员修炼之道>一书中的第1章,第1.4节易用的Ruby工具和应用程序,作者[美]David A. Black(戴维 A. 布莱克),更多章节内容可以访问云栖 ...

  7. 《Ruby程序员修炼之道》(第2版)—第1章1.1节进入Ruby的世界

    本节书摘来自异步社区<Ruby程序员修炼之道>一书中的第1章,第1.1节进入Ruby的世界,作者[美]David A. Black(戴维 A. 布莱克),更多章节内容可以访问云栖社区&qu ...

  8. 分布式Ruby解决之道 - DRb

    分布式Ruby解决之道 其实用Druby很久了,今天需要完成一个进程数据同步的机制,我需要的不是运行速度快,不是用 linux / mac 下的扩展,而是独立,快速开发效率,方便最简单的Ruby环境可 ...

  9. 分布式Ruby解决之道

    其实用Druby很久了,今天需要完成一个进程数据同步的机制,我需要的不是运行速度快,不是用 linux / mac 下的扩展,而是独立,快速开发效率,方便最简单的Ruby环境可运行,可以吗? DRb( ...

  10. ruby 程序员修炼之道_面向系统管理员的Ruby

    Ruby是功能丰富,免费,简单,可扩展,可移植且面向对象的脚本语言. 最近它在全球Web上获得了极大的普及. 这种流行至少可以部分归因于用Ruby编写的非常强大的Web应用程序开发框架Rails. R ...

最新文章

  1. boost::asio中的C/S同步实例源码
  2. LinkedIn招聘推荐系统中的机器学习的威力
  3. linux运维基础2
  4. python中dict和list排序
  5. MySQL误操作后如何快速恢复数据
  6. Python 实现图片轮播及音乐循环播放
  7. 一个程序员的C#命名规则(挺不错的)
  8. 【深度学习】——模型评估指标MAP计算实例计算
  9. 网管交换机与非网管交换机的利弊介绍
  10. win11打开应用被管理员阻止怎么办 window11管理员已阻止你运行此应用的解决方法
  11. 【Webcam设计】总结与代码仓库
  12. Mysql数据库启动命令
  13. 读《About Face 4 交互设计精髓》7
  14. 【Java】soap协议发送webservice请求工具类
  15. 在打开 Office XP 或 Office 2003 文档时,会提示您为 ActiveX 控件授予权限
  16. 想网站稳定运营?不可不知 DDoS的攻击原理与防御方法
  17. 【附源码】Python计算机毕业设计七七美食汇
  18. 读完两个博士是什么体验?Nature专访了3位双料博士
  19. JAVA题目~分数类Fraction Exp03-4
  20. 数据结构程序设计——山东省城际铁路建设建设

热门文章

  1. WPS表格简单入门_我的笔记_一些常用操作
  2. ps新手零基础知识入门教程学习_图文
  3. Linux之shell脚本编程、多命令、脚本、bc计算器、反引号、if语句、for语句
  4. cad二次开发c#学习记录2——画一条线
  5. TeamViewer安全证书过期,解决办法
  6. android直播sdk+美颜,短视频SDK,美颜SDK,直播SDK_提供开放API接口
  7. 叶罗丽颜值测试软件齐娜多少分,精灵梦叶罗丽:美颜相机下灵公主16岁、齐娜7岁,他竟然拍的46岁...
  8. 不定期备考小tips[常微][2] #20210528
  9. 最佳Android模拟器,你值得拥有
  10. FastQC评估测序数据的质量