编译原理之美
宫文学
北京原点代码 CEO
46197 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 45 讲
开篇词 (1讲)
编译原理 · 期中考试周 (1讲)
编译原理之美
15
15
1.0x
00:00/08:27
登录|注册

开篇词 | 为什么你要学习编译原理?

讲述:宫文学大小:7.75M时长:08:27
对编程理解更上一层
在工作中应用编译技术
攻下编译技术这重要的一关
云计算与编译技术结合
人工智能与编译技术结合
使用LLVM生成可执行文件
生成目标代码和代码优化
实现一门脚本语言
词法分析、语法分析、语义分析
面向未来的编程语言
实现一门编译型语言
实现一门脚本语言
在工作中真正运用编译技术
重视过程,逐步趟过难点
具体案例带领理解抽象原理
抽象和理论化的内容
其他高级别需求
基础设施类软件
自定义功能的软件
PHP模板引擎
Hibernate和Spring
提升竞争力
高级别需求
基础设施类软件开发
PHP程序员
Java程序员
技术巨头的核心能力
国外厂商的软件
历史上的编程语言发明人
产品优势关键
创业经历
互相监督学习
课程目标
第三部分:编译技术发展趋势分析
第二部分:编译器后端技术
第一部分:编译器前端技术
课程内容
学习方法
学习困难原因
提升竞争力
应用场景举例
与工作相关
编译技术的重要性
宫文学的经历
结语
课程结构
编译技术的学习方法
编译技术的应用场景
为什么学习编译原理

该思维导图由 AI 生成,仅供参考

你好,我是宫文学,一名技术创业者。我曾经参与过几个公司的创业过程,在开源技术社区也做过一些工作,现在是北京物演科技 CEO。
我喜欢做平台性的软件,而编译技术就是产品取得优势的关键。我是国内最早一拨做 BPM 的,也就是流程管理平台,也是最早一拨做 BI 平台的,现在流行叫大数据。当时我们只有 3 个人,用编译技术做了一些硬核的产品原型,跟联想集团签订了战略级合作协议。之后我又做过电子表单和快速开发平台,而它们的核心就是编译技术。
我参与的第一个公司卖给了上市公司,第二个在新三板上市,这些成果在一定程度上受益于编译技术。而我呢,对编译技术一直很重视,也一直保持着兴趣。所以很高兴能在“极客时间”上分享与编译技术有关的原理和经验,希望我的分享能帮助你在编译技术这个领域获得实实在在的进步。
众所周知,编译技术是计算机科学皇冠上的明珠之一。历史上各门计算机语言的发明人,总是被当作英雄膜拜。比尔·盖茨早期最主要的成就,就是写了一个 Basic 的解释器。当年 Brendan Eich 设计的 JavaScript,虽然语言略微有点儿糙,但却顽强地生存到了现在。
很多国外厂商的软件,普遍都具备二次编程能力,比如 Office、CAD、GIS、Mathematica 等等。德国 SAP 公司的企业应用软件也是用自己的业务级语言编写的。目前来看,谷歌也好,苹果也好,微软也好,这些技术巨头们的核心能力,都是拥有自己的语言和生态。可见编译技术有多么重要!

编译技术,与你的工作息息相关

但也有一些程序员认为:“我不可能自己去写一门新的语言,还有必要学习编译原理吗?”
这种想法是把编译原理的用途简单化了。编译原理不是只能用于炫耀的屠龙技。 别的不说,作为程序员,在实际工作中你经常会碰到需要编译技术的场景。
Java 程序员想必很熟悉 Hibernate 和 Spring,前者用到了编译技术做 HQL 的解析,后者对注解的支持和字节码动态生成也属于编译技术。所以,如果你要深入理解和用好这类工具,甚至想写这种类型的工具,会需要编译技术。
而 PHP 程序员在写程序的时候,一般会用到模板引擎实现界面设计与代码的分离。模板引擎对模板进行编译,形成可执行的 PHP 代码。模板引擎可以很强大,支持条件分支、循环等语法。如果你了解编译技术,会更容易掌握这些模板引擎,甚至写出更符合领域需求的模板引擎。
我们 2001 年开发了一款工作流软件,里面有依据自定义公式判断流转方向的功能。像这类需要用户自定义功能的软件,比如报表软件、工资管理软件等,都需要编译技术。
如果你要参与编写一个基础设施类的软件,比如数据库软件、ETL 软件、大数据平台等,很多需要采用编译技术提供软件自带的语言功能,比如 SQL。这种功能无法由外部通用语言实现。
除此之外,解析用户输入,防止代码注入,为前端工程师提供像 React 那样的 DSL,像 TypeScript 那样把一门语言翻译成另一门语言,像 CMake 和 Maven 那样通过配置文件来灵活工作,以及运维工程师分析日志文件等等高级别的需求,都要用到编译技术。
除了丰富的应用场景,学习编译技术对于提升程序员的竞争力也很重要。现在一些大公司在招聘程序员时,有难度的面试题都是涉及底层机制的。因为理解了底层机制,才能有更深入思考问题,以及深层次解决问题的能力,而不是只能盲目地搜索答案,从表面解决问题。而学习编译原理能让你从前端的语法维度、代码优化的维度、与硬件结合的维度几个方面,加深对计算机技术的理解,提升自己的竞争力。
所以,无论你是前端工程师、后端工程师,还是运维工程师,不论你是初级工程师还是职场老手,编译技术都能给你帮助,甚至让你提升一个级别。

