工作第二年

这个周末就是我正式工作两年的日子了,第二年过得稍微有些起伏,晚上写了一点总结。但是刚才读了一下觉得不太满意,也不太合适发出来。这样,即将跨入三年级的时候,我就改改风格谈谈愿望吧。

1. 把日常工作做好,积累技术,流程,项目管理的经验
2. 业余时间拓展周边领域的知识:数据挖掘,数据分析,可视化方面
3. 希望能主导去做成一点有始有终的事情
4. 希望不久的将来能参与一个志同道合齐心协力(self-motivated)的团队一起做好一个产品

最近的一些想法

最近有机会带着两个弟兄做一个老产品的技术改造。起因是测试发现产品的并发性很差,反馈回开发部门作下一个版本的改进。一查代码发现在网络通信时,原本异步的NIO,发送线程居然被强行加了wait同步等待远程返回。线程不能被释放,前端的请求被排队,吞吐量根本上不去。

这是root cause,其实进了代码里面的问题更多。于是产生了对这种feature driven development的怀疑。我曾经觉得列出 feature,做好代价估计,然后大家各自去实现的方式很理性很可控。如果宏观地看,黑盒地看,这种方式对项目管理很友好。但是最近看这种方式下开发出来的产品,问题还是很多的。当开发人员面对一个feature却缺少对产品整体架构的足够了解,他很容易倾向于用quick and dirty的方式\打补丁的方式解决问题,而忽略新feature对架构整体的挑战。长期下来,软件的功能不断演进,架构却停留在早期,维护成本越来越高,神秘的陷阱越来越多。这时,每次发布都要通过测试部门的蛮力测试,这个过程中除了修bug还要克服无数的invalid的bug。What the hell!!!

另一方面,从开发人员的角度,我认为Don’t repeat yourself是每个程序员必须牢记在心的编程行为准则。无论技术好坏,经验是否丰富,只要坚持这个原则,程序员总会趋向于做一些抽象做一些设计,我想是不会写出太让人发指的代码的。最近查看遗留代码,里面实在是太多copy/paste了。对新增的功能,甚至通过重载加copy/paste来实现。如果不能怀疑同事能力的话,只好认为这是工作态度问题了。管理者往往是不会看到这么细节的问题(其实是严重的问题)。

面对这样的系统,我最初的想法是通通推倒然后模块化。虽然考虑了工作量,可是尝试了一周还是发现老的基础根本无法剥离开,多年前的设计者根本就没有考虑模块化/解耦合的问题。有句话说得好: if you cannot split it, you cannot scale it. (对数据显而易见,对程序其实也一样)然而放弃这么大规模的久经考验的代码又不现实。这周开始又只好改变策略小步快跑,虽然不治本,但是就这个阶段来说,看到改造的效果对我们这个小组意义更大。这是在内心的洁癖和现实的局面间做的不难的取舍。

尽管困难重重,还是争取抓住这个机会能对自己有个提升。需要驱动弟兄们接受和实现自己的想法,和自个一个人闷头干是完全不同的。

Exaile sound menu integration

Sound menu indicator was introduced in Ubuntu Maverick(10.10). User can control playback from this menu, and view current track information.

The control is based on mpris spec 2.0, which is a common specification of controlling media player with dbus. To enable sound menu support, media player should implement mpris 2.0, and register itself with libindicate.

So this week, I have been working on an exaile plugin to support sound menu and finally got a workable version.

Screenshot of exaile sound menu

The code repo can be found at github:
https://github.com/sunng87/Exaile-Soundmenu-Indicator

First Week

这周是加入新公司的第一周,一切从新开始。这已经是两年里的第三家公司了,这个嘛,哎,比较坎坷。

因为长得比较苍凉,工作的时间又不长,大家都问你是研究生毕业吧,心里估计还有几分揣摩:这位兄台肯定是越挫越勇,不弃不馁,复读多年的。否定答复后,大家还会觉得我可能比较坎坷,读书比较晚,最后还要追问一句是哪年的。得到答案心中一凉,87年的都长成这样了,岁月不饶人啊。其实我没那么显老吧。

公司的东西全部是封闭的,而且自成体系,所以基本上是从头开始了。封闭的副作用就是找人的成本比较高,反倒也促进了公司有完整的培训体系培训资料,新人入门也算是有章可循。周二的培训课程一下午三个小时,简直就是找回了大学上课的感觉。恰好会议室门口有个饮料机,一倒饮料就嗡嗡作响。这倒好,昏昏欲睡的时候,饮料机突然响了,有人说了打下课铃了,众人立刻精神百倍。原来上大学的时候下课就失眠的不只我一个。

如果说公司有什么的特点的话,就是杯具特别多。你不用带着杯子走来走去,每一层楼都有大量的马克杯,统一印公司logo,用完只要放到回收点就可以了。而且公司特别喜欢杯具,周五临下班,又收到一个发杯具的通知。。。

另外中午散步,发现很多人都走一条小道,我跟过去绕到几座楼后面,简直就是豁然开朗,仿佛看到桃花源一般。浦东软件园三期后面有一个规模很大的人工湖,还有小桥流水,中午散步还有波光粼粼,可以租脚踏船!这湖藏的很深,你不绕到湖边是根本看不见。想想中午吃完饭散步、去湖上划船,那是何等的惬意啊。而且盛大文学的办公楼窗户就正对着湖面,在这样的落地窗前面工作,那种感觉!想起以前,同样是一家集团,工作环境的差距怎么就这么大呢。

同事谈论公司的时候,总是会用经济危机前、经济危机后来区分。比如危机前,培训材料都是打印成书的,危机后,大家就都看看pdf得了。作为一个和经济危机一起走上社会的人,我是真的很无奈。

Update

  1. 搬家了,搬了一条街,从马路这边搬到马路那边。从二楼搬到四楼,告别了潮湿发霉的小屋,换了新环境迎接工作第二年。本来想搬出这个玉兰香苑,但是看了一圈不是太远就是太贵。都说现在是不炒房价改炒房租了,别的不知道,反正我原来那屋房租就涨了200,而且我搬出去那天就租出去了。
  2. 妈妈来上海,晚上可以一起玩桌游。妈妈对卡卡松还挺感兴趣的,我们一开始玩基础版,然后加河流扩展、旅馆教堂扩展。卡卡松绝对是家庭娱乐的好工具,各位常年在外的童鞋休假回家可以带一个和父母一起玩,调节气氛,增进和谐,居家旅行,必备良方。
  3. 周五盛大创新院,人间网介绍mongodb实践。人间网的用户不多,数据量不大,mongodb用来存储timeline里的status id,至今有不到900M的数据和900M的索引。交流活动持续一个小时,最火爆的环节是Q&A。人间网用mongodb的经验也不是非常丰富,很多问题也解释不清楚,最后多亏了我们组一位上海程序员界的新星救场,除了解决了四面八方有意义无意义的问题以外,也引来了全场的叹为观止,以至于都有人说这是SDO的人嘛。其实不完全是,其实人家才大三。
  4. 工作一年了,下周安静下来总结一下吧。

The post is brought to you by lekhonee v0.7