要对计算机发出指令,就要通过程序算法,对想要得到的结果,设定每一步的操作步骤来实现。换句话说,如果具备程序化的技巧,就可能积极地调动计算机的力量。那么,应该怎样进行程序化呢?
我们以常见的自动售卖机为例,说明一下程序算法是什么,以及如何拟定程序算法。
首先,按照我们平时使用自动售卖机的基本流程,尝试设定大致的步骤。“付款、点击按钮、取得商品”,可以表示为下图。
以上是基本的流程,但这是使用者的操作步骤。自动售卖机的程序算法,需要以自动售卖机的角度来设定。下图是从自动售卖机的角度设定的程序,(1)和(2)应该填入什么呢?菱形框表示条件判断。条件判断的内容为“是”的,就沿着“是”的箭头走,条件判断的内容为“否”的,就沿着“否”的箭头走。
(1)是开始之后最初的动作。如果没有收款,自动售卖机不会开始运作,所以可以推测是“是否已收款”。
(2)是连接“亮灯”和“提供商品”的条件。提供商品的触发条件是“是否已被点击按钮”。
这样,就从自动售卖机的角度拟定出了程序算法。从人的操作步骤到自动售卖机的程序算法,可以发现人的行动对于自动售卖机来说成了条件。
以上已经拟出大致的流程,实际的程序算法会更为复杂一些。
接下来我们进一步细化。请思考一下,下图的(3)可以填入什么?
(3)是判断“是否已收款”的下一步,所以是“已收到了款项”的状态。另外,再下一步是“亮灯”,所以要考虑连接“付款”和“亮灯”的条件。“付款”和“亮灯”之间,有什么是必须确认的呢?或者说,“付款之后没有亮灯的情况”在什么时候会发生呢?
判断亮灯的条件是,“收款是否足额”。
我们总结一下目前已经进行的步骤。拟定程序算法大体有两个要点。
1. 简单地拟出核心算法
2. 进一步添加附带条件等
1. 简单地拟出核心算法
首先,把基本的流程归纳成操作步骤。把实际使用自动售卖机时的具体环节归纳为标准的流程并按顺序排列出来。
关键点是,不要混淆主语。如果站在使用者的立场来考虑,自始至终都要从使用者的角度来拟定。由于最终是要从自动售卖机的角度拟出程序算法,所以已经习惯程序算法的人也可以直接从自动售卖机的角度来考虑(最终要输出的程序算法)。
另一方面,也可以像本次说明的一样,在习惯程序算法前,可以先从使用者的角度考虑流程,然后再从自动售卖机的角度拟定程序算法。
2. 进一步添加附带条件等
敲定基本的步骤以后,接下来就要考虑附带条件。
同时考虑基本步骤和附带条件也可以,但要先习惯这种思维。此外,附带条件如果要琢磨的话,会有非常详细的内容,所以建议大家分两步进行,先拟定好基本的步骤,再考虑附带条件。
下面具体介绍拟定附带条件的思路。要用以下准则进行检查:当条件被满足时,前进到下一步的行动有没有问题。
以这次的例子来说,有两个地方需要检查。
一个是收款之后,是否可以亮灯;另一个是被点击按钮之后,是否可以提供商品。
关于检查1,刚才进行了说明。因为可能会发生使用者付款不足额的情况,所以可以增加“收款是否足额”作为附带条件。
关于检查2,我们也来思考一下。
尝试考虑“点击按钮之后就提供商品是否可以”,或者“是否存在点击按钮之后仍然不提供商品”的情况。
例如在商品售罄等情况下,想提供商品也无法提供。不过,这种情况本来就应该设置为无法亮灯。关于亮灯的按钮被点击的情况,似乎不用特别增加附带条件。
这样,程序算法就拟好了。
练习题
我们继续来思考附带条件的情况。刚才对于“是”的情况已经考虑了附带条件,而“否”的情况下的附带条件也要提前考虑好。括号里面应该填入什么内容(是相同的内容)?
解答
大家尝试考虑一下通过怎样的流程会进入菱形的状态。我们知道存在“付款不足额”,或者虽然亮灯了但是“按钮没有被点击”这种情况。同时,从流程图来看,在这个条件下如果判断为“是”,就会在不提供商品的情况下结束流程。
从自动售卖机的角度考虑的话,知道有人可能会购买,但如果是(4)的话,就意味着销售条件不完整;如果是(5)的话,就意味着无法进行商品的选择,这样就需要在某一个时间点放弃提供商品。“商品提供被取消”的触发条件是时间,需要考虑几秒比较合适,例如要拟定逻辑,判断“是否经过了15秒”。
STEP UP!
我们看到,如果要给计算机发送指令的话,就要拟定程序算法。刚才是以自动售卖机为例进行的说明,实际上商品售罄时的处理、找零钱不够时的处理等,都是需要作为附带条件添加上去的,这就会更为复杂了。
随便找一个自动售卖机来看,它的内部都是由这样步骤分明的程序算法来驱动的。如果没有这个程序算法,自动售卖机就不能运作。
可能有些人会觉得因为有了AI,所以工作全部交给AI就行,但如果它的末端没有进行这种程度的步骤划分并拟出程序算法,计算机也无法运转起来。
另一方面,如果能够做到分步骤并拟出程序算法,就可以借助计算机的力量。今后,越了解程序算法,就越能活用计算机,这会成为差异化的能力。
“被计算机抢去工作”的话题经常被讨论,如果是能够分步骤完成的作业,就很容易被替代。这些范畴的工作,其实应该积极地交给计算机去做。
相反,难以运用程序算法的事情,可能更应该让人去积极地参与,具体如下:
·步骤较多的事情
·会发生步骤交替的事情
·判断基准有多个的事情
·判断基准本身不明确的事情
·需要依靠感觉或经验的事情
然而,那些很难的事,例如,需要依靠感觉或经验的事情,一旦能够分步骤并拟出程序算法,可以说从那个瞬间开始,计算机就能成为我们的伙伴。
我们能够在多大程度上依赖计算机进行工作,这是一个需要具体情况具体分析的重要课题。但是,这肯定会成为今后的关键技能,所以建议大家能够对它有基本的理解。
小结
√ 程序算法的关键是程序化
√ 拟定程序算法时,不能混淆立场(主语)
√ 归纳基本流程,然后添加附带条件
√ 如果能够实现程序化,就可以借助计算机的力量
√ 程序化很难的事情更有可能带来机遇