学习实验语言值得吗?[关闭]


25

我是一个年轻的程序员,希望有一天能在程序员领域工作。我知道Java,VB.NET和C#。我想学习一种新的语言(作为程序员,我知道扩展我所知道的东西很有价值-学习使您产生不同看法的语言)。我在网上看了看常见的语言。每个人都了解C和C ++(即使是那些对计算机了解甚少的麻瓜),所以我想,也许我应该追求C。

C和C ++很好,但是它们已经很老了。诸如Haskell和Forth之类的东西(等等,等等)已经过时并且已经失去了流行性。由于相同的原因,我不敢学习C(甚至C ++)。Java也相当老,并且运行缓慢,因为Java由JVM运行并且未编译为本机代码。

我从事Windows开发已经有一段时间了。我最近开始使用Java-只是因为它更通用并且可以扩展到其他地方。问题在于,由于以下原因,它看起来不是一种非常实用的语言:

  • 它最常用于Web应用程序和手机应用程序(特别是Android)
  • 就使用它制作的实际产品而言,唯一想到的是Netbeans,Eclipse(用于制作的hurrah和具有IDE所用语言的IDE-就像制作用于编写HTML / CSS / Javascript的网页一样)和Minecraft碰巧是有趣的,但就计算机规格而言却有些迟钝和双极。支持。
  • 除此之外,它还用于服务器,但是非常麻烦-我不仅想制造/配置服务器

.NET语言很好,但是:

  • 如果我在认真的谈话中甚至提到VB.NET或C#,人们都会大笑。
  • 除非您使用MONO(它仍在开发中并且需要进行一些改进),否则它不是跨平台的。
  • 缺少底层的东西,因为像Java与JVM一样,它是由CLR运行/管理的。

我首先想到的是学习C之类的东西,然后用它跳入C ++(只是为了确保我有很强的理解力/基础),但是就像我之前说的那样,它在每分钟变得越来越老。


我所期待的

Fantom看起来不错。这就像是我最喜欢的两种语言之间的中间人,甚至可以让我在两种语言之间互换地发布,但是,与我想要的不同,它可以编译为CLR或JVM(取决于您将其发布到何处),而不是完全编译。

D看起来也不错。这似乎是一个非常有用的语言和MULTIPLE来源似乎确实优于C / C ++。我会马上接受,但是我仍然不确定它的成功,因为在这一点上它显然还不是很主流。

还有其他一些看起来很不错的应用程序,它们专注于其他事情,例如带有Web开发的Opa和GOOGLE的Go


我的问题

值得学习这些“实验”语言吗?我读过其他一些问题,这些问题说,如果您不不断学习语言并向所有语言开放,那么您就没有正确的编程思想。我理解这一点,但我可能仍未完全理解,但实际上,如果一种语言不会成为主流,我应该花时间学习其他东西吗?我不想学习旧的(或即将成为旧的)编程语言。我知道很多人认为这很重要,*但是你们中的任何人是否会真正考虑(假设您还不知道)FORTRAN?我的目标是保持最新状态,以确保我将来能成功。


免责声明

是的,我是一个年轻的程序员,所以我可能在问题中做了很多幼稚的陈述。 随时对我进行纠正! 我必须在某个地方开始学习,因此我确信我的很多知识都是粗略的,足以导致错误的陈述或思想缺陷。请在评论中留下您的任何想法。


结果...

我对这些惊人的反应感到非常惊讶,其中的大多数都很好地指出了我的误解和错误判断。我从中学到了很多东西,很高兴能够利用我学到的一切!接下来,我可能会开始学习Haskell(不是那么古老的语言,尽管已有20多年的历史了-hahaha),然后开始研究我周围的其他选择。

谢谢


