对程序员而言,有什么终身受用的底层知识?

计算机最早出现的时候,代码是用打孔机打在卡带上,然后塞进特定设备读取执行,后来终于可以键盘输入了,却只能使用直接面向系统的汇编语言,用汇编语言编写简单的数学计算,其实也不难,但如果你要想用汇编语言做一个复杂的系统,想想那酸爽。

所幸编译器出现了,更容易理解和上手的编程语言出现了,程序员这个职位才得以普及,软件行业,乃至互联网行业才得以发展。

编程语言分两种执行方式,一种是编译执行,典型如历史悠久的C语言,一种是解释执行,典型如曾经火爆的PHP。

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

我先说个故事,几年前,有安全公司发现,有很多常见的苹果 APP 被安装了后门程序,这其中涉及的 APP 有微信,网易音乐,滴滴,12306,同花顺,联通营业厅,中信银行等等等等,覆盖人群过亿。你没听错,是不是觉得不可思议,顶级巨头们研发的 APP 很多被人植入了后门,是不是感觉很震惊,为什么如此多巨头同时中招,而苹果市场也被蒙蔽呢?

因为有人在通过迅雷下发的编译器里做了手脚。我们都知道的,苹果官网对中国网络环境并不友好,很多程序员用迅雷下载编译器,虽然 APP 的源代码都是正常的,但编译器加了尾巴,结果就造成了如此让人难以置信的后果。你现在可以搜索苹果 Xcode 后门事件,依然可以搜到当年事件的回顾。

在编译器里做手脚,几乎所有巨头都中招,而很长时间无人发现。

当然,你说,这跟编译原理有什么关系,咱不是教人学坏啊,但你看精通编译原理的人,能搞出多可怕的事情。如果你想去做防御别人使坏的人,你至少也要懂这些吧。

2002年-2004年,我在绿盟做程序员,跟 TK 教主,袁哥等大牛们做同事,当时才知道,大部分最严重的系统级安全漏洞,基本上都是来源于缓冲区溢出。知道一个顶级的未公开缓冲区溢出漏洞在地下黑市值多少钱么?几百万美金,不开玩笑,而买主用它来搞事产生的效益,或者造成的破坏,可就远不止这个数了。

缓冲区溢出漏洞的机制是什么,其实都在编译原理里面。操作系统是如何对内存和代码进行地址分配和执行的,如果不理解编译原理,你就无法理解,为什么普通程序员看上去逻辑毫无异常的代码,在编译执行的过程中,会存在致命的漏洞。

绿盟当年混出来的安全大牛目前在各大互联网巨头担任要职,光腾讯就有玄武实验室的 TK 教主和湛卢实验室的袁哥两大旗舰型人物。当然安全大牛们也不止绿盟这一支,想去应聘做这些大牛的弟子么?想挑战最前沿的漏洞挖掘技术么?编译原理多半是基本功来着。

除了信息安全领域,编译原理属于基本功之外,在高性能的诉求场合,比如淘宝应对双11的场合,要对系统做极致优化,怎么叫极致优化,你要对程序系统调用的每个逻辑都了如指掌。如果你常去 Qcon 这样的架构师峰会听阿里专家讲如何应对极致并发的场景经验,其实很多优化思路和方案,来源于编译原理的认知。

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

  • 编写界面模板引擎;

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

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

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

关于解释器,我多说几句,20年前呼叫中心系统就已经支持智能脚本解析,现在区块链上的智能合约,也是一种脚本解析能力,各种公链推崇的所谓图灵完备的智能合约,说的不就是脚本解析能力的强大么。

 

掌握了编译和解释器技术,你可以获得什么能力呢?简直太多了:

 

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

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

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

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

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

 

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

 

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

 

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

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

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

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

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

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

在这里帮大家找到一个非常全面的编译原理知识框架图资料,能帮你更好的理解和实践编译原理,克服畏难情绪,这张图出自极客时间专栏《编译原理之美》,作者是宫文学。

640?wx_fmt=jpeg

     

宫文学是谁?

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

说个好玩的,我们一起在厦门党校上过培训课,他当时好像就坐在我旁边。因为他一直拿着单反到处拍,印象颇深。扯远了,扯远了。

在编译技术上的实战经验非常丰富,曾经以3个人的团队,用编译技术做了一些硬核的产品原型,然后就跟联想集团签订了战略级合作协议,也做过电子表单和快速开发平台。

 

640?wx_fmt=jpeg

?扫描上图,立减¥5优惠口令:666bianyi

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

如何讲解编译原理?

我看了目录和内容,主要是从编译器的前端与后端两个层面来讲解编译原理的核心技术点,会举很多案例来帮你理解抽象的内容,并且教你在工作中真正用到编译技术。

      

640?wx_fmt=png

 

具体分为三个部分:

 

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

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

 

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

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

 

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

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

 

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

 

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

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

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

4.编译技术的趋势解读

 

1分钟看看目录,跟市面上复杂的资料不同,内容精简到30多节,但涵盖的重点难点却一点都不少,就是为了能让你更高效、清晰的学懂、落地实践编译原理。

640?wx_fmt=jpeg

      

限时订阅福利

1.早鸟优惠¥68,原价¥99。结算时输入优惠口令「666bianyi」再减5元,到手价¥63,仅限前500人。

2.订阅课程后,可获得作者亲自整理的高清版「编译原理核心知识框架图」,获取方式:公众号后台回复「编译」。

 

640?wx_fmt=jpeg

?扫描上图,立减¥5优惠口令:666bianyi

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

 

学好编译原理,不一定非要自己写语言,但却能把很多其他程序员觉得很酷的东西看得透彻一点,不会只看到程序语言的设计表象,这也是十分重要的。 

 

?点击「阅读原文」,一起攻克编译原理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值