不想当“螺丝钉”?先搞定编译原理

2019 年 8 月 15 日

不想当“螺丝钉”?先搞定编译原理

众所周知,编译技术是计算机科学史上的明珠之一。如果说整个互联网的发展是构建在编译技术和编程语言之上也毫不为过。


不过,有的程序员可能会觉得,我也不会去设计一门新的编程语言,有必要学习编译原理吗?学了有什么用呢?


实际上,编译原理不是用于炫耀的屠龙技,程序员在工作中经常会碰到需要编译技术的场景,比如:


  • 编写界面模板引擎;

  • 为项目编写各种各样的 DSL;

  • 深度理解甚至开发出 Spring、Hibernate、阿里巴巴 Druid 这样的工具。


除此之外,解析用户输入,防止代码注入,为前端工程师提供像 React 那样的 DSL,像 TypeScript 那样把一门语言翻译成另一门语言,像 CMake 和 Maven 那样通过配置文件来灵活工作,运维工程师分析日志文件等等高级别的需求,都会用到编译技术。


编译技术,就是把高级语言的代码翻译成为计算机可以理解和运行的二进制代码的技术。掌握了编译技术,你可以获得什么能力呢?太多了,比如:


  • 让你的软件支持公式和脚本,从而具有更强的灵活性;

  • 有能力参与基础软件的研发,因为它们很多都会用到编译技术,比如 Hibernate、Spring、大数据系统等等;

  • 编写特定领域语言,解决领域问题;

  • 写出高效、高质的代码,成为更优秀的开发者;

  • 更好地理解和学习新的语言,降低学习成本,快速跟进技术潮流。


除了实践性强,学习编译技术对于提升程序员的职场竞争力也很重要。


比如,我发现一些大公司招聘程序员时,有难度的面试题都是涉及底层机制的。理解了底层机制,才能更深入的思考问题和解决问题。学习编译原理,能让你从前端的语法、代码优化、与硬件结合等维度,加深对计算机的理解,提升工作中解决疑难杂症的能力。


如今的快餐式学习,虽然会帮助个人在短期内迅速了解一门技术,但程序员想要保持长期的竞争力,学习底层知识并进行实践,提升专业素养必不可少。也许你以后不会成为编译器开发者,但学好编译原理,一定会让你终生受益。


如何深入理解并实践编译原理?


很多同学反馈说,知道编译技术的重要性,也很希望能啃下来,但总是会遇到许多问题:


  • 作为底层技术,编译原理出了名的晦涩难懂,学习完全没有头绪;

  • 网络上的资料过于抽象和理论化,篇幅长,讲解枯燥;

  • 畏难情绪严重,学习编译原理简直成了心魔。


为了帮助大家真正克服畏难情绪,更好的理解和实践编译原理,我在极客时间开了课程《编译原理之美》,为此特别梳理了一个知识框架图,希望帮你快速、直观地了解我们的知识结构体系。



我是谁?


我是宫文学,现任北京物演科技 CEO。本科毕业于北京大学,硕士毕业于中科院。我是国内最早做 BPM(流程管理平台)和 BI 平台(大数据平台)的创业者之一,2016 年还入选了厦门市第九批“双百计划”领军型创业人才。


我曾经以 3 个人的团队,用编译技术做了一些硬核的产品原型,然后就跟联想集团签订了战略级合作协议,之后我又做过电子表单和快速开发平台。我参与的第一个公司被上市公司收购,第二个在新三板上市,而这些成果在一定程度上受都益于编译技术。


我会如何讲解编译原理?


在这个课程里,我会从前端与后端两个层面来讲解编译原理的核心技术点,用具体的案例带你理解抽象的原理,帮助你建立信心,克服畏难情绪,让你在这个过程中一步步趟过雷区,在工作中真正用到编译技术。



课程具体分为三个部分:


第一部分:实现一门脚本语言


主要聚焦编译器前端技术,通过具体实例,带你了解词法分析、语法分析、语义分析的原理,实现一门脚本语言,并用工具提升效率。


