编程和语言之我见
因此,程序就是为达到某个目标而需要执行的步骤;而如何把这些步骤有意义地组合起来,这个过程就是“编程”。
用这个定义去匹配,会发现周边很多事情都是编程。比如编写文档随时要保存,我需要在记事本里执行:点击菜单“文件(F)”-点击菜单项“保存(S)”。这样就达到了保存文档的目标,但如果我们将这两个步骤执行顺序颠倒,则执行结果就无意义,在C语言里你或许会得到一个“Runtime Error”的提示(关于此话题的更多讨论,欢迎下载我在“子清行”中的《编程村一日游》)。
程序设计(programming)好了,如果我们需要委托其他人或计算机帮忙执行,我们就需要将这些步骤用对方能理解的语言描述出来(coding)。比如上面报销的例子,财务室老师就是用自然语言向我描述。
我最近对语言(主要是编程语言)很感兴趣,接触了一点DSL(领域特定语言),觉得它让软件和语言的边界变得模糊,使得语言的概念变得更加宽泛,甚至可以认为所有的软件都是一门语言。
先来简单地介绍一下DSL,它是 Domain-specific language 的缩写。顾名思义,就是为问题所在的特定领域设计一门通俗易懂的“方言”,使得解决该领域的问题变得更形象、更自然(比如 SQL 语言就是访问数据库这个特定领域的方言);语言是我们用来描述事物、传递思想的工具,不同的语言仅仅是对同一事物表述不同而已。比如中文管“0”叫“零”、英文里叫“zero”。
我们使用软件未曾不是如此?“用鼠标点击计算器上的按钮1、按钮+、按钮2、按钮=”与“echo 1+2 | bc”描述的都是“求1+2=”,只是前者是针对 GUI,后者用了 CLI。如此看来,我们在处理人机交互时很多时候都是在为用户设计一门特定的语言。如果设计的语言迎合用户的口味、符合用户的操作习惯,就称为用户体验做得很到位,否则将无人问津。
每每想到这里,我都会憧憬一下未来的编程:可能以后会流行使用语言的语言——“元语言”来编程,首先用这门元语言快速地开发出一套“方言”,然后使用该“方言”来解决某个特定问题。到那时,程序员和普通用户的区别也就不明显了,程序员之间交流的不再是“我开发了某某功能库,发给你用用?”而是“我写一套某某方言,你要不要耍耍?”^_^。
评论
发表评论