如果编程基础很强,那么任何编程语言都可以轻松掌握。事实还是神话?[关闭]


33

一个具有相当好的编程基础的人真的可以轻松学习任何编程语言,这是真的吗?

好吧,当我说到编程语言时,我指的是敏捷和动态语言,例如PHP,Perl,Ruby等,而不是遥远的过去的编程语言。

在某种程度上,我只研究过Java,groovy和flex。因此,从粗略的角度考虑,我是一名业余程序员,但还是一名快速学习者,要在任何一种这种语言上立足需要多长时间?


1
将“任何”替换为“大多数”。

4
是什么使语言“敏捷”?我认为敏捷是一个发展过程
oosterwal 2011年

17
容易掌握?不,容易学习吗?是。精通意味着一定水平的专业知识,需要多年使用任何语言才能使用。一旦掌握了基础知识,就应该学习如何使用任何语言。
乔尔·埃瑟顿

1
不,对于类似语言而言,这是正确的。懂Java不会帮助您学习Haskell,但可以帮助您学习C ++等。知道PHP不会帮助您学习汇编语言,但会帮助您学习Ruby。
iveqy 2013年

Answers:


46

是的,有保留。

四周前,我想说我具有C和C ++的专业水平的技能,以及Java的业余水平的技能。我的老板要求我用JavaScript编写一些软件,而我的经验为零,然后我就放弃了。

在接下来的两周中,我阅读了许多示例代码片段,找到了所有不错的库,并编写了程序。它已经完成,并且有效。然后上周我买了一本JavaScript书,并且一直在阅读,男孩,我不知道自己在做什么。现在我明白了为什么我的物体表现得如此奇怪。

所以现在我说,我知道一点JS。我可以阅读并使用它,但是我确定我在写的内容效率低下,难以阅读且不遵循最佳实践。

通常,快速学习者可能需要一个星期的时间,才能开始用一种新的语言生产低质量的产品。如果您了解Java,则可以很快选择C,C ++,PHP,Python,JavaScript,但只够修改代码或编写定义良好的函数。(因为正则表达式很复杂,所以Perl可能会更难。)为了正确地用新语言构建系统,您可能需要在有经验的指导者的指导下进行一年的专业开发。


18
我敢说这需要两年时间。第一年应该让您相对熟练,第二年应该让您相对高效。
蒂姆·波斯特

4
很多年前(在学习了十二种语言之后),我有这种经验。。。我不得不在Ada工作。用Ada编写代码花了几天时间。要真正进入语言/运行时系统设计师的顶峰空间并编写GOOD代码,需要花费一年的时间。
quick_now 2011年

1
老实说,我也是这样学习Java的。我目前处于1年级,我会说“相对熟练”是准确的。
Brad

1
原因是您的基本面,甚至可能很强,只是不广泛。如果您在jscript之前就了解过其他语言,包括闭包,列表理解,其他数据结构和其他作用域规则,那么可能遇到的问题较少。
彼得

我在VB.net上也有过类似的经历,直到我读了我的老板(有几年VB经验)编写的代码为止。像重复代码一样的代码气味往往会超越语言!
DisgruntledGoat

28

基本上答案是肯定的,而不是肯定的,这取决于您所指的基本原理并且易于掌握

事实

  • 无论哪种语言,了解编程的基础知识都将有所帮助。在这里,从根本上讲,我指的不是特定于给定范式的事物。诸如算法,抽象级别,隔离等。

  • 充分了解给定范例(OOP,函数式等)的基础知识将使学习支持相同范例的语言变得容易。可能会说,精通一门语言将使您能够快速学习同一家庭的语言。

  • 在同一个家族中学习每种语言后,我会更轻松地学习下一门语言,如果您知道的更多,那么这种学习曲线就会以指数级的速度增长,我不会感到惊讶。

神话

  • 当转移到一个新的不同范式时,先了解第一个范式的语言不会像在同一个家庭学习语言那样有帮助。实际上,根据它们之间的差异,您可能必须先取消一些知识,然后才能继续前进并真正掌握新的范例。

---根据评论编辑了最后一部分-

事实...

  • 了解第一个范例可以帮助您学习下一个...

神话

  • 不要自大,它可能同样会使您放慢脚步,或者对第三个范式毫无帮助。

除了最后一个,一切都很好。有趣的是,在尝试学习诸如Prolog之类的逻辑语言时,了解像C这样的过程编程语言毫无帮助,而就我而言,它成为了障碍,例如“问:如何在Prolog中编写循环?” ==>“ A:您不知道”。
Steven A. Lowe

