Archive for » 2008 «

由于Manager当时给我的进度安排是在这周末完成ComboBox的工作(因为我是实习生,所以也不是特别紧)然后接下来有时间的话就看看怎么处理滚动条。然后在周中的时候我就把ComboBox我这里的部分都结束了,其中Troy提交了一些改动,因为我没有Perforce的权限,所以这些代码我只能手动的把它们Merge起来。在公司里我还知道了很多以前用不到的东西,比如说这个WinMerge是开源的用来对比两个文件是否不同的软件,很小巧方便~以前我一直在用UltraEdit的那个Comparison,不过是收费的。。。来了公司以后我发现正版意识强了不少,在寝室里能不用盗版的就不用盗版的~啊,要是所有人都有这种意识国外的媒体啊政府什么的就不会抓住我们知识产权这一块不放了。回到工作上来~有了ComboBox的经验后,滚动条就简单了许多,只要设计好要录制哪些信息,什么时候把消息发出来,怎么回放就OK了。我觉得现在我已经有一种意识就是写代码不是为了解决当前眼下遇到的问题,而是把以后可能遇到的情况也尽可能地考虑进去,让自己写的代码更加robust~不论是在异常处理还是容错上都会认真考虑~之后Troy大概看了一下我的代码,表扬我写的还是挺工整的,然后教了我一下C#写代码我没有注意到的Convention,比如说代码的初始化风格要统一,不要有的放在定义时有的放在构造函数里;又比如说如果要完成一个模板类,有一个函数必须要用户调用,那可以写成xxxx()和doXXXX()的模式,然后让用户去重写doXXXX(),而只能调用xxxx()这样就可以保证调用次序不被以后的程序员无意或者有意间的破坏了。Review代码真是一件好事,可以从别人那里学到很多东西,也可以看到别人想到而自己没有考虑到的问题或者想法~以后研究生阶段一定要把在公司学到的东西好好发扬光大~全面提高自己的编码能力~

Category: 日记  Leave a Comment

这一周继续在看OWL的代码,感觉,唔怎么说呢~还是有点难懂~不过里面包含了很多很多的模式,因为一大特点就是有非常多的类,大概有60个左右吧,这是运用了模式最大的特征;还有一个就是里面的继承关系并不复杂,主要还是利用组合来代替继承,这也是Design Pattern里面一直强调的~但是这可能造成读起来比较困难,除非对所有类之间的关系有着比较清楚的认识,把类图都画出来~像我就一直纠结于什么时候添加事件处理程序,什么时候把消息路由出来等等架构上的问题,但是又不能总是打扰Troy~来公司10周,感觉阅读代码的能力提高了好多。以前阅读别人写的代码最多仅限于一小段算法的实现,整个程序的架构什么的都没有经历过。CSDN上以前有一个人写过什么xxx源码剖析,结果全是一行一行地分析人家代码在干嘛,这个本事连初中生都会了。。。现在我有经验了,知道了看代码应该先从功能入手,再扩展到整个的架构。而看代码是怎么实现一个功能最好的就是先大概浏览一遍代码,在不太清楚的地方加上断点,然后调试一遍,整个过程就可以了然于胸了。之前看Janus,现在看OWL都是采用这样的方法,感觉还不错~=D然后就是代码的书写风格和水平了。这时候注释的作用就体现出来了,很多时候对于一个函数的命名,两个人可能就有两种理解,这时候要是有关于这个函数哪怕是一点点的summary,都可以让后来人很容易地知道它是干什么的。Troy还曾提过一点就是他一直没有时间写文档。如果阅读代码前有任何关于这个软件的文档,应该首先浏览一遍,文字永远比代码清晰。

至于代码,因为有了Troy的讲解和原来我的Demo再加上自己的理解,虽然刚开始的时候很痛苦,常常不知道要怎么写下去,但是参考一下其他做同样事情的类的写法,还是很容易的就写出来了。本来Troy让我先写录制再写回放,我却先把回放写好了,看着OWL自动播放我的脚本,哇,那种成熟感真是帅呆了~很多程序员都是因为看到自己写的代码跑起来很有成熟感而不断坚持并且获得动力的吧,这个是我们的精神来源啊~

Category: 日记  Leave a Comment

