参加工作以来的成长(二)

2018年11月25日分享于pFinder邮件组。因迟浩师兄文章Comprehensive identification of peptides in tandem mass spectra using an efficient open search engine发表在Nature Biotechnology,祝贺之余分享了个人的成长。

不好意思,作为晚辈,我来插个队。

首先,一样的,先恭喜浩哥的工作成果登上了更大的舞台,有了更大的影响力,特别是未来的影响力。我亲历了这篇成果产生前的头三年,错过了后三年,虽然没有能对文章有些贡献,但作为旁观者,我还是有很多观察和要讲的话的。如果我没记错,这篇文章内容的萌芽,应该溯洄到2013年,浩哥毕业那年,浩哥从头设计pFind的索引结构开始。在我的印象中,毕业前的半年到一年里,浩哥每日会有非常长的时间,独自在15楼上(或是13楼?记忆真是靠不住)做设计、开发、写毕业论文,一天呆在所里的时间应该在12小时左右。后来,2014年pFind集中做新版本开发的时候,浩哥下来同组里的交流逐渐多起来了,特别是发现了杨皓这个好苗子后。软件设计、开发、集成是个浩大的工程,软件能够初步用起来,我想前前后后,应该有一年半时间吧。再后来就是超哥定量论文发表,贺老师读到一篇论文,萌生了用定量的方法去验证定性的准确性,开始在组里做些初步的探索,并且加深了同董老师处的合作。不仅是做湿实验的能同我们提需求、要分析结果,我们也要主动站的更高、看得更广,向他们提需求,用以改善引擎。在我走之前,pFind 3还处在,发现开放式搜索中N15数据意外修饰非数比例高,正分别对错误的鉴定分门别类,寻找原因的阶段。

我阅读了发表文章的正文部分,短短的三页,信息浓度很高。文章最令我激动的部分,不是鉴定到的肽谱匹配数、肽段数、肽段序列远远地甩开了其它的7个引擎,而是文中清晰的评测方法和评测指标得到了反复地应用。我摘引了其中的四个最精彩的句子如下:

  1. “Given the design of this dataset, if a PSM identification is estimated to be correct for an unlabeled peptide, the corresponding precursor ions with 15N or 13C labeling should generally be observed in full mass scans and valid quantitation ratios should be obtained.”
    “Generally, a smaller percentage of NaN ratio results indicates higher precision, and precision can be estimated independently of the target-decoy approach via the percentage of NaN ratio results.”
    “…, indicating that the PSMs from the extended search space of Open-pFind were also highly credible. Notably, the metabolic labelling technique also helped to identify why spectra are misidentified.”
  2. “A total of 1,259,215 distinct peptides were retained, corresponding to 548,371 distinct peptide sequences, which was ~87.2% more than what was reported originally (~293,000). These indicate that ~10-20% of cysteines in all of the identified peptides were not modified by carbamindomethylation, as would usually be expected.”

第一个句子简短地给出了评测方法,第二个句子说明了评测指标该如何看。后面巧妙地将结果分为两步去应用评测方法,第一步是看无修饰和有四个基础修饰的情况,第二步是考虑所有修饰的情况。第三句更进一步,还说出了,对于这样的评测技术,不仅只在于给出鉴定结果的准确性,还能辅助分析为什么被错误鉴定。第四句是对整个引擎所带来价值的说明,另外也能够延伸出需要制定一些评测指标,让湿实验的质量和干实验的质量可以互相监督。

之所以觉得这四个句子精彩,其实我想强调评测指标对系统演进的重要性,评测指标不应该是系统后期的工作,不应该是写文章时才想到的方面,而是在系统一开始设计的时候就要思考的。评测指标是对目标的清晰定义,目标决定了系统的迭代方向,目标是意义的具象化。还记得贺老师常提,我们做算法,无非就是速度和精度。这两个目标比较抽象,具体写文章和做研究时候,还是需要细分,落到不同的方面。比如我们做一个在线的服务,如果将软件质量对等到精度,软件工程里通常会细分为可用性(Availability)、健壮性(Robustness)、可扩展性(Extensibility)、可伸缩性(Scalability)、安全性(Security)等,速度细化为延迟(Latency)、吞吐能力(Throughput)。举例来讲,可用性,常用百分比来衡量。一般说几个九,比如两个九就是,有99%的时间里,服务都可用,这样一年只准有不到四天的不可用。如果是三个九,那么一年里只准有不到9小时的不可用。像AWS的很多服务的工业标准是四个九,我想城市里送电、送水也是一样的衡量指标吧。再举例来说健壮性和可扩展性,直接去定义不好定义,那么可以有很多辅助的指标,比如降低代码的复杂度,再比如,如今流行的Test Driven的开发,也就是常说的单元测试,有多少的代码行数被覆盖了,有多少的代码分支被覆盖了,还比如集成测试的外部依赖覆盖率,端到端的回归测试的测试用例覆盖率等等。做一个离线的数据分析系统,也要根据系统的功能,将评测的指标(Metric)具体化,并持续改进。

