写点什么

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

  • 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:268290

评论

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

LaunchPad 市场的复苏,Penpad 成新兴生力军

股市老人

面试官:如何实现多级缓存?

不在线第一只蜗牛

缓存 程序员 面试

听 GPT 讲 client-go 源代码 (10)

fliter

新一轮 LaunchPad 热潮形成的根源在哪里,Penpad或成机会

BlockChain先知

LaunchPad 市场的复苏,Penpad 成新兴生力军

大瞿科技

开发竞猜比分与专家分析功能:如何为体育直播平台注入新活力

软件开发-梦幻运营部

接手外包团队开发的微服务项目,人麻了!

伤感汤姆布利柏

论ai韭菜的自我修养

文思源想

AI 成长感悟 文思源想

LaunchPad 市场的复苏,Penpad 成新兴生力军

石头财经

深入剖析 Java 类属性与类方法的应用

小万哥

Java 程序人生 编程语言 软件工程 后端开发

京东商品优惠券数据采集

tbapi

京东 京东API接口 京东商品优惠券数据 京东商品详情数据

QCN9274 QCN6274 IPQ9574|What Does Wi-Fi 7 Actually Bring?

wallyslilly

qcn9274 qcn6274 ipq9574

龙蜥系统运维联盟:Kindling-OriginX 如何集成 DeepFlow 的数据增强网络故障的解释力

OpenAnolis小助手

deepflow 开源 系统运维 ebpf 龙蜥社区

揭秘 LLMs 时代向量数据库的 3 大实用场景

Zilliz

Milvus 向量数据库 LLM zillizcloud rag

已解决zipfile.BadZipFile: File is not a zip file异常的正确解决方法,亲测有效!!!

小明Java问道之路

已解决TypeError: Descriptors cannot not be created directly异常的正确解决方法,亲测有效!!!

小明Java问道之路

LaunchPad 市场的复苏,Penpad 成新兴生力军

股市老人

听 GPT 讲 client-go 源代码 (9)

fliter

CORS就是跨域吗?

EquatorCoco

CORS web开发 跨域

马斯克称首位受试者可凭思维操控鼠标;字节低调推出视频模型丨 RTE 开发者日报 Vol.148

声网

OpenTiny Vue 组件库适配微前端可能遇到的4个问题

OpenTiny社区

开源 Vue 前端 微前端 组件库

CQT新里程碑:SOC 2 数据安全认证通过,加强其人工智能支持

股市老人

有少年气的手机,正奔跑在AI旷野

脑极体

AI手机

LaunchPad 市场的复苏,Penpad 成新兴生力军

加密眼界

【Java21问答】为什么synchronized会PINNED虚拟线程?

袁世超

synchronized ObjectMontior 虚拟线程 Java21

基于规则引擎的多维度配置化适配系统

五陵散人

规则引擎 匹配

ABCDE联合创始人BMAN确认出席Hack .Summit() 2024香港Web3盛会

TechubNews

香港Web3

k8s-权限管理

EquatorCoco

Kubernetes 云原生 k8s

你好,iLogtail 2.0!

阿里巴巴云原生

阿里云 云原生 iLogtail

解锁Mysql中的JSON数据类型,怎一个爽字了得

不在线第一只蜗牛

json MySQL 数据库 开发语言

【论文解读】transformer小目标检测综述

合合技术团队

目标检测 Transformer 深度学习、

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