InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

你真的应该再学习一种语言么?

作者 Niclas Nilsson 译者 韩锴 发布于 2008年5月27日

领域
架构 & 设计,
语言 & 开发
主题
编程 ,
动态语言 ,
架构 ,
语言
标签
持续改进 ,
语言特性 ,
语言 ,
面向对象编程 ,
元编程 ,
函数式编程 ,
并行计算

当博客作者Gustavo Duarte宣称“学习新语言通常都是在浪费时间”时,他的观点受到了很大的争议。最初,他以标题“New Languages Considered Harmful”发表了文章,这是在刻意模仿Dijksta那篇关于Goto的经典论文,但是由于来自他人的反响过于强烈,因此它改了一个更为柔和的标题“Language Dabbling Considered Wasteful”。

对于专业程序员来说,学习新语言通常都是在浪费时间。尽管这种浪费可能很有趣(比如,成为一种嗜好),但是它仍然是浪费。如果你只是为了取乐,那么好吧,但是利润将受到威胁。在一群卓越的程序员面前宣传这种论调无异于异端邪说:甚至《The Pragmatic Programmer》这本书还建议我们应该每年都学习一种新语言(不过它的其他建议总体上说还是不错的)。这简直是废话。

他还解释了他认为学习新语言无用的原因:

潜在的理论是,通过学习新语言,你可以“扩展思路”,并成为一名“更优秀的程序员”。没错。只不过按照这种论断,吸毒也可以拓展我们的经验(可千万别试!)。事实上,学习一种新的语言是桩得不偿失的买卖,把大量的精力花费在低价值的任务上,这种时间投资只能获得很少的回报。

Gustavo批评了Scott关于“学习新语言就是在不断地磨利自己的砍柴刀”的类比。Scott说:

今年,我在学习Ruby。这意味着我的团队转移到Ruby上了么?大概不是。它不过是意味着我今年正在学习Ruby,我要坚持不懈地磨利工具。你可能忙于砍柴没功夫磨刀,但是我想提醒你——不管你用的是哪个牌子、哪种类型的刀——记住,别的人用其他牌子、其他类型的刀也照样顺顺当当地砍柴。别人也有你不知道的招式。

Gustavo不相信事情会如Scott所述。

Scott Hanselman争论说学习新语言是在磨利砍柴刀,但是我觉得他是被新买来明晃晃的钝刀子迷住了,反而忽略了自己那把磨了一半的旧刀子。与其有一打不好不坏的刀,不如只留下三把非常锋利的。你在工具箱中加入的每一种新语言,都将使你更难以利用已有的语言达到更大的生产力的提升。

网上还有大量后续的讨论。

最有趣的评论来自于Hacker’s news,它是Lisp技术传播者Paul Graham的站点的一部分。Scott Schneider在评论中说到:

我认为他坚持这种观点是因为持有这样的假设,即所有语言都有相同的概念,它们彼此只是“字面表达和句法风格”不同而已。但是我认为,建议学习更多编程的出发点在于让你自己可以接触到不同的程序设计范型。以此为目的,我并认为你不一定要把每一种语言都研究到钻牛角尖的程度,但应该能轻松自在地以一种新的方式去思考。

Steven Hazel继续说道:

我认为“刚好够用(enough)”是一个关键点。文章的作者似乎在探讨是否应该每年都转移到一种新的语言上,这一点我承认是很荒谬的。真正的含义在于学习一些新概念,而不是每一年都把关键的程序用新的语言实现。事实上,只有一种语言是务实的选择时,我才会在日常工作中采用它。

Alain Perils在其经典的“Epigrams on Programming”中宣称,“如果一种语言不会影响你思考程序设计的方式,那么它不值得学习。”,这一点和Eric Raymond’的发现非常吻合:

Lisp是值得学习的。一旦你真正掌握了它,就能获得非常有深度的、具有启发意义的经验;这些经验将让你在以后的日子里成为一个更优秀的程序员,即使你再也不会用到Lisp。

下面的引用来自于Paul Graham的著名的文章“Beating the averages”,文中他提出了“The Blub Paradox”。文章中称:

达到了一定的年龄后,程序员很少再主动去转换语言了。无论他们曾经用过哪些语言,他们开始考虑“刚好够用”就行了。

The Blub Paradox理论是指,每个人都知道他们为什么喜欢自己所选择的语言,这个原因通常都是该语言很强大。他们放弃机器语言而选择了C语言,是为了提高程序员的生产力;放弃了C语言而选择Java,是为了进一步抽象,最终还是提高程序员的生产力。当然,他们也听说过其他的语言,但是他们认为“我用现在的语言可以解决眼前的问题,因此没有必要去学习另一种语言。”

