根据这篇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 ..)))?
对于那些阅读过该文章并希望立即开始学习的人:
在解析器,解释器和编译器上学习资源
如果你只想成为一个普通的编码器,并写东西......你不需要采用编译器.
如果你想学习计算机科学并欣赏并真正成为一名计算机科学家,你必须采用编译器.
编译器是计算机科学的缩影!它包含了每一个问题,包括(但不限于)AI(贪心算法和启发式搜索),算法理论(形式语言,自动机),系统架构等.
你可以看到许多计算机科学以惊人的方式汇集在一起.您不仅可以更好地理解为什么编程语言以他们的方式工作,而且您将成为更好的理解者.您将学会理解低级别,这有助于高级别.
作为程序员,我们经常喜欢谈论的事情都是一个"黑盒子" ......但事情顺畅了很多,当你了解了什么是在箱子里一点点.即使你没有构建一个完整的编译器,你一定会学到很多东西.您将看到解析背后的形式(并且意识到它不仅仅是一堆特殊情况被黑客攻击),还有一堆NP完全问题.你会明白为什么计算机科学理论对于实际事物的理解是如此重要.(毕竟,编译器非常实用......如果没有形式,我们就没有今天的编译器).
我真的希望你考虑学习它们......这将有助于你作为一名计算机科学家进入一个新的水平:-).
您应该了解编译器,原因很简单,实现编译器会使您成为更好的程序员.编译器肯定会很糟糕,但在此过程中你会学到很多东西.这是改进(或练习)编程技巧的好方法.