编程的本质是什么?


编程的本质是什么?

文章插图
 
作者:白色蜗牛
来源:蜗牛互联网
当我们怀着一腔热忱或者对高薪的渴望 , 投入到软件开发这个岗位 , 成为程序员这个角色后 , 我们的核心职责就是使用计算机编写程序 , 俗称抱着电脑写代码 。
只要有一台电脑连上网 , 我们就能工作 。但写了那么多代码 , 我们有想过编程的本质是什么吗?
《教父》里说过:花半分钟就看透事物本质的人 , 和花一辈子都看不清本质的人 , 自然是不一样的人生 。
所以我们尝试思考下编程的本质 , 或许可以让我们走的更远 。
对于编程这件事 , 编写程序 , 就字面意思来讲 , 事情的结果是程序 。
程序是啥意思呢?
广义上的程序是指 , 一系列的动作以相同的方式执行 , 在相同的环境下 , 总能得出相同的结果 。
你比如开银行卡账户 , 你需要准备好材料 , 像身份证 , 去银行填表 , 核身 , 签字 , 最后拿到一张属于你的银行卡 。
换一个人也要走同样的程序 , 同样要备好材料 , 填表 , 核身 , 签字 , 同样要到银行办理 , 同样最后拿到了银行卡 。
你会发现 , 定义里面有三个相同 , 也就是程序最大的特点就是重复 。
只不过上边例子里的重复 , 是在银行这个地方发生的 。每天做着相同程序的业务 , 只是不同的客户 , 不同的柜员 。
但开卡业务只能在银行办理 , 这就很受局限了 。我得花费时间和体力 , 跑到银行 , 还得挑银行上班的时间 。那有没有办法 , 我不去银行也能把银行卡开下来呢 。
计算机和互联网的出现 , 就解决了这个问题 。
要交的材料 , 要走的程序 , 要拿的卡 , 都不变 , 只是整个操作环境 , 从线下的银行 , 变成了线上的某个载体 , 可以是个 PC 端 Web 网站 , 也可以是个移动端 App 。
线上就是指互联网 , 它能够让信息的传递跨越空间 , 而操作的载体 , 无论是 Web 网站 还是 APP , 背后都是计算机程序 。
从前你要花一个小时坐公交去银行 , 如今足不出户点点手机就能办理业务 。
计算机上的这些程序从哪来的?
就是程序员编写的 。
所以程序员要做的事就是 , 把线下现实世界的事情 , 编到线上计算机里来做 。
这有点像电影编剧的角色 , 都要取材于现实 。
不同的是 , 电影编剧会充分虚构 , 保证艺术源于生活又高于生活 , 产出物是一两个小时的影像 。
而程序员要充分还原现实 , 保证程序符合正常逻辑不会错乱 , 产出物是电子设备上的应用程序 。
那编程的目的就很清晰了 , 用计算机来解决现实世界的问题 。
无论是现实世界还是计算机 , 我们做一件事 , 都需要有三个核心要素:输入(Input)、处理(Process)和输出(Output) , 简称 IPO 。
编程就是把现实世界的问题 , 映射到计算机的 IPO 中 。
那怎么把现实世界的问题映射到计算机的 IPO 中呢?
我理解要通过模型 。
什么是模型?模型是指用一个较为简单的东西来代表另一个东西 。
如果要简单化一个东西 , 那就需要对这个东西进行分析 , 然后抽象 。
编程的本质是什么?

文章插图
 
抽象的维度 , 决定着最后软件的形式 。
如果对计算机本身进行抽象 , 那软件就会以机器代码或汇编语言的形式呈现 。
如果对计算处理逻辑进行抽象 , 那软件就会以非结构化的高级语言呈现 , 比如 Basic 。
如果对问题领域过程进行抽象 , 那软件就会以结构化的高级语言呈现 , 比如 C 。
如果对问题领域元素进行抽象 , 那软件就会以面向对象程序设计语言呈现 , 比如 JAVA 。
也就是说 , 编程语言是现实世界到计算机世界抽象的机制 。


推荐阅读