程序设计语言,或者其他类型的语言,当你理解了它后(未必掌握得非常熟练),它开始左右你的思考。根据自然语言研究者的研究,如果一个词汇(或者一类词汇)没有在某种语言中出现过,那么人们在思考这个词汇所表现的概念时相当困难。Paul Graham指出在程序设计语言的领域里也有相似的情况发生:

让程序来写程序?你什么时候会想去做这种事?如果你用Cobol,并不经常。如果你用Lisp,这种事每天都在发生。

那么,你应该花时间去学习一种新的语言么?如果你决定去学,如何选择下一种语言才能获得最大的收获呢?

Google的研究主管Peter Norvig撰写了一篇名为“Teach Yourself Programming in Ten Years”的文章,文中他给出了关于如何选择语言的精辟的建议:

至少要学习半打语言。其中包括支持类抽象的语言(比如Java或者C++),支持函数抽象的语言(比如Lisp或者ML),支持句法抽象的语言(比如Lisp),支持声明式规范的语言(比如Prolog或者C++模板),支持协同程序(coroutine)的语言(比如Icon或者Scheme),以及支持并行机制的语言(比如Sisal)。

那么,你的看法呢?你会学习新语言么,还是认为那是在浪费时间?

查看英文原文Should you really learn another language?

译者 韩锴 毕业于北京工业大学软件学院,现任ThoughtWorks公司咨询师,热衷于敏捷软件开发技术的实践和推广。

基本上不学还是没什么意思的吧 每种面包都可以吃一下的 发表人 withyou gakaki 发表于
欣赏InofQ的这种文章风格,这一直是我梦寐以求的技术门户的风格 发表人 Wang ShiYong 发表于
Re: 欣赏InofQ的这种文章风格,这一直是我梦寐以求的技术门户的风格 发表人 小刀 凉粉 发表于
Re: 欣赏InofQ的这种文章风格,这一直是我梦寐以求的技术门户的风格 发表人 霍 泰稳 发表于
Re: 欣赏InofQ的这种文章风格,这一直是我梦寐以求的技术门户的风格 发表人 Guo Xiaogang 发表于
就好像习武的只练一种拳法一样 发表人 曹 云飞 发表于
Re: 就好像习武的只练一种拳法一样 发表人 邓 超 发表于
  1. 返回顶部

    基本上不学还是没什么意思的吧 每种面包都可以吃一下的

    发表人 withyou gakaki

    java薪资高啊 javascript 不会的ajax怎么弄 css其实也算个语言了
    ruby 的activerecord就是java的orm没有的绝招

  2. 返回顶部

    欣赏InofQ的这种文章风格,这一直是我梦寐以求的技术门户的风格

    发表人 Wang ShiYong

       InfoQ只是提出一个问题,提供对此的不同观点。进一步提供这些不同观点的原始链接。你可以了解这些不同观点,也可以深入这些观点的原始链接进行延伸阅读。了解这些以后,你可以进行思考以形成自己的观点。在InfoQ,它并不试图去引导读者形成什么观点,它只是把某件事情放到读者的面前。告诉读者不同的人对此所持的不同观点。至于最终读者的观点,完全取决于读者此该事情本身了解的深度及进行的相应思考。结论不是它灌输给读者的,而是读者自己思考得到的。InfoQ的这种文章风格是我一直以来梦寐以求的技术门户网站的应该具有的风格。

  3. 返回顶部

    Re: 欣赏InofQ的这种文章风格,这一直是我梦寐以求的技术门户的风格

    发表人 小刀 凉粉

    呵呵,非常感谢王士勇同学的高度评价啊

  4. 返回顶部

    Re: 欣赏InofQ的这种文章风格,这一直是我梦寐以求的技术门户的风格

    发表人 霍 泰稳

    感谢王士勇同学的褒奖,让我们受宠若惊啊,呵呵。不过你所说的也恰好是我们所追求的,就是尽量为读者提供多方面的观点,然后读者通过自己的思考去得出结论。

    喜欢InfoQ中文站的话,就经常来:)而且欢迎多在你的博客和社区里广而告之,多多益善!



    ——InfoQ中文站编辑 霍泰稳

  5. 返回顶部

    就好像习武的只练一种拳法一样

    发表人 曹 云飞

    一辈子只练一种拳法,当然可以达到非常高的水平,也许这一种拳法就可以打遍天下。
    但是还有一种途径,也是多数武学大师的途径,学习多种拳法,融会贯通,达到达成。比如李小龙。
    我们编程的也类似吧。

  6. 返回顶部

    Re: 欣赏InofQ的这种文章风格,这一直是我梦寐以求的技术门户的风格

    发表人 Guo Xiaogang

    与有荣焉。

  7. 返回顶部

    Re: 就好像习武的只练一种拳法一样

    发表人 邓 超

    楼上前辈说得正是!将多种语言提炼精华、融会贯通才是重点。

深度内容

大规模视频网站的计费与流量管理

本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011

专访Jeffrey Richter:Windows 8是微软的重中之重

Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。