编译技术并不难学

但问题来了,你可能会说:“我知道编译技术很重要,我也很想把它啃下,可是我每次鼓起勇气拿起《编译原理》,啃不了多少页就放下了。编译原理已经成了我的心魔……”
在我看来,你之所以遇到困难,很大一个原因在于市面上讲述编译原理的内容往往过于抽象和理论化。学习,说到底是一个学和练,以及学以致用的过程。所以在和朋友们沟通了解之后,我想用下面的思路组织课程内容,帮你克服畏难情绪,更好地理解和学习编译原理。
我会通过具体的案例带你理解抽象的原理。比如语义分析阶段有个 I 属性和 S 属性,传统课本里只专注 I 属性和 S 属性的特点和计算过程,很抽象。那么我会分析常用语言做语义分析时,哪些属性是 I 属性,哪些是 S 属性,以及如何进一步运用这些属性,来让你更直观地了解它们。
我也会重视过程,带你一步步趟过雷区。我写了示例程序,带你逐渐迭代出一门脚本语言和一门编译型语言。当然了,我们会遇到一些挑战和问题,而在解决问题的过程中,你会切切实实体会到某个技术在哪个环节会发挥什么作用。最重要的是,你会因此逐渐战胜畏难情绪,不再担心看不懂、学不会。
我还会让你在工作中真正运用到编译技术。课程里的代码,可以给你的工作提供参考。我介绍的 Antlr 和 LLVM 工具,前者能帮你做编译器前端的工作,后者能帮你完成编译器后端的工作。在课程中,你能真正运用编译技术解决报表设计等实际问题。
为了帮你迅速了解课程的知识结构体系,我画了一张思维导图。课程从三方面展开,包括实现一门脚本语言、实现一门编译型语言和面向未来的编程语言。
课程的第一部分主要聚焦编译器前端技术,也就是通常说的词法分析、语法分析和语义分析。我会带你了解它们的原理,实现一门脚本语言。我也会教你用工具提升编译工作的效率,还会在几个应用场景中检验我们的学习成果。
第二部分主要聚焦编译器后端技术,也就是如何生成目标代码和对代码进行优化的过程。我会带你纯手工生成汇编代码,然后引入中间代码和后端工具 LLVM,最后生成可执行的文件能支持即时编译,并经过了多层优化。
第三部分是对编译技术发展趋势的一些分析。这些分析会帮助你更好地把握未来技术发展的脉搏。比如人工智能与编译技术结合是否会出现人工智能编程?云计算与编译技术结合是否会催生云编程的新模式?等等。

写在后面

课程虽然只有 30 多节,但每节课绝对是干货满满。我希望这个课程能让所有有志于提升自己技术的工程师,顺利攻下编译技术这重要的一关,能够在工作中应用它见到实效,并且对编程理解更上一层。
最后,我希望你在留言区立下 Flag,写下自己的计划,在“极客时间”与志同道合的朋友互相监督,一起学习,一起进步!
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

学习编译原理对于程序员来说至关重要。文章作者分享了自己在技术创业过程中对编译技术的重视和应用经验。他指出编译技术在产品取得优势方面的关键作用,并举例说明了编译技术在各种软件开发领域的实际应用。此外,他强调了学习编译技术对提升程序员竞争力的重要性,并解释了编译技术并不难学的观点。作者还介绍了他将在课程中采用的教学方法和内容结构,以及课程的重点和目标。整体而言,本文为读者提供了对编译技术的重要性、实际应用和学习方法的全面了解,对于想要深入学习编译原理的程序员具有很高的参考价值。

