一部分经历

初二时接触过一阵电脑,最初是一台《金字塔》牌的学习机,我接触了logo和basic两种语言,并知道了有汇编那么回事,不过对于汇编能干什么还是不能理解。当时用 logo画图,还用basic算一些数学题,如二元一次方程等,还有一种绘图basic,内置了一些动画图像,算是面向对象的雏形,不过那时不知道这些概念,是用来编写游戏的。我当时对电视游戏还算感兴趣坦克大战最拿手,因为这是金字塔学习卡上自带的游戏,不需要再买游戏卡。当时用basic开始写类似《小蜜蜂》的游戏,纯属好玩,大致是上面一个飞机随机运动,玩家也就是我操纵一台高射炮发射子弹击中它。
发现自己确实写出了一个可以玩的游戏时感到非常兴奋,于是开始改进它。不过改进的目的不是为了游戏更精彩和完善,而是为了更简单。学习机没有硬盘,我每次想玩时只能拿出一个本子,把代码敲进去。于是游戏的行数从最初的36减到9。功能也稍微作了简化。
另外写的一些简单的算法如排序,当时曾想写一个程序排考试成绩,那时的排序算法是自己想的,效率不高而简单实用。还随手翻过接触到一本专门的算法书,讲的是插值之类的,当时因为没接触过高等数学而完全看不懂,感到很郁闷。这样到初三就没再动我的学习机了,因为要忙于中考。一直到高中时代,都没再碰过。

上大学的时候特幼稚,特爱幻想,特想去设计飞机,觉得特好玩,就填报了一堆航空类的学校,非常不幸的,就被一所空军的军校录取了。具体是哪就不说了,那个所谓的军校4大地狱之一,不是用来享受和回忆的,而是用来诅咒的。去学校之后我做的第一件事就是抛弃以前的理想。

大一上半学期开了《计算机文化基础》这门课,在上机课上我才明白现在的电脑竟然都接上了鼠标,当时听人讲过的dos、wps(dos版)原来都过时了。不过那时被军校的强化训练搞得晕头转向,基本上各门课学的都很马虎。
下半学期开了《C程序设计》这门课,这门课勾起我很多以前的回忆。于是我开始到图书馆翻阅一些相关的书籍想把这门课学好。于是我对dos下的编程有了很多的了解,接触并思考了中断调用和内存驻留程序等当时感到很玄妙的概念,等C语言这门课结束的时候,我已经不满足于过于简单的C了。这年考试我这门课的成绩还算不错,不过也还没高到离谱的地步。当时我已开始自己写一些有趣的程序了,如想写一个破坏性的程序,就到处找关机的中断,后来明白在Windows里dos下的tc确实难有作为,但还是心有不甘,用C文件系统写了一个文件炸弹,
main(){char fn[9];FILE *fp;long l=0;
while(!fclose(fopen(ltoa(l++,fn,10),"w")));}
这是改动后的版本,习惯性的把代码行数减到最小,另外一个改版可以把生成的若干空文件放在桌面上,针对w9x,当然这个炸弹是很善良的,它实际上不会造成任何危害,只会吓人一跳。
暑假开始学习C++。
这年暑假买了一台电脑。

