work撰写的日志

两年

  1. 早上起来在看日期,发现今天正好是整整加入FreeWheel两周年。
  2. 两年过去了,FreeWheel已经成为我有史以来呆过最久的一家公司,我有信心继续创造纪录。因为理由与一年前一样。OMG, I LOVE US!!!
  3. 这一年收到了更多猎头的电话和邮件,最终还是都婉拒了。因为工作了4,5年才开始明白一时的薪水多少与职位高低并不是证明工作好坏的全部。还有一些东西甚至更重要一些,譬如工作的氛围环境,比如公司的前景与机遇。FreeWheel有着良好的前景,有着一群genius做同事,想想,都觉得很满足。
  4. 还有很多画面,总是值得记忆的,譬如:
  5. 公司两周年的时候在海边开篝火晚会,大家手拉手跳着舞,喝的醉醺醺的,跳的歪七扭八的,但你会觉得真的很美好。
  6. 每个月都会有一个大蛋糕给这个月生日的童鞋祝贺,看着大家边切,边吃,边聊,边笑的,你会觉得很快乐。
  7. 有时候新产品/版本上线的时候,看到项目组的同事废寝忘食,下了班继续在fix bug,以至于老板把签名改为”Hey…Try to leave office before 7pm, everybody!”。你会觉得很有爱。
  8. 这一年,工作任务有了些许变化,只写了很少的ruby code,却明白了更多BI,数据挖掘,数据库优化的东西。
  9. 参与了一个全新的项目,从中学到了太多太多。项目即将正式发布,希望一切顺利,因为它包含了每个人的汗水与劳动。
  10. 这一年,工作还打开了我的很多心结,比如对于沟通的认识,对于软件价值的判定,对于敏捷的思考,对于设计的想法。都开始有了很多答案。
  11. 开始学着从一个比较高的角度去看待问题,解决问题。心中谨记着Big Picture.
  12. 昨天看老爸的QQ的签名写着“拼了老命也要把公司做强做大。” 突然也很想把自己的签名改成“拼了小命……。”
  13. 嗯,希望自己来年能发挥更大的作用和价值,希望FreeWheel继续快快增长,健康成长哈。

说说项目中文档的那点事

我觉得这篇写不长,因为其实关于文档的一些理念基本都是那种说着很简单,做着很难的。

文档多了好?

记得以前看CMM的时候,很强调文档的重要性。这是为什么咧?因为CMM是典型的软件工程理论嘛,而软件工程怎么来的咧?就是从建筑工程学来滴嘛。君不见,黄河之水天上来盖栋房子得有多少文档啊,来描述这个建筑的架构,每个房间的布局。这啊哪的,反正肯定很多就是了。都是设计师仔仔细细设计规划好弄好了,然后由俺们最可耐滴农民工一砖一瓦的,蹭蹭的,一栋building就出来了。所以CMM挺强调文档滴,整个软件周期,都要有这文档那文档的,堆积如山的。而实际效果呢?用猜的也知道肯定不怎么好了,不然现在人都表当自个Agile,而不说自个CMM了呢。

好吧,那你说这是为什么呢?我来告诉你。如果你建个大楼,建完之后你会没事拆着玩么?比如把18~20楼拆了,换个盖法。或者把楼里的钢筋全换一遍,换个回扣给的工作的牌子。你不会吧。所以你盖好之后,你那份文档描述的就是你的building,所以可以从下水道偷偷溜到你楼顶。所以这份文档是即使的反映了这个building的结构与状态的。

反过来,看软件开发。你能保证你写完之后的code有几天不被改?重写,重构,bug fix,需求变更。这些常见的活哪个不是要你改code。而你弄了那么多的文档,最后发现和code完全不一致了,那你说这效果能好么。文档说CLASS A是干这事的。结果一看code发现CLASS A根本就不是干那事的。当然,也可能你根本已经找不到CLASS A这么一个玩意儿了。

所以说文档足够多并不一定好,因为软件开发中,变化是从头到尾的。所以如果文档的变化跟不上项目的变化,太多的过时信息。最终非但不能帮助项目,却还会拖后腿,造成更多的怀疑,浪费经历。

