(何时)我应该学习编译器吗?

Pet*_*ter 35 compiler-theory

根据这篇http://steve-yegge.blogspot.com/2007/06/rich-programmer-food.html 文章,我绝对应该这样做.

引用温和但坚持不懈的执行摘要:如果你不知道编译器是如何工作的,那么你就不知道计算机是如何工作的.如果你不是100%确定你是否知道编译器是如何工作的,那么你就不知道它们是如何工作的.

我认为这是一篇非常有趣的文章,应用领域非常有用(帮自己一个忙,然后阅读它)但是又一次,我看到成功的高级sw工程师不熟悉编译器,或内部机器这个问题的架构,但确实知道以下列表中每个项目的一两件事:

  • 编程范式(OO,功能,...)
  • 编程语言API(C#,Java ..)和至少2个非常不同的人说!(Java/Haskell)
  • 编程框架(Java,.NET)
  • 一个让您提高工作效率的IDE(Eclipse,VisualStudio,Emacs,......)
  • 编程最佳实践(例如,参见fxcop规则)
  • 编程原理(DRY,高内聚,低耦合,......)
  • 编程方法(TDD, MDE)
  • 设计模式(结构,行为,......)
  • 建筑基础(层,层,过程模型(瀑布,敏捷,...)
  • 测试工具(单元测试,模型测试,......)
  • GUI技术(WPF,Swing)
  • 记录工具(Javadoc,Sandcastle ..)
  • 建模语言(可能是工具)(UML,VisualParadigm,Rational)
  • (毫无疑问,这里忘记了非常重要的东西)

并非所有这些工具都是成为一名优秀程序员所必需的(就像你不需要它时的GUI一样),但大多数都是.编译器在哪里进入,并且它们真的那么重要,因为正如我所提到的,许多程序员似乎在不了解它们的情况下做得很好,特别是,成为一名优秀的程序员可以看到众多知识领域几乎是终身成就: - ),即使编译器非常重要,是不是总有更重要的东西?

或者我今天应该订购'The Unleashed Compilers Unlimited Bible(24H ..)))?

对于那些阅读过该文章并希望立即开始学习的人:

在解析器,解释器和编译器上学习资源

Tom*_*Tom 40

如果你只想成为一个普通的编码器,并写东西......你不需要采用编译器.

如果你想学习计算机科学并欣赏并真正成为一名计算机科学家,你必须采用编译器.

编译器是计算机科学的缩影!它包含了每一个问题,包括(但不限于)AI(贪心算法和启发式搜索),算法理论(形式语言,自动机),系统架构等.

你可以看到许多计算机科学以惊人的方式汇集在一起​​.您不仅可以更好地理解为什么编程语言以他们的方式工作,而且您将成为更好的理解者.您将学会理解低级别,这有助于高级别.

作为程序员,我们经常喜欢谈论的事情都是一个"黑盒子" ......但事情顺畅了很多,当你了解了什么是在箱子里一点点.即使你没有构建一个完整的编译器,你一定会学到很多东西.您将看到解析背后的形式(并且意识到它不仅仅是一堆特殊情况被黑客攻击),还有一堆NP完全问题.你会明白为什么计算机科学理论对于实际事物的理解是如此重要.(毕竟,编译器非常实用......如果没有形式,我们就没有今天的编译器).

我真的希望你考虑学习它们......这将有助于你作为一名计算机科学家进入一个新的水平:-).


Jes*_*erE 9

您应该了解编译器,原因很简单,实现编译器会使您成为更好的程序员.编译器肯定会很糟糕,但在此过程中你会学到很多东西.这是改进(或练习)编程技巧的好方法.

  • 每个人都说学习编译器会让你成为一个更好的程序员,但究竟如何呢?请添加一些信息,了解何时可以应用这些知识和一些经验来帮助解释这一点. (3认同)

Unk*_*own 5

要成为一名优秀的程序员,您无需了解编译器,但它会有所帮助。我在了解它们时意识到的一件事是,编译只是一种翻译。

如果您曾经从一种语言翻译成另一种语言,那么您刚刚完成了编译。


那么你应该什么时候学习编译器呢?

当您想要或需要它来解决问题时。

  • 仅在您需要它来解决问题时才学习它?你是不是太迟了? (4认同)

Too*_*the 5

编译器理论很有用,但不是必需的。

尽管有一些技术可以派上用场,例如词法分析和语法分析。

另一种是错误处理。编译器需要很多这样的东西。用户输入可以包含任何内容,甚至是意外的内容。你需要处理所有这些。


ove*_*ked 5

如果您打算在足够高的级别上工作,并且担心 UML 和自描述代码,那么您可以轻松地完成您的整个职业生涯,而无需想要或不需要编译器如何工作的详细信息。

但是,如果您是一名一线程序员并且无意管理您的朋友,那么很可能有一天,您会意识到您正在与编译器发动战争。这可能是一个随机出现的错误,也可能是走廊里关于 while-verses-for 循环的对话。你会意识到组装(或IL,可能,在未来几年)就在你所需要的左边一点,另一个宇宙将会展开。

所以,我想我的答案是,现在只需注意编译器,它做了很多事情,但不要太担心。