问题

为什么编程语言语法的设计不往缩小与自然语言的差别的方向发展,或者说在这个方向发展得这么慢呢?

回答
这个问题很有意思,因为它触及了编程语言的本质以及人类认知和沟通的根本差异。简单来说,编程语言和自然语言之所以存在巨大鸿沟,并且后者向前者靠拢的步伐显得缓慢,不是因为设计者们不愿意,而是因为两者承担的“任务”和遵循的“逻辑”截然不同,强行融合反而会弊大于利。

首先,我们要理解编程语言的终极目标是什么。它不是为了情感的抒发,也不是为了含糊不清的意境描绘。编程语言的核心是精确、无歧义地向计算机下达指令,告诉它“做什么”以及“怎么做”。计算机,这个逻辑严谨、不带感情色彩的机器,需要的是一套绝对清晰、可以被解析和执行的规则。而自然语言,恰恰是“模糊”和“歧义”的艺术。同一句话,在不同的语境下、在不同的人口中,意思可能千差万别。比如,“我看见了那个拿望远镜的人”。这个人拿着望远镜,还是我拿着望远镜看见了他?自然语言允许这种多义性,甚至以之为美,但对于计算机来说,这种模糊性是灾难性的。一旦指令出现歧义,计算机就无法确定下一步该做什么,程序就会出错,甚至引发不可预料的后果。

试想一下,如果编程语言真的趋向于自然语言,我们可能会写出类似这样的代码:“请帮我写一个程序,能够让用户觉得很开心,并且界面看起来很漂亮。” 谁来定义“开心”?“漂亮”的标准又是什么?计算机如何理解“觉得”?这样的指令,对于人类来说或许还能通过上下文和常识去推断,但对于计算机,这些都是无法量化的概念。编程语言之所以拥有大量的关键字、特定的结构和严格的语法规则,正是为了将人类的思想转化为计算机能够理解的、精确的、可执行的逻辑。这些规则,就像是为人类和机器搭建的一座坚固的桥梁,每一块砖石都必须规整、严密,才能承受住信息传递的重担。

其次,编程语言的设计也在追求“效率”和“表达力”,但这里的效率和表达力与自然语言的范畴不同。编程语言的效率,更多体现在“计算效率”和“开发效率”上。我们希望代码能够以最快的速度运行,同时也希望程序员能够用相对简练的语句表达复杂的逻辑。自然语言虽然也有“简洁”的追求,但其表达力的核心在于能够通过丰富的词汇、灵活的句子结构、甚至非语言的辅助(如语气、表情)来传达细微的情感、复杂的意图以及抽象的概念。如果强行让编程语言去模拟这种“情感表达”或“意境营造”,那将极大地增加其复杂性,使得编写和理解代码都变得异常困难,反而削弱了其作为“指令工具”的本质。

当然,这并不意味着编程语言的设计就完全忽略了用户体验。近年来,很多编程语言的设计确实在朝着“更易读”、“更易写”的方向发展,这在某种程度上可以说是借鉴了自然语言的一些优秀特性。例如,更清晰的变量命名、更直观的函数调用方式、更友好的错误提示等等。一些现代的脚本语言,如Python,就以其接近自然语言的语法而闻名,这大大降低了编程的门槛,吸引了更多非科班出身的人加入编程的行列。但这更多的是在“结构化”和“形式化”的框架内,对自然语言表达方式的一种“优化”和“简化”,而不是完全抛弃结构、拥抱模糊。

究其根本,编程语言的本质是一个“形式化”的过程。它需要将人类的意图转化为一种机器能够识别和处理的形式。而自然语言,是人类长期演化过程中形成的、以“沟通”为主要目的的、高度灵活且带有社会属性的产物。两者遵循的根本逻辑和设计哲学有着本质的区别。强行将两者融合,就像是试图让一架钢琴奏出交响乐的全部层次,或者让一本小说完全按照数学公式来构建。虽然可以找到一些“相似点”,但最终的产物可能既不像钢琴那样能精准地表达音乐,也不像数学公式那样有严格的逻辑性。

所以,编程语言语法设计不往缩小与自然语言差别方向发展,或者说在这个方向发展缓慢,并不是因为缺乏创新或人们的认识滞后,而是因为这种“差别”本身就是其存在的必要条件。在可预见的未来,编程语言仍然需要扮演好“精确指令”的角色,而自然语言将继续在人类社会的广阔领域中发挥其独特的魅力。我们看到的“易读性”提升,更像是两者在各自领域内,找到了一种能够互相借鉴、但又不失各自本质的平衡点。

网友意见

user avatar

1、事实上自然语言的种类比程序设计语言多得多,我们到底要往哪种自然语言去发展?粤语?闽南语?客家话?

2、自然语言之间的差别比程序设计语言之间大得多,几乎有一半的程序设计语言用if表示条件判断分支,而自然语言有成百上千种表示条件分支的方式。