少就是多?

爱扯Agile的肯定都说过这么一句话:代码即文档。

嗯,如果我没记错,好像这句应该是敏捷宣言中的?(刚查了下,原话和我记性不太一样,原话是:Working software over comprehensive documentation.)就是说如果你的代码写的足够好,本身就足够说明很多问题(比如通过起带有意义名字的变量,比如使用元数据编程,比如加恰当的注释)。那么就不需要和外在另外一个地方写场面大论来描述代码是怎么回事。

其实这方面我觉得很有代表性的就是javadoc和Xdoclet。javadoc也影响了很多后来的框架和语言啊。因为做的确实不错。通过在注视中加入一些符号,可以自动通过程序来抽象出注释,组成有意义的文档。这是多么automatic的事情。而且特别是你的注释和你的code在一起,就减少了很多两遍对不上,描述过时这类的事情。Xdoclet当然也是关于这方面的一个工具吧。

嗯,还有元数据以及DSL这种编程方式也在很大程度上为代码可读性做出了优秀的贡献。

比如Rails中,在Model之间声明关系用的belongs_to, has_many之类的关键字(当然,其实他们不算关键字,也是方法,只是表现形式cool了些)。是多么的简洁,有力,聪明,异动啊。

所以我基本上很赞成,因为大科学家爱因斯坦都说简洁性就是一种美。因为俺觉得懒惰的程序员才是好程序员。如果代码就够清楚的,或者通过代码就能生成出来很清楚的文档,那么鬼才写文档。当然,其实这观点是偏激的。因为我们确实需要文档。因为代码只能从微观角度看问题,即便你给我一个SDK文档,我还是很难看出你当初都是为什么这么设计,那么构造之类的。So,我们依然需要文档。但是要强调一定,我们需要的是高质量的文档,正确的文档。因为Diane说过:方向很重要(嗯,某次开大会说滴,很富哲理啊)。文档都是错了,就算你看个三天三夜,你也只能越看越错下去。所以,文档只有在正确的时候,才具有很大的重要性。如果只是过时的玩意儿,那么不如放到回收站吧。

The End

到现在,观念应该清楚了,文档其实还是需要的,但是我们如何去写文档呢?怎么使得文档是正确,有重大价值的呢?

嗯,我又发明了一个小所写KISSS原则。全称是:Keep it simple, stupid and synchoronous with your project. 嗯,别小看后半句噢,其实是一件非常难滴事情呢。因为锻炼你的写作技巧,尽量使得文档简洁又易懂,也许需要一些时间的锻炼,都能达到。但是synchoronous with your project需要的可是你长期的坚持啊。如果你的项目中某方面的改变牵扯到一些文档,会造成一些文档的过时,那么不要犹豫,立即更新它吧。真的不骗你,bad document的味道不比代码中bad smile造成的伤害小多少。

好吧,最后的结论就是,尽量写具备自描述能力的代码。如果某些时候,必须要写文档才能解决问题的时候,记得随时更新它。使它和你的项目保持同步。

A New Start, A Better Start!!~~~~~

    明天,我就要加入一家新的公司,新的团队老。在家憋了3个多月,终于放出来了。
    从此以后,主要滴开发语言将由单纯滴Java,变成Rails和JavaScript。终于摆脱了繁琐滴JavaEE,即将面对滴是一个全新滴未知滴世界。我对此充满了好奇。
    Rails现在可以说走到现在,已经证实了自己,被越来越多的单位与企业用作商用。而JavaScript由于其本身的广泛性,以及AJAX的推动。已经被很多人看成了the next big thing。我对于解释性语言滴兴趣也越来越浓。相信这份工作能给我带来很多的乐趣,并使我成长。
    今天去了趟家旁边的书店,本来打算买《Ruby Cookbook》,结果刘同学说公司已经有了,关于这方面的图书以后都可以请求公司提供。嗯!~~~~~~这个消息真滴是太好了,我一直很希望呆在这样的企业。因为能让自己感觉到开发人员受到了重视。在书店逛来逛去,想找《AJAX模式与最佳实践》,可惜没有。然后挑了两本别的《Beyond Java》和《Head First设计模式》。后者是什么珍藏版,其实就带了一副海报而已。海报里面画满了各式样的模式,以及超浓缩但确不太难懂的概括。
    给PSP充满了电,COPY了一些电子书,音乐;给准备拿到公司放着的书写上了自己的名字,放到了包里。
    嗯,好几个月没有去工作了,现在的心情仿佛跟以前放暑假盼着开学般。期待着新的同事,团队,以及要做的事情。
    我相信对于我来说,这又将是一个新的开始,更好滴开始。我会认真滴工作,并为着自己的理想加倍努力着。

