38 | 编程范式:编程的本质
陈皓
该思维导图由 AI 生成,仅供参考
你好,我是陈皓,网名左耳朵耗子。
前面我们讲了各式各样的不同语言的编程范式,从 C 语言的泛型,讲到 C++ 的泛型,再讲到函数式的 Map/Reduce/Filter,以及 Pipeline 和 Decorator,还有面向对象的多态通过依赖接口而不是实现的桥接模式、策略模式和代理模式,以及面向对象的 IoC,还有 JavaScript 的原型编程在运行时对对象原型进行修改,以及 Go 语言的委托模式……
所有的这一切,不知道你是否看出一些端倪,或是其中的一些共性来了?
两篇论文
1976 年,瑞士计算机科学家,Algol W,Modula,Oberon 和 Pascal 语言的设计师 Niklaus Emil Wirth写了一本非常经典的书《Algorithms + Data Structures = Programs》(链接为 1985 年版) ,即算法 + 数据结构 = 程序。
这本书主要写了算法和数据结构的关系,这本书对计算机科学的影响深远,尤其在计算机科学的教育中。
Robert Kowalski 是一位逻辑学家和计算机科学家,从 20 世纪 70 年代末到整个 80 年代致力于数据库的研究,并在用计算机证明数学定理等当年的重要应用上颇有建树,尤其是在逻辑、控制和算法等方面提出了革命性的理论,极大地影响了数据库、编程语言,直至今日的人工智能。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
编程的本质在于有效地分离Logic、Control和Data。文章通过两位老先生的表达式,强调了程序的本质是由算法、数据结构、逻辑和控制组成的。逻辑部分定义了解决问题的算法,而控制部分决定了如何使用逻辑。有效地分离这三个部分是写出好程序的关键所在。编程范式围绕着这三个要素展开,比如函数式编程中的Map/Reduce/Filter是一种控制,而传入这些控制模块的Lambda表达式则是解决问题的逻辑。文章指出,标准化Control、Data Structure和Logic是编程范式的本质,有效地分离这三者是写出好程序的关键。文章强调了程序的复杂度取决于业务逻辑,而为了控制程序,需要大量控制代码,因此Logic+Control相互交织成为最终的程序复杂度。总之,编程的本质在于有效地分离Logic、Control和Data,这是写出好程序的关键。 文章举例说明了混淆逻辑和控制的问题,以及如何通过使用通用状态机、抽象匹配策略等方法来改善代码质量。另外,通过对用户表单信息检查的常见代码和DSL+DSL解析器的对比,阐述了如何分离控制和逻辑,以及控制逻辑与业务逻辑耦合的问题。最后,文章提出了解耦的技术,如状态机、DSL、编程范式等,以及编程的本质是Logic部分才是真正有意义的,而Control部分只是影响Logic部分的效率。这些内容为读者提供了对编程本质的深入理解和解耦技术的应用方向。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《左耳听风》,新⼈⾸单¥98
《左耳听风》,新⼈⾸单¥98
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(62)
- 最新
- 精选
- mingshun自从写业务的这几年来,做得最多的就是分离 Logic 和 Control。无论是编写新代码还是重构旧代码,都是从这个方向努力,目标是写出让团队里每个人都能轻松看得懂的代码。也用过许多语言,像 C、C++、Java、Golang、Lua、JS、Ruby、Elixir、Red……虽然思维模式和习惯玩法各异,但编程的本质是一样的。毕竟代码写出来是给人看的。如果人都很难看懂,又谈何优化和改进代码?!
作者回复: 赞👍
2018-05-18282 - 楊_宵夜Roger的留言, 本人不才, 想试着从"Control标准化"和"代码可重用"的角度来回答下: 仔细看那个检查表单信息的例子, 叫做check_form_XXX(), 是针对特定的一个form的, 那么自然而然会有check_form_YYY()和check_form_ZZZ()等等... 所以说, 这个form校验例子中, 1. 最简单的Control部分就是遍历表单fields. 2. 然后, 虽然是不同的field, 但相同的type是做相同逻辑的校验; 3. 如果还想提供"将整个form拆成不同的part, 用并发来遍历"这种Control的话, 抽象出来的check_form()函数还可以提供并发的版本; 那么单单是以上3点, 全部都是"可标准化"的, 并且"可重用"的, 并不影响<业务的logic>; 那么, 当有了check_from()这个Control之后, 真正决定业务的<业务的logic>, 有: 1. 每个field分别是什么type? 是text? 是password? 还是email? 2. 每个field的最低长度是多少? 类似的还有每个field的最大长度? 3. 等等... 以上的问题, 决定了这个field通过校验的条件是什么? 而这个条件是无法"标准化"的, 因为一个复杂系统的每个form的field不可能是一模一样的; 所以这些"条件", 就由陈老师写出的DSL来提供; 因此最后就变成了, check_form()提供一套"标准"来校验每个表单, 而每个表单只需要告诉check_form()说: "我有这些东西, 你帮我校验一下"; 而这样的说法, 又有了些委托模式的味道了; 总而言之, 个人愚见: Control和Logic部分的一个肉眼可见的界线就是: 是否可以标准化?? 因本人较熟悉Java, 再扩展来说, 全局的工具类就是一种全局Control, 而一个类中的private方法大致可以认为是这个类中的Control. (仅为一种思路, 未经推敲);2018-02-1353
- SamZhou是处理什么(logic),怎么做(control),沟通方式(数据结构)?2018-02-10129
- 又双叒叕是一年啊个人觉得 Data Structure 才是 What, Logic 是 do What , Control 是 how to do2019-06-20116
- 钱本文核心: 1:Program = Logic + Control + Data Structure 2:有效地分离 Logic、Control 和 Data 是写出好程序的关键所在! Logic 部分才是真正有意义的(What) Control 部分只是影响 Logic 部分的效率(How) 3:理解Logic和Control的本质是关键,这样才能进行她们的解藕,才能使程序更易读更易维护和扩展。 那什么是Logic?什么是Control?他们之间又有什么界限呢? Control是可以被标准化的,是可以复用的,是实现业务逻辑具体怎么走的代码。 Logic是具有个性化的,不能被标准化,或者说不知道怎么标准化,因为规律性有序,不具有复用性。 这节需要多看几次,价值连城。2020-02-2912
- Y024曾都梦想仗剑走天涯,哦不,是精通一门语言,然后一通百通吃遍所有语言。可以结合王垠的<如何掌握所有的程序语言>一起看看。 http://www.yinwang.org/blog-cn/2017/07/06/master-pl2018-05-13111
- pigparadise以前做codereview时老和同事说有些逻辑和另一些逻辑分离,复杂度能更低,数据更安全,但文中logic和control的定义更加清晰,对我也是一级记当头棒喝,该系列最佳!2018-09-189
- vvsuperman有没推荐阅读,逻辑和控制的意思实在不太懂2018-03-1249
- edisonhuang程序=算法+数据结构 算法=逻辑+控制 如果将 Logic 和 Control 部分有效地分开,那么代码就会变得更容易改进和维护 大部分混乱的代码就是把逻辑和控制混在一起了,导致难以阅读和维护。而逻辑才是我们真正要关心的问题,他解决了做什么。控制只是操作计算机的具体实现,解决了怎么做。二者关系就好像做正确的事和把事情做正确。其实我们真正关注的只是正确的事,这是战略层面,而把事情做正确是执行层面,有效解除二者的耦合是改善的重要一步2019-06-2617
- caohuan看完 耗子哥的文章,我知道 为什么我还是一枚 码农了,代码 没有解耦,业务和控制代码 糅合在一起,虽然 我会一点 面向对象的 5大原则,也看过 重构的书籍,一直在模仿表层,没琢磨本质,所以 代码 既丑陋,可读性很差,知道有问题,得去提高了2018-11-077
收起评论