这里是博士聊IT,来都来了,给博士点下下呗。今天聊聊编程的本质。程序就是数据结构 控制 逻辑,程序员编程工作的本质是翻译,翻译机要来了,程序员怎么办?黑客帝国中的程序 黑客帝国4就要上映了,不知道前三部你看懂了么?值得多看几遍。 黑客帝国的主角就是程序(Program)。Achetict是历史实践家,通过历史的变迁洞察了规律,来确保Matrix何时诞生、何时发展、何时崩溃、何时重建。Oracle是大数据的化身,代表了人类特有的直觉,具有洞察和预测的能力,掌握了情感和人性。里面许多Program个性十足,和真人相比也不遑多让。 企业数字化转型,先要看懂黑客帝国 黑客帝国的主角是程序 程序不仅仅是信息的载体,它和人脑一样,是处理信息的工具,可以说,程序是人类思维的外在表现,软件把原来在思维空间中进行的抽象的活动转化成一种能够可视的过程当我们编程序时,尤其我们在调试程序,也就是Debug的时候,这种感觉更加明显。一个程序员读着另一个程序员源代码的时候,能够感觉到他的思维在跳动(当然,乱跳也是跳)。编程的本质是什么 程序本身的执行基础是机器语言,但人类掌握机器语言太困难了。最早的程序员都要用机器语言去编写代码,用纸带输入程序,费时费力,不是数学家根本掌握不了。 人类是追求高效率的生物,很快语言就有了进化,出现了汇编语言、Lisp、Fortran、Basic、C......大多数软件都是用高级编程语言编写的,对于程序员来说,它们更容易、更高效,因为它们比机器语言更接近自然语言。很可惜,中国没有自己的编程语言。 中国为什么没有自己的编程语言?哲学、数学和语言学基础是关键 编程语言是程序员的工具 那么这些语言本质是做什么的呢? 软件行业有两个著名的公式 :1、程序=数据结构 算法 瑞士计算机大师Niklaus Wirth 他发明过Euler、Algol-W、Pascal、Modula 和 Oberon。 数据结构实际上说的是信息和数据如何被组织起来。 这里最著名的就是由本体论(Onology)发展过来的面向对象分析方法(OOA)。就是按照分类(属性 方法)、继承、重载和多态等。 分类是人类理解世界的根本,就从哲学观点上来看,这是我们认识世界的方式。我们的生物需要分类,就是门、纲、目、科、属、种;法律需要分类,轻度伤害、重度伤害量刑不同;社会管理要分类例如不同企业上不同的税;产品需要分类,不同的产品有不同的参数.......我们思想和语言交流的基础就是分类。 面向对象是应用最多的数据结构分析方法 如果不用到分类,世界的事物,无法有效地组织起来,我们也不能有效地表达我们的思想,编程语言率就低了。很多程序员都不喜欢继承,确实对我们编程限制很大。但你设想一下,如果不能把"哺乳"这个方法放到哺乳动物的分类上,我们要对许多哺乳动物的子类进行操作。基于类别的数据结构是最好的信息压缩方式。 事实上我们说的每一个名词都是一个分类,当加上编号或者定冠词就变成实例了。 分类决定属性,一个分类的属性有两种来源:从爹妈那儿继承的,自己特殊的。当然这个分类也会有孩子继承他的属性。 分类决定方法,道理是一样的。重写是一种继承中的变异,大规模重写分类就乱套了;多态是对方法的封装,以便模糊调用,在实际中,操作分类、属性和继承关系的难度很大。确实作为软件开发人员,在实践中对我们一无所知,这也是很需要业务专家的原因。 算法的本质是什么?是对数据的处理。 语言是人类思维的文字表现。有的人语言条理清晰,有的人杂乱无章,难以一概而论,其中所包含的信息量也不一致。我们从小学就接受语文训练,反复练习每句中心词是什么?段意是什么?中心思想是什么?这种训练就是帮助我们建立起语言所包含语义的逻辑性,才能保证对方能够顺利地接受信息所包含的语义。 我们所训练的这种表达就是一种算法,大家可以试着想象一下你周围的人算法处理能力,有的人啰哩啰嗦说不清楚,有的人词义准确、逻辑清晰、言简意赅、没有废话,这种人对这件事情的算法能力就很强。 如何衡量一段文字所包含的信息量呢?前苏联科学家柯尔莫洛夫提出了信息量度量的新方法:除了基于组合和基于概率方法之外,他提出了基于最短程序长度的信息量度量方法。算法信息论的代表。 柯尔莫洛夫发明了算法信息论 例如我们说:3.1415926..........和说一个pai""在本质上是一样的。 后面大家有机会可以深入了解熵这个概念,算法就是逆熵操作,算法的效率就是算法逆熵的能力大小。2、算法=控制 逻辑 英国计算机大师Robert Kowalski 他发明了逻辑编程,他的学生研制了Prolog的编译器。我们把公式代入: 控制就是指程序将按照什么样的流程和顺序进行计算。 顺序有简单的,也有非常复杂的。例如人机交互的流程就比较复杂: 复杂的控制过程 控制就是指程序的计算步骤,先算什么,后算什么,如何跳转,如何回退。 逻辑就是指数据结构按照什么规律如何相互影响。 当翻开欧几里的《几何原本》这本书时,所有人都会立刻产生仰慕感。这本距今2000多年前的书从定义出发,点、线、面逐步推进,明确了本书涉及到的公设,明确了其中的公理(不言自明的道理),然后就将我们初高中所学几何知识几乎一网打尽。 你的几何应该没有2500年前的欧几里得好 是的,我们初中、高中学的几何学就是典型的逻辑。 1879年,德国科学家弗雷格出版了《概念文字》一书,这本书的副标题是"一种模仿算数语言构造的纯思维的形式语言"。弗雷格的语言对于我们来说就很熟悉了,我们在大学数学中用到的很多符号,如存在,任意等符号,都是源自于这本书。 傅雷格奠定了逻辑学的基础,罗素等人完善了命题逻辑和一阶逻辑,再往后冯诺依曼、图灵、邱奇、麦卡锡、巴克斯等人发明了计算机。是的,这些人都是与世无双的逻辑学家,确切地说是数理逻辑学家。 数理逻辑发展简史 编程的本质是把人的思想变成计算机可执行的机器代码。程序员工作的本质是什么? 说到这里,很不幸,应该你已经猜到了? 程序员的工作性质的本质是翻译,把人类的思想需求翻译成机器可执行的代码。任何高级语言都是用来表达思想的。高级语言都会被翻译成机器语言,驱动计算机去执行。 程序员的本质 因此,你可以认识到软件的世界中有两个实质性的内容:思想和机器语言。思想是我们希望计算机做什么?当前软件从业者:从业务人员、项目经理、架构师、程序员、测试人员、实施人员,他们都有一个共同的工作性质:翻译。就是把思想翻译成机器语言。 你可能会质疑,现在人工智能这么发达,为什么不弄个翻译机呢? 这个能取代编程?! 很不幸你又猜对了,翻译机要来了。取代程序员的工作已经开始了。 其中低代码平台就能减少翻译人员的数量,无代码平台让需求者直接对接机器。 数据结构现在可以做成模型驱动和可视化的表单,控制可以做成可视化的流程和活动,要是逻辑问题也解决了,可能大部分软件需求就真的不需要程序员做翻译了。 低代码无代码能终结编程么? 博士聊IT,带你走近信息科学。给博士点下下呗!以前的文章: 中国为什么没有自己的编程语言?哲学、数学和语言学基础是关键 程序员比社平工资高70%?编程的本质是什么?能力强还是分配不公 企业数字化转型,先要看懂黑客帝国 秒懂!国家信息化战略在说什么!信息化从业人员必备知识 信息化建设效率为啥这么低?看透本质才能除掉病根