关于国产科学软件的思考(转)

转自 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的标记,到那时,我们才具备了科技强国的实力。

转载于:https://www.cnblogs.com/xiexiaokui/archive/2010/05/10/1731569.html

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

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

相关文章

每个私有静态方法都是新类的候选人

您是否有私有的静态方法来帮助您将算法分解为更小的部分&#xff1f; 我做。 每次编写新方法时&#xff0c;我都会意识到它可以是一个新类。 当然&#xff0c;我不会从所有课程中选修课程&#xff0c;但这是目标。 私有静态方法不可重用&#xff0c;而类则可重用&#xff0c;这…

448. Find All Numbers Disappeared in an Array

一、题目 1、审题  2、分析 一个整形数组&#xff01;元素值为 1~size; 出现的元素次数为 1~2 次。 求出所有 1~size 中没有出现的整数&#xff01; 二、解答 1、思路 由于元素值都为 1~size之间。所以可以将数组下标 index 进行联系。 ① 遍历数组&#xff0c;将出现的元素值…

枚举:如何正确使用name()和toString()方法

两种方法之间的区别&#xff1f; Java枚举有两种方法来检索枚举常量的值&#xff1a; name&#xff08;&#xff09;和.toString&#xff08;&#xff09; 。 toString&#xff08;&#xff09;方法调用name&#xff08;&#xff09;方法&#xff0c;该方法返回枚举常量的字符串…

gradle maven_Gradle – Maven的观点

gradle maven正如我博客的读者所知道的&#xff0c; 我有点像Maven迷 。 我从2007年8月左右开始使用Maven&#xff0c;从没有回过头。 但是&#xff0c;与其他所有情况一样&#xff0c;“变化是唯一的常数”。 现在这个领域还有其他参与者&#xff0c;Gradle似乎是最有前途的。…

JDK 9中已弃用Java的Observer和Observable

在博客文章《 应用JDK 9 Deprecated增强功能》中 &#xff0c;我讨论了JDK 9中 Deprecated批注中对forRemoval&#xff08;&#xff09;和since&#xff08;&#xff09;可选元素&#xff08;方法&#xff09;的添加 。 我在那篇文章中说&#xff1a;“在Java SE API上应用新的…

理解依赖注入(IOC)和学习Unity

IOC:英文全称&#xff1a;Inversion of Control&#xff0c;中文名称&#xff1a;控制反转&#xff0c;它还有个名字叫依赖注入&#xff08;Dependency Injection&#xff09;。 作用&#xff1a;将各层的对象以松耦合的方式组织在一起&#xff0c;解耦&#xff0c;各层对象的调…

java中怎样验证重复文件_java – 如何在下载之前检查URL中的重复文件

如果您有基本URL并存储具有相同文件名的文件.由于文件修改时间和If-Modified-Since HTTP Header,您可以询问服务器是否值得再次下载映像.File f new File();// the file to downloadHttpURLConnection con (HttpURLConnection) new URL("http://www.test.com/"f.ge…

Jason是炮王

Jason是炮王 转载于:https://www.cnblogs.com/TankJam/p/11203636.html

事件传递 java_将事件传递/发送到父组件?

在Angular中&#xff0c;我可以创建一个发出动作的子组件&#xff1a;Component({...template: Click Me})export class ChildComponent {Output() onChildAction new EventEmitter();childAction() {this.onChildAction.emit();}}以及处理它的父组件 . 就像是&#xff1a;Com…

mongodb身份验证_MongoDB身份验证

mongodb身份验证我最近更新了Mongometer &#xff0c;使其更加灵活。 发布新版本后不久&#xff0c;其中一位用户通过在帖子中发表评论来反馈问题。 我启动了我的机器&#xff0c;打开了我的IDE&#xff0c;发现了问题&#xff0c;并在半小时内将修补程序推送到了github 。 这不…

mysql列类型

