如果我认识其他几种语言,我该如何快速学习一种新语言?[关闭]


14

不断出现在Programmers.SE上的一种类型的问题是,在您认识其他几种语言的情况下(通常是通过大量的经验或教育),如何学习一种特定的语言。

但是,在某些情况下,可能需要快速起步才能完成工作,个人发展,甚至是检验热门的新平台。

根据您的经验,您使用了哪些一般策略来快速选择一种新语言?在开始感冒时,您会尝试着重于某种语言的特定方面吗?您认为在此过程中有哪些类型的资源有用?


6
我会说就做。官方文档和Google是您唯一需要的资源。
福斯科(Fosco)2011年

@Rein有些答案是重叠的,但是此问题的目的是建立一个规范的答案,以尽可能快而有效地学习一种语言(任何一种语言)。另一个问题是书本建议,与此处给出的建议相似的答案以及关于非匆忙学习的一般建议的混合体(就寝前阅读,阅读语言规范,花几周时间在基础上熟悉一些不同的语言语言)。

我不确定所问的问题有多有用。如果我知道几种编程语言,那么我可能已经学会了如何选择一种新语言,而且效率可能很高。如果不这样做,我将如何从这个问题中受益?
David Thornley,

1
@David我知道六种语言,但是我通常是在学习语言后或工作了几个月后才学会的。但是,另一方面,如果我不得不快速地学习一种新工作的语言,那对我没有帮助。我毫不怀疑已经学习几种语言的人已经选择了快速学习它们的方法:这就是我希望答案所包含的内容。

@Mark Trapp:谢谢,这对我来说很清楚。
David Thornley

Answers:


18

我发现学习一种新语言的最好方法是边做边做,而不仅仅是阅读。因此,当我想要(或需要)学习一种新语言时,通常会阅读一本有关语法的参考书中的几章,但随后我会继续学习并创造一些东西,而不是一本又一本地读书。

我发现随着问题的出现,答案就会找到(通常是在互联网上)。我也认为这就是为什么在职培训如此宝贵的原因,因为您大部分时间都在制作工作产品,即使它是草稿也是如此,因此您正在边做边学。

我鼓励人们只考虑他们感兴趣的内容,而后直接去编写代码或创建表单等。

稍后,在一个接一个地创建一个项目之后,一本好的参考书将教给您一些精美的细节,这时您可以更轻松地掌握它们。

而且,这些项目通常从较小的项目开始,并且复杂性不断增加-从简单的“ Hello World”应用程序到规模不大但用途不大的项目,再到完整的应用程序。在我关注语言的哪些方面方面,这取决于该语言的应用用途-我从不学习要启动的每个API或框架(例如,以.NET为例)。这将花费太长时间。我学习了核心语法,然后从那里分支出来,根据需要研究每个扩展。使用诸如CSS或XSLT之类的模块化程度较低的语言,我只需首先学习最受欢迎的结构,然后根据需要添加其他结构。


当您说“做到这一点”时,您在潜入语言时是否专注于特定语言,以确保您尽可能高效地学习它?还是只是继续做随机的示例项目,直到它“点击”?

好吧,这些项目通常从较小的项目开始,并且复杂性不断增加-从简单的“ Hello World”应用程序到规模不大但用途不大的项目,再到完整的应用程序。在我关注语言的哪些方面方面,这取决于该语言的应用用途-我从不学习要启动的每个API或框架(例如,以.NET为例)。这将花费太长时间。我学习了核心语法,然后从那里分支出来,根据需要研究每个扩展。使用诸如CSS或XSLT之类的模块化程度较低的语言,我只需首先学习最受欢迎的结构,然后根据需要添加其他结构。
jqueryrocks 2011年

2
您可以将其添加回您的答案吗?那是一些很棒的信息。

5

这对我有用:

  1. 阅读有关它。
  2. 用它。
  3. 转到1。

对于“ 阅读”步骤,我尝试选择该语言的“ the”参考。例如“ C编程语言”。需要精炼到一定程度,并逐步建立您的知识。然后我读了它的封面。我是一个快速的读者,我不喜欢第一次阅读。然后,当我尝试使用该语言时,我将回过头来参考特定的要点。我可能会花更多时间在本书中的代码示例上。

