编程的学习

必要性:当你对世界的运行有一个猜想或者理解的时候,你想检验一下;当你有这个世界运行的数据,你想发掘一下;当你有一个问题没法解析求解,你想大概看一下,你都需要运用计算机,而且通常是自己编程,来解决问题。

这个时候,最重要的是学会像计算机语言一样思考问题。具体来说,反映在面向过程编程上就是:知道流程的每一步,程序–想象成你自己–会面对什么数据什么情况,下一步做什么,尤其是所有流程控制的关键点。反映在面向对象的编程上面,就是要把问题转化成为对象和对对象的操作来解决。要搞清楚什么时候创建对象,什么时候改变对象的状态,用户做什么会激活这些创造对象和改变对象状态的事情。

这个像计算机一样思考回到传统的编程的时候你熟悉的语言就是画出流程图,以及搞清楚对象的抽象接口。

具体到语言的学习,不同的语言有不同的优势。可以考虑利用C语言来做科学计算和核心计算分析模块,利用Python来做字符处理、组装程序,用R语言来做统计分析,利用shell语言来做组装程序、输入输出和增加程序灵活性的控制。了解大量的程序包,并且熟悉其中的一部分。例如,所有的矩阵运算可以考虑lapack,傅立叶分解可以利用FFTW,一般积分插值等数值计算可以用gsl等等。

算法,语言本身,只要不是开创,是很简单的事情,通过编写一两个程序,也就学会了。进一步,我们不是真的计算机科学家,因此,算法方面,大多数时候,应该站在巨人的肩膀上,用其他人开发好的程序库来实现。语言本身大概包含程序的基本结构、数据类型、流程控制,库函数。前面的三个几个小时编一两个程序就能学会。后面的,用到再学,先大概浏览知道有哪些功能即可。

学会像计算机一样思考,了解语言和程序包之后,就需要开始写程序。写程序需要有良好的习惯和风格,例如变量和函数的名称要有意义,利用好注释,本功能拆分成尽量独立和能重用的子程序。缩进、大小写尽量保持一致。

当好科学家不是一件容易的事情,你希望各种理念和工具上,都走在世界的前面。