在过去的几年里,我一直在构建Boot.dev作为一个副项目,最近有很多新生问同样的问题:
“为什么你们的计算机科学课程要求我学习不止一种编程语言?”
似乎有不少学生加入这个平台,认为他们宁愿“完全掌握一门语言”,也不愿“分心”。虽然我计划在应用程序本身中更好地解释这一点,但我想写这篇博文来深入解释为什么我们让你在我们的 CS 课程中学习多种语言。
为了让您了解我的出发点,让我解释一下 Boot.dev 是什么,以及它作为教育平台的目标是什么。
Boot.dev 是浏览器中包含电池的计算机科学课程。对于学习编码的最佳方式,我们有一些强烈的意见。例如:
如果您查看我们在 Github 上的公共路线图中计划的完整 CS 课程,您会发现这基本上是不可能的。有些概念与特定技术紧密耦合,因此尝试以同样的方式教授它们是没有意义的。让我们看几个简单的例子。
简而言之,我们有两个相互竞争的目标:
在我的大学传统CS学位课程中,我使用了 12 种以上的编程语言。我认为这太多了。我不想为了教语言而教语言。这确实是一个优化问题,我们希望引入尽可能少的语言,同时有效地教授我们想要教授的每一个概念。我相信Boot.dev的完整课程总共只需要使用大约 6 种语言,并且大部分程序可以只使用 JavaScript、Python 和 Go。
学习一些我们尚未讨论过的不同编程语言还有一个额外的好处。通过让您接触不同的语言,您将开始看到各种编程方法之间的一些优点、缺点、相似之处和不同之处。
如果你只写过一种编程语言,很容易假设某种做事方式是“最好的方式”、“正确的方式”,甚至可能是“唯一的方式”。
例如,JavaScript 和 Go 对错误流有截然不同的方法:
// JavaScript try { doSomethingDangerous() } catch (err){ console.log(err) } // Go err := doSomethingDangerous() if err != nil { fmt.Println(err) }
通过熟悉多种语言,我坚信您将对每种技术以及何时可能需要使用不同的工具有更深入的了解。
就个人而言,我不这么认为。我确实认为,如果您从学习之旅开始直到您的第一份编码工作都只专注于一种编程语言,那么您实际上会比花一些时间拓宽视野更糟糕。
有些人认为“学习编程”就是“学习编程语言”。他们认为,如果你学习 Python,然后想学习 JavaScript,那么你将从 0 开始。
这与事实相去甚远。
学习第二种编程语言将花费学习第一种编程语言所需时间的 1/5,因为您学到的大约 80% 的概念将适用于两种语言。一旦您使用了 3 或 4 种不同的编码语言,您就可以查看几乎任何语言的代码并理解它的含义。您可能会发现自己偶尔需要查找语法,但无论如何每个人都会这样做。
如果您浏览过课程,您可能已经注意到我们已经确定了 3 种语言来教授大部分内容:
我们将尽可能多地使用这 3 种语言,仅根据主题要求混合其他技术。例如,当我们谈论关系数据库时使用 SQL。
让我解释一下为什么我们特别选择这三个。
这些天你真的无法摆脱 JavaScript。如果不首先了解后端存在的原因,就很难了解后端编程(这是我们大多数学生感兴趣的)。后端只存在于为前端提供动力,因此我们需要先教您一些前端基础知识是有道理的。如果你要在 Web 上构建一个前端,它几乎肯定会使用 JavaScript,所以我们不得不使用这个。
从句法上讲,Python 不会妨碍您。算法和数据结构是学生经常发现更难掌握的概念,因此选择一种让学生尽可能专注于逻辑的语言对我们来说是有意义的。 Python 在很多方面也读起来像英语,这再次使得一目了然地了解 Python 中的算法在做什么变得更容易。此外,我们在课程结束时有 AI 和 ML 内容,所以这是一个两只鸟在石头上的情况,我们可以在那个时候重新学习 Python,而我们的学生不需要学习额外的语言。
我们的 CS 学位侧重于后端编程,我个人在将 Go 作为后端语言方面取得了巨大的成功。与我考虑过的其他一些选择相比,Go 将使教授并发、编译器和分布式系统等内容变得更容易。我确实认为我们最终可能会有一门在手动内存管理方面达到更低水平的 Rust 课程,但我还没有决定。
直接联系我的最佳方式是加入Boot.dev Discord 服务器。你也可以在Twitter 上@我。让我知道您对我们的方法的看法!
也在这里发布https://blog.boot.dev/education/learn-multiple-programming-languages/