我接触到的第一种C++编译器是msvc6,当打开教程的时候,里面的各种各样稀奇古怪的概念使我对这本书产生一种天书的感觉,这时我第一次听说写代码可以拿高薪,于是很想把它学好。希望以后靠自己的手挣出一套房子什么的。
之后开始学习VB,我明白自己对VC感到陌生的原因是因为面临两个台阶:从过程到对象,从DOS到windows。对于前者,我学习经典C++语法,对于后者,我学习VB。
用VB写一个与QQ类似的界面是非常容易的,我学习VB没几天就意识到了这一点,并把它付诸实施。这件事的副产品是我成功的偷盗了几个QQ号码。当时的方法是先把写好的程序用软盘拷到学校的图书馆,替换掉原来的QQ主文件,然后转到其他机子上,当对方输入密码时,程序用文件把骗到的密码记下来,就可以利用共享在另一台机器上查看,那时还不会socket。
这样做确实很有成就感,不过我也用不了这么多QQ号。于是偷到的QQ号都送人了,并且这样的工作做了几次后就不再做了。
后来为了改进这个程序我学了Socket。很快发现VB的局限性。随着程序越来越复杂,直接拷到图书馆很多机子上会出现错误,需要打包后才行。于是我明白VB是一种解释语言的含义,每次都要带上很多dll文件,再加上软盘的性能太差,后来就很难拷过去了。
这是已经到寒假了,这件事也告一段落。
开学后不久,我帮同学破开了两个Word文件的密码,帮很多人通过了考试。
又开始学习VC,这时对于windows的运行方式以及C++语法已经有了那么一点熟悉了,开始感到不那么难。
有一次偶然的买到一张linux安装盘,自己不敢装。就请一位大四的高手帮忙,于是认识了这位真正的高手,后来这位兄弟去了好像是云南44师,设在昆明的自动化站。
后来机会来了,学校要举行编程比赛,每个学员队对此都非常重视,因为这关系到领导的政绩。便从大三,大二各抽出2个人,由那位高手辅导。我可以名正言顺的请教了。
那时他在准备毕业论文,整天没事,就花了一中午时间用C写了一个文本下的贪吃蛇游戏,大家都对此佩服倍至。他要我们必须在几天内模仿写一个,当时都认为这是不可能的事情。但是最终我和99级一个人都写了出来,并作了许多改版如“双蛇”版等,后来那位哥们依靠关系在北京做了军代表,过着极其腐败的生活。
那年的编程竞赛大二的都没参加,这件事我一直感到遗憾,其实大三的水平弱于我们。大四那位高手取得了那年第一,这个第一名的意味着一个三等功,学校历史上有一位传奇人物,从初中就开始写代码,因为包揽了多届编程比赛第一名而被留校在计算机教研室做教员。
我写游戏却上了瘾,和那位大三的兄弟比试写俄罗斯方块。我们用不同的方法实现了。但我的代码在稳定和扩充性以及代码简洁上都更好一些,后来我用了很长一段时间的业余时间来改进这个程序,最终它达到了900行,具备了电视游戏中所有的功能并有所扩充,比如方块扩充到了14种,当然是这是可以选择的。用到了当时我能接触到的各种DOS技术。如中断服务程序提供的背景音乐。还做了专门的发声模块,并请一位爱好音乐的兄弟写了8段乐谱,在过关时演奏。
写这个程序使我对DOS的相关技术变得比较熟悉了。当时学院计算机教研室副主任给我们上《软件技术基础》课,这位副主任就是当年留那位传奇人物的,其人也非常桀骜,下课从不与学员交谈。我抓住一次机会在他面前很谦虚的卖弄一番,他对我大生好感,很诚恳的对我说他对软件并不在行,要我去请教那位传奇人物,并鼓励我“好好学,学好的话将来我给你留校”。
4月考了三级,记得三级机试完了之后。我立刻赶到靶场参加手枪射击考试,可能因为兴奋的缘故看了一个小时屏幕的眼睛居然超级好用,5发子弹打了46环。感觉良好的不得了。
到大二结束的时候,我已经粗通VB和VC,并能很熟练的用C语言写程序了,对几个函数库都熟悉。我还认识了几位朋友,其中一位后来VC很熟练,另一位则在学习delphi,在他的鼓动下我也开始学习delphi,还有一位是电子制作的高手。我还知道了小时的好友之一,在中国矿业大学比我早一级的也在学习编程,在做一个数据库方面的项目,用delphi。
我后来非常喜欢delphi,因为它写出的软件体积比vb小,而与vc比又具有RAD工具的优势。我试着用VC,delphi重写了那个QQ盗取工具,VC的最小,delphi的可以轻易加上电子邮件等功能,有现成的组件可以用。
那年在游戏上我还是一个标准菜鸟,还只会bh2k,顺便分析了bh2k的脚本文件,写了一个c程序来修改游戏中的弹药数。把这个游戏迅速打到不愿意再打了。

