我坚信
一个人的价值
并不在于他得到了什么
而在于他给这个世界留下了什么
上面的视频是我于2018年5月30号在运城国际学校周三共读会上发表的演讲,主要包括以下两个板块的内容:
编程到底是怎么回事?—— 解释编程的本质
编程课背后的编程—— 展示我在课上课下使用的编程技术和思维
下面是本次演讲的文字稿(根据录音整理):
首先,很多人对编程的概念就是一个胡子拉茬的程序员,端了一杯咖啡坐在电脑前,敲一些谁也看不懂的代码。那么,编程到底是怎么回事呢?
编程,就是编写程序。那什么是程序呢?
程序,就是做一件事情的流程。比如说我要在这里讲课,我得先有个准备,有个思路,然后做PPT,然后我演练,最后我才能站在这里给大家讲,这就是一个程序。再比如说制作一个汉堡,第一步先拿一个面包坯子,第二步放点这个,第三步放点这个,最后两个面包坯子一合,汉堡就做好了。
那么有人问,我知道这个事情怎么做就可以了,为什么要把它写出来呢?写出来有什么好处呢?
首先第一点,写出来之后可以让它变简单。你觉得一个程序对你来说很简单,那是因为你已经做了很多很多次了,你闭着眼睛都知道下一步要做什么,但是对其他人是否那么友好呢?未必。
把程序写出来可以使它更容易理解,也更容易执行。我们来看一个简单的案例:往往我们去超市买完东西回家,才发现有两样东西忘了买,还得再去跑一趟,很麻烦。那这到底是为什么呢?
因为我们人的记忆力是很差的,人的工作记忆只有四个组块。也就是说你同时只能理解和操控不超过四件事情,如果你在同时面对五件事情,那一定有一件事情会被你遗漏,或者得不到应有的重视。
如果我们在做一个步骤很多的事情,除非你对它特别熟悉,已经达到了条件反射和肌肉记忆的地步,否则很容易出现这样的情况:事情做到一半,有个电话进来了,等接完电话回来,就可能记不起现在做到哪一步了。这时候就可能漏掉一个步骤,或者把一个已经做过的步骤再多做一次。这是非常常见的情况。
如果我们把程序写下来,就可以把我们的大脑解放出来。我不需要时时刻刻记住这个程序有多少步,现在我执行到哪一步了。我只需要用一种方式把它们记录下来,比如说购物清单,我买了一样东西就打个勾,证明我已经买过了。然后不管什么时候我拿起这个清单一看,还有南瓜和西红柿没有买,去买就好了。
程序写下来之后,就可以成为独立于我们的存在。比如说王志江校长的数学课上得很厉害,但那是他的数学课,别人上不了。他只有把自己的数学课怎么上给梳理出来,成为一个结构和系统,别人才能去操作。现在王校的数学课已经做出来了,即使他以后不再上数学课了,而他的数学课还能继续存在。
把程序写下来还可以做到标准化,什么是标准化呢?我们来看一个案例。
大家都去过麦当劳或者KFC,要知道麦当劳在全球有三万家门店,但你不管你走进哪家店去买一包薯条,味道绝对是一模一样的,因为麦当劳有一套非常详尽标准化的制作工艺:用什么产地的土豆;多少天采摘的土豆;经过怎样的削皮和预处理;切成什么尺寸(精确到毫米);在多少温度的油里炸几秒、翻几次;捞出来晾多久……都有非常详细的规定。那经过这样的标准化的工序做出来的薯条,口感肯定是一模一样的。
我们经常在网上去搜菜谱,里面往往会有一些让人觉得无奈的描述。比如“放适量盐”、“加少许醋”……这该怎么理解呢?我的“少许”可能是这样,你的“少许”可能是那样。这种情况下,就不可能避免带来误差。同样的程序,我执行出来的效果可能和你完全不一样,因为我们对标准的理解是不一样的。只有把这些细节都量化了,才可能减少误差。
当你做到标准化之后,产品和服务的质量才能得到保障。正如刚才我所举的例子一样,我去麦当劳吃薯条,我100%确定就是那个味,闭着眼睛都能确定就是那个味,所以我会对它产生一种信任。再举一个大家比较熟悉的例子:兰州拉面。遍地都是对吧?但我并不能确定,今天去的这家和昨天去的那家味道是完全一样的,肯定是不一样的。
最后,标准化之后可以解除对特定的人与环境的依赖。最初麦当劳的薯条也好汉堡也好,都是在麦当劳兄弟开的小店里做的。但是他们把这些制作工艺标准化之后,就可以让其他人操作,可以不在他们开的店里,也可以不在美国,可以在世界上任何一个地方。这就是麦当劳可以做到全球三万家门店的原因。
把程序标准化之后可以做到自动化。简单来说,就是可以突破人类体力和脑力的极限。这个话题我在去年南明年会(传送门:
什么是计算机科学?
)上是讲过的。
首先我们来看个案例。虽然现在大家可能都用微信,不怎么用现金了,但有时候还是需要去取钱的。那你更愿意去ATM取钱还是银行柜台取钱呢?大家肯定都更愿意去ATM取钱,为什么呢?
因为银行柜员是人,而人可能会出错,人还需要休息,周末还不上班,周内工作时间也有限,资源稀缺,效率又低,你得排队……所以大家更愿意去ATM取钱。但是我们看一下,其实他们做的事情是一模一样的:
检查你的银行卡有没有问题
验证你的银行卡里有多少钱
问一下你要取多少钱
检查一下看你的钱够不够
够的话,把钱数出来给你
从你的银行卡上扣掉这笔钱
把银行卡还给你
一模一样的程序,但银行柜员可能要办理5到10分钟,而ATM呢?可能只要5秒钟。而且机器是非常擅长做这种重复性的事情的,一个银行柜员可能一天下来只能做接两百单,而ATM理论上可以完成成千上万的业务。
机器的可用性和可靠性是人完全无法比拟的。ATM可以7x24小时工作,人不行。人很容易犯错,机器则极少犯错。
还有成本和效率。人是很贵的,你请一个人除了要发工资,还得给他买保险,伺侯他的情绪,情绪不好他要罢工,你跟他沟通还有效率问题,人的状态还起伏不定,人的水平还参差不齐,而机器没有这些问题。
那么编程仅仅是把做一件事情的流程写出来就完了吗?不是的。
第一步,把复杂的程序变简单。怎么变简单呢?比如说,我要做一件非常复杂的事情,根本没法做,那么我就把它拆成N步。举一个例子,特斯拉的总裁马斯克有一个目标是在有生之年把100万人送上火星,一听就是一个疯子的计划,完全不可能。但是他是怎么想的呢?他分成三个步骤:
先研究怎么把东西送到太空上去
想办法把这个成本降低到一个中产阶级就能承受的价格
想办法发展和储备在火星上生存的技术
然后他就这么做了。现在大家已经知道他的SpaceX是最成功的民营航天公司,这家公司的火箭发射成本已经低到别的公司无法和他竞争了。然后他为什么要做特斯拉呢?这个车是准备设计在火星上开的,因为火星上没有氧气,汽油车开不了,只能用电动车。
第二步,把简单的程序标准化。正如我们刚才说的菜谱的例子,如果不够标准化,就算写出来了,别人操作起来也不能达到相同的效果。还有,相同标准的事情可以合并起来批处理,待会我会再详细讲这一点。
第三步,把标准的程序自动化。当你把一件事情做到足够的简单、足够的标准时,就可以交给机器来做,从而解放我们人的时间和注意力,去做更有价值的事情。
简而言之,编程就是把做一件事情的流程简单化、标准化、自动化的过程。
这一部分主要介绍了我在编程课上使用编程技术和思维来提升工作效率的一些案例。提纲如下,懒得整理文字了,大家看看视频就好(12分44秒开始)。
主动推送可能需要的信息
记录一切可量化的数据
建立消息队列,进行异步处理
合并重复,拥抱变化
用程序完成周期性的工作
将相同标准的工作进行批处理
当然我知道你也很懒,所以再给你贴一遍:
领取专属 10元无门槛券
私享最新 技术干货