PS: 最后滴最后,我红着粉嘟嘟滴小脸,再次感谢刘同学滴推荐。8然,像我介种高中毕业证都米有滴小孩,怎么能找到自己满意滴工作咧。

A Beautiful Day

    周一下午,接到刘同学公司的电话面试,简单聊了一些,感觉还不错。然后互相加了MSN,对方要求我做一个DEMO。当时充满乐观滴说了一天就OK,结果真正做的时候发现了很多困难。然后延期,直到刚刚,终于做出来了自己稍微满意的地步,提交了。嗯,长长了舒了口气,我要睡个安稳觉老。

    任务就是做一个页面,里面有一些AJAX方式的小逻辑。要求用ror和jquery,ror虽然没有实战经验,但也学习了一段时间了,下过一些功夫。可jquery,貌似在很久以前就看过一眼,基本上属于只听伊人声,从未见伊人面的境界啊。然后恶补,做技术探索。这个任务还要求有拖拽效果,于是想想基于jquery的js库什么能做到呢。前几天刚看了下新发布的jquery-ui就有这个效果,嗯,那就尝试用它吧。还好,不是太难,不过文档实在太少,最后在googlegroup里找到了答案。
    任务上明确说了要做一个分页效果,一开始没当回事,后来才发现麻烦大了。哎哎,默认的paginate达不到我要的效果滴。结果就google啊,try啊。尝试will paginate插件,结果按照找到的文档做,发现依然有问题。最后实在崩溃,决定自己写算了。然后找了个示例代码,简单改吧改吧,结果就OK了。
    最痛苦滴事情莫过于JS调试了。嗯,像俺这种做ServerSide好多年滴愚人,突然间做AJAX效果,还不是以前自学时玩的那种巨傻的演示,所以实在是糟糕透了。bug满天飞,气的我是满头大汗啊。还好,凭着我坚定滴信念。彪悍的人生全用alert给调完了一遍。最后测试一圈没问题之后,心跳终于恢复到了平均值。然后开始想念以前呆过的那些公司里做前台JS的同事,好想立刻飞到他们面前,深深鞠上一躬:同志们辛苦了。
    自从把这个blog升级到了MT4之后就开始非常注重web standards,这次做这个任务一开始,也就早早的把table换成了div和span。可是,换标签易,写CSS难啊。像我这种巨没审美滴人最后凭借Dreamweaver还是战胜了重回table的诱惑,至少给页面添加了个大概模样。然后突然间感慨,1个月前装上windows是正确滴选择,不然哪有dreamweaver相助咧。嗯,看来过几天等Ubuntu 7.10发布后,我也不能把windows卸载了。关键时刻,上面那些linux没有的软件还是非常重要滴。
     嗯,码了这么多字,发现窗户口的小鸟都开始JJYY了,听的我神清气爽。今天应该是个好天吧。希望白天阳光晒的足足滴,好让我美美滴睡上一觉。
     虽然这会感觉有点累了,但是心里确其爽无比。因为在短时间内学习了新的技术,还做出来了小东西实在够开心的。所以说,人,还是有压力才有动力啊。这两天学的东西,就比自己学一个礼拜的进步要大。嗯~~~~~还是快点上班吧!~!~!~~~~~~~,不然脑子都生锈了。阿门,如来,耶稣,观世音,真主啊,快点赐我一份好工作哈。