Category Archives: 打工日记

发布pFind 2.1 Beta 2

  欢迎大家访问pFind Studio官方站点,包括软件简介、用户手册、演示视频和发表论文。稍后会提供pFind 2.1版的注册和单机版下载。我的RCM论文也在网站上全文公开,欢迎多多引用

  pFind 2.1颇有突破,接下来几天的blog,总结一下这半年的经验。今天先说第一条:建立风险识别和控制机制。

  去年“软件开发2.0”大会,晚上参加胡百师主持的“项目管理”VIP沙龙,现场有不少项目经理和架构师,讨论话题很多。胡百师建议:“除了Todo List和Bug List,项目经理手里应该有一份Risk List。”

  插话一下,那时正是pFind 2.0压力最大,进度拖延,BUG丛生的阶段。偷闲参加“软件开发2.0”大会,跳出来换换脑筋,从技术架构上,从项目管理上,从产品设计思路上,彻底反思了之前的工作。除了本篇BLOG讲的软件工程问题。再举个技术上的例子:听Baidu的前任总工程师的讲座,谈到一个检索加速的案例,他随口说了一句: “大家都能猜到,这是倒排索引的设计出了问题”……回到组里再听ly重构索引的ppt,意识到必要性,马上把这个Feature加入pFind 2.1的Road Map。

  跑题了,回来接着说。4月pFind 2.1启动时,我在Google Doc建立项目手册,专门加上了“风险识别和对策”一章,列出各种想到的风险,按重要性进行排序,然后一一填上预防措施,还有最坏情况下的取舍方案,然后每周跟进。

  可能项目启动那天是黄道吉日,最让人睡不着觉的几条,都没真正造成威胁。进度比预计顺利得多。还有一大堆惊喜。

  俺的成功经历实在不多,尤其是这么完美的比赛过程,所以难免有些迷信。有些运动员总在关键比赛前换上同一双球鞋,俺也决定以后抱着“Risk List大法”不放手了

  我猜我的合作伙伴可不喜欢这样,因为这次开发我可能根本没干正事,就是忙着扮演一个政委、牧师或居委会大妈,不停地骚扰大家:时刻在人家耳朵边上唠叨一些政治正确的废话,比如“复用接口上移,复用功能外抽”;逼着每个人修改变量名和类名,加空格和缩进;像个秃鹫一样在别人工位后面露出头:“嘿……没事……就是……那个……你的代码还没上传到SVN上呢”;每过两三天就发一次邮件,强调里程碑和Bug List;在别人最忙的紧要关头,要求双人编程和code review……

  Joel on software说:“开发人员把不务正业的程序经理拿来当早餐吃掉”。老实说,绝对是因为ly、hchi、lqliu这帮家伙太神奇,折腾出好多变态的成果来(嗯,早就等着拉2.1出去吓人)。我这个所谓“产品经理”其实是蹭饭的角色(更喜欢临阵杀敌)。《最后期限》里说:“你可以不雇我,但一定要考虑一下我的团队,他们真的很棒”,Bingo。

停BLOG14天

  按进度计划,我们会在7月1日发布pFind 2.1 Beta 2,同时pLabel、pBuild和pScan也各自发布新版。这是重要的里程碑。也许是我进入生物信息组3年以来,最重要的一个。每天都感觉在不断接近“把Mascot打得满地找牙”的理想。组里打算为上半年大规模工程开发圆满完成好好庆祝一番(庆祝的事情交给我筹备,可我现在一点心情都没有)。

  未来10天,Todo list上还留着不少待处理事项,好多麻烦搞得人睡不好觉。感觉自己变得敏感易怒,刚刚还犯了一次偏头痛。

  需要集中精力,把pFind 2.1发布搞到尽量完美。所以不得不停BLOG两周,不好意思。

  那么我们7月5日再见。到时候我会邀请蛋白质组学方面的朋友试用pFind 2.1。

