学习一门新的编程语言首要您需要明白什么是编程。

对于需要输入的数据经过一系列工序达成预期的输出。而把这个过程变成计算机能够代为执行的语言的过程就是编程。

这种例子生活中最典型的是做菜,一般而言越是精致的菜肴工序越多。而程序源码就是菜谱。不同的是程序源码是由计算机执行预期目标的,而菜谱是有厨师来执行的。

如果把编程比做做菜,那么编程的工具就是炊具。那么编程的工具又是怎么来的呢?我们要制作炊具,比如铁锅,我们需要采矿,冶铁,制作模具,铸造......等等工序。而我们做菜是不会从采矿开始的,同样的我们编程也不会从制作编程工具开始的。我们知道铁锅也是由一系列工序构成,铁匠就是执行工序的人。同样的编程的工具也是编程而来的,执行的也是计算机。

我们知道了编程工具也是编程而来,那么当计算机世界内第一个程序是怎么来的呢?有知道计算机史的人大概会说是二级制机器语言,人类制作的第一台现代计算机智能理解二级制语言,人们通过直接写入硬盘的二进制语言让计算机来执行,第一批软件(工具)就是这么形成的。但是我这里有着不同的观点,我通常认为世界是先验的,现有道而后有天地。第一套程序大概是来自于数字逻辑,人们基于现代逻辑学设计了门电路(只是二级制恰好能够完美表达各类逻辑电路而已),画电路图大概是最早编程了,而后各类电路算法的实现形成了现代的计算机。

计算机内最常见的编程工具就是编译器了,编译器的本质就是翻译器,把计算机不懂的语言变成二级制计算机能够理解的语言,并且执行。举例说,计算机不懂C语言,就有了C语言翻译成汇编语言的工具,计算机但是也不懂汇编语言,于是就有汇编语言翻译成二级制的工具。

再对比做菜,如果说编译器是炊具,计算机是厨师,那么源代码就是菜谱,要书写菜谱,妳不可能重新发明笔和纸,虽然在二级制编码的时代,人们也是用纸打孔让计算机理解的。我们现在用文本编辑器,如上所述,文本编辑器也是编程得来的。计算机的伟大之处也是在于各种东西最终都是二级制,而现实生活中,做菜,造炊具以及造纸币是完全不同的事情,需要不同的执行者和材料。

有了合适的编译器和文本编辑器,妳就可以指导妳的大厨做菜了。

接下来我们谈谈做菜的工序,从逻辑上说世上使用三种工序的组织方式:顺序、循环、选择。

一般而言菜谱都是顺序的,就是每道工序都是有先有后的。比如西红柿炒蛋的食谱(有其他做法,咱们不抬杠哈)如下:

主料:西红柿,鸡蛋
辅料:小葱
配料:油,盐,糖
步骤:

  1. 洗西红柿
  2. 切西红柿
  3. 鸡蛋打散
  4. 坐锅放油烧热,倒入鸡蛋
  5. 大火快速滑炒后装起
  6. 用余油开始炒番茄
  7. 要壹直炒至出汤,出汤后再加小半碗水进去
  8. 等到汤汁渐浓之后把鸡蛋和葱花倒进去
  9. 炒匀,放少许白糖及盐调味即可

但是仔细考虑考虑实际情况,炒完蛋可能油加少了,我们也可以设计选择的结构,如下:

主料:西红柿,鸡蛋
辅料:小葱
配料:油,盐,糖
步骤:

  1. 洗西红柿
  2. 切西红柿
  3. 鸡蛋打散
  4. 坐锅放油烧热,倒入鸡蛋
  5. 大火快速滑炒后装起
  6. 如果有余油
  7. 用余油开始炒番茄
  8. 如果没有余油
  9. 向锅内加油,执行7
  10. 要壹直炒至出汤,出汤后再加小半碗水进去
  11. 等到汤汁渐浓之后把鸡蛋和葱花倒进去
  12. 炒匀,放少许白糖及盐调味即可

我们从中也可以看到循环的结构,比如翻炒和观察,翻炒就是厨师重复做几个动作,通常循环必须和选择一起出现,不然就会无线循环下去。菜谱可以这么写:

