仓库源文站点原文

https://zhuanlan.zhihu.com/p/25210915

至今为止的编程语言都与自然语言相去甚远, 感觉是因为历史原因和惯性思维. 如果反过来, 从自然语言出发, 渐进地增加对各种语法的支持, 应该可以减少学习代价和语言演化的成本.

随便一搜, 就发现十七年前已有了国人的研究: 自然语言和计算机编程语言的比较 (链接失效,原文为论文)

其中就说到了为使自然语言理解成为可能, 尝试对汉语语法进行规范. 个人认为, 这种自上而下的行为很难在保证汉语表达性和自由度的前提下, 进行大规模的推广. 从另一角度看, 假设这种规范能够实施, 这种可被计算机理解的自然语言子集就可以作为编程语言了. 但即使实现了, 在其他编程语言功能已完善的当下,这类规范很难推行, 因为业界很难有长远视野/资本. 随着市场接近于饱和, 急功近利的习惯将会愈发严重, 吃螃蟹的代价将越来越高.

回到头里, 一种可能的自下而上的演化方式是: 不对语法和用法进行任何限制和规范, 通过一个允许语法扩展和在歧义存在时人工选择语义的开发框架, 在逐渐完善自然语言分析的过程中, 演化出一套对通用编程常用和好用的自然语言子集.

接下来的问题是, 什么领域最适合于开展自然语言编程的实验. 现在看来, 是写测试和创建原型. 已经有Cucumber框架用一个很小的自然语言子集编写测试用例(Cucumber入门1 - 传统流程下的使用). 创建原型现在多数方案(Mockplus, gomockingbird, balsamiq等)都是用控件拖放的方式快速开发, 而加入交互还需要额外处理(虽然成本不大(失效)). 用自然语言编程直接生成原型的好处是, 可以直接从设计文档生成, 而省去了定制控件的人工成本.