编程的本质是什么?

身处信息时代的漩涡之中,好用的App,似人非人的人工智能每天都与我们明里暗里的打着交道。而驱动这些工具的底层动力就是编程。

其实,我们既是信息的生产者,也是信息的消费者,更是信息的受益者。从人们开始接触信息开始,就不断的探索能否通过机械化的方式处理信息,直到图灵机的提出,冯诺依曼机的制造完成,人们才真正实现的信息的自动化处理。 而这个“自动化”,并不是机器的自动化,而是人赋予的,说白了就是编程。

那么,编程的本质是什么? 是让机器自动化的处理信息? 笔者作为一个具有16年编程经验的“老程序猿”也曾经试图探索这个问题。要回答一个问题,特别是要回答类似关于“本质”的问题,我觉得需要深入剖析问题本身。

所以,要回答编程的本质是什么,需要先回答“编程是什么?”这个问题。 而要回答编程是什么,就要先回答什么是程序? 那么,什么是程序? 对于学习过编程的人可能会说“程序就是机器可以理解的代码”,这个答案本身没有错,但是我觉得如果你对一个完全没有编程经验的人介绍,他肯定很蒙,他会接着问:“什么是代码?” 。 哈哈,我的回答是:“程序就是你做一件事情的详细步骤”。 就这么简单? 是的,这就是程序!

那我去洗澡,先打开热水,然后涂沐浴露,用毛巾,,,, 后面不可描述。 这个过程也是程序?是的,只是执行这个程序的人是你自己,而我们通常编出来的程序的执行者是机器而已。

那么?编程就是编写做事情的详细步骤了?对的,真聪明!

我前几天教我刚上小学的儿子编程时,我问他:“你可不可以编写一个程序制造一颗原子弹?” 他马上回答 “可以!” 。我又问“为什么?”,他说“因为电脑什么都能做!” 作为一个没怎么学习过编程的小学生,他这样回答我觉得没什么问题。他是基于计算机的算力来回答,理论上算力足够,确实可以。 但是他没回答到根本上。算力足够,就意味着一定可以实现吗?还记得前面提到的图灵机的产生,那是人们在追求通过机器的方式去模拟人处理、计算数据的产物。意味着,机器只是执行者,解决具体问题还得看人的“步骤”-“程序”。

那么我的回答是“不能”。因为他根本不知道制造原子弹的详细步骤。也就是说,当一个人对于具体问题没有解决方案的时候,是无法通过编程来解决

这就引申出了另外一个问题:很多人学习编程很久,但是一直不得其法。就连一个冒泡排序哪怕写了两年的代码,都不可能徒手写出来。对递归这种很自然的逻辑表达也是望而生畏。

是他不够聪明吗?不是。是他对编程的本质没有理解。一味的去追求编程的范式,编程语言本身的语法特性,却不去正视编程本身-“编排事情解决方案的步骤”。试想,此时如果有10个人站在你面前,你是否可以通过简单的命令让他们以冒泡的方式从低到高排好队呢? 如果不能,那冒泡排序的代码肯定也写不出来? 那这个命令怎么说呢?

  1. 从第一个人开始,和后面一个人比高矮,如果前一个人高,就换到下一个位置,否则不换,一直这样比较,直到最后一个人。这样,第一次下来后,最后一个人肯定是最高的。
  2. 按照上面的步骤,继续从第一个人开始,和后面的人比高矮,一直换到倒数第二个人。(为什么不到最后一个,因为第一轮下来,最后一个已经是最高的了)。

而对于递归,一个很好的例子是我们在一个排好序的队列里找某一个数。比如 [1,2,3,4,5,6,7,8,9,10]找出2。 这种二分查找的递归表达式怎样的?

  1. 先取这个数列的中间1/2处,与目标数比较,如果大于目标数就取出前一段,否则就取出后一段。
  2. 把第一步取出的那一段按照第一步的方式继续取中间的数字,并做比较,直到找到或者结束。

通过上面两个例子,是否对编程的本质有一些了解呢?

其实这里提出了另外一个问题?编程能力。 我觉得有两个:

一、以编程的视角,回答一个问题。 或者说程序化问题的答案。

二、将问题的答案通过程序表达出来。

第一条是硬实力,第二条通过练习可以慢慢获取。

我们每个人每天其实都在编程。你上班的过程是编程,早上6点起床,刷牙,洗脸,吃早餐,然后开车到公司,打卡,然后摸鱼或者工作…….   这些其实就是你自己对自己编程,一步接一步,哪个地方临时有问题,你会立马启用与之配套的方案,这就类似程序里的异常捕捉。 怎么样? 编程是不是很简单?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sanxiao2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值