我看过无数的时间学习一门语言,例如哈斯克尔,Lisp或Smalltalk中会以某种方式让你成为一个更好的程序员,而你在其他语言编程。
有没有比那只是要求轶事证据吗? 或者是它只是人们的方式合理化有花大量的时间学习,他们将永远不会使用一种编程语言?
我看过无数的时间学习一门语言,例如哈斯克尔,Lisp或Smalltalk中会以某种方式让你成为一个更好的程序员,而你在其他语言编程。
有没有比那只是要求轶事证据吗? 或者是它只是人们的方式合理化有花大量的时间学习,他们将永远不会使用一种编程语言?
恕我直言,这是所有关于学习一种新的编程范式。 如果你知道的Java,然后C#,没有多少收益,一旦它们都有几乎相同的“类型的节目”。
但是,如果你学习功能的语言或动态的,例如,你不得不另想办法,这可能会帮助你在编程你喜欢的语言更好。
它是这样的:“ 这是很容易在{不同的语言,你学到}这样做必须有一个更好的办法做到这一点{语言,你已经知道}”。 然后你重新考虑,并建立一个更优雅的方式来做到这一点{语言,你已经知道}。
我没有任何确凿的证据,但我真的很感激的看着因为口齿不清学习,我有问题的不同方式(这同样适用Python和C)。
关键是没有必要学习不同的语言,虽然,我认为关键其实是你通过学习不同的编程风格获得了不同的观点。
良好的实例是功能性的,必要的,面向对象的,等。此外,也有共同的设计上的差异将被解释VS编译语言; 静态类型vs动态类型,等等。
虽然大多数人使用单一的风格做了大部分的节目(在过去几年中最常用的OOP),我认为所有程序员都应该知道的多种风格,使他们能够更好地看到自己的风格的不足。
不能阐明这多少光在编程语言方面,但它似乎非常相似,“为什么学习死的语言?” 争论围绕拉丁,和许多推理有可以应用在这里。
编程是思维,在编程语言不写代码的方式X
:那就是“编码”,而不是“程序”。
通过了解至少一些关于不仅仅是一个编程语言-最好是在不同的范式,所以当务之急/ OOP /功能/逻辑-你训练思考的具体细节和语言的怪癖范畴之外的问题呀X
。
我想,这一定能提高为(来)一个更好的程序员极大你的能力。
学习新的语言的一大副作用是在现有的语言应用的潜力。
举例来说,我是一个Java程序员,我把我学习的第一功能语言(哈斯克尔)的时间。 我最近被要求学习的Scala为即将开展的项目。 这是非常容易的,因为我明白了警卫,递归等,从哈斯克尔的comcepts。
深入学习语言只是为了学习语言有太少好处。 如果你有很多的任务,你不知道的语言,非常适合解决它,然后它是有意义学习该语言。 否则,它是有意义花时间去成为你已经知道的语言专家。
我不知道什么时候会一直对有关总体规划的能力,多编程语言曝光的好处很多严格的研究,但我认为,关于为什么学习一门语言的人(你可能永远不会在实践中使用)的研究是有益的,将一般持有同样适用于国外学习编程语言。 冲高往往好处包括改善认知能力以及改善一个人的母语的了解。
这里有一些链接研究
有趣的是,我抱怨了很多关于采取COBOL,并且从来没有真正使用过它 ,但能够在我的第一份工作申请的事情,我在课堂上所学到。
如果你给任何可信的务实编程的家伙,考虑他们的第14页他们的意见的第一本书 :
学会每年至少有一个新的语言。 不同的语言解决以不同的方式同样的问题。 通过学习几种不同的方法,可以帮助你拓宽思路,避免陷入窠臼。
浮现在脑海中的一些例子:
知道C和必须处理内存管理和做它自己的数据结构可以帮助您了解性能问题,在这些细节都隐藏你一个高级语言编程时。
相反,学习面向对象的语言会影响你的C语言编程 - 有,例如,多态性,提示您方式使用函数指针的概念,你可能没有其他。
学习其中的功能是可以绕过可以让你觉得其他语言的类似技术,即使在其它语言,你必须在对象函数的方法是绕过通过第一类对象的语言。
学习方式的Erlang处理并发可以让你重新考虑多少共享状态,你在其他语言中的线程之间使用。
有任何语言内置的功能,你可以找到提示你实现自己的另一种语言的功能,没有它,从而使您能够解决问题的方法,你可能没有想到的,如果你的版本有用尚未暴露的特征在于它有内置的语言。
了解接口在Java中可以让你想想在没有它们作为一个类型系统的正式结构其他语言的精确指定你(小“我”)接口的好处。
毫无疑问,还有其他的。
学习一门语言不是二进制事件。 如果你是一个体面的程序员,你应该能够相信你自己的本能,以语言是否为您提供您的工艺的新尝试。
几乎每一个值得考虑的这些天语可以下载并在一两分钟的测试驱动。 所以这样做 - 选择一个,并尝试一下。
有病例数量有限,其中这种“放任”的方式达不到。 如果你是一个初学者,当然这是行不通的。 当我第一次学会了C,我不得不把它打了我,但它确实被证明是值得的,因为它让我明白三分,内存引用和动态分配的方式我以前没有。
但是,如果你知道多少已经,只是闲逛,寻找,让您的灯泡去的语言。
不同的语言有执行同样的想法不同的方式。 通过学习新的语言,你得到的东西怎么可以完成不同的角度,然后可以用这些知识来接近你在当前环境中如何编程。 想想面向对象和函数式编程。 OO程序员可以从语言如C学到了很多关于parrellization
学习一门语言,尤其是一个实行一个新的范例,是每个程序员是非常有益的。 例如学习计划将帮助别人理解函数式编程。 程序员可以在以后练什么,他/她与像C#等语言的经验教训。 她能想到的新的做事方式。
此外,由于语言的进化,它的高可能是你使用的语言将采用其他语言的一些特点。 已经自学了红宝石,我能够掌握C#3.0更容易变化。
我认为,学习语言总是有利于你,即使你不重新使用它们。 我开始玩伊欧凯作为一种尝试去学习一些实验,并因为它我的JavaScript有所改善,因为某些想法已经巩固。
学习一门新的语言将有可能给你新的见解,你会尝试翻译成你的主要语言。
我不认为会有任何确凿的证据 - 我认为这更多的是一种直观的东西。 学习一门完全不同的语言会帮助你看待事物完全不同。 或者,也许不会。 在任何情况下,什么是学习什么危害?
这完全是主观的,但回来的路上时,服用本科在Haskell后,我也注意到,在C我的编程风格的同时变得更加“哈斯克尔样”; 我用了很多简单的,递归函数。 我还注意到,这种编程风格似乎产生了一些在Haskell编程有相同的利益; 错误比较少,代码更容易理解(尽管速度较慢)。
所以,在学习另一种编程语言可能不会让大家更好的程序员,这绝对是对我一个学习的经验,个人。
什么是学习,你不会用数学或物理学的学习哲学或死方言的利益好处,还是?
这是智力成果和启示有什么事情,你将是一个明智的人跟你学习任何新的东西,不管他们是编程语言,文学,角色扮演游戏......当然,如果是涉及到你的工作领域,那么你会发现其实一用,早晚:-)
我花了一些时间学习Clojure的,即使我知道我不会在短期内使用它(主要是因为我真的不能在JVM部署)。
它不是由我用语言支持的概念(C#/ C / C ++ / Python的/ Perl的),我想知道我失踪了,也如这将是值得探讨的是声称要添加这些功能库。
具体而言,我理解Lisp风格的宏和直接支持并发很感兴趣。 我也花了一些时间阅读的实施,特别是数据结构,这是非常有教育意义 - 很好看质量实现持续的数据结构,以了解它们是如何工作(并给你永恒不牺牲太多性能)。
Bryond什么已经说了,我真的很喜欢新的语言,只是因为它可以带来新的利益来编程。 你要学会不同的方法来处理问题和某些语言的优势/劣势。 这是新的东西学习,任何好的程序员应该努力总是被学习新的东西。 它混淆了你的日常使用相同的语言可能编程多年例程。
我也喜欢大家都谈到编程的角度。
已经进行了一些很好的意见。
我想补充你不会在生产工作中使用可能的值学习语言
为了更好地理解和吸收的参数和方法,在文本和文件,这将提高语言编程能力我使用生产工作(如MIX对计算机编程的Knuth的艺术/ MMIX; RATFOR为Kernighan和Plauger的软件工具;我仍然可以使用一些ALGOL为基础的语法一些伪虽然我从来没有在ALGOL写道运行的代码校外)
为了能够检查或将在不同的语言(使用内置了如Fortran,Python或哈斯克尔适当的功能性语言如一些C程序进行数值计算可以快速检查或缩放)来编写程序原型
学习一门新的语言可以深入了解关于它如何可以用于更容易解决被放在一边,因为时间或复杂性的限制问题。