你学习新编程语言的过程是什么?

5
这个问题是给有经验的程序员。当你想学习一门新语言时,你是否有一个固定的流程来学习?
我希望我能有一个高效的方法或待办事项清单,以使学习过程更加顺畅。
你喜欢独自学习还是和伙伴一起学习?有没有什么地方可以轻松获取新语言的语法?你会制作特定的备忘单,在上面快速写下控制结构和重要关键字吗?
你有什么具体的东西需要记忆?
你一定要学习哪些库?你如何知道自己已经学会了某种语言?在什么时候你会觉得自己已经掌握了这门语言?
每当我学习一门新语言时,我大多数时间都在浪费时间翻阅那些既适合初学者又不适合有经验的开发人员的书籍。
13个回答

9

个人而言,我发现我需要一个大型项目来实现以新的有趣语言。你可以阅读一本书了解语法,并接触到有趣的功能,但是没有什么比项目更能让你在新语言中思考。


正是我的方法!拥有目的并使用你的最终产品是必要的,因为它迫使你走得比大多数书籍和教程更深入,因此这让你真正深入到产品周期中(部署、重构代码、版本控制、所有IDE的方面、用户)。另外,最后一点:仅仅“阅读”东西经常会给人留下误解,认为自己已经理解了任何东西,但通常只是略知一二。祝你在下一个语言上好运! - merkuro
我完全同意这个观点。我经常会拿起一个我一直想做的个人项目,并开始用我想学习的语言来实现它。对我来说,通过在“真实”的东西上工作而不是看书中的例子更容易学习。 - Nick Haddad
现在我想起来了,通过进行一个非常互动的教程也是非常有用的。当我学习Python时,我阅读了http://www.diveintopython.org/,并运行了Python解释器。我逐个示例地进行了尝试。我不会说我是通过这种方式学习Python的,但它让我早期接触到了一些非常重要的概念(而且我也习惯了解释器)。 - Anson MacKeracher

5
我不是单纯地学习一门新语言,而是找到需要(或适合)使用这种新语言的项目并开始编码。
资源取决于语言,但在线教程或好的“学习该语言”的书籍都非常有帮助。我不试图记住任何东西,只需保持文档接近并搜索我需要编写的每个代码片段的解决方案。算法在语言之间变化不大,所以大多数时候只需要查找我需要的特定结构的语法。
此外,我可能永远无法完全掌握一门语言。我只需继续查阅我需要的文档,最终我就不再需要大部分查阅了。然而,即使对于我每天使用多年的语言,仍有些我偶尔需要查阅的东西,因为我以前从未使用过。

在我写下这篇文章的10年里,我没有遵循自己的建议。自那时以来,我已经开始学习几种新语言,但并没有一个需要使用新语言的项目。至于算法是否有太多变化,我肯定是在发现函数式编程之前写下这篇文章的。 ;) - CoderDennis

4

这是我通常做的:

  • 阅读以熟悉新语言语法
  • 找到我感兴趣的现有开源项目
  • 将其移植到新语言
  • 如有必要,重复上述步骤

2

我通常从几个基本程序开始,一般是我正在阅读的书籍中的范例,然后稍微修改一下,使其更加复杂并去除粗糙的边缘。

之后,我会转到Project Euler,开始解决问题。这是一个熟悉新语言和基本结构的绝佳方式。


2

这是一场疯狂的冲刺。

首先,我必须确保自己知道如何按照“老”方法做事情,也就是我在其他编程语言中习惯的方式。

但我不想陷入例如将我的Python代码写成C代码的陷阱中,因此我研究了新语言给我的所有东西,这些在更熟悉的语言中并不存在。


1
我假设你正在学习一门支持面向对象编程的新高级编程语言。例如Java、Typescript、Perl、C#、C++等。由于你是一位有经验的程序员,所以你已经了解其他一些面向对象的编程语言。
“我希望我有一个有效的方法或待办事项清单,可以遵循它来使学习过程更加流畅。”
你应该创建一个项目,涵盖以下主题。
语法:
- 注释 - 命名空间 - 语句
- if else - 循环 - switch case - 函数和类 - include/import/use 特定于类:
- 静态 - const/final - 覆盖方法 - 创建接口并实现 - 继承 - 嵌套类
数据结构:
  • 数组
  • 集合:
    • 列表
    • 映射、队列、栈
    • 对它们的操作:
      • 删除
      • 插入
      • 搜索
      • 迭代
  • 字符串

你可以用多种方式处理字符串:

  • 替换
  • 匹配
  • 连接
  • 拆分

运算符

赋值运算符=有时很棘手。你必须检查它是否创建浅层或深层副本。

==如何工作?也许有一种替代方法,像 obj.equals(other)?

连接: s1 . s2s1 + s2?

你能重载运算符吗?

编程技巧

  • 异常处理
  • lambda表达式
  • 与用户交互 (read, write)
  • 单元测试
简单类型,例如intboolchar,是什么?它们是不可变的吗?如果这是一种弱类型语言,可能会有标量、数组和哈希表之间的差异。
参数是按值传递还是按引用传递?
杂项
- 正则表达式 - 线程 - 数据格式:
- JSON - XML
- 文件和流 - HTTP方法 - 日期和时间
你应该熟悉像Mathalgorithm这样的流行库。

1

我阅读了一本好的手册,并将其与我已经了解的语言进行比较。因此,我只需学习它们之间的差异。


1

学习一门新语言的一个非常流行的方法是为自己创建一个简单的项目,并在你的新目标语言中实现它。


1

我会创建一些我之前已经完成过的东西,这样我就可以专注于语言本身,而不是项目的设计或主题。
我也会花点时间寻找(这个地方是一个很好的起点 ;-)并阅读一本关于该语言的好书。

对于其余的部分,就是不断练习(像其他任何事情一样)。


1

我会阅读一些关于该语言的大概念的FAQ/书籍。

然后,我会尝试寻找我已经了解的语言之间的比较,以避免在语言X中应用语言Y中使用的概念。每种语言都有自己的完成任务的方式,即使它们乍一看相似,也不应混合。

这将是第一步。

长期来看,我会关注论坛或SO上专门介绍这种语言的部分。我会阅读几天内许多帖子的回答,以获取高级概念、技巧和最常用的库。这也会帮助我注意到自己开始熟练掌握这种语言的时候:当你开始能够回答关于某种特定语言的许多随机问题时,那就意味着你已经相当擅长了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接