关于编程(编程的本质)
离散数学
离散数学是传统的逻辑学,集合论(包括函数),数论基础,算法设计,组合分析,离散概率,关系理论,图论与树,抽象代数(包括代数系统,、环、域等),布尔代数,计算模型(语⾔与⾃动机)等汇集起来的⼀门综合学科。离散数学的应⽤遍及现代科学技术的诸多领域。,
以上是百度的定义,说下个⼈的理解 离散数学的逻辑推理基础,⾸先抽象了逻辑推理的概念,在从⼀个基本定理出发,推理出⼀个命题是否为真/假 然后从抽象公有理论,即从公理推出定理的⼀般法则,接着讲解了⾃然数公理体系,介绍了同构的概念,以及哥德尔不完备定理,哥德尔编码。 接着介绍了集合,以及有限⽆限的概念。 介绍了关系的抽象,代数定义,划分,图的抽象,等各种抽象。
介绍以上抽象的⽬的就是为了能够⽤科学的⽅式描述,以及推理事物的本质。
然后通过以上的抽象知识,再根据(形式语⾔的定义),我们建⽴了语⾔的定义。 以及对应的计算模型,(有限⾃动状态机,图灵机)。这就是计算机的基础,同时从理论层⾯证明和定义计算模型。
数学,理论研究是通过符号来抽象现实来研究,来突破寻我们未知的事情。抽象的好处就是不会被现实世界所迷惑,去推导寻问题的本质,突破瓶颈。 所以整个离散数学的⽬的是教会我们怎么样使⽤抽象的
⽅法来解决问题。
通过哥德尔不完备定理/停机问题,我们知道没有万能的定理和⽅法能解决所有的问题,但是我们能从既有的⽅向(现有的理论基础)去开辟新的研究⽅向,⽽不是去出万能的定理。
启发: ,从最简单的规则出发,会产⽣复杂的系统。
计算的本质
什么是计算?这个词对于不同⼈来说意思不同,但是每个⼈都会赞同这样⼀种理解:在⼀ 台计算机读取程序、运⾏程序、读⼊⼀些输⼊,并且最后产⽣⼀些输出的时候,肯定发⽣ 了某种计算。因此我们可以这样认为:计算就是指计算机所做的事情。 为了创造⼀个环境让这种熟悉的计算发⽣,需要三个基本要素: · ⼀台机器,能够执⾏计算; · ⼀种语⾔,⽤来编写这台机器能够理解的指令; · ⼀个程序,⽤这种语⾔编写,描述机器应该具体执⾏哪些计算。
这部分内容就是关于机器、语⾔和程序的:它们是什么,⾏为如何,我们如何对其建模并 展开研究,以及如何利⽤它们完成实际⼯作。通过研究这三要素,我们将对计算的含义以 及它是如何发⽣的有更好的理解。 当然离散数学就是通过数学的⽅式来表达这些东西,除此之外我们也可以通过程序来建模参考「3」
图灵机
图灵机完整的描述了什么是计算,以及计算机的极限(停机问题)。是计算机的理论基础。
计算机科学
布尔代数,逻辑门设计。
计算机能解决的问题
[p/np问题] 关于np问题,现在也还有计算机没有办法解决的问题。 反过来也正因为没有⼀个算法能解决所有的问题(就像问神灯,要⼀个能实现所有愿望的神灯⼀样),所以才会解决具体问题的算法,所有对于具体问题都会有⼀些特殊的解决算法需要程序员去实现,同时具体的问题也会附加⼀些限制条件,使得算法有意义,同时我们⼜可以将相似的问题归类,所以也会有⼀些通⽤的算法和解决⽅案,⽐如排序等。
编程启蒙是学什么的为何有些⼈觉得算法是投机取巧,或者说像智⼒问题? 那是因为没有了解算法的本质,是能够解决⼀类问题,或者对于具体问题有特殊的解决办法,这也是为什么要分析算法的复杂度的原因,这样可以知道这个算法是否可⾏,以及使⽤范围。
编程以及编程语⾔
怎么定义程序,其实编程语⾔只需要 if else,循环,赋值这⼏个功能即可完成,但是为了能够复⽤,所以有了下⾯的发展: ⽅法(⽅法的复⽤) -> ⾯向对象 -> 函数式编程
编程语⾔的发展就是为了能够更好的复⽤,即我们所说的通⽤性。
当然编程语⾔也是图灵完备的,所以可以编写所有的计算。
架构设计
架构设计最终⽬的:在⼀定时间内(通常⾜够长才能看到架构设计的效果)⽤更少的⼈天来产出更多的价值。
这个定义是我⾃⼰的理解:
1. 在⼀定时间内(通常⾜够长才能看到架构设计的效果):敏捷开发中我们通常选MVP的需求来做,然后增量开发,但是设计的时候我
们如果考虑⾜够的扩展性,那么我们都够⽀持到下⼀次重构或者升级的时间会更久。
2. 更少的⼈天来产出更多的价值:在好的架构下,我们能够根据扩展性,可维护性,等快速⽀持业务需求就是我们的价值。
技术在短期内容易被低估,在长期内容易被⾼估
1. 这句话其实可以通过上⾯的定义得到解答,周期太短是看不到架构的效果的,设计的问题通常会在⼀定积累后爆发,同时带来⼯作量
也是成倍的。
2. 长期内被⾼估,架构也会随着业务的变化⽽变化,所以当业务变化到⼀定程度稳定之后,技术带来的效果就不会像之前那么明显。
⼈⼯智能
推荐看《⼈⼯智能简史》,看过之后发现,⼈⼯智能是计算的另⼀个分⽀,向⾃然学习(⿊盒⼦)但是有效果,⼀个分⽀就是我们离散数学所学的符号公理推理。
总结
理解计算的本质,编程的本质,才能⾛得更远。 反观哲学发展,当我们想要了解⼀些事情的时候,我们觉得哲学的思考⽅式可以帮助我们,但是科学推理其实也是可以的。哲学更多的是最初的启蒙⽅式。
参考:
1.
2. Lance Fortnow.《可能与不可能的边界:P/NP问题趣史》. ⼈民邮电出版社.
3. Tom Stuart. 《计算的本质:深⼊剖析程序和计算机》. ⼈民邮电出版社.
4. 《⼈⼯智能简史》