10
“学习Python,C / C ++,Java,Perl和LISP的全部五个”(Eric Raymond,如何成为黑客->基本黑客技巧-> 1.学习编程。
2012年

7
请注意,默认情况下,简单地“变老”并不会自动意味着“变坏”。到目前为止,一些最出色的编程是30年前在C64上完成的。

8
FWIW几乎每种语言都有使用-如果有人嘲笑您几乎使用任何语言(Java速度慢,.Net代表M $母狗,Haskell不切实际,C ++太老等)就回头嘲笑它们并告诉他们有关使用正确的工作工具;)
马丁(Martin

6
您从哪里获得“ Haskell和……已经失去了知名度”?
左右左转

13
对于一个年轻的程序员,您有太多的假设。摆脱它们,它们正在笼罩您的思想。
Matthieu M.

Answers:


29

学习完全不同的语言的目的不在于学习语言,而是在于接触不同的问题解决方法。用于工具箱的工具。

需要注意的一件事是,Haskell不是特别古老,对于只熟悉主流语言的人来说,它实际上是一个很好的候选人。由于它对事物的影响,即使像Lisp这样的非常古老的语言也非常有用。

另外,Java和.Net不会被解释,我希望您根据该错误标签做出一些不正确的假设。


不好意思,抱歉!我在那儿混了两个不同的矛盾词。我已将其固定在问题本身中。
Freesnöw

19
那么,哈斯克尔不是年纪大了,例如Java,虽然。但是,是的,这并不意味着它已经过时。实际上,它的类型系统仍比Java早2年左右。
约尔格W¯¯米塔格

5
@JörgWMittag:我认为这更多的是关于Java的,而不是关于Haskell的。
Tikhon Jelvis

1
只用 Haskell和Java进行编程...但是要公平的说,没有主流语言的类型系统比Haskell更好。(我不得不说,OP ...很多东西比您提到的在Java上运行的要多。)
Louis Wasserman

1
到目前为止,Haskell已经有20多年的历史了,标准的Haskell与标准的C ++一样古老(它们都来自1998年)。
fredoverflow

23

保持健康:定期练习

实践使完美。

编写阅读的更多代码,您作为程序员/开发人员/软件工程师/专家/忍者/工匠/黑客/流行语的成见/精通程度就。通过不仅编码和阅读更多内容,而且尝试我们的新代码编写方式,您(希望)会更加开放。

推荐读物:

了解新的范例和语言功能

也许您将无法将全新的Super-Language-X中使用的内容转换为Enterprise-Language-Y,但也许您将能够识别出何时适合。也许您将能够知道何时将不同的技术或堆栈集成到项目中以满足特定目的。要么也许您会知道如何使用语言Y的功能来模仿语言X的酷功能,并重构代码以从中受益(并可能在此过程中启发其他同事)。

例如,您可能已经发现了有趣的FP原理,并希望将其应用于Java,而Java可以说不是设计上的FP

推荐读物:

成为所有行业的杰作...某些大师吗?

在这种“实验”阶段,您不知道哪种语言将成为主流,因此您不必过多担心押注其中一种。可能的是,其他人也会打同样的赌注,当他们看到这些都出现在您的履历中时就会被吸引。在皮带上添加一个工具。在我们的案例中,最终的重量没有太大的问题。

当然,您不能成为所有行业的大师。但是您可能是其中之一的大师,而其他人则相当出色。您正在学习手工艺品,而我们的手艺却是多方面的。定期锻炼,参加讲习班,抓书,编写新的宠物项目以及其他类似的事情是我们跟上该领域不断变化的步伐的方法。

推荐读物:

保持适应能力

如果您不学会适应,那么在需要时就很难做到。通过不断学习新事物,每次拾起新事物都会变得越来越好(只要您不把自己约束在非常相似的挑战上)。

就像“ Stay Young” Oasis歌曲中所说的那样:保持年轻无敌

如果能适应,就可以生存。

推荐读物:

保持可见性:了解招聘机构的雷达

他们使用关键字和技术作为复选框。我们将它们用作盲目的招聘人员的蜜罐。

它可以双向工作。只要您真的知道自己的东西,那么简历中就有很多东西就好。它显示了您的适应能力和知识广度。另外,如果您真正掌握了其中的一些内容,并且在其他方​​面也很出色,则可以根据不同的职位和工作来调制简历的不同版本。


其他有用的SE主题


如果您要阅读保罗·格雷厄姆(Paul Graham)的《超越平均水平》(或者就此而论,他在编程主题上写过的其他任何东西),请带着一滴盐。关于编程实践,他不得不说的很多东西是50%是正确的,而50%是危险的错误。
梅森惠勒

@MasonWheeler:这是有争议的,就像您可以从知名的行业“巨人”那里找到许多东西一样,无论它们是否自称。许多人也会反对Zed Shaw的著作,就像Norvig的其他人一样。一切都必须以批判性的心来对待:我将其视为一切的前提,并假设(希望)这个级别的人也是如此。许多作家将根据特定情况提出主题,而不适合每个人的情况。实际上,您每天也都会在答案中看到这一点,但是通过“大众化”的力量,他们将被视为“最佳”答案。尽管如此,它只是提供信息。
haylem 2012年

8

为了扩展Telastyn的答案,的确涉及暴露于不同的编程范例。例如,它实际上不是关于学习逻辑编程的,而是针对:

  • 学习学习(学习新技能的实践)
  • 训练大脑以新颖的方式思考
  • 也许会获得一些很少有人拥有并且可能派上用场的较不受欢迎(甚至深奥)的知识
    • 或至少以您的技术知识打动他们:)
  • 当然,它提供了宝贵的技术见解。为什么C#比D更受欢迎?C ++可以做D可以做的所有事情吗?D可以做更多,还是更像语法糖?

