¿Vale la pena leer la especificación del idioma? [cerrado]

18

Me pregunto si vale la pena leer las especificaciones del lenguaje / documentos estándar (por ejemplo, la Especificación del lenguaje Java ) si no vas a escribir un compilador / intérprete para el idioma o algo similar. Entiendo que leer un libro así no debería ser la primera exposición de nadie al idioma, pero podría ser una excelente manera de aprender los detalles más finos del mismo.

¿Alguna vez te has molestado y otros deberían

Anto
fuente
44
Una especificación de idioma no debe leerse de principio a fin, es simplemente una referencia.
Mahmoud Hossam

Respuestas:

18

Básicamente se trata de una pregunta bastante simple: ¿desea un conocimiento detallado y autorizado del idioma, o está contento de saberlo lo suficiente como para usarlo, dándose cuenta de que probablemente hay partes que no conoce bien y posiblemente otras partes que no sabes en absoluto?

Básicamente, hay algunas personas que parecen casi nacidas para ser "abogados de idiomas": no descansarán (no podrán) mientras haya algunos rincones o grietas en el idioma que no conocen y / o entender Muchos de estos gravitan hacia lenguajes relativamente simples simplemente porque aprender idiomas más complejos a este nivel de detalle es casi imposible para cualquier persona.

Para la mayoría de los programadores, eso sería una pérdida total de tiempo: están bastante contentos y productivos sabiendo lo suficiente del lenguaje para poder usarlo (razonablemente) bien. Más allá de eso, simplemente no les importa. El lenguaje es una herramienta, y siempre que puedan usar la herramienta lo suficientemente bien para sus propósitos, el hecho de que hay otras cosas que no saben es en gran medida irrelevante.

Jerry Coffin
fuente
3
+1 para el último párrafo. Eso es lo que la mayoría de los programadores deben darse cuenta: quieren ser John Skeet (que sabe todo sobre C # pero casi nada sobre otra cosa; no lo han visto responder preguntas de SQL, por ejemplo) o simplemente un usuario, sino muchas otras tecnologías lo que hace que la práctica sea más práctica y la vida más interesante.
2
@Developer Art: Pero Jon Skeet es dios;)
Anto
1
@sbi: Estoy de acuerdo en que el lenguaje (y su complejidad) es claramente un factor importante. Sin embargo, el tamaño estándar no necesariamente significa mucho. Por ejemplo, la parte del estándar C ++ que cubre el lenguaje propiamente dicho tiene solo ~ 400 páginas, mientras que la especificación del lenguaje Java es ~ 500. Aunque realmente no creo que Java sea casi el C ++ "limpio" que algunos afirman, tampoco creo que sea un 25% más complejo que C ++.
Jerry Coffin
3
@Developer Art: un poco duro con Jon Skeet, tiene insignias para todo (¡incluido SQL!)
Shug
2
@dietbuddha: Ciertamente no pretendo disculpar la ignorancia, pero para ser justos, para la mayoría de las personas no se trata tanto de si deberían aprender algo, sino de qué deberían dedicar su tiempo a aprender. ¿Qué beneficiará más a un programador de C ++: aprender un nuevo algoritmo o aprender las reglas exactas utilizadas para elegir qué función sobrecargada llamar para un conjunto dado de parámetros? Tenga en cuenta que si normalmente tiene muchas razones para preocuparse por lo que se llama, ¡probablemente esté abusando de la sobrecarga de todos modos!
Jerry Coffin
12

Nunca

Nunca se debe leer una especificación de idioma.

Es una pérdida total de tiempo.

Los grandes programadores pueden escribir código aleatorio, hacer preguntas sobre Stack Overflow y usar el IDE para eventualmente escribir código que no se cuelga muy a menudo.

No pierdas el tiempo entendiendo el idioma. Simplemente encuentre un gran IDE con buen autocompletado. Haga muchas preguntas SO. Es todo lo que cualquiera necesita.

S.Lott
fuente
3
¿Nunca? ¿Ni siquiera si estás escribiendo un intérprete / compilador?
greyfade
1
¡Lo lograste! Asi es como funciona. ;)
x4u
44
@greyfade: nunca. Nunca confíes en los hechos. Quédate con suposiciones.
S.Lott
66
¿Qué es sutil en eso?
Aditya P
2
Sinceramente, no podía decir si esto era sarcasmo o no. : P
greyfade
5

