学习许多编程语言是否有害?


37

我从9年级开始用BASIC进行编程。通过编写简单的程序进行加,减和打印,我学到了一些BASIC。然后,我去了大学,并学习了计算机信息和系统工程。在第一年,我学习了C语言,并且对它有很好的命令。

接下来,我在第二年学习了C ++。它只是教会了我一些面向对象的知识。现在我正在做PHP(以及HTML)。我还没有掌握C ++,BASIC或PHP。我现在正计划转向移动开发。但是我觉得我并没有涵盖所学语言的所有内容。

真的有关系吗?

Answers:


50

我们都只是在学习编程语言。我只会认为语言实施者是在某种语言知识中十分之十的人。

学习多种语言和范式是为喜欢和不喜欢的事物开发“口味”的唯一方法。如果您只学习一种语言,您甚至无法真正决定您是否喜欢它。

您实际上是在以正确的方式进行操作。您将能够重用各自学习的最重要的基础知识,同时接触不同的语法,库和框架。


16
我喜欢这个答案,除了它不是“您喜欢什么”,而是“工作的正确工具”。没有人应该使用相同的语言来解决所有问题。那将使一个糟糕的软件开发人员成为可能。每种语言和范式各有利弊。
user606723 2011年

1
鉴于编译器和解释器存在错误,对于大多数语言,我认为人类不可能达到10。
jmoreno 2011年

6
我认为即使编写C ++编译器的人也不了解C ++。我个人是说。显然,集体地,他们必须以某种方式理解全部语言,但是我认为这个星球上没有一个人能理解所有语言。实际上,委员会成员通常都非常清楚自己都只了解自己的专业知识这一事实。在Java中也是如此:Martin Odersky最近表示,他相信世界上只有3个人了解通配符。而从电子邮件的语气给我的印象是,他并没有包括他自己
约尔格W¯¯米塔格

2
在该小组中,即使他实际上设计了 Java泛型(当然是与Phil Wadler一起设计的)。虽然,公平地说,通配符未经他的同意而被添加到他的设计中,实际上是反对他的明确异议。
约尔格W¯¯米塔格

1
@brian,请相信我,您不必了解该语言即可实现其编译器。您可以盲目地将规范转换为代码。但是,这样做的结果是,您将至少学习该语言的一些基础知识-这就是为什么这是我学习新语言的首选方式。
SK-logic

21

如果您仍在上大学,那么不要以为您不会以任何一种已知的语言覆盖所有内容都没关系。了解这些语言背后的通用基本理论更为重要。一旦了解了基础知识,就可以在需要时学习其他语言的详细信息。


5
在我的头两年中,我认为我们每3-4周就会选择一种新的语言来配合Pascal,这是我们大部分项目工作(1982-85)的基础-其中一些是功能语言。重点之一是尝试确保我们将“编程”与“编码”分开
Murph

12

我相信编程中最重要的是理解不同的 范例

在您的问题中,您提到了面向对象编程(OOP)。如果您精通此主题,则应该仅使用伪代码并本质上使用一些图形化建模表示(例如UML类图)进行解释。

是否决定使用Java,C ++或C#(...)取决于您或您所工作的公司,但是真正重要的是理解/认识不同的问题并确定解决问题的最佳模型。解决编程问题的一种非常重要的方法是使用在本参考书中可以找到的设计模式

对于嵌入式语言,我认为重要的是要了解与此类技术相关的各种问题。

用一种隐喻的方式,我会将其与写一本好的科学书相提并论。重要的是您所学的理论,您要解决的问题等等。最后,无论您用英语,法语还是日语写这本书都不重要。

也就是说,如果您想专门研究某种语言,以便非常有效地利用它,那么了解该语言的细节也很重要。


2
+1为范例。专注于X或Y语言的语法糖并不重要(当然,如果您每天在工作中使用X语言,则需要这样做);有用的是研究不同的范例,因为恕我直言,它们可以帮助您在解决问题时更加开放和有创意。
sakisk 2011年

5

我认为,经常更改语言毫无意义。您永远不会真正掌握其中任何一个。尤其是像C ++之类的人,其中有些人花了十年的时间编写语言,而他们的代码仍然像C。

如果您不能用某种语言编写最佳实践,那么请不要继续前进,IMO。这意味着覆盖多个夫妇将需要很多年,甚至几十年。