http://skilldrick.co.uk/2011/02/why-you-should-learn-brainfuck-or-learn-you-a-brainfuck-for-great-good/

学习Brainf * ck的另一个很好的理由是了解图灵完整的编程语言的基础。程序员比较语言时,一个常见的说法是“它们都图灵完备了”,这意味着您可以用一种语言做的任何事情都可以用另一种语言做。学习完Brainf * ck之后,您将了解使用图灵完备的语言可能有多困难,以及该论据是如何成立的。

http://norvig.com/21-days.html(Peter Norvig)

学习至少六种编程语言。包括一种支持类抽象的语言(例如Java或C ++),一种支持功能抽象的语言(例如Lisp或ML),一种支持语法抽象的语言(例如Lisp),一种支持声明性规范的语言(例如Prolog或C ++模板),一种支持协程(例如Icon或Scheme),和一种支持并行性(例如Sisal)。


7

我首先想到的是学习C之类的东西,然后用它跳入C ++(只是为了确保我有很强的理解力/基础),但是就像我之前说的那样,它在每分钟变得越来越老。

好吧,这是一大堆谬论。懂C的人很难学习C ++,因为他们认为有关使用该语言的几乎所有知识都是一大堆错误。几乎没有惯用的C甚至比远程C更好。您最好只从头开始学习C ++。像我这样的人自愿花时间帮助其他人学习C ++,其中很大一部分花费在教导人们放弃C习惯上。

至于流行度,最近,C ++ 正在重新出现。人们注意到,实际上,性能确实很重要,而且您无法逃避将每个组件作为托管组件运行,而Modern C ++(尤其是C ++ 11)绝对不是他们认为的C垃圾。 ,实际上一点也不差。它并没有真正变老。它越来越新。新标准是一个巨大的升级-对于当前使用C ++的许多领域,当前的或正在开发的语言都没有合适的替代语言。这尤其重要,因为没有语言具有良好的C ++互操作性(甚至C ++本身),因此很难从现有的C ++代码库中迁移出来。

如果我在认真的谈话中甚至提到VB.NET或C#,人们都会大笑。

结识新朋友。AFAIK,VB.NET出于某种原因实际上并不存在,除了可以帮助从VB6迁移而来,它本身并不是一个真正的目标,但是C#是一种真正的语言。有点像Java,只是它们随后添加了实际的语言功能和一些不错的库。C#是一种非常流行的语言,在VS中具有很好的工具,得到了很好的支持,它并没有那么糟,并且是一门扎实的学习技巧,即使不是例外。

除非您使用MONO(它仍在开发中并且需要进行一些改进),否则它不是跨平台的。

单声道非常稳定。另外,最终,现在有90%的台式机用户(或者是80%?)运行Windows。如果您要开发桌面应用程序,那么即使使用跨平台语言,非Windows用户是否值得花时间支持也是一个悬而未决的问题。

