Sky Watch

关于一些学术软件的八卦

老婆在某大学里管超算,收到一个 ticket 说有人有个 Python + C 的程序出错,段错误,让我看看怎么修。我折腾了一个晚上,发现是 Python 会默认 C 函数的返回值类型是 int,但是那个函数的返回值是个指针,而且在 Python 里拿到返回值以后会传给另一个 C 函数,在我们测试的机器上(超算和我自己的机器)Python 会把那个返回值截断再补上,不段错误就怪了。不过这个修起来很简单,在 Python 里声明返回值类型是指针就好了。但是我修好了以后发现这破程序还有别的恶性 bug,比如 use after free⋯⋯

于是我们让他找作者修,作者是个康奈尔的教授。他说之前找过了,作者坚持说程序是对的,而且他在其他机器上都能跑。当时我就呵呵了,这也太把自己当人了。如果我是用户大概直接 email 就骂过去了⋯⋯

学术圈这样的破程序挺多的,我一直在想为什么这些人就不能好好地写个好程序。我的一个感觉就是除了物理以外其他科都不喜欢搞大 collaboration,都是各干个各的。我用过的物理圈的牛逼程序大多都是 collaboration 搞的,比如 CERN 的 ROOT 和 USQCD 的 Chroma,当然个人写的也有,这些人最后都转码了嗯。

另一个想法是为什么不好好地开源一下让社区写,也相当于搞 collaboration 了,问老婆,老婆说搞不起来,因为这些程序一般没什么人用⋯⋯

关于 collaboration,我又想到了以前在囧乎上和别人的讨论,为什么像生物这样的学科只满足于 p=0.05,做实验就只用几只几十只小白鼠,为什么文章里 error bar 都碰上了还大言不惭地说 significant。比如我之前随便看的一篇关于 Covid 的文章里面有这个图:

significant
Figure 1. 这要是都能算 Significant 天下人都能水 PRL 了……我严重怀疑这人说的 significant 意思是中心值相差多于一倍,他标 significant 的那几组数据都符合,没标的都不符合……Error bar 什么的可能就是个装饰。

有人评论说小白鼠很贵的,我问那为什么不搞 collaboration,有几个人回复说想搞到基因满足某些条件的小白鼠很贵很难而且很难维护什么的。最后我懒得再打字了就说好吧我也不了解情况大概确实很难吧,但其实我白眼都翻到天上去了,难个屁啊,再难能有 LHC 的百分之一难么⋯⋯人家 CERN 几百个人做十年,最后没有五个 sigma 的信号都不敢发文章⋯⋯

所以真的,做事要认真,不然就别占着茅坑不拉屎了,给别人腾腾地儿。

在分子动力学界,有个著名的软件叫 Gaussian,性能特别好,但是是个商业软件,还很贵。不同于其他很多 MD 界的学术软件,这玩意是个「现代」的软件,有文档、安装包、论坛和技术支持。但是这玩意在圈里名声很差,因为这程序最早是一个叫 John Pople 的有志大叔写的自由软件,成型以后让合伙人窃取了,成立了公司也闭源了。这公司跟我国一样,骂不得。你说它不好它就会把你拉到黑名单里让你用不了,所以也有很多人用着其他更奇葩的软件,比如 CHARMM, GROMACS 和 NAMD 什么的。CHARMM 是 Fortran 的,后面两个是 C++ 的,这些功能都 不如 Gaussian 多,所以有时就需要你自己写插件。比如我老婆之前需要撸一个特殊的力场,研究了半天 GROMACS 的 API 都没整明白,我也没时间帮她写,所以最后用了她老板的祖传 Fortran 插件⋯⋯总之,这些科研工作者对 Gaussian 敢怒不敢言。

后来 John Pople 受不了了,从 Gaussian 跑路出来又开始了一个新的 MD 软件 Q-Chem。老婆跟我说 Q-Chem 最初也是自由的,后来又让人窃取了,但是这个就无从考证了。

这件事告诉我们学术圈懂软件工程的人真不怎么多(因为懂的都转码了),不然那些自由软件没什么道理功能跟不上,毕竟数学上都是推好的的,写程序实现一下就好了⋯⋯CHARMM 和 GROMACS 的文档我也看过,感觉还挺全的,各种基础库和结构也都做的不错,扩展起来不难。

说到 CERN,可能很多在圈外的人不知道 CERN 在计算上有多牛逼,其实很多物理圈的也不知道(比如我以前)。我读博的最后一年 LHCb 的人来我校做了个报告,扯了很多 penta-quark 啦 dark matter 啦我都没在意,但他后来讲数据处理的时候我都震精了⋯⋯他说他们有一套自己设计的软硬件用来实时采集和处理 TB/s 级别的实验数据,有专门的超算做实时的 preliminary 分析,实时出结果,而且分析还是带 machine learning 的。我当时作为一个计算狗感觉就是无地自容⋯⋯

所以我转码了。