翻译 [译] 为什么教 Ruby

lanzhiheng · 2019年01月01日 · 最后由 paicha 回复于 2019年01月08日 · 9496 次阅读
本帖已被设为精华帖!

PS: 这是国外一位有 20 多年编程经验的培训师在 Medium 发表的对 Ruby 及编程的一些看法,不管是否是程序员都可以考虑看一下。如果你想学编程却苦于不知道选什么语言,或许这是一篇不错的参考。原文链接: https://medium.com/flatiron-labs/why-teach-ruby-8010ab3079fd

Ruby

Ruby 在市场上可能只是占有较小的份额。但这并不是为什么你应该学习它的理由。

作为Flatiron School的创始人兼院长,我觉得针对最近一些学校把他们的课程焦点从 Ruby 转向 Java 所造成的影响写个反馈是很重要的,毕竟这意味着 Ruby 和 Ruby On Rails 的就业市场正在缩小,或者说它的流行度及重要性正在衰减。

回想我作为程序员的职业生涯,我的工作主要是使用 ASP,JavaScript,PHP,C# 和 Ruby 并伴随着少量其他的编程语言 (包括 Java)。作为一个老师,我使用 Ruby On Rails 还有 JavaScript 来教授 Web 开发已经有超过 5 年时间了,帮助了数以千计的学生开启他们的编码职业生涯。

在 Flatiron School,我们着迷于职位的产出。在这 4 年内,我们把它放在重要的位置上,并且发布了独立审计及核实工作报告它详细描述了我们的毕业生在就业市场中的表现。让我们非常自豪的是,4 年里我们已经有超过 1000 个毕业生,却依然可以在技术领域维持着如此高的就业率。

真相是编程学校里面教的程序设计语言,不应该与就业市场直接挂钩。我们是代码训练营的先驱者,即便是在 2012 年,Java,PHP 都比 Ruby 占有着更大的市场份额。

Very Long Term History

评估一个语言的流行度是一件困难的事情,但是https://www.tiobe.com/tiobe-index/ 这个网站包含许多测量手段,从社区指标,职位,还有相关平台的情况来综合评估。

IEEE Spectrum

IEEE Spectrum 还提供了更多筛选项来查看一门语言的流行度。https://spectrum.ieee.org/static/interactive-the-top-programming-languages-2018

代码训练营如果只是简单地针对最大的就业市场来进行教育是不现实的。使Flatiron School成功的因素是一门用于教授编程的课程不应该局限于特定语言,而应该把焦点放在抽像的及通用的概念上。而且其中最重要的是学习如何学习的元能力。当然一个 Flatiron School 的毕业生也会较为深入地了解 Ruby 和 JavaScript,但是他们如此有竞争力的根本原因是他们可以快速地掌握任何东西。我们的毕业生们会继续在工作中使用任何一门能叫的上名字的编程语言进行编程,其中就包括一个工程师在为波音 757s 贡献着 Java 代码。

不要用你所学的第一门编程语言来定义你自己

许多人觉得一个程序员应该要由他所学的第一门编程语言来定义,这在我看来是非常短视的。程序员简单地把自己定义成一个 Ruby 程序员或者 PHP 程序员是不值得的。我们是程序员而编程语言只是我们的工具。我们可以选择合适的工具来处理不同的场景和问题。他们通过编码训练营给新进程序员们打上类似 “Java” 或者 “Python” 这样的标签在我看来是有危险的,我担心学生们会被自己声称已经精通的编程语言永远地限制了潜在的能力。如果从来不教学生如何去学习一些特定语言之外的东西,就会对他们编程语言外的身份缺乏自信。培训学校的压力来自于实用性,市场驱动,通过设置整体性,通用性更强并包含哲学思索能力的课程,能够更好的训练他们,并不仅仅是为了第一份工作,而是一个更丰富的职业生涯。

Language

我们都有自己喜欢的语言,我们其实都很棒。