您需要的第一件事是语法。不知道它是BEGIN还是{还是块缩进,还是如何声明变量,就无法编写任何内容。作者通常将首先介绍较重要的部分,或者会提供涵盖该语言基本用法的教程。很难提供更一般的指导,因为某些语言与其他语言非常不同。接下来是对语言的总体感觉,总体哲学是什么,如何在语言的上下文中解决问题。

要记住的另一件事是“使用它或失去它”的概念。如果您有一段时间没有使用某种语言,那么您将需要一些时间来恢复自己的速度(尽管这段时间会随着经验的积累而缩短)。掌握了语言的语法后,您将需要了解库等。

因此,这是一个反复的过程。每次迭代都更深入。没完没了。即使使用一种语言20年之后,仍然有一些东西需要学习。


您能否详细说明“阅读”的含义?当您开始阅读要学习的新语言时,您会特别关注什么?

@Mark-查看我的编辑...这是您要找的内容吗?
Guy Sirton

5

抓住一个现实世界的项目

从我的角度来看,当您实际需要学习某些东西时,它会更容易学习。对我来说,这是使用javascript进行的,因为我接受了一个有两个月时间框架的大型项目,因此冒了风险。我每天晚上每天晚上都在这里努力争取这个自由职业者项目的成果,并且在一个半月的时间里该项目就完成了。

我也偶然在那儿学习了一些SQL,然后我在大学里完成了对SQL的学习,然后猜猜,我也度过了一段轻松的时光。

如果您不想冒险...

上一点的实际关键是解决现实世界中的问题...但是我在压力下工作得更好(我喜欢压力,我认为这很有趣,而且我可能会受到伤害,所以...)。如果您不喜欢,那就去研究一个您感兴趣的开源项目,并使用您想要学习的语言并尝试做出贡献。如果您的代码很烂,您可能会得到一些反馈,具体取决于社区。

您可能仅通过学习代码就可以取得进步。

获取所有可以得到的参考

其中包括几本书,官方文档以及您可以获得的所有参考。很有可能那样,您将知道如何以不同的方式来做同样的事情。

其他社区(例如论坛,邮件列表等)也可以作为参考。


我想补充“抢现实世界的问题”。选择一些需要您在第一天就深入了解的东西。使用C#的第一天,我想出了如何动态加载dll,使用反射来获取类以及从中获取方法列表的方法。我学到了很多东西,以前从未使用过任何.net技术。
布莱恩·奥克利

2

有许多学习新语言的方法,但并非所有方法都同样有效。我发现这三个准则最适合我:

绘制一张您不知道的东西的地图

事先弄清楚您需要学习什么。查找以抽象术语描述该语言的概述或常规文档来源。这样一来,您通常就可以大致了解该语言的含义。使用该概述突出显示您不知道但被认为是该语言核心的区域。尾递归是您真正需要掌握的语言概念吗?也许您需要更好地了解您的正则表达式,因为该语言专门处理字符串操作。或者,也许您真的必须开始学习代数,因为语言中的许多概念都直接来自代数概念。

获取良好的资源来帮助您学习不了解的内容

您可能想对代数公式有一个很好的参考,或者也许只想购买“ Javascript,好的部分 ”。对于某些学习曲线,这项工作已经部分完成。如果您想从Java背景中学习C#(反之亦然),则有许多博客文章和网站会指出差异,并包含参考/资源以帮助您学习。

确保资源不只是参考-确保它们包括测试或练习,以帮助您评估您是否正确地学习了概念。阅读有关尾递归的内容是一回事,而抱怨如何以您选择的语言实现它是另一回事。

建立真实的东西

如果没有明确的目标,几乎不可能进行任何形式的实际学习。对于应用艺术尤其如此,这就是编程语言的用途。确保您有一个真正的目标针对-建立东西通常是最佳选择。


1

识别编程范例

我通常会确定语言的主要范例。我根据范式对问题的看法有所不同。

识别习语

所有语言都有习语。从构造代码的方式到特定的代码片段,习惯用法的大小和范围各不相同。您应该始终尝试并使用语言习语。

写代码

我通常会编写一些功能代码。从Primes Sieve到玩具Web应用程序的一切。我选择的问题通常特定于我打算使用该语言的目的。


1

只是潜水!

考虑到您已经知道如何编程和了解几种语言,除非该语言带来了非常深刻的范式转变,所以(同时)我会说:

  • 找到一个可以吸引你的宠物项目,
  • 并在侧面编程一些益智游戏

学习,练习,申请(直到满意)

经典的99个Prolog拼图(此处为Scala99个拼图)或Euler项目通常是寻找小型拼图重新实现的好地方。或潜伏于StackOverflow并用目标语言重新编写一些不错的答案,尝试不进行逐行重写,而是抓住新语言的精髓。

与困惑者一起学习,阅读侧面的博客和文章,以更深刻地理解该语言,并了解新社区的工具和圣战,并编写测试项目以应用新发现的知识和技能,看看您遇到了什么颠簸。

说到社区...

分享并公开自己。(不过不要太多。)

也许您还想访问一个本地用户组,​​找到与之进行编码的伙伴(以获得一些建设性的批评,而不是将自己锁定在特定的思维方式中),并订阅该可怕的IRC频道或邮件列表,在其中他们丢弃有关AST的奇怪字眼树木并写出关于莫纳德人不是莫纳德人的哲学故事,以及一旦遇见某个陌生女孩便不能回去


0

我知道这听起来很la脚,但是即使有些愚蠢,也要开始编写一些东西,并按照这种模式使用大量的Google:

我该如何[使用一种语言]

如果这些单词很常见,请使用引用的文字。

这是一个非常普遍的问题,几乎只有我找不到答案的时候,是当我找到一个解释为什么无法完成的页面时。


0

作为仅使用该语言的具体建议:

修正错误

  1. 用目标语言找到一个有趣的开源项目,最好是一个带有公共错误跟踪器,适度活跃的开发以及一个不错的测试套件的项目。
  2. 选择一个错误进行修复,最好是一个在实际使用该程序时使您烦恼的错误。
  3. 弄清楚该程序为什么会出现错误行为。
  4. 编写测试和代码以解决问题。
  5. 向上游提交补丁。
  6. 修改补丁程序,直到上游开发人员满意为止。
  7. 返回步骤1或2。

这个过程往往比编写另一个玩具程序更令人满意,但是比从头开始创建自己的完整项目要容易得多。您会接触到自然语言环境中的一些语言习语,并且(如果有运气的话)有人对好的代码的外观有所了解。

另一方面,它也可能非常令人沮丧,特别是如果您选择了一个令人讨厌的错误,或者如果开发人员在未正确解释原因的情况下拒绝了您的补丁程序,则尤其如此。

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.