控制 开始编程 第一次学以致用的乐趣
黄金时代的结束起因于一个问题:
“计算机能算数吗?”
那天我正在DOS里鼓捣,另一个家伙站在我旁边看我把文件移进拷出的,突然冒出了这么一句话。
看起来最简单的问题常常也是最难解决的问题,按道理计算机的名字里即然有“计算”两个字,那么他的最基本的功能似乎也是计算,可是回想一下所知道的所有计算机的知识,我发现我真的不知道如何用计算机来计算!
这太荒谬了!我试着在DOS的 “C>”之后敲了一个 “1+2”, 然后回车。
计算机回答:“bad command and file name”.
我又敲了一个“1+2=”。
“bad command and file name”.
“1+2?”
“bad command and file name”.
“? 1+2”
“bad command and file name”.
看来计算机跟本不明白我的意思。第一个回合,计算机胜。
我回家之后又从头到底看了一遍那本手册,的确没有如何用计算机计算数字的任何说明。这太奇怪了,计算机没有道理不会计算数学算式的嘛!我把我所有的计算机有关的书都找了出来(其实也没有几本),连小时候的《少年科学》都从箱子里搬了出来,这个问题还是没有答案,我只在其中一期的杂志上找到了一篇有关计算机起源的文章——计算机最初被发明出来就是为了解决数学上的问题的,“ENIAC一小时的计算量比得上几百名计算员用计算尺计算一个月!”这让我有了一些信心。
无论如何,这个问题让我认识到了自己的无知。在计算机的世界里,我们决不是高手,还有太多太多的问题没有答案。
我开始订阅一些计算机有关的杂志和报刊,因为信息非常的闭塞,也不知道什么杂志合适,所以全凭着自己的感觉和想象来订,结果每月收到了几本谁也看不明白的杂志。我记得我订的书里有一种叫《计算机数值运算文摘》(我订这个是因为我的数学计算情结),是用一种发黄的纸印制的,每篇文章之后都有一段英文的简介,然后就是一大堆让人瞪目结舌的图表,奇异的符号,大篇大篇的公式推导。
所有这些没有一个字提到如何用机算机计算数字。我觉得自己被隔离在计算机的世界之外,无论如何也冲不进去,直到有一天我遇到了一个有魔力的单词:“BASIC”。
每期的《计算机数值运算文摘》送到之后,我都匆匆翻阅一遍,当然什么也看不懂,下意识里只是为了证明自己订了这本书没有白花银子。每次浏览时,那些文章对于我来说都毫无意义,它们只是一大堆我根本不理解的字符和图型的组合,我的眼睛从它们上面扫过,就像是看着一页页的涂鸦。但是有一次有一篇文章里提到了一句话:“本文所提出的方法用basic语言实现之后… …”
唔… …BASIC,在哪里看过这个字眼呢?BASIC是什么?那期杂志再没有什么其他能给我信息的东西了。我把它仍然放在柜子里,它和其他的杂志们一样都将这样永远沉睡在那里了,但是这个BASIC是什么呢?它显然与数学计算有关。好罢, 我去找它。
我们是四人三班制,上完夜班之后都有一天半的休息时间。我一下夜班就上了去市里的车,我的目的只有一个:到市新华书店里去找找看,找出这个BASIC,我一定在什么地方看到它。
BASIC,我来了!
洛阳离我们有八十五公里路,班车需要2个小时才能到。在我走进书店的那一刻起,我就开始骂自己,计算机专柜几乎有一万种书,而我居然一直守着那一本DOS手册不舍得放开。
一切都在我面前展开了,BASIC是一种计算机程序语言,用这个就可以编写计算机程序。而在程序里,不仅可以控制计算机做数学运算,还可以画图,处理文件等一切工作!而且… …
“BASIC需要解释程序来运行,各个版本的DOS都提供了BASIC解释器程序。”一本书是这么说的,那么就是说我们现在所安装的DOS5.0里也含有一个BASIC解释程序!那么它在哪里?
另一个很久困惑我的问题得到了解答:答案就一直在我的手里——那个奇特的编辑程序,QBASIC!我终于明白他并不是一个简单的文本编辑器,他就是DOS提供的BASIC语言的编程工具!
我买了两本BASIC编程的书,心里激动万分。那个清朗的秋天!我简单无法控制自己的迫不及待的心情,漫长的回途在难以按捺的兴奋中变得短了许多。我在车就开始看那本书了,为了抑制自己的心情,我从前言开始读起。久汗的土地遇上了滋润的雨水!那种惬意难以言传。计算机程序语言是如此美妙,充满严密的逻辑和优美的结构。我第一次发现计算机不仅可以是一个驯服的工具,它还是一个难得的思想的存储体,它使我第一次认真思考人类的思维方式,一切都是那么富有秩序!
把自己的思路以程序的方式剖析,然后以程序的格式写下来,计算机就成了——至少是在一种程度上成了——第二个自己的大脑!它能以我的方式思考!我的思想被赋于了它!
我的第一个程序就是一个无限位的除法器,我把手工列竖式的过程写成了程序,然后要求他计算一个无限循环的除法式。第一次编程序,对于计算机的运算性能我还没有概念,我试着把精确位数设置到小数点后10000位,它能行吗,是不是需要很长时间?
它几乎一瞬间就完成了,小数部分一直列到滚了屏。我知道,那是我的思想在运行,只不过速度是我自己的一百万倍。
计算机处于我的控制之中!真正的控制!
计算机对于我来说再也不是只能用来拷贝文件、运行不知名小程序的新玩具了,它在程序的控制下能做如此多的事情。我用他计算过高斯的“八皇后”问题,进行过概率事件的模拟分析,学以至用的乐趣让我对之着迷,我不再喜欢整天把那些没什么用的小软件装来拷去,那些东西现在看来一点都不酷了。显示彩色的方框?6行程序就可以了。我可以用它来做更有意思的事情,我可以用它来解决实际问题,而不是只解决计算机本身的问题。
计算机使一种简单的解决问题的方法成为可能,比如说,有一个5位的数字,各位上的数字都是不同的,这个5位数乘以4之后得到的数等于把原来的数倒转过来!这个数是几?我试着列出方程,结果得到了一个有5个变量的公式,这是根本没有办法解决的问题。而在计算机上,你可以直接让计算机循环一百万次,把每个5位以内的自然数都乘以4,然后来检查是否符合条件。在286计算机上上这个程序运行了5秒钟,得到了正确答案:21978。在386上只用了不到一秒。(顺便说一下,这样的数在4位数的范围里是2178,更少位数里就不存在了。而在5位以上的自然数里,每一个位数里都存在,他们是21978、219978、 2199978、21999978、219999978……为什么一定是这个数字?)
最有意思的还是用计算机对现实世界进行模拟,你可以用他来模拟一片森林的生长情况,再加上季风和山火因素就更完美了。在随机数的控制下,屏幕上表示树木的一个个像素从淡绿色渐渐变为深绿色,每秒钟相当于自然界里的一天,时间在计算机的世界里飞速流逝,树木在长大,有些枯死了,然后在几年之后,有个地方起火了!该死!山火在风势的作用下一路烧过去,深绿色的森林烧出了一条黄色的扇形焦土地带。
还有游戏。在dos 5.0里有两个自带的basic游戏,一个是贪食蛇,另一个是香蕉超人,我们经常围在一起比赛投香蕉,这个游戏里屏幕两边各有一个小人,两个玩家控制一个,通过输入角度和速度的方式向对方投掷香蕉炸弹,看谁先击中对方。终于有一天我不耐烦于屡屡被人击中,于是偷偷修改了程序,使得只要输入的角度和速度之乘积等于一个秘密的数字时,香蕉就一定会准确命中对方。于是,我就立于不败之地了。
这太让人着迷了!
其实BASIC还只是一个玩具语言,除了解决一些数学问题之外,要处理一些真正的事务还是有一些不得其便。我注意到我自己的编的程序和我之前收集的其他的程序还是非常不一样:我的程序必须要在basic里才能运行,而其他的程序都是EXE程序,可以直接执行。我的程序就是一行行的文字,而其他的程序用查看内容时根本看不出任何有意义的东西,如果你用type命令查看一个EXE程序,计算机就会尖叫着给你显示一大堆用人头、音乐符号等乱七八糟的东西组成的一大堆乱码。
我无法想象怎么会有人看得懂那样的东西,但是一个显而易见的事实就是:的确有人做出了那些东西,要不然它们就不会在这里。
所有的DOS系统带的程序都是这种乱码程序,连我们的业务系统的程序也是,如何制作这种程序成了我们讨论最多的话题。讨论的结果都据有某种神秘意味:嗯!那些是更高级的程序。只有高级的大师才明白那些小人头和音乐符号们的内在意义。
这种“高级大师”具然有一天让我们给遇上了。
计费软件里所提供的话费汇总功能很不合用,有一次电话设备厂的两个工程师来局里做例行维护,我们班长和他们说起话费汇总功能的事情,那个人听完之后,眨了眨眼睛说:
“这个程序我就可以给你们做呀!”
大家都很意外,心里对那位工程师肃然起敬。一位同事还追问了一句:“是做成EXE文件吗?”
那人很肯定地回答说是。大家面面相觑,人人心里想:“想不到这个人就是高级大师呀!”
三个月之后, 那位工程师和另一个人又一次从电话设备厂赶来了, 不同的是这一次他们是乘公交车来的。哈! 那家伙一来到机房就直接坐到那台我们常常偷偷琢磨DOS的机器跟前,毫不犹豫地按了ESC键,噼哩啪拉地敲进那个密码,退回了DOS命令提示符下。
班长目瞪口呆,脸色苍白。我想他一定认为这台电脑已经被这人搞坏了。只差一点就要爆炸了!
那个家伙将软盘放进去,开始COPY文件到机器里去,班长不安地在一边讪笑着:“这样电脑不会坏掉吧?”
那人翻翻眼,说:“怎么会坏掉?”
这是那两个家伙留给我们的唯一好印象。其实我们已经知道这是他们接的私活,电话局通过班长向他们付了5000元,一部分则返还到班长自己的袋里,我们因此对他们很不以为然。但是他们至少无意中为我们可以“合法地”使用电脑提供了技术依据,而且由于他们的程序不是业务系统的组成部分,必须要先退出业务系统才能启动他们的程序,这使得使用DOS也成了“合法的”日常工作。从这之后,我们的学习从渐渐从地下状态转为公开。
那次他们在我们机房里待了一周,天天在调试他们的程序。两个人通常是一个人坐着敲键盘,另一个坐在边上看。他们两人的争论无休无止。我们也经常站在他们身后看他们摆弄那些东西。一开始我们以为会看到他们打开那些有小人头的乱码进行神秘的工作,但是从来没有。他们编写的东西居然和BASIC一样,也是文本方式的程序!
不过那不是BASIC,这我能看得出来。终于有一天,我忍不住问他们,EXE文件在哪里?
“这个就是。”他们指着那些文本程序。
EXE文件不是都是乱码吗?这不是EXE文件……
“编译之后就形成EXE了。”
编译?这个词我在BASIC的书里看到过。但是我不理解那是什么意思。我没有再多问。我相信会有答案。
最后两天,他们开始交货了,EXE文件!这令我困惑。我偷偷用type命令看那个文件的内容,心里希望会跳出来他们所编辑的那些文本程序行,这样我的困惑也就得到了解释——他们只是把程序文件改名成为了EXE文件。但是没有,乱码夹着小人头怪叫着跳满了屏幕。如同是魔术一样,放进帽子的是手绢,拉出来的是一只兔子。我一定忽略了什么关键所在。
我终于去问他们,他们回答是“这是C语言写的”。
C语言。又一个传说。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架