A uno de mis colegas le gusta usar generadores de código automáticos, que crean grandes cantidades de código que está mal documentado y es muy difícil de mantener.
¿Vale la pena el costo de usar un generador de código en el mantenimiento, por el tiempo reducido de creación?
¿Vale la pena el costo de un buen generador de código automático?
Si.
¿El costo de un generador de código automático deficiente que crea más trabajo para todos los demás, pero vale la pena?
Absolutamente no. No hay excusa para un código pobre. Si alguien quiere ser inteligente y usar la generación automática de código, entonces debe tomarse el tiempo para asegurarse de que el código generado sea un buen código. De lo contrario, ¿qué sentido tiene? Solo está empujando el dinero por el camino y cuando se trata de la producción de código, el dinero debe detenerse en el desarrollador que lo escribió.
No estoy de acuerdo con tu segundo punto. El código generado solo necesita ser lo suficientemente bueno para que funcione y no cree rendimiento / seguridad u otros problemas. Como nunca debe mantener el código generado a mano, no importa si no cumple con sus estándares de codificación habituales.
Hila
44
Está bien que no estés de acuerdo. Sin embargo, si se va a tomar el tiempo para crear un generador de código, ¿por qué no tomarse el tiempo para hacer que el código se genere bonito? Una vez generado, no sé quién lo hizo, cómo se hizo, ni la intención, a menos que sea tan legible / mantenible como todas las otras partes. A veces, los generadores están ahí solo para crear un punto de partida en lugar del producto terminado completo.
wheaties
1
Además, si la generación del código es parte de su compilación (es decir, se vuelve a generar cada compilación), entonces no tiene tanto sentido producir código "hermoso". Pero si vas a generar el código una vez y listo, entonces es una historia diferente.
Dean Harding
55
Hila, nunca debes mantener el código generado a mano, pero cuando llegue el día en que necesites cambiar ese código debido a requisitos nuevos / cambiantes, necesitas que el código sea claro y comprensible para que puedas realizar fácilmente los cambios necesarios en el generador , y luego volver a generar.
Carson63000
66
El código generado no tiene que ser lo suficientemente bonito para el mantenimiento, pero debe ser lo suficientemente inteligible para la depuración y la validación.
Huperniketes
23
El código generado por un generador nunca debe mantenerse a mano. Si necesita ser cambiado, entonces el generador y / o sus configuraciones deben modificarse y ejecutarse nuevamente. Teniendo en cuenta eso, no importa si el código resultante es incomprensible e indocumentado siempre que el mecanismo de generación en sí sea claro como el cristal. (Asegúrese de documentar el hecho de que se genera el código, y dónde está el generador y cómo funciona).
Analogía: aunque el procesador de mi computadora siempre está ejecutando código de máquina, no necesito saber nada sobre él, siempre y cuando sepa cómo crear ese código de máquina usando un lenguaje de alto nivel y un compilador. He oído que GCC a veces produce un código de máquina inferior, pero a quién le importa, siempre y cuando funcione perfectamente. Las capas de abstracción de la base de datos producen SQL para operar con el motor DB, pero ¿a quién le importa cómo se ve ese SQL, siempre que la capa de abstracción sea clara y funcione?
Cuando se usan correctamente, los generadores de código definitivamente pueden ahorrar no solo la creación, sino también el costo de mantenimiento.
El problema es que solo una persona tiene la herramienta, nadie más la tiene y, por lo tanto, tiene que mantener el código manualmente.
Murmura el
Esto está pasando el dinero. Como desarrolladores de software, nuestro negocio es el código, sin importar cómo lo produzcamos.
Steven Evers
12
@David, si solo una persona tiene la herramienta, no deberías usarla para un proyecto que involucre a más de una persona.
Matt Olenik
2
@ Matt, exactamente. Los generadores son parte del proyecto (comparable a los scripts de compilación) y deben almacenarse en el control de versiones o en un repositorio central similar.
Joonas Pulakka
2
@SnOrfus: Creo que nuestro negocio es producir productos de trabajo que la gente esté dispuesta a usar y comprar. De ahí proviene nuestro salario. El código es solo un medio.
Joonas Pulakka
6
Un generador de código es un tipo de compilador. No te preocupes por lo bonita que es la salida del compilador, solo trabajas con el código fuente. Usarlo y luego modificar manualmente la salida a menudo es más difícil que escribirlo desde cero en una forma comprensible para los humanos, y significa que no puede volver a usar el generador de código sin mucho trabajo, ya que tendrá que aplicar el los mismos cambios al mismo código incomprensible con precisión.
Por lo tanto, pueden estar bien si son parte del proceso de compilación y se documentan como tales. La entrada al generador es entonces el código fuente, y lo que sea que produzca son resultados intermedios, con los que no debe meterse.
Sin embargo, si alguien está usando uno para producir código incomprensible que se supone que debe usarse como fuente, entonces esa persona está produciendo un código incorrecto. No importa si la persona está produciendo un código incorrecto de forma mecánica o manual, sigue siendo un código incorrecto y todavía tiene un problema de calidad.
Por lo tanto, debe tratar esto como cualquier otro desarrollador que corta esquinas y escribe código incorrecto. No sé cómo manejas eso en tu tienda.
A partir de los comentarios sobre otras respuestas, parece que está preguntando sobre los estándares del equipo en lugar de los generadores de código.
Se debe incluir una herramienta de generación de código en el proyecto y debe (cuando corresponda) ser parte del proceso de construcción. Un ejemplo sería en nuestro equipo que utilizamos Subsonic 2.2, que hemos generado clases a partir de los objetos de la base de datos en la compilación.
El exe que hace esto se registra en SVN como parte del proyecto para que un nuevo miembro del equipo pueda obtener el nuevo proyecto de svn e inmediatamente construirlo sin tener que averiguar de dónde provienen todas estas clases de bases de datos (en este ejemplo, ni siquiera incluyas el código generado en svn).
El código generado por un generador nunca debe mantenerse a mano. Si necesita ser cambiado, entonces el generador y / o sus configuraciones deben modificarse y ejecutarse nuevamente. Teniendo en cuenta eso, no importa si el código resultante es incomprensible e indocumentado siempre que el mecanismo de generación en sí sea claro como el cristal. (Asegúrese de documentar el hecho de que se genera el código, y dónde está el generador y cómo funciona).
Analogía: aunque el procesador de mi computadora siempre está ejecutando código de máquina, no necesito saber nada sobre él, siempre y cuando sepa cómo crear ese código de máquina usando un lenguaje de alto nivel y un compilador. He oído que GCC a veces produce un código de máquina inferior, pero a quién le importa, siempre y cuando funcione perfectamente. Las capas de abstracción de la base de datos producen SQL para operar con el motor DB, pero ¿a quién le importa cómo se ve ese SQL, siempre que la capa de abstracción sea clara y funcione?
Cuando se usan correctamente, los generadores de código definitivamente pueden ahorrar no solo la creación, sino también el costo de mantenimiento.
fuente
Un generador de código es un tipo de compilador. No te preocupes por lo bonita que es la salida del compilador, solo trabajas con el código fuente. Usarlo y luego modificar manualmente la salida a menudo es más difícil que escribirlo desde cero en una forma comprensible para los humanos, y significa que no puede volver a usar el generador de código sin mucho trabajo, ya que tendrá que aplicar el los mismos cambios al mismo código incomprensible con precisión.
Por lo tanto, pueden estar bien si son parte del proceso de compilación y se documentan como tales. La entrada al generador es entonces el código fuente, y lo que sea que produzca son resultados intermedios, con los que no debe meterse.
Sin embargo, si alguien está usando uno para producir código incomprensible que se supone que debe usarse como fuente, entonces esa persona está produciendo un código incorrecto. No importa si la persona está produciendo un código incorrecto de forma mecánica o manual, sigue siendo un código incorrecto y todavía tiene un problema de calidad.
Por lo tanto, debe tratar esto como cualquier otro desarrollador que corta esquinas y escribe código incorrecto. No sé cómo manejas eso en tu tienda.
fuente
A partir de los comentarios sobre otras respuestas, parece que está preguntando sobre los estándares del equipo en lugar de los generadores de código.
Se debe incluir una herramienta de generación de código en el proyecto y debe (cuando corresponda) ser parte del proceso de construcción. Un ejemplo sería en nuestro equipo que utilizamos Subsonic 2.2, que hemos generado clases a partir de los objetos de la base de datos en la compilación.
El exe que hace esto se registra en SVN como parte del proyecto para que un nuevo miembro del equipo pueda obtener el nuevo proyecto de svn e inmediatamente construirlo sin tener que averiguar de dónde provienen todas estas clases de bases de datos (en este ejemplo, ni siquiera incluyas el código generado en svn).
fuente