1994 – Win32 / C++ (这个例子要稍稍新一些)
打开一个命令行窗口然后运行这个程序后会得到这样的结果:
我的粒子流程序和曼德布洛特集
合程序肯定在找工作方面帮不上什么忙,所以我必须再找另外的办法。令人啼笑皆非的是,我的职业在开始时同计算机竟然没有丝毫的关系。刚开始我为一家保险公
司工作,工作内容是处理来自西班牙的电话索赔事务。情况就是这么个情况。在为一个薪水较低的工作接受面试时,我准备安心用这份微薄的薪水来户口,晚上再熬
夜搞PC编程,我偶然提到我会说西班牙语。他们叫来他们的双语业务代表来面试我,我通过了测试。就在一周之内我得到了一个薪水更高的职位,因为我在短短的
几个电话中学到了比我在整个高中几年里学到的还有多的西班牙语。
那时我还年轻,求胜心切。我们的级别是基于每天我们成功完成的索赔总数来计算的。我不想就因为我所使用的软件每隔一段时间就要崩溃而被甩在后面。我们使用的对我来说是一套全新的系统 —— AS/400 (现在叫做iSeries) —— 但是我还是想出了办法,学会了在索赔软件每次崩溃之后如何重启它。公司的IT部门很快明白了是怎么回事了,并把我叫到了一边。起初我担心我惹上麻烦了,但 是实际上他们向我提供了一个转入IT部门的机会。我又开始了我的第三次转折,工作内容基本上就是维护AS/400系统,为打印保险单和理赔表的大型打印机 换打印盒。
在这个工作中,换打印盒的过程占据了整个工作中的大部分时间。这是因为有些表格只用黑墨,而有些别的表格却还需要绿色或红色的墨。那些打印机里只能装一种 墨,所以在碰到不同类型的表格时,打印机就会提示我们去换上所需的墨。我认为这种做法太荒谬了,所以我花时间自学了RPG。我编写了一个程序,能够将打印 作业同墨的颜色匹配起来,然后对打印作业队列进行排序,把所有的黑色打印作业排到一起,然后是所有的绿色打印作业,等等。这样一来,原先8小时的工作就变 成只需2个小时就能完成,我就有更多的时间来学习RPG了。RPG最初的版本 —— RPG II和RPG III —— 还都非常原始,其最初的设计只是用来简单地模拟卡片打孔系统的方式来产生报表(其名字就是Report Generator的缩写,意思是报表产生器)。RPG和Fortran一样,都是位置性的语言。 1995 – RPG
I 'HELLO, WORLD' C HELO
C HELO DSPLY
C SETON LR
请注意每行的第一个字符表明的是各行的代码类型(实际上它还应该多占几列,但我故意省略了其中的一些空白处)。第一行定义了一个常量,然后第二号将该常量显示到屏幕上,最后第三行是一个让程序结束执行的指示符。
在开始运维工作后我又干了我的第二件大事。每次月底结算都需要花费大量的时间和精力。原先的系统是在一台Honeywell大型机上读取穿孔卡片。其中有
个COBOL程序从一个模拟穿孔卡片的文件中读取数据,然后输出到另外一个文件中,最后再把这个输出文件送入AS/400中进行处理。处理完成后,还需要
将各种结算数据对一下。由于舍入错误、不支持事务以及另外的一些问题,数据几乎每次都对不上,所以就需要对整个计算过程进行调查,找出是哪里处理差子,然
后再通过更新代码来修复错误。如果我们未能找出问题所在,我们还弄了一个“紧急开关”,在11点按下这个开关,就会读取输出数据然后调整结算数据来让账簿
平衡。虽然我并没有大量的COBOL编码经验,但我需要通过阅读Honeywell的COBOL代码来理解透彻它的工作过程,然后我才能够很好的处理掉发
生在AS/400 这边的问题。 1995 – COBOL
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WELCOME-MESSAGE PIC X(12).
PROCEDURE DIVISION.
PROGRAM-BEGIN.
MOVE "Hello World" TO WELCOME-MESSAGE.
DISPLAY WELCOME-MESSAGE.
PROGRAM-DONE.
STOP RUN.
没过多久,顶尖的RPG专家就来到我们公司,给我们上了3天的课程,这是因为最酷的事情发生在AS/400的世界中。不仅仅是AS/400正在转向64位
(大家都知道位数加倍后就会比原先好上一倍,对吧?)
,而且RPG语言也正在得到巨大的改进,版本IV比以为更多了融合了面向过程的特性以及一些面向对象的原则。这得多酷啊?我们扎入培训中后心里乐开了花,
因为睁大所有的老式RPG开发者都在为努力学习这种“新的编程风格”而挠头时,我心里的石头终于落地了,终于能够回到我用C和C++时更为熟悉的面向过程
的编程风格了,再也无需使用过去的那种刻板而受局限的基于指示符和列的RPG语言了。 很多开发者可能会因为某个特性而感到高兴,这些特性也的确让人刮目相看。语言要求指令开始于一个确定的列,输入在指令之前。这里局限性很大,你只有加载少 量的常量字符,或者你不得不把它指明为常量或者数据结构,并把它们读入。新语言则把关键字列移动到右边,就有更大的空间给”factor one“。这意味着我们现在可以用几行代码来写“Hello,World” 了。这种语言也是程序化的,所以你可以通过返回而不是在指示器中设置来中止一个程序。(尽管我记得正确的话,在主程序中返回就是设置封装的指示器) 1996 – RPG/ILE
C 'HELLO, WORLD' DSPLY
C RETURN
AS/400在操作系统中内置了一个叫做DB2数 据库。在很长一段时间内,该数据库只支持通过RPG或其它的软件同其直接交互,并不支持SQL语法。后来出了个专门的叫做SQL/400的软件包,但 DB2在底层就对SQL提供了支持。为此我还在1998年是发表了我的第一篇文章,写的就是关于如何在AS/400中如何自己接入对SQL的支持(Create an Interactive SQL Utility)。在SQL中实现“Hello, World”的方法可能会数不胜数,但最简单地要数这个了: 1998 – SQL SELECT 'HELLO, WORLD' AS HELLO
我要为打乱时间顺序道歉,但SQL似乎完全可以看作是我“主要的”或者“获得报酬的”工作的一部分。同时我一直都在疯狂玩着游戏,刚开始玩的是DOOM(这是第一个给我留下深刻印象的游戏,我竟然还花钱买了这个游戏的完整版),后来借着玩了DOOM II和HEXEN,最后玩得最High的要数Quake了。
如果你不熟悉第一人称射击游戏(FPS)的发展史,我还得告诉你,Quake还是一个改变了游戏历史的游戏。这个游戏为玩家提供了史上第一个“真正
的”3D游戏环境(之前的那些游戏都是用2D映射表来模拟出3D的地板和具有一定高度的天花板),通过对TCP/IP的支持彻底改变了死亡比赛的模式,
它采用了非常高级的编程技术,从而允许比以往任何时候都多的玩家在同一个地图中同时玩游戏。
Quake的可定制化程度也极高。虽然我在美工方面不怎么地,从来没弄明白怎么创建自己的模型或地图,但我直接扎近了编程来对它进行定制。Quake提供 了一种基于C的编程语言,名为QuakeC。这种语言能够编译为跨平台的字节码,而这种字节码可以在能够运行Quake的所有目标平台之上。很快我就编写 了一些改造性的程序,能够做到让玩家着火、让铁钉从墙上逼真地反弹回来等等类似的事情。在一个聊天室里,有个人说了一个点子让我编程实现一下,后来就因为 我编写的这个叫做“MidnightCTF”的功能而为大家所知。其实就是直接在现有的任何地图上将所有的等都关闭,但为每个玩家配备一个手电。 Quake是第一个支持真正的3D音效的游戏,这为游戏增添了一种有趣的可玩性。
甚至还有人从我的那些改造性的程序中拿出了一段代码,放到了“编程语言字典”中的QuakeC词条之下。下面这段用QuakeC编写的“Hello, World”代码实际上就是将一条广播消息发送给了当前游戏中的所有玩家。 |