主料:西红柿,鸡蛋
辅料:小葱
配料:油,盐,糖
步骤:

  1. 洗西红柿
  2. 切西红柿
  3. 鸡蛋打散
  4. 坐锅放油
  5. 循环观察油烟这个动作
  6. 如果冒烟,说明油已经热了
  7. 停止观察动作的循环
  8. 倒入鸡蛋
  9. 大火快速滑炒后装起
  10. 如果有余油
  11. 用余油开始炒番茄
  12. 如果没有余油
  13. 向锅内加油,执行7
  14. 循环翻炒
  15. 循环观察
  16. 如果出汤,加半碗水
  17. 停止观察
  18. 停止翻炒
  19. 等到汤汁渐浓之后把鸡蛋和葱花倒进去
  20. 炒匀,放少许白糖及盐调味即可

其实还有很多可以判断,重复动作的描述,但是篇幅有限,就不再累述,编程本来就是一种细致思考的过程,哈哈,有可能容易变得婆婆妈妈哦。

总结,顺序、循环、条件选择构成工序的基本特性。

计算机是执行力超强但是不知变通的执行者,你不能指望它和厨师一样现场凭借经验把主料,配料,辅料的用量搞清楚,但是计算机也不会像不合格的厨师那么说好盐10g ,但是手一抖倒进去50g,把客人齁死。

所以定量很重要,一开始就要说明好需要处理的食材和配料到底多少。新的食谱如下:

主料:西红柿400g,鸡蛋2个
辅料:小葱10g
配料:油70g,盐10g,糖20g
步骤:

  1. 洗西红柿
  2. 切西红柿
  3. 鸡蛋打散
  4. 坐锅放油
  5. 循环观察油烟这个动作
  6. 如果冒烟,说明油已经热了
  7. 停止观察动作的循环
  8. 倒入鸡蛋
  9. 大火快速滑炒后装起
  10. 用余油开始炒番茄(事先定了量之后,就不需要判断是否有余油了)
  11. 循环翻炒
  12. 循环观察
  13. 如果出汤,加半碗水
  14. 停止观察
  15. 停止翻炒
  16. 等到汤汁渐浓之后把鸡蛋和葱花倒进去
  17. 炒匀,放白糖20g及盐10g即可

这样还有一个问题,有些数量不是事先能够规定的,而是执行工序的过程中产生并且不断变化的,比如汤汁浓稠度我们把事先能够把握和规定的叫做常量,工序中产生的叫做变量。新的食谱如下:

主料:西红柿400g,鸡蛋2个
辅料:小葱10g
配料:油70g,盐10g,糖20g
步骤:

  1. 洗西红柿
  2. 切西红柿
  3. 鸡蛋打散
  4. 坐锅放油
  5. 循环观察油烟这个动作
  6. 如果冒烟,说明油已经热了
  7. 停止观察动作的循环
  8. 倒入鸡蛋
  9. 大火快速滑炒后装起
  10. 用余油开始炒番茄(事先定了量之后,就不需要判断是否有余油了)
  11. 循环翻炒
  12. 循环观察
  13. 如果出汤,加半碗水
  14. 停止观察
  15. 停止翻炒
  16. 开始记录汤的浓稠度,初始为0(不必纠结这个数字,就是一个标示程度的)
  17. 循环观察汤的浓稠度
  18. 如果汤汁浓稠度到了100, 倒入鸡蛋和葱花
  19. 循环观察结束
  20. 炒匀,放白糖20g及盐10g即可

至此,我们已经明白了顺序(实际编程中,语句一般用';'号间隔),选择/判断(if),常量(const),变量(variable)

说了这么多概念,你该如何开始学习一门新的语言呢?我们已经了解编程语言不过是表达工序的工具,所以,在得到一门语言的学习书籍的时候,首先要搞清楚自己使用什么文本编辑器来写工序,然后了解使用什么语言编译器来翻译你的工序给计算机执行,这门编程语言的常量和变量是怎么定义的,这门语言顺序,循环和选择的逻辑结构是如何表达,也许一天你就能够入门了。

既然概念如此容易,编程到底难在什么地方呢?答案在编程之外的能力,设计良好的数据结构(你如何安排好你的厨房的摆设)可以方便工序操作提高执行效率,精巧的算法(比如多个厨师流水分工,或者同时做不同的事情的协调)。

此外,很多时候判断语句是很难的,比如上面菜谱中汤汁的浓稠度,这就需要数据建模对汤汁浓稠度给出准确定义。而复杂判断,比如以下命题:

A说B说谎,B说C说谎,C说AB说谎,那么谁说的是真话谁说的是假话。

系统地逻辑学学习和训练可以保障你的程序不会有业务性错误。

好的程序员一定是博闻强识的,其他的就是代码搬运工。

与君共勉。