我之前在一篇博文中讨论过多语言开发的问题。这周有很多朋友发来评论和邮件,支持和反对的声音自然也不少。其实这也在意料之中。这样有争议的话题,总是会带来两个不同的阵营,双方会争吵不休。真不明白为什么事情总是要这样,也许早在我们的孩子时代就有这种迹象:当喜欢雪佛兰品牌的孩子在福特身上撒尿,而支持福特品牌的孩子也撒尿了在上面。很高兴用污物在脸上涂抹雪佛兰。或许随着年龄的增长,我们不会再纠结于超人和蝙蝠侠谁更强大,但类似的争论依然时常不断地出现在我们身边。我们倾向于过度依赖我们“最喜欢的”语言,任何人都很难摆脱他们熟悉的一切并迈向未知。我们都喜欢在自己选择的“壳”里平静地生活。从通用的Bashshell切换到Zsh确实让我们接触到了一个与以往截然不同的新世界,突破了思维的惯性,但随之而来的陌生感、失落感,以及必须经历的宝贵时间被投入到学习过程中不免让人感到不自在。恼火的是,有时我们宁愿把它抛在脑后,再次回到Bash。这不难理解,毕竟不是每个人都有足够的时间推翻自己几十年积累的经验,下定决心从头学起——不管最后的结果多么吸引人,代价也太高了.然而,在不同的编程语言之间游弋,是开发者提升自我的理想方式,这是永恒不变的真理。无论是编程语言、shell还是应用程序,我们总是选择自己最熟悉的命令和做法,一旦建立起基本的工作习惯,就再也不想离开这个温暖舒适的舒适区。比如今天在使用Vi编辑器的时候,我还是习惯性地连按三下“w”键将光标向前推三个字格,或者按“0”键直接将光标移动到这个字上。行结束;我确定我可以使用更简洁的运算符,如“3w”或“)”,但这是可怕的习惯力量。同样的道理,当我需要向上移到文件顶部时,我总会本能地使用“1G”而不是“gg”。这些直觉反应已经融入了我的血液。这种情况在开发工作中也很常见。我们有我们积累的功能认知,有经过验证且稳定可靠的处理方法,我们有我们最喜欢的语言掌握了即用型的操作模块。虽然我们知道其他语言的用法,但是当我们真正面对这些功能元素时,我们还是有一种莫名的踏入未知领域的恐惧感。有趣的是,在大多数情况下,反复使用固有方法浪费的时间足以帮助我们学习和掌握其他语言提供的更科学的处理机制。一旦我们将相同的内容写了几十遍,我们就失去了观察其背后逻辑的欲望和理由。我们只知道我们可以添加这些功能,填写它们,它们会自动给出相应的正确答案。就这样,青春在重复中离开了我们。但是如果我们换一种思路,基于不同的语言来审视同一个功能,往往会发现更多以前没有意识到的优化空间。通过新视角查看旧代码既令人兴奋又令人恐惧,但这正是它的意义所在。但要拨开迷雾,大家必须认识到一个事实,即大多数开发人员在工作过程中已经使用多种语言进行编程了——只是很多人还没有意识到这一点。我们写的代码写其他代码,这个“其他代码”产生新的代码,这就是现代网络应用的本质。我们用Python、PHP或Ruby编写的代码会生成JavaScript和HTML。在使用Rails等框架时,我们编写引用函数的代码来为我们生成HTML、CSS、SQL和JavaScript结果。在这样的情况下,无论选择哪种核心语言,Web应用开发者都必须从工作之初就精通多种编程语言。当然,在Rails中写十行代码让一个Web应用程序执行一些简单的功能——比如向数据库中插入一个文本字段并显示返回的结果——似乎没有什么困难,但如果你不熟悉用语言尝试解决限制性问题或检查代码问题的过程中,必然会遇到许多其他更严峻的挑战。正如我在上周的文章中所说,选择成为一名多语言开发者不仅拓宽了我们的选择范围,还有助于我们更加了解当前项目的实际需求和特定语言的实际需求。功能之间有什么交集和区别。当然,最理想的情况是大家已经具备多语言开发能力,并且从事过Web应用。考虑到这一点,在我看来,花几天时间将你已经用一种语言编写的内容重写成另一种语言是掌握一门新语言的最快方法。是的,这是那些“重新发明轮子”的迭代过程之一,但由于模板是我们提供的,我们复制的轮子至少源于我们自己的创新。英文:http://www.infoworld.com/d/data-center/dont-want-mix-programming-languages-you-already-do-239907【编辑推荐】2014年5月编程语言排行榜:AdobeActionScript进入top20技术花絮:13种编程语言及其名字背后的故事你最喜欢的编程语言其实很烂2014年4月编程语言排行榜:Perl创历史新低90分钟实现一门编程语言——极简主义解释器教程
