当你编码时你在做什么:谈编程的本质(零)
编码时间也不算短了,一直想写这么一篇文章,但苦于知识面和功力不够。经过了一年的读研学习,终于对什么是计算、什么是编程的本质有了些领悟。于是断断续续花了几天时间,斗胆提笔来谈一谈自己的理解。写着写着就越写越多,于是干脆就写成一个系列吧。还没搞懂的就先放下,等搞懂了写好了再发,用这个系列先占个位置,督促自己不断地深入学习,不要停歇。
目前已经想到的比较重要的内容有:
- State Machine:计算机的理论根基之一,从图灵机到何为计算。
- Set & Function:与编码息息相关的集合与函数。
- Tree (Graph):既能表示计算对象的执行空间,同时树在数据结构中的重要地位。
- Top-down & Bottom-up Search:对搜索空间进行由上至下(Recursion & DFS)和由下至上(Dynamic Programming)的搜索。
- Behind the Scene: Logic:编程的另一理论根基,为什么用计算机进行计算是“站得住脚”的科学。
- Program & Data:代码与数据的完美统一。
相信对这些内容的梳理和学习,对代码的理解会加深一层,编程功力一定会有很大的提高。也正应了这个系列的标题:当你编码时你究竟在做什么?每一个想不断进取的程序员、工程师在整个职业生涯都可能都会反复问自己这个问题。但这个主题本身有些“硬”,可能感兴趣的人不是那么多。但尽管如此,本人依旧相信这是一件值得做的事!
关于学习素材的来源,主要有研究生期间学过的《Theory of Computation》、《Computing Logic》、《Analysis of Algorithm》等课,以及对应的经典书籍《Introduction to the Theory of Computation》、《Introduction to Algorithms》等。
最后,编码不是随便敲键盘,也不只是谋生的手段。“水滴石穿,绳锯木断”,不断研习,也许就能发现在其背后隐藏的秘密。不多说了,那就让我们一起来探索编程的本质吧。