¿Qué tan importante es que conozca el estándar C ++?

11

Intenté buscar, pero no vi una pregunta similar (ya sea eso o mi terminología de búsqueda era incorrecta; si es así, no dude en cerrar).

Soy un usuario ávido de SO, y noto que hay muchas referencias al estándar C ++ en las discusiones y respuestas, y debo admitir que nunca he leído este documento en particular, el lenguaje me duele los ojos ... Entonces , la pregunta es, ¿puede un desarrollador de C ++ realmente codificar para ganarse la vida sin haber leído este documento? ¿Es realmente importante para nosotros los simples mortales que no estamos en el negocio de escribir compiladores?

Nim
fuente
La persistencia de las preguntas que se responden con breves citas del estándar debería ser evidencia suficiente de que leerlo no es un requisito previo para usar el lenguaje ... (siempre que tenga un lugar al que recurrir cuando se atasca)
Shog9

Respuestas:

16

No, puedes llevarte bien sin eso

Sin embargo, tendrá una comprensión mucho más profunda si se toma el tiempo de aprenderlo. Tal vez siga las referencias de esas preguntas que le preocupan y aprenda una pequeña parte a la vez.

Gary Rowe
fuente
8

Si desea discutir sobre la semántica del lenguaje y el estándar, entonces el estándar es muy importante. (No me refiero a esto completamente despectivamente). Si solo quieres hacer el trabajo en el idioma (vs. en el idioma), entonces es mucho menos.

El estándar puede hacer una referencia decente a la biblioteca estándar (no tanto para el lenguaje en sí) una vez que se sienta un poco cómodo con él, pero dudo en recomendar que se use de esa manera. La mayoría de las personas parecen hacerlo mejor con otros materiales. Dicho esto, recurro al estándar la mayoría de las veces cuando necesito buscar algo sobre el stdlib.

Sin embargo, leer los borradores y documentos del comité es una forma de mantenerse al tanto de C ++ 0x; de hecho, actualmente es una de las pocas formas.

Para SO y otros foros, dudo en citar el estándar, excepto cuando parece que el póster se beneficiaría clara y definitivamente, tal vez lo pidieron o creo que lo esperan implícitamente. En la mayoría de los casos, y especialmente con los programadores nuevos en C ++, citarlo generalmente no parece ayudar mucho.

Fred Nurk
fuente
Si alguien quiere saber qué debe hacer el idioma, el Estándar es invaluable. Si quieren saber por qué el compilador hace algo, a menudo es muy útil. Para otras preguntas, no tanto.
David Thornley
1
@DavidThornley: Es difícil juzgar después de tanto tiempo acostumbrarme a leer el estándar yo mismo, pero definitivamente parece que la mayoría de la gente encuentra textos como TC ++ PL más accesibles incluso para averiguar qué debe hacer el lenguaje.
Fred Nurk
1
@ Fred Nurk: casi cualquier cosa es más accesible que el estándar. Me refería a responder preguntas sobre SO y similares, y no estaba claro al respecto. Agrega un poco de autoridad cuando la gente cita cplusplus.com y otras fuentes.
David Thornley
@DavidThornley: Muy rara vez citaré sitios como ese (cplusplus.com en particular tiene demasiados problemas para mi gusto), pero para la mayoría de los carteles en SO, también parecen más útiles, incluso con errores, que el estándar, y son fácilmente disponible en línea es, desafortunadamente, una gran parte de eso.
Fred Nurk
@Fred, es interesante saber que siempre pensé que cplusplus era una buena referencia (la desventaja es su fuente de publicidad, ¡lo cual es muy inapropiado!), Ahora tendré que recordar hacer referencias cruzadas con la referencia sgi.
Nim
6

Debería tenerlo disponible como referencia, pero no creo que nadie más que sus autores hayan leído todo ... si es que lo hicieron (trabajan en grupos centrados en áreas, por lo que dudo).

La razón por la que debería tenerlo disponible es que a veces una pregunta sobre la corrección del código solo se puede responder haciendo referencia al estándar.

Edward extraño
fuente
3
En la mayoría de las situaciones no lo necesitas. Lo que necesita está cubierto en otros libros. Es solo cuando llega a esos casos de esquina o nunca usa esquinas del idioma que necesita verificar la definición en el estándar (y generalmente hay una alternativa para usar los casos de esquina en el idioma). Deje el estándar para que los desarrolladores del compilador y el desarrollador general puedan llevarse bien con otros textos no formales.
Martin York
2

Probablemente sea más importante que sepa dónde está el estándar y saber cuándo buscar las cosas.

Por lo menos, debe verificar periódicamente para asegurarse de que se está adhiriendo a la última versión y no ha dejado que su código se desvíe.

ChrisF
fuente
2

En un equipo grande, generalmente debe tener una persona (pero generalmente no más) que conozca el estándar al menos razonablemente bien, para que puedan hacer cosas como resolver cualquier argumento / pregunta sobre cosas como si un código particular cumple con los requisitos del estándar.