这周开始我正式加入到OWL的开发当中去了。算一算时间,来公司也已经10周的时间了,这10周,一进来我就做了一个Provider的原型,帮忙做了一些Automation的测试,又写了一个小的Utility,其实比起很多同期进来的同鞋已经算是很幸运的了。有的时候和他们聊起来,他们会说,啊呀,我又在fix bug啦什么什么的,虽然修bug也是加入参加产品开发的必经途径之一,毕竟一款成熟的软件,经过了那么多年的开发,基本的框架都已经定型了。这时候程序员的工作就剩下开发新的特性以及修改原有代码的bug~实习生么当然就先从修BUG开始,才能慢慢融入到这个产品中去。而我们Team的东西因为是给内部QA测试用的,而且开始的时间也晚,所以都还没发布呢我进去当然就是帮忙一起开发啦。而且经过了前面三个小项目的接触,我对OWL的流程也有了一定的了解,这个星期就要开始为Combo Box提供监听、录制及回放了。说到Combo Box,本来其实这个控制是很统一的,然而在Inventor里面还愣是出现了三种不同的:普通组合框、WPF写的组合框以及一个自定义下拉列表的组合框,对这三个组合框需要不同的处理~于是老样子,祭起已经很熟悉的工厂方法模式,监听Automation消息~一个Demo很容易的就做出来了。当然只做自己的demo是不管用的,我必须要把代码整合起OWL中去。这就不是一个小工程了~Troy很忙,而Team其他人在忙TER的事情,所以这看代码主要还是得靠我自己。其中Troy花了两个下午各2个小时左右的时间,从录制和回放的角度给我说了一下大概的框架,加上我自己对代码的理解,还是有一点点想法的~不过要让我马上手动加代码进去修改,还是有点难的。。。果然软件设计是项大学问,尤其是在多人合作的时候。。。以前在学校都是各管各的,完全体会不到~哎,软件工程看到这门课还是很重要的啊~

这周一一来Troy就说又想要新的格式化字符串,但是这个C#自带的那种Format又无法支持,于是他说那就先Hard coding到代码里面去,或者自己写一个可以自由输入命令的小东西出来~时间那么紧,我还没有完全做好心理准备,于是就先硬编码后编译了一下给他用,然后我就自个儿琢磨这玩意儿要怎么写。觉得到公司来养成了一个很好的习惯,就是在写代码前自己会在笔记本上写写画画,把这个小块的类图啊,状态关系啊,甚至是流程都画一遍,发现这样在写起代码来确实能够让思路更清晰,也减少很多异常情况没有考虑的机会。这次在写这个自定义命令的时候,我又应用了一个模式 – Factory Method Pattern,不过因为都没怎么写过,有点忘了,后来在Wiki上认真地又看了一遍才开始动手写。BTW,以前一直觉得Wiki其实没有那么神,再加上前一段时墙时不墙的,几乎没上过,来了公司以后才发现,这是个好东东啊,难怪那么多人对它趋之若鹜。说回代码,设计模式的确博大精深,在这么一个小地方运用了这么一个小模式,我就感觉受益匪浅,以后如果要自己添加命令,只需要自己继承一个类,改写好那些纯虚函数,一切OK,以前的代码基本上不需要改动便可以运行,这在大型的软件项目中是非常非常重要的,因为你改动一个地方就可以导致很多其他引用这段代码的地方需要相应的更改,也有可能引入很多的regression。就像上次Troy给我Review代码时所说,我们往里面加东西,一个很重要的原则就是对原来的代码修改地越少越好。接下来我又做了一个我自己加上的需求,tag name那边我加了一个自动提示框,就像Google那样可以根据输入自动给出对应的提示,技术上其实不难实现,就是用ComboBox的下拉框来模拟这么一个效果~这样以后用这个软件再也不用费神去原来的xaml文件Copy/Paste了~在后半周我就开始了对OWL的测试,这也是我毕业设计可以涉及到的东西,

这周又开始了新的任务,我以为Troy还要Review我的Provider的代码所以我可以忙里偷闲一会儿的时候,Troy和我说,要从Miles那里转一个任务给我 — 果然,在公司里很难得会有轻松的时候啊。那个任务挺简单的,是做一个小工具帮忙我们修改Inventor的xaml文件,具体的说就是能方便地修改AutomationID以供接下来的使用。其实Miles已经做了一个原型出来了,能够读文件,解析Id属性,并且能够单个修改,但是还是远远不够,因为我们可能要面对的是大量的修改工作,然而他还有其他工作要做,所以我就揽下了这个活儿~Troy说最好周三就能用,可是我接到任务的时候已经周一下午了~没关系,相信我自己的水平,HOHO~说到这个任务,比较麻烦的就是在界面上面~因为这是我第一次写WPF的程序,还是比较生疏的,这次要用的又是一个比较灵活的控件 – GridView,在怎么动态添加列以及WPF特有的Data Binding上,我花了好大的力气,周二一天就泡在这上面了,本来以为要加班,不过最后很勇猛地在下班前五分钟搞定了~哈哈,还是要多谢Miles,已经写好了很多有用的函数,我只需要调用就好了~虽然和他之前没有过多的交流,不过这或许也能体现出软件工程上面对接口定义的要求?总之周三给Troy的时候他还是比较满意的,后来他又提出要求,说希望能格式化AutomationID的输出~看,客户的需求总是在不断地变,于是做为“软件工程师”的我们只能不断地修改代码,以符合客户的需求。不过这个以前在学校完全没有接触过,在学校做课程项目的时候,我就是自己的客户,哼哼,什么要什么不要全由我说了算,做出来了就拉倒,根本不可能涉及到需求变更的情况,这也是公司的实际情况和学校的理论情况的差异吧。这里面涉及到的代码重用是我一直跃跃欲试的area,不过具体到这次的变更,其实还没有那么高深,加一个对话框再改一处函数就可以了~很轻松地解决掉以后就到了周五了,例行性地偷懒,于是这一周就结束了。