un programador, muchos idiomas, el dilema del nombre

14

Cuando trabaja en varios lenguajes de programación, hay un problema que encuentra ...

Un nombre válido (identificador) en un idioma no es válido en otro. Por ejemplo ...

var new function this son palabras clave en JavaScript, pero puedes usarlas libremente en Python. De manera similar, list dict def se puede usar en JavaScript sin problemas.

Esto es muy común y, por lo general, los programadores se familiarizan rápidamente cuando programan en varios idiomas.

Sin embargo, cuando trabaja en colaboración, debe establecer algunas reglas / directrices para los miembros de su equipo para garantizar la coherencia y uniformidad en el código. Con los equipos, este problema se vuelve más importante que simplemente recordar lo que es válido y lo que no lo es mientras programa.

Entonces, mi pregunta es, qué estrategias adopta ...

  • ¿simplemente toma una unión de todas las palabras reservadas presentes en todos los idiomas que usa, distribuya una lista a todos y absténgase de usarlos?
  • acepte la diversidad y haga esfuerzos adicionales cuando el "cambio de contexto"
  • adopte un terreno intermedio en el que un idioma puede usar el del otro, pero no al revés

(Nota: solo estoy hablando de Python y JavaScript en esta pregunta ... pero responda la pregunta de manera más amplia)

- ACTUALIZACIÓN -

Gracias por todas las respuestas. Por lo tanto, el consenso general que veo que está surgiendo es permitir que los programadores usen cualquier nombre, independientemente de lo que hagan en otros idiomas, siempre que los nombres sean descriptivos, no duela.

    
pregunta treecoder 10.08.2011 - 19:56

9 respuestas

46

Habiendo programado en bastantes idiomas a lo largo de más de 30 años de experiencia, diría que tratar de encontrar estándares de nombres que funcionen en cualquier idioma es probablemente una idea del pastel.

Al principio de mi experiencia, traté de usar #define macros en C para crear cosas que harían que mi código C se pareciera al código de Pascal que estaba usando antes de eso. Estaba tan acostumbrado a programar en Pascal que pensé que si podía hacer que C funcionara como Pascal, eso me haría más productivo. Pronto descubrí que estaba equivocado.

Lo que me hizo más productivo fue aprender C y no tratar de aprovechar la sintaxis de Pascal en otro idioma simplemente porque me hizo sentir más cómodo.

Creo que estarás potencialmente limitando a tus programadores al evitar que hagan algo en un idioma, solo porque está mal hacerlo en otro idioma que estés usando.

Si limita sus convenciones de nomenclatura a cosas que tienen sentido para explicar el uso de la variable, entonces probablemente creará un buen código, en cualquier idioma.

    
respondido por el Zeke Hansell 10.08.2011 - 20:23
24

No deberías nombrar cosas "lista", "nuevo", "var", "esto" en primer lugar, ya que no son lo suficientemente descriptivos en ningún idioma.

    
respondido por el CaffGeek 10.08.2011 - 21:10
11

Cambiar de, digamos, javascript a python ya es un cambio de contexto. No creo que sea malo si los nombres de las variables cambian, especialmente si los cambios en el nombre son idiomáticos con el idioma. Incluso se podría argumentar que los cambios de contexto más difíciles pueden ayudar en este caso, ya que ayuda a reforzar "tío, ahora estás escribiendo javascript, no python".

    
respondido por el Wyatt Barnett 10.08.2011 - 20:11
7

Creo que si está utilizando una variable descriptiva, nombrar el problema que describe debería ser mínimo. Dicho esto, si es mínimo, entonces aceptar el cambio de contexto causado por la asignación de nombres de variables entre idiomas también se vuelve mínimo.

    
respondido por el Stephen 10.08.2011 - 20:22
5

La mayoría de las palabras reservadas (en cualquier idioma) son bastante generales. Prefiero los nombres de variables / funciones que son más descriptivos y eso significa que casi nunca encuentro este problema. Debo admitir que Charles Simonyi se había contagiado con su esquema de nombres original, esto fue en Xerox a fines de los 70, antes de que incluso se llamara Notación Húngara, y eso también significa que los nombres son algo más que nada humano. nunca usaría como palabras reservadas.

    
respondido por el Peter Rowell 10.08.2011 - 20:21
5

No debe perder su tiempo escribiendo directrices hasta que descubra que se trata de un real , no de un problema hipotético.

Una situación en la que puedo pensar que esto puede convertirse en un problema es cuando compartes estructuras de datos entre lenguajes de programación. Por ejemplo, si tiene un objeto de Javascript en el lado del cliente que se refleja en un objeto de Python en el lado del servidor, y naturalmente desea que tengan los mismos nombres para sus miembros. En ese caso, la regla es simple: no utilice nombres que sean palabras reservadas en ninguno de los idiomas. Eso es. Escribe eso en las pautas si quieres. Ahora continúe con las tareas más importantes.

