关于国产科学软件的思考(转)
转自 http://blog.pfan.cn/eMath/24264.html
作者 爱数学 http://blog.pfan.cn/eMath
原文如下:
这一段一直在问自己这个问题:“在我们常用的科学计算软件当中,有多少国产的?”,在记忆里面搜索了很久,似乎真正能够数得上“常用”或者“听过名字”的,一个是叫作FEPG的有限元源码生成器,这几年不时在一些论坛上见过他们的广告;另外一个是CTEX套装软件,作科学排版的,听说是中科院的人参与了一些工作。此外,实在想不起来还有什么。当然不排除学校课题组自产自用的软件,但断言我们没有发展出象matlab/mathematica/maple/lapack等这样一批影响科技发展的科学工具也是不失偏颇的。
科学计算软件的匮乏反应了中国软件开发能力和科技应用水平的不足。国内对科学计算软件的需求是很大的,但令人担忧的是,几乎整个市场都被国外的软件占据了。有限元的论坛上,言必称的是ANSYS, Fluent, Abaqus...,电路模拟的论坛上,熙熙攘攘的是HFSS, ADS, microwave office,...,,计算化学的讨论中,<edit>Gaussian</edit>, NWChem, ADF占据了大面积的篇幅,而我参与了很久的数学工具的讨论中,几乎也充满了matlab, mathematica, tecplot和IDL的大名。我们很少有机会看到大家热烈地讨论一个自创的软件,或者计划编写、合写这样的软件。造成这种情况的原因很多,最重要的有下面几条:
1. 盗版软件太容易获得。国外很多科学软件,包括一些开源的、免费的软件都是被商用软件“逼”出来的,由于企业、科研单位需要某种科学计算功能,而商用软件的licensing费用太高,导致企业或者科研院所自行编写适合自己的软件,并且软件或者以商业化,或者以免费的形式发布出来满足社会上类似的需求。而在中国,几元一张的盗版光盘上,几千、几万美元的科学软件一应具有,再加上科研、商业的诚信制度还没有完全建立,盗版软件成为很多人的首选,大家非但不以使用“盗版”软件为耻,反而堂而皇之使用他们来发表文章,开发产品(当然,惭愧的是,几年前的我也处于这种思想境界)。甚至,有人声称这是“拿来主义”。殊不只,这只是大家为了不正当地使用别人的劳动编出来的冠冕堂皇的借口。除了“拿来主义”,鲁迅先生还有另外一句名言也被盗版趋之若鹜者引为经典,就是“窃书不算偷”,认为由于“学问”这个词汇本身的纯洁性就可以抹煞”偷“这样一种行为的可鄙性。甚至很多人声称,中国使用了全世界最好的软件。但具有讽刺意义的是,我们用了最好的软件,我们作出的东西是不是最好的。这说明了什么呢?使用盗版软件就像公费医疗时,可以免费地拿到抗生素来吃。一旦公费医疗没有了,而长期吃抗生素导致身体抵抗能力严重下降,稍微患上一点感冒就会要命,
2. 写软件能力强的人,科学计算背景不足;科学背景能力强的人,计算机应用能力不足。高校当中,计算机好的,一般都去到企业编写界面、数据库、网络开发,然后顺理成章地到IT去发展、赚钱,他们并不关心偏微分方程怎么解,高斯积分在奇异点处怎么算,如何求解稀疏带状矩阵等等这类科学问题。而专业学得好的人当中,计算机基础好的,能够编写高质量代码和程序的人,少之又少,大多数人还停留在询问matlab中如何设置计算精度(实际上只是显示精度)、安装matlab后启动总是有一个matlabserver.exe运行这样一类低级问题的阶段。他们哪怕有自己的一套理论或者算法,也很少有人会想过如何把代码模块化,怎样发布,使用什么样的license,如何管理代码的版本这样一些软件开发的问题。在国外,很多科学、工程课程的作业都是需要用计算机来完成的,写代码,写报告,作讲演,经过几年的训练下来,毕业的学生对操作系统的基本操作、科技软件的简单使用都具备了基本概念,也至少掌握了一两门计算机语言,这样,在今后的科研道路上,就会使用这些计算机工具来开发新的计算功能。而我们国内这个方面的训练还是远远不够。
3. 科研创新精神不够,没有ambition。Stanford的几个学生就可以把google从一个idea做成一个举世瞩目的全球公司,而一个VT的硕士生能搞出一个数一数二的数学知识库PlanetMath,matlab是Cleve Moler在U. New Mexico教学时设计的,mathematica是Wolfram在研究复杂系统中逐渐开发出来的,Lapack的作者Anderson, Bai等人也是在U. of Tennessee在linpack/eispack的基础上开发出来的,这样的例子举不胜举。但为什么我们的高校中这样的例子却不多呢?
现状是不容我们乐观的,我们需要作一些事情,或者我们呼吁科技主管部门来作一点事情来改变它,我们需要有数学和计算机背景的人来参与开发科学软件,提高科技力量中计算机工具的使用能力从而提高科研效率,我们要鼓励一切形式的科学软件开发工作(在满足软件版权和使用许可的前提下),包括商用的、免费的、开源的,并号召学术论坛、学术网站等交流渠道为这样一种(协同式)开发提供便利。大家群策群力,讨论一下我们最需要哪些科学计算功能,按照算法和程序难度制定一些开发计划,大家既可以当成课外爱好,或者当成适当规模的project参与到这种开发当中,学生社团、科研单位也可以通过经费申请为这样的project提供经济支持。
从初期的发展来看,提倡开源或者免费的软件是有意的,因为一则在开发初期,软件水平毕竟还是无法跟国外发展很多年的大型的商用软件比较,而一些写得好的开放的软件代码可以为今后其他软件的开发提供基础和模块,孕育出一大批好的软件来。但我们需要注意从现在开始培养版权意识,要选择合适的使用许可的形式,使得科学软件能够在法律的保护下健康发展。
当然,上面只是一个倡议,我自己的数学水平和计算机编程水平都很一般,没有经过正规的编程训练。但我还是希望上面的这些的想法能够给大家一些启示,特别是国内的在校大学生和研究生,大家能动手写一些东西,或者联合起来完成一、两个好的科学软件开发工程。我这一段比较忙,但一直有一个想法,就是写一个类matlab或类matcom的C++库,这个库将在CLAPACK的基础上添加一个wrapper,提供matlab/matcom中常用的计算函数和矩阵操作,这样利用LAPACK提供的强大的数学计算功能,和wrapper提供的易用的接口,为今后开发其他计算软件作一个基础。除了这个计划,我手头上还有几个其他程序,包括网格生成、排版、绘图等,虽然都是小程序,但我想今后用适当的方式发布出来,大家一则可以免费的使用,或者以合适的方式参与到软件的扩展和改进中来。
希望今后在科学软件中看到越来越多的让我们自豪的Made in China的标记,到那时,我们才具备了科技强国的实力。