如果每年要学习一种新的编程语言,该清单应该是什么?[关闭]


19

“实用程序员”的第一章中,第一个学习目标是:

每年至少学习一种新语言。不同的语言以不同的方式解决相同的问题。通过学习几种不同的方法,您可以帮助拓宽思路,避免发疯。[...]

为了在职业生涯中实现这一目标,语言列表可能会很长(特别是如果您不想“进入”管理阶段)。显然,对程序员(或任何形式)的教育将使您开始使用商业上有用的语言的核心(职位发布中的常用列表:C,C ++,Ruby,Python,JavaScript,C#,Java,VB等)。 )。另外,正式或非正式的学习计划可能涵盖了功能方法(通过诸如Haskell,LISP或ML衍生语言之类的方法)

但是,一旦了解到该列表的合理子集,下一步是什么?为什么


3
这个答案中,我列出了一些可以用来扩展您的能力的语言范例。首先,我将尝试学习所有这些范例(而不是专注于语言),因此请勾选您当前语言所使用的所有范式,然后选择一种与您所使用的语言有尽可能多不同的语言。从C#开始,从Java开始并没有多大意义,而是尝试从一开始就更加多元化。一旦涵盖了所有基本类型,就可以选择其他通用语言。
西蒙·史蒂文斯

@Simon:为什么不在这里做出答案?
理查德(Richard)2010年

1
从Java到C#,您将学到很多东西,
反之则

@理查德。我真的不认为这是一个完整答案的理由,我只是在向您推荐我在其他地方写的相关内容。
西蒙·史蒂文斯

1
除非您专注于几年,否则大多数一年学习一门语言的人将是“万事通,无精打采”。我相信,基于许多经验,除1%-5%的开发人员外,“全栈”程序员的概念是错误的。我认识的大多数核心后端人员都没有很好的前端技能,反之亦然。
junky 2012年

Answers:


19

让它变得有趣,并每年花费自己的编程语言编写解释器或编译器,以填补您从未使用过编程语言的利基市场。每年,使用上一年编写的语言编写下一个编译器/解释器。


7
我可以请你签名吗?:-)
ChristianDavén2010年

1
+1出色的答案,即使这可能是幽默的意思。
乔D

1
@Joe D并非完全幽默。如果您能做到这一点,那么您已经掌握了所有壁ni。
替代

-1表示不完全幽默。(例如我们周围没有足够多的半废弃语言/实现)
ZJR 2012年

2
@ZJR那么99%幽默,1%非幽默不好吗?妖怪 另外,为什么要根据评论降低答案?
替代方式

13