Por cierto, ni list ni dict es una palabra reservada en Python. Se pueden usar como nombres de variables, aunque son bastante malos.

    
respondido por el Martin Vilcans 11.08.2011 - 01:28
3

En mi experiencia, la solución para esto es tener convenciones de nombres amplias que se apliquen a todos los idiomas. Ya sea JavaScript, C # o algún otro lenguaje original, la forma en que se nombran las variables y las clases puede convertirse en un estándar dentro de una base de código, que es la forma en que generalmente veo la resolución de este problema. Las convenciones pueden acordarse por consenso de todos, simplemente una mayoría que desea una guía, la gerencia dice: "Así es como lo hacemos", o algunas otras posibilidades que pueda imaginar.

Raramente veo el problema del identificador que describe porque la mayoría de las veces el nombre de mi clase o variable es lo suficientemente descriptivo para no entrar en conflicto tan fácilmente. Al mismo tiempo, si uno está trabajando con otros en lugar de tener claridad sobre cómo el equipo quiere manejar esto es el punto importante.

    
respondido por el JB King 10.08.2011 - 20:18
2

No puedo ver cómo esto podría ser un problema, a menos que planee mover el código de un idioma a otro. Si personalmente tiende a olvidar qué nombres de variables son válidos, entonces no use un nombre de variable a menos que esté personalmente seguro de que sea válido. Pero si otras personas usan nombres de variables no válidos, su código no se compilará o ejecutará. Entonces, si estás trabajando en el código de otra persona y llamaron a algo 'var', puedes estar bastante seguro de que es un nombre válido en cualquier idioma que estén usando.

Si puede planear mover el código de un idioma a otro, es posible que necesite una lista de nombres prohibidos. Por ejemplo, mi documento de prácticas de codificación en C prohíbe el uso de new o class como variable porque eso hace que el código sea más difícil de portar a C ++. En ese caso, es razonable establecer reglas que faciliten ese trabajo, si fuera necesario,

    
respondido por el David Schwartz 13.08.2011 - 15:09
-2

Simplemente apégate a las mayúsculas y minúsculas de CamelCase. Funciona en todas partes. Esto se llama buscar el denominador común más bajo entre sistemas incompatibles, ¡y se encontrará haciendo esto a menudo!

    
respondido por el dotancohen 10.08.2011 - 20:44

Lea otras preguntas en las etiquetas

___ qstnhdr __ ¿La mejor (peor) tarea lógicamente imposible que se le asigna? [cerrado] ______ qstntxt ___

¿Qué fue un proyecto o especificación que se colocó en su escritorio y que posiblemente no se pudo hacer? ¿Cómo explicaste el dilema al "solicitante"? Más importante aún, ¿entendieron después de que explicaste el problema fundamental?

    
______ answer8307 ___

Me dijeron que hiciera que la impresora imprimiera más rápido.

Serio, y me escribieron por fallar. El jefe no era muy experto en tecnología y no entendía por qué no podía acelerarlo.

    
______ answer8388 ___

Implemente todas las características que ya habíamos vendido. Simplemente mantuve la cabeza baja y seguí trabajando, y dejé que los superiores se dieran cuenta de lo que estaba pasando.

    
______ answer8365 ___

No se me asignó per se, sino en qué consistía mi opinión ...

"¿Podríamos crear [algo que imite la funcionalidad de Excel] como un producto en línea, en unos pocos meses?"

Funcionalidad de hoja de cálculo en línea. Lo que están trabajando las dos mayores compañías de software en la historia humana (Microsoft y Google). Y desea crear un motor básico más una funcionalidad que no existe actualmente en ninguno de los dos. En sólo unos pocos meses. Usando el talento que tenemos internamente.

A la derecha ...

    
______ answer8411 ___

Se me pidió que buscara una manera de determinar cuándo y si un hilo se detendría. Esto fue así para que pudiéramos encontrar y prevenir todos estos errores de múltiples subprocesos. Supongo que nunca habían oído hablar del problema de la detención. (por otra parte, tampoco creyeron en los bloqueos, las mutex o los métodos de sincronización).

    
______ answer8361 ___

El encargado de ventas me preguntó qué deberíamos hacer para detener los errores en el producto.

Mi respuesta fue: ¡Véndelo solo después de que lo terminemos! : O)

    
______ answer8412 ___

Se me pidió que implementara la búsqueda, en 2 días para nuestra aplicación empresarial ... no está mal. Yo puedo hacer eso. Me di cuenta específicamente:

Solo para que sepas, no estoy en Google, así que la clasificación elegante y las sugerencias automáticas y todo eso ... probablemente no sucederá, especialmente en 2 días.

3 días después: "Pero Google sí ..."

    
______ answer8292 ___

