美文网首页编程镓教@IT·互联网
编程镓教・入门篇| 001 什么是程序?

编程镓教・入门篇| 001 什么是程序?

作者: 深加思考 | 来源:发表于2017-03-28 07:07 被阅读280次
    题图来自网络

    学习目标

    • 理解程序的相关概念
    • 了解程序的相关角色及其职责

    学习用时:20分钟

    在开始学习之前,让我们先来听个故事:

    一道菜的故事

    一道菜的故事

    有一家饭店的大厨,做得一手祖传名菜,品尝过的客人都赞不绝口。于是消息一传十,十传百,食客从五湖四海闻名而来。然而这对饭店的老板来说,并不单纯是一个好消息。因为客人不是奔着饭店,而是奔着大厨的手艺来的。老板必须想办法留住这位大厨,否则他一旦被别人挖走,饭店的生意就会一落千丈了。然而即便老板不惜血本保证了大厨的忠诚度,风险也依然存在:

    • 大厨休息或请假的时候,菜品的口味就无法让顾客满意;
    • 大厨只有一个,如果想在多个地方开分店,那口味也就不能保证了;
    • 大厨再厉害,同时也只能炒一个菜,而顾客越来越多,输出总是供不应求;
    • 大厨年纪大了总是要退休的,如果收徒的话,怎么继续保证徒弟的忠诚度呢?

    有一天,老板突然悟到,决定菜品口味的是大厨烧菜的过程,而不是大厨本人。如果大厨愿意把自己每个菜的菜谱都写出来,那不就可以请别的厨师来操作了吗?虽然别人按照菜谱烧出来可能达不到原味的100分,但90分总是能达到的,而这样的差距是一般的食客无法分辨的。这样只要菜谱在,饭店菜品的质量就能得到保证,扩张店面、开分店什么的就都不成问题了。

    于是老板和大厨谈了一个晚上,说服了他把菜谱写出来,然后用菜谱技术入股分成。于是大厨一边炒菜一边讲解,让助手把菜谱记下来,交给了老板。老板于是请别的厨师拿着菜谱如发炮制,大厨验收并指导修改菜谱,如此这般数次之后,菜谱就定稿了。

    几年后,饭店生意越来越好,开了无数家分店,老板赚了很多钱,大厨也得到丰厚的分成,不用再天天靠手艺吃饭了。后来有一位厨师把菜谱偷传了出去,于是这道菜就红遍了大江南北……

    什么是程序?

    什么是程序?

    炒菜的过程是一个流程(Process)。而记载了炒菜过程的菜谱,就是一个程序(Program)。至于将炒菜的过程写成菜谱,即编写程序,就是我们要学习的编程(Coding)

    流程(Process):为了实现一个需求而设计的形式逻辑
    程序(Program):记录并承载流程的媒介
    编程(Coding):把流程编写成程序的过程

    我们可以再举几个例子:

    • 打太极拳的套路流程,而记录这些套路的拳谱程序
    • 用钢琴弹奏曲子的指法流程,而记录这些指法的钢琴谱程序
    • 老师备课时设计的教学过程流程,而记录这些过程的教案程序
    • ……

    如果你曾经记录过类似流程的东西,没准可能是作息时间表(记录了每天必做事件的顺序列表)或者交通路线图(记录了去某地的行程),那么其实你已经在编程了。

    所以,编程真的没有那么神秘,对吧?

    程序是用来干什么的?

    程序是用来干什么的?

    按照菜谱进行操作的目的是炒出一盘菜,这叫做程序的需求(Requirements)。我们可以对需求附加标准和要求来让它更加具体和完整,比如炒出一盘可口的西红柿炒鸡蛋

    需求(Requirements):期待通过执行程序(所记载流程)而产生的变化

    • 按套路打太极拳的需求强身健体
    • 按钢琴谱弹钢琴的需求演奏一首音乐
    • 按教案进行授课的需求传授给学生知识
    • ……

    请注意,需求描述的是变化,而不是产物本身

    • 原来没有,而现在有了 —— 菜、音乐
    • 质量发生了变化 —— 健康
    • 数量发生了变化 —— 知识
    • ……

    执行一个程序所带来的变化可能有很多,而需求应该描述执行程序(所记载流程)的核心目的。在炒完一个菜之后,我们除了得到了一盘菜之外,同时还产生了油烟和潲水。显然,产生菜是我们的需求,而产生油烟和潲水就不是了。

    需要特别注意的是,需求是执行程序的目的,而不是编写程序的目的。编写程序——“把菜谱写出来”也是一个流程,它自然也有属于自己的需求。编写程序的动机和初衷(为了大规模复制和扩张而记录炒菜的秘诀),以及编写程序的标准和要求(准确、详尽、可操作)都是不是“菜谱”的需求,而是编写程序——“写菜谱”的需求

    程序是用什么写的?

    程序是用什么写的?

    菜谱是用某种自然语言(比如汉语)写成的,这叫作编程语言(Language)

    语言(Language):将流程写成程序时所使用的指令系统

    • 拳谱的语言图形和箭头
    • 钢琴谱的语言则是音符和各种记号
    • 教案的语言也是自然语言
    • ……

    一个程序里未必只使用一种语言,比如菜谱里可能有配图,拳谱和五线谱里可能有讲解文字,教案里可能有PPT……

    如果我们愿意,也可以换用其他语言来重新编写程序,比如用手语来展示菜谱,用英语来讲解太极拳套路,用现场弹奏的视频来演示钢琴指法……但是,不同语言的表现力是不同的,所以最终呈现的效果会有所变化

    程序是谁写的?

    程序是谁写的?

    炒菜的流程是大厨开发研究出来的,因此大厨毫无争议地是它的作者(Writer)

    作者(Writer):设计流程并将其写成程序的人

    • 拳谱的作者拳法创始人
    • 钢琴谱的作者作曲家
    • 教案的作者备课教师
    • ……

    严格来说,作者还可以进一步拆分为设计流程的人——设计者(Designer),以及把流程写成程序的人——实现者(Implementer)

    比如在菜谱的例子里,实现者大厨的助手——是他把菜谱写下来的。不过在大多数情况下,实现者没有设计者重要,或者设计者和实现者干脆就是同一个人,所以我们一般将设计者视为程序的作者。

    一个复杂的程序(如Windows操作系统)可能是由一个甚至几个开发团队共同开发的。团队里的产品经理负责设计流程,工程师负责写程序。这种情况下,作者就是整个开发团队。

    程序出了问题谁负责?

    程序出了问题谁负责?

    菜谱编写出来后,需要有人对其负责进行不断地优化和改良,我们称这样的人为拥有者(Owner)。一开始,程序的拥有者和编写者往往是同一个人,也就是大厨本人。在大厨金盆洗手之后,拥有者可能就会由饭店的厨师长来接任。

    拥有者(Owner):负责改进程序的人

    • 拳谱的拥有者拳派掌门人
    • 钢琴谱的拥有者编曲家
    • 教案的拥有者教研组长
    • ……

    需要注意的是,这里的拥有者是指当程序出问题时需要对其负责的人(大厨及其接任者),而不是在法律意义上可以享受程序产生的权益的的拥有者(饭店老板)。

    程序在运行中可能会出现各种奇怪的问题,也需要不断地修改来适应外部环境的变化。因此只要程序还在运行,就始终需要拥有者来进行维护。没有人维护的程序可能还能保持运行一段时间,但最终的下场只有一个:就是停止运行,最终被人删掉。

    程序由谁来执行?

    程序由谁来执行?

    菜谱里记载的流程,将由饭店的厨师实际执行操作,他们是程序的执行者(Runner)

    执行者(Runner):负责执行程序的人

    • 拳谱的执行者练拳者
    • 钢琴谱的执行者钢琴师
    • 教案的执行者授课教师
    • ……

    执行者并不需要深刻理解程序的意义,只要能读懂程序,按照流程进行规范化的操作就可以了。

    执行者有可能是多个独立的个体,或者是一个群体。比如菜谱里的流程可能需要多名厨师一起协作。而教案除了记录教师的活动外,也可能记录了学生的活动,这种情况下教师和学生就都是执行者。

    谁来要求执行程序?

    谁来要求执行程序?

    只有在光临饭店的顾客点菜之后,厨师才会调用菜谱来炒菜,所以顾客是调用者(Caller)

    调用者(Caller):要求执行程序的人

    • 拳谱的调用者武馆教练
    • 钢琴谱的调用者音乐会观众
    • 教案的调用者学生
    • ……

    一个程序可以有多个调用者,然而一般来说会有一个典型的调用者,大部分调用都由他们来发起。比如菜谱的调用者通常是点菜的顾客,但如果老板在饭店打烊后让厨师弄点菜犒劳一下伙计们,那调用者就不是顾客而是老板了。

    内容回顾

    内容回顾

    先让我们把今天所学的概念串一遍:

    为了实现一个需求设计者设计了一个流程实现者将这个流程用特定的语言编写成程序,并交由拥有者维护;在调用者发起调用后,执行者执行程序,最终需求得以实现。

    与程序相关的概念:

    流程(Process):为了实现一个需求而设计的形式逻辑 —— 炒菜的过程
    程序(Program):记录并承载流程的媒介 —— 菜谱
    编程(Coding):把流程编写成程序的过程 —— 写菜谱
    需求(Requirements):执行程序(所记载流程)的核心目的 —— 炒出一盘菜
    语言(Language):记录流程所使用的指令系统 —— 汉语

    与程序相关的角色:

    作者(Writer):设计流程并将其写成程序的人—— 大厨
    设计者(Designer):设计流程的人—— 大厨
    实现者(Implementer):把流程写成程序的人—— 大厨的助手
    拥有者(Owner):负责改进程序的人 —— 饭店的厨师长
    执行者(Runner):负责执行程序的人 —— 饭店的厨师
    调用者(Caller):要求执行程序的人 —— 光临饭店的顾客

    课后作业

    课后作业

    1、找出生活中的一个流程,以及与之对应的程序,并明确其需求语言作者(可细分设计者实现者,两者相同时可以不分)、拥有者执行者调用者

    2、在电脑上安装谷歌Chrome浏览器,有条件的同学请配置科学上网。

    不知道咋交作业?去看看课程说明吧!

    相关文章

      网友评论

      • 楼良勇:流程:为了实现一个需求而设计的形式罗辑——工厂生产工艺流程
        程序:记录并承载流程的媒介——生产工艺流程手册
        编程:把流程写成程序的过程——编写手册
        需求:执行程序的核心目的——高效率的生产
        语言:汉语和图表

        作者:设计流程并编写程序的人——生产工艺师
        设计者:设计流程的人——生产工艺师
        实现者:把流程写成程序的人——公司文案
        拥有者:负责改进程序的人——车间主任
        执行者:负责执行程序的人——一线生产工人
        调用者:要求执行程序的人——下单的客户
        深加思考:@楼俊岑 需求应该是执行流程后的产生的变化,比如「生产产品」
      • 瀚维:流程(Process):为了实现一个需求而设计的形式逻辑 —— 记录新人结婚仪式的过程
