¿Alguna vez ha tenido que trabajar para codificar estándares que:
- ¿Disminuyó enormemente su productividad?
- ¿Se incluyeron originalmente por buenas razones pero se mantuvieron mucho después de que la preocupación original se volviera irrelevante?
- ¿Estuvieron en una lista tan larga que era imposible recordarlos a todos?
- ¿Crees que el autor solo estaba tratando de dejar su huella en lugar de alentar una buena práctica de codificación?
- ¿No tenías idea de por qué estaban incluidos?
Si es así, ¿cuál es su regla menos favorita y por qué?
Algunos ejemplos aqui
Respuestas:
Esto puede alterar algunas plumas, pero los estándares que exigen comentarios de bloque con plantilla en la parte superior de cada método siempre me molestan.
1) Siempre están desactualizados ya que están demasiado lejos del código que hace el trabajo real para darse cuenta cuando está actualizando cosas. Los malos comentarios son peores que ningún comentario.
2) A menudo solo repiten información que ya está contenida en la herramienta de control de origen, solo que menos precisa. Por ejemplo: Última modificación por, lista de fecha / razones de modificación.
fuente
Tuve una vez un profesor que exigió que tengamos al menos un comentario para cada línea de código.
Fue bastante ridículo.
fuente
// comment
en la línea antes de eso?El estándar de codificación de nuestra compañía (C #) exigió el uso extensivo de #REGIONs (para aquellos que no lo saben, marca bloques de código fuente que se colapsarán en una sola línea en Visual Studio). Como consecuencia, siempre abría lo que parecía ser una clase bien estructurada, solo para encontrar montones y montones de basura barridos bajo alfombras profundamente anidadas de construcciones #REGION. Incluso tendría regiones alrededor de líneas individuales, por ejemplo, tener que desplegar una región LOG para encontrar una sola declaración del Logger. Por supuesto, muchos métodos agregados después de que se hizo alguna región, también se colocaron en el ámbito de la región "incorrecta". El horror. El horror.
Las regiones son una de las peores características que se han agregado a Visual Studio; fomenta la estructuración de la superficie en lugar de la estructura real de OO.
Hoy en día, mato #REGIONES a la vista.
fuente
En un trabajo nos vimos obligados a usar alguna forma extraña de notación húngara en la base de datos.
No puedo recordar los detalles, pero de memoria, cada nombre de campo tenía que contener:
Por ejemplo, la columna que contiene el nombre de una persona podría llamarse:
PRSNFRSTNMVC30X
(tabla de persona, columna de nombre, Varchar 30 caracteres, no nulo)fuente
Insistiendo en que todas las llaves se sigan con un comentario sobre lo que termina la llave:
p.ej:
fuente
'Nuff dijo.
fuente
#define BEGIN {
y#DEFINE END }
?Ejemplos reales:
paymentmethodtotalshtml
,contracttypechangecontexts
,customsegmentspectexts
,potentialmsceventref
El New York Times pesa :
fuente
Se me pidió por el líder de software de una empresa para hacer " simple, re n código redundante ". Estaba prohibido, por ejemplo, agregar un nuevo parámetro a una función existente. En su lugar, tuvo que duplicar la función, dejando el original intacto para evitar regresiones. Sin pruebas formales, por supuesto (pérdida de tiempo).
También se nos prohibió el uso de software de fusión; cada archivo solo puede ser modificado por un programador a la vez. El software de control de revisiones era ciencia ficción, por supuesto.
El día más feliz de mi vida fue cuando lo despidieron (considere que es muy, muy difícil despedir a alguien en Italia).
fuente
Toda interacción con la base de datos debe hacerse a través de procedimientos almacenados . Podría tener sentido si vivimos en 1997 y no en 2010.
Me acabo de dar cuenta de que esto realmente cubre todos los criterios de la pregunta original:
fuente
No se le permite usar el STL u otras bibliotecas estándar de C ++ porque el CTO creía que 'nosotros' podríamos hacerlo mejor y más rápido. Incluso construcciones básicas como listas y la clase de cadena.
fuente
Notación húngara
Muestra extraída de la " explicación de Charles Simonyi de la convención de nomenclatura de identificadores de notación húngara " en MSDN.
fuente
Una vez trabajé en un proyecto en el que el líder del proyecto exigía que cada variable, CADA variable, tuviera como prefijo "v". Entonces, vCount, vFirstName, vIsWarranty, etc.
¿Por qué? "Porque estamos trabajando en VBScript y todo es una variante de todos modos".
WTF
fuente
f
antes de funciones, entonces su código es verdaderamentefUcked (vUp)
.Casi olvido este:
Cita de un gerente:
Esto no era para software de consumo, sino personalizado para una sola organización grande. No hace falta decir que el cliente pagó años después. Puede parecer trivial, pero tratar de ignorar los errores es más difícil que encontrarlos.
fuente
Comentarios XML forzados sobre todos los métodos no privados, constantes, enumeraciones y propiedades.
Condujo a un código bastante desordenado, especialmente porque el resultado final fue que la gente simplemente presionó /// para crear un código de comentario vacío para todo o instaló GhostDoc y agregó comentarios generados automáticamente:
[Editar] La razón por la que menciono esto como un estándar ridículo no es porque piense que los comentarios del método son estúpidos, sino porque la calidad de estos comentarios no se hizo cumplir de ninguna manera y resultó en la creación de montones y montones de desorden en los archivos de código . Hay mejores formas de crear documentos de código significativos que el requisito de compilación "debe tener un comentario" ciego.
fuente
Validations the handler
' - uh-ohNo es realmente un estándar de codificación, pero teníamos un archivo en el control de origen llamado 'changelog.txt'
Cada vez que realizaba un registro, tenía que agregar manualmente una entrada a este archivo. Esta entrada fue el número de revisión de subversión y su comentario de registro.
Cuando comenzó el nuevo CTO y alguien le dijo esto, tomó una decisión ejecutiva de inmediato y dijo: "Ya no vamos a hacer esto" y eliminó el archivo. Esto había estado sucediendo por años.
fuente
svn log
?Algunos de los lugares con los que he trabajado insistieron en comentar el código no utilizado o en desuso en lugar de eliminarlo. En lugar de confiar en el VCS para el historial, etc., se mantuvo dolorosamente en los archivos a través de un código comentado.
El gran problema que encontré con esto es que a menudo no tenías idea de por qué se comentaba el código. ¿Fue porque algún desarrollador estaba haciendo cambios activamente y quería mantenerlo como referencia o ya no era necesario?
fuente
El peor estándar de codificación en el que he participado son las bases de código que no tenían ninguna. Prefiero seguir un estándar de codificación con el que estoy totalmente en desacuerdo que trabajar en bases de código donde no hay ninguno. Hace que sea mucho más difícil aprender nuevas partes de la base del código.
fuente
Forzar comentarios en línea para el control de versiones fue sobre el estándar de codificación más inútil que ignoré.
El DBA de Oracle que insistió en el uso correcto del espacio en blanco mientras 'mantenía' una base de datos con una tabla altamente contenida que tenía más de 200 campos y 40 disparadores se acerca.
fuente
Hice revisiones de código en un proyecto liderado por un primer contador de tiempo de C ++ que decidió que todas las funciones de los miembros de la clase deberían tener como prefijo el nombre de la clase y la visibilidad:
fuente
Estar obligado a sangrar todo el código por cuatro espacios;)
fuente
Tuve un trabajo hace años donde todo nuestro código tenía que alinearse a la izquierda, sin sangría. Al chico que se le ocurrió esa política no le gustaba tener que desplazarse horizontalmente cuando miraba largas líneas de código, equiparándolo a jugar ping-pong con los ojos.
fuente
Esto es más un ejemplo de cómo no tener los estándares de codificación puede dañar.
Un contratista que trabajaba en un gran banco insistió en que seguir los estándares era el mejor de todos. La aplicación fue escrita en dBase / Clipper, de la cual fue el único desarrollador y, por supuesto, se le ocurrió el estándar.
Era un programador autodidacta muy nuevo en esa etapa, pero sabía lo suficiente como para no escuchar al científico loco y salir de allí antes de pedir que me hiciera cargo del proyecto.
Y sí, le dijimos a la gerencia lo malas que eran estas prácticas, pero siempre obtuvimos las habituales "le pagaban al contratista el dólar que debía saber de lo que estaba hablando".
fuente
\07
al inicio de cada archivo ahora.i
utilizado para indexar una matriz en un procedimiento podría interferir con uni
procedimiento de llamada. Debe usarPRIVATE ALL LIKE m*
yPRIVATE i
evitar este "sombreado"Una explosión más de mi pasado.
Cita del dueño de la compañía:
El proyecto Java era un sistema de comercio de acciones diseñado para manejar unas pocas docenas de acciones, que ahora se usaba para procesar miles. En lugar de abordar las fallas de diseño o el hardware deficiente, toda la compañía se vio obligada a convertir todas las aplicaciones que no son C / C ++ a C / C ++, y todo el nuevo desarrollo tuvo que ser en C / C ++. Los lenguajes interpretativos significaban cualquier cosa no compilada, y el propietario solo consideraba ensamblador, C y C ++ compilados.
Para una compañía de 800 personas, en la que la mayor parte del código estaba en Java y Perl, esto significaba que toda la compañía pasó la mayor parte de su tiempo durante los próximos dos años reescribiendo código perfectamente perfecto en C / C ++.
Curiosamente, unos veinte años antes de este fiasco, estaba en otra compañía en la que el líder tecnológico decidió que nuestra lógica de clasificación (era un Bubble Sort) necesitaba recodificarse en el ensamblador en lugar de ser reemplazada por Quick Sort porque - Algorithms do No mejora el rendimiento. La única forma de mejorar el rendimiento era reescribir la misma lógica en ensamblador.
En ambos casos, me fui poco después de que cayeran los dictados.
fuente
Como muchos programadores (pero no lo suficiente), odio la decoración de código. Me enfurece cuando tengo que usar un prefijo de signo de dólar ($) para nombres de variables o guiones bajos para variables privadas, incluso sin getters / setters. Si necesitas decorar tu código para entenderlo, ¡entonces debes irte!
fuente
He estado trabajando con un sistema web durante un tiempo en el que todos los parámetros pasados tenían que llamarse P1, P2, P3, etc. Sin ninguna posibilidad de saber para qué servían sin una extensa documentación.
Además, aunque no es estrictamente un estándar de codificación, en el mismo sistema, cada archivo se llamaría xyz0001.ext, xyz0002.ext, xyz0003.ext, etc., donde xyz era el código de la aplicación en sí mismo.
fuente
Esto fue hace mucho tiempo - 1976 para ser exactos. Mi jefe nunca había oído hablar de Edsger Dijkstra ni había leído un número de CACM, pero había escuchado un rumor de que "GOTO es malo", por lo que no se nos permitió usar GOTO en nuestros programas COBOL. Esto fue antes de que COBOL agregara el "final if", por lo que en ese momento solo tenía dos y media de las tres estructuras de control clásicas (secuencia, if / then / else, performance (es decir, do while)). De mala gana permitió GOTO en nuestros programas básicos y las instrucciones de rama en nuestros programas de lenguaje ensamblador.
Lamento que esto sea una especie de historia de "tenías que estar allí". Hasta donde yo sé, cada idioma inventado desde 1976 tiene estructuras de control adecuadas para que nunca necesite usar GOTO. Pero el punto es que el jefe nunca supo POR QUÉ GOTO se consideraba perjudicial, o qué idioma era el trastorno infantil y cuál era la enfermedad mortal.
fuente
Trabajé en un proyecto donde el arquitecto jefe exigió escribir (también) código explícito. Uno de los peores ejemplos que encontré en el código (y que felizmente aprobó) fue el siguiente.
¡Incluso ReSharper te dijo que esto está mal!
fuente
else
tomaría la rama final ( ).return verbose ? someString : someOtherString;
?En mi último trabajo, "estándares" sería un término muy fuerte para lo que me dio el tipo que me contrató. Programando sitios web en ColdFusion y SQL, me dieron requisitos de codificación como:
Empecé a cambiarlos tan pronto como él renunció.
fuente
En mi vida como codificador de C ++, se aplicaron dos "reglas" realmente desagradables:
fuente
O(n^2)
los ataques de DOS (alimentando la entrada del peor de los casos). También por qué no fue posible cambiar, ya que era una excusa válida para no usar STL.Me veo obligado a tener documentación XML para todas las clases y miembros de la clase. Incluido privado. Tengo ganas de usar los comentarios de ghostdoc predeterminados.
fuente