准备拽着2.1怪兽出去吓人

  刚刚改进了pFind 2.0的N端可变修饰生成的递归部分的代码,发布2.0.003补丁。

  五月份主要工作就是用pFind 2.0和pFind 2.1(流程2)进行大规模的伴随测试。经过对答案,两者都修正了不少BUG。pFind 2.1 Alpha 2估计会于下周一19日发布。我们会带着2.1去用户那里进行Beta测试,这比原计划提前了将近10天。

  fy领导的pFind M版也有进展,M是面向未来的版本,已经实现了对ETD的支持,多母离子窗口等梦幻特性。马上就要展开M版和2.1版(流程1 )伴随测试。

  按照计划,6月发布pFind 2.1 Beta 1。到7月底,在至少两家生物实验室完成Beta测试,8月8日,正式发布pFind 2.1的final release,“奥运献礼版”。另外,pFind 2.2也会很快着手,预计在12月1日发布,这就是这么多年传说中的集群版。

  最近压力很重,hchi昨天请病假,我还一直欠着pLabel和pScan的设计审阅和双人编程没空展开。不过也很有成就感,pFind 2.0陪着pFind 2.1跑了接近百万张质谱数据,每张谱、每个候选肽、每个打分、每个EV值……一直精确到小数点后五位,确保完全一样。有一次,18万张谱里只有1张不同,结果是1.000007对0.999998,但是hchi穷追猛打,一口气追下去,最终修正了一个很隐秘的BUG。

  pFind 2.1 Alpha2 目前还没有界面,8万行C++代码;pFind 2.0经过大规模整理删除,11万行C++代码;正在彻底重写的pLabel 2万行C++;等待大规模重构的pBuild,2万5千行C++;pScan接近1万行C++。这些代码都是在将近18个月里完成的。

  接下来这个夏天,拽着2.1怪兽出去吓人,把Mascot打得满地找牙。

冰激淋和B/S结构

  大一在jiuqi打工,喜欢带着冰激凌去找oyy,总架构师,他的屋里有舒服的空调和沙发。oyy爱吃冰激凌,但没几个人知道,大概是因为喝咖啡才符合程序员的职业形象。oyy很和 气,所以我经常在沙发上放肆地手舞足蹈。(曾经竭力模仿身边的职业程序员:昼夜颠倒,喝很浓的不加糖的咖啡,染红色的头发,甚至一边点鼠标一边心不在焉抓 起杯子喝水的神态……直到有一天发现oyy偷偷去买冰激凌,哈哈)

  当时刚学会CGI和ASP,觉得会有越来越多的软件采用WEB方式。身边的朋友说不明白,决定有机会问问oyy的看法。可是没说两句,老板闯进来,把我客气地轰出去:总架构师应该做些更重要的事。临走oyy说“有意思,但我猜不会很快变成主流”。

  跑到身份不符的地方胡闹,被老板当胸抓住,还有什么话好说,回工位老老实实写我的ETL代码,这才对得起薪水。

  没过多久,在展会上见到用友的新一代ERP,完全使用Web UI,宣传手册里有个新鲜的名词叫B/S结构。

出色的软件工程师什么样?

  最近一期《程序员》开头有篇关于招聘的经验,第一条要求就是“对技术细节有激情”,赞同。其实也是老生常谈了。记得还看过一篇国外文章,提到很多网络创业失败的原因在于,发起者是不了解网络和软件技术的商人,没有接触过优秀的职业软件工程师,甚至根本不知道出色的程序员和架构师应该是什么样。他们仅仅想找人把自己的idea实现出来,这就注定招到的人没有判断和反馈能力。Google的招聘邮件说,“技术天才是喜欢扎堆的物种,别让哪怕一个二流货色混进你的团队”。

  类似的事,我们身边每天都在重复上演。作为老牌“人贩子”,我从大学二年级开始参与各种推荐、面试和考核。总见到招聘者出于各种原因(比如资金、关系、性格、印象、说辞)选择了不合适的人,给未来挖下大坑。

  《程序员》还有一篇MMORPG架构师的文章,里面提到“赞成某位同行的单线程多进程思路”,一看就知道说的是云风。文章提到“分布式对象系统VS自定义协议”的选择问题,不过他坚持认为,分布式对象系统是更好的选择,专门提到了ice。也许他参加了SDChina2.0,搞不好,我问云风为什么不考虑ice时,他也在场。

  一直感觉我和云风很像:年龄、经历、爱好和技术观点。云风刚发了一系列回忆职业生涯的BLOG,看了以后这种“相像感”更强了(这个,往牛人身上硬扯,实在有点傻)。“没有哪个程序员的代码一开始就能写的成熟稳健,我们都经过幼稚的年代”。选择太多,很多人无法坚持工程技术的积累,过早改变了职业生涯的方向。狐狸和刺猬最终谁会赢?