最终,通过学习像C ++或Haskell这样的语言,您可以获得很多好处,该语言专注于强大的编译器技术,而不是大量的运行时。

只是不要选择PHP。您唯一可以从中学习的是如何不建立语言。


1
近期对C ++标准的新增功能中,有很大一部分仅是为了修补现有的C ++缺陷而存在(就像过去一段时间中的新增功能一样)。例如,右值引用会增加一堆额外的复杂性,以解决与复制构造函数有关的一系列性能和复杂性问题,这仅是因为C ++允许将对象用作值类型,这是100%完全错误的,并且存在没有其他OO语言可以做到的充分理由。
梅森惠勒

@MasonWheeler至少C#,D和Eiffel允许对象作为值类型。而RAII是SOOO不错的系统编程!
fredoverflow

@MasonWheeler:右值引用可以实现完美的转发和仅移动类型。性能只是引入它们的三个主要原因之一。值类型的对象就可以了。另外,当然,您可以随意使用C ++编写自己的引用类型的对象。
DeadMG

同样,很有趣的是,即使存在所有这些性能问题,C ++仍然是最快的语言。
DeadMG '07年

1
@FredOverflow:在C#中,所有对象都是引用类型。结构可以是值类型,但是对象不能,这是有很好的理由的:如果对象被用作值类型,则您将巨大的猴子扳手用于继承和多态,最终不得不使用各种丑陋的技巧。像复制构造函数一样,将后代对象分配(或传递)给父类型变量实际上并不分配该对象。它完全解决了Liskov替代问题,这是使用OOP的全部重点。这是一个可怕的主意,我很高兴它从未流行。
梅森惠勒2012年

6

几个评论你说的话...

1)每个程序员都应该学习C,即使它很旧。这是一种接近机器的好语言。从乔尔的建议到CS学生 ....

毕业前学习C

第二部分:C.注意,我没有说C ++。尽管C变得越来越稀有,但它仍然是工作程序员的通用语言。这是他们用来相互交流的语言,更重要的是,它比机器在机器上更接近于机器,这比大学里将要学习的“现代”语言(例如ML,Java,Python)要多,天。您至少需要花一个学期来接近机器,否则您将永远无法使用高级语言创建高效的代码。您将永远无法在编译器和操作系统上工作,这是周围最好的编程工作。您将永远不会被信任为大型项目创建架构。我不在乎您对连续和闭包以及异常处理了解多少:如果您无法解释为什么while(* s ++ = * t ++); 复制一个字符串,或者如果这不是世界上最自然的东西,那么,就我而言,您正在基于迷信进行编程:不了解基本解剖结构的医生会通过根据药店售货员所说的方式开出处方。

2)即使不常用语言,语言也可能有助于他们学习心态。学习Scheme(或LISP)以了解函数式编程,即使它并不流行。从此板的另一篇文章中

恭喜,(对我而言)听起来像是您可能要去少数实际尝试教授计算机科学的学校之一。将学习计划作为第一语言是(IMO)很好的事情。不,它不像其他商业软件那么商业化,但是它是学习计算机科学真正精髓的绝妙语言。–杰里·科芬,2011年10月20日,下午3:32

C,C ++和Java是计算机科学的工业副产品。Scheme的全部根源是计算机科学。商业使用的语言与计算机科学的关系和麦当劳与美食的关系一样。– 2011年10月20日5:30,JasonTrue

这些家伙是对的。您正在将计算机编程与计算机科学相混淆-正如Dijkstra所说,这就像使望远镜构造与天文学相混淆。Scheme是关于学习计算机科学基本概念的最佳语言。如果您期望获得计算机科学学位是学习如何用Java编写业务线应用程序,则可能是您注册了错误的程序。–埃里克·利珀特(Eric Lippert),2011年10月20日上午7:40

我认识的几乎所有开发人员都是自己学习C / C ++。你不需要大学。– mouviciel 2011年10月20日7:48

出于同样的原因,动物学课程教授进化生物学,解剖学和动物行为,而不是讲授如何摆放大象摊位-jk。2011年10月20日在7:58

现在,尽管攻击了您的原始前提,但我认为您的好奇心值得赞扬。由于缺乏好奇心,太多的人过时了。利用您的个人发展是一个很好的信号,表明您会发展良好。学习最多的人是愿意不断询问事物如何运作的人。


