这是一个知乎问题下的答案。有些观点说出了我对生信工具趋势的感受。我是从“最好的编程语言”PHP,js,经过 java,最后学到linux、R、python和C/C++的,对虚拟化也十分熟悉,对未来的新语言、规范做法也持务实的开放态度,只要它别浪费太多时间。反正生信项目绝大多数不用考虑维护,怎么省事怎么来。
1. 生信如何规范化
与其说生信工具不靠谱,不如说大部分进行生信分析的人不靠谱。
不靠谱的根源在于至今生信都没有一个标准化的工作流,审稿人至今都在关心做出来的图漂不漂亮的年代,谁关心背后体系的工业化进程啊。什么高聚类低耦合,什么设计模式,大部分人根本就不关心,甚至听都没听过。
比较好的参照系是20-30年前中国的互联网软件生态。现在的整体生信发展大致就停滞在这个阶段。以结果为向导,过程不重要,搞完万事大吉。这种环境,短期内是不可能解决软件上的各类问题的。
这里有几个经验跟建议提供给大家,避免踩雷:
1.趁早学会虚拟化,docker、podman这些东西造出来是给你摆脱系统环境桎梏的,不是让你2021年了还头铁在centos7里编译安装各种乱七八糟的软件的。系统负责硬件,容器负责业务,这是未来趋势。
都用 docker 的话,怎么优化设置和宿主机的沟通?需要至少保证uid和gid一致。
生信环境的需求很不稳定,遇到啥安装啥,特别是R包很多需要编译及动态链接库,怎么保证崩溃了还能重新利用?定期commit提交新镜像吗?这样文件会急剧膨胀。
2.anaconda适合作为容器化的补充和备选,毕竟操作门槛低。bioconda目前对Python3.6以上的版本支持不佳,会导致很多软件无法安装最新版。这种时候就只能说容器化解千愁。建议生信服务器管理员全面转向podman,可以借助cockpit组件提供前端容器dashboard,降低初学者操作门槛。这部分内容在RHEL8被整合到默认配置里了,免费订阅可用。
不建议用任何 conda,它很容易导致 R 包异常:装不上、加载不了。
3.趁早拥抱标准化开源社区,Java为什么历久弥新,就是绝大多数用例它都进行了相对靠谱的标准化。所以能用python、Java、Cpp实现的,别用R,文档都写不好的语言注定小而美。天马行空带来的往往不是优雅,而是屎山。
R仅局限在统计和绘图。各有所长。
4.开始分析前先简单概览一下你用的软件的算法,程序是层皮,算法才是骨。绝大多数分析出差错的原因都是把错误的算法用在了错误的数据集上。当然了,要是赶工期,你还是跟着培训班或者视频教程直接调包吧。
生信的算法,可能还包括化学原理之类的,不仅仅局限在IT的哪些书。
5.输出有问题的时候先去检测输入,而不是换程序。计算机跟分子实验不一样,流程99%的情况下不会有问题。
6.尽可能地熟悉各类生信格式,这在检查输入文件的时候非常重要。
7.大部分生信软件的 -h 参数或者 --help 参数比他们写的文档有用。特别是你服务器上跑的不是最新版本的时候。如果用这两个参数无法调出帮助,而软件文档又很简陋或没有,请第一时间寻找这个软件的替代品,或者自己重构。
8.比软件帮助靠谱的是软件源码,比源码更靠谱的是自己写。
- https://podman.io/