程序(Program):记录并承载流程的媒介 —— 摄影工作手册
编程(Coding):把流程编写成程序的过程 —— 用相机捕捉婚礼时美好的瞬间
需求(Requirements):执行程序(所记载流程)的核心目的 —— 制作一本婚礼相册
语言(Language):记录流程所使用的指令系统 —— 摄影相关知识

        与程序相关的角色:
        作者(Writer):设计流程并将其写成程序的人—— 摄影师
设计者(Designer):设计流程的人—— 摄影师
拥有者(Owner):负责改进程序的人 —— 摄影师
执行者(Runner):负责执行程序的人 —— 摄影师
调用者(Caller):要求执行程序的人 —— 新人

        老师辛苦了!关于程序,这样好不好理解。
      • 瀚维:程序:为了实现一个需求而设计的逻辑流程—婚礼纪实摄影
        语言:编写程序所使用的语言—摄影知识
        需求:程序完成的目标—一组纪实摄影相册
        编写者:程序的作者—摄影师
        拥有者:负责改进程序者—相机的主人
        执行者:负责执行程序者—摄影师
        调用者:要求执行程序者—新人
        瀚维:@张砷镓 谢谢老师,刚刚改了
        深加思考:@瀚维 你学的课程貌似是旧版的,建议重新学习一次。程序是一个记录并承载流程的媒介,你的流程是什么?
      • 陈晨8861:000
        深加思考:看看课程说明吧:《编程镓教・入门篇|000 旅程的起点》http://www.jianshu.com/p/ee034c5c80aa

      本文标题:编程镓教・入门篇| 001 什么是程序?

      本文链接:https://www.haomeiwen.com/subject/qpksnttx.html