我是一个数学很差却仍在做物理的人。
我在国内化学和材料类专业感受到的最主要的问题就是学生普遍数理基础都很差。虽然也要学数学和物理,但都属于白学了的那种。本科毕业的脑中的物理图象仍然一塌糊涂,也不愿意主动进行抽象和空间思维,演绎能力差。事实上,只有重点大学物理系里的一些脑子灵的小伙子具备继续讨论的前提,但对于这些人编程什么的也根本不成问题了。可以说对于这类人让它自学任何东西然后现学现卖都不成问题。
在化学和材料专业的学生中,总有很多人是最起码的变量概念都没有、不理解y=y+x的完完全全的编程盲。或者说,电脑对他们来说就是一些user friendly的软件界面。他们要从每三五行就一个bug的水平到写出几百行的代码做个有限元,要走的路太长了。不需要到算法的层面,一些最基本的编程的小技巧,都是要平时长期玩长期网上找答案而积累下来的。如果思想上不是有着一种解决问题的主动心态,而是很困惑很抗拒只想早点解脱(例如一些女生),那就可能永远也不会进步到能解决问题的编程水平。至少数组、函数那几块就可能停很长时间。连书上或者help里的范例代码都读不懂的水平。而且debug也是需要经验和技巧的。不怕bug的人与其说是因为写的时候出错少,不如说是因为他debug的经验和能力很丰富。一个看一晚上都看不出来的bug可以永久地浇灭一个人对编程的兴趣。
好,如果你说,你以前也对编程感过兴趣,学过一下VB之类的,那就很好。但这时应该做的不是直接去编程,而是补习数学,搞清楚一些科学研究方法的概念性问题。例如很可能同样给个方程,他会分不清去“拟合”和去“预测”有什么区别。或者方程直接就看不懂,没学过张量,双点乘以为是冒号直接输到电脑里,等等。先不要管怎么编程去运算,写在纸上的数学式子要都能看懂了。这种能力对于国内学生是不保证的,要花相当的时间去看教科书。除了说仅仅把公式看懂需要数学之外,有很多方程的具体形式造成了它解的时候难收敛,你要先对它进行一些“改造”,这种sense则需要更高的数学敏感度。有的人说,也可以优化算法。但是对于“学过一下VB和微积分”的本科生,微积分一定学得比VB好,让他们在解析的世界多做事比在数值的世界多做事要来得容易些。但仍然有很多人仅仅化简几步就不得不抱着数学用表翻来翻去。
接下来就是仍然逃不开去看《数值方法》(numerical method)教科书,这是核心。否则,你哪怕直接使用Matlab的ode45,也完全灵活不起来,因为你不明白为什么ode45需要这么些个信息来解你那个方程,那个你手工解完全没戏的微分方程,电脑是如何能够算出结果来的?这样的知识不具备的话可能就只能用比ode45更傻瓜的软件了。而且,有很多任务还是需要自己重头写的。
有的人说MATLAB慢。对的,不过,对于做材料类研究的课题组,用经费买台性能优异的计算机比起让学生改学C++来得更容易些。
可是,进行对实验结果进行一些数值分析,从世界范围来讲,是理工科研究的必备能力,无非是中国的理工科教序(物理类的除外)这方面教育缺失而已。如果无非是投一篇稿子的时候审稿人叫你拿哪个模型预测比较一下,你就要完成上述的整个历程,那干脆改投别的杂志拉倒了。我觉得对于一个课题主要是过柱子打核磁的国内研究生,很难要求他去做这件事。但是在国外却不一样。至少我去过的KIT高分子化学楼里的学生,似乎都不害怕要去碰MATLAB,或许因为他们本来就有很多师兄师姐懂这个了,本来就有一种轻易用一下MATLAB气氛。如果你看到一博士论文的前四章全是做合成于是认为他一定数学很差那就错了,很可能会被最后一章亮瞎。
作为experimental physicist,除了编程解决数学问题之外,更经常遇到的是编程解决真实世界问题,例如给51芯片编程来控制一个马达的伺服这种基本DIY技能。一些基本的单片机编程技术在仪器房里是很吃香的。可是,在国内你是很难想象这种能力是化类学生的标配,只能说是可遇不可求。你叫学生从连什么叫“中断”都搞不清楚,焊十个点八个虚焊的水平,到做出一个带反馈的测量控制部件,你准备给他多长时间呢?大多数学生只想做现成能做的事情来毕业,要看这么多书才解决一个小问题,他们往往干脆选择绕开。读研对他们来说只是一项投资,拿学位找工作是他们要的结果,代价就是要花三五年时间。叫他们在这三五年时间多花一分精力,都是让他们拿到的学位的性价比减小一分。
所为什么华人做纳米自组装材料这方面的论文最厉害?因为这些研究是过个柱,打个核磁,照个电镜,扫个AFM,拍个数码照就能发JACS或者Adv Mater的,非常适合中国研究生的平均生源质量状况,也非常适合中科院包工头式的“生产模式”,学生只需要干活就行。
从题主女友的情况看,好像她想问这个问题的原因无非是把编程当成英语,看到别人很牛,觉得自己“提高一下总是好的”?但哪怕是这样,我也想说英语好的人是因为他自己感兴趣、平时对英语现象非常敏感而长期积累回来的。编程也差不多。其实,陈浩好像是做数学的,傅渥成好像是不沾实验的。人的时间是有限的,一天只有24小时。努力程度相当,也要找一个背景相似的人来看齐,而且这也是可遇不可求。我一直就苦于找不到什么这样的标杆。都比我牛好多,或者都比我系统。
最后还是给些直接的答案吧。我的应用现状:MATLAB可以做绝大部分的数值分析工作。Mathematica我只习惯用来作为一种符号运算和认识陌生函数行为的东西,用得不多。对于一些普通方法很难做的拟合,我也会找一些现成的工具包。简单的蒙特卡罗用MATLAB都可以做一下。如果专门要做计算机模拟,就用Materials Studio。但是,世界上很多人不用Windows系统。世界上也很多人没钱。所以就出现了很多Sage、R、Octave等东西。