Amy Blog

回忆旧日时光

回忆旧日时光

前二天找到了之前自己写的旧代码. 这二天旧日回忆如潮水般涌上心头.故有此一篇.

程序的编写

回顾一下这份代码的编写过程,可以说这个小小的游戏,是我个人主导开发的一个相对比较大的项目,当然现在来看是一个非常小的项目,但在当时,从学校出来不久的新人,开发出的项目已经算比较大了.

在这个项目之前,都是跟着别人做项目,需求明确,只要老老实实写代码即可.这也非常符合初级工程师的定位.

然而就是这个小项目,让我看到了一个想往上生长的小工程师的努力.

代码的缺陷

现在回顾一下这份代码,里面存在着诸多缺陷:

1. 与操作系统强绑定

当年的windows如日中天,这个强绑定好像也无可厚非.

但是在今天回看,在主逻辑里到处穿插windows API调用,而不是集中于一处,对后期的修改极不方便.

比如,在程序的各处,都有弹出式窗口与用户交互,在需要交互的地方,就直接调用MessageBox, 导致后期升级极不方便. 现在的MessageBox函数,接受的参数已经变化,不再接受char 指针的类型,而是改为一个LWCPST类型,因为这个变化,需要遍历整个项目的文件,到处修改.

当年的《windows程序设计》这本书里,就说到各种内码,unicode就留给了整个开发人员一个头痛的问题,但是当时认识不足,对这句话完全忽略.

还有一个,在读取ini文件时,使用的是GetPrivateProfileInt这种与操作系统强相关的函数,而且是在程序里直接调用,而不是集中封装到一个类里,导致修改也要遍历整个项目.

以更现代的开发方法,与用户交互,应该要设计一个交互系统;而读取配置文件,也应该要有一个模块,用以实现集中处理.

弹窗的提示信息,也应该作为一块独立存放,这样才能应用多语言环境.

一些全局的定义,放在了StdAfx.h头文件里.

2. 类设计不完善

在项目开发时,应该要考虑到把错误消灭在开发阶段,而在项目里,多个类的接口定义不完善.

比如一个类,需要有初始参数才能正常工作,而却开放了无参数的构造函数;类开放了配置参数接口,但是却没有考虑在运行时如果调用了这个修改配置函数,会导致程序出错.

类的定义过重,一个类的功能过多,开放的接口过多,完成的工作太过于集中.

这是类的设计的问题.功能分割不合理,一些功能应该放在A类里,但是却放在了B类里,导致一些类过重,一些类不完善.

3. 对工程管理毫无概念

2004年时,git还没出现,印象中,svn还没进入我的知识体系里.当时接触过的代码管理工具,应该是随着visual studio 6带来的sourcesafe.

sourcesafe使用起来不能说方便,因此当年直接弃用,甚至于对此工具深恶痛绝.需要备份代码时,直接拷贝一份.

现在想起来,有点因噎废食,而且错过了往上成长的机会,因为这个项目只有一个人开发,理解不到源代码管理工具的重要性.

但是如果在一个大的团队里工作时,多人协同,这些源码管理工具是必不可少的.

4. 没考虑到将来的演进

当年电脑的分辨率,常用都是1024x768, 因此把游戏的输出画面高度定义为小于640.而且没有设计scale系统,图像分辨率多大,就直接输出多大.

到了今年,显示器的分辨率直接飚升到4K, 游戏跑起来的图像真是微小.

5. 代码书写不标准

也曾看过一些代码规范,定义函数调用时,每个变量使用逗号分隔后,需要再增加一个空格. 我一直百思不得其解,因此也没遵循这一要求.

现在我看了大概明瞭,这个要求是有必要的.

当年开发时使用的是VC6,心想开发一定要使用IDE的.但是后来经历过ultra_edit, notepad, 再到现在的vi,原来编程,并不一定需要IDE.

而在vi里,如果使用鼠标双击选择,如果没有空格分隔,其选择的范围并不如你所想.

一些人和事

回看当年的代码,感觉到自己是有所成长的.成长的进度因人而异,可能比不上别人,但只需要跟自己对比就可以了.

回想起当年的事情,刚从学校出来,进入一个小公司做程序员,开发部更应该叫做开发组,只有几个人,组长是从华为出来的. 名叫peter luo.

也许华为的加班文化真的确有其事,peter工作起来挺猛的,晚上加班是常事.在项目出货时,曾随着他加过几个通宵.然而通宵之后,第二天还继续干,因为组里有在其他项目的成员,是没有通宵的,算作正常上班.让一个已经通宵了的人,与没通宵的人一起正常上班,道理上说不太过去.

他的这种工作方法,让我对华为的观感不佳. 所以后面有去华为面试过,而选择放弃.

peter的代码写到⻜起,对我的成长有很多帮助.

但是当年我看了scotte meyes的几本书,对peter写的C风格已经有一些自己的思考,希望完全使用C++的面向对象方式来实现一个项目,并且努力让自己习惯使用面向对象的思考方式.(这就是为什么我写这个小项目时,选择使用C++来实现的原因).

再到后面进入魅族,这才是成长的主进程.


一个人的成长跟个人进入的环境有关.当年刚进入职场,在小公司里接触的人长,成长速度会比较慢,而进入大公司,接触的东西多了,成长速度会快很多.

网上有讨论,如果有时光机,你会对20年前的你说些什么?

但是我觉得,以当年的我, 应该不会接受现在我给他的建议吧. 给之前的我认知范围外的建议,应该也会理解不了.

换个方式思考,如果20年后的我,坐着时光机回到现在,给现在的我一些建议,现在的我,是否又能接受20年后的我给我的建议呢?

因此,人学习的东西越多,越觉得自己的知识浅薄,越是虚心.