编译器工作-需要多少教育[关闭]


15

我受到“ 作为主题编译器构造”问题的激励,并认为我会问这个问题。

我从一些人那里听说他们有一支优秀的“编译器团队”(不要问我在哪里听到的,我不记得了),这使我想知道,如何在这样的团队中找到一份工作?

我知道本科课程中有此类课程,但是那是研究生学位最低的课程(至少是硕士学位)吗?

我将在两个月内开始攻读计算机科学硕士学位,而我要去的学校将开设两个编译器课程,这是否足以从事编译器开发工作,还是需要投入更多时间?


2
参加开源编译器项目(例如llvm)将是一个很大的优势。
SK-logic

Ditta @ SK-Logic我目前正在为IB CS final写一个编译器。获得编写编译器的经验可能是最好的方法。

1
我要指出的是,编译器和运行时中最著名的人之一没有学位。Anders Hejlsberg ...在Turbo Pascal,Delphi,C#,TypeScript背后的大脑
Matthew Whited

Answers:


17

好吧,编译器开发是超硬性的,这意味着它需要大量的耐心,热情和扎实的知识。不要将耐心,热情和扎实的知识与任何程度的混淆。我们已经看到几位具有硕士学位的申请人,他们甚至strlen()在四行C代码中都无法识别。

一定要参加这些课程并获得实践知识。也许您甚至都不喜欢编译器开发,但是您获得的经验将帮助您完成其他一些非常有趣的开发工作。


感谢您的回应。您会给那些自学成才并且没有学术CS知识的人一个机会吗?
杰蒂2011年

3
刚刚检查了麻省理工学院开放式课程的过程
segfault

3
@Jetti:我将给那些多年来为开源编译器做出重大贡献的人一个机会,无论他们的背景如何:)
Matthieu M.

@杰蒂:我绝对会在他们提出证据后证明他们具有真正的知识。例如,如果他们为优化代码生成器的编译器编写测试,则他们的价值可能超过普通大学毕业生。
Sharptooth 2011年

当用自己的语言编写编译器时,它会变得更加有趣。
ott-- 2013年

5

第一步是拥有良好的CS背景-可能越多越好,但至少要完成BSc荣誉学位。实际上,这样做有一定道理,因为编译器(通常是语言翻译器)和相关技术(词法分析(lexing),解析)都是计算机科学的基础知识。

我相信,大量的工业(包括开放源代码)编译器开发当然会减轻学术证书的匮乏-但在很大程度上取决于候选人的背景。请注意,此处的编译器开发还将涵盖解释器和相关的解析工具。

需要具备软件工程方面的一般能力。另外,需要高级编译器(例如科学计算,游戏开发)的应用程序领域知识或具有汇编语言程序设计经验的高级人员(超出了一般语言的一般编程背景)也是优先考虑的。编译器实现的语言的专家水平的知识也是一个加分。

免责声明:我是一名编译器开发人员,曾参与面试候选人。


5

如今,诸如FlexYACC之类的工具以及一些类似的工具使编译器的构造变得更加简单。如果您喜欢它,因为它使您着迷,因此可以将其当作一种爱好,那么这些工具将为您提供帮助,并且您将能够在一个月内构建一个不错的编译器前端。

对于想要自学编译器构造的任何人,《龙书》Dragon Book)一直是最受欢迎的书之一。随着您的前进,您会花一些时间阅读开源编译器代码。


5

如果您认真对待编译器职业,我相信您至少需要接受语言理论方面的正规教育,尤其是类型理论,形式语义和可计算性理论。这些领域在学术环境之外将很难学习。在大多数情况下,编译器构建本身是聪明的开发人员可以自己学习基础知识的主题。但是,如果您想使用将大量语义分析和工具用于安全性和优化的最先进的编译器,则可能至少需要该领域的硕士学位论文。


1
这听起来更像是研发角色,而不是“产品工程角色”。我是armcc和LLVM(两个具有生产质量的C / C ++编译器)的产品工程师,从不需要这些主题中的任何一个,在我从事这一领域的两年中,我什至没有看到对它们的引用。
dune.rocks 16/09/27
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.