验收通过

  憋了好久,今天出来吓人。刚刚抄送全组一封邮件:

各位:

  pFind 2.1 Alpha 1版刚刚通过验收,代码上传至SVN。测试性能大大高于计划指标,我们在短短4周内创造了奇迹:

  • 彻底重写内核引擎,15个模块,近三万行C++代码,开发中规范执行code review或pair programming;
  • 完整实现了两种不同的鉴定流程,其中流程2与pFind 2.0的鉴定结果进行了仔细对齐验证;
  • 在shark服务器上,对等条件下,鉴定速度是pFind 2.0的3~5倍,接近Mascot;
  • 流程1和流程2均初步实现多线程,4核机器上4线程比单线程方式加速比接近2.85;
  • 创建索引速度有了接近百倍的提高,大大超出SEQUEST建索引的速度;
  • 已测试的索引规模,达到pFind 2.0容量上限的10倍,也超出SEQUEST索引规模上限;
  • 移植到Linux下,为将来和曙光、龙芯的合作打下基础。

  感谢hchi、leo和llq的努力和热情。这是一次接近完美的开发经历。祝大家假期愉快。

joyfire  2008.4.30        

  从上午的述职报告开始就不断有人问,哪些招数带来了如此明显的性能改进?其实都是纯粹的工程手段,而算法流程方面并没有应用激进的创新思路,基本沿用了pFind 2.0里的成熟方案。

MYSQL和鲨鱼

   MYSQL被SUN收购,以及在此之前JBoss被Redhat收购,这段时间太忙没顾上点评。不过,两年前俺已经写了这篇足够好玩的BLOG,评价企业级软件市场的春秋争霸。

  提起这篇BLOG,俺又在考虑用孔子的学生们来命名pFind 2.1的各个模块,比如冒冒失失的“子路”和善于周旋的“子贡”。若有漫画高手帮忙创作几幅卡通肖像,就更有意思了。

  hp已经给两台服务器起好名字了,一台叫Donkey,一台叫Shark。都是兄弟们喜欢的动画电影角色。

>

pFind 2.0历程

  前两天做了一次报告,总结pFind 2.0。花了很大功夫准备Google Docs幻灯,熬到凌晨3:00。

  05年下半年,接手生物信息组工作,顶住干扰静下心着手工作。这一年的最后一天,首次跑通流程

  06年1月,对算法模块展开大规模测试,这只是之后漫长的重构、测试、再重构、再测试循环的序幕。(小插曲:BLOG里提到的那个缺根弦的家伙,是在纠缠我当时的女友,之后居然等在我加班回去的路上,拿电棍袭击我,反而被我打倒在地……现在想想,俺真是什么人生体验都没错过)测试结束时给全组发邮件,希望建立直接透明的工程氛围。

  06年2月,着手M2版。虽然有心理准备,但之后事实证明,“第二赛季”还是比预想的要困难得多。

  06年4月,搜索引擎核心完成最初调试,界面也很快做出来了,那时以为Alpha阶段能很快结束。接下来几个月,陷入反复修改和测试。除了各种BUG,涉及更多的是科研问题。亲身体验了“小数点后五位数据不精确导致性能大大降低”这种传说中的科学故事。那时pFind的鉴定效果着实好不到哪儿去

  06年12月pFind 2.0论文投稿,这十几页纸,真把这辈子的英语都写完了,最终发表在RCMS时,已经修改过32稿。

  07年1月开始Beta测试,我扮演工兵。从用户那里回来,马上力排众议安排pBuild开发。在一线眼巴巴“护送”软件运行是件滴汗的事,但过后增加底气。现场值班逐渐成了日常工作。原来Mascot并非遥不可及,许下一个愿望

  07年8月,为解决系统在修饰问题上的缺陷,不得不展开大规模重构,但遇到挫折。不过现在看来,这是一笔财富,理清了思路。

  07年9月,有机会投入生物一线的实际科研,这时候的pFind 2.0还不完善,遇到很多麻烦。差点迈不过这道坎,但最终fy大侠带领我们创造了奇迹。之后几个月,继续推进。这是一段激情时光通过不断努力,再次重构后的系统性能获得成倍提高

  08年1月,滑单板时摔断了胳膊,打着石膏坚持去上海出差推广pFind。 南方雪灾,差点留在上海过年。到春节为止,组里申请了11项软件著作权。专利方面,获得第1项专利授权,还有4项等待授权,今年还有3项打算申请。商标也 在申请中,去年10月在人类蛋白质组会议以后,我们的域名遭到恶意抢注,经过戏剧性的争夺,我幸运地抢回了pfind.net这个重要URL。

  08年4月,pFind 2.0 final Relese,同时pFind 2.1展开,还有3天,29日下午6:00,就是2.1 Alpha1版的deadline。计划8月8日推出“奥运献礼版”。

  pFind 2.0历经3年终于完满,但可能没多久就会被更出色的2.1所取代。心情有些复杂。感谢所有的同事和朋友。

