码迷,mamicode.com
首页 > 其他好文 > 详细

如何学习编者原理

时间:2017-04-01 19:04:52      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:科学   存储器   动手   重要   tps   垃圾   数据结构   入门   bsp   

看了一下现有的答案,分几个部分来回答这个问题.

1. 知乎上对于新手推荐的(高票)答案通常都存在很大问题。倒不是说推荐的东西不够经典,而是推荐的东西确实很好,走的路太弯太崎岖,不太适合新手。像类似于『看龙书』、随手扔一本纯英文的书、没有公式也能讲清楚、『动手开始写』这类答案看似逼格很高,分分钟体现答题人的情怀,其实对新手毫无帮助,因为对于一个『不知道从何下手』的人来说,无论是理论经典还是直接实战,都是不切实际的(居然还让我直接读英文?这得多少功底才能从读下去到读懂了?都说了『不知道从何下手』了)。且不去揣测这些推荐的真正目的是什么,但有理由怀疑这些推荐其实希望新手把自己以前踩过的坑再踩一遍,或者压根就不希望让新手入门,甚至单纯处于一个目的: **。

2. 在回答『如何学习编译原理』问题之前。编译原理并非随随便便就能入门的,一定要正视这个问题。编译原理的学习和实践通常基于对计算机编译过程、计算机基本工作原理、甚至一定的数学知识有一定积累,这些知识分别分布并应用在了编译原理的不同阶段。没有这些基本知识的积累,很快就会在某个阶段由于功底不够而无法再继续后面的学习。适合(完整, 前后端)学习编译原理的必要不充分条件是能够回答下面的所有问题,这些问题实在是太过于简单,如果这都答不上来真的别学了,好好补补基础:

a. 编译型语言和解释型语言的区别是什么?

b. 编译经历了哪几个基本过程? 每个过程主要干了什么事情?

c. 详细描述一下你最熟悉的语言中,赋值号的左边可以由哪些部分组成? 右边可以由哪些部分组成?

d. 什么是递归? 如何终止一个递归行为?

e. 什么是贪心过程?

f. 听说过 KMP 吗? 介绍一下它的基本思想.

g. 生成树是什么?

h. 你觉得编程语言和自然语言最重要的区别有哪些?

i. 什么是有限状态自动机? 你知道几种不同的自动机类型? 它们之间的区别和联系?

j. 内存被人为的划分成了哪几种不同的类型, 它们之间的区别和联系?

k. 什么是中断? CPU 在响应中断时会做什么事情?

l. 你最熟悉的语言有垃圾回收机制吗?

若有描述它进行垃圾回收的原理, 若没有则描述你在编写程序时是如何管理内存的?

3. 回答『如何学习编译原理』。

a. 学习 C 语言, 不要求熟悉, 但至少要弄明白指针的思想.

b. 学习数据结构, 尤其是对字符串/树/图的相关基本处理手段要非常熟悉.

c. 学习离散数学, 对树和图的相关理论要比较心中有数

d. 学习汇编语言, 不要求熟悉这门语言, 但至少要弄明白汇编指令、数据在CPU和存储器之间的交互机制.

e. 着手学习编译原理, 推荐先找一本国内高校普遍使用的教材(比如我本科学校用的是胡元义的一本编译原理教程, 很一般, 但很适合先入门), 入门后(搞明白编译原理到底是要干嘛, 解决什么样的需求)马上扔掉转龙书, 此法最佳.

f. 这里讨论的"学习"包含了编译器前后端.

最后提示:不要忽视理论的重要性, 因为编译原理本身就是很理论的;边学边做。

 

转自:https://www.zhihu.com/question/21515496

如何学习编者原理

标签:科学   存储器   动手   重要   tps   垃圾   数据结构   入门   bsp   

原文地址:http://www.cnblogs.com/hzp-1/p/6657158.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!