编程和语言之我见

关键字: 编程语言生态

我觉得“编程”的概念相当宽泛,程序早在计算机出现之前就存在。我们现在进机关办事,仍不时会听到“做事要按程序/规矩/规章制度来”。比如我们学生项目基金报销,要按先后顺序依次执行“填报销单、交团总支审核、院长助理签字、财务处复查”等步骤。而这些就是所谓的“程序”。因此,程序就是为达到某个目标而需要执行的步骤:而如何把这些步骤有意义地组合起来,这个过程就是“编程”。

用这个定义去匹配,会发现周边很多事情都是编程。比如编写文档随时要保存,我需要在记事本里执行:点击菜单“文件(F)”-点击菜单项“保存(S)”,这样就实现保存文档这一目标。但如果把这两个步骤执行顺序颠倒,则执行结果就无意义,在C语言里你或许会得到一个“Runtime Error”的提示(关于此话题的更多讨论,欢迎阅读《编程村一日游》)。程序设计(programming)完成之后,要委托其他人/计算机来执行,此时要将这些步骤用对方能理解的语言描述出来(coding)。比如上面报销的例子,财务室老师就是用自然语言向我描述。

我最近对语言(主要是编程语言)很感兴趣,接触了一点DSL(领域特定语言),觉得它让软件和语言的边界变得模糊,使得语言的概念变得更加宽泛,甚至可以认为所有的软件都是一门语言。

先来简单地介绍一下DSL,它是 Domain-specific language 的缩写。顾名思义,就是为问题所在的特定领域设计一门通俗易懂的“方言”,使得解决该领域的问题变得更形象、更自然(比如 SQL 语言就是访问数据库这个特定领域的方言);语言是我们用来描述事物、传递思想的工具,不同的语言仅仅是对同一事物表述不同而已。比如中文管“0”叫“零”、英文里叫“zero”。

我们使用软件何尝不是如此?“用鼠标点击计算器上的按钮1、按钮+、按钮2、按钮=”与“bc <<< 1+2”描述的都是“求1+2=”,只是前者是针对 GUI,后者用了 CLI。如此看来,我们在处理人机交互时很多时候都是在为用户设计一门特定的语言。如果设计的语言迎合用户的口味、符合用户的操作习惯,就称为用户体验做得很到位,否则将无人问津。

每每想到这里,我都会憧憬一下未来的编程:可能以后会流行使用语言的语言——“元语言”来编程,首先用这门元语言快速地开发出一套“方言”,然后使用该“方言”来解决某个特定问题。到那时,程序员和普通用户的区别也就不明显了,程序员之间交流的不再是“我开发了某某功能库,发给你用用?”而是“我写一套某某方言,你要不要耍耍?”^_^。

zzp-me[Thanks Ruby]编程和语言之我见