学习您不会使用的语言的好处

时间:2009-07-13 13:35:46

标签: programming-languages

我已经读了很多时间,学习Haskell,Lisp或Smalltalk等语言会以某种方式让你成为一个更好的程序员,而你用其他语言编程。

这种说法不只是轶事证据吗? 或者只是人们合理地花费大量时间学习他们永远不会使用的编程语言的方式?

19 个答案:

答案 0 :(得分:20)

恕我直言,这完全是关于学习一种新的编程范式。如果你了解Java然后知道C#,那么一旦它们都具有几乎相同的“编程类型”,就没有太大的收获。 / p>

但是,如果你学习一种功能性语言或动态,例如,你被迫以另一种方式思考,这可能会帮助你用你喜欢的语言更好地编程。

它类似于:“以{您学到的不同语言}这样做很容易。必须有更好的方法来实现{您已经知道的语言} ”。然后你重新思考,并用{你已经知道的语言}建立一种更优雅的方式来做到这一点。

答案 1 :(得分:11)

我没有任何确凿的证据,但我真的很感激自从学习lisp后我遇到的问题的不同方式(对于python和c也是如此)。

关键不一定是学习不同的语言,我相信关键是你通过学习不同的编程风格获得的不同观点。

好的例子是功能性的,命令式的,面向对象的等等。此外,还有一些常见的设计差异被解释为编译语言;静态与动态类型等

虽然大多数人使用单一风格(最常见的是过去几年的OOP)进行大部分编程,但我认为所有程序员都应该知道多种风格,以便他们能够更好地看到自己风格的不足

答案 2 :(得分:3)

编程语言方面无法对此有所了解,但它似乎与“为何学习死语言”非常相似?围绕拉丁语的论证,可以在这里应用大部分推理。

答案 3 :(得分:3)

编程是一种思考方式,而不是用编程语言X编写代码:这是“编码”,而不是“编程”。

通过了解至少一种不仅仅是一种编程语言的东西 - 最好是跨越不同的范例,如此命令/ OOP /功能/逻辑 - 你训练那种在特定细节和语言怪癖背景之外的问题的思考方式{ {1}}。

我认为这总能提高你成为一名优秀程序员的能力。

答案 4 :(得分:2)

学习新语言的一个很好的副作用是可以在现有语言中应用。

例如,我是一名Java程序员,我花时间学习我的第一个函数式语言(Haskell)。我最近被要求学习Scala即将开展的项目。这非常简单,因为我理解来自Haskell的守卫,递归等的概念。

答案 5 :(得分:1)

学习语言不是二元事件。如果你是一个体面的程序员,你应该能够相信自己的直觉,看一种语言是否能为你提供新的技能。

几乎每种值得考虑的语言都可以在几分钟内下载并测试。所以这样做 - 选择一个并尝试一下。

这种“自由放任”方法不足的情况有限。如果你是一个完整的初学者,当然它不起作用。当我第一次学习C时,我不得不把它击败,但它确实值得,因为它让我理解指针,内存参考和动态分配,这是我以前没有的。

但如果你已经知道了很多,那就去寻找一种让你的灯泡继续运转的语言。

答案 6 :(得分:1)

想到的一些例子:

了解C并且必须处理内存管理和自己动手的数据结构可以帮助您在使用更高级语言进行编程时了解性能问题,而这些语言中隐藏着这些细节。

相反,学习OO语言会影响你的C编程 - 例如,多态性的概念会提示你以你可能没有的方式使用函数指针。

学习一种语言,其中函数是可以传递的第一类对象,可以让你在其他语言中考虑类似的技术,即使在其他语言中,你必须在传递的对象中创建函数方法。

了解Erlang处理并发的方式可以让您重新考虑在其他语言的线程之间使用多少共享状态。

任何具有您认为有用的内置功能的语言都可以提示您使用另一种没有它的语言实现您自己的该功能版本,从而让您以您可能没有想过的方式解决问题如果你没有接触到内置语言的功能。

了解Java中的接口可以让您思考在其他语言中精确指定(小“i”)接口的好处,这些接口没有它们作为类型系统中的正式构造。

毫无疑问还有其他人。

答案 7 :(得分:1)

如果您对Pragmatic Programming人提供任何信任,请考虑他们first book第14页的建议:

  

每年至少学习一门新语言。不同的语言   以不同的方式解决同样的问题。通过学习几个   不同的方法,你可以帮助拓宽思路,避免   卡在车辙中。

答案 8 :(得分:1)