No es una asignación oficial (aún), pero el propietario de esta compañía sigue pidiendo poner absolutamente todo sobre nuestro negocio "En la nube". Por suerte para mí, no soy el único responsable de formular una respuesta a esto :)

    
______ answer9044 ___

Una vez se me pidió que corrigiera un informe porque los datos no coincidían con un informe diferente (con diferentes criterios de consulta) que se ejecutó dos meses antes. Le tomó un año pasarle a la mente del usuario que incluso si los criterios hubieran sido los mismos, ¡los datos cambian con el tiempo!

    
______ answer26696 ___

Mi amigo me pidió que le hiciera un sitio web.

Con C ++.

    
______ answer26722 ___

Una vez un hombre anciano, casi senil, me pidió que hiciera un programa para ganar una lotería.
Yo estaba como ...
"Oh ... (hahhahahahahahahahaha) lo siento, solo son alergias, pero sigue ..."

Él me mostró sus "teorías" que se le ocurrieron después de analizar 20 años de registros y que si yo hiciera un programa que siguiera sus reglas, me pagaría.
Hice el programa, se lo entregué, le mostré que funcionó de acuerdo con sus reglas, me pagaron, le deseé buena suerte y le dije que si alguna vez apostaba demasiado grande y perdía demasiado dinero, no es mi culpa de ninguna manera.

: X

    
______ answer8300 ___

Una vez a uno y otro par de programadores se nos preguntó por qué no podíamos encontrar un algoritmo para determinar dónde estaban los agujeros en geometrías 3D compuestas de triángulos ( archivos STL , para aquellos que los conocen, y no se ajustan exactamente a la especificación adecuada de no-hole-allowed (). Mi jefe no parecía entender lo difícil que podía ser, porque después de todo, solo podía mirar el modelo renderizado y señalar los agujeros en él.

    
______ answer26728 ___

Una vez me encargaron la creación de una traducción 1: 1 del código de Access VBA a PL / SQL. Las cosas fueron relativamente bien, hasta que descubrí que en el fondo de varios IF y LOOPs anidados de un procedimiento, se abría un diálogo de sí / no y se pedía otra decisión por parte del usuario. Lo mejor que pude ofrecer y, finalmente, implementar, fue agregar otro parámetro a ese procedimiento; si se encontrara con esa rama, revertiría, devolvería un estado especial que indica al programa GUI que debe preguntar al usuario y luego reiniciar el procedimiento con un parámetro adicional.

    
______ answer38792 ___

(no yo, sino un compañero de trabajo) Hace mucho tiempo, trabajé en la construcción de software de Windows que podía controlar y monitorear la maquinaria industrial. Una opción para conectarse a la maquinaria era marcar a través de un módem.

Un gran cliente llamó a un administrador de alto nivel con un problema: no podían conectarse a una instalación remota porque seguían recibiendo una señal de ocupado (estaban compartiendo la línea de hardware con una línea de voz o algo así)

Cuando mi compañero de trabajo descubrió que el problema no era un problema de software, pero que la línea telefónica estaba realmente ocupada, el administrador respondió: "Eso es ridículo. ¿No puedes codificar eso?"

    
______ answer8328 ___

Una vez me pidieron que corrigiera las expresiones regulares que se estaban utilizando para analizar las declaraciones de la función C # porque el equipo de control de calidad había encontrado una manera de romperlo. Desafortunadamente, esto no es una tarea posible, ya que las declaraciones de funciones no se pueden describir como un lenguaje regular en C # (atributos, tipos genéricos, argumentos de atributos, etc.).

Resolví el problema simplemente explicando que era una tarea imposible y detallando algunos ejemplos con tipos genéricos anidados. La administración no me creyó al principio (pasaron 2 semanas en el trabajo) pero pude explicarle el problema a un par de desarrolladores senior y ellos, a su vez, convencieron a la administración. Finalmente, decidieron tener una expresión regular de mejor esfuerzo y agregar un analizador real más tarde.

    
______ answer8395 ___

Genera automáticamente una lista de todas las combinaciones de búsqueda válidas que devuelven resultados de la base de datos. Si bien no es lógicamente imposible desde el punto de vista de la codificación, dado que el tamaño de la base de datos siempre estaba creciendo, era muy poco práctico y el servidor finalmente se ralentizaría al intentar generar combinaciones.

    
______ answer26724 ___

Hace 8-10 años, tuvimos que escribir "una aplicación web" que hizo lo que nuestro producto de escritorio hizo en aproximadamente 2 semanas. El sitio web resultó ser casi todas las secuencias de comandos Javascript ActiveX del lado del cliente para replicar el producto de escritorio. El único procesamiento del lado del servidor implicaba generar opciones para el consumo del cliente.

    
___ ¿Tiene su compañía una política escrita sobre la contribución a proyectos de código abierto? [cerrado]