Ruby 程序员的需求将越来越少这个宣言是无关痛痒的。正如我前面所提到以及将要阐述的我并不信奉教人们如何成为一个 “[某语言]” 程序员。我们可以继续把 Ruby 作为首选语言,不管 Ruby 在就业市场中的需求如何,我对我们的毕业生会持续保持竞争力这件事情充满信心。然而,有件很重要且需要说明的事情是 Ruby 依旧是被需要的技能并伴随着一个正在扩张的就业市场。Ruby On Rails 依然是创业公司的选择,随着每一次 “Rails new” 的执行,将会会有许多新的企业诞生。除了创业公司之外,大规模的公开交易还有私人公司已经使用 Ruby 和它的生态圈许多年了,并且我看不到它停止的迹象。Ruby On Rails 成为 Shopify, GitHub, Twitch, Airbnb 这些公司的主要后端技术栈,以及比这更多的是基于 Ruby 开发的 DSL,这其中就有许多跟 Ruby 相关的令人惊叹的工作机会。但它的市场是否像 Java 那么大?不。但这都没关系,毕竟不管是 Java 还是 Ruby,它们的市场都是很难饱和的,程序员不应该总是通过语言来诊断机会。

我并不觉得围绕着成为一个 “Java”,“Ruby” 或者说 “[某语言]” 程序员来开发一门课程会是教育上的谨慎。这会使你的毕业生太同质化,界定了他们的工作机会,限制了他们的竞争力,并且在教他们为职业终身学习这件事上会面临失败。从随着 Ruby 及 Ruby On Rails 的流行度正在减少,某些课程焦点的切换这些事来看我的说法是值得怀疑的。依照经验并从一千多位毕业生身上,我们看不到 Ruby 需求的缺乏。我们看到任意规模的公司依然继续拥抱着 Ruby,并且一个好学校的毕业生应该有资格使用他们渴望掌握的任何一门语言来胜任相关的工作。

那么,为什么是 Ruby?

如果说学校所教的第一门编程语言并不会直接与职位输出挂钩,而且这也没那么重要,那么为什么Flatiron School依然把 Ruby 作为首选教学语言,而不是像 JavaScript 那样的新热点或者是一些其他的如同 Java 那样的前沿编程语言呢?对于学生而言,第一门编程语言真正重要的是什么?

Love it

学生首次学习的不管是什么编程语言,最重要的事情是,这门语言会让他深深地爱上代码。

编程是一门艺术。像是诗篇,舞蹈还有音乐,不管是法国还是西班牙的诗篇,现代舞蹈还是芭蕾舞,古典音乐还是高科技舞曲,这些实际的风格或者表达的语言对艺术而言都没那么重要。诗篇并不在于它是印度语,英语还是德语的,而在于抽象观念,如押韵,韵律,比喻,隐喻,节奏,构成等等,当然还有其他 - 任何语言都能够表达的普遍概念。编程也不在乎是用 Ruby,Java,JavaScript 还是 C#,而在于抽象的,语义学,封装,逻辑,接口等等,并且这些概念在每种编程语言中都会有所体现。

作为一个初学编程的人,最重要的事情是真正学习到那些通用的概念,这些概念会通过你的第一门编程语言表现出来。最危险的事情是你在 “这是我为了找到工作所需学习的所有东西 “这种观念下被教授第一门编程语言,你将永远学不会怎么去识别那些概念。会让你因为这一棵树而错失整个森林,也不会明白怎么去接触一门新的编程语言。你当然也会遗憾地错失代码中所有美好及优雅的东西。

编程的快乐并不会隐藏在一门或者另一门语言的技术实现中,我们会在编程的这些非凡媒介中找到快乐,就像是 Ada Lovelace 在 “运营的科学” 所说的中。Ada 过去曾预言:

“运营的科学,尤其是作为数学的衍生物,它自身就是科学,并且有它自身的抽象事实和价值。”

学习编写代码却没有学会如何去识别工艺上的抽象真理是个不幸的事情。学习一门编程语言从来都不是学习如何编写代码最重要的。学习编码时最重要的事情是体会到代码自身惊异的美。学生应该深深地爱上代码。

我们培训学生首先会让他们爱上代码,为了完成这个任务,Ruby 是很好的选择。是什么让 Ruby 成为程序员美妙的初恋?这应该追溯到这门语言的设计。Yukihiro Matsumoto,就是我们所知的 Matz,一名日本程序员也是这门语言的发明者,明确地声明过他对这门语言的期望:

Ruby 的目标是让程序员快乐,我着手发明一种可以让我感觉到快乐的编程语言,作为一种副作用,它也会使许多的程序员感到快乐。

Yukihiro Matsumoto

