写点什么

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

  • 2019-08-15
  • 本文字数:1715 字

    阅读完需:约 6 分钟

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

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


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


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


  • 编写界面模板引擎;

  • 为项目编写各种各样的 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-08-15 11:268453

评论

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

阿里云弹性计算年度关键词:强劲、突破、开放

阿里云弹性计算

阿里云 弹性计算 计算巢 神龙架构 无影

C#8.0 可空引用类型

MASA技术团队

C# .net 微软 微服务 项目

线程的生命周期,真的没那么简单

华为云开发者联盟

Java 线程 生命周期 编程语言线程

博文推荐|基于 Apache Pulsar 的分布式锁

Apache Pulsar

开源 分布式 云原生 中间件 Apache Pulsar

手把手教你学Dapr - 4. 服务调用

MASA技术团队

C# .net 微软 微服务 dapr

手把手教你学Dapr - 5. 状态管理

MASA技术团队

C# .net 微软 微服务 dapr

详解 HDFS 底层交互原理

五分钟学大数据

hdfs 1月月更

手把手教你学Dapr - 8. 绑定

MASA技术团队

C# .net 微软 微服务 dapr

gpushare.com_基于去噪Transformer的无监督句子编码【EMNLP 2021】

恒源云

深度学习 语音识别 transform

中国AIOps们,你们究竟是在骗谁?

观测观测

AIOPS

全国社保基金理事会副理事长陈文辉一行莅临青藤调研

青藤云安全

手把手教你学Dapr - 9. 可观测性

MASA技术团队

C# .net 微软 微服务 dapr

使用轻量应用服务器部署Docsify在线文档平台

阿里云弹性计算

阿里云 轻量应用 征文投稿

普通开发者,如何成为Apache项目的commiter ?| 人物专访

云智慧AIOps社区

开源 程序员 算法 运维 时序数据

MS Office 冷门却实用的技巧及软件安装包分享(文末有福利)

淋雨

Office office365

【渗透技术】一个渗透测试工具人是怎样操作的

H

网络安全 渗透测试

视频智能生产及内容分析应用工具开源了!​

百度大脑

人工智能

【实时渲染】3DCAT实时渲染云在BIM领域的应用

3DCAT实时渲染

云计算 渲染 BIM 建筑

跟着源码学IM(十):基于Netty,搭建高性能IM集群(含技术思路+源码)

JackJiang

Netty 即时通讯 IM im架构设计

PK体系“配齐”!亚信科技数据库与麒麟软件OS、飞腾CPU完成产品适配

亚信AntDB数据库

AntDB 亚信科技

技术分享| 探索视频感知编码

anyRTC开发者

音视频 WebRTC 视频编码 视频压缩 视频感知编码

深入解析 Apache Pulsar 系列(一):客户端消息确认

Apache Pulsar

开源 架构 云原生 Apache Pulsar 消息中间件

Blazor是春天还是寒风里的挣扎

MASA技术团队

C# .net 微软 微服务 blazor

淘宝小部件 Canvas 渲染流程与原理全解析

阿里巴巴终端技术

小程序 淘宝 渲染

手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序

MASA技术团队

C# .net 微软 微服务 dapr

从 ClickHouse 到 ByteHouse:实时数据分析场景下的优化实践

字节跳动数据平台

数据库 字节跳动 Clickhouse 实时数据分析 bytehouse

详细图解Netty Reactor启动全流程

bin的技术小屋

微服务 网络编程 中间件 Java IO netty

手把手教你学Dapr - 6. 发布订阅

MASA技术团队

C# .net 微软 微服务 dapr

手把手教你学Dapr - 7. Actors

MASA技术团队

C# .net 微软 微服务 dapr

『内存中的操作系统』内存虚拟化又是什么

soolaugust

操作系统 内存

项目动态|Apache Pulsar 2.7.4 版本发布

Apache Pulsar

开源 架构 云原生 中间件 Apache Pulsar

不想当“螺丝钉”?先搞定编译原理_语言 & 开发_宫文学_InfoQ精选文章