什么是编程(未完成)

作者:Windson Yang
更新时间:June 1, 2018
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明 www.enginego.org。

我常常去参加一些编程活动,意外的是,这些活动中我接触到很多想学习计算机的朋友。他们想学习编程,但是常常被计算机不同的范畴弄得头昏脑胀,先学编程语言呢,还是数据结构和算法,先学建网站,写 APP,还是大数据,人工智能?这里我推荐 Crash Course 计算机科学的视频,它从原理介绍了编程的起源以什么是编程,非常有趣和浅显易懂,适合完全零基础甚至初中生去看。

在电子计算机还没有被发明的时候。计算机指的并不是我们现在常识中的电脑硬件,而是使用计算器计算的人(大多是女性,我猜因为女性比较细心,容易管理)。她们会被分配一些数据和需要计算的步骤,接着按照步骤耐心地操作计算器,然后写出结果。如果你看过电影《隐藏人物》应该会对一大堆女生拿着计算器埋头计算的场景有印象。不过,你不会把用计算器按下数字得到答案当作在编程,只会把它当成是使用工具的一种方式,但是实际上它与编程并没有太大的区别。举个例子,我们现在需要把一个文本文件的数据转换为Excel表格保存。文本的内容是:

Shall I compare thee to a summer’s day?

Thou art more lovely and more temperate.

Rough winds do shake the darling buds of May,

我们想把这些数据转换成Excel文件:

A1 A2 A3
Shall I compare thee to a summer’s day? Thou art more lovely and more temperate. Rough winds do shake the darling buds of May,

与按计算器不一样的是,这里的数字变成了三行的文本,乘法法则变成了格式转换。得到的结果变成了Excel的文件。不过它们两者都遵循三个原则,接受数据,处理数据,输出数据,要解决这个问题就像按计算器一样简单:

  1. 读取文本文件中的数据。
  2. 把文字按照Excel的格式需要转换成新的格式。
  3. 把新的数据存储起来。

即使不会编程,我们也可以猜测到读取数据与存储数据应该非常简单(如果没猜对的话我偷偷告诉你),难点应该在转换这一部分。我们分析下这部分要怎么解决,要存储为Excel格式的文件,我们可以先参考Excel是如何存储数据的。我们假设我们要得到的Excel表格是这样存储的:

A1: Shall I compare thee to a summer’s day? (black, bold, normal, 20)

A2: Thou art more lovely and more temperate. (black, bold, normal, 20)

A3: Rough winds do shake the darling buds of May, (black, bold, normal, 20)

看起来不像表格?没关系,Excel程序会自己处理的,你可以想象Excel程序是一条流水线,先把所有的数据读出来放在流水线上,当符合要求的产品经过,就进行加工,显示为不同的表格样式。上面的这种格式在编程中我们称这个为列表,它就像我们平时手机上的备忘录,或者购物前列出的购物清单,把要做的每一项按照顺序写下来。最后面的括号里面的是什么?我们试试把”black”改为”blue”再保存,发现字体的颜色都变成蓝色了,原来这些就是字体的设置,在编程中,我们称为参数。回到我们刚刚的任务,要把文本文件的数据转成Excel格式,只需要在原本文本文件的数据的每一行前面加上”A”,行号,冒号和用括号包含的一些参数就行了吧。Yoo!我们解决了一个重要的问题。实际上,Excel并不是这么存储数据的,不过我们可以把它当成这样,Excel提供了外部接口给我们使用,。等等,外部接口又是什么意思?回到计算器的例子,当我们输入5*28,按下等号的时候,我们不需要知道计算器是通过什么方式计算结果的,我们只知道只要我按照正确的规则输入,而不是输入*5 28,我就能得到正确的答案。这里计算器提供的就是外部接口。你只需要按照规则把数据传进它提供的接口,就能得到结果。同样地,Excel也提供了类似的接口,只要你按照语法与顺序告诉它每一行的属性,它就能按照要求得到数据。

不如先把数据转换成中间数据,再进行转换。其实当我们想到这一点,我们已经解决了这个问题了。什么?还没开始写代码?写代码是最简单的事情。初入编程的同学觉得编程难,往往他们纠结于编程的语法与编程语言的特性中,其实这些都不是最重要的。就像写作一样,你的文笔固然重要,但是更重要的是故事的构思与思想。这也是作家与语言学家最重要的区别。