文档章节

关于编程(编程的本质)

OrangeJoke
 OrangeJoke
发布于 06/25 16:36
字数 1990
阅读 23
收藏 0

离散数学

离散数学是传统的逻辑学,集合论(包括函数),数论基础,算法设计,组合分析,离散概率,关系理论,图论与树,抽象代数(包括代数系统,群、环、域等),布尔代数,计算模型(语言与自动机)等汇集起来的一门综合学科。离散数学的应用遍及现代科学技术的诸多领域。,

以上是百度的定义,说下个人的理解 离散数学的逻辑推理基础,首先抽象了逻辑推理的概念,在从一个基本定理出发,推理出一个命题是否为真/假 然后从抽象公有理论,即从公理推出定理的一般法则,接着讲解了自然数公理体系,介绍了同构的概念,以及哥德尔不完备定理,哥德尔编码。 接着介绍了集合,以及有限无限的概念。 介绍了关系的抽象,代数定义,划分,图的抽象,等各种抽象。

介绍以上抽象的目的就是为了能够用科学的方式描述,以及推理事物的本质。

然后通过以上的抽象知识,再根据(形式语言的定义),我们建立了语言的定义。 以及对应的计算模型,(有限自动状态机,图灵机)。这就是计算机的基础,同时从理论层面证明和定义计算模型。

数学,理论研究是通过符号来抽象现实来研究,来突破寻找我们未知的事情。抽象的好处就是不会被现实世界所迷惑,去推导找寻问题的本质,突破瓶颈。 所以整个离散数学的目的是教会我们怎么样使用抽象的方法来解决问题。

通过哥德尔不完备定理/停机问题,我们知道没有万能的定理和方法能解决所有的问题,但是我们能从既有的方向(现有的理论基础)去开辟新的研究方向,而不是去找出万能的定理。

启发: 康威生命游戏,从最简单的规则出发,会产生复杂的系统。

计算的本质

什么是计算?这个词对于不同人来说意思不同,但是每个人都会赞同这样一种理解:在一 台计算机读取程序、运行程序、读入一些输入,并且最后产生一些输出的时候,肯定发生 了某种计算。因此我们可以这样认为:计算就是指计算机所做的事情。 为了创造一个环境让这种熟悉的计算发生,需要三个基本要素: • 一台机器,能够执行计算; • 一种语言,用来编写这台机器能够理解的指令; • 一个程序,用这种语言编写,描述机器应该具体执行哪些计算。

这部分内容就是关于机器、语言和程序的:它们是什么,行为如何,我们如何对其建模并 展开研究,以及如何利用它们完成实际工作。通过研究这三要素,我们将对计算的含义以 及它是如何发生的有更好的理解。 当然离散数学就是通过数学的方式来表达这些东西,除此之外我们也可以通过程序来建模参考「3」

图灵机

图灵机完整的描述了什么是计算,以及计算机的极限(停机问题)。是计算机的理论基础。

计算机科学

布尔代数,逻辑门设计。

计算机能解决的问题

[p/np问题] 关于np问题,现在也还有计算机没有办法解决的问题。 反过来也正因为没有一个算法能解决所有的问题(就像问神灯,要一个能实现所有愿望的神灯一样),所以才会解决具体问题的算法,所有对于具体问题都会有一些特殊的解决算法需要程序员去实现,同时具体的问题也会附加一些限制条件,使得算法有意义,同时我们又可以将相似的问题归类,所以也会有一些通用的算法和解决方案,比如排序等。

为何有些人觉得算法是投机取巧,或者说像智力问题? 那是因为没有了解算法的本质,是能够解决一类问题,或者对于具体问题有特殊的解决办法,这也是为什么要分析算法的复杂度的原因,这样可以知道这个算法是否可行,以及使用范围。

可计算问题: 可计算问题同时对应的就是图灵机的停机问题,也是我们算法中的np问题 https://zhuanlan.zhihu.com/pillgrim https://cloud.tencent.com/developer/article/1343675

编程以及编程语言

怎么定义程序,其实编程语言只需要 if else,循环,赋值这几个功能即可完成,但是为了能够复用,所以有了下面的发展: 方法(方法的复用) -> 面向对象 -> 函数式编程

编程语言的发展就是为了能够更好的复用,即我们所说的通用性。

当然编程语言也是图灵完备的,所以可以编写所有的计算。

架构设计

架构设计最终目的:在一定时间内(通常足够长才能看到架构设计的效果)用更少的人天来产出更多的价值。
这个定义是我自己的理解:

  1. 在一定时间内(通常足够长才能看到架构设计的效果):敏捷开发中我们通常选MVP的需求来做,然后增量开发,但是设计的时候我们如果考虑足够的扩展性,那么我们都够支持到下一次重构或者升级的时间会更久。

  2. 更少的人天来产出更多的价值:在好的架构下,我们能够根据扩展性,可维护性,等快速支持业务需求就是我们的价值。

