我受到“ 作为主题的编译器构造”问题的激励,并认为我会问这个问题。
我从一些人那里听说他们有一支优秀的“编译器团队”(不要问我在哪里听到的,我不记得了),这使我想知道,如何在这样的团队中找到一份工作?
我知道本科课程中有此类课程,但是那是研究生学位最低的课程(至少是硕士学位)吗?
我将在两个月内开始攻读计算机科学硕士学位,而我要去的学校将开设两个编译器课程,这是否足以从事编译器开发工作,还是需要投入更多时间?
我受到“ 作为主题的编译器构造”问题的激励,并认为我会问这个问题。
我从一些人那里听说他们有一支优秀的“编译器团队”(不要问我在哪里听到的,我不记得了),这使我想知道,如何在这样的团队中找到一份工作?
我知道本科课程中有此类课程,但是那是研究生学位最低的课程(至少是硕士学位)吗?
我将在两个月内开始攻读计算机科学硕士学位,而我要去的学校将开设两个编译器课程,这是否足以从事编译器开发工作,还是需要投入更多时间?
Answers:
好吧,编译器开发是超硬性的,这意味着它需要大量的耐心,热情和扎实的知识。不要将耐心,热情和扎实的知识与任何程度的混淆。我们已经看到几位具有硕士学位的申请人,他们甚至strlen()
在四行C代码中都无法识别。
一定要参加这些课程并获得实践知识。也许您甚至都不喜欢编译器开发,但是您获得的经验将帮助您完成其他一些非常有趣的开发工作。
第一步是拥有良好的CS背景-可能越多越好,但至少要完成BSc荣誉学位。实际上,这样做有一定道理,因为编译器(通常是语言翻译器)和相关技术(词法分析(lexing),解析)都是计算机科学的基础知识。
我相信,大量的工业(包括开放源代码)编译器开发当然会减轻学术证书的匮乏-但在很大程度上取决于候选人的背景。请注意,此处的编译器开发还将涵盖解释器和相关的解析工具。
需要具备软件工程方面的一般能力。另外,需要高级编译器(例如科学计算,游戏开发)的应用程序领域知识或具有汇编语言程序设计经验的高级人员(超出了一般语言的一般编程背景)也是优先考虑的。编译器实现的语言的专家水平的知识也是一个加分。
免责声明:我是一名编译器开发人员,曾参与面试候选人。
如今,诸如Flex,YACC之类的工具以及一些类似的工具使编译器的构造变得更加简单。如果您喜欢它,因为它使您着迷,因此可以将其当作一种爱好,那么这些工具将为您提供帮助,并且您将能够在一个月内构建一个不错的编译器前端。
对于想要自学编译器构造的任何人,《龙书》(Dragon Book)一直是最受欢迎的书之一。随着您的前进,您会花一些时间阅读开源编译器代码。
如果您认真对待编译器职业,我相信您至少需要接受语言理论方面的正规教育,尤其是类型理论,形式语义和可计算性理论。这些领域在学术环境之外将很难学习。在大多数情况下,编译器构建本身是聪明的开发人员可以自己学习基础知识的主题。但是,如果您想使用将大量语义分析和工具用于安全性和优化的最先进的编译器,则可能至少需要该领域的硕士学位论文。