古有华山论剑,今有流程之争|谁在误导人?

有意思,今天被人怼了,说我误导人。

起因是我前些天写过两篇文章,第一篇是:Nextflow生物信息流程(一):简介

一个入门帖子,反响平平。我原本也是打算好好学习一下 Nextflow 来着,因为它确实有些名声。不料写的第二篇文章却是:Nextflow生物信息流程(二):从入门到放弃,就是这篇文章被人怼了。

今天(2023-12-30)原本心情不错,因为是元旦假期第一天,虽然北平的天一直阴沉着,但午后还是兴冲冲的带小孩去溜冰。不料刚出门,看到有人在公众号上质疑我,刚开始画风还好,正常交流。后面就属于扣帽子了。94fd5471f2139cf3662078d4647dfaa3.png

流程开发,中美之争?

此兄第一点,调子起得很高,把生信流程搭建,上升到中美之争的高度。没有那么严重,生信流程,核心就一个 DAG 有向无环图,完全不存在卡脖子的问题,一个成熟的生信工程师都有自己的解决方案。

大不了,不说10年,5年后,我可以公布自己的方案。现在不公开,是因为我的方案目前是商用,一些企业客户已经购买了,现在公开的话对他们不公平。

dcc8992f2cef70274452e07f22162846.png

你也不能怪我小气,我这个一直就是商用的,并且目标客户是企业。因为有高昂的研发成本,我说5年后可以考虑开源,是预计那时候研发成本应该收回了,可以发行一个社区版本。

中西文化差异?

此兄第二点,说国人历来追求简单,不喜欢复杂的东西。我对国人的喜好没有研究,也没出过国,更不懂国外。

但追求简洁的美,这些年国内外似乎是一种趋势,比如苹果手机引领的扁平化潮流,小米花几百万设计的新logo,给人的感觉:就这?我也会。

另外我们也知道奥卡姆剃刀原理:如无必要,忽增实体。也是告诫人们尽量保持简单。

还要举例的话,我想到马斯克的第一性原理。那生信流程搭建的第一性原理是什么?我认为是批量为样本生成shell脚本。

然后再通过不同的插件将任务投递到不同的计算集群上去,如SGE,可以写一个SGE任务投递插件,Slurm,可以写一个Slurm插件,k8s,可以写一个k8s插件。没有集群,任务还可以在本地电脑运行,这就是广泛适应性。

谁在误导人?

我收到留言后,回复了自己的看法。不料此兄说我在“误导人”,我想双方对这个问题的认识一定有巨大的不同,再讨论也无意义。

8211340f6c91d03ab76c074f856c02e8.png

他质疑我的,是我认为Nextflow过于复杂臃肿,这也不是我一个人这么看,因为发布文章后,也有网友和同事表达了相同的意思。

比如这位网友说:入门放弃过好几次了,太复杂,晦涩,文档不好,不通用。

356f86e30343dbfc60d0be1393f7f36a.png

另外一个同事反馈:

62a4f02d8e4f8dfd9d404c616acf9c4f.jpeg

当然也有网友说使用起来很方便,但似乎对开发的难度没有体会。

a98e90874105a09f54abbfe598bcfc33.png

说实话,我原本写那篇文章的时候,也想表达一个观点,不知道最后写进去没有,但就算有,可能也没有阐明,我在这里细说一下,就是:

  • 对于 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 等。基因组组装、注释,以及各种重测序业务都可以与简说基因合作。

3f86242ba846abb2fc957af3a08247ba.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/312921.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Deeplearning4j 实战 (22):基于DSSM的语义匹配建模

Deeplearning4j 实战 (22):基于DSSM的语义匹配建模 Eclipse Deeplearning4j GitChat课程:Deeplearning4j 快速入门_专栏 Eclipse Deeplearning4j 系列博客:万宫玺的专栏_wangongxi_CSDN博客 Eclipse Deeplearning4j G…

记录 Docker 中安装 ROS2