除了前面提到的四个句子外,还有一句话不得不提,就是速度提升显著的原因:

“It is worth noting that, in Open-pFind, the tag-index technique was essential to increasing the speed of the open search, and the database reduction strategy was essential to increasing the speed of the subsequent restricted search.”

这是浩哥内功最深厚的部分,想必如今浩哥在索引方面的技艺已经炉火纯青了。如何索引和如何搜索的技术是海量的数据分析无法规避的问题,不论哪个领域的数据分析。数据分析一般有两个层次,一层是数据的过滤(Filtering)、分组(Grouping)和聚合(Aggregation),另一层是搜索、提炼(Refinement)和个例分析。第一层是从宏观上看,做些整体的分析;第二层是从微观上看,做些局部的特殊分析,将研究工作落到实处。总之,搜索对未来的重要性不言而喻。有幸头三年从浩哥的毕业论文中学到了索引技术中最为核心的内容,以连续的数组做键,尽可能压缩存储值的部分,当然怎么散列键值,就需要看数据的具体特性了。良好的索引设计总是空间和时间上达到了一个较好的均衡。计算机中加速的核心就是去除冗余计算、减少计算步骤,转换成常用的技术就是加缓存、散列索引、设计压缩表示等。前段时间了解了一些Linux内存管理中内存页管理,核心也是这些,但复杂度却还要高得多。

以上只是对文章本身和我三年前记忆中的浩哥的一点点看法。站在如今,我也会不自禁产生,贺老师在多年前pLink发表Nature Methods后,杨兵师兄毕业答辩时问的一个问题类似的疑问:如果换一个人,这篇文章还能发表吗?我想这个问题是在问,需要哪些必要的因素,才能够作出一篇影响力足够大的文章。回答这样的问题,需要花费很多笔墨,越抽象的问题,越可以详细分解和论述,有不同的发挥,浩哥想必肯定也会思考类似这样的问题,并且或许也会因为这样的问题而感到压力。

贺老师给出了这个问题一个必要因素:“念念不忘,必有回响”,这是在说信念。我觉得信念同决心、固执、不服输、持之以恒,都是同源而异流的表达,在《怎样解题》这本书中Polya也特别强调了决心在解题中的重要性。

我想分享另一个显而易见的必要因素:“人心齐,泰山移”,这是在说愚公精神。团队只有向着一个共同的目标奋进的时候,才能达成显著的成绩。pFind 3有贺老师提出的用标记定量的结果去辅助验证定性的结果的新方法,浩哥强劲的搜索、鉴定能力,超哥pQuant标记定量的最新成果,小龙pParse+对共洗脱母离子高召回率的导出,文锋持续关注统计机器学习方法介绍的半监督学习方法,董老师、丁师兄实验室的标记数据等等。恕我只能就自己所知的方面列举了部分,如有不准确的部分,还请纠正。所有之前的积累和阶段的目标,都为这个大的目标做了铺垫,再想想,这个目标也必将会为下一个目标做铺垫。就我能想到的,找交联位点的问题,pFind 3显然能帮助pLink缩小搜索空间。

当问到前面的问题后,想必还会继续问,“如何才能缩短创作的周期?”,“如何能做出小而巧的创新?”,“如何影响团队,才能形成良性循环?”。这些问题显得功利,却又是每个创作者所无法回避的想法,我倒不会功利地看待这些问题,思考这些问题,我想可以让人更加发挥自己的特长,节省自己的时间,更加信任他人,时刻考虑如何改善当下低效工作的运作机制,以求通过改善流程,促进运作机制的变革、克服畏难情绪和拖延心理。

其实相比于技术的收获、方法论的收获,我更感兴趣的是浩哥这一路的心路历程。我总觉得,将头脑中一些不可说或者难以言说的想法和情绪尝试用语言表达出来是一个排解的好方法。语言是思想的一种载体,损耗和变质了多少,难以回答,但我深切地感受到了语言对思想的塑造能力。也许说损耗和变质是个错误的假设,因为损耗和变质是基于我们的思维固执地相信思想有中更加高级的载体和表示形式,而这种高级的载体根本就是虚幻。不过只要对因果律的信念还在,去想解决这样的问题又未尝不可呢。通信技术的下一场革命不知道什么时候会出现,会以什么形式萌生,会跟生物技术的进步有关吗,还是要死磕量子技术。

