理解编码
首先,让我们扪心自问一下代码的重要性。代码对我们开发人员的日常生活到底有多重要?为此,让我们回到过去。
一点历史
计算机编程实际上就是一个晶体管,电流通过或不通过晶体管。因此,我们最终得到的是一个二进制系统,如果电流没有通过晶体管,其值为 0;如果电流通过,其值为 1。如果将晶体管的数量乘以几十亿,就得到了今天的处理器。这套系统运行得非常好,我们的世界几十年来一直受这套系统支配。然而,它有一个明显的局限性:人类不可能只用 0 和 1 来理解和创建应用程序。因此,我们必须找到一种新的方法来编写这些程序,使它们成为人类可以理解和管理的程序。
于是,我们开始使用第一种人类可读的源代码:汇编语言(通常缩写为 ASM)。尽管汇编语言是一种非常低级的语言(这意味着它非常接近机器语言,即二进制语言),但这种语言在 20 世纪 40 年代末得到了普及,最终使人们可以使用一种与我们的自然语言大致相似的语言来读取文件。一物降一物,高级语言应运而生,其中最著名的是 C 语言,它的第一个正式版本诞生于 1972 年。其原理很简单:使用对人类来说越来越自然的语言编写计算机程序。然后,一种工具会自动将这种高级语言翻译成机器可以解释的汇编语言和二进制语言。
C 语言就是一个很好的例子,说明了编程语言的实用性和主要用途。事实上,这种由丹尼斯-里奇(Dennis Ritchie)和布莱恩-克尼根(Brian Kernighan)创造的语言最初是用来开发 Unix 操作系统的。问题的关键在于,创造一种像 C 语言这样的编程语言来编写 Unix 操作系统,比使用当时的工具—即汇编程序—来编写操作系统要容易得多(即使 Unix 操作系统的某些部分是用汇编程序编写的,但绝大多数源代码都是用 C 语言编写的)。接下来,我们将探讨编程语言和代码的实际用途。
代码的目的
这就是一切的意义所在。编程语言的存在是为了帮助我们尽可能轻松地转录我们的想法,并且这些想法可以被机器解读。但编程语言并不局限于将我们的想法转录给机器—它们的目标还在于,其它人可以通过阅读我们的代码来理解我们的想法,而不需要我们。编程语言是一种微妙的混合体,既具有被人类理解的潜力,又为我们提供了与机器交流的余地,以及充分挖掘机器潜力的可能性。当我们谈论高级语言和低级语言时,这就是编程语言级别的定义:光标的位置在 "易于使用和理解" 与 "语言的性能和可能性" 之间。这两者之间必须有所取舍。在启动一个新项目时,选择最合适的编程语言时要考虑到这些因素。PHP 中捆绑的所有工具就是一个很好的例子:超文本预处理器(PHP) 语言可以处理 超文本传输协议(HTTP) 请求和响应,因此是创建网络应用程序的绝佳选择。你需要的大多数东西都已经存在,开箱即用,无需安装任何东西即可处理最基本和一些相当高级的网络应用程序功能。
PHP 是用 C 语言编写的,它是一种比 C 语言更高级的语言。因此,它更容易理解,也更宽松,但与 C 语言相比,它的扩展性能较差,可能性也较少。举例来说,如果你需要用 PHP 编写一些汇编代码来与一些定制硬件进行通信,情况很简单:你不能这样做。你必须编写一个 PHP 扩展,它将用 C 语言编写(然后允许你用汇编语言编写源代码部分)。当然,这是一种超高级的情况,但你已经明白了。
让我们进一步比较一下 PHP 和超文本标记语言(HTML)。虽然 HTML 不是编程语言,而是一种描述语言,但它与 PHP 仍有相似之处:两种语言都用来表达人类的想法,并能被机器解释。这一点很简单:对于不懂技术和编程语言的人来说,你肯定能解释 HTML 文件的内容、它所代表的含义、语义和目的。而在 PHP 中,情况就不同了。事实上,在文件拆分、类拆分、面向对象编程(OOP)和所有其它概念之间,你肯定要花费更多的时间才能让你的非技术对话者理解这一切的目的。不过,虽然 HTML 不允许 OOP,但它也不允许条件分支、写入文件、管理发送到服务器的请求等。因此,我们最终得到了一种人类更容易理解的语言,因为它非常接近我们的自然语言,但可能性要少得多。
尽管存在这些差异,但我们必须牢记以下一点—语言的主要目标是完全相同的:让最多的人和计算机都能理解。编写代码意味着让人理解。这就是表达思想。就像在日常生活中暴露自己的想法一样,你的想法越简单、越直接,人们就越能理解你。