创造一门编程语言的理由可以有数百种,几乎所有的理由都会跟编码的场景有关 -- 为了跨平台编译更容易,为了优化并行过程,为了 “跑得更快” 等等。至今我所知道的,在编程语言的历史上唯一为了你的快乐而发明出来的语言就只有 Ruby。Ruby 重视你 (程序员) 胜过重视机器。一个早期高产的 Ruby 程序员,他叫_why_the_lucky_stiff,曾在RailsConf 2016 Talk里面这样描述 Ruby:

“Ruby 是这样一种东西....用 Ruby 来写代码真的会让你爱上编码这件事,感觉到热情和乐趣,它激烈地搅动你的内心,它是一门多么美妙的语言,当然我说得有点色情。方法调用是连贯的,脱下了括号,裸露地串联起来,这就像是......热情洋溢的红宝石。”

Book

这些以人为本的价值观念,不断体现在这门语言的设计选择当中。最鼓舞人心的可能就是 Ruby 为相同的任务提供不止一种方式。实现的选择通常被看做是一门语言的短板。现实中,Python 在 “Python 之禅” 中宣称这样一条价值观:“应该有一种 - 最完美的 - 显而易见的方式去做一件事情”。

Ruby 却提供了无数种做事方式,Matz 在一次会议上被问到为什么他要这样设计一门语言,对于同一件事情却有多种方式去完成,而他的回答道出了 Ruby 的真心:

“我想要让 Ruby 的用户感到自由,我想要给予他们选择的自由,人都是不一样的。”

于我而言,这无关编程,或者说这不仅仅跟编程相关 - 它是一个文化价值观,关于自由的重要性。对 Matz 来说,自由是通过有选择的能力来体现的。对一个人来说是 “合适” 的东西,对另一个人来说却不一定是 “合适” 的,但是他们其实都没有错,他们只是不同而已。而且他们应该有作为不同个体的权利,且不受任何禁锢。我相信它在生命中的价值,宗教自由,婚姻平等,政治派别,当然也包括编码的自由。

一门编程语言拥抱着像快乐,自由这样的价值观可能看起来是无聊且异端的。毕竟,有谁会去在意编程语言的意识形态?当然不会,毕竟是电脑在运行代码。那么关键点是什么?是什么让 Ruby 把人放在比机器更高的位置?为什么在考虑教育的首选语言的时候需要关心语言设计的细微差别?

编程语言只是工具。工具就是那种看起来是可替换的且不重要的东西。而程序员的鼻祖Edsger Dijkstra曾经提出,“我们所使用的工具对我们思维习惯和能力有深远的影响。” 用通俗的话讲就是:“当你手里拿着一个锤子的时候,你看什么都像钉子。”

hammer and nail

你使用的工具将会影响你的思考方式。而你思考问题的方式是最重要的事情。因此,你用来解决问题的工具将会约束你的想法还会对你是否能解决问题造成影响。每一个工具被设计出来都有它内在的价值。一个锤子的设计的价值主要在于它可以挥舞,在一定重量的固定锤头在前方连同轻盈修长的身体创建了用于冲击的长弧。一个螺丝刀的价值在于结合了长杆以及特定的螺丝头,你可以通过扭动它来完美处理各种尺寸的螺丝。你能用螺丝刀来锤一个钉子吗?或许可以,但在这种场景下,它是一个易用的,高效的,优雅的或者说是值得推荐的工具吗?不,对于人类而言作为工具最重要的是它将被如何使用和能被如何使用。

那么我们能用 Ruby 来做什么?当然,我知道我自己喜爱 Ruby,我从事编程工作 20 多年懂得一大堆语言但却从来没有一门语言让我像对 Ruby 那般喜爱。不仅仅是我 - 许多开发者在学习 Ruby 之后都爱上了它。_why_the_lucky_stiff表达过一种情感,我想这也是许多开发者对 Ruby 的感觉。

images

我的良心不会让我把 Ruby 当做一门计算机语言,因为这将会暗示着这门语言主要是为计算机工作的。如果一门语言设计出来首要的且最重要的目的是为了适应计算机,那么,我们(编码者)就像是外国人在计算机这个国度寻找公民权。这就是计算机的语言而我们是这个世界的翻译者。

但是当你的大脑可以用这门语言来思考,甚至可以用这门语言独特的文字还有语法来表达你自己的时候,你会怎么评价这门语言?这怎么能够被称为计算机语言呢?这是我们的语言。用它来 “说话” 是很自然的事情。

我们不能再把它称作计算机语言,它是用来表达我们思想的语言。