我个人的近况

从世俗的角度看,我今年运气很背。工作上,今年做的其中两个项目测试都没赢,公司的股票从九月起也开始不停下滑,个人的收入也跟着受挫。家庭中,父亲突发心脏病去世,个人的精神一个多月来也有点恍恍惚惚。一直记挂着写点什么,却总提不起精神来,大概是因缘不到,悲痛还未彻底消散。

从修炼心性来看,我变得更加自信、从容和淡定了。

公司同事都惊讶于我的毅力,能从去年十月开始,每天中午蔬菜沙拉,晚上赛百味,除了偶尔必要的集体活动时跟着变化一下,但我觉得这样的饮食反倒是顺应了我的天性,一方面避免了每天吃饭时的选择困难症,另一方面迎合了内心的一点小信念,拿自己当个试验品,看看饮食结构对人的改变到底如何。

父亲去世以来,母亲和我都在姐姐的告诫下,开始斋戒,以至四十九天后,都觉得吃素挺好。我本小时候就是被母亲逼着慢慢开始吃肉的,自己对吃并没有多大欲望,改变成素食,并不困难。只是没想到母亲也能完全适应,更没想到姐姐能有这样的告诫。姐姐在年初时说自己顿悟,入了藏传佛教,在家修行,我起初非常忧心。我的忧心无非是抱着唯物、世俗的心态,觉得念经只会占用提升生活技能的时间,也怕她哪天真的出家了。虽是忧心,但我也不会过多劝诫,我怕适得其反,人都总有点逆反心理,想着她自己厌烦了,大概也就停止了,但在经历了这半年多的事情后,我彻底改变了对她学佛的态度,而她也带我走进了一个不一样的世界。这个故事说起来太长,我只会在后面提到些佛学对我思想观念上带来的改变。

去年随着我开始思考“How to Write Unit Tests”,我逐渐领悟到了如何提问、如何思考,如何顺藤摸瓜地去搜寻资料,快速解决问题。伴随着思考“什么是复杂”,先后阅读了《复杂》、《寻找希格斯粒子》、《混沌与秩序:生物系统的复杂结构》、《人类理解论》,我找到了大部分的工程研究和论文结构方法论的缘起,也就是西方人常说的还原论(Reductionism)。还原论的思想方法不仅对研究探索、解决工程问题有帮助,对理解思维和语言的关系也非常有帮助。我有点沉浸在这样的思想方法当中,开始认为头脑中所有一切的观念都能归结到空间、时间和意识三个方面上,因为所有的存在都依附于这三个方面。人们所拥有的最重要两项底层思考方式,比较和抽象,也都依附于这三个方面。拿“比较”来说,我们所有的感官都能建立起比较的观念,不论是通过视觉、听觉、触觉、味觉还是嗅觉。我们说大小,我想是空间中粒子的分布在视觉上作用的观念,只是伴随抽象观念的增多,大小的引申义也越来越广,比如说国家的大小、软件的大小。我们说光滑和粗糙,我想是空间中粒子分布通过触觉作用后产生的观念,只是我们关联上视觉后,引申到了更多的场景中,比如曲线的光滑和粗糙、平面的光滑和粗糙。能有大小、光滑和粗糙的观念正是建立在比较思维之上的,慢慢地,凭借着抽象思维,我们也有了比较的观念。不论语言中是借助词的变形(He is better)还是副词(他更好),都需要有比较思维才能建立起所有的观念。有了“比较”的观念,我们就能主动去运用比较的思维去分析更加抽象、更加复杂的观念,比如确定和不确定,偶然和必然,再比如东方文化和西方文化,Android系统和iOS系统等等。运用比较,我会思考,脑中产生观念的能力、自然语言的描述能力、数学语言的描述能力、编程语言的描述能力、科学和工程的范围彼此间的大小关系、相互作用等等。从小缺少语言天分的我,开始对词汇学、训诂学、语法学、语义学开始产生强烈的兴趣,走马观花,读了几本。

