Lohnt es sich, die Sprachspezifikation zu lesen? [geschlossen]

18

Ich frage mich, ob es sich lohnt, Sprachspezifikationen / Standarddokumente (z. B. die Java-Sprachspezifikation ) zu lesen, wenn Sie keinen Compiler / Interpreter für die Sprache oder ähnliches schreiben werden. Ich verstehe, dass das Lesen eines solchen Buches nicht das erste Mal sein sollte, dass jemand mit der Sprache in Berührung kommt, aber es könnte eine großartige Möglichkeit sein, die feineren Details davon zu lernen.

Haben Sie jemals gestört, und sollten andere?

Anto
quelle
4
Eine Sprachspezifikation ist nicht dazu gedacht, von vorne bis hinten gelesen zu werden, sie ist lediglich eine Referenz.
Mahmoud Hossam

Antworten:

18

Es kommt im Grunde genommen auf eine ziemlich einfache Frage an: Wollen Sie maßgebliche, detaillierte Kenntnisse der Sprache, oder sind Sie froh, dass Sie diese gut genug kennen, um sie zu verwenden, und stellen Sie fest, dass es wahrscheinlich Teile gibt, die Sie nicht gut kennen, und möglicherweise auch andere Teile, die Sie gar nicht kennen?

Grundsätzlich gibt es einige Leute, die beinahe als "Sprachanwälte" geboren zu sein scheinen - sie werden sich nicht ausruhen (können), solange es in der Sprache noch ein paar Ecken und Kanten gibt, die sie nicht kennen und / oder oder verstehen. Viele von ihnen tendieren zu relativ einfachen Sprachen, nur weil das Erlernen komplexerer Sprachen auf dieser Detailebene für eine Person oft so gut wie unmöglich ist.

Für die meisten Programmierer wäre das eine reine Zeitverschwendung - sie sind sehr glücklich und produktiv, wenn sie genug über die Sprache wissen, um sie (angemessen) gut verwenden zu können. Darüber hinaus ist es ihnen einfach egal. Die Sprache ist ein Werkzeug, und solange sie es gut genug für ihre Zwecke einsetzen können, ist die Tatsache, dass es andere Dinge gibt, die sie nicht kennen, größtenteils irrelevant.

Jerry Sarg
quelle
3
+1 für den letzten Absatz. Das sollten sich die meisten Programmierer bewusst machen - wollen sie ein John Skeet sein (der alles über C # weiß, aber so gut wie nichts anderes - hat zum Beispiel nicht gesehen, dass er SQL-Fragen beantwortet) oder nur ein Benutzer, sondern vieler anderer Technologien Das macht die Praxis praktischer und das Leben interessanter.
2
@ Entwickler Art: Aber Jon Skeet ist Gott;)
Anto
1
@sbi: Ich würde zustimmen, dass die Sprache (und ihre Komplexität) eindeutig ein wichtiger Faktor ist. Standardgröße bedeutet jedoch nicht unbedingt viel. Beispielsweise ist der Teil des C ++ - Standards, der die eigentliche Sprache abdeckt, nur ~ 400 Seiten lang, während die Java-Sprachspezifikation ~ 500 ist. Obwohl ich nicht wirklich denke, dass Java beinahe das "aufgeräumte" C ++ ist, was manche behaupten, glaube ich kaum, dass es 25% komplexer ist als C ++.
Jerry Coffin
3
@Developer Art - Jon Skeet ist ein bisschen hart, er hat Abzeichen für alles (einschließlich SQL!)
SHug
2
@dietbuddha: Ich möchte Unwissenheit nicht entschuldigen, aber fairerweise ist es für die meisten Menschen weniger eine Frage, ob sie etwas lernen sollten, als was sie ihre Zeit mit Lernen verbringen sollten. Wovon profitiert ein C ++ - Programmierer mehr: Lernen eines neuen Algorithmus oder Erlernen der genauen Regeln für die Auswahl der überladenen Funktion, die für einen bestimmten Parametersatz aufgerufen werden soll? Denken Sie daran, dass er, wenn er normalerweise einen Grund zur Sorge hat, der aufgerufen wird, wahrscheinlich trotzdem eine Überlastung missbraucht!
Jerry Coffin
12

noch nie

Man sollte niemals eine Sprachspezifikation lesen.

Es ist eine totale Zeitverschwendung.

Großartige Programmierer sind in der Lage, zufälligen Code einzugeben, Fragen zum Stapelüberlauf zu stellen und mithilfe der IDE schließlich Code zu schreiben, der nicht sehr oft abstürzt.

Verschwenden Sie keine Zeit damit, die Sprache zu verstehen. Finden Sie einfach eine großartige IDE mit guter Autovervollständigung. Stellen Sie viele SO-Fragen. Es ist alles, was jemand braucht.

S.Lott
quelle
3
Noch nie? Nicht einmal, wenn Sie einen Interpreter / Compiler schreiben?
greyfade
1
Du hast den Nagel auf den Kopf getroffen! So funktioniert das. ;)
x4u
4
@greyfade: Niemals. Traue niemals Fakten. Bleibe bei den Annahmen.
S.Lott
6
Was ist daran subtil?
Aditya P
2
Ich konnte ehrlich gesagt nicht sagen, ob dies Sarkasmus war oder nicht. : P
greyfade
5

Für Java soll die Sprachspezifikation eine eindeutige Antwort auf alle Fragen zur Bedeutung eines bestimmten Quellkonstrukts geben. Es wird nicht empfohlen, es als Lerner zu lesen - stattdessen zeigt ein guter Lehrer Ihnen alle Fallen und was sie tatsächlich bedeuten.