技术在短期内容易被低估,在长期内容易被高估

  1. 这句话其实可以通过上面的定义得到解答,周期太短是看不到架构的效果的,设计的问题通常会在一定积累后爆发,同时带来工作量也是成倍的。

  2. 长期内被高估,架构也会随着业务的变化而变化,所以当业务变化到一定程度稳定之后,技术带来的效果就不会像之前那么明显。

人工智能

推荐看《人工智能简史》,看过之后发现,人工智能是计算的另一个分支,向自然学习(黑盒子)但是有效果,一个分支就是我们离散数学所学的符号公理推理。

总结

理解计算的本质,编程的本质,才能走得更远。 反观哲学发展,当我们想要了解一些事情的时候,我们觉得哲学的思考方式可以帮助我们,但是科学推理其实也是可以的。哲学更多的是最初的启蒙方式。

参考:

  1. 离散数学coursera
  2. Lance Fortnow.《可能与不可能的边界:P/NP问题趣史》. 人民邮电出版社.
  3. Tom Stuart. 《计算的本质:深入剖析程序和计算机》. 人民邮电出版社.
  4. 《人工智能简史》

© 著作权归作者所有

OrangeJoke
粉丝 40
博文 57
码字总数 39185
作品 0
江北
高级程序员
私信 提问
函数式编程基础思想

说明 网上有很多深入语言层次讲解函数式编程的应用,很多人无法理解,能用但是一头雾水,死记硬背,原因究其是核心思想不清楚。 我说的语言层次上的,例如 Spark MapReduce lambda Groovy Rx...

热血沸腾
2017/12/20
0
0
面向接口编程详解(一)

我想,对于各位使用面向对象编程语言的程序员来说,“接口”这个名词一定不陌生,但是不知各位有没有这样的疑惑:接口有什么用途?它和抽象类有什么区别?能不能用抽象类代替接口呢?而且,作...

不最醉不龟归
2016/11/17
33
0
用 Kotlin 的函数式编程 替代 GOF 设计模式

用 Kotlin 的函数式编程 替代 GOF 设计模式 函数式编程(FP) 《Kotlin极简教程》正式上架: 点击这里 > 去京东商城购买阅读 点击这里 > 去天猫商城购买阅读 非常感谢您亲爱的读者,大家请多...

程序员诗人
2018/04/11
0
0
写给程序员:当自己的上帝

作为长年混迹于IT圈的二把刀程序员,我今天想谈谈编程的本质,也许多少能够帮助有志于加入程序圈的有为青年。 程序员每天干的最多的事情就是和电脑打交道,很多程序员说自己和电脑的二人世界...

最牛傻蛋
2014/04/01
0
0
【书评】试读《JavaScript语言精髓与编程实践》大奖等你拿

为感谢开源中国社区网友对开源中国社区的一路支持,开源中国社区与电子工业出版社博文视点公司共同举办《JavaScript语言精髓与编程实践(第2版)》试读点评送书活动。 活动时间: 2012年5月24日...

博文视点
2012/05/24
4.8K
43

没有更多内容

加载失败,请刷新页面

加载更多

你知道多少this,new,bind,call,apply?那我告诉你

那么什么是this,new,bind,call,apply呢?这些你都用过吗?掌握这些内容都是基础中的基础了。如果你不了解,那还不赶快去复习复习,上网查阅资料啥的! 通过call,apply,bind可以改变thi...

达达前端小酒馆
今天
5
0
设计模式之命令模式

命令模式的类图 其中的角色有: Client 客户端。只依赖于调用者Invoker、接收者Receiver、以及Command(网上找的图片这里没有画出来),不用关注接收者如何执行命令,只需要告诉调用者需要执行...

陈年之后是青葱
今天
7
0
2. 彤哥说netty系列之IO的五种模型

你好,我是彤哥,本篇是netty系列的第二篇。 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识。 简介 本文将介绍linux中的五种IO模型,同时也会介绍阻塞/非阻塞与同步/异步的区别。 何...

彤哥读源码
今天
5
0
OSChina 周四乱弹 —— 喵的波粒二象性

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @ 小小编辑推荐:《水墨兰亭》- 李志辉 《水墨兰亭》- 李志辉 手机党少年们想听歌,请使劲儿戳(这里) @巴拉迪维 :卧室里采光要足够好,这样...

小小编辑
今天
37
1
前后端分离接口规范

最近在开发,遇到前后端关于Boolean类型的参数传参和接收的问题: 场景:后台会根据用户是否出车/是否出司机(Boolean类型)来决定后端的业务逻辑(比如费用的计算),前端使用JSON字符串类型...

code-ortaerc
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部