从前觉得一些所谓的哲学问题只是文字游戏,但实际上,看到文字游戏只是看到了形式和表象,更进一步地是思想观念的转变,语言只是思想的承载形式。比如说,学习语言时,英语的语言符号、结构跟汉语,特别是古汉语差别巨大,但共性的部分正是体现观念形成最核心的部分。拿动词来说,动词描述了事物之间的关系,自然语言中的动词直接关联的事物最多三个,关联得太多,不只是靠线性的语言、声音的传播困难,短时间理解起来也困难。举例来讲,“他送给我一本书”(“He gave me a book”、“He gave a book to me”),“送”就关联了“他”、“我”、“书”三个事物。我很佩服乔姆斯基能抽取出语言中存在的共性,给编译原理提供理论基石。单就拿动词的这个特性,如果明白了动词在语言中所起的作用,那么我们也自然地在编程的过程中,知道如何给函数命名,不要过多地传递参数这个朴素的最佳实践。再比如说,有名的理发师悖论,“镇子上的一位理发师只给不给自己刮脸的人刮脸”,那么他就将自己放在了能刮脸和不能刮脸之外的一种状态。这是逻辑和语言的困境,我想老子和佛陀是早就明白这个道理的,说到底是理性思维的困境。总有些“道”和“名”,不只是不能道和不能名的,可能都是不能想和不能识的。

从前学习大学哲学的时候,都是在批判“不是风动、幡动,而是心动“的观点,并且贴上唯心主义,利用人天生的分别心和情感心理来褒此薄彼。不过也恰恰是批判,让人记住了这个观点,在今后的生活体验中能再次体悟这样观点的可贵和完全不同的思想境界。刻意地消灭总是消灭不尽的,最好的办法是完全屏蔽,让其处于无的状态。简单做一个思想实验,如果世上没有人了,那么这个世界是存在的吗,这是个完全没法回答的问题,因为我们所有能回答的,都是要经过观察、感受和思考的。其实不需要学习不确定性原理,单从思考思维和语言的关系,就能想到所有的观念都需要人的感官和思考,而感官和思考的大前提,人们含糊地称其为意识。这样想来,空间和时间又归结到意识上。简单再做一个思想实验,倘若所有的人都是盲人,我们能靠触觉、听觉建立起来前、后、左、右的观念吗,或者说我们还能建立起三维空间的观念吗。我想是无法建立的,即便人们可以靠耳朵和嘴巴交流,身体去触碰。意识是运用逻辑和理性无法逾越的坎,因为逻辑和理性是思考一部分,而思考的前提是有意识,更不必说自然语言、数学语言、编程语言、科学和工程了。也许有人会觉得意识是个虚假的观念,只是物质的生命体复杂到一定程度后自然萌生出的一种状态。这样的想法是可以辩驳的,首先,观念哪有虚假之分,只有能用科学的方法证实和证伪的差别,科学方法本就是有局限性的,说虚,说假,又指的是什么呢;其次,所谓的自然萌生,这显然是不符合还原论的认知范围的,这里面有一加一大于二的论调;再次,还可以问复杂到一定程度到底是怎样的程度,复杂本就是无法定义的,又怎么说程度呢。

从前以为证据堆积得越多就越可信、越真实,但可信和真实都是有主体的,对谁可信,对谁真实。只要存在谁,那么所谓的可信、真实就会被加工、处理。我曾恍惚间分不清历史和故事的区别,只要是大多数人信的就是历史吗,还是少数权威学者说的是历史呢。那么多的《圣经》故事,卷帙浩繁的佛经,汗牛充栋的史书,为何它们就比上古的神话更让人觉得可信呢,是因为它们更贴近现代人的思维方式、生活常识、社会伦理吗。

所有的这些运用所谓的理性和逻辑的推演,最终都会引人想到庄周梦蝶的困惑,我们无法说明什么是真实,什么是存在。佛陀说,“一切有为法,如梦幻泡影,如露亦如电,应作如是观”。佛陀对探求类似“我是谁”这样的形而上学的问题不予理睬,只是叫人累生累世修行,直至脱离轮回,圆寂涅槃。

能明白自己是个凡夫俗子,心中总不会过分苛求自己,也不会苛求别人。王国维将人的苦痛分为“积极的苦痛”和“消极的苦痛”,说“消极的苦痛”是空虚的苦痛,“积极的苦痛”是活动中的苦痛,诸如工作等。我想一些嗜酒、嗜烟的人也无非是拿“积极的苦痛”去换取“消极的苦痛”罢了,本质上同工作狂是一样的。

能明白自己是个凡夫俗子,也就能更加从容的生活和工作,去思考解决一些自己感兴趣和力所能及的问题。

祝愿大家能够从容生活和工作。

发布人

jeremy1990

现居北京,就职于亚马逊中国,软件工程师。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注