Para Java, la especificación del lenguaje tiene la intención de dar una respuesta definitiva a cualquier pregunta sobre el significado de un constructo fuente dado. No se recomienda leerlo como alumno; en cambio, un buen maestro te muestra todas las trampas y lo que realmente significan.

Para un desarrollador experimentado, los Java Puzzlers son realmente buenos para entrenar su comprensión de los casos de esquina oscura.


fuente
2

La respuesta general es: sí, vale la pena.

Si desea escribir código portátil, es obligatorio.

Para algunos idiomas, es inevitable, por ejemplo, Ada o perl.

Además, si no solo escribe código sino que también lee el código de otros, eventualmente tendrá que consultar la especificación.

Mouviciel
fuente
2

Quizás solo soy yo, pero esta pregunta no tiene sentido. Comprender las herramientas que utiliza es el sello distintivo de un profesional. Cuanto más profunda sea la comprensión, mejor será su capacidad para usar la herramienta. Para mí es una elección entre ser un diletante o un profesional.

Cada vez que estoy aprendiendo un nuevo idioma, lo primero que busco es la especificación.

He leído especificaciones para ANSI C, C ++, Java, Scheme, Python y Javascript. He olvidado la mayoría de los detalles de C, C ++ y Java solo porque no uso esos lenguajes con frecuencia. Después de leer las especificaciones, era un mejor programador porque sabía cómo usar mejor el lenguaje.

dietbuddha
fuente
1

En general, puede ser útil comprender ciertos momentos difíciles que encuentras de vez en cuando.

Pero en serio, si dominar un idioma requiere que te familiarices con su especificación detallada, entonces quizás el idioma sea desafortunado. De manera similar al dicho común, si necesita una documentación para su aplicación, entonces está mal diseñada.


fuente
Esta es precisamente la razón por la que mantengo una copia de ECMA-262 a mano.
greyfade
1

Me resulta útil cuando te encuentras con un momento, pero me resulta difícil retenerlo como una lectura directa. Sin embargo, cuando lo usé después de que no entendí algo, siempre fomentó mucho mi conocimiento.

repetición
fuente
1

Si usted es un programador básico en ese idioma y necesita poder extraer todos los matices sutiles, sí. Hay claros retornos de su inversión de tiempo en ese caso .

De otra manera no. Si no va a utilizar el conocimiento, ciertamente no se quedará con usted. Las especificaciones de idioma son lo más aburrido que se pueda leer.

Satanicpuppy
fuente
1

Normalmente no pongo mucho stock en el Estándar. El simple hecho es que el Estándar no le indicará que no use excepciones como flujo de control. No le dirá que no use Singletons. No le dirá cómo diseñar una interfaz de clase mantenible. No le dirá por qué su aplicación se bloquea cuando no sabe por qué. Puede tener el programa mejor definido del mundo y seguirá siendo horrible.

En mi opinión, el hecho simple es que la gran mayoría del desafío de programación no está en hacer que el lenguaje haga lo que quieres, es saber qué es lo correcto. Mientras conozca las características básicas del lenguaje, lo que cuenta será la forma de usarlas.

DeadMG
fuente
1

Definitivamente vale la pena leerlo. Algunos lenguajes como C ++ y Java y Python son lo suficientemente complejos como para leer las especificaciones del idioma y aprenderás mucho sobre esos lenguajes y todos los trucos de sintaxis / semántica sofisticados que tienen.

Solía ​​leer la especificación del lenguaje Scheme R5RS en el viaje en autobús a la universidad porque era corto y compacto y aprendí toda la sintaxis y todas las funciones básicas disponibles.

Rudolf Olah
fuente
0

La parte de doc.python.org etiquetada como "referencia de lenguaje" es extremadamente útil. El capítulo "modelo de datos" particularmente así.

usuario16764
fuente
0

Creo que si la programación en este lenguaje es su trabajo y desea tomarse su trabajo en serio, debe leer la especificación del lenguaje, especialmente cuando es relativamente fácil y rápido de leer y comprender como la especificación del lenguaje Java, aunque ha recentlyperdido mucho Es simplicidad con los genéricos.

Pero también, si planea aprender y eventualmente dominar un nuevo idioma que aún no conoce, puede ser muy perspicaz leer las especificaciones de ese idioma antes de perder su tiempo con él. Estoy seguro de que si más desarrolladores de C ++ hubieran leído e intentado comprender el Manual de referencia anotado de C ++ antes de que comenzaran a usarlo, muchos se habrían asustado.

x4u
fuente