值得阅读语言规范吗?[关闭]


18

我想知道如果您不打算为语言或类似语言编写编译器/解释器,是否值得阅读语言规范/标准文档(例如Java语言规范)?我知道读这样的书不应该是任何人第一次接触该语言,但是这可能是学习它的更详细信息的好方法。

您是否曾经打扰过,其他人也应该打扰吗?


4
语言规范并不是一本又一本地读的,只是参考。
Mahmoud Hossam

Answers:


18

它基本上可以归结为一个相当简单的问题:您是否想要权威,详细的语言知识,还是很高兴知道该语言足以使用它,意识到有些地方您可能不太了解,所以很可能还有其他问题您根本不了解的零件?

基本上,有些人似乎天生就是“语言律师”的,只要他们不知道和/或只有几个角落或缝隙,他们就不会休息。或了解。许多这样的语言倾向于使用相对简单的语言,这仅仅是因为在这样的详细程度下学习更复杂的语言对于任何人而言通常几乎是不可能的。

对于大多数程序员而言,这将是完全的时间浪费-他们非常高兴并且富有成果,因为他们了解足够的语言以能够(合理地)很好地使用它。除此之外,他们根本不在乎。语言是一种工具,只要他们能够充分地使用该工具来满足其目的,那么实际上他们并不知道还有其他事情是不相关的。


3
+1为最后一段。那就是大多数程序员应该意识到的-他们想成为John Skeet(谁了解C#的一切,但对其他事情几乎一无所知-例如,还没有看到他回答SQL问题),或者只是一名用户,但还是许多技术这使练习更加实用,生活更加有趣。

2
@Developer Art:但是Jon Skeet是上帝;)
Anto

1
@sbi:我同意语言(及其复杂性)显然是一个主要因素。标准尺寸并不一定意味着很多。例如,C ++标准中覆盖适当语言的部分仅〜400页长,而Java语言规范则为〜500页。尽管我并不真的认为Java几乎是某些人所说的“清理过的” C ++,但我几乎不认为它比C ++复杂25%。
杰里·科芬

3
@Developer Art-对Jon Skeet有点苛刻,他
掌握

2
@dietbuddha:我当然不是说要原谅无知,公平地说,对大多数人来说是更小的问题,是否他们应该学习的东西,比的是什么,他们应该花时间学习。哪个对C ++程序员更有利:学习一种新算法,或者学习用于选择哪个重载函数来调用给定参数集的确切规则?请记住,如果通常情况下他有足够的理由要护理,那他无论如何可能正在滥用超载!
杰里·科芬

12

决不

每个人都应该永远读语言规范。

这完全是浪费时间。

优秀的程序员能够键入随机代码,在Stack Overflow上提问,并最终使用IDE编写不会经常崩溃的代码。

不要在理解语言上浪费时间。只要找到一个具有良好自动完成功能的出色IDE。问很多SO问题。任何人都需要。


3
决不?即使您正在编写口译员/编译器,也不会吗?
greyfade

1
你钉了!就是这样。;)
x4u

4
@greyfade:永远不会。永远不要相信事实。遵守假设。
S.Lott

6
那有什么微妙之处?
Aditya P

2
老实说,我不知道这是不是在讽刺。:P
greyfade

5

对于Java,语言规范旨在对有关给定源构造的含义的任何问题给出明确的答案。不建议以学习者的身份来阅读它-而是由一位好老师向您展示所有陷阱以及它们的实际含义。

对于经验丰富的开发人员,Java Puzzlers非常适合训练您对暗角情况的理解。


2

普遍的答案是:是的,值得。

如果要编写可移植的代码,则必须执行此操作。

对于某些语言,它是不可避免的,例如Ada或perl。

此外,如果您不仅要编写代码,还要从他人那里读取代码,则最终必须参考规范。


2

也许只有我一个人,但是这个问题毫无意义。了解您使用的工具是专业人员的标志。理解得越深,您使用该工具的能力就越强。对我来说,这是一个既要当外行又要专业的选择。

每当我学习一种新语言时,我首先要寻找的就是规格。

我已经阅读了ANSI C,C ++,Java,Scheme,Python和Javascript的规范。我忘记了大多数C,C ++和Java的细节,只是因为我不经常使用这些语言。阅读规范后,我是一个更好的程序员,因为我知道如何更好地使用该语言。


1

通常,了解您偶尔遇到的某些棘手的时刻可能会很有用。

但是认真的说,如果掌握一种语言需要您熟悉其详细规范,那么也许这是一种不幸的语言。类似于俗语,如果您需要应用程序文档,那么它的设计很差。


这就是为什么我随手保存一份ECMA-262的原因。
greyfade11年

1

当您遇到片刻时,我觉得它很有用,但我很难保留为直接阅读而已。但是,当我不了解某些内容后使用它时,它总是会极大地增进我的知识。


1

如果您是使用该语言编写的硬核程序员,并且您需要能够从中汲取所有细微的差别,那就可以。在这种情况下,您在时间上的投资有明显的回报。

否则,不会。如果您不打算使用这些知识,那么肯定不会坚持下去。语言规范是关于可以想象得到的最愚蠢的东西。


1

我通常不会在标准中投入太多库存。一个简单的事实是,标准不会告诉您不要将异常用作控制流。它不会告诉您不要使用Singletons。它不会告诉您如何设计可维护的类接口。当您不知道为什么时,它不会告诉您应用程序崩溃的原因。您可以拥有世界上定义最完善的程序,它仍然会令人恐惧。

在我看来,一个简单的事实是,绝大多数编程挑战不是使语言满足您的要求,而是要知道正确的方法。只要您了解基本的语言功能,那么如何使用它们就很重要。


1

绝对值得一读。某些语言(例如C ++,Java和Python)足够复杂,通过阅读语言规范,您将学到很多关于这些语言以及它们所具有的花哨的语法/语义技巧的知识。

我曾经在上大学的公交车上阅读Scheme R5RS语言规范,因为它又短又紧凑,而且我学会了所有可用的语法和所有基本功能。


0

doc.python.org中标记为“语言参考”的部分非常有用。“数据模型”一章尤其如此。


0

我认为,如果使用这种语言进行编程是您的工作,并且您想认真对待自己的工作,则应该阅读语言规范,尤其是当它相对容易,快速地阅读并像Java语言规范那样理解时,尽管它已经recently失去了很多知识。使用泛型非常简单。

但是,如果您打算学习并最终掌握一种您还不知道的新语言,那么在浪费时间之前阅读该语言的说明可能会很有见地。我敢肯定,如果更多的C ++开发人员在开始使用它之前已经阅读并尝试理解《 C ++带注释的参考手册》,那么很多人就会害怕。

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.