5

我认为学习一点点不同的语言不会有什么坏处,但是同时您至少应该学习一到两种深度。


3

我在职业生涯中使用过许多语言,例如AMOS Basic,Java,C ++,PHP,VB6,Delphi等。今天,我在工作中使用C#,JavaScript,Ruby和一些Clojure,并且还与Pyhton,Erlang,普通Lisp和计划。

但是今年秋天,我想为自己的博客制作一个特别的圣诞节日历,并决定用24种其他语言熟悉并解决特定问题。这是一次很棒的经历,我学到了很多东西,强烈建议您在有一定的编程经验之后再进行此操作。

我对您的回答是:确实能很好地学习几种语言(它们应该完全不同),但是请确保您尝试并熟悉许多语言。

今天,对OOP和FP(函数式编程)有充分的了解是很重要的,并且您还应该熟悉静态和动态语言。

PS:我的博客是挪威语,但是如果您想查看我介绍的语言列表,可以在这里查看


2

当我需要学习新的东西时,我会学习用特定语言学习的东西。告诉我需要深入研究某种语言的“触发条件”是,特定的代码看起来难看或笨拙,看起来难以维护或难以测试或注释。通常,这些触发因素表明我缺乏对特定编程习惯,样式,数据结构等的了解。


2

学习多种编程语言是一种很好的实践,并且在当今是必需的。很多时候,您不能总是使用所有选择的语言。

了解其他语言如何做事的好处将对您作为程序员有帮助;即使偶尔当你跳来跳去你让语句错误(例如,正在检查的不平等!=~=<>)。尽管要学习的不仅是语言的语法,还应该谨慎,但要学习一种语言中的最佳实践以及一般的良好软件工程技能。如果您先学习C之后又学习了C ++,则应该在编写C ++代码时确保它具有C ++代码风格(而不是仅带有几个新关键字的C。这是您有多个类/对象,更喜欢引用) / smart指针而不是原始指针等


1
不要让我开始学习If x <b> = </ b> 5然后。在维护了与BASIC相关的任何东西之后,我不得不仔细检查所有的C代码大约一个星期。
2011年

2

最好至少学习来自不同编程范例的语言!程序性,声明性,功能性,面向对象,原型和动态语言-每类编程都提供有关如何组织和解决问题的独到见解。最终,您发现并使用了一个最高效和最满意的范例。


2

当然不。当然,您还想确保您正在学习不同的语言风格。学习C#和Java不会以任何主要方式扩展您的思维,但是学习Java和Haskell会。

查看《七周之内的七种语言》一书,它将带您逐步了解Ruby,IO,Scala,Erlang,Prolog,Clojure和Haskell。如果您喜欢各种语言,就会喜欢那本书。


1
Java的功能性编程(以及Java缺少的其他功能)可能会使您在Java之后学习C#更加放心。但是,如果只是为了学习,Haskell可能会更好,因为它的功能很纯。
svick 2012年

1

好吧,C和C ++对移动编程不会造成任何损害。您可以同时使用Cocoa Touch或Android NDK,有时需要提高性能。另外,有时您想要这样做,因为您想要编写在多个平台上运行的代码。在这种情况下,假设您不仅使用第三方框架,还可以用C / C ++编写应用程序,并在特定于平台的包装器中编译所需的本机元素(例如,获取OpenGL上下文的唯一方法)在iPhone上是通过使用本机CAEAGLLayer类)。

因此,就像您在抽屉中拥有的工具越多,完成工作所需的选择就越多。当您专注于各种任务时,您会发现自己偏爱某些任务。如果仅执行UI任务,则C可能不是您一直以来的最爱。我会更加担心自己想完成的事情,然后学习完成这些工作所需的任何工具。


1

实际上,它与学习一点法语,西班牙语,英语,阿拉伯语,印地语和中文一样有用,却从来都不了解其中的任何一种。


6
我不知道你想说什么。
svick 2012年

您确实意识到我们大多数人甚至都不了解我们的母语,对吗?
2014年

1

相反,我认为当我无法学习一种新的编程语言时,这会很痛苦。可能是由于时间不足或其他一些原因。据我所知,程序员/软件开发人员喜欢挑战语言,投放更好的产品/产品,而当您发现自己总是在做相同的事情时,您会感到不舒服。因此,您需要一个新的挑战,一种新的语言,一些需要学习的新知识,并由此提出更多的产品。

