您是否可以通过学习其他语言范例来提高编程技能?


9

如果是这样,您能告诉我学习新的范式是如何改变您解决编程问题的方法的,即使问题出在另一范式/语言/技术中?

如果您能以一种特定的方式告诉我,我将不胜感激,通过学习Y(即Scheme / Prolog / Lisp)可以提高您的X(即JAVA / C#/ C ++)编程技能。

另外,您建议什么范例最有助于成为一名优秀的程序员?

我的经验只是结构化的-OOP,命令式-过程性的,并且在某种程度上是模板元编程,但是我的目标不是学习另一种语言,而是学习解决问题的不同方法。

谢谢!


1
我相信答案将是某种肯定的回答。
R0MANARMY

Answers:


7

我尝试每年至少学习1-2种新语言。我获得的最大收获是学习了一种功能语言(F#),它改变了我解决问题的方式-我现在想告诉机器做什么而不是怎么做,尤其是在我大量使用Linq的C#中和不可变的对象,现在我知道使用它们的好处。我还使用了很多高阶函数(方法作为参数),结果导致我的编码样式发生了变化(改进)。


1
我的Python编程也一样。如果我不了解我最终使用的技术(树几乎暗示了递归或其手推版本,那么解析器生成器包括在内),我肯定会在一定程度上写所有那些用树计划和解析器生成的代码而失败。是通过学习Haskell获得解析器组合器等启发的高阶函数。

谢谢,您重申了我的疑虑...再次感谢!
阿曼多

2

绝对。您学习的每种编程语言都会有不同的方式来做某些事情。有些事情会让您发疯,有些事情您会爱上,而另一些事情会慢慢在您身上成长。

至少不要浪费时间学习至少一种新语言的基础知识。


1

好的,这是我遇到的一个例子。

我已经在我们已有的一些旧代码上为项目学习了一种相对古老的语言(VB6)。
该语言是非常面向Windows的,但是没有.Net框架中的高级功能强大的类。

我必须进行一些图片操作,这使我了解了用于图片操作的Windows API函数。

了解到它之后,我对.Net的GDI类有了更好的了解。而且有时使用Windows API的理解会更快(更少的函数包装)。

这表明即使您学习旧代码,仍然可以学习并获得另一种观点。


1

您是否可以通过学习其他语言范例来提高编程技能?

以我的经验,绝对可以。解决问题的几种不同方法就像一系列工具。有一天,您(像我一样)将可以使用这些其他工具。也许没有。一切取决于。一些示例:

语言通常并不孤单,它们带有环境。我确实花了一些时间学习一种叫做awk的奇怪语言 。它依靠使用“正则表达式”的模式匹配。通过尝试学习C ++ STL(不是很成功),我了解了maps。结合这两个概念,我可以很快用Pearl(平台上唯一的语言)编写一些文本转换实用程序。

主要是出于乐趣,我尝试学习Erlang(不是很成功)。它具有一个称为OTP的功能库,其中除其他外实现了一种处理错误的方法,有时称为使其失败并具有监视器来重启功能。我在某些领域使用了这个想法,有时只是让事情失败,而不是进行无休止的测试。

尝试学习Haskell(再次不是很成功)确实使我对解决问题的其他方式睁开了眼睛。(在我看来)函数式编程始于编写说明您想要什么结果的代码,而不是编写达到目标的步骤。我发现这确实帮助我编写了更好的SQL代码。

最近,我确实尝试了一些JavaScript。并发现了一个称为nodered的环境。创建小型家庭自动化服务器不需要任何代码。

换个角度说,我大部分以各种语言进行的涉猎都是(并且正在)一个比较浅的层次,主要是为了了解人们在谈论什么。实际上,我几乎可以使用多种语言。


0

一段时间以来,我从涉猎功能语言中学到了很多东西。但是,我从中获得的好处不是要做与命令式语言不同的事情,而是如何使并发变得更容易。它既可以在命令式语言中也可以在函数式语言中一样容易地应用,但是由于某些原因,我在命令式语言中遇到的大多数示例都更加复杂。(其他事情在功能语言中变得更加复杂。)

我从一种新语言中学到的另一件事是其他编程模式。我已经阅读了许多关于它们的信息,但是看到并使用了它们的几个非常好的实现方式后,就可以更轻松地理解它们并真正使它们有用,并在适当的时候使用它们。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.