不愿将多种编程语言杂糅在一起?可能你还没意识到而已

译文
开发 开发工具
利用多种语言进行开发已经成为常态,积极接受才是编程人员最为明智的选择。

[[112781]] 

之前我曾经在一篇博文中就多语言开发的问题进行过探讨,这一周来很多朋友发来了评论与邮件,其中自然不乏支持与反对的声音。其实这也早在意料之中,此类争议性话题总会带来两个不同阵营,双方分执一词吵个不可开交。

我实在弄不清楚为什么事情总要变成这样,也许这一切早在我们的孩提时代就已有征兆:那时候偏爱雪佛兰品牌的小孩儿会在福特汽车上小便,而支持福特品牌的小孩儿也乐于用污物糊雪佛兰一熊脸。也许随着年纪的增长、我们不会再纠结于超人和蝙蝠侠谁更厉害,但类似的争论却仍然经常性、持续性出现在我们身边。

我们往往会对自己“最偏爱”的语言产生过度依赖,对于任何人来说挣脱自己熟悉的一切、踏出迈向未知领域的步伐都相当困难。我们都喜欢躲在自己选定的“shell(壳)”里平静生活。从通用的Bash shell转向Zsh确实能让我们接触到一个迥异于前且突破了思维惯性的新世界,但由此带来的陌生感、失落感以及学习过程所必须投入的宝贵时间都不免让人感到恼火,有时候我们甚至宁愿抛开这一切、再度回到Bash的怀抱。这并不难理解,毕竟不是每个人都拥有充足的时间来推翻自己过去几十年中积累的经验、下定决心从头学起——无论最终成果有多么诱人,这样的成本都实在太过高昂了。

然而在不同编程语言之间游弋对于开发人员来说是一种非常理想的自我提升方式,这是永远颠扑不破的真理。无论是编程语言、shell还是应用程序,我们总是会选择那些自己最为熟悉的命令及实践方式,而且一旦建立起基本工作习惯、我们就再也不想离开这个温暖而舒适的安乐窝了。

举例来说,今天在使用Vi编辑器的时候,我仍然习惯性地连敲三次“w”键来将光标向前推向三个词距,或者按下“0”来直接将光标移至本行末尾;我当然知道可以使用“3w”或者“)”这类更为简洁的运算符,但习惯的力量就是这么可怕。同样的道理,当需要上移至文件顶端时,我永远会本能地使用“1G”而非“gg”。这些直观反应已经溶化在了我的血液当中。

这类情况在开发工作中同样数见不鲜。我们拥有自己积累下来的函数认知、久经考验且稳定可靠的处理方法,也在自己喜爱的语言中掌握了拿来就用的操作模块。尽管我们清楚其它语言的用法,但在真正面对这些功能元素时、我们仍然会有种踏入未知水域的莫名恐惧感。

有趣的是,在多数情况下,浪费在反复使用固有方法上的时间足以帮助我们学习并掌握其它语言所提供的更为科学的处理机制。一旦我们拥有了数十次同一内容的编写经验,我们就会丧失观察其背后逻辑的愿望与理由。我们只知道我们可以将这些函数添加进来、为其填写内容,它们就自然会给出相应的正确答案。如此这般,青春就在重复中离我们而去。但如果换一种思路,立足于不同语言对同样的函数加以审视、我们往往会发现更多原先从未意识到的优化空间。用新视角观察旧代码既新鲜刺激又令人恐惧,但这也正是其意义所在。

但拨开重重迷雾,大家必须认清这样一个事实:大部分开发者已经在工作过程中使用多种语言进行程序编写——只不过很多人还没有意识到。我们所编写的代码又会编写出其它代码,而这些“其它代码”又会生成新的代码,这正是现代Web应用的特性。我们所编写的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

【编辑推荐】

 

责任编辑:林师授 来源: 51CTO
相关推荐

2015-08-06 14:58:27

服务器虚拟化深信服

2019-04-23 15:38:42

2023-03-30 16:23:09

人工智能AI

2013-05-31 09:03:47

SkypeLync集成

2018-02-01 21:18:40

戴尔

2020-12-22 06:02:48

JS聚合聊天

2009-11-06 08:57:31

WCF开发

2013-08-06 09:49:01

2016-08-12 09:49:06

Intel

2014-08-12 09:54:35

Web语言编程语言

2015-03-05 10:27:56

苹果IBM

2020-05-22 10:21:30

5G4G运营商

2021-01-25 16:25:16

人工智能机器人自动驾驶

2021-01-26 10:45:33

人工智能人工智能发展

2017-11-15 08:26:52

IntelAMD技术

2011-01-20 11:42:49

同事

2015-10-20 16:48:06

AnsibleDocker可扩展设计

2020-06-12 11:08:39

应用程序集成自动化

2019-01-04 08:11:25

SoC5G基带

2016-03-31 13:22:51

UbuntuFreeBSD发行版
点赞
收藏

51CTO技术栈公众号