看到水木上的毕业logo,才想到又到7月了,时间过得真快,一眨眼出校门已经两年了,个高了点当然也变得更帅了:-),也该回顾过去,展望未来了。
2002
7月,毕业了,打算考研,掰手指算了一下,还有半年,打算玩一个月,学5个月。
8月,计划有变,打算玩两个月,学4个月。
9月,时间还长,55开,打算玩三个月,学三个月。
... ...玩到了:
2003
1月,考研,轻松愉快的度过,糜烂了半年的收获就是:4门总成绩109分,老妈一直问我这是不是一门的成绩... ...。
这个时候,PicView(PhoXo的前身)我已经开发不下去了,不是我对它失去了兴趣,而是面向结构的程序架构制约了我,LButtonDown/MouseMove中过于庞大的switch语句经常把我自己都搞糊涂,而且工具条上每添加一个按钮这个switch就会肥上一圈,调试起来更是恶梦。不过当时我并不清楚这是结构上的问题,而是简单的认为软件大了都这样。
然后,找工作,先去了一家日本公司,干了两天就溜了,太压抑了,除了工作一天说不了几句话,把我这样JJYY的人放在里面跟投入大牢里没两样。
有人告诉我,相遇,从来不是偶然的事。我从那家日本公司辞职的当天,就赶上金山在CSDN上招聘,在大学时,我就很向往去金山,先前也投了简历,但没有回应,我决定再试一次。面试,录用。一周后...
3月7日,这是我真正意义上的第一天上班,翠宫饭店7层(好怀念啊),WPS研发组。
初出茅庐的我,立时就想开始干活,不过得到的任务却是看代码。嗯,我至今还记得第一次打开WPS工程时那迷茫的感觉,200万行代码,光打开就要半分钟(P4-2G),class view里的类象蝌蚪一样密密麻麻...看了一天,象所有初看大型OO程序的人一样,我感觉程序中没有真正的实现代码,每个对象都把请求委托给了别的对象,一个请求在层层委托中越来越细、越来越小,以至于只追一条线的话,到最后只会追到一个只有几行的小函数里。
生活就像一盒巧克力,你永远不知道你会拿到哪一块。
我想我会永远记得2003年3月27日的那个下午,和那段对话:
DongBo:你在做什么?
Me:嗯...我在想怎么实现这个窗口。
DongBo:窗口???,你怎么会认为这个是窗口,这明明是对象啊!
对象?对象是什么?好像以前在哪里听说过?一个下午昏沉沉的,似乎有什么东西想抓却抓不住,正好当时组里一大高手万松下班和我同路,向我介绍了很多OOP和DP方面的东西,还把JHotDraw推荐给我看。我终于推开了面向对象的大门,在我学习C++三年后,用带类C写了十几万行代码后。(开化有点晚,不过这些代码积累却让我迅速理解了一些设计模式。)
4月
看过一些时候WPS代码,设计模式也看完一遍了(其实当时真正理解的只有command和state模式),不过这已经足够了,打开PicView的工程就让我不舒服,它的结构如刺在喉,不改不快,最后我决定重写它,代号ArtPrider(也就是现在的PhoXo)。
4,5,6月
SARS来了,走在街上都看不到几个人,再添几辆警车就更像《生化危机》里的情景了。不过我只有5.1休了两天,WPS2003的开发进入白热化,经常加班,不过我倒是很开心,几乎每天我都能从WPS的代码里,从同事之间的讨论,询问中学到东西。晚上回来躺床上仔细想,想通了就加到ArtPrider中,现在想来真佩服自己,一直兴奋的写代码写到2,3点,一个哈气都不打,第二天8:00又背包去上班。我都怀疑自己是不是不小心吃了诺龙了。
有时候我想,真感激上帝这么眷顾我,让刚毕业的我去参与这样一个大规模软件的开发,在自大的我周围安排这么多技术高手。
现在想来那些日子真是有趣,整天戴着遮住半张脸的活性炭口罩(你以为这玩意说买就买,限量供应的),公车电梯里看人跟看细菌似的,咳嗽还得忍住,要是不小心打出来,你就会看到一个以你脑袋为圆点,50米半径的真空地带。
7,8月
公司不是很忙,我有了一些时间去做ArtPrider。
8月30日,又是一个难忘的日子,WPS2003发售,王府井,几百人排成长队,看到来来往往的人拿着自己的心血,心中的喜悦忐忑期待难以言语。也许是从那时开始,我特别关注软件的易用性,“不求最好,但求好用”是我做PhoXo时给自己的唯一要求。
8,9,10月
公司开始linux项目,我有机会结识了大量开源的软件(sf.net现在是我的IE默认首页),我的眼界又宽阔了许多,通过大量阅读开源的代码,学到了很多设计实现的东西。这当中,OpenOffice,GIMP给我的影响最大,PhoXo中60%以上的特效,蚂蚁线都是我从GIMP里学来的。现在,空闲时看看GIMP的代码已经成了我的生活习惯。
JHotDraw是另外一个对我影响很大的软件,gamma老师的大作,里面使用了几乎全部23种DP,但是,它太复杂了,一年多后的今天,我也没全部看完。
11月
ArtPrider越做越完善,我决定把它做成共享软件,在苦思半个月,想了几十个稀奇古怪的名字后(我现在还留着呢,什么MoonPhoto,PhotoOmega),我决定定名PhoXo(当时google中只能搜到3个相关链接,还全是收费的黄色链接,我验证过了,没注册啥也看不到^-^)。
11月5日,没有剪彩,没有礼炮,PhoXo 1.0发布了,这是我第一次尝试制作共享软件。以前做的东西只流传在编程这个圈子里,因此很多东西(特别是文档)做的马马乎乎,大家都是同行,应该看得懂。当面对普通用户时,突然多了一种责任感,一个功能,代码早就写好了,但是如何和用户交互我得考虑很久,多次修改,比如:“剪贴板粘贴”到底是贴到左上角还是中间,
还是置于选取区域中间。(一开始我就把PhoXo定位到易用上,因此即使在6个版本后的V1.5中,也没有一个调节参数出现小数,没有一种效果的调节参数在三个以上。)
V1.0几乎没有反响,骂的人都没有是一种悲哀,因此我疯狂的做了一个月,尤其在文字输入的易用性上下了很大功夫。
12月
V1.1发布了,反响不错,注册机一天后就出来了,我都不知道是高兴还是生气好了。
2003在钟声中结束了,不知是不是因为本命年的关系,反正过的平平安安,技术上三级跳,PhoXo反响也不错(虽然当时还没有一个人注册),在吞下几筐中药后,也没得什么SARS,禽流感,倒是腰带又换了条新的。
2004
2004过了一大半了,但给我的印象却远没有2003深刻,除了和组里的XDJM们的两次出游,似乎再没任何印象。
几箱啤酒把25岁生日过了,老妈为我的终身着急了,今天问张三的女儿如何,明天说李四的闺女不错,不过我已经超然了,啥美女啊,都是红粉骷髅:-)
PhoXo的架构先期设计的很好,此后就是按部就班V1.2,V1.3,V1.4,V1.5,注册的人也多了,我的干劲也很足。2004年6月20日,PhoXo图像处理内核在linux下编译测试通过,一个值得纪念的日子,PhoXo向着跨平台迈出了一大步,
2004-7-26,考虑再三,我还是把PhoXo的核心开源了,我从开源社区得到了太多,学到了太多,没有理由不为它做点贡献,当然,免不了一通吹嘘。(我发现自己很适合加盟星宿派^0^)
开发总结
两年了,看过的书不及其数,有Java的,C++/C#的,playboy的,但给我留下印象的只有两本,而且不是普通的印象,是那种融入血液毕生难忘的印象。他们是:
《设计模式》
《敏捷软件开发》
(当然,还有一些不错的书,只是印象不深,比如:重构,大规模C++程序设计)
《Design Pattern》是迄今为止对我技术影响最大的一本书,他完全重构了我的程序理念,设计模式是那种点石成金的技术,它可以使玩具变成软件(PhoXo的演化即是如此一样)。
很多人说设计模式很难学,这不全错也不全对,因为它是经验的结晶,因此它要求你的代码积累足够的多,就像乾坤大挪移一样,你的代码积累(内力)越多,你掌握它也就越快,理解也越深,十有八九你已经在你的代码里用过它了,只是你不知道。
我特别欣赏《设计模式》前言里的这段:
一旦你理解了设计模式并且有了一种“Aha!”(而不是“Huh?”)的应用经验和体验后,你将用一种非同寻常的方式思考面向对象设计。你将拥有一种深刻的洞察力,以帮助你设计出更加灵活的、模块化的、可复用的和易理解的软件—这也是你为何着迷于面向对象技术的源动力,不是吗?
最开始做PhoXo的时候,我只应用了两种模式,现在,PhoXo中已经使用了十几种模式。它所带来的好处是巨大的,PhoXo V1.5一共只有2万多行的源码,程序中几乎找不到一段重复的代码,因为耦合性的减小,可维护性和扩充性得到很大提升。
如果你在学设计模式或想学,我觉得我的库:ImageStone 是一个相当不错的入门教材。
2004年7月27日 付黎 于珠海
|