大三开学不久,我被一位大四的师兄介绍到他们专业教研室“帮忙”,那时他们教研室有很多项目,多是军事上的工业控制。据说与一位现在学院仅有的几位教授之一关系很大,那位教研室副主任曾师从“银河”的总工。我听说这次去就是给那位副主任帮忙,心里挺紧张。等见到了才发现不像想象中那么难。他们为了破解一个用8086cpu控制的系统(好像就是歼击8型飞机的平显或是大气数据计算机),需要把两块rom中的代码(一个存放奇数字节的代码另一个存放偶数字节)按一定规律合成一个程序并破解。对于破解我当然是一窍不通,但对于第一个问题为何教研室牛人如此之多的情况下却无人来做却叫我大惑不解,当晚我就用c文件系统把它合成并自己写了一个16进制察看器来确保结果正确。他们都很满意,以致我大四是还被从游戏中叫过去做过这种事。不过后来我没有继续留在那。原因挺复杂,我不太精通汇编,那位副主任与我们并没多少时间接触,我自己毕竟还要上课还要整天踢正步,就找个借口走了。
尽管如此他们教研室对我印象还算不错,不久后我又去帮一位教员调试一个tc写的工业控制程序,这是一个运行在640*480分辨率图形界面下的dos程序。我对于数据采集之类的概念那时还一窍不通,不过那位教员也不需要我懂那些,事实上我只是帮他改写一下界面。每次他把每个界面改动的草图给我我就照着改就行了。这个工作对我来说也简单,不过就是往往几星期见不到他。我对于隔几个星期才给他干一小时活却自己占用着他们一间实验室(我和另一位留校不久的年轻教员有钥匙)感到很诚惶诚恐,教员却对我很满意。那段时间我看到那位毕业于河南大学的教员,用一台工控机和一堆自己焊的电路拼起来,再写上几段c程序进去,竟能把那堆破烂卖到一辆汽车的价格,不由得对这帮人大生崇拜之心。
在那间不小的实验室里,我整日闲得发荒。除了看书就是游戏,那时除了ra2外不会打别的,于是我ra的水平就很高了,以至于后来身边的人都不与我对战ra。我还熟悉了delphi。记得开学时打算自己写一个木马玩玩,起先用vc,用CSocket类,(没办法,MFC教程上都是只讲到此为止的),因为阻塞的问题解决不了,总是不稳定。现在有了这么多现成的组件,这个问题就很容易解决了。到大三第一学期结束,已经写成了,除去关机重起黑屏等等外,还有稍微复杂的文件传输和抓屏,还用一个timer来检查系统中有没有毒霸,瑞星,天网之类的字眼见到就简单中止掉进程。一位好友拿去做过测试,说还可以,能杀掉天网。但我发现杀不掉金山毒霸,猜想金山毒霸大概采用了双线程一类的技术。
还有一个简单的基于websnap的论坛,几百行代码,当时是因为初学asp,调了一个论坛后觉得太慢,于是想自己写一个。页面全是生成html文档的。现在看来那个论坛确实没什么必要,我后来可以轻松分析asp了,明白大部分asp论坛实际上是存在一些错误链接才慢的。
另外还有一个基于websnap的木马雏形,其实就是把普通木马的一些功能移植到IIsAPI上。类似于ASP木马,但可以完成ASP木马无法完成的功能,如抓屏,事实上IISapi/cgi程序可以调用所有w32api所以功能应该是无限的,又具有ASP木马的一些好处如无进程无可执行文件,无专门端口等,当然使用上不如ASP木马方便。
这些练习给我最大的启示还是在编写一个有实际功能的程序的时候,事先做好详尽的分析与准备工作有多么重要,就像我那位朋友所说的:实际开发中技术细节是第二位的,因为你可以从教程和网络上比较容易的获得,真正的挑战在于软件工程的层次上。
大三下学期开始,为那个教员调试程序的事情告一段落,我没事就想起玩RA时不像CS那样可以把游戏过程录下来。想看能否自己写程序解决这个问题,就试着写了一个程序来连续抓屏幕,存成连续的jpeg图片。播放时再按照顺序回放就行。起初的版本一秒钟可以抓2-3张图片,回放时跳格挺严重的。后来做了分析,发现抓图慢的原因在于把图片存到硬盘上占用时间过多。发现解决的最简单方法就是先抓一定数目(50-100张)的图片存在内存中,等积累到数量后一次存到硬盘上,一试效果果然不错。最快每秒钟可以抓10张,稳定时抓六张没问题,回放时已经比较流畅了。
另外还有一个处理图片的小程序,是因为当时帮教员出书要扫描很多黑白图片,由于扫描仪质量不好,图片上麻点很多,一开始由人来擦掉,我花了一个晚自习时间调了一个简单的算法来确定一个黑像素是否属于麻点。效果不错,花了半小时就干完了几个人2天没干完的活。
这时候我还学习了8086汇编语言,在学习过程中我看到汇编语言没有自己的集成环境,就写了一个小程序,可以自动生成框架,自动完成一些代码,并调用命令行完成编译连接等步骤。还曾用tc写过几个tc2的界面,当然目的只是为了练习。
4月份被同时分配了三项任务,学院的编程竞赛,和另外两个兄弟一起参加数学建模比赛,还有学院的网页设计竞赛,因为我做网页不是很熟(我一直很鄙视那帮做网页的,一点技术含量都没有),所以只负责网站的一部分。最后结果是我自己获得了编程竞赛第一名,我们小组获得数学建模竞赛第二名,网页竞赛失败了,因为一些细节问题,我们做的flash在评委的机器上无法正确运行。在师(学院)的编程比赛中获得第一名,按照条令规定使我获得了一个三等功。
那个时候我在校园网BBS上混迹多日,很多事情都记忆犹新(那种环境里的人对bbs有种特别的感情)。如跟人讨论如在图片里隐藏文件,这使我认识一位朋友,现在深圳当程序员,当时比我高一届,他用VB实现了我们讨论的想法,我们于是就认识了;还有对于VB,VC,DELPHI优劣的所谓新手们的经典讨论也给我留下的印象深刻,那件事的讨论成为校园网BBS编程版的绝唱,学院里我所知道的新手和高手都或深或浅地参加了,因为我在一个半夜加班后心情不好把VB毫不留情的批判一番,甚至引出了一位极其神秘的高手来声讨我,我猜测他就是当年留校的那位,我也很意气的和他争论了起来,各自举出一大堆自己都不懂的名词来吓唬对方,在一帮菜鸟面前尽情的卖弄了一番后我们都心满意足;另外另一位我熟悉的朋友在写一个文件处理工具名叫文件大师什么的(那东西挺受教研室那帮人欣赏的,不过后来我的朋友大多觉得很烂)我忍不住和他探讨了一下一种文件粉碎的简易方法。
那时候也面临考研和就业的选择,准备了一段时间考研后,觉得也许找个比较清闲的工作再考更好一点,在这个鬼地方最重要的事是活下来。那时候我的另一个学习很好的同学也在离考研只有十几天的时候在队里的压力下放弃了。郁闷之下拉我一起参加第二年的高级程序员考试,对我说这个考试可以取得一个工程师头衔,证明自己超过大部分计算机专业本科生。那时候报名和请假都不容易,在考试之前我还因为一件事情被折腾得连续两天没睡觉,不过总算我们成功的在附近的地方大学参加了考试。那天中午我们一起在那所豫南挺有名的师范学院校园(那时候我才明白什么是校园这个概念,不是读过军校的人很难体会到这种感觉)的长椅上头对头补觉,看着天上的云彩和身边从没见过的那么多女孩,我突然感觉自己的生命中原来已经错过了那么多的事情。自己的大学生活好像还没开始就这么匆匆过去了。

