学习一种新的编程语言很像学习说一种新的自然语言。
但是,正如我确定我的许多双语和通俗的朋友会同意的那样,有时在两种或多种语言之间切换可能会造成混淆。
例如,我的母语是英语,但是我在学校里被法语浸入法登记。虽然这肯定能使我精通两种语言,但在我用英语工作时确实产生了一些意想不到的后果。在最长的时间里,我会在许多单词上加上E或将美元符号放在一组数字的末尾(32美元而不是32美元),这都是法语的要求,但并不存在用英语。经过时间和实践,这些混淆最终消失了,我现在可以无缝地(或多或少)在两种语言之间切换。
我已经注意到这种情况再次发生,尽管这次,我正在尝试从C#和Java的结构化世界过渡到Python。在上大学时,我所有的课程都围绕严格的编程语言(例如C#)进行。现在,我正在尝试向数据科学过渡,而我目前正在学习Python。对于喜欢井井有条的事物的人来说,Python是一场噩梦。对我来说,严重缺乏分号,花括号和类型变量。好像我正在学习一种新语言(Python),这与我的母语(C#)完全不同。
学习类似的编程语言(例如C#,Java和JavaScript)类似于学习类似的自然语言。例如,通过了解法语,我很容易掌握类似的语言,例如意大利语,葡萄牙语和西班牙语。但是,学习一种与我所知道的语义不同的编程语言(Python)类似于学习冰岛语或普通话对我的法语背景没有多大帮助。
但是,正如我过去发现的那样,学习一种新的编程语言与学习一种新的自然语言相同。此外,能流利使用多种编程语言涉及一些与我能流利使用多种自然语言时相同的基础知识和技巧。
首先学习静态类型和语法特定的语言
几乎每篇标题为"我应该首先学习哪种编程语言?"的文章表明Python是某人学习的理想的第一语言。尽管我同意Python具有简单的语法和灵活性,因此它是一种很好的第一语言,但我相信以后将不再需要学习一些编程基础知识。
因此,我将提供一些违反直觉的建议:首先学习静态类型的和语法特定的语言。
与其学习会束手无策的语言,并为您提供进入编程世界的舒适途径,不如学习一种会因分号而忘记分号或因为数据类型不正确而拒绝工作的语言。错误。
静态类型的语言
静态类型的语言(例如C#和Java)要求将数据类型分配给它们的变量。数据类型包括字符串,整数和布尔值,仅举几例。变量绑定到它们在初始化时分配的数据类型,并且不能更改,否则,在运行之前,代码中将引发错误。
另一方面,动态类型化的语言(例如Python)不需要在变量初始化时分配数据类型。将在运行时(在程序已编译并运行之后)检查变量类型,以查看类型是否正确。
通过学习如何使用静态类型的变量,您将对将来可以建立的数据类型有基本的了解。例如,JavaScript是一种快乐的小编程语言,将整数和字符串加在一起没有问题。但是,不了解数据类型会在以后出现错误时引起问题。通过严格地学习并获得对数据类型的深刻理解,当您学习动态变量语言时,可以轻松地避免很多麻烦,因为该语言具有可以随时更改数据类型的变量。此外,首先学习静态类型的语言将为您的编码过程逻辑添加一层。
特定于语法的语言
学习新的自然语言时,首先要学习字母,然后再学习该语言的单词,句子结构,标点符号和语法。
学习编程语言是相似的,因为每种语言都有必须使用的特定语法,代码才能正常工作。换句话说,每种编程语言都有一种方式,使它喜欢构造其句子并形成其段落。
某些语言(例如Java和C#)的语法非常具体,如果您忘记了一个分号(分号通常放在代码行的末尾,类似于句号),则它们将无法工作。放在句子的末尾以表示其结尾)。其他语言(例如Python)相对没有必须遵循的语法结构。例如,与C#相比,Python相对没有分号,并且几乎没有花括号来组织其代码。
首先学习语法特定的编程语言将使您对编写代码时需要遵循的适当结构有充分的了解。通过了解适当的缩进结构,以分号结尾的代码行的必要性以及在大括号内编写函数的要求,您将能够编写出以下代码:易于理解,更有条理,易于维护和调试。此外,这将为您提供一个模板,当您开始尝试使用语法上不那么严格的新语言时,可使用该模板编写代码。
从本质上讲,现在就学习该学科,然后再获得回报。
能够流利使用您的母语
很难说一门世界上每一种语言的生活,而不是很好地讲一种语言,不是吗?此外,如果您只懂每种语言,那么您对任何人都不会有用吗?由于您既不会掌握很大的词汇量,也不会对任何特定语言有很强的理解力,因此您甚至无法在Google Translate中输入内容来尝试与来自世界各地的人进行交流。可能是你们两个最终都会非常困惑!
我认为,编程语言也是如此。与其尝试学习几种不同的语言,而又不熟练地理解其中的任何一种,不如精通您的母语或所选语言。
我并不是建议您必须精通一种编程语言,然后再学习另一种。但是,在尝试学习一种新语言之前,您应该对一种语言的编程概念有深刻的了解。
为什么?好吧,当您学习一种语言的代码基础时,可以假定另一种语言的基础基本相同。例如,if / else语句在您遇到的每种编程语言中都执行相同的功能,但是唯一的区别在于您用于传达它们的语法。例如,C#中的if / else语句要求使用大括号来组织语句,而Python中的if / else语句没有大括号,而是使用单个冒号和代码缩进来分隔每个语句。从根本上讲,该语句在两种语言中的工作方式相同。
就像您学会用母语说"你好"和"再见"一样。一旦理解了这些词的含义以及如何使用它们,就可以学习如何用多种不同的语言说"你好"和"再见"。这些单词在不同的语言中将具有相同的含义,唯一的区别是您使用不同的语法编写它们并按照不同的约定使用它们。
通过了解您的第一种编程语言是偏爱单个类还是多个类,具有特定的变量命名约定,或者是否需要面向对象的结构,您将逐渐掌握第一语言和后续语言。。精通一种语言后,随着您对编程语言之间的差异有了更深入的了解,您将能够更快地了解其他语言的细微差别。
不要用重音编码
说自然语言时,如果有人说的很重,您就可以理解。例如,即使我说法语很重,我也被母语为法语的人所理解。因为我使用的是法语约定,所以即使我使用了回旋的句子结构或错误地读了一个单词,他们也理解了我想要传达的内容。
为了能流利使用一种新的编程语言,您不能像使用已经知道的语言一样对其进行编码。如果您这样做,则可能是该语言不一定会理解您要执行的操作,或者它会以非常低效的方式来执行您要执行的操作。
在我使用Angular作为系统前端时,我在大学的顶峰项目期间陷入了这个陷阱。我当时非常了解JavaScript,并且知道Angular与JavaScript相似,所以我尝试使用与JavaScript相似的约定在Angular中进行编码。对我来说不幸的是,尝试使用重音符号无法产生良好的代码,这可能是由于不了解Angular的约定。我的代码全部用Angular编写,但是用沉重的JavaScript口音讲话。
换句话说,请不要重复我的错误-按照原意使用新语言,并且不要带有重音符号。
通过使自己沉迷于新语言并强迫自己理解其所有独特约定,您将学习如何以预期的方式使用该语言进行编码,而无需将其用作已经知道的语言。这将使您能够流利地使用多种语言,而不会用浓重的口音讲所有这些语言。
例如,如果英语是您的母语,但是您决定快速学习其他五种新语言,那么您最终可能会说俄语,意大利语,斯瓦希里语,意第绪语和阿拉伯语,而且所有这些都带有强烈的英语口音并使用英语约定。如果您选择学习俄语的惯例,那么俄语母语的人就会明白您的意思。其他语言也是如此。如果您尝试使用典型的英语句子结构说斯瓦希里语,那么肯尼亚的某个人可能不会理解您。
花些时间阅读编程语言提供的文档,并对该语言的特定约定有所了解。这不仅会使您更加流利的语言,而且在与理解该语言并希望您能够遵守其约定的其他人一起进行团队项目时,也将使您变得更有价值。
您最初可能不得不强迫自己编码时没有任何口音,但是当您可以轻松地从一种语言切换到另一种语言时,辛勤的工作将获得回报。
最后的想法
本文概述了成为多语言编程语言时遇到的一些更独特的想法,使之成为多语言编程语言。这些提示都对我有很大的帮助,但是如果我不提及其中一些更常规的提示,那将不会是一本非常有用的文章:
- 阅读语言文档,阅读源代码,使用自己的新语言用"单词"复制代码示例,为新语言编写备忘单等,从而完全沉迷于该语言。
- 继续使用各种语言(例如Youtube,Medium和StackOverflow)使用新语言编写编码教程。学习新的编程语言时,您需要乐于助人。换句话说,积极学习将成为您的朋友。
- 使用您正在学习的新语言重新创建您已经完成的项目(甚至是简单的项目),并尽力使用新语言。
- 参加要求您使用新语言的黑客马拉松,Kaggle竞赛和编码挑战。
- 与非常了解该语言的人合作。与那些精通我要学习的语言的人一起,我从配对编程中学到了很多东西。在他们编写特定代码的过程中听到他们的思考过程,使他们对语言的工作原理以及为什么他们以特定方式编码解决方案有了很多了解。
我能提供的最佳建议是坚持不懈。学习新语言很困难,编程语言也不例外。如果需要一点努力学习,请不要放弃该语言。幸运的是,互联网上的多种资源可以帮助使学习过程更轻松,更直观。
最重要的是,在学习新语言时,请不要忘记应用可用的建议和工具。从长远来看,您不仅会更好地理解语言,而且还将成为更好的开发人员或数据科学。
原文链接:
https://towardsdatascience.com/how-to-become-fluent-in-multiple-programming-languages-9f473c146b90