http://hi.baidu.com/b37798969/item/429fb25f838f1d3233e0a99b MySQL支持大量的列类型&#xff0c;它可以被分为3类&#xff1a;数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述&#xff0c;并且总结每个列类型的存储需求&#xff0c;然后提供…

Java13的API_JAVA基础--JAVA API常见对象(其他API)13

一、其他API1.System类system类中的方法和成员变量都是静态的&#xff0c; 不需要创建System对象就可以直接使用。1 /*2 * 演示System的使用3 */4 public classSystemDemo {5 public static voidmain(String[] args) {67 /*8 * System类中的静态成员变量&#xff1a; out 和 er…

适用于Java开发人员的Elasticsearch:简介

本文是我们学院课程的一部分&#xff0c;该课程的标题为Java开发人员的Elasticsearch教程 。 在本课程中&#xff0c;我们提供了一系列教程&#xff0c;以便您可以开发自己的基于Elasticsearch的应用程序。 我们涵盖了从安装和操作到Java API集成和报告的广泛主题。 通过我们简…

人民邮电出版社图灵公司的两本SQL Server 2005图书诚征译者

人民邮电出版社图灵公司介绍&#xff08;来自http://www.turingbook.com/&#xff09; 北京图灵文化发展有限公司成立于2005年6月&#xff0c;由人民邮电出版社投资控股&#xff0c;以策划出版高质量的科技书籍为核心业务&#xff0c;主要出版领域包括计算机、电子电气、数学统…

java容器类继承_JAVA容器 - weslie - OSCHINA - 中文开源技术交流社区

一、 数组1、数组是保存一组对象的最有效的方式。但数组有固定的尺寸而受限(p216)2、数组与其他种类的容器之间的区别有三方面&#xff1a;效率、类型和保存基本类型的能力。在Java中&#xff0c;数组是一种效率最高的存储和随机访问对象引用序列的方式。数组就是一个简单的线性…

前端通信

Node中的net模块提供的前端通信 H5提供的 webSocket 【 常用于 移动端 】pc端低版本浏览器使用 socket.io 通信- 服务端&#xff1a; 总的服务器 举例&#xff1a; 腾讯的qq服务器 1个整体- 客户端&#xff1a; 单个用户使用应用 举例&#xff1a; 每个人的qq 多个client.js 客…

java定位线程阻塞_Arthas - 定位 Java 性能问题原来这么简单

目录&#xff1a;一、Arthas 介绍二、Arthas 使用场景三、Arthas怎么使用四、Arthas 定位性能问题定位Java代码导致占用CPU高的问题线程死锁前言&#xff1a;在做性能测试的过程中&#xff0c;当遇到Java性能问题&#xff0c;比如CPU飙升&#xff0c;负载突高&#xff0c;内存溢…

SVN 本地文件锁/服务端文件锁清除步骤

1.本地文件锁&#xff0c;直接cleanup&#xff0c;cleanup界面选择break locks即可 2.服务端文件锁&#xff0c;本地文件右击没有release lock或者break lock的选项时 方法1&#xff1a;右键&#xff0c;svn选择browser repo&#xff0c;找到该文件&#xff0c;右击&#xff0c…

java 对象复活_Java对象复活

java 对象复活总览 收集覆盖了finalize&#xff08;&#xff09;的对象之后&#xff0c;将其添加到终结处理队列中&#xff0c;以在调用每个对象的finalize&#xff08;&#xff09;方法之后进行清理。 如果您复活了物体&#xff0c;会发生什么&#xff1f; 何时定案&#xff…

a b和c 15 java_1011. A+B和C (15)

给定区间[-231, 231]内的3个整数A、B和C&#xff0c;请判断AB是否大于C。输入格式&#xff1a;输入第1行给出正整数T(<10)&#xff0c;是测试用例的个数。随后给出T组测试用例&#xff0c;每组占一行&#xff0c;顺序给出A、B和C。整数间以空格分隔。输出格式&#xff1a;对…