第二部分:实现一门编译型语言


主要聚焦编译器后端技术,带你了解如何生成目标代码和对代码进行优化,并引入 LLVM 工具,最后生成可执行的文件能支持即时编译,并经过了多层优化。


第三部分:面向未来的编程语言


人工智能与编译技术结合是否会出现人工智能编程?这个模块将对编译技术的发展趋势进行分析,帮你更好地把握未来技术发展的脉搏。


学习完课程,你能收获什么?


1.系统掌握编译器核心技术


2.手动实现解释型和编译型 2 门语言


3.4 大案例剖析编译技术的实际应用


4.编译技术的趋势解读


1 分钟看看目录,为了帮你更加体系化的掌握编译器核心技能,我将内容精简到了 30 多节,但绝对干货满满,能让你真正学懂、落地实践编译原理。



《编译原理之美》限时订阅福利


戳我订阅,输入优惠口令:bianyi666


到手价 ¥63,仅前 500 人有效


2019 年 8 月 15 日 11:26 5438

评论

发布
暂无评论
发现更多内容

统一软件开发过程(RUP)的概念和方法

力软.net/java开发平台

项目管理 软件开发流程

合约一键跟单软件开发技术,跟单系统搭建app

WX13823153201

比特币 区块链

应用研发平台特惠专场,助力企业加速数智化发展

应用研发平台EMAS

分苹果

书旅

算法 LeetCode

SpringBoot系列(五):SpringBoot 日志配置(logback)

xcbeyond

Java 微服务 springboot logback

SpringBoot系列(六):SpringBoot 数据库操作(集成MyBatis)

xcbeyond

Java 微服务 mybatis springboot

如何写出完美的接口:接口规范定义、接口管理工具推荐

xcbeyond

Java 架构 接口规范

重磅消息,我国数字人民币将在京津冀等具备条件地区试点

CECBC区块链专委会

数字货币 货币

实用心理学—没用你打我!

代码制造者

职场 职场搞笑 信息技术 人工

JavaScript中的正则表达式详解

华为云开发者社区

JavaScript 正则表达式 程序员 字符串 语法

实践总结:在 Java 中调用 Go 代码

jiacai2050

如何从红蓝墨水中分离出红墨水?回声消除算法介绍

拍乐云Pano

音视频 WebRTC 回声消除 3A算法 音频技术

【写作群星榜】8.1~8.14 写作平台优秀作者 & 文章排名

InfoQ写作平台

写作平台 排行榜

用Ant实现Java项目的自动构建和部署

陈磊@Criss

Vue项目起步

JackWangGeek

Vue

如何正确认识区块链?

CECBC区块链专委会

区块链价值 区块链应用

Junit执行单元测试用例成功,mvn test却失败的问题和解决方法

陈磊@Criss

NetPerf揭示容器间是高速路还是林荫小路

陈磊@Criss

分布式链路追踪Skywalking 存储模型设计

时间的旅行者

分布式 Skywalking 高性能 分布链路追踪

终于知道Kafka为什么这么快了!

海星

kafka 消息队列

PHP之闭包函数

书旅

面向对象 闭包 函数

英特尔首席架构师Raja:一个“百亿亿次级计算能力惠及每个人”的时代正在到来

飞天鱼2017

免费DDoS攻击测试工具大合集

陈磊@Criss

Maven的爱恨情仇

xcbeyond

Java maven

Facebook开源的数据Mock:Memisis详解

陈磊@Criss

统一软件开发过程(RUP)的概念和方法

雯雯写代码

Swagger 这一个文章就够了

陈磊@Criss

从实际案例讲 Deno 的应用场景

keelii

JavaScript typescript deno

libuv 异步模型之设计概览

Huayra

libuv 异步模型

守护进程

书旅

php 进程 守护进程

MySQL中timestamp和datetime,你用的对么?

xcbeyond

MySQL 数据库 后端

不想当“螺丝钉”?先搞定编译原理-InfoQ