2
我在这里和那里听到的轶事证据表明,您可以相当容易地在Scheme上开始编程新手,但是如果他们首先使用BASIC或C#或类似的东西进行编程,则要困难得多。
David Thornley

1
@Steven&David:我不太确定最后一个。我确实从程序性到对象性再到功能性,但还没有尝试过逻辑系列。随着时间和经验的发展,我确实发现它更容易,但是不敢一概而论。我将根据您的评论修改答案。
Newtopian

14

对于任何类似的语言,是的

对于具有截然不同范例的语言,没有太多

例如:您了解C ++,想学习Java,这是小菜一碟;你知道VB.NET,你想学习Prolog ...整个蛋糕,可能是三四个蛋糕


1
我同意。有些语言正遵循完全不同的哲学。因此,不费吹灰之力就可以将例如命令式语言(如C)切换为逻辑编程语言(如Prolog)并非易事。
sakisk 2011年

4

我相信简短的答案是:“有点真实,但很难验证”。与语言的实际语法相比,要学习紧密相关的API,用法,习惯用法和范例(OO,功能等)是非常困难的。我认为,如果您具有编程基础方面的丰富知识和经验以及一些编译器知识,但是很容易被语言所征服,但是由于辅助性因素而难以掌握。

一个明显的例子就是从一种语言到另一种语言。C到Java。代码语法与C风格的程序非常相似,但是您还需要了解Java api(泛型,垃圾回收等),并且最有可能在我们当前的“ IT环境”中了解一些第三方框架(Spring,jUnit ,休眠等)来为企业做一些有用的事情。因此,如果您以前做过C,那么语言语法就不会成为问题,而是剩下的。

这来自于我,他们知道Java,C#,Javascript,HTML,CSS,Delphi等。我可能不知道我所使用的框架或库的每个细节,但是我知道自己的方法,并且由于我使用较早版本的经验。对于“快速学习者”来说,这实际上是所有横向思考。


我完全同意这一点。学习最佳实践/ api /流行的库/等比学习编程语言的语法要花很多时间,而且要花很多时间,这才是真正的挑战所在,而这只有通过花一些时间来使用该语言及其语言才能获得。生态系统。
jviotti 2015年

3

您需要了解的计算机科学基础知识不仅包括数学基础(集合论,逻辑,图论,代数,信息论,算法信息论等),而且还包括多种编程语言,每种语言中至少有一种组-即一种命令式命令(可能使用OOP,但不是必需的),一种急切的功能,一种惰性的功能,一种逻辑的,一种连接的或基于堆栈的。

有了这个基础,您将能够立即轻松地学习任何给定的新语言。如果缺少一些位,您可能最终会面临严重的阻力。

而且,从内而外学习语言的最佳方法是为它的重要子集实现玩具编译器或解释器(当然,没有标准库-这是任何语言中最复杂,最无聊的部分)。


2

我的共识是,良好的基础会在一定程度上有所帮助,我对此并不反对。但是,其他答案中缺少的一点是选择语言的成语问题,我认为要掌握一门语言,您必须习惯性地编写它。

例如,您可以编写完全正确的C#代码,而无需使用该using语句自动处理对象,但是在编写良好的惯用C#中,您会看到using {...}很多。我不知道有没有任何一种具有这种结构的.Net语言(尽管我了解的很少,而且我的Java很生锈,所以我可能是错的),所以即使是来自另一种没有这种语言的专家功能将需要从头开始学习这种习语。


Lisp和Scheme中广泛使用了类似的惯用语,因此对于来自该背景的人来说并没有什么新意,并且会故意在任何新语言中寻找该功能。
SK-logic

是的,但是如果您来自Pascal或ADA,那将是一个全新的习惯用法,您甚至在看到它之前都不知道要寻找它。
史蒂夫

这就是为什么我认为每个人都必须至少知道每种语言中的一种,以便能够学习任何新语言并明智地选择工具的原因。
SK-logic

@ SK-logic:当我看到诸如“使用”和“尝试...最终”之类的东西时,我毫不费力地将它们理解为Common Lisp的“展开保护”。但是,这样的语言功能可能不会出现在给定的多范式语言选择中。
David Thornley

1

这是对“相当好”和“容易”的某些定义的真实陈述。

