【译】为什么教Ruby
PS: 这是国外一位有20多年编程经验的培训师在Medium发表的对Ruby及编程的一些看法,不管是否是程序员都可以考虑看一下。如果你想学编程却苦于不知道选什么语言,或许这是一篇不错的参考。原文链接: https://medium.com/flatiron-labs/why-teach-ruby-8010ab3079fd
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占有着更大的市场份额。
评估一个语言的流行度是一件困难的事情,但是https://www.tiobe.com/tiobe-index/ 这个网站包含许多测量手段,从社区指标,职位,还有相关平台的情况来综合评估。
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”这样的标签在我看来是有危险的,我担心学生们会被自己声称已经精通的编程语言永远地限制了潜在的能力。如果从来不教学生如何去学习一些特定语言之外的东西,就会对他们编程语言外的身份缺乏自信。培训学校的压力来自于实用性,市场驱动,通过设置整体性,通用性更强并包含哲学思索能力的课程,能够更好的训练他们,并不仅仅是为了第一份工作,而是一个更丰富的职业生涯。
我们都有自己喜欢的语言,我们其实都很棒。
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那样的前沿编程语言呢?对于学生而言,第一门编程语言真正重要的是什么?
学生首次学习的不管是什么编程语言,最重要的事情是,这门语言会让他深深地爱上代码。
编程是一门艺术。像是诗篇,舞蹈还有音乐,不管是法国还是西班牙的诗篇,现代舞蹈还是芭蕾舞,古典音乐还是高科技舞曲,这些实际的风格或者表达的语言对艺术而言都没那么重要。诗篇并不在于它是印度语,英语还是德语的,而在于抽象观念,如押韵,韵律,比喻,隐喻,节奏,构成等等,当然还有其他-任何语言都能够表达的普遍概念。编程也不在乎是用Ruby,Java,JavaScript还是C#,而在于抽象的,语义学,封装,逻辑,接口等等,并且这些概念在每种编程语言中都会有所体现。
作为一个初学编程的人,最重要的事情是真正学习到那些通用的概念,这些概念会通过你的第一门编程语言表现出来。最危险的事情是你在“这是我为了找到工作所需学习的所有东西“这种观念下被教授第一门编程语言,你将永远学不会怎么去识别那些概念。会让你因为这一棵树而错失整个森林,也不会明白怎么去接触一门新的编程语言。你当然也会遗憾地错失代码中所有美好及优雅的东西。
编程的快乐并不会隐藏在一门或者另一门语言的技术实现中,我们会在编程的这些非凡媒介中找到快乐,就像是Ada Lovelace在“运营的科学”所说的中。Ada过去曾预言:
“运营的科学,尤其是作为数学的衍生物,它自身就是科学,并且有它自身的抽象事实和价值。”
学习编写代码却没有学会如何去识别工艺上的抽象真理是个不幸的事情。学习一门编程语言从来都不是学习如何编写代码最重要的。学习编码时最重要的事情是体会到代码自身惊异的美。学生应该深深地爱上代码。
我们培训学生首先会让他们爱上代码,为了完成这个任务,Ruby是很好的选择。是什么让Ruby成为程序员美妙的初恋?这应该追溯到这门语言的设计。Yukihiro Matsumoto,就是我们所知的Matz,一名日本程序员也是这门语言的发明者,明确地声明过他对这门语言的期望:
Ruby的目标是让程序员快乐,我着手发明一种可以让我感觉到快乐的编程语言,作为一种副作用,它也会使许多的程序员感到快乐。
创造一门编程语言的理由可以有数百种,几乎所有的理由都会跟编码的场景有关--为了跨平台编译更容易,为了优化并行过程,为了“跑得更快”等等。至今我所知道的,在编程语言的历史上唯一为了你的快乐而发明出来的语言就只有Ruby。Ruby重视你(程序员)胜过重视机器。一个早期高产的Ruby程序员,他叫whytheluckystiff,曾在RailsConf 2016 Talk里面这样描述Ruby:
“Ruby是这样一种东西....用Ruby来写代码真的会让你爱上编码这件事,感觉到热情和乐趣,它激烈地搅动你的内心,它是一门多么美妙的语言,当然我说得有点色情。方法调用是连贯的,脱下了括号,裸露地串联起来,这就像是......热情洋溢的红宝石。”
这些以人为本的价值观念,不断体现在这门语言的设计选择当中。最鼓舞人心的可能就是Ruby为相同的任务提供不止一种方式。实现的选择通常被看做是一门语言的短板。现实中,Python在“Python之禅”中宣称这样一条价值观:“应该有一种-最完美的-显而易见的方式去做一件事情”。
Ruby却提供了无数种做事方式,Matz在一次会议上被问到为什么他要这样设计一门语言,对于同一件事情却有多种方式去完成,而他的回答道出了Ruby的真心:
“我想要让Ruby的用户感到自由,我想要给予他们选择的自由,人都是不一样的。”
于我而言,这无关编程,或者说这不仅仅跟编程相关-它是一个文化价值观,关于自由的重要性。对Matz来说,自由是通过有选择的能力来体现的。对一个人来说是“合适”的东西,对另一个人来说却不一定是“合适”的,但是他们其实都没有错,他们只是不同而已。而且他们应该有作为不同个体的权利,且不受任何禁锢。我相信它在生命中的价值,宗教自由,婚姻平等,政治派别,当然也包括编码的自由。
一门编程语言拥抱着像快乐,自由这样的价值观可能看起来是无聊且异端的。毕竟,有谁会去在意编程语言的意识形态?当然不会,毕竟是电脑在运行代码。那么关键点是什么?是什么让Ruby把人放在比机器更高的位置?为什么在考虑教育的首选语言的时候需要关心语言设计的细微差别?
编程语言只是工具。工具就是那种看起来是可替换的且不重要的东西。而程序员的鼻祖Edsger Dijkstra曾经提出,“我们所使用的工具对我们思维习惯和能力有深远的影响。”用通俗的话讲就是:“当你手里拿着一个锤子的时候,你看什么都像钉子。”
你使用的工具将会影响你的思考方式。而你思考问题的方式是最重要的事情。因此,你用来解决问题的工具将会约束你的想法还会对你是否能解决问题造成影响。每一个工具被设计出来都有它内在的价值。一个锤子的设计的价值主要在于它可以挥舞,在一定重量的固定锤头在前方连同轻盈修长的身体创建了用于冲击的长弧。一个螺丝刀的价值在于结合了长杆以及特定的螺丝头,你可以通过扭动它来完美处理各种尺寸的螺丝。你能用螺丝刀来锤一个钉子吗?或许可以,但在这种场景下,它是一个易用的,高效的,优雅的或者说是值得推荐的工具吗?不,对于人类而言作为工具最重要的是它将被如何使用和能被如何使用。
那么我们能用Ruby来做什么?当然,我知道我自己喜爱Ruby,我从事编程工作20多年懂得一大堆语言但却从来没有一门语言让我像对Ruby那般喜爱。不仅仅是我-许多开发者在学习Ruby之后都爱上了它。whytheluckystiff表达过一种情感,我想这也是许多开发者对Ruby的感觉。
我的良心不会让我把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开发者继承了这种价值观并发扬了人类具有创造性的精神。
为了解更多关于Flatiron School的事情,请访问这个网站,关注我们的Facebook还有Twitter,以及你身边的即将到来的事件。
Flatiron School是WeWork家族中让人感到自豪的成员。可以切换到我们姐妹的技术博客WeWork Technology和Making Meetup。