Skip to content

Latest commit

 

History

History
39 lines (12 loc) · 6.95 KB

开篇辞:谈谈编程与科研.md

File metadata and controls

39 lines (12 loc) · 6.95 KB

开篇辞:谈谈编程与科研

随着互联网的发展,人工智能的崛起,“编程”、“代码”、“程序员”等名词逐渐进入大众视野。上大学以前我也觉得编程挺神秘的,就像电影里的黑魔法,坐在电脑前一阵骚操作,就能达到某种不可告人的目的。直到后来因学习或科研的需要慢慢接触编程,才明白编程不过是对任务流程的规定性描述(先这么简单理解吧)。现在少儿编程正如火如荼地进行,日本就要往小学生教材里加入编程内容了,大环境下的中国家长也不免随波逐流,从此各类培优之外又多了门编程课,新一代的娃真不容易,想想咱的编程起步也是够晚的了。不过话说回来,咱起步虽晚,但目的明确,很多时候是碰到难题了才不得不借助于编程手段解决问题,这种学习模式有利也有弊,具体后面再谈。

科研的路上不可避免会碰到编程,尤其是理工科,甚至现在的人文社科在海量数据面前也不得不依靠程序。早期的程序就是为科研计算服务的,到后来硬件更强了,计算更快了,程序更复杂了,才有了今天五花八门的应用。科研工作很多时候是和数据打交道,简单的数据处理在Excel中就可以完成,稍微复杂点的就需要自己定义的程序来处理了。本科可能对编程在学习工作中的作用体会不深,到硕士遇到大量数据时会找些专业软件来处理,到博士甚至再往后,当自己的需求越来越复杂,数据越来越多样的时候,很少能再找到合适的软件满足自己了,不会编程将使你的数据处理与分析能力大打折扣。我曾见过费了九牛二虎之力只为了完成大量重复性劳动的学生,估计这样的人并不在少数,事情明明很简单,做起来却让人绝望。

前面所说的数据处理是对已有数据的分析归纳整合,科研中遇到的另一类与编程密切相关的问题是模型模拟,这比数据处理更为复杂,需要很多数学及相关专业的知识。从我所在的水利行业看,最新的学术论文或多或少会涉及模型,无论是模型应用还是模型创新,这是未来研究的一个趋势,很多试验无法测得的数据只能通过模拟的数值结果进行辅助。对于模型应用而言,可能是用已有的软件,也可能是用师门传承的代码,由于只是使用,对编程的要求没有那么高,但不会编程肯定是很难用好模型的。对于模型创新而言,编程能力和专业能力同样重要。

既然编程在科研工作中非常重要(而且是越来越重要),进入科研行列就应该或多或少懂些编程,但就我目前看到的情况,除了计算机相关专业的学生从本科开始学编程外,其它专业很少有正儿八经的编程课程。以我所在的水利专业为例,本科学过C语言,基本学完就忘,老师用着多年前的教案,在VC++6.0上展示(估计现在也还是这样吧),知识陈旧不说,很难引起学生学习的兴趣。可能大部分人跟我一样,自己买本教材对着电脑开始学,刚开始无人指引的一路辛酸只有经历过的人会懂,好在现在网络发达了,各种视频学习资源很多,但我想提醒一点的是不要以为视频教程能让学习更轻松,轻松的学习过程注定不够深刻。

确定要学编程以后,接下来的问题是学什么(编程语言有一箩筐),怎么学(稳扎稳打还是临时抱佛脚),以及学到什么程度(毕竟咱还有正经专业要学,编程只是辅助)。

***学什么?***我身边都是水利专业的学生,老师辈绝大多数用的是Fortran,老师的老师辈估计也是Fortran,这就叫历史传承吧,因为这个传承我们能站在前人的肩膀上乘凉,也因为这个传承我们的眼光被束缚得如古代女人的裹脚,真的一点也不夸张。现在很多国际知名的开源模型源码都是Fortran写的,这更加促使硕士新生一来就被裹胁着学Fortran。我并不反对这个语言,它有它极大的优势,我也是从Fortran开始走上代码之路的,但我的建议是不要被Fortran矇住了双眼,学完Fortran再去看看其它主流编程语言,你的编程能力才会有质的飞跃。我从C语言启蒙,到Fortran练手,再到C++进阶,中间也花过大量时间学Matlab,尝鲜似地看了看Python,综合比较有些许感悟,今后的文章中我会慢慢再谈。简而言之,只为了维护或使用师门代码的学Fortran,想快速上手处理数据画图的学Matlab,想立竿见影感受编程魅力的学Python,想深入学习不怕吃苦的学C++。

***怎么学?***怎么学编程是个见仁见智的话题,我只从个人角度给点见解。我的学习过程是稳扎稳打的,很多新知识第一次根本看不懂,看不懂不要紧,过一段时间再回头看,反复多次木头也应该开窍了。单学一门语言攻破难点的难度很大,很多时候需要结合其它语言或相关知识,交互式的理解,所谓他山之石可以攻玉,我对Fortran的理解和应用很大程度上得益于C++,Matlab的数组概念也得益于Fortran,总之彼此交叉,学起来相对轻松。如果你没时间学那么多,学不下去了就放一放,也许哪天会灵光突现。稳扎稳打的好处是知识成系统,有利于后期发力,缺点是花费大量时间,短期内效果不明显,所以急需掌握编程并应用的人不适合此法(by the way,我遇到的老师很不喜欢我这套学法,所以我都是自己找时间打基础的,也许其他老师有类似情况,尤其是上了年纪又不太重视编程素养的,所以硕士趁早学,少打两把游戏,少逛两次淘宝,给自己的将来攒点积蓄)。另一种学习法就是临时抱佛脚了,现学现用,的确省时间有效果,但除非你今后不想搞编程相关东西,否则别误了自己,赶时间的话可以试试,时间宽松以后还是要把基础打牢。至于学习教材工具之类的东西今后的文章中再慢慢介绍。

***学到什么程度?***这个就看你对编程的喜爱程度了,若说科研工作中处理数据,并不需要学得太深,掌握编程的数据类型(整型、实型、数组……)、三大结构(顺序、分支和循环)、基本输入输出(控制台和文件)以及函数等基本知识足以应付日常,学有余力的话还是多多益善吧。


本公众号后期写作规划

主要分三部分:一是编程相关的,写写Fortran、Matlab、C++的基础教材和实用案例等;二是水利相关的,介绍水利专业知识点,尤其是与模型相关的;三是杂谈系列,侃天侃地侃空气。写作顺序看心情,也看各位小伙伴的关注点和要求。让我们在交流中互相学习,互相进步!