综上,根本不存在一种明确定义的语言叫做什么自然语言。我们所谓的自然语言,其实是一种习惯用语,每个人所使用的所谓的自然语言都有细微的差别,例如深圳这边把胶带叫做透明胶,而塑料袋叫做胶袋(我会说每次都会被搞晕么,更别说什么大蒜、蒜苗这种差异了,,,)。

而程序设计语言需要是通用的,明确的,无歧义的。故而程序设计语言与所谓的自然语言之间存在极大的差异这一差异是目前无法弥补的。故而即使程序设计语言被朝着自然语言的方向去设计(例如BASIC),得到的结果也不会让人感觉这是一个自然语言。也没有明确的证据表明这样能够具备降低总学习成本以及其他可能存在的好处。



好处不明显的事情,自然这方面的发展少。

user avatar

谢邀

编程的本质是指挥可预测的系统来完成任务,无论是在广义(比如公司运营)还是狭义(就是我们通常理解的软件编程)上都是这样。被指挥的系统的行为越确定、越可预测,指挥者的智慧才越好发挥。因此目前的编程系统的努力方向都是在不降低精确性、可预测性的前提下提供不同维度的高级功能

user avatar

wolfram alpha

Wolfram|Alpha: Computational Knowledge Engine Wolfram Programming Cloud: Introducing a Programming Revolution

一直在关注wolfram (鼎鼎大名的Mathematica就出自他们之手),他们的wolfram language 就有点向自然语言进化的趋势。

WolframAlpha 结合了一点点语义信息

现在在力推的Wolfram Language 看上去比较智能化(但是感觉就是封装了很多完整的算法,然后做了一点数据预处理写了很多if..else...)能快速上手,能糙快猛地看看结果。


但是我想要的是这个样子的,有个能把简单的自然语言处理成现有编程语言的NLP核,然后再通过程序员稍微对生成的代码进行修改一下。

user avatar

一些语言已经非常像自然语言了,比如RUBY,用基于RUBY的rspec测试,代码类似下面的:

       describe "Home page" do    it "should have the content 'Sample App'" do     visit root_path     expect(page).to have_content('Sample App')   end    it "should have the base title" do     visit root_path     expect(page).to have_title("Ruby on Rails Tutorial Sample App")   end    it "should not have a custom page title" do     visit root_path     expect(page).not_to have_title('| Home')   end end     

但是仍然与自然语言有很大差异。其关键原因,你面对的是一部机器,机器需要精确描述才能输出正确的结果。