Für einen erfahrenen Entwickler sind die Java Puzzlers wirklich gut, um Ihr Verständnis für die dunklen Eckfälle zu trainieren.


quelle
2

Die allgemeine Antwort lautet: Ja, es lohnt sich.

Wenn Sie portablen Code schreiben möchten, ist dieser obligatorisch.

Für einige Sprachen ist dies nur unvermeidlich, zB Ada oder Perl.

Wenn Sie nicht nur Code schreiben, sondern auch Code von anderen lesen, müssen Sie sich schließlich auf die Spezifikation beziehen.

mouviciel
quelle
2

Vielleicht bin es nur ich, aber diese Frage macht keinen Sinn. Das Verständnis der von Ihnen verwendeten Werkzeuge ist das Markenzeichen eines Profis. Je tiefer das Verständnis, desto besser ist Ihre Fähigkeit, das Tool zu verwenden. Für mich ist es die Wahl zwischen einem Dilettanten oder einem Profi.

Wann immer ich eine neue Sprache lerne, suche ich zuerst die Spezifikation.

Ich habe Spezifikationen für ANSI C, C ++, Java, Schema, Python und Javascript gelesen. Ich habe die meisten Details zu C, C ++ und Java vergessen, nur weil ich diese Sprachen nicht oft verwende. Nachdem ich die technischen Daten gelesen hatte, war ich ein besserer Programmierer, weil ich wusste, wie man die Sprache besser verwendet.

dietbuddha
quelle
1

Im Allgemeinen kann es hilfreich sein, bestimmte schwierige Momente zu verstehen, denen Sie gelegentlich begegnen.

Aber im Ernst, wenn Sie eine Sprache beherrschen müssen, um sich mit ihren detaillierten Spezifikationen vertraut zu machen, dann ist die Sprache vielleicht eine unglückliche. Ähnlich wie im allgemeinen Sprichwort: Wenn Sie eine Dokumentation für Ihre Anwendung benötigen, ist diese schlecht gestaltet.


quelle
Genau aus diesem Grund halte ich eine Kopie von ECMA-262 bereit.
greyfade
1

Ich finde es nützlich, wenn du in einen Moment hineinläufst, aber ich finde es schwierig, eine klare Lesart beizubehalten. Wenn ich jedoch etwas verwendet habe, das ich nicht verstanden habe, hat es mein Wissen immer sehr erweitert.

Wiederholung
quelle
1

Wenn Sie ein Hardcore-Programmierer in dieser Sprache sind und in der Lage sein müssen, jede subtile Nuance daraus herauszuholen, ja. In diesem Fall rechnen sich Ihre Zeitinvestitionen eindeutig .

Ansonsten nein. Wenn Sie das Wissen nicht nutzen, wird es sich bestimmt nicht an Sie halten. Bei den Sprachspezifikationen handelt es sich um das Langweiligste, was man sich vorstellen kann.

Satanicpuppy
quelle
1

Normalerweise lege ich nicht viel Wert in den Standard. Die einfache Tatsache ist, dass der Standard Sie nicht auffordert, Ausnahmen nicht als Kontrollfluss zu verwenden. Es wird Ihnen nicht sagen, Singletons nicht zu verwenden. Sie erfahren nicht, wie Sie eine wartbare Klassenschnittstelle entwerfen. Es wird Ihnen nicht sagen, warum Ihre Anwendung abstürzt, wenn Sie nicht wissen, warum. Sie können das wohl definierte Programm der Welt haben und es wird immer noch schrecklich sein.

Meiner Meinung nach ist die einfache Tatsache, dass die überwiegende Mehrheit der Programmierprobleme nicht darin besteht, die Sprache zu tun, was Sie wollen, sondern zu wissen, was das Richtige ist. Solange Sie die grundlegenden Sprachfunktionen kennen, ist es wichtig, wie Sie sie verwenden.

DeadMG
quelle
1

Es lohnt sich auf jeden Fall, es zu lesen. Einige Sprachen wie C ++, Java und Python sind so komplex, dass Sie beim Lesen der Sprachspezifikation viel über diese Sprachen und all ihre ausgefallenen Syntax- / Semantiktricks lernen.

Ich habe die Sprachspezifikation für Schema R5RS auf der Busfahrt zum College gelesen, weil sie kurz und kompakt war und ich die gesamte Syntax und alle verfügbaren Grundfunktionen gelernt habe.

Rudolf Olah
quelle
0

Der Teil von doc.python.org mit der Bezeichnung "Sprachreferenz" ist äußerst nützlich. Insbesondere das Kapitel "Datenmodell".

user16764
quelle
0

Ich denke, wenn das Programmieren in dieser Sprache Ihre Aufgabe ist und Sie Ihre Aufgabe ernst nehmen möchten, sollten Sie die Sprachspezifikation lesen, insbesondere wenn sie relativ einfach und schnell zu lesen und zu verstehen ist, wie die Java-Sprachspezifikation, obwohl sie recentlyviel verloren hat Es ist einfach mit Generika.

Aber auch wenn Sie vorhaben, eine neue Sprache zu lernen und zu beherrschen, die Sie noch nicht kennen, kann es sehr aufschlussreich sein, die Spezifikation dieser Sprache zu lesen, bevor Sie Ihre Zeit damit verschwenden. Ich bin mir sicher, wenn mehr C ++ - Entwickler das C ++ Annotated Reference Manual gelesen und versucht hätten, es zu verstehen, bevor sie es in Betrieb genommen hätten, wären viele verängstigt davongekommen.

x4u
quelle