目录 1 安装 Docker 2 安装 ROS2 3 启动 Docker 4 测试 ROS2 环境 1 安装 Docker 1. 更新软件包sudo apt updatesudo apt upgrade2. 安装 docker 依赖sudo apt-get install ca-certificates curl gnupg lsb-release3. 添加 docker 官方 GPG 密钥curl -fsSL http://mirror…

Jetpack Compose中使用Android View

使用AndroidView创建日历 Composable fun AndroidViewPage() {AndroidView(factory {CalendarView(it)},modifier Modifier.fillMaxWidth(),update {it.setOnDateChangeListener { view, year, month, day ->Toast.makeText(view.context, "${year}年${month 1}月$…

Oracle开发经验总结

文章目录 1. 加注释2. 增加索引3. nvl(BOARDCODE&#xff0c;100)>004. 去掉distinct可以避免hash比较&#xff0c;提高性能5. like模糊查询优化(转化为instr()函数)6. SQL计算除数为0时&#xff0c;增加nullif判断7. 分页8. 查看执行计划9. <if test"productCode !…

【2023】hadoop基础介绍

&#x1f4bb;目录 Hadoop组成HDFSHDFS操作HDFS分布式文件存储NameNode元数据数据读写流程 YARN和MapReduceMapReduce&#xff1a;分布式计算YARN&#xff1a;资源管控调度YARN架构提交任务到**YARN中运行** Hadoop组成 hadoop安装教程可以看我这篇文章> &#x1f345;hado…

C/C++面向对象(OOP)编程-回调函数详解(回调函数、C/C++异步回调、函数指针)

本文主要介绍回调函数的使用&#xff0c;包括函数指针、异步回调编程、主要通过详细的例子来指导在异步编程和事件编程中如何使用回调函数来实现。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;C/C精进之路 &…

JavaScript 基础通关

快速熟悉 JavaScript 的基础语法&#xff0c;比较高级的比如事件放在后面的笔记中。 JavaScript 1. JavaScript 介绍 1.1 JavaScript 基本介绍 JavaScript 是一门运行在客户端&#xff08;浏览器&#xff09;的编程语言&#xff0c;实现人机交互的效果。实现网页特效、表单验…

海康visionmaster-渲染结果:控件颜色:控件颜色修改的方法

描述 环境&#xff1a;VM4.0.0 VS2015 及以上 现象&#xff1a;简易修改 VM 控件的颜色&#xff1f; 解答 对二次开发中嵌入控件的颜色进行修改&#xff0c;具体代码如下&#xff1a; C# string colorinfo “ColorStyle3”; AppColorService.CurColorDefine colorinfo; “Co…

OpenWrt 编译入门(小白版)

编译环境 示例编译所用系统为 Ubuntu 22.04&#xff0c;信息如下 编译时由于网络问题&#xff0c;部分软件包可能出现下载问题&#xff0c;还请自备网络工具或尝试重新运行命令 编译步骤 下图为官网指示 编译环境设置&#xff08;Build system setup&#xff09; 这里根据我…

springboot实现用户操作日志记录

springboot实现用户操作日志记录 简介&#xff1a;之前写了《aop实现日志持久化记录》一文&#xff0c;主要介绍自定义aop标注方法上&#xff0c;通过切面方法对用户操作插入mysql。思路正确但是实际操作上存在一些小问题&#xff0c;本文将从项目出发&#xff0c;对细节进行补…

Nginx 代理静态资源,解决跨域问题

&#x1f602; 背景&#xff1a;移动端 H5 项目&#xff0c;依赖了一个外部的 JS 文件。访问时&#xff0c;出现跨域&#xff0c;导致请求被 block。 当前域名&#xff1a;https://tmcopss.test.com要访问的 JS 文件&#xff1a;https://tm.test.com/public/scripts/y-jssdk.j…

C++每日一练(8):图像相似度

题目描述 给出两幅相同大小的黑白图像&#xff08;用0-1矩阵&#xff09;表示&#xff0c;求它们的相似度。 说明&#xff1a;若两幅图像在相同位置上的像素点颜色相同&#xff0c;则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。…