大四下半年忙于毕业和游戏,人变得非常消沉懒惰,不过在别人的逼迫下也稍微作了些事情。首先是跟几个人一起帮教研室作一个心理学类的教学网站,我在里面主要负责后台程序的编写,资料库查询和自测程序。还有就是我的毕业专题,这是一个几千行的C程序,一个智能仪器的软件部分,我吸取了以前做的那件类似工作的教训,想了一些有趣的方法来开发这个系统,结果使它具有类似windows标准界面的外表。思路大概是先用delphi画成界面,再抓成16色bmp图片,再用自己写的函数来显示这个图片,然后为图片里各控件写上对应的代码。这样的好处是虽然听起来麻烦但做起来出奇的快,平均一小时能写1K的代码,然后最主要的是改起来很简单,因为教员总是喜欢对别人的工作提出各种各样奇怪的修改建议,这是我大二在教研室所谓帮忙时得出来的结论。因为界面和代码分离,大多数情况下修改时不需过多的改代码,自从采用这个方法后,因为改动太容易以至于教员懒得对我提改动要求了,使我清闲了不少,还有就是界面更花哨了。
为了这个系统的开发我比较系统的复习了c语言图形系统,分析了bmp等图形文件的存放和压缩方式。
另外一个就是一个模拟ficq的工具,起因是为了几个连游戏的狐朋狗友联系方便,因为局域网上的私人ficq服务器很不稳定,所以自己探讨了一下在局域网中不用固定服务器实现icq系统的可能性,又花了些时间把它实现了,写好后放在校园网上,供大家下载。
最后一年4月我在临走之前又挺简单的取得了一届学院编程竞赛第一名。
另外还作了一些小事情如那年数学建模竞赛花了两天帮人写一个算法和11k的代码解决一个推理问题,帮一个教员写一篇论文的一部分,要比较三种神经网络算法,找到我估计就是因为找个学生来做可以神不知鬼不觉,这件事我不太感兴趣,那时我已经对留校不报什么希望了,对我来说这件事唯一的好处就是让我感觉自己有了一点名气,除此之外就是很无耻的占用我的时间了,但不想做也没办法我拖到毕业走前一天还是被抓过去调那该死的程序,还发现他给我的算法竟有那么多错误,第三种所谓改进BP竟是发散的,这位数学专业的副教授竟给了我一个错误的算法。还有一个小东西也和玩游戏有关,功能是用一台机子通过网络发送控制命令隐藏1-6台机子上的游戏画面,这种东西估计只有军校才会用到。对了还有命令与征服-将军的序列号修改器,用它可以破解wastwood游戏为反盗版做的不许同序列号游戏相连的措施。
这年的校园网BBS编程版冷清多了,许多老朋友都毕业离去,我只记得和人讨论过一个24点的问题,其它就是回答新手的一些问题。
到大学生涯结束的时候,我写过的代码加起来应该至少超过1w行了,因为很多杂乱的无法计算,非专业学生这样做的应该不多。
分到部队后很郁闷,因为发现所学的完全用不到。这时有三种选择:1,成家,就这么过了一辈子;2,准备考研;3,离开部队。相当一段时间里我很倾向于第三种考虑,目的有三个:1,不想有人整天用让你不爽的声音对你说话,2,不想到28岁还没有正常的8小时之外时间,只有那么少的休息日,3,身边的同行没有一个能纯靠当兵的工资买的起房子的。当然家里是全力反对的,我是独子,这种事情上不能不考虑家里的意见。但是基层部队的环境实在过于压抑,我不得不多做一些考虑,大四和朋友一起考的那次高程,由于一些原因以几分之差没过,但所谓高程不像想象中那么难却给我留下了难以忘怀的印象。毕业当年10月我想重新考一次,感觉上纯粹是为了拿回本属于自己的东西,不过由于人地两生,没有报上名。于是在毕业之第二年上半年5月份,我又参加了高程考试,通过了。
除了准备高程之外,毕业一年里,在很繁重的劳动之余,我还抽时间做了几件事情来保持熟练,期待有一天能用上。简要分析了几套代码,有开源项目neo,是一个dos下的tc的游戏开发驱动库,还有c++的sunshine,这是一个dos下的windows界面类库。利用从中学来的思路,改进了自己的毕业专题,使绘图速度提高了几十倍,还自己定义了一种简易的bmp图像压缩算法,使软件体积缩小到十分之一。另外就是尝试重写用websnap做的那个bbs,只是由于时间太紧张,一直进展缓慢,到完成了概念设计就不再写了,一是时间紧,二是因为看到网上已经有人作出了类似的东西。另外就是终于找到了一个虽然很基本但实用的bp神经网络程序,我希望能做成专家系统应用到实际工作中去,但在身边的环境而言似乎是没可能的,这使我有些郁闷。高程考完之后,又买了系统分析师的教程,不过并不急于去考。因为觉得不能接触到相应的环境,即使考了也没什么意义。
这一年里,以前在一起谈天交流的兄弟,有的在部队里找到了比较轻闲的工作,有的带着不满离开了部队。我一无所成。还做了很多以前觉得很不屑于做的工作,排版(做一种小型报纸,用word排版)、做图板、做课件,用excel画表格什么的。有时候会想到前途,看不清前面究竟是什么。考完高程之后,我仍在努力分析自己,看更适合走什么路,走上仕途?但自己实在不是那块料,而且在中国走仕途不是一辈子可以走出头的,原专业走技术路线只能是死路一条,那么还是应该继续学习计算机了,作为一个程序员最好的年华其实就在年轻的几年,这对我来也不太现实了,这时候我忽然觉得也许自己最适合的环境也许还是学校,自己从一出生就在学校里,直到上完大学其实一直都没有离开过那种环境,即使总是说自己不喜欢其实考虑问题和做事的方式还是免不了受到那种环境的浸染,一次和哥们坐公交车上,没有带零钱,又碰到一个很让人烦的司机师傅,尽管我和哥们应该可以轻松的让那位司机闭嘴,我还是宁愿掏出十块钱扔进售票箱也不愿和人吵架,这也是为什么我内心一直适应不了过于烦扰的生活的原因吧。

10月份的时候我这个工作和信息毫不相关的人居然被通知参加了信息产业部组织的职业培训,混迹于一帮真正的软件工程师中间,感觉挺奇怪的,不过匆忙中也没多少时间交流,顺便见识了一下在日企的程序员的生活(天津市的软件业本来就是以对日出口为主),看到一个刚毕业不久的小丫头享受着比自己好的多的待遇确实是件影响心情的事情,那两天和一个同学在南开天大几个大学晃的感受,使我觉得考研是件十分紧迫的事了。
真的开始准备考研还是在8月份以后,发现只能准备下一年的考试了,因为年底的考试时间实在太急,在收集了足够的信息之后,发现还是有很多适合自己的专业和学校的。顺便还听说系统分析师可以拿到国家承认的高级职称(shit,居然有资格做副教授,真羡慕那帮老师折磨学生的快乐),于是决定春天时可以顺便考着玩一下,不过我也明白自己在时间和基础上都处于劣势,唯一可以依靠的就是以前留下的应付繁重工作的经验。这一年的磨练使我对生活得态度比较实际了,对于前途和幸福什么的早已经不抱太多的希望,只是觉得自己活到现在已经付出了很多,实在不愿意就这么放弃。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值