发布于 2026-01-06 2 阅读
0

为什么编程语言很难

为什么编程语言很难

多年前,当我第一次尝试学习Python时,在摸索了不到五分钟后,我就遇到了以下错误信息之一:

SyntaxError: invalid syntax
Enter fullscreen mode Exit fullscreen mode

听起来就像 Python 在告诉我:你做了件坏事,你应该感到羞愧。

我确实感到很沮丧,部分原因是我根本不知道 SyntaxError 是什么意思,“无效语法”这个短语也丝毫没有帮助我理解任何事情。

如今,我对编程语言和解析器的工作原理了解得更多了。但错误信息仍然很糟糕。这是糟糕的用户体验,或者更准确地说:糟糕的开发者体验。

如果你是第一次学习编程,那么这个错误会给你带来两方面的糟糕体验:

  1. 首先,它没有告诉你刚才发生了什么。是我做错了什么吗?是我的程序做错了什么吗?还是Python做错了什么?
  2. 其次,它没有说明错误的原因可能是什么,也没有告诉我该如何修复它。

事实上,语法错误时有发生(即使拥有多年的经验),开发人员的大部分时间都花在修复错误和解决各种编码问题上。

但作为初学者,你并不知道这一点。

对于初学者来说,这个错误听起来好像很严重,更重要的是,听起来好像是你做错了什么

问题在于:编程语言是由程序员创建的。

编程语言是由程序员创建,供程序员使用的。

当你想让编程更容易上手、更容易学习时,这就成了一个问题。这是目标受众不匹配的问题。

除此之外,编程语言的创建方式也存在局限性。我们最终会看到类似“语法无效”这样的错误信息,这不仅仅是因为有人这样编写了错误信息,而是因为语言的语法和解析器的工作方式所致。也许解析器实际上无法访问导致语法错误的确切语法规则,因为它的编码方式就是如此。因此,出于技术原因,错误信息无法提供更有用的信息。

很有可能,在 Guido 编写第一个版本的 Python 解析器时,这并非他的首要任务之一。他当时编写这个解析器是为了自己和其他程序员使用。

毕竟,Python 在 20 世纪 90 年代初首次发布时,就比当时大多数其他语言简单得多,也更容易学习。(我认为即使在今天,情况可能仍然如此。)

次要问题:那些设计得易于学习的编程语言往往毫无用处。

有很多编程语言的设计初衷是为了让初学者更容易上手。但其中真正成功或流行的语言却寥寥无几,问题在于你无法用它们完成任何严肃的工作。

它们或许实现了让人们更容易入门编程的目标。但很多时候,它们未能阐明编程能够解决哪些问题,以及它如何融入更宏大的图景。

所以从某种意义上说,他们在实现目标之前实际上是在自我破坏。

如果你想向人们展示编程的价值,并帮助他们理解如何运用编程,你需要向他们展示如何解决实际问题。否则,大多数情况下,编程最终看起来就像个玩具。

HyperCard 和 Excel

HyperCard 是 20 世纪 80 年代末出现的众多应用程序之一,它对大量的计算机用户产生了影响,我敢肯定它激励了很多人成为程序员。

HyperCard 内置的编程语言 HyperTalk 并不算特别出色。但它的目标用户是非程序员,同时它又具备解决实际问题的能力。

许多原本认为自己永远无法编写计算机程序的人开始使用 HyperCard 来完成各种自动化和原型设计任务,这甚至令其发明者本人都感到惊讶。(维基百科)

Excel 是另一款对非程序员普及编程起到巨大作用的应用程序。

仅凭公式和单元格,Excel 的模型就实现了半代码半图形化的特点。它足够通用,可以解决各种各样的问题,但又始终保持着一个最佳平衡点:它专注于那些可以用电子表格表达的问题。这正是 Excel 如此强大的原因:它并不试图包揽一切。它本质上就是一个电子表格。

将工具设计得过于可定制,最终反而变成了一种设计糟糕的编程语言。

在软件开发中,我们总是面临着这样的权衡:一方面要编写能够解决特定问题的代码,另一方面又要编写能够让用户拥有足够的自定义能力来解决各种各样的问题的代码。

这是工具专用性问题。

Excel 和 HyperCard 都是工具,而非编程语言。但它们都朝着偏离具体性的方向发展,试图为所有人解决所有问题。

软件中最可定制的形式是什么?它本身就是编程语言。因此,如果你把这些工具的可定制性发挥到极致,它们就会变成设计糟糕的编程语言。

HyperCard如今为何销声匿迹?我认为是因为它过于通用,无法完美解决任何特定问题。

虽然这确实赋予了非程序员很大的权力,但最终证明,软件的经济效益决定了,为特定问题构建特定工具通常更有价值。

程序员解决自己的问题

如果放任程序员自由发挥,他们自然会开发工具来简化自己的工作,这是很正常的。

有时程序员会表现出某种精英主义倾向,他们设置准入门槛,而不是让新手更容易上手。

一旦你克服了最初的障碍,学会了如何编写代码,你就会开始忘记刚开始学习时的感觉。

人们很容易忘记,当你第一次尝试学习编程语言的基本语法时,那种无助的感觉,以及当时似乎一切都与你作对。

每个人都是从新手开始的。

那么,我们该如何改善现状呢?

抛开抱怨不谈,以下是一些切实可行的建议。

  • 如果你是一位经验丰富的程序员,请分享你第一次接触编程的故事,以此表明我们所有人最初都是一头雾水、畏首畏尾,直到最终掌握了编程技巧。
  • 如果你是初学者,请尽量体谅编程语言的开发者,不要让他们的错误信息晦涩难懂、毫无帮助。创建一门编程语言需要耗费大量精力,如何既能让初学者轻松上手,又能使其有效解决实际问题,并非易事。
  • 如果你是编程新手,也可以通过分享经验和反馈来帮助编程语言社区。很多时候,经验丰富的程序员需要被提醒,新手看待事物的方式与他们不同,他们有时需要认清现实。
  • 即使你用那些对初学者友好的编程语言做不出什么有用的东西,也请不要责怪它们。它们仍然是值得学习的工具,如果它们能激发人们对编程的兴趣,那就已经是我们所能期望的最好结果了。

最后,我再补充一点。

我之前称这些语言没用时语气过于苛刻了,但我指的是它们在现实世界中所谓的“商业”问题上的表现。

如果你能用某个工具做出很酷或很有创意的东西,然后把这些作品展示出来,那么这个工具对人类来说就百分之百有用且有价值。让我们多创造一些这样的工具吧。

文章来源:https://dev.to/marek/why-programming-languages-are-hard-19ch