5年编程之旅

    其实早就想写本文了,一直想缅怀一下过去的自己。说是说5年,其实在很久之前我已经用按键游侠(一个用VBS作为引擎的东西)开始写脚本了,说起编程还需要感谢猪哥,是他将我带入了编程这一领域(可悲的是现在都找不到QQ列表中的哪位了,猪哥希望您看到这篇文章之后能联系我)。5年前,我性质匆匆的买来了一本VC6和VS2005(好像是这个版本)入门的书打算开始学习C++(目前这两本书在某个妹子手里)。然后开始了漫长的C++学习之旅,记得当时我是一边摸索着学习C++的语法,一边在写按键娃娃(值得庆幸的是目前这货居然还能搜的到),下面我们来看一段有意思的代码。
 
    可以看到当时的我是多么的稚嫩,居然把一个功能函数包装成了一个类,居然还满心欢喜的加上了一段注释(很简单实用吧)-_-||

    接下来是两个比较奇怪的函数
 
    看里面的两个变量m_hDebugWnd和m_hCodeWnd按照道理来说这两个变量应该是全局变量才对,为什么被套上了m的定义?(我也是进了理客才知道m是member的缩写-_-||请不要喷我),可能当时看到别人代码里是这么写的于是我也就照葫芦画瓢了。还有很多个文件里就这么几行代码两三个函数的,这里就不列举出来了。

    然后是一个switch,先看代码
 
    以我现在的风格来看,这里肯定变成一个enum,否则这里一改调用方也需要跟着改定义(可能当时考虑到是给VB用的,所以就没那么做了吧:))。
    写着写着就写到了图像查找的模块,为了有效的实现一个查找算法我买来了一本
图片 
    但是可悲的是,我至今都还停留在入门的阶段,我也只是把里面模板匹配的部分看了一遍。直到几个月前,BOSS提出需求说是要做名片之类东西的矩形校正,我才完完整整的把这本书又看了一遍,虽然最后还是夭折了-_-||
    与此同时,看到网上说数据结构很重要,于是我也买了一本
图片
    但对于一个完全没有系统的学习过编程的我来说,买的时候都没有看清它里面讲的是什么语言的,买回来才发现这个是Pascal版本的,当时就崩溃了。。。(虽然之前有用过Delphi,但都没用它写过过千行的代码,然后就被我抛弃了)。
    当时为了让模拟键盘鼠标那些能过NP(NProtect当时是个很牛逼的东西),我甚至还自己动手写了个驱动,当时对我来说绝对是个非常大的挑战。当时看的资料也不知道已经被我丢到哪里去了,说实话其实驱动写起来也没什么复杂的,按照它的API和框架来写就是了,不过当时比较蛋疼的是调试的时候经常蓝屏,最后我甚至搞了台虚拟机来专门调试,奇怪的是当时的那台破机器跑虚拟机居然不卡。

    这里有两个函数非常熟悉,是从ring3切换到ring0和切回来的,在之后写OS的代码里也有类似的代码。其中有一些代码现在不去翻资料已经看不懂了:)



    这里有一些有关于在驱动中读写内存和隐藏进程的代码,隐藏进程其实很简单,只要把这个进程从链表中拿掉就可以了,而读写内存则需要切到Ring0(因为有NP嘛)。
    最后为了支持自定义窗口,我还为他做了一个窗口编辑器

    很炫吧,呵呵:)下面我们来看一下它的帮助文档,做的还是很不错的嘛

    其实这个是按键娃娃的第一个版本。

    原来它有这么多模块

    当然我还为按键娃娃做了一些网站啊之类的东西,没记错的话,按键娃娃应该是在08年的时候做的,当时开奥运会,我甚至还为他配上了一堆福娃的图标。之后我记得应该是和按键游侠的作者商量好了,一起来开发自己的引擎,但比较纠结的是自始至终也只有我一个人在做(据说他好像带小孩去了),人家毕竟不是专业的程序员。应此就有了QLanguage的第一个版本,当时我给他取名叫ES(Easy to Study) 语言。对于一个没有学习过编译原理的我来说,一切都是手写的,而且当时还把词法分析和语法分析都并在了一起,代码真是一团糟。我没有记错的话,但是应该是我读南湖3年级和大一的时候,说到考大学,那真是简单加轻松啊,当时就以211分进了科技学院(名字很霸气吧~还有不要鄙视我,三校生高考满分是300分,我还是我们班最高的!)。
    之后便开始了大学生活,当然大学生活是相当无聊的,可悲的是大学三年我只去过一次图书馆,而且那次还是去辅导别人的。其他时间都在堕落的打着游戏(当然偶尔无聊的时候也会写写代码,前提是寝室里非常安静的情况下,估计也只有没人的时候),其实在这段时间里我多数时间是在周末回到家才去写QLanguage的,从大一到大二我一共做了两个版本的QLanguage,第一个完全是手写的,手写的Lexer和手写的Parser。在这个版本做了一半的时候我看到了
