【问题标题】:What process do you use to learn a new programming language? [closed]你使用什么过程来学习一门新的编程语言? [关闭]
【发布时间】:2009-06-20 00:00:16
【问题描述】:

此问题适用于经验丰富的程序员。在学习一门新的语言时,您是否有一套既定的流程?

我希望我有一个可以遵循的有效方法或待办事项清单,以简化学习过程。

你更喜欢独自学习还是和朋友一起学习?有没有什么地方可以轻松获得新语言的语法?您是否制作了一种特定类型的备忘单,您可以在其中快速写下控制结构和重要的关键字?

你有什么特别的记忆吗?

您确定要学习哪些类型的库?你怎么知道你已经学到了一些东西,在什么时候你觉得你好像知道这门语言?

每当我学习一门新语言时,我大部分时间都在摸索书籍,其中一半是为初学者准备的,而从不为有经验的开发人员准备的。

【问题讨论】:

    标签: programming-languages methodology


    【解决方案1】:

    就我个人而言,我发现我需要一个实质性的项目来用一种新的有趣的语言来实现。您可以通过阅读一本书来熟悉语法,并接触到有趣的功能,但什么都不会让您像项目一样用新语言思考。

    【讨论】:

    • 正是我的做法!有一个目的并使用你的最终产品是必不可少的,因为它迫使你超越大多数书籍和指南,因此这会让你真正深入到产品周期(部署、重构代码、版本控制、IDE 的所有方面、用户)。另外最后一点:只是“阅读”东西往往给人一种理解任何东西的错误印象,但结果往往只是一知半解。祝你的下一门语言好运!
    • 我完全同意这一点。我经常会做一个我一直想做的个人项目,并开始用我想学习的语言来实现它。通过做一些“真实”的事情而不是看书上的例子对我来说更容易学习。
    • 现在我想起来了,通读一个非常互动的教程通常也很有用。当我学习 Python 时,我阅读了 diveintopython.org 并运行了 Python 解释器。我浏览了这些示例并尝试了每个示例。我不会说我是这样学习 Python 的,但它让我很早就接触到了一些非常重要的概念(而且我已经习惯了解释器)。
    【解决方案2】:

    我不打算仅仅学习一门新语言。我找到了一个需要(或非常适合)新语言的项目并开始编码。

    资源取决于语言,但无论是在线教程还是一本好的“学习语言”书都非常有帮助。我不会试图记住任何东西,只是保持文档关闭并搜索我需要编写的每段代码的解决方案。算法在语言之间变化不大,所以大多数时候只是查找我需要的特定结构的语法。

    另外,我可能永远不会了解语言的一切。我只是不断地查阅有关我需要的东西的文档,最终我不再需要查找大多数东西了。然而,即使是多年来我每天都在使用的语言,有时我仍然需要查找一些东西,因为我以前从未使用过它们。

    【讨论】:

    • 自从我写这篇文章以来的 10 年里,我没有听从自己的建议。从那时起,我就开始学习几种新语言,而没有需要新语言的项目。至于变化不大的算法,我一定是在发现函数式编程之前写的。 ;)
    【解决方案3】:

    这是我通常做的:

    • 阅读以熟悉新的 语言语法
    • 查找现有的开源项目 我有兴趣
    • 将其移植到新语言
    • 必要时重复

    【讨论】:

      【解决方案4】:

      我通常从一些基本程序开始。通常是我正在阅读的书中的样本,然后稍微修改它们以使其更复杂并圆润粗糙的边缘。

      之后,我前往Project Euler 并开始解决问题。这是熟悉新语言和基本结构的好方法。

      【讨论】:

        【解决方案5】:

        这是一个疯狂的冲刺。

        首先我必须确保我知道如何以“旧”方式做事,这意味着我在其他语言中习惯的方式。

        但我不想陷入(例如)像编写 C 代码一样编写 Python 代码的陷阱,所以我阅读了新语言为我提供的所有更熟悉的语言所没有的东西.

        【讨论】:

          【解决方案6】:

          我阅读了一本很好的手册,并将其与我已经知道的语言进行了比较。所以我只是了解它们之间的差异。

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

              我会创建一些我以前已经做过的东西,这样我就可以专注于语言本身,而不是项目的设计或主题。
              我还会花一些时间搜索(这个地方是一个很好的开端;-)并阅读一本关于该语言的好书。

              剩下的就是练习练习练习(就像外面的所有东西一样,不是这样)。

              【讨论】:

                【解决方案9】:

                编程的基础知识只需要很少的结构 - 一个优秀的程序员将能够编写出色的代码,只需要可用语言功能的一小部分。

                一本书通常是学习一门新语言的基础知识并获得概览的好方法,这样您就知道该语言的哪些领域可以在您以后需要它们时为您提供帮助,但最好的方法是编写程序做你需要做的事情,并学习你需要知道的事情。

                这样做的好处是,当你想做新的事情时,你知道去哪里找,而且你做得很好,但你不会费心去学习大量你永远不会真正使用的垃圾。

                【讨论】:

                  【解决方案10】:

                  我会阅读一些关于语言大概念的常见问题解答/书籍。

                  然后我会尝试在我已经知道的语言之间进行比较,以避免在语言 X 中应用在语言 Y 中使用的概念。每种语言作为完成工作的方式,即使它们也不应该混合使用乍一看很相似。

                  这将是第一步。

                  在更长的基础上,我会关注论坛或 SO 上专门讨论此语言的部分。这些天我会阅读许多线程的答案,以便掌握先进的概念、技巧和最常用的库。这也有助于我注意到我何时开始流利地使用该语言:当您开始能够用特定语言回答许多随机问题时,这意味着您已经相当擅长了。

                  【讨论】:

                    【解决方案11】:

                    我假设您学习了一种新的支持 OOP 的高级编程语言。此类语言的示例包括:Java、Typescript、Perl、C#、C++ 等。您也是一位经验丰富的程序员,因此您已经了解其他一些面向对象的语言。

                    我希望我有一个可以遵循的有效方法或待办事项清单,以简化学习过程。

                    您应该创建一个涵盖以下主题的项目。

                    语法

                    • cmets
                    • 命名空间
                    • 声明
                      • if else
                      • 循环
                      • switch case
                    • 函数和类
                    • include / import / use

                    类特定:

                    • 静态
                    • 常量/最终
                    • 覆盖方法
                    • 创建接口并实现
                    • 继承
                    • 嵌套类

                    数据结构

                    • 数组
                    • 收藏:
                      • 列表
                      • 地图、队列、堆栈
                      • 对它们的操作:
                        • 删除
                        • 插入
                        • 搜索
                        • 迭代
                    • 字符串

                    您可以通过多种方式使用字符串

                    • 替换
                    • 匹配
                    • 加入
                    • 拆分

                    运营商

                    赋值运算符= 有时很棘手。您必须检查它是创建浅拷贝还是深拷贝。

                    == 是如何工作的?也许有像obj.equals(other)这样的替代方案?

                    串联:s1 . s2s1 + s2?

                    你能重载运算符吗?

                    编程技巧

                    • 异常处理
                    • lambdas
                    • 与用户互动(read, write
                    • 单元测试

                    intboolchar 等简单类型是什么?它们是不变的吗?如果这是弱类型语言,标量、数组和哈希表之间可能存在差异。

                    职能。

                    参数是值传递还是引用传递?

                    杂项

                    • 正则表达式
                    • 线程
                    • 数据格式:
                      • JSON
                      • XML
                    • 文件和流
                    • HTTP 方法
                    • 日期和时间

                      您应该熟悉Mathalgorithm 等流行库。

                    【讨论】:

                      【解决方案12】:

                      我通常安装运行时。 然后我从编译器或解释器的命令行运行一些常用命令。 我在网上寻找论坛以了解其他人对此的看法。 然后我研究如何在 java 中使用外部参数,例如 psvm(String[] args)。 我想总结一下,由于我在 solaris 中的系统管理员背景,我一直对命令行上的语言功能感兴趣。

                      【讨论】:

                        【解决方案13】:

                        如果您没有机会加入一个项目并从头开始学习并应用它。您可以从开放的在线课程中获得帮助。例如,“Edx.org”就是一个很棒的平台。有很多关于计算机科学和软件开发的课程。 IE。 Here 是一门数据结构和软件设计课程。

                        【讨论】:

                          猜你喜欢
                          • 2011-02-22
                          • 2011-02-04
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2013-10-21
                          • 2012-08-23
                          • 1970-01-01
                          相关资源
                          最近更新 更多