如何学习所有编程语言,没错!所有!
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
原文链接:https://www.coderscat.com/how-to-learn-all-pl
我应该从哪种编程语言开始学习呢?
许多初学者在开始学习编程时都会问这个问题。
哪种编程语言最好?
开发者在积累了实际开发经验后才会提出这个问题。
关于编程语言的问题可能会引发无休止的争论,你永远也得不到最终答案。
相反,我更想分享的是如何掌握学习一门新语言的技巧。
对于熟练的程序员来说,学习新的编程语言应该很容易。他们通常只需一个周末,甚至几个小时,就能用新的编程语言编写代码。更熟练的程序员只需浏览一下手册,就能通过完成相关任务来学习这门语言。
图1:来源:tenor.com
掌握“所有语言”的学习技能不需要天赋,只需要编程语言和实践的核心知识。
当然,我们不需要学习所有类型的语言,但学习更多编程语言将有助于我们为任何给定的任务选择合适的语言。
如果编程语言是汽车……
世界上有数千种编程语言,但只有大约 20 种在 IT 行业中被广泛使用。
如果我们深入探究一下,就会发现所有语言都有一些共同的特征。
图 2:来源https://www.slideshare.net/cyber_jso/ocaml-13036522
以汽车为例,世界上有各种各样的汽车。有些汽车小巧而动力强劲,有些则笨重而缓慢。不同的汽车品牌代表着不同的驾驶体验。
如果一个人会开一辆车,他就会开大多数其他车,即使是不同品牌的新车。
为什么?因为不同的汽车有很多共同之处,它们的基本构造都离不开发动机和轮胎。它们的设计目的都是一样的:把你送到目的地。
为什么有这么多编程语言?
在计算机领域,编程语言发挥着两种作用:
- 向机器发出指令,告诉它们我们需要什么,就能得到我们想要的东西。
- 与其他程序员交流想法,分享我们的经验和愿景。
因此,代码对于程序员来说就是“信息”,对于机器来说也是如此。这涉及到编程语言设计和实现中的权衡取舍。
图 3:https://www.youtube.com/watch?v=Pn5znSOGHcs
主要原因应包括:
- 硬件和计算理论都在不断发展。总的来说,编程语言的设计越来越易于使用,表达能力也越来越强。
- 计算机被应用于许多领域,并可能发明相应的语言。
- 不同的程序员有不同的设计方法和理念。
不同的语言语法或特性各不相同,但从本质上讲,它们在形式化的数学层面上是相同的,它们都是图灵完备的。简单来说,这意味着所有语言都可以用来实现任意算法。
编程语言基础
图 4:编程语言基础知识
几乎所有编程语言都包含这些元素类别,它们实际上都与“抽象”有关:
数据类型和数据抽象;
控制流和控制抽象
;底层抽象;
特定领域的补充和抽象
我们之所以能够掌握所有编程语言,是因为:语言概念是有限的,比如说,常用的语言不超过15种。
程序
递归
静态类型
动态类型
类型推断
Lambda 函数
面向对象
垃圾收集
指针
续篇
元编程
宏
例外
语言概念往往是恒定的,就像设计原则一样。
编程语言设计者之间会互相借鉴想法或概念,但实现方式可能有所不同。因此,我们有时会说PL_C是PL_A和PL_B的“儿子” ,PL 语言的族谱可能如下所示:
理解这些概念不仅能帮助我们更快地学习一门语言,还能极大地帮助我们编写更优质的代码。例如,函数式语言和面向对象编程语言的编码风格和范式截然不同,如果不理解它们之间的差异,就难以避免代码中出现不良代码。
关注语言概念,而非语法
图 6:来源:推特 @slidenerdtech
我们想学习语言概念,但该如何学习呢?
我们应该充分理解这些问题,了解为什么发明了这个概念,它解决了什么问题,它的优点和缺点是什么,以及有时它是如何实施的。
以 GC 为例,首先应该问的是,什么是 GC?
在谷歌上快速搜索一下,我们会跳转到维基百科的GC页面。GC的发明是为了解决内存管理问题,它可以减少程序中的内存错误,使用GC编写代码会更轻松,因为我们不需要手动管理内存。
代价是性能下降,因为需要额外的代码来分配和释放内存。使用带有垃圾回收机制的编程语言时,请注意垃圾回收机制对性能的影响。
经过一些练习后,我们需要了解垃圾回收机制的工作原理,以及它使用的算法。垃圾回收机制有很多种实现方式,各有优缺点。
学习一门新语言,对你来说是一个很好的学习新语言概念的机会。
例如,如果 Ruby 是你学习的第一门面向对象语言,那么这是一个认真研究面向对象优缺点的绝佳机会。对面向对象有深入的理解,对你学习其他面向对象语言大有裨益。
创建或实现编程语言
别害怕,解释器和编译器只是另一种程序,它们的输入是你的代码,它们的输出是运行你的代码或将代码编译成字节码或二进制文件,这很简单,对吧?
图7:来源:f.hatena.ne.jp
如果语言语法不复杂,实现它并不需要太多工作。看看这个项目:Make a Lisp,任何语言都可以用来实现 Lisp。Lisp/Scheme 语法简洁,易于解析,因此被广泛用于编程语言教学。
8cc是 C 语言的编译器,如果你想编写一个编译器,它是一个很好的参考。
还有一些关于编程语言的书籍:
- EOPL是一本教科书,其中包含许多可供练习的解释器。
- 《编程语言实用技巧》也是一本对学习编程语言很有帮助的书籍。
学习一门新语言的步骤
以“学习所有语言”为目标,如果您遵循以下步骤,将有助于您高效学习:
**#1 理解这门语言的设计理念和通用语言特性**
例如,如果你开始学习 Ruby,我们来看看 Ruby 有什么特别之处?
图 8:来源:www.ruby-lang.org
嗯,让我们深入了解一下:http://www.ruby-lang.org/en/about/
总结一下你开始学习之前需要理解的主要要点:
- 注重简洁性和高效性,代码易于阅读
- 使用解释器意味着存在垃圾回收机制,这也意味着某些任务的性能可能会出现问题。
- 一切皆对象,好的,面向对象编程(OOP)语言,甚至是“纯面向对象编程”。
- 灵活性,太棒了!我们可以重新定义语言的许多部分。
了解这门语言最重要的特性,包括它的优点和缺点,对你开始学习这门新语言大有裨益,就像一份学习路线图。
**#2 通过教程或书籍学习语法和练习**
你需要掌握一门语言的基本语法、基本输入输出、调试工具、单元测试工具等等。
如果你是初学者,可以找一些权威书籍,比如语言创造者写的书,或者直接在亚马逊上搜索语言名称,找到评价好的书。
如果您是语言高手,只需找到一些关于这门语言的简单指南,甚至是一些示例代码即可。不妨看看learnxinyminutes.com。
记住,学习语法时需要亲手编写代码,不要只是复制粘贴。使用exercism.io练习新语言,那里有导师可以免费帮你审查代码并提供建议,非常棒。
**#3 使用新语言编写更多代码**
好了,现在是时候用新语言开始一个项目了,同时也要掌握相关的生态系统、工具或库。你可以从简单的项目入手,比如猜数字游戏、简单的书店或待办事项应用。GitHub 上有很多类似的项目。
#4 深入了解语言实现细节
并非所有语言都需要这样做。正如我在《如何成为一名程序员》一书中提到的,有抱负的程序员会对所用语言的细节和实现方式感兴趣。有时,程序出现错误甚至是因为我们对语言实现缺乏了解。
那么,我应该先从哪一个开始呢?
好了,我们终于要回答这个问题了。这取决于很多因素,简单的原则是:
1:您有特定语言的导师吗?还是您需要在课堂上学习特定语言?
如果老师告诉你练习需要学习C语言,那就很简单。好吧,C语言是你的第一门编程语言,因为你有导师(老师)和同学的帮助,入门会更容易。
2:你的目标是什么?
这也很简单,如果你想开发Web应用程序,学习Javascript/Python/Ruby就可以了;如果你想开发游戏,C++是合适的选择;如果你的目标是处理数据,Python/R是很好的选择;如果你想创建一个Android应用程序,Java/Kotlin是你的选择。
只需选择你所选领域中最常用的语言即可。向经验丰富的开发人员咨询。
3:你想申请一份需要特定语言技能的工作吗?
嗯,你应该按照职位描述来做,现在就好好学习一下。
不要在选择第一门编程语言上花费太多时间。尽快上手,积累更多经验后,如果你不喜欢这门语言或者你的问题领域发生变化,转到另一门语言并不难。
那么,哪种语言最好呢?
图 10:来源:turnoff.us
这还取决于你的领域,每种语言都有其优缺点。没有一种语言适合所有任务。如果真的存在这样的语言,我们只需要学习它就行了,对吧?记住,没有万能灵药。
就我个人而言,我最喜欢的编程语言包括 C、Ruby、Lua 和 OCaml,用它们开发项目效率很高。但这可能不是你的菜,你应该尝试不同的语言,找到自己最喜欢的。
有人说,除非你至少掌握5种编程语言,否则不要认为自己是一名真正的程序员。
图 11:K.lee 维基媒体
正如我上面详细阐述的那样,你不应该专注于学习越来越多的语言,而应该尝试学习更多的语言概念和设计原则。
如果你在日常工作中一直使用过程式编程语言,为什么不学习一种面向对象的编程语言呢?如果你一直使用动态类型的语言,为什么不学习一种静态类型的语言呢?
以上就是我选择下一门编程语言的建议。
文章来源:https://dev.to/snj/how-to-learn-all-programming-languages-yes-all-46ec