您对基础知识的理解越好,从一种语言过渡到另一种语言就越容易。例如,如果您是一位熟练的Java程序员,并且对面向对象的语言有深入的了解,那么Java和C#之间的基本语法差异应该在一两周内就比较容易掌握。了解所有关联库中的功能如何从一个映射到另一个会花费更长的时间,但是一两个月后您可能会对基本库有一个不错的了解。然后,要弄清楚那些情况,其中语言A的问题的标准方法不能直接转换为语言B的标准方法(即,您想在C#中使用LINQ而不是Java中的JPA),并逐渐适应用新的语言就足够了 重新思考而不是用旧语言思考和“翻译”。这可能需要三到六个月的时间,具体取决于您通常使用地图功能的程度。在六个月的时间里,专业的Java程序员可能会成为一个相当高效和称职的C#开发人员。但是,与任何事物一样,您可以花费数年的时间学习所有复杂的细节,掌握各种语言和附加组件,这些库和附加组件不是语言的一部分,而是周围生态系统的一部分,并且通常可以提高自己作为该语言的开发者的水平。专业的Java程序员可能是一位相当高效且称职的C#开发人员。但是,与任何事物一样,您可以花费数年的时间学习所有复杂的细节,掌握各种语言和附加组件,这些库和附加组件不是语言的一部分,而是周围生态系统的一部分,并且通常可以提高自己作为该语言的开发者的水平。专业的Java程序员可能是一位相当高效且称职的C#开发人员。但是,与任何事物一样,您可以花费数年的时间学习所有复杂的细节,掌握各种语言和附加组件,这些库和附加组件不是语言的一部分,而是周围生态系统的一部分,并且通常可以提高自己作为该语言的开发者的水平。


1

我想说,这完全取决于一个人学习新语言的热情。如果基础知识很强,并且如果他能理解新语言如何解释任何事物,那么学习任何一种语言都将非常容易。

最好的例子是我的自我。尽管我已经使用C#进行了大部分工作,但我已经使用了多种语言,但是我的职业生涯从C开始,然后继续学习C ++,Java,VB,PHP,脚本语言,perl等。在整个学期的任何地方,我从未觉得自己无法学习这种语言。


3
您所描述的语言或多或少彼此相似。如果遇到挑战,请尝试学习Haskell,Scheme,Forth或Prolog。
David Thornley

1

我发现学习新的编程语言从不困难,相反,大多数时候这很有趣。但是,有些语言是我正在查看但从未理解过的语言,因为如果有的话,我将无法理解它们背后的想法。一个示例是COBOL,我从不了解在DIVISION和SECTION中必须做什么以及为什么。其他示例是PHP和Groovy。使用PHP,我尝试理解为什么有Perl的人会首先需要它。也许有人可以解释。对于Groovy,我也不太了解其背后的概念。


1

一切取决于。

我知道通常是答案...

但是基本面是什么意思?许多拥有一个范例(如OO)基础的人却没有其他范例(如功能)的基础。

来自OO的很多人都知道所有设计模式,可能不了解功能性设计模式或诸如列表理解,递归,尾递归,闭包之类的东西。

是的:如果基本原则意味着所有范式的基本原则。

在这种情况下,问题在于javascript使用了很多范例,例如过程,OO和功能,并且具有来自Java,C ++,...的奇怪作用域。

因此,在这种情况下,基础知识无济于事,但是,如果您在工具箱中使用的模式更多,那么在这里选择更多的基础知识并仍然转换为另一种语言可能会变得越来越容易。


0

不要忘记,计算机编程的艺术就是完全保持您的意思的艺术。因此,从Java到Access到Excel到Visual Fortran,告诉计算机做什么的任何方法都是一种编程语言。

而且有些语言简直就是不好。IMHO Excel和Basic是不良语言;Java和C ++是很好的语言。FileMaker脚本是一种可怕的语言。如果您不草率,HTML可能是很好的选择。

你能学到吗?如果很好,是的。如果不好,取决于您的厌恶阈值。使您想吐的东西很难学习。

除非您已经看到并使用过X语言,否则不要全心投入在项目中使用X语言。


0

答案是“这不是事实,而是神话!”

我就像您一样,我也从事过各种技术工作。Java,.net,最近与iPhone,Android和Blackberry一起使用。

网络充满了资源,只是通过信息了解,实施并进一步发展。

实际上,“技术是为开发人员开发的,而不是开发人员是为技术开发的,技术是变化的,但开发人员不是。”

:)

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.