vczh的博客从他的博客里我知道了有《编译原理》这门课,于是我就买来了下面这本书
图片
    通过读了这本书之后,便有了第二个版本的QLanguage,当时我瞬间就觉得代码写的更结构化了,不过这类书更偏理论,里面有一些算法但很少会有实现的代码,于是我就在网上各种找代码来看(其实这本书是我目前为止翻的次数最多的)。 话不多说,让我们来看看当时的代码

    当时的编码风格简直糟透了随意的有空格没空格,加括号和不加括号之类的这里就不展开说了。就在我完成之际,我又迎来了人生的一个转折点。大三了要实习了,当时那是疯狂的投简历啊,看到一家有兴趣的给他投简历,有幸的是理客是第一家联系我的,也就是我待到现在的公司(前三个月去过另外一家公司,反正背后的老板是同一个,只是那边人手不够我去帮忙的罢了),而这家公司也是离我家最近的。当时我带着一纸简历就这么过去了,进了理客之后我才知道什么是编码规范,易读的代码应该是什么样的,虽然现在QLanguage的代码里还是有一些没有按照规范来写的,不过我觉得看起来应该还不算糟糕。其实在大三那年还有段小插曲,当时看上个妹子,纠结了许久,最后毅然决定不再联系,之后我便下定决心要把QLanguage做好,这才有了一个稳定的功能丰富的QLanguage的第二个版本。
    记得刚进理客的时候还是个毛头小子,根本不知天高地厚,总觉得别人的代码写的没我的好。但随着时间的慢慢推移,我终于实习期满了转正了。当初的高傲也不复存在了。在理客我做过PHP、Office Plugin、iOS、Android和Researcher,其中最复杂的莫过于图像校正,说是拍出来的名片围成的四边形要将他校正为一个正常的矩形,里面的难点在于要找到这四条边。题外话,在理客的日子我觉得很开心,不光因为我认识了新的妹子,更有一帮基友可以陪我扯淡,可以扯游戏也可以扯编程还可以扯东扯西的扯到宇宙去-_-||不过我觉得理客更像是一所学校(我刚进去的时候就是做教育软件的,可能老板的理念就是从这起的)。而现在看着一个一个辞职的辞职,被辞职的被辞职,心里难免会有一种淡淡的忧伤,不过我觉得最对不起的还是某个同事,我说我要过来,结果老板把他给开掉了。
    啰啰嗦嗦的终于把本文写完了,其实我看过的书还有很多,这里我简单的把他罗列出来

图片

图片

图片
    还有没空看的
图片
    虽然这些书并不是最经典的,但当你把它们都看完的时候,工作也不成问题了。
    最后我发现,要找以前的代码真不是一件容易的事情,应此我要做个文件和目录的管理工具,具体的实现方案正在起草。可能本文中间会有些遗漏的地方,等以后想起来了再补上。其实这条路是没有尽头的,人类为了简化各种工作而发明了电脑和编程语言,应此本着这个宗旨我会开发更多简单实用的工具来简化工作和生活。

5年编程之旅

全文结束