有意思,今天被人怼了,说我误导人。
起因是我前些天写过两篇文章,第一篇是:Nextflow生物信息流程(一):简介
一个入门帖子,反响平平。我原本也是打算好好学习一下 Nextflow 来着,因为它确实有些名声。不料写的第二篇文章却是:Nextflow生物信息流程(二):从入门到放弃,就是这篇文章被人怼了。
今天(2023-12-30)原本心情不错,因为是元旦假期第一天,虽然北平的天一直阴沉着,但午后还是兴冲冲的带小孩去溜冰。不料刚出门,看到有人在公众号上质疑我,刚开始画风还好,正常交流。后面就属于扣帽子了。
流程开发,中美之争?
此兄第一点,调子起得很高,把生信流程搭建,上升到中美之争的高度。没有那么严重,生信流程,核心就一个 DAG 有向无环图,完全不存在卡脖子的问题,一个成熟的生信工程师都有自己的解决方案。
大不了,不说10年,5年后,我可以公布自己的方案。现在不公开,是因为我的方案目前是商用,一些企业客户已经购买了,现在公开的话对他们不公平。
你也不能怪我小气,我这个一直就是商用的,并且目标客户是企业。因为有高昂的研发成本,我说5年后可以考虑开源,是预计那时候研发成本应该收回了,可以发行一个社区版本。
中西文化差异?
此兄第二点,说国人历来追求简单,不喜欢复杂的东西。我对国人的喜好没有研究,也没出过国,更不懂国外。
但追求简洁的美,这些年国内外似乎是一种趋势,比如苹果手机引领的扁平化潮流,小米花几百万设计的新logo,给人的感觉:就这?我也会。
另外我们也知道奥卡姆剃刀原理:如无必要,忽增实体。也是告诫人们尽量保持简单。
还要举例的话,我想到马斯克的第一性原理。那生信流程搭建的第一性原理是什么?我认为是批量为样本生成shell脚本。
然后再通过不同的插件将任务投递到不同的计算集群上去,如SGE,可以写一个SGE任务投递插件,Slurm,可以写一个Slurm插件,k8s,可以写一个k8s插件。没有集群,任务还可以在本地电脑运行,这就是广泛适应性。
谁在误导人?
我收到留言后,回复了自己的看法。不料此兄说我在“误导人”,我想双方对这个问题的认识一定有巨大的不同,再讨论也无意义。
他质疑我的,是我认为Nextflow过于复杂臃肿,这也不是我一个人这么看,因为发布文章后,也有网友和同事表达了相同的意思。
比如这位网友说:入门放弃过好几次了,太复杂,晦涩,文档不好,不通用。
另外一个同事反馈:
当然也有网友说使用起来很方便,但似乎对开发的难度没有体会。
说实话,我原本写那篇文章的时候,也想表达一个观点,不知道最后写进去没有,但就算有,可能也没有阐明,我在这里细说一下,就是:
对于 nf-core 的东西,可以当一个黑箱用。
至于开发,不建议新手入坑。
第一点,理由很简单,毕竟社区花了很大力气打磨的产品,本着尊重别人劳动的角度,我们不能轻易一概否定。但前提是使用前要充分测试,黑箱里的东西,要足够稳定,很少修改,开箱即用。
至于开发,很多人的体会,nextflow的门槛确实很高,真不是一些人说的很简单云云。说简单的,那肯定是没真正用它串过像样的能用于生产的流程。
所以,说Nextflow复杂,完全不存在误导人,说它简单的,让不明真相的新手入坑一个巨复杂的东西,然后丧失对生信的兴趣,那才是在误导人。
Nextflow该怎么用?
那么似乎也有结论了:谨慎使用 nf-core 黑箱,把开发的事交给专家。
因为我确实也没有多认真地了解过 nextflow,只是简单地翻看过 nf-core 一些项目的源代码,然后得出直观判断:这框架对开发者不友好。我上篇文章似乎主要表达的也是这个意思。或者从使用者角度,会有不同的看法。
但是话又说回来,如果对开发者不友好,只能专家做开发的话,那么对于使用者来说,使用什么框架都无所谓,你用汇编把流程搭出来也行,只要能稳定输出结果。
为啥我写了一篇吐槽文章呢?是我作为开发者的直观感受。那为啥又没从使用者的角度去考虑呢?这或许是思维定势,因为我的工作更多的是作开发,我们会参考别人的流程,但不会照搬别人的流程。所以我的需求主要是一个好的框架,而不是搭好的东西。
因为使用别人搭建好的流程黑箱,对于有些科研用户或许可以,但临床应用是万万不能的,我们必须清楚地知道流程中哪个软件用了什么参数,每一步过滤的阈值是什么。如何调整检测参数以适应不同的样本等等。
创始人怎么说?
怼我的兄台建议我去社区,或者slack上讨论。这倒没什么问题,但就如我回复朋友的:已经弃坑了。再去讨论似乎没有必要,另外去人家的地盘,引发争论,似乎也是自讨没趣。
我认为完全没必要在意一篇小作文,本公众号也没多大影响力,更谈不上号召力。对于新手,他们看不懂,对于老手,他们有自己的判断力,小作文就是自说自话,一个简单的笔记而已。
但没有调查就没有发言权。我倒是网上搜到一篇nextflow创始人2021年的一篇文章,他本人似乎对项目充满激情,信心满满,这份精神令人敬佩。
原文标题:The story of Nextflow: Building a modern pipeline orchestrator(Nextflow 的故事:构建现代管道编排器)
原文地址:https://elifesciences.org/labs/d193babe/the-story-of-nextflow-building-a-modern-pipeline-orchestrator
我简单摘抄一下:
首先,作者认为,过往流程搭建有以下不足:
脚本很复杂,通常只有作者才能理解,这使得增强和维护工作流程具有挑战性。
工作流存在错误且容易出错:想象一下,启动一个长时间运行的管道,启动数千个作业,但在执行 10 小时后却失败,需要从头开始重新启动。
当工作流运行时,很难跟踪进度。在没有监控工具的情况下,我们发现自己经常使用 Linux 命令行、“尾随”文件和“grepping”作业来了解我们所处的位置。
最后,工作流与计算环境紧密相连。即使是对环境的微小变化也可能导致管道中断。
作者认为:
早期的管道处理是一团糟。安装流水线可能需要数周的工作,需要配置晦涩难懂的软件,使用奇怪的编程语言和编译器,以及对缺失的库和组件进行故障排除。人们需要知道晦涩难懂的环境变量和命令行选项在博士生中传递,这是一种仪式。
像许多开源项目一样,Nextflow最初是为了解决这些现实世界的问题并避免这些挫折。
然后,nextflow 经历了:
一些伟大的想法落到实处
腾飞
进入 Seqera Labs
生产验证
最后作者的结论是:
如今,Nextflow 拥有一个充满活力的社区,并已成为用于编排 科学工作流程的最广泛使用的解决方案之一。历经近10年,项目发展蒸蒸日上。
最近,Nextflow获得了一个新的“插件”系统,使社区开发人员能够提供自己的组件,并在访问SQL数据库等领域扩展框架的核心功能。
未来,我们希望使Nextflow与机器学习和云技术更具可扩展性和互操作性,但要牢牢地锚定项目的原始愿景和核心价值观;其中,简单胜于复杂,实用主义 ,提供高质量、强大的技术解决方案,并具有人性化。
写在最后
Nextflow如今已经发展成一个充满活力的社区,这非常难能可贵,因为生信领域活跃的社区不多,大家能集思广益,自然是好事。但作者也有清醒的认识,希望项目牢牢锚定原始愿景和核心价值观:简单胜于复杂,实用主义。
至于能否秉持初心,考验社区的智慧,我们不妨让子弹飞一会。因为我们要小心“屠龙者终成恶龙”,项目初心可能是好的,但后来为了迎合市场迎合客户,做了很多妥协,最终变得臃肿不堪。
这并非没有先例,Kubernetes创始人就警告过,Kubernetes要克制扩张的冲动,要保持初心,否则用户会因为项目添加了过多不必要的功能变得过于复杂而放弃,投奔更加简单的能提供核心功能的项目,现在已经有了这种趋势。
所以项目如果不能保持简单,即使功能再强,也会遭到弃用,因为总有人会提供简单的东西供人使用。
我想现在可以回复那位仁兄的疑问了:为什么简说基因的流程框架只用500行 Python 代码,意义是什么?那就是:
提供核心功能,保持简单,克制扩张冲动。
这也是我们处世的一种哲学,俗话说贪多嚼不烂也是这个道理。
咱们不去slack,说外国话总归不方便,我在知乎开了一个帖子,大家可以去上面讨论讨论。
问题:如何看待生物信息学流程管道框架NextFlow?
地址:https://www.zhihu.com/question/637412699
好久没码这么多字了,因为这篇文章,我们的Galaxy生信云平台( UseGalaxy.cn) 今天少上线了至少一个工具(话说在Galaxy平台通过鼠标拖动就能搭建流程,不是最简单的解决方案吗?真正零门槛)。
一家之言,仅供参考。
关于简说基因
生信平台
Galaxy中国(UseGalaxy.cn)致力于打造中国人的云上生物信息基础设施。大量在线工具免费使用。无需安装,用完即走。活跃的用户社区,随时交流使用心得。
生信培训
简说基因的生信培训班,荣获学员的一致好评。如果你也对生物信息学感兴趣,欢迎来跟简说基因,学真生信。
生信分析
我们能够承接所有 NGS 组学数据分析业务,包括但不限于 WGS / WES / RNA-seq 等。基因组组装、注释,以及各种重测序业务都可以与简说基因合作。