写点什么

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

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?

2008 年 5 月 27 日 06:32806
用户头像

发布了 53 篇内容, 共 92390 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

【年度重磅】2020华为云社区年度技术精选合集,700页+免费下载!

华为云开发者社区

数据库 AI 云原生 物联网 华为云

智能building 之智慧城市

张老蔫

28天写作

娄底携手浪潮,打造了智慧城市建设的“娄底样板”

浪潮云

《Java 面经手册》PDF,全书5章29节,417页11.5万字,完稿&发版!

小傅哥

Java 小傅哥 PDF 大厂面试 面经手册

平安智慧社区建设解决方案,江西吉安老旧小区改造

WX13823153201

平安智慧社区建设

面试官常问的垃圾回收器,这次全搞懂

Silently9527

Java JVM 垃圾回收 GC

第二周作业

Geek_6a8931

数据库覆盖式数据导入方法:部分和完全

华为云开发者社区

数据库 sql 数据 DWS 覆盖式导入

【总结】产品经理训练营 | 02 产品思维和产品意识(上、中)

阿席达卡。

计算机网络学习第一课

落曦

2021年1月国产数据库排行榜:OceanBase重回前三,TDSQL增长趋势最强劲!

墨天轮

数据库

信任是一种需要牺牲效率持续发出的信号

Justin

心理学 信任 市场营销 28天写作

Android Styling System

Changing Lin

android

30+岁、没转管理、加不动班,我的竞争力从哪里来?

博文视点Broadview

趋势预测:2021年五大流行的编程语言

禅道项目管理

Java php python 爬虫 趋势

甲方日常 90

句子

工作 随笔杂谈 日常

宗谱链,区块链宗谱链让族谱永流传

WX13823153201

宗谱链

智能汽车如何赚钱? (28天写作 Day19/28)

mtfelix

商业模式 28天写作 智能汽车 软件定义汽车

keepalived 实现Nginx高可用安装

庞小辉

架构师训练营-大作业:物流系统架构设计

晴空万里

架构师训练营第2期

【图文并茂,点赞收藏哦!】重学巩固你的Vuejs知识体系

魔王哪吒

程序员 面试 Vue 前端 Web

红帽架构师:为什么KubeEdge是2020年我最喜欢的开源项目?

华为云原生团队

开源 云原生 边缘计算 开源项目 边缘技术

屏幕共享功能的应用

anyRTC开发者

android 音视频 WebRTC 在线教育 视频会议

从定义到AST及其遍历方式,一文带你搞懂Antlr4

华为云开发者社区

Java AST 语言 antlr4 语法分析器

开发的必杀技:Git 的分支管理

华为云开发者社区

git Linux 分支

并发条件队列之Condition 精讲

伯阳

AQS 多线程 lock Condition 条件队列

八大案例带你了解图数据库如何洞察数据间关联价值

Nebula Graph

图数据库 图数据库实战

转角遇上Volcano,看HPC如何应用在气象行业

华为云开发者社区

容器 云原生 HPC Volcano 批量计算

产品经理训练营第二章作业——利益相关者

阿波

我用PHP写的第一个Hello world

熊斌

28天写作

Kubernetes Pod篇:带你轻松玩转Pod

xcbeyond

Kubernetes pod 28天写作 Kubernetes从入门到精通 服务编排

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

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