严谨和乐天

  只要和fy搭档干活,俺心里就有底,传说中的英雄总能在关键时刻准时出现,拯救万民于水火之中

  不过两个人性格差好远。fy是个严谨过头的家伙;而我大大咧咧,过于乐天派。这次分领M版和C版,这种差别大伙都看出来了:

  每次milestone,fy的总结都是“基本完成”;而我,恨不得在前一天晚上就把第二天的进度从todo list里划掉;

  M版攻城掠地一日千里,Boss H发邮件祝贺,fy却愁眉苦脸Re回来:“没啥可贺的,真正的测试还没做,流程可不可行、有没有隐藏的bug,还是未知数……”;再看俺这边,尽管C版已经比计划慢了4天,还在邮件里自吹自擂呢:“在坚决不降低工程标准的前提下,俺们定能赶在deadline搞出一件恐怖的终极武器,以便证明哥几个就是传说中的天才程序员团队”。

pFind 2.0最后定版

  pFind 2.0昨天整理完毕,清理实验性或过时的算法,例如原有8个搜索流程只保留了最新的“发车模式3”。调整界面隐藏尽可能多的选项,以减少参数配置的出错机率。一口气删掉了5万多行代码。下周一pFind 2.0 final release,成为历史坐标。

  这是四月初,我请全组到新家吃饭。Boss H在网上订的黑森林蛋糕,据说有四百多块钱。

  最近一段,pFind 2.1开发进入关键战役,今天是第三个milestone,预计下午2点开始第一次集成测试。

  按组里惯例,C++和Matlab版同时展开。fy大侠带M团队,我带C团队。C版只实现最成熟的技术路线,保证工程质量,关注速度和吞吐上限;而M版还要验证一些相对激进的思路,昨天一问,M版也在不断重构架构优化速度,代码质量很高。很期待两个版本的PK。以前各个软件C、M两个版本最后“对答案”时,或者异曲同工,或者不约而同,相互印证借鉴,很有乐趣。

  周四要在全组讲pFind技术报告。为表示对一线开发者的尊重,除了简单提一下系统设计编码原则,我本人不会多讲,而打算让各个模块的作者亲自演示:先后实现了哪几种不同方法,跑了哪些数据和参数,在精度和速度上有多少进步……在所有人面前汇报自己创造的成果,体验成就感,鼓舞士气。

  从本科大一假期到软件公司打工开始,我总是天经地义的开发主力。这次pFind 2.1却只扮演项目经理角色,不负责模块的具体编程实现。精力都放在接口设计、代码审核、双人编程培训、进度监控和文档上。心情有些复杂:不挽起袖子敲代码,就没有那种“百万军中取上将首级”的快感了。