我不知道对于多编程语言暴露对整体编程能力的好处会有很多严谨的研究,但我认为有关为什么要学习外国人类语言(你可能永远不会使用)的研究在实践中)对于学习 外来 编程语言一般都是有益的。造成的好处通常包括提高认知能力以及提高对一个人母语的理解。

here's some links to studies

有趣的是,我抱怨COBOL很多,并且从来没有真正 使用它 但是能够在我的第一份工作中应用我在该课程中学到的东西。

答案 9 :(得分:1)

为学习语言而深入学习语言的好处太少了。如果你有很多任务,并且你不知道解决它的理想语言,那么学习这门语言是有意义的。否则,花时间成为您已经掌握的语言专家是有意义的。

答案 10 :(得分:0)

已经提出了一些好处。

我想补充一点,你不会在生产工作中使用的学习语言是有价值的

  1. 更好地理解和吸收文本和论文中的论点和方法,这些论点和方法将提高我用于生产工作的语言的编程能力(例如,针对Knuth的计算机编程艺术的MIX / MMIX;针对Kernighan和Plauger软件的RATFOR工具;我仍然使用一些基于ALGOL的语法来处理某些伪代码,尽管我从未在大学外的ALGOL中编写可运行的代码)

  2. 能够检查或原型化将用不同语言编写的程序(例如,可以使用具有适当功能的语言(例如Fortran,Python)快速检查或缩放某些C语言中的数值计算例程或者Haskell)

  3. 学习一门新语言可以深入了解如何使用它来更轻松地解决由于时间或复杂性限制而被放在一边的问题。

答案 11 :(得分:0)

不同的语言有不同的方法来实现相同的想法。通过学习新语言,您可以获得有关如何完成任务的不同视角,然后可以使用该知识来了解您在当前环境中的编程方式。考虑面向对象和函数式编程。 OO程序员可以从C语言中学到很多关于parrellization的知识。

答案 12 :(得分:0)

Bryond已经说过了,我真的很喜欢新语言,因为它可以为编程带来新的兴趣。您将学习解决问题的不同方法以及某些语言的优点/缺点。这是一个新学习的东西,任何优秀的程序员都应该努力学习新东西。它混合了您可能使用相同语言编程的日常工作多年。

我也喜欢每个人都对编程视角所说的话。

答案 13 :(得分:0)

我花了一些时间学习clojure,尽管我知道我不会在短期内使用它(主要是因为我无法真正部署在JVM上)。

它的概念不受我使用的语言(C#/ C / C ++ / Python / Perl)支持,我想知道我缺少什么,以及是否值得查看声称要添加的库这些功能。

具体来说,我对理解Lisp风格的宏和直接并发支持非常感兴趣。我还花了一些时间阅读实现,特别是数据结构,这是非常有教育意义的 - 很高兴看到持久数据结构的高质量实现,以了解它们如何工作(并在不牺牲性能的情况下为您提供不变性)。

答案 14 :(得分:0)

学习数学或物理学有什么好处,你不会使用,或学习哲学或死舌头的好处?

这是知识的成就和启发的重要性,无论是编程语言,文学,角色扮演游戏,你都会成为一个更聪明的人,你会学到任何新东西......当然,如果它与你的相关工作领域,然后你迟早会找到一个用途: - )

答案 15 :(得分:0)

这完全是主观的,但是当我在Haskell学习本科课程后,我注意到我在C语言中的编程风格变得更像“Haskell”了一段时间;我使用了很多简单的递归函数。我也注意到这种编程风格似乎带来了Haskell编程的一些相同的好处;错误较少,代码更容易理解(尽管速度较慢)。

所以,虽然学习另一种编程语言可能不会让每个人成为更好的程序员,但对我个人而言,这绝对是一次学习经历。

答案 16 :(得分:0)

我认为不会有任何确凿的证据 - 我认为这更直观。学习一种完全不同的语言将有助于你看待完全不同的事物。或许它不会。在任何情况下,学习什么都有害?

答案 17 :(得分:0)

我认为即使您不再使用它们,学习语言也会让您受益。我开始玩Ioke作为尝试学习实验的一种尝试,因此我的JavaScript得到了改进,因为某些想法已被巩固。

学习一门新语言可能会为您提供新的见解,您将尝试将其翻译成您的主要语言。

答案 18 :(得分:0)

学习一门语言,尤其是一门练习新范式的语言,对每个程序员都非常有益。例如,学习计划将帮助某人理解函数式编程。程序员以后可以用C#等其他语言练习他/她学到的东西。她可以想出新的做事方式。

此外,随着语言的发展,您使用的语言很可能会采用其他语言的某些功能。在自学了Ruby之后,我能够更轻松地掌握C#3.0中的变化。