您应该最大化“边际相关性”,即始终冒险进入您尚不擅长的新领域。改变编程语言和概念。如果您不了解任何面向对象的语言,请尝试使用Java和诸如Hibernate之类的高抽象框架。然后以脚本语言(例如Python或Perl)编写一些系统管理内容。然后学习一些C或C ++的低级技能,编写高性能的多线程服务器代码。如果您不了解函数式编程,请尝试使用Haskell处理一些图论问题,例如解决Peg Solitaire等。这样做非常可行,这样您学到的所有内容都具有即时的市场价值,直到您碰到博学或特殊目的的东西(例如作为对象能力安全PrologVHDL

顺便说一句好运动!这将教会您横向思考并以与语言无关的方式设想问题,而不是依赖于过多的平台特定技术。例如,一旦掌握了C ++和Python在虚拟方法分派中的异同,您几乎可以立即为任何其他语言“获得它”。


9

不会影响您对编程思维方式的语言是不值得的。-艾伦·佩利斯(Alan Perlis)

正如其他一些答案所涉及的那样,如果您每年要学习一种新语言,那为什么呢?是为了扩展您作为程序员的能力。怎么了?通过学习具有与您已经知道的语言截然不同的范例的语言,然后盘点您已经知道的范例来确定接下来要学习的语言。

这些范式是什么?高级书籍《计算机编程的概念,技术和模型》通过图形化地图提供了出色的概述

因此,如果您只知道类似C的命令式语言,那么学习Scheme / Lisp非常有用。如果您已经了解命令性和功能性语言,那么学习Prolog将会很有用,等等。

最近的一本试图教授多种语言和范例的书是“ 七周七种语言”。当然,经过一周的学习,您不会精通每种语言,但它似乎确实提供了一种平易近人的,面向从业者的多范式视角。

当您尝试另一种范例时,这确实是禅宗时刻。从命令式编程到函数式编程的转变使我以全新的视角看待了计算领域。学习愉快!


语言对您的思维的影响不仅仅取决于它允许您表达的内容,还更多地取决于它迫使您表达的内容。
Florian F

9

C-作为必不可少的“一切基础”,系统编程语言

Lisp(Scheme)-伟大的黑客认为奇怪而又功能强大的ur语言

Smalltalk-因为这就是OO的本意

Erlang(或其他Actor语言)以了解Actor

Haskell-了解Monads

Javascript-因为它无处不在,并且对于编写浏览器脚本至关重要

Python / Ruby / Perl中的一种(但实际上无关紧要)-这样您就会知道一种流行的,现代的,具有良好库支持的高级脚本语言的感觉

SQL-因此您可以与关系数据库对话

Prolog-因为您仍然需要打定主意


2
我之所以学会Haskell是因为我想学习一种功能语言(与我以前所知道的所有程序语言相对),而Haskell在我看来就像是功能语言的典型代表。我现在喜欢Haskell的原因是因为它是一种高级语言,具有良好的库支持,并且速度很快(大约比C快50%,但这取决于您在做什么)。另外,我喜欢能够编写一堆代码,并且所有这些都在第一次或第二次工作(在将其编译之后)。
乔伊·亚当斯

学习Perl,Python还是Ruby绝对重要。例如,Python具有列表推导,这在Ruby中不存在,而Ruby具有模块,而在Python中不存在。您可以用任何一种语言复制这两种结果,但是学习任何一种都会以非常不同的方式影响您的思维。
philosodad 2011年

1
序言-因为您仍然需要打定主意-迄今为止最佳评论+1
Zachary K

1
我认为学习haskell的主要好处不一定是掌握monad抽象,而是要学习REAL强而有力的类型系统的好处。如果人们对“静态类型系统”的想法像Java,那么haskell会让您屏息。
萨拉

4
  • Go(新的系统级编程语言,对并发性和概念的支持不那么传统)
  • Lua(脚本语言简单,富有表现力,极其灵活且平衡的示例式命令式,功能性和元编程,允许OOP)
  • D(正确完成C / C ++)
  • Groovy(Java世界中的表现力和元编程)
  • Eiffel(按合同设计和面向对象操作的另一种方法)
  • Prolog(逻辑编程语言)

1
为什么有人要学习这些?(为什么这是有趣的地方,很少有真正独特的编程语言:每个范例都已经实现了不止一次。)
理查德(Richard

有趣的是,你认为dÇ做的权利。就我个人而言,当我使用C时,我主要将其用于一些底层的东西,而这些东西我根本不需要任何OOP抽象。
乔纳斯(Jonas)2010年

@Jonas:我们仍然需要一种简单的语言来完成,尽管这种语言不会出现,但D只能以命令式的方式很好地使用。对您来说,D2更具功能性,完成后也许将是对一种主要命令语言的范例的最佳实现。
Maniero

做对是主观的。对我来说,Erlang是一种很小巧的简单语言。缺少的部分是出色的GUI框架,如果您使用复杂的系统,也许您会更希望使用静态类型的语言。
乔纳斯(Jonas)2010年

@Jonas:Erlang是一种很好的语言,但是C / C ++做得不好,完全是另一回事。
Maniero

2

1)Prolog:与您到目前为止使用的所有命令式语言完全不同,它将改变您对问题的思考方式

2)Lisp:没有它,您不妨使用Vi

3)Erlang:同样,它完全不同,而且看起来很时髦。

4)来自图灵Tarpit的东西(例如Brainfuck),并且可能为此编写了编译器或解释器:我想不出这样做的理由,但这听起来是个好主意。


1
“如果没有它,您不妨使用Vi”。我很惊讶没有人收到这个消息:)
Gauthier 2010年

我使用vi!(好gvim)
Zachary K

1

除了你列出的

Haskell,F#,Clojure,OCaml,Lua,Go,D,Erlang,Objective C.


1

虽然我同意学习新语言是件好事(甚至需要长期从事职业),但我认为在过去的五年中,一年过得太多了。我希望看到的是具有这种经验的人,可以学习有关他们已经知道的语言的新知识。在某些时候,您需要知识的深度和广度。因此,您可以使用12种语言编写If构造,大声疾呼。我宁愿看到一个真正精打细算并在至少一件事上成为专家的人。然后接下来的几年成为其他方面的专家。在30多年的职业生涯中,我希望某人不仅在很多事情上都有基础知识,而且要有深度的知识。

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.