有一家饭店的大厨,烧得一手好菜,经过口碑相传,客人从五湖四海闻名而来。然而这对饭店的老板来说,并不单纯是一个好消息。因为客人不是奔着饭店,而是奔着大厨的手艺来的。老板必须想办法留住这位大厨,否则他一旦被别人挖走,饭店的生意就会一落千丈了。然而即便老板不惜血本保证了大厨的忠诚度,风险也依然存在:
大厨休息或请假的时候,菜品的口味就无法让顾客满意;
大厨只有一个,如果想在多个地方开分店,那口味也就不能保证了;
大厨再厉害,同时也只能炒一个菜,而顾客越来越多,输出总是供不应求;
大厨年纪大了总是要退休的,如果收徒的话,怎么继续保证徒弟的忠诚度呢?
有一天,老板突然悟到,决定菜品口味的是大厨烧菜的过程,而不是大厨本人。如果大厨愿意把自己每个菜的菜谱都写出来,那不就可以请别的厨师来操作了吗?虽然别人按照菜谱烧出来可能达不到原味的100分,但90分总是能达到的,而这样的差距是一般的食客无法分辨的。这样只要菜谱在,饭店菜品的质量就能得到保证,扩张店面、开分店什么的就都不成问题了。
于是老板和大厨谈了一个晚上,说服了他用菜谱技术入股。几年后,饭店生意越来越好,开了无数家分店,老板赚了很多钱,大厨也得到丰厚的分成,不用再天天靠手艺吃饭了。
什么是编程?在洗衣机出现之前,人们只能用手来洗衣服,需要经过浸泡、揉搓、漂洗、拧干的一系列流程。而全自动洗衣机的发明使洗衣服的工作人人都可以轻松完成,从而可以将原本用来洗衣服的时间解放出来去做其他事情。随着洗衣机的不断迭代升级,洗衣服的整个流程最终会被人们遗忘,只有设计洗衣机的工程师们了解流程,因为他们负责对其进行优化和改进。
所谓程序,就是为了实现一个需求而设计的逻辑流程。大厨的菜谱和洗衣机的工作流程都是程序,只不过前者由人来执行,后者由机器来执行。正是因为有程序作为媒介,我们才可以分离设计者、调用者和执行者的角色。虽然程序的执行效果未必能让其设计者满意,但它已经可以脱离设计者的时间和空间局限而存在,可以被其他人执行、验证和改进。
所谓编程,就是指编写程序。将烧菜的过程写成菜谱,本质上就是在编程。通过编程,我们更加透彻地理解并阐述了事物的本质,让曾经专属于某个人、某个团体、某个地方甚至某个时刻的东西,得以独立的存在和发展。从这个角度来讲,说编程是在创造生命也不为过。
编程可以说是一种标准化的写作。标准化保证了服务和产品的质量,也使大规模复制和扩张成为可能。KFC正是依赖其详尽到炸薯条的油温秒数的食品加工手册,才将分店开满世界各地的。陶华碧如果不能将她的豆瓣酱配方和制作过程清楚地描述出来,交由标准化生产线去制造的话,那么今天“老干妈”最多只是一个小乡村里的作坊级产品,不可能走上我们的餐桌。
我们每天的生活,都在和各种技术产品和服务打交道,比如导航、搜索引擎、聊天软件……你可曾想过,这些产品和服务背后的原理是什么?相信除了程序员群体之外,绝大多数人不会去想这些问题,因为:
这跟我没有关系啊!我又不去干这行……
应该只有专业人士才能搞懂吧,我可不行!
能用就行了,想那么多干啥,多累呀!
他们这么想并没有错,因为编程的本质就是:设计一个逻辑流程来实现指定的需求,使调用者无需了解实现细节即可达到目的。
由于程序和编程的广义概念太过笼统,为不导致概念混淆,下文中提到的“程序”和“编程”,特指使用计算机编程语言编写,由机器来运行的程序。
解放时间和注意力假设你已经在某岗位工作了一段时间,根据经验总结出来每天下班前有下面三件事需要做:
A、在公司内网系统查询某业务当天的数据(约10分钟)
B、整理成日报表并存档(约15分钟)
C、把几个核心数据用电子邮件发送给领导(约5分钟)
你可以在认真梳理过之后,将这个流程写下来,贴在办公桌前,或者记在脑子里。这自然比那些不知道流程的人要强得多,你可以确保每个步骤都不被遗漏地执行到(然而这并不能完全保证)。虽然你已经花了时间认真思考过,但每天这样枯燥乏味的流程都需要自己执行一遍……等等,这活我不可以找个秘书来干吗?
当然可以,雇佣他人是一种用金钱换时间的解决方案。但是这同时又引入了许多新的问题:
你需要花钱(废话)
你需要把要做的事解释给秘书听,并确保他能听懂(沟通成本)
秘书下班或休假时,这些事你还得自己做(有时间限制)
你要为秘书犯的错误承担责任(质量得不到保证)
每次秘书犯了错误,你都需要进行教育(培训成本)
秘书会直接接触业务数据和信息,难保有泄密的可能(安全隐患)
换一个秘书,以上的事情都得再来一遍……
这不是把事情搞复杂了吗?人的成本太高,提供的服务又不可靠。而如果你会编程的话,也许你可以:
编一个小程序来完成查数据、做报表、发邮件的流程,再配置一个定时任务每天自动执行;
谨慎一点的话,可以让程序先发到自己的邮箱,检查没有问题后再转发给领导;
必要的话,还可以让程序在运行出现意外时给你的邮箱或手机发报警通知;
如果你愿意,甚至可以给内网办公系统直接加上邮件报表这个功能……
假设你原本手工做完ABC流程需要30分钟,那么你的程序每执行一次,就为你节省了30分钟的时间。假如你写程序用了三个小时,那么一周就能收回成本,以后全部都是净赚的。如果程序运行的时间足够长,那么单次运行的均摊成本将趋近于零。可以看出,编程是一种用时间换时间的解决方案。
当然,你需要将要做的流程写成机器能读懂的程序;如果需求发生变化,你需要对应地修改程序;如果运行时出了BUG,你需要调试修复……但更重要的是:程序不拿工资,不可能辞职,不需要休息,不会闹情绪,不可能犯错,只要你的流程正确,依赖的资源不出问题,它就可以7*24小时一直运转下去。
每当我们写程序实现了一个需求,就好比造出了一把锤子。今后你遇到类似的问题,都可以拿这个锤子来解决。当然有时会遇到锤子不称手的情况,需要持续地升级和优化。但在大多数情况下,这个锤子都是可以直接拿来用的。也就是说:完全相同的问题,你只需要解决一次就好,不会浪费时间在重复的工作上。
(责任编辑:admin)