2019-08-1493人觉得很赞给文章提建议

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《编译原理之美》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(205)

  • 最新
  • 精选
  • 尔冬橙
    置顶
    老师,去GIS公司搞Java开发有前途么

    作者回复: 我离开GIS领域已有一段时间。为了你这个问题,专门问了两个同学,技术大咖。一位是腾讯地图的,一位是ESRI(ArcGIS,GIS领域的鼻祖级公司)的。 大致需要三类技术: 1.GIS的后端。都是用Java和C++开发的。对性能要求比较高。 2.做算法。基本上是AI框架 + python,要能快速迭代,作出模型来以后,还能还要用java和C++落地到生产系统。 3.做前端。这个就不说了。 GIS总体来说,还是挑战比较高的一个领域。门槛高,前途应该也比较好。这是我的看法,仅供参考。

    2019-10-01
    2
    83
  • Jaswine
    置顶
    有一位前辈对我说,想做IT行业。好好学学“计算机组成原理”、“操作系统”、“计算机网络”和“编译原理”这几个知识,对你以后走多远很有好处。前三个我都或多或少的主动去接触过,确实觉得很重要,回头再看Java就是对一些抽象的东西进行封装,最后在做工作的还是操作系统和硬件,知道操作系统和硬件是怎么回事之后让我学习Java这一类的语言很有帮助。 但是“编译原理”一直是处在我以为的状态,我知道有用但是一直没有系统学习。这次随着老师学习下。

    作者回复: 非常同意那位前辈的意见。他很有经验。 一起努力!

    2019-08-15
    5
    24
  • Norman
    置顶
    老师你好,请问学习这门课程需要什么基础知识吗?比如是否一定要了解Java或者js等?

    作者回复: 你有任何语言的背景,都能学这门课。 毕竟,这门课本身,就是为了让你了解各门语言背后的知识。当然不会因为你所掌握的具体语言而卡壳。 当然,我在课程里的例子,有c的,有java的,有javascript的,这几门语言的语法看上去都很像,所以你不会有陌生感。很多同学应该都学过上述语言之一。

    2019-08-14
    3
    32
  • 公众号:业余草
    确认过眼神,讲师头发是“编译”过的

    作者回复: 呃... 那这个编译优化得很厉害。生成的目标代码很少。:(

    2019-08-14
    2
    92
  • 浮幻随尘
    早就知道编译原理很重要,也很难学,希望在老师的课程中收获满满!

    作者回复: 如果学不会,是我的错!

    2019-08-14
    2
    35
  • 水上漂(陶)
    龚总,我是陶红军,你的坚持、执着、智慧真是棒棒的!从工作流到BI、再到电子表单、再到今天的大数据,我与你在随行……

    作者回复: 谢谢兄弟鼓励!

    2019-08-14
    33
  • Milittle
    我要把这个学好, 因为就是冲着学llvm来的, 而且我坚信以后的dl会需要更多像tvm这样的东西存在。 我要想着ai编译器进发。 加油(ง •̀_•́)ง

    作者回复: 哇,你的思维已经很靠前了! 一起加油!

    2019-08-14
    22
  • 贾献华
    在 iOS 上实现 Logo 语言,之前参照被人实现的都没有递归,写完本课程想完整完成 Logo 语言。

    作者回复: 一个厉害的flag! 敬佩!加油! 对了,我有点好奇,你想搞Logo,是要进入儿童教育或者大众编程教育领域吗?

    2019-08-15
    17
  • coder
    好奇宫老师在中科院哪个所读的研究生?

    作者回复: 中科院是在地理所搞遥感和GIS。北大时也是在这个领域,是城环系,现在是城环学院。 那时用国外的GIS软件,人家都能支持脚本。觉得咱们怎么做个软件都没有支持语言的能力呢? 当时还在工作站上用mathematica。惊艳!强大的交互式命令和脚本。

    2019-08-14
    5
    17
  • @阿锦啊
    非科班出身,对计算机几大基础课感觉非常恐惧,之前极客时间推出的算法、网络协议、mysql专栏都特别好,每一门都认真学了,收获非常大。希望这次也能跟老师一起攻克编译原理(PS:宫老师的声音,听起来让人觉得很稳重很踏实,不由自主信任这样的老师

    作者回复: 谢谢信任,我一定努力,让大家都能听懂,都能上手!

    2019-08-14
    15
收起评论
大纲
固定大纲
编译技术,与你的工作息息相关
编译技术并不难学
写在后面
显示
设置
留言
99+
收藏
99+
沉浸
阅读
分享
手机端
快捷键
回顶部