这里还有一些关于 Ruby 的东西,我不能很完整地描述,多少会遗漏掉一些,就是 Ruby 的编程社区。为什么 Ruby 开发者能够持续地为现代的 Web 开发提供创新的灵感呢?如今的 Web 开发在性能表现还有产出速度来看都是很快速的。最佳实践以及相关的约定在不同语言之间是通用的,开发者的工具集以及工作流在今天都是必须品。Ruby 开发者率先开拓 Ruby On Rails 这样的用于快速开发网站的框架,它的约定能够让你在 5 分钟之内构建出一个博客引擎。Ruby On Rails 是第一个拥抱 REST 并让它成为标准的主流框架。很少的 Ruby 开发者会关心 SVN 版本控制以及 Trac 糟糕的用户界面,他们会拥抱 Git 还有 GitHub。Express.js 的 DSL 以及很多其他的特定领域语言都承袭于 Ruby,现在也被其他语言沿用着。Heroku 是无需麻烦配置,虚拟化,Web 应用托管平台的鼻祖一开始是 Ruby 程序员为其他的 Ruby 程序员所创建的。Ruby 程序员已经创建了许多令人惊叹的公司:GitHub, Twitch, Twilio, Airbnb, Shopify 等等。Ruby 这样一门趁手的语言,它的影响还有冲击力是相当大的。

这就是我阐述 Ruby 的方式,再次回到我们所使用的工具中,创新需要做一些不一样的事情。Ruby 程序员组成的团队厌烦了 Ruby On Rails 处理依赖 (你的应用程序用来加速开发进程的开源程序) 的方式。为了解决这个问题他们创建了一个叫做 Bundler 的开源软件。每一种编程语言都有像 Bundler 那样的解决方案的相关实现,包括 Facebook 的 yarn(npm 的一种改进),几乎是直接沿用了 Bundler 的思想。这一切都是因为他们决定在管理依赖上尝试些不同的东西。

大概相同的时间,另外一组 Ruby 程序员在寻思如果人们可以出租他们额外的生活空间将件是多么好的一件事情。这是一个疯狂的想法,所以他们用 Ruby On Rails 迅速构建了一个可行的产品,并对其进行快速迭代。经过多年的修修补补最终有了市场还有点击率,于是我们就有了 Airbnb。

我可以说出许多 Ruby 程序员在编程界以及商界创业成功的故事,但并不是声称这是 Ruby 社区独有的奇迹。我四周看了一下,改变世界的有许多令人难以置信的道路,我们不可能全都了解,不过 Ruby 会占据其中的一条。

为什么许多 Ruby 程序员能够通过创新与发明中取得成功?Ruby 编程语言鼓励创新,并且我们能够用它来创新。如果用锤子意味着摇摆,用螺丝刀意味着转动,则用 Ruby 编程意味着创造。Ruby 这个工具希望你可以感觉到快乐,当我们快乐的时候我们就可以一边玩耍一边探索了。Ruby 这个工具想要我们重视表达并让你可以像使用人类语言那样纯粹地交流。Ruby 这个工具希望你与众不同并创造出你自己的语言。Ruby 开发者继承了这种价值观并发扬了人类具有创造性的精神。

image

为了解更多关于 Flatiron School 的事情,请访问这个网站,关注我们的Facebook还有Twitter,以及你身边的即将到来的事件

Flatiron School 是WeWork家族中让人感到自豪的成员。可以切换到我们姐妹的技术博客WeWork TechnologyMaking Meetup

huacnlee 将本帖设为了精华贴 01月02日 11:02

用什么语言大多数时候是个小问题, 如何正确设计才是真正的大问题。

lilijreey 回复

那倒也是。

重要度:★★★★★

技术团队是否受到信任,并能够得到相应的资源?

团队是否做着对公司业务真正有用的项目?

团队里面的人能否互相信任,有效沟通,并一起推动项目稳步前进?

重要度:★★★★

团队是否有一套合理的开发流程,能够保证从开发到上线中各个过程的平滑过度?

重要度:★★★

团队成员是否具备逻辑分析能力和一定的工程经验,能够将需求拆解并实现?

重要度:★★

选择合适的技术框架。

重要度:★

团队成员是否开心?

adamshen 回复
重要度:★

团队成员是否开心?

没毛病。

分别以从业者和教育者角度看,都有各自需要考虑的问题。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册