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

程序员终身受用的底层知识?

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

 

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

 

  • 编写界面模板引擎;
  • 为项目编写各种各样的 DSL;
  • 深度理解甚至开发出 Spring、Hibernate、阿里巴巴 Druid 这样的工具。

 

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

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

 

  • 让你的软件支持公式和脚本,从而具有更强的灵活性;
  • 有能力参与基础软件的研发,因为它们很多都会用到编译技术,比如 Hibernate、Spring、大数据系统等等;
  • 编写特定领域语言,解决领域问题;
  • 写出高效、高质的代码,成为更优秀的开发者;
  • 更好地理解和学习新的语言,降低学习成本,快速跟进技术潮流。

 

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

 

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

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

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

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

 

  • 作为底层技术,编译原理出了名的晦涩难懂,学习完全没有头绪;
  • 网络上的资料过于抽象和理论化,篇幅长,讲解枯燥;
  • 畏难情绪严重,学习编译原理简直成了心魔。
胜象大百科