Sin embargo, de manera realista, esas respuestas deben ser moderadas por el juicio y la experiencia. El estándar (actual) dice que exportes una palabra clave y dice lo que hace. En realidad, simplemente no funciona de esa manera con la mayoría de los compiladores. Del mismo modo, en muchos casos, si tiene tres personas en desacuerdo sobre algún código en particular y lo que el estándar podría decir al respecto, puede ser una señal de que el código puede necesitar reescribirse para ser más sencillo.

Al mismo tiempo, la mayoría de los equipos trabajarán más en una plataforma, y ​​tener un estándar (y alguien que al menos esté razonablemente familiarizado con él) para verificar que lo que estás haciendo no está demasiado ligado a esa plataforma puede ciertamente sé útil.

Jerry Coffin
fuente
El "no más" es probablemente importante, a menos que desee discusiones entre los expertos sobre cómo interpretar el estándar <g>
Steve314
2

He estado ganando mi pan como desarrollador de C ++ durante aproximadamente 4 años en total, sin haber leído el estándar. De hecho, durante los primeros dos años más o menos, ni siquiera he leído mucho más que C ++ Primer por Stan Lippman y artículos de MSDN. Por lo tanto, es posible; de ​​hecho, me temo que la mayoría de las personas que producen código C ++ ni siquiera han leído trabajos tan fundamentales como Effective C ++ et al. que descubrí solo más tarde.

En mi humilde opinión, para ser un buen desarrollador de C ++, uno debe comprender la lógica interna del idioma (s) (como señala Scott Meyers, C ++ es sobre 4 idiomas diferentes) y los modismos y dificultades comunes, y estar preparado para aprender siempre más. Leer hilos en SO puede enseñar mucho sobre casos de esquina en los que, a su vez, puede valer la pena leer sobre partes relevantes de la norma, si alguien realmente quiere profundizar más. Pero leerlo todo probablemente rara vez sea necesario para la mayoría de nosotros.

Péter Török
fuente
Buen punto de que hay libros esenciales que son mucho más esenciales (para la mayoría de los programadores que no escriben compiladores) que el estándar. +1 - pero hay una buena cantidad de libros "esenciales".
Steve314
@ Steve314, de hecho, comenzar a enumerarlos no ayudaría a responder esta pregunta específica. Pero agregué un enlace al hilo relevante en SO ahora.
Péter Török
@ Péter: un toque agradable, pero mi punto no declarado fue que ninguno de los libros "esenciales" es realmente esencial. La mayoría de los programadores de C ++ deberían haber leído varios títulos de esa lista, pero ¿ todos ellos? Improbable. Incluso si lo hiciera, dudo que realmente pueda retener todo ese conocimiento. "Effective C ++" está en mi lista de aún no leído, por lo que obviamente lo considero un libro esencial menos que esencial.
Steve314
@ Steve314, no quise decir que uno debe leer todo eso, tampoco lo he hecho, y algunos de ellos lo leí pero no me impresionó :-) También hay cierta superposición entre algunos de estos, por lo que es un pregunta sobre el gusto personal y la posibilidad de cuál se encuentra primero un desarrollador y / o cuál (s) etiqueta como "esencial". Creo que lo importante es que hay algunos modismos comunes que es bueno seguir, y errores comunes que se deben evitar, y uno debe saber sobre la mayoría de estos, y la forma menos dolorosa de aprenderlos es de (algunos) de estos libros .
Péter Török
Por supuesto, no sabré cuán esencial es hasta que lo haya leído.
Steve314
1

"Conocer el estándar" es una cuestión de grado, y no necesariamente significa memorizar el documento original.

Un documento de estándares está diseñado para tener autoridad, no necesariamente accesible. Hay muchas fuentes eliminadas en un solo paso que son mucho más accesibles. Es cierto, hay un poco de susurros chinos en eso, pero rara vez es un gran problema, ciertamente en el nivel eliminado en un solo paso.

Revelación completa: estoy obligado a decir esto: nunca he leído el estándar. Aunque probablemente haré el esfuerzo de obtener el documento completo de C ++ 0x cuando esté finalizado.

EDITAR, por supuesto, si Stroustrup lanza una nueva edición de "El lenguaje de programación C ++", puedo conformarme con eso nuevamente.

Steve314
fuente
1

Cuando programaba en C ++, a menudo me refería al estándar del lenguaje para obtener información sobre las funciones estándar de la biblioteca. La biblioteca estándar de C ++ es bastante grande, y encontré que el estándar de lenguaje es la fuente más conveniente.

Kevin Cline
fuente
1
¿Wow en serio? Siempre encuentro recursos en línea como cplusplus indispensables en este sentido ...
Nim
1

Podría haber jurado que he respondido esta pregunta antes, pero no puedo encontrarla. Básicamente, C ++ es diferente a Java en que está destinado a tener agujeros en la especificación que otras especificaciones de plataforma pueden llenar (por ejemplo, POSIX, o la especificación ABI de su arquitectura, o su compilador). Por lo tanto, al responder preguntas en sitios como StackOverflow, es común que aparezca la especificación para indicar que solo porque algo funciona en un compilador no implica que funcione en todas partes. En otras palabras, muchas de las razones para hacer referencia a especificaciones particulares cuando se trabaja con C ++ es para aclarar exactamente qué tan portátil es un uso particular del lenguaje.

Ken Bloom
fuente