# 简介

- 本节作者: {{姚家园}}、{{田冬冬}}
- 最近更新日期: 2022-03-12
- 预计阅读时间: 5 分钟

---

## 为什么要学编程？

几乎所有高校在大一都开设了类似《C 语言程序设计》这门课，想必你对 C 语言以及
编程都已经有了一些了解。编程本质上就是人将某个问题的解决思路写成
计算机能够读懂的指令，计算机则执行指令帮助人解决问题。

地震学是一门基于观测数据的科学。地震学科研中需要对大量观测数据进行处理和分析，
并作一些理论计算，因而需要通过编程让计算机辅助完成数据处理或科学计算。

## 编程语言有哪些？

世界上存在的编程语言有几百个，其中用的比较多的大概有十几个。
编程语言根据执行方式的差异大致可以分为两大类：

编译型语言

: 编译型语言是指需要使用特定的**编译器**将源代码编译成在当前系统上可执行的
  二进制文件，再通过运行该二进制文件以执行代码。
  C、C++、Fortran 和 Java 等是常见的编译型语言。

解释型语言

: 解释型语言是指需要使用特定的**解释器**读取源代码并立即执行代码。
  Python 和 Matlab 等是常见的解释型语言。

  一般将解释型语言编写的源代码称为脚本（script），所以解释型语言也称为**脚本语言**。
  实际上，脚本就是包含一系列指令的文本文件。解释器读取这个文件，
  立即依次执行脚本里的所有命令、函数以及表达式等。

两种语言都有各自的优缺点。一般而言，编译型语言编写的代码运行速度更快，但需要
花费更多的时间编写代码，还需要先编译才能使用，因而需要掌握编译方法。解释型语言
更易于编写，开源的软件库和模块更多，不需要编译即可执行，但一般代码执行速度慢。

## 我该学习那种编程语言？

**地震学科研工作者需至少掌握一门脚本语言，同时推荐学习一门编译型语言**。对于脚本语言，
推荐使用目前在地震学领域最流行的 Python 语言，其官方模块、第三方模块和软件包众多，
基本可以满足日常科研工作需求。而使用哪种编译型语言并不重要，熟悉掌握一门编译型语言，
其他编译型语言也就可以很快地学会和上手了。

日常的数据处理和简单的科学计算可以使用脚本语言快速实现，以便迅速上手和开展研究。如果需要
更高的计算效率，可以使用编译型语言编写代码。因此，完成一个项目往往是同时使用这两类编程语言
来编写代码。有时候还可以用脚本语言快速、便捷地实现一个任务的一部分，然后调用使用编译型语言
书写的需求计算效率的另外一部分的代码来加速计算。

需要注意的是，在本教程中我们将 Linux 和 macOS 系统的 Shell 也归为脚本语言。严格说来，
Shell 其实本身只是一个空壳，具有最基本的条件判断和循环功能。借助 Linux 和 macOS 系统的
命令行工具，如 `awk`、`sort`、`grep`，其可以用来做日常的数据处理、
字符串处理等。Shell 脚本一般仅适合用几行就可以搞定的简单程序，更复杂的情况建议使用其他
脚本语言来完成。我们以一种常见的 Shell 来讲述其基本语法和用途，即 Bash，其他常见的 Shell
还有 Zsh、csh 等。

日常编程除了直接编写代码，往往还需要写 README 文件和记一些笔记，有时还要写代码的参考文档。
因此，推荐学习一种标记语言以便更简洁、更高效地完成上述事务。推荐学习 Markdown 标记语言。