类似的话题

  • 回答
    这个问题很有意思,因为它触及了编程语言的本质以及人类认知和沟通的根本差异。简单来说,编程语言和自然语言之所以存在巨大鸿沟,并且后者向前者靠拢的步伐显得缓慢,不是因为设计者们不愿意,而是因为两者承担的“任务”和遵循的“逻辑”截然不同,强行融合反而会弊大于利。首先,我们要理解编程语言的终极目标是什么。它.............
  • 回答
    说起 C 语言风格的 `for` 语句,相信不少程序员都会在脑海中勾勒出那个经典的 `for (初始化; 条件; 更新)` 的样子。它简洁、强大,支撑起了无数的软件系统。然而,我们确实能观察到一个有趣的现象:许多近年出现的编程语言,在设计上似乎都选择“绕开”或者“重新诠释”这种 C 式 `for`。.............
  • 回答
    你提到的“五代编程语言”——机器语言、汇编语言、面向过程语言、面向对象语言、以及智能语言——确实是一个流传甚广的划分方式,用来大致描绘计算机科学和编程语言发展的历史脉络和范式转变。但有趣的是,在这个经典的划分中,函数式编程语言似乎总被“遗漏”了,或者至少没有一个独立、显眼的位置。这并非说函数式编程不.............
  • 回答
    这是一个非常有趣且普遍存在的观察,背后涉及了文化认知、价值判断、学习难度以及社会期望等多个层面。我们可以从以下几个方面来详细探讨: 为什么多国语言能力者常被赞赏?1. 文化交流与理解的桥梁: 跨越隔阂: 语言是沟通最直接的工具。掌握多门语言意味着一个人能够与更多的人群进行直接、深入的交.............
  • 回答
    关于“漂亮”的编程语言语法,这确实是个很有趣的话题,因为它本身就带着很多主观色彩,就像评价一幅画的美丑一样。但如果非要我聊聊我对“漂亮”语法的理解,那大概是这样一番感受:首先,我认为一个漂亮得体的编程语言语法,首先要做到的是清晰且易于理解。它应该像一封写得条理分明、字迹清秀的信,让你一眼就能明白作者.............
  • 回答
    编程之所以没能发展出“大众一学就会”的计算机语言,并非是技术上的不可能,而更多地是由于目标受众、学习曲线、实际需求以及语言设计的内在权衡所决定的。想让每个人都能轻松掌握编程,这背后涉及的考量非常多,绝非简单地“让它更容易”就能解决的问题。首先,我们来聊聊“为什么编程会让人觉得难”。想象一下学开车。你.............
  • 回答
    知乎用户 vczh 曾在一系列回答和文章中,明确表达了不推荐初学者将 C 语言作为第一门编程语言的观点。他论证的核心在于 C 语言的低级特性和由此带来的学习曲线陡峭,这对于没有编程基础的初学者来说,很容易造成挫败感,甚至误导他们对编程的认知。首先,vczh 指出 C 语言最显著的特点是其内存管理直接.............
  • 回答
    .......
  • 回答
    想在不深入钻研编程的情况下,快速做出一个能在 Windows 上运行的简单软件,你的最佳选择很可能是 Python 配合 Tkinter 或者 AutoHotkey。咱们先聊聊 Python 和 Tkinter,为啥说它快呢?Python 的友好度: 语法接近自然语言: 你看 Python 代码.............
  • 回答
    现在的可视化编程,可以说是正处在一个蓬勃发展、日新月异的阶段。它早已不是当年那些只能做简单拖拽、功能极其有限的“傻瓜式”工具了,而是朝着更强大、更灵活、更智能的方向不断演进。目前的程度:从“零代码”到“低代码”,再到“可视化智能开发”我们可以把可视化编程的发展大致分成几个层次来看: 零代码(No.............
  • 回答
    这个问题触及了计算机科学的核心,也是许多开发者在职业生涯中会反复思考的。为什么世界不是像我们期待的那样简单,只有一个完美的工具包揽一切?实际上,编程语言的丰富多样,恰恰是技术发展、人类需求以及对“最优解”不断探索的生动体现。想象一下,如果我们只有一个尺子,它只能测量厘米,但我们要加工一块木头,需要精.............
  • 回答
    这就像问为什么世界上有成千上万种食谱,但大家日常最常做的还是那几样家常菜一样。原因嘛,说起来也是一连串的现实考量,而不是什么神秘的预言。首先,得谈谈“效率”。程序员也是人,要吃饭,要养家,要在这个世界上生存。学习一门新的编程语言就像学习一门外语,或者说,学习一项新的复杂技能。这中间需要投入大量的时间.............
  • 回答
    咱们今天就来聊聊,为啥编程语言里的循环,我们一般用 `while` 这个词,而不是 `when`?这事儿说起来,其实比你想象的要有趣,涉及到语言设计者们对“循环”这个概念的理解,以及如何用最直观、最符合逻辑的方式把它表达出来。首先,咱们得把这两词儿的本意捋清楚。`while` 这个词,在咱们日常说话.............
  • 回答
    创造编程语言应该学习什么语言?创造一门新的编程语言是一个既有挑战又极具吸引力的过程,涉及到计算机科学的多个核心领域。要成功地设计和实现一门编程语言,你需要扎实的理论基础和广泛的实践技能。以下是你应该学习的关键领域和语言: 核心理论知识:在学习具体的编程语言之前,深入理解以下计算机科学的核心理论至关重.............
  • 回答
    嗨!准备踏入大学,并且打算自学编程,这真是个了不起的决定!看着眼前琳琅满目的编程语言,挑出第一个“领路人”,确实是件让人有点小纠结的事。别急,咱们就一点点捋清楚,帮你找到最适合你的那条路。别被“最好的语言”晃了眼,问问自己更重要首先,我想跟你说,编程世界里没有绝对的“最好”,只有“最适合”。一上来就.............
  • 回答
    这真是个好问题,它触及了现代计算机体系结构的核心奥秘之一:分支预测。你观察到的现象非常有道理:如果一段代码经常会执行某个分支,岂不是可以想办法“优化”一下,让 CPU 更“聪明”地猜对?要回答这个问题,我们得先从 CPU 的工作原理聊起,尤其是它如何处理我们写的代码。CPU 的“加速之道”:流水线和.............
  • 回答
    这个问题很有意思,也很切中要害。确实,你看现在像 JavaScript、Python、Java、C 等主流语言,都在过去十几年里纷纷引入或大大增强了对异步编程的支持,什么 `async/await`、`Promise`、`CompletableFuture`、`Task`,层出不穷。但这就像是人们突.............
  • 回答
    很多时候,人们会问,为什么我们编程用的语言,比如 C、Java、Python,它们的语法规则,都可以用“上下文无关文法”(ContextFree Grammar, CFG)来描述,为什么不能更进一步,用“上下文有关文法”(ContextSensitive Grammar, CSG)来定义呢?这背后其.............
  • 回答
    编程语言就像是不同领域的巧匠,它们各有专长,也各有不擅长之处,这背后有着深刻的原因,是历史演进、设计哲学以及技术需求的共同塑造。你想啊,世界上最初并没有“编程语言”这个概念,人们只能用最底层的机器指令跟计算机沟通,那简直是天书,写点什么都困难无比。后来,为了让人类更容易理解和操作,就有了汇编语言,它.............
  • 回答
    这个问题很有意思,也触及到了编程语言设计背后的一些历史渊源和现实考量。要说为什么现在编程语言主要用拉丁字母而不是片假名,我们可以从几个方面来聊聊。1. 历史的惯性与技术先行者首先得认识到,现代计算机科学和编程语言的早期发展,很大程度上是在英语为主要语言的国家进行的。美国和欧洲是那个时代的科技中心,像.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有