今天聊聊编程的本质 。程序就是数据结构+控制+逻辑 , 程序员编程工作的本质是翻译 , 翻译机要来了 , 程序员怎么办?
黑客帝国中的程序黑客帝国4就要上映了 , 不知道前三部你看懂了么?值得多看几遍 。
黑客帝国的主角就是程序(Program) 。Achetict是历史实践家 , 通过历史的变迁洞察了规律 , 来确保Matrix何时诞生、何时发展、何时崩溃、何时重建 。Oracle是大数据的化身 , 代表了人类特有的直觉 , 具有洞察和预测的能力 , 掌握了情感和人性 。里面许多Program个性十足 , 和真人相比也不遑多让 。
企业数字化转型 , 先要看懂黑客帝国
文章插图
黑客帝国的主角是程序
程序不仅仅是信息的载体 , 它和人脑一样 , 是处理信息的工具 , 可以说 , 程序是人类思维的外在表现 , 软件把原来在思维空间中进行的抽象的活动转化成一种能够可视的过程当我们编程序时 , 尤其我们在调试程序 , 也就是Debug的时候 , 这种感觉更加明显 。一个程序员读着另一个程序员源代码的时候 , 能够感觉到他的思维在跳动(当然 , 乱跳也是跳) 。
编程的本质是什么程序本身的执行基础是机器语言 , 但人类掌握机器语言太困难了 。最早的程序员都要用机器语言去编写代码 , 用纸带输入程序 , 费时费力 , 不是数学家根本掌握不了 。
人类是追求高效率的生物 , 很快语言就有了进化 , 出现了汇编语言、Lisp、Fortran、Basic、C......大多数软件都是用高级编程语言编写的 , 对于程序员来说 , 它们更容易、更高效 , 因为它们比机器语言更接近自然语言 。很可惜 , 中国没有自己的编程语言 。
?中国为什么没有自己的编程语言?哲学、数学和语言学基础是关键
文章插图
编程语言是程序员的工具
那么这些语言本质是做什么的呢?
软件行业有两个著名的公式 :
1、程序=数据结构+算法
瑞士计算机大师Niklaus Wirth
文章插图
他发明过Euler、Algol-W、Pascal、Modula 和 Oberon 。
数据结构实际上说的是信息和数据如何被组织起来 。
这里最著名的就是由本体论(Onology)发展过来的面向对象分析方法(OOA) 。就是按照分类(属性+方法)、继承、重载和多态等 。
分类是人类理解世界的根本 , 就从哲学观点上来看 , 这是我们认识世界的方式 。我们的生物需要分类 , 就是门、纲、目、科、属、种;法律需要分类 , 轻度伤害、重度伤害量刑不同;社会管理要分类例如不同企业上不同的税;产品需要分类 , 不同的产品有不同的参数.......我们思想和语言交流的基础就是分类 。
文章插图
面向对象是应用最多的数据结构分析方法
如果不用到分类 , 世界的事物 , 无法有效地组织起来 , 我们也不能有效地表达我们的思想 , 编程语言率就低了 。很多程序员都不喜欢继承 , 确实对我们编程限制很大 。但你设想一下 , 如果不能把“哺乳”这个方法放到哺乳动物的分类上 , 我们要对许多哺乳动物的子类进行操作 。基于类别的数据结构是最好的信息压缩方式 。
事实上我们说的每一个名词都是一个分类 , 当加上编号或者定冠词就变成实例了 。
分类决定属性 , 一个分类的属性有两种来源:从爹妈那儿继承的 , 自己特殊的 。当然这个分类也会有孩子继承他的属性 。
分类决定方法 , 道理是一样的 。重写是一种继承中的变异 , 大规模重写分类就乱套了;多态是对方法的封装 , 以便模糊调用 , 在实际中 , 操作分类、属性和继承关系的难度很大 。确实作为软件开发人员 , 在实践中对我们一无所知 , 这也是很需要业务专家的原因 。
算法的本质是什么?是对数据的处理 。
推荐阅读
- 一文掌握SQL基础
- 一文讲透 Python 协程
- 一文带你搞定TCP滑动窗口
- 交换机组网与PON组网哪个好?一文了解清楚
- 阿里架构师整理的 Netty 学习笔记之:Java NIO 网络编程
- 一文看懂"async"和“await”关键词是如何简化了C#中多线程的开发过程
- 一文看懂“超融合”和“虚拟化”的区别
- 获得网络安全工作所需的 5 种编程语言
- 踏上编程之路的必经之路之html篇
- 一张图看懂私域流量的底层逻辑