因此,我认为跟随新的语言,新的库,新的方法和新的技术使我兴奋。但是我没有足够的时间来获得所有这些信息,而且人们可能永远无法做到足够深入。因此,不学习更多会很痛苦。但了解更多信息也不会受到伤害。


0

我同意brian,FrustratedWithFormsDesign和SRKX的观点,但我想补充一点,在大学期间,用多种编程语言和范例扩展您的知识是成为一名优秀专业人士的理想方法。

你们不可能以正规的程序员身份从大学毕业。编程是一项艰苦的工作,您需要在行业中与优秀的程序员一起工作多年,参加良好的培训计划和社区会议,而且在大多数情况下,您必须面对工艺问题并失败很多,直到您学会掌握方法为止它。

学习多种范例,多种语言,解决我们地区的多种问题,将为您提供一个良好的支持基础,让您每天独立地学习手工艺,同时充当行业专家。

您可能参加了Compilers课程,但您不会以语言设计师,创建者甚至编译器开发人员的身份出类拔萃。您将获得步骤,过程,问题以及基本解决方案,这将使您能够将这些知识应用于各种问题。


0

简短答案:不可以。

长答案:程序员,软件工程师或设计师的大部分工作都与特定语言无关,但非常依赖于特定方法。例如,面向对象编程非常关注事物在内存和运行时中的位置,它们的可访问性以及它们在以后使用(继承和封装)的可用性。实现有所不同,例如Java是否具有顶级继承的类Object(无论您是否喜欢)和C ++没有任何未指定的东西。

许多语言共享功能(许多不同)。当然,语法是不同的,当您比较完全不同的范例(例如命令式和功能式)时,它会比较棘手。但是,一旦您对语法,索引和可变性的疑问很少,那么无论走到哪里,字符串处理都基本相同。任何具有静态类型的语言通常都具有某种强制转换和强制性的方法,但是如何以及何时进行操作取决于语言设计者。

语言是工具。您只是在带上更多工具。但是该工具仅与使用它的工匠一样好。

现在,您学到多少是个人选择。我永远不会为了学习一门新语言而学习一门语言。任何一种学习新语言的选择都会受到课程要求(去年必须上一堂课来学习js,php和R),现有项目要求(如果90%的工作在perl 6中完成,您被录用了,剩下的10%也是如此,或者获得了特定于应用程序的收益(比Java加上一些用于统计分析的含糖库更胜一筹)。

就是说,您确实想了解现有内容和可用内容。我的大学就此主题开设了一门课程,即“ 编程语言概念”。这是一门广泛的概述课程,而不是严格的数学或与编码相关的课程,涵盖了可能被认为是实用的基础知识而不是理论计算机科学的基础知识。这是一门很棒的课程,我希望这是在第一至第二年而不是第三至第四年提供的课程。文字是编程语言的概念。并不是说您必须出去阅读本书,但这肯定会拓宽您的视野。


0

好吧,我的看法是,您不必学习每一种语言。但是,请尝试学习非常基本的功能,这也是其他语言所必需的。
例如,所有语言(JavaPHP或任何其他语言)都需要OOPS概念。
内存分配概念在许多编程语言中都非常相似。您永远不会错过这些主题。
每种语言都有语法和规则,编程语言也是如此。丹尼斯·里奇本人接受了这一事实。因此,应该学习该语言的语法。
但是我的看法是,您必须学习两种编程语言之间的非共同因素。他们将让您确定哪种语言代表什么。 C ++都是基本的OOP(面向对象编程),因此一旦学习了OOP概念,您还将学习在PHP和Java中也会看到的语法。
我的学习流程是:
Visual Basic 5(部分)-> HTML 2.0(部分)-> C(部分)-> CPP(部分)-> Java(部分)
,然后我又学习了C语言,接着学习了C ++,接着学习了C ++,接着学习了JAVA(这次完成),然后由于对JavaXML熟悉而搬到了android(部分)并在平均时间内学习了。第一次尝试教给我的东西较少,但第二次尝试一定要学习所有可以帮助您下​​次的知识。


这篇文章很难阅读(文字墙)。您介意将其编辑为更好的形状吗?
gnat 2014年
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.