如果不是有人提醒,我还真不记得自己还有这么个博客。这个博客里的上一篇随笔还是上高中之前写的,一转眼现在都大二了,岁月着实不饶人。
记得上高中之前,最早学编程是学的汇编,那还是2010年,王爽的《汇编语言》是我在编程方面的入门书,也是我最喜欢的一本编程方面的书,最开始写实模式下的程序,后来开始尝试in和out端口,再后来企图从实模式跳转到保护模式,结果因为理解不了GDT结构而罢休,就转向了C语言。
C语言和C++是从搞Windows平台上的各种玩意开始的,那时候还立志于做盗号木马,用OllyDBG调试过好多软件,各处下Hook,后来因为读取不到受保护内存地址的数据而罢休。再后来用了Linux,就觉得把PE文件结构把握得再透彻,也只是局限于一个Windows平台而已,做木马不如创造一些实用软件,再搞成跨平台的,就开始玩起了QT,紧接着由于做的东西越来越大,翻开自己写过的代码觉得不忍直视,就开始立志于把代码写漂亮,把项目的结构理清晰。但是现在再看当时写过的类,那代码组织得还真是小孩子的思维方式。
再后来搞到了一块ARM9的开发板,玩了一段时间,这博客里的第一篇文章就是玩那板子时写的,后来又用ARM汇编写了几个裸跑的控制LED和蜂鸣器的程序,但不知怎么回事,这博客里没有那篇文章,而我的QQ空间里有。
我个人感觉,我在高中前学编程的过程可以分为几个阶段,先是看啥都看不懂的阶段,到学了汇编,学汇编之后与之前,很明显的区别,之前看啥都看不懂,之后看啥都不觉得难理解,这应该说明是入门了。第二个阶段是入门到用Linux之间,那段时间热衷于黑客技术,就是给各种游戏写木马,其中我做过最难下钩子的就是DNF。之所以热衷于此,一是因为暴利,二是觉得这玩意技术含量很高,很高达上。第三个阶段是用了Linux之后,那个时候思想转变了,做木马并没有什么高大上的,无论是从技术层面上来说,还是从实用角度来说。做木马需要的技术,其实并不如做一款软件来得难,相反,一款软件代码量很大,而且还需要修改升级,如何组织好项目,这其实是比反汇编还要难的技术。破解、入侵和网络攻击的技术,并不会给我们的社会带来什么价值,我们往往会说那些能入侵某某系统的黑客是很牛的人,但是他的工作却并没有给我们的工作带来过什么便利。相反,那些制作了许多提升我们工作效率的工具的开源团队与商业团队,却极少有对其的称赞。因此从那之后我就开始立志做一名程序员,做出使各种对吃瓜与不吃瓜的群众都有益的作品出来。第四个阶段是玩了ARM之后,因为光盘里提供的许多东西是放在很早版本的Redhat上编译的,而我又不想装老版本的系统,用新版系统编译的过程中会出各种各样的问题,结果又百度不到解决方法,提问也没人回答,就学会了自己看编译输出,自己去修改相关代码。在做裸跑程序时,要知道相关端口的端口号和使用方法,需要自己去查底板和基板的电路图还有芯片的手册,就逐渐不再当伸手党了。在那之前,我接触一个库是通过看该库相关的入门教程和书籍来入手的,但是从那之后,很少有看过这些内容,都是直接看官网的Tutorial和References。
后来就上了高中,自然主要心思放在了学习上,不可能有时间再去搞编程。但自知自己这点水平难考大学,而且那段时间安卓游戏特别火,就接触到了Cocos2d-x,开始做手游。一开始要趁高一的暑假做出一款塔防,结果两个月时间根本不够用,而且电脑还坏了,不仅罢休,这个项目也就此放弃了。后来就专心在Cocos2d-x上了。
万万没想到,居然考上了本科,而且学校还不错。
大一上学期琢磨着创业来着,打算以手游为切入点,结果一整个专业没几个会写程序的。To my astonishment...一个以编程为核心的专业,居然找不到几个会写程序的。之后,我虽然又随随便便写了两个游戏给同学们玩,但是主要精力放在了学习课内知识上。学了线性代数和部分算法后,就开始思考写代码和技术之间的关系。大一下学期开始学习机器学习和各种图像处理算法。嗯,知道写代码和技术之间的区别了。技术这东西其实和你用什么语言用什么平台是没有多少关联的,就比如离散傅立叶变换,我可以用C语言写,可以用Java写,也可以用Python写,还可以用Matlab写。写完之后我可以放在PC上用,可以放在手机上用,也可以放到嵌入式设备上。这样看来,我与其将精力放在实现代码的细节上,不如把精力放在解决现实问题上,提出一种解决现实问题的办法,要比根据现有办法来实现代码更有价值。因此,我当前的工作重心就放在了学习数学、机器学习和图像处理方面。虽然也有心弥补一下过去的遗憾,比如当年不理解的GDT结构,现在再想跳转是没有问题的了,但是现在不论是机器还是人,都不具备当年的状态了。
四年没有再写过博客,大二了,感觉应该开始试着写一些博客了,虽然见识也很浅薄,但是能写终归也比不写要好。有可能会在博客园里写,也有可能突发奇想自己在腾讯云搭个博客,毕竟学生有优惠政策,每月才一块钱。