1
“我认识的几乎所有开发人员都是自己学习C / C ++。您不需要为此而上大学。”:同样。在我的大学里,他们给了我们C语言的作业,但没有给我们C语言课程。他们只是期望我们计算机科学专业的学生能得到一本书并学习。
乔治

1
必须学习C是一种折磨。我的同情。
DeadMG

2
实际上学习C是很容易的部分,当我们不得不转向C ++时,真正的折磨开始了。;-)
乔治(Giorgio)

3

在接下来的5年中,您所学的任何语言都将发生变化。这不是要学习您认为可能会出现一段时间的语言,而是要学习如何学习。从长远来看,更多地学习语言和学习语言的过程将极大地帮助您!

我工作的最后一家公司使用他们自己的内部语言。它类似于Visual Basic,但不相同。因为我知道其他语言,所以我能够比其他员工更快地选择他们的语言。

在学习C ++,BASIC,Pascal之后,我学习了日语,并且可以说学习计算机语言和外语具有相同的技能。这些技能可能会丢失或提高。如果您有驱动器,请继续努力并学习新的语言!

(ps。至于学习FORTRAN或汇编语言,我认为至少要花一学期的较早语言是很有价值的。它使您考虑一下您认为是较新语言的东西,例如标志,内存分配等。 )


3

如果您想成为一名程序员,则最好学习尽可能多的“古老”语言。从Lisp开始,深入了解Forth,密切关注所有Wirth语言的演变,Fortran的演变,Prolog的兴衰,潜入秘密的Ada生态系统,从学习Occam获得秘密武器。追求“主流”是有抱负的程序员曾经做过的最愚蠢的事情。


+1:我完全同意。在尝试使用不太主流的语言(例如Haskell,Scheme,Scala,SML等)时,我得到了许多有趣的想法。–
Giorgio

2

我同意你对事情的了解。虽然我知道Java,C,C ++,Javascript,Python,Ruby和一些.NET(主要是因为我讨厌M $ <-个人观点),但我不得不说我真的很喜欢D编程。

D有一个非常好的功能集(大多数功能是在C ++ / Java中实现的(具有类抽象的语言)等),但我最喜欢的一件事是泛型和委托(使实现回调容易)。除此以外,与C ++相比,您得到的语法要简单得多。尽管您可以选择自己处理内存(特别是与C / C ++模块接口时),但D具有非常有效的垃圾收集器。尽管D没有用户贡献的模块负载,但这不应成为进入的障碍。您可以轻松地与现有的C / C ++库(纯净的)接口,从而使其在需要模块时变得多余。

D有自己的标准库(Phobos),可满足所有常见的编程问题。还有一个替代库(Tango-D2),您可以将其与Phobos一起使用,也可以单独使用。如果您是Web开发人员,并且需要编写基于事件的服务器,则Tango具有不错的Selector抽象(tango.io.Selector仅用于select(),poll(),epoll())。我发现它的性能甚至优于libev。


并不是说我不赞成学习D,但对于已经知道静态类型,OO和过程性,非底层语言的人来说,学习强调另一种范式或更接近金属的语言无疑是值得的。关于D的实验也很少。
大约

1
同意 我以为OP的问题集中在“实验性”问题上,即尚不稳定/支持公司支持/不是主流。而且即使您追求“实验性”的不同范例的实现,我猜那里也只有很少的范例。而且大多数语言都实现了其中一种。然后我们来谈谈哪种语言是更好/更快/更容易使用/最适合手头的工作。这些因素因程序员而异。
Shripad Krishna

1

开发语言以解决某种领域的问题(至少在最初是这样)。如果您还没有遇到工具无法以自己满意的方式解决的问题,那么您将锤打一块有望成为木匠的木板。尝试了解语言要解决的问题类型。一种“实验性”语言与一种新潮/时髦的家伙语言之间的唯一区别是支持它的资金,例如来自Google和Dart的Go。如果它们是在我的后院开发的,它们可能会死在某个论坛上,仅此而已。他们只有在善于解释要解决的问题时才能生存。或相反,例如Perl和C ++,它们擅长放弃解决问题的方法以保持生命力。我可能会建议学习Lua,这是 这是一种用于嵌入程序内的语言,它非常快速且轻巧,它将为您提供工具来解决某些大大小小的问题,例如Java之类的语言无法直接解决。以日语为例,如果您只是学习语法,语法和字母,而忽略了文化,您将永远无法理解为什么它是如此复杂,并最终将其遗忘了。它没有为您解决任何问题。


1

学习多种不同的语言将使您对编程有更广泛的了解。强调“不同”-例如,学习C#和Java不会比仅仅学习其中的一种教给您更多。但是学习C#或Java,以及使用一种功能语言(例如)就可以了。

话虽如此,作为一个年轻的程序员,我认为在真正着手了解一种语言之前,先回头看看不同类型的语言,您会获得更多的价值。从您的问题尚不清楚,您对Java,VB.NET和C#的了解程度如何。您是否有信心,如果您使用上述一种语言攻击了一个项目,那么瓶颈将是项目本身,而不是您对语言的了解?如果您想花更多时间问自己“我该如何用语言表达?” 而不是花时间思考实际的问题,那么您可能需要更多地关注当前的一种语言。

我个人认为您应该采取务实的方法来确定哪一个。Java用于Android应用程序吗?太好了,如果您感兴趣的是开发Android应用程序,那么就不要紧了。C#是否非常适合非Windows开发?如果您有兴趣为Linux开发,则为坏消息。无关紧要的。等等。

您提到的“实验”语言是什么?实用上讲,与其他人合作时,他们非常不适合-您可能会发现,每认识Fantom的人中就会有数千人知道C#或Java。对于个人项目,这不一定是问题。如果您的目标是增加就业能力,那就可以了。


1

您可能会说,学习用Postscript或APL这样的语言进行编程可以说是浪费时间,主要是因为您曾经使用该知识的机会接近零。但是出于同样的原因,如果您从不打算将Ruby和Python用作任何东西,那么您可能会认为它们是浪费时间。

但是很少有人会说学习Lisp是浪费,即使您写Lisp的可能性与Postscript差不多。但是学习Lisp可以使您(希望)对您的问题有不同的看法,这就是为什么大多数程序员都会告诉您值得的时间。

尽管如此,我仍然从不回避学习新语言,因为所需的时间投入实际上只有一个小时或四个小时。而对于像的Lua语言使用弹出在最不寻常的地方,你根本就不会认识他们,如果你没有花了几个小时,通过实例运行。

当您看到一种新语言时,请仔细阅读一下它的用途。如果这是一个利基市场,您最喜欢的语言覆盖面不太好,那么请花一天时间来学习基础知识。花时间肯定比看《单身汉》第17季要好得多,否则您可能会浪费时间。这样,如果您有使用它,它就会突然出现,并且您知道在哪里可以找到更多信息。

我个人真的建议您去Go。我用它来编写单页程序,其性能要比使用C或C ++的三天和13个第三方库要好,甚至在Python,C#,Ruby等中也无法实现。真正,非常,非常了解他们的东西的人。


-1

选择不同类型的。按功能分组,然后在每个组中选择一个。如果要专业地执行此操作,请选择一种使用的方法(因此,使用C + + D进行具有模板元编程的静态类型的编译语言)。

可怜的D,这是一种好语言,但是它缺少C ++的杀手级应用:与当时的#1语言几乎完全向后兼容(对于C ++来说是C)。很好,但是那个重要的小事实很可能会使D在历史记录簿中升为边秀状态。


-2

C可能已经很老了,但是它仍然非常强大且有趣,学习C将在您的“编程”未来中大有帮助。

Java并不慢,无论谁告诉您不知道他在说什么,Java都会向您学习有关OOP的大量知识

为什么不从Python开始,然后选择C或其他东西,


C也是微控制器的通用语言(当您只有4K时,您将负担不起8K运行时)。仅在此空间中,C就会在其之前活跃使用十年。
TMN 2012年

Java曾经很慢-我记得它在最初的几年里还不如速度魔鬼。有人认为性能从未提高。
MetalMikester,2012年
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.