由于涉足的时间不长,你并不知道早期的编程是怎么一回事。那时,程序员面对的是一个到处是特殊数字的世界。这些数对于那些知道怎样使用它们的程序员来说有特殊的用途。例如,就像我一样,很多VB程序员经常使用13和10,它们是ASCII码中回车换行的标志。将他们放入一个字符串中,由于ASCII的定义,你会在字符串中得到一个空行。这在输出大量文字文件时是一个有用的技巧。
当然,还有其他的特殊数字,比如-1,他表示不可动摇地正确。也有其他数字有更短暂和特殊的作用,这些作用经常随着环境的改变而改变。举个例子,如果你的文档每页有37行,那数字37就特别有用。而在其他情况下,37就如同哈利波特中不会魔法的麻瓜(muggle)一样只是一个普通的数字。实际上,这些数字具有特殊性一部分是因为在你使用到它们之前不能够确定它们到底有什么作用。
后来,由于人们都希望程序代码更易于理解,编译器和工具的供应商于是推出了编程语言的新版本,从而把特殊数据作用减到最小。这些新版本包括了很多常量,它们的功能与大多数程序员以前所依靠的特殊数字相同。
如果没记错,对于我来说,这种变化是在VB4发行的时候到来的,老朋友13和10被vbCrLf所取代。虽然对他们的离去我有点伤心,但我还是加加入了反特殊数字文档的人群,它们主张少用特殊数字会使代码更易被理解。晚些时候,我微软的亲戚向我介绍了枚举类型,即现在的enums,它能够完全取代特殊数字,并减轻了我一半的文档工作。
当然,还有一些人希望继续使用特殊数字来工作。其中很多都属于使用Win32 API(被称为“黑色艺术”)编程的程序员。他们在自己的代码中任意地书写那些对程序至关重要特殊数字。主要的是0和1,表示激动人心的成功和决定性的失败。
很快,特殊数字的使用和文档化之间发生了摩擦。终于,“伟大的枚举战争”爆发了,文档化的支持者力图强迫喜欢使用特殊数字的人改变他们的风格,承认文档化代码的重要。许多醒悟的程序员转而做管理工作,而另一些则走向了汇编语言,据说现在还能够看到他们的身影。
现在,使用特殊数字的程序员已经不多见了——至少没有多少人赞成那样做,因为害怕自食其果。偶尔,年轻的,没有经过训练的程序员在职业生涯的早期会玩弄一下,而年纪大些的程序员在压抑了很久以后,也许会在他们的代码中点缀一些特殊数字。.NET Framework为程序员可能用到的每个值都提供了对应的枚举,因此特殊数字已经成为了一门逝去的艺术。
仍然有流浪的冒险家和顾问会告诉你关于特殊数字国度的故事,那儿特殊数字以及大量不易理解的源代码依然存在。大多数人仅仅把这些故事当作传说,而我又使却宁愿相信……