期写程序,都是将代码打在穿孔纸带上,让计算机去读的。要让计算机读的纸带当然是连续的,这无需多讲。其实我也没有那样写过程序,真实的苦楚我也不知道。后来有了汇编语言,可以写一些代码了。这时的代码是写在文本文件里,然后交给一个编译器去编译,再由一个链接器去链接,这样就出来了程序。
第一个写汇编的人,可能写的是有名的“HelloWorld”程序,那个程序写在一个文件里就行了。所以后来就成了习惯,大家都把代码写到一个文件里。早期的汇编语言里,GOTO 语句是用得非常非常频繁的,将一个语句GOTO到另一个文本文件里去,既不现实也不方便。所以大家习以为常,便统统地把代码写到一个文件里。再后来出了高级语言,什么C呀,Pascal呀之类的。
既然大家已经形成习惯了,所以很自然地会把一个程序写到一个文件里。无论这个程序有多大,多少行代码,写到一个文件里多方便呀。
直到如今语言发展得更高级了。可是程序员的习惯还是难改,一旦得了机会,还是喜欢把代码写到一个文件里的。
好了,有人说我是想当然尔。En,这当然是有实据的。记得Delphi1.0版发布的时候,全世界一片叫好声。连“不支持双字节”这样的大问题,都不影响他在华语地区的推广。然而不久,爆出了一个大BUG!什么大BUG呢?Delphi1.0的编译器居然不支持超过64K的源代码文件!
这被Fans们一通好骂。直到我用Delphi2.0 时,一个从VB阵营转过来的程序员还跑过来问我这件事。好在Delphi2.0改了这个BUG,这让当时我的面子上好一阵风光。
64k的文件是什么概念呢?
1行代码大概(平均)是30字节,64k的源代码是2184行,如果代码风格好一点,再多一些空行的话,差不多也就是3000行上下。
也就是说,在Delphi1的时代(以及其后的很多很多时代),程序员把3000行代码写到一个文件里,是司空见惯的事了。如果你不让他这样写,还是会被痛骂的呢。
所以呢,按照这一部分人的逻辑,一百万行代码其实是可以写在一个文件里的。不单可以,而且编译器、编辑器等等也都必须要支持。这才是正统的软件开发。
勤快的愚公创造不了方法。这我已经说过了。对于要把“一百万行代码写到一个文件”,查找一个函数要在编辑器里按五千次 PageDown/PageUp 键的勤快人来说,是不能指望他们创造出“单元文件(Unit)”这样的开发方法来的。
然而单元文件毕竟还是出现了。这个世界上,有勤快人就必然有懒人,有懒人也就必然有懒人的懒方法。
有了单元文件,也就很快出现了一个新的概念:模块。
把一个大模块分成小模块,再把小模块分成更细的小小模块,一个模块对应于一个单元。于是我们可以开始分工作了,一部分人写这几个单元的代码,另一部分则写那几个。
很好,终于可以让源代码分散开来。结构化编程的时代终于开始了,新的方法取代了旧的方法,而这一切的功劳,是要归终于那个在按第5001次PageDown键时,突然崩溃的程序师。他发自良心地说:不能让这一切继续下去了,我一定要把下一行代码写到第二个文件里去。我发誓,我要在编译器里加入一个Unit关键字