it-swarm-es.com

¿El peor estándar de codificación que hayas tenido que seguir?

¿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 aquí

76
finnw

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, simplemente menos precisa. Por ejemplo: Última modificación por, lista de fecha/razones de modificación.

97
JohnFx

Tuve una vez un profesor que exigió que tengamos al menos un comentario para cada línea de código.

//Set x to 3
var x = 3;

//if x is greater than 2
if(x>2){

    //Print x
    Print(x);
}

Fue bastante ridículo.

129
Fishtoaster

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 simples, p. 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 características peor jamás agregadas a Visual Studio; fomenta la estructuración de la superficie en lugar de la estructura real OO.

Hoy en día, mato #REGIONES a la vista.

103
Cumbayah

En un trabajo, nos vimos obligados a usar alguna forma extraña de notación húngara en la base de datos.

No recuerdo los detalles, pero de memoria, cada nombre de campo tenía que contener:

  • Sin vocales
  • Todas las letras mayúsculas
  • Una referencia a la tabla
  • Un indicador de tipo de datos
  • Una longitud de datos
  • Un indicador anulable

Por ejemplo, la columna que contiene el nombre de una persona podría llamarse: PRSNFRSTNMVC30X (Tabla de persona, columna Nombre, Varchar 30 caracteres, No nulo)

80
Damovisa

Insistiendo en que todas las llaves se sigan con un comentario sobre lo que termina la llave:

p.ej:

for (int i = 0; i < 10; i++)
{
    if (foo > bar)
    {
        printf("Foo greater than bar");
    } // End If (foo > bar)

    while (baz)
    {
       farb();
    } // End while (baz)
} // End For
48
Kris Erickson
#define AND  &&
#define OR   ||
#define EQ   ==

'Nuff dijo.

37
Niall C.
  • Los nombres de las variables locales están en minúsculas sin guiones bajos

Ejemplos reales: paymentmethodtotalshtml, contracttypechangecontexts, customsegmentspectexts, potentialmsceventref

The New York Times pesa :

“Los espacios de palabras no deben darse por sentados. El griego antiguo, el primer alfabeto que presenta vocales, podría descifrarse sin espacios de Word si lo sonara y lo hiciera sin ellos. [...] El latín también dejó de separar las palabras en el siglo II. La pérdida es desconcertante, porque el ojo tiene que trabajar mucho más para leer texto no separado. Pero como ha explicado el paleógrafo Paul Saenger, el mundo antiguo no deseaba "hacer que la lectura fuera más fácil y rápida".
37
John Siracusa

El líder de software de una empresa me pidió que hiciera "simple, renortecódigo redundante ". Estaba prohibido, por ejemplo, agregar un nuevo parámetro a una función existente. En su lugar, tenía que duplicar la función, dejando el original intacto para evitar regresiones. Sin pruebas formales, por supuesto (desperdicio de hora).

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 fue despedido (considere que es muy, muy difícil despedir a alguien en Italia).

36
Wizard79

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:

  • ¿Disminuyó enormemente su productividad? CHEQUE. Por favor, solo use un ORM .
  • ¿Se incluyeron originalmente por buenas razones, pero se mantuvieron mucho después de que la preocupación original se volviera irrelevante? CHEQUE. El gerente fue desarrollador de un servidor de bases de datos hace 1000 años y puso este estándar de codificación.
  • ¿Estuvieron en una lista tan larga que era imposible recordarlos a todos? CHEQUE. Esto incluía "la mayor cantidad de lógica debería almacenarse en la base de datos como sea posible".
  • ¿Crees que el autor solo estaba tratando de dejar su huella en lugar de alentar una buena práctica de codificación? CHEQUE. Sigue volviendo al administrador como un ex desarrollador de servidor de base de datos.
  • ¿No tenías idea de por qué estaban incluidos? CHEQUE.
36
Jaco Pretorius

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.

33
David B

Notación húngara

Muestra extraída de " explicación de Charles Simonyi de la convención de nomenclatura del identificador de notación húngara " en MSDN.

1 #include “sy.h” 
 2 extern int * rgwDic; 
 3 extern int bsyMac; 
 4 struct SY * PsySz (char sz []) 
 6 {
 7 char * pch; 
 8 int cch; 
 9 struct SY * psy, * PsyCreate (); 
 10 int * pbsy; 
 11 int cwSz; 
 12 sin signo wHash = 0; 
 13 pch = sz; 
 14 while (* pch! = 0 
 15 wHash = (wHash11 + * pch ++; 
 16 cch = pch-sz; 
 17 pbsy = & rgbsyHash [(wHash & 077777)% cwHash]; 
 18 para (; * pbsy! = 0; pbsy = & psy -> bsyNext) 
 19 {
 20 char * szSy; 
 21 szSy = (psy = (struct SY *) & rgwDic [* pbsy]) -> sz; 
 22 pch = sz; 
 23 while (* pch == * szSy ++) 
 24 {
 25 if (* pch ++ == 0) 
 26 return (psy); 
 27} 
 28} 
 29 cwSz = 0; 
 30 if (cch> = 2) 
 31 cwSz = ( cch-2/sizeof (int) +1; 
 32 * pbsy = (int *) (psy = PsyCreate (cwSY + cwSz)) -rgwDic; 
 33 Cero ((int *) psy, cwSY); 
 34 bltbyte (sz, psy-> sz, cch + 1); 
 35 return (psy) ; 
 36}
31
JD Frias

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.

28

Casi olvido este:

Cita de un gerente:

No arregle ni documente ningún error que encuentre en su propio código. El cliente nos pagará para identificarlos y corregirlos en los próximos años.

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.

26
David B

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:

/// <summary>
/// Validations the handler.
/// </summary>
/// <param name="propertyName">The property name.</param>
public void ValidationHandler(string propertyName) 
{
   // whatever
}

[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.

24
Adam Lear

No 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 era el número de revisión de Subversion 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.

23
Jim A

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?

20
Jeremy Wiebe

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 de código.

17
JaredPar

Forzar comentarios en línea para el control de versiones fue sobre el estándar de codificación más inútil que ignoré.

//Changed on 2/2/2004 By Ryan Roberts for work item #2323332
Dim Some Horrendous VB
//End Changed

Oracle DBA 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.

16
Ryan Roberts

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:

class MyClass
{
   public:
      void MyClass_Public_setValue(int value);
}
14
user1006

Hace años tuve un trabajo en el que 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.

9
Jeremy

Estar obligado a sangrar todo el código por cuatro espacios;)

9
RedFilter

Una explosión más de mi pasado.

Cita del dueño de la compañía:

No habrá código escrito usando lenguajes interpretativos porque perdí 25 millones en ese proyecto {improperio} escrito en Java.

El proyecto Java) fue un sistema de comercio de acciones diseñado para manejar unas pocas docenas de acciones, que ahora se estaba utilizando para procesar miles. En lugar de abordar las fallas de diseño o el hardware deficiente, toda la compañía se vio obligada a convirtió 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 que no se compilaba, y el propietario solo consideraba ensamblador, C y C++ compilado.

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 años reescribiendo código perfectamente bien 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 - - Los algoritmos no mejoran el rendimiento. La única forma de mejorar el rendimiento era reescribir la misma lógica en el ensamblador.

En ambos casos, me fui poco después de que cayeran los dictados.

8
David B

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, del cual fue el único desarrollador y, por supuesto, se le ocurrió el estándar.

  • Todo está en mayúscula. Me refiero a todo, incluidos los raros comentarios que hizo.
  • Sin sangrado.
  • El nombre variable fue algo similar a APRGNAME. A = alcance de la variable, p. Ej. P para público, PRG = primeros tres caracteres del archivo fuente que creó la variable, NOMBRE = nombre de la variable en los 6 caracteres restantes que dBase/Clipper permitió.
  • Las primeras 4 y últimas 4 líneas del código fuente tenían 80 * de largo. ¿Por qué? Entonces pudo escuchar la impresora de matriz de puntos comenzando y terminando la impresión de un archivo. La memoria es que todo el programa se imprimió a través del mainframe semanalmente, 20,000 páginas.
  • Estoy seguro de que hubo muchos más que me las arreglé para deshacerse de mi cerebro.

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 cuán malas eran estas prácticas, pero siempre obtuvieron las habituales "le estaban pagando a este contratista un dólar superior, él debe saber de qué está hablando".

8
Tim Murphy

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 tienes que irte a la mierda!

6
Adam Harte

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 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.

6
Mark Lutton

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.

private string DoSomething( bool verbose )
{
    if ( verbose ) { return someString; }
    else if ( !verbose ) { return otherString; }
    else { return string.Empty; }
}

¡Incluso ReSharper te dijo que esto está mal!

6
Jax

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.

6
CB Du Rietz

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:

  • No use incluye. Me gusta una página grande
  • Siempre separe las palabras en nombres de variables y columnas con guiones bajos (excepto isactive, firstname, etc.)
  • Nunca use abreviaturas: siempre escriba el nombre (con frecuencia escribía fname, etc.)
  • No use nombres confusos (como amount_charged y charge_amount, que midieron cosas diferentes pero relacionadas)
  • No use DIVs , y use mínimo CSS - use tablas anidadas en su lugar (encontré unas seis capas de profundidad, una vez) .
  • No guarde en caché ninguna consulta. Siempre.
  • ¿Vas a usar una variable en más de una página? Alcance de la aplicación.
  • Cada página es su propio bloque try/catch. No necesitamos/queremos un controlador de errores global.

Empecé a cambiarlos tan pronto como él renunció.

6
Ben Doom

Casi cualquier tipo de convención de nomenclatura variable que reitera el tipo de variable, mutabilidad, alcance/clase de almacenamiento y/o su referencia. Básicamente, cualquier construcción intrínseca al lenguaje. Esto ya no es necesario en el siglo XXI con los IDE modernos (y, en mi opinión, en un principio solo resolvió un diseño/prácticas de código deficientes). Esto incluye la notación húngara y sus variantes:

  • bigBlobStr: una cadena.
  • bigBlobStrCurLocPtr - Un puntero a la "ubicación actual" en dicha cadena.
  • someIntArray - Matriz de enteros

o cosas como:

  • e_globalHeading - Variable externa
  • sg_prefPoolSz - Variable global estática

y, por supuesto, uno de los más lejanos de OOP, m_ para todos los miembros. Si no puede estar seguro/realizar un seguimiento de qué variables son locales, miembros, globales, estáticas o finales/constantes, es posible que esté escribiendo poco claro , mal factorizado, código de espagueti.

Esto es completamente diferente de especificar una convención de prefijo/sufijo para cosas como min, max, avg, size, count, index, etc., lo cual está bien.

4
charstar

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 predeterminados de ghostdoc.

public class User 
{
    /// <summary>
    /// the _userID
    /// </summary>
    private int _userID;
}
4
Carl Bergquist

El peor estándar que he tenido que enfrentar:

StyleCop para C #

Tome cada estándar sin sentido y póngalo en una herramienta que se ejecute en tiempo de compilación en lugar de en el IDE en tiempo de diseño.

//this is not a legal comment.
//  nor is this

// debe ir seguido de un solo espacio, si está depurando, use //// para comentar el código. Las propiedades también deben tener comentarios de 'triple barra' y deben leer "Obtiene o establece xxxxx" completo con un punto al final y debidamente capitalizado.

Ugh Tal vez haya un punto con las API ampliamente publicadas, pero mi problema principal es que seguramente podrían haberlo creado como un complemento a la R #.

4
MIA

Trabajé por poco tiempo en Japón. Estaba haciendo una codificación matemática compleja. El estándar de codificación de la compañía era no tener absolutamente ningún comentario. Fue difícil ya que me hubiera gustado agregar algunos comentarios para explicar los cálculos complejos y no olvidarme después de unas semanas. Lástima que el siguiente tipo que viene después de mí entienda lo que estaba haciendo el código.

Fue la primera vez que vi que los comentarios de codificación estaban prohibidos.

4
softveda

En un trabajo anterior, el estándar C # debía tener al menos dos espacios entre el nombre del tipo y el nombre de la variable en las declaraciones, el nombre del método debe comenzar en la siguiente línea desde los modificadores de acceso y el tipo de retorno, debe haber un espacio antes de cualquier puntuación abierta (paréntesis o paréntesis), todas las declaraciones de variables al comienzo del método, las declaraciones separadas de la asignación y la sangría fueron 3 espacios. Ejemplo:

private static int
ThisIsTheMethod (int  code, string  message)
{
   int  i;
   int  j;
   int  k;

   for (i = 0; i < message.Length; i++)
   {
      if (message [i] == '!') return -1;
   }

   j = SomeMethod (code);
   k = OtherMethod (j);

   return k;
}

Aunque feo, era viable con la excepción de que Visual Studio realmente no quería las cosas de esa manera y fue más un paso adicional después de codificar "normalmente" para formatearlo de esta manera.

3
Jesse C. Slicer

en mi trabajo anterior, que dejé con mucho gusto hace 3 meses:

base de datos:

  • Los nombres de las tablas tenían que estar en mayúsculas.
  • Los nombres de las tablas tenían que tener el prefijo TBL_
  • Los campos tenían que tener el prefijo: DS_ (para varchar, que no tenía sentido) NU_ para los números CD_ para ("campos de bits") DT_ para las fechas
  • los campos de la base de datos también tenían que estar en mayúsculas [CD_ENABLED]
  • lo mismo con los nombres sp [SP_INFINITY_USER_GROUPS_QRY] y los nombres de bases de datos [INFINITY]
  • ¿mencioné que los nombres de sp eran realmente así? SP_ prefijo, luego el nombre de la base de datos SP_INFINITY_ luego el nombre de la tabla, SP_INFINITY_USER_GROUPS y luego lo que se esperaba que hiciera el sp (QRY, UPD, DEL, INS) Jesús, ni siquiera me hagas comenzar con consultas que no fueran solo consultas CRUD.
  • todos los campos de texto tenían que ser varchar (MAX), inequívocamente.
  • los números eran int o double, incluso cuando podría haber usado otro tipo.
  • Los campos "booleanos" (bit) eran int, no hay razón.
  • los procedimientos almacenados tenían que tener el prefijo sp_productname_

asp.net/c #/javascript

  • CADA función individual tenía que estar envuelta en try {} catch {}, para que las aplicaciones no "explotaran" (al menos esa era la razón oficial), incluso cuando esto producía cosas que no funcionaban y no tenían idea de por qué.
  • los parámetros deben tener el prefijo p, por ejemplo, pCount, pPage
  • las variables de alcance tenían que tener el prefijo w (como en "trabajando", ¿qué demonios significa eso?)
  • estática con g, etc.
  • todo post framework 1.1 estaba fuera de los límites, como si tuvieras algún uso real para linq y genéricos de todos modos (Sin embargo, me propuse obligarlos a que me dejaran usar jquery, al menos lo logré).
3
bevacqua

Inclusión obligatoria, expansión de la información $ Log $ cuando nuestra SCC era una versión anticuada de PVCS. Teníamos algunos archivos donde la información $ Log $ era mucho, mucho más larga que el código real en el archivo.

3
Ian C.

Todos los resultados en un script PHP script deben repetirse línea por línea.

<?php
echo "<div id=\"foo\">";
echo "<h1>" . $title . "</h1>";
echo paragraphs($body); // just an example
echo "</div>";
?>

(Descargo de responsabilidad: no tuve que seguirlo, pero un equipo con el que trabajé lo hizo).

3
sholsinger

El peor era un proyecto (C++) donde las clases tenían como prefijo las abreviaturas de los módulos.

Por ejemplo, si algo estaba en el módulo MessagePassing, y parte del mecanismo de Respuesta, podría llamarse MESPAS_RESSomeobject.

Trabajar en ese código me hizo querer arrancarme los ojos.


No es lo peor, pero mi trabajo actual requiere un c_ prefijos en clases y e_ prefijos para enumeraciones. Nada para estructuras. pero _t postfix en typedefs. También es bastante feo.

Ah, y los comentarios de encabezado de función en AMBOS .h y .cpp (declaración y definición) que, por supuesto, casi nunca coinciden.

3
µBio

Mi favorita es la regla "Sin números mágicos" aplicada sin pensar. Por ejemplo, una vez vi un comentario en una revisión de código que decía que la regla de "Sin números mágicos" había sido violada por esta línea de código:

if (fscanf(file, "%s %hd",name, nbrObject ) != 2 )

Supongo que el revisor quería una constante en lugar de 2, como #define TWO 2

3
Chalie Wax

Los nombres de nuestros métodos tenían que estar en el formato 'Obtener/Establecer/Agregar/Eliminar' + nombre del objeto de destino + nombres de todos los parámetros.

GetUserById(userId);
InsertUser(user);
DeleteUser(user);

Bastante justo, pero la regla es muy estricta. No se permitía abreviar los tipos de objetos complejos, y las operaciones siempre tenían que enumerar cada parámetro de solicitud, sin importar cuán ridículo:

GetCustomerOrderDeliveryDetailsByCustomerIdAndDeliveryDateAndOrderStatus(...

Después de agregar los nombres completos de las variables (que tampoco se permitió acortar), puede imaginar cuánto tiempo duraron algunas llamadas a métodos simples. Palabra muy larga.

3
Kirk Broadhurst

Donde estoy trabajando ahora, el proceso de denominación variable para todo lo relacionado con la base de datos es:

  • $ sql para declaraciones
  • $ resultado para resultados de consulta

Lo que tiene sentido, sin embargo, cuando mencioné que la convención era demasiado genérica y que esto terminaría con una superposición variable, la respuesta fue "use result_alt o sql_alt". Mis sentimientos al comentar, si usas nombres de variables adecuados que significan propósito, no necesitarías comentarios o la mayoría de ellos.

2
chrisw

El peor estándar de codificación que tuve que seguir fue "Todos los nombres de variables de objeto deben tener el prefijo 'obj'". Esto estaba en un gran Java proyecto, así que casi todo era un objeto. La peor parte fue que casi todos adoptaron una política de nombrar variables simplemente anteponiendo "obj" al nombre de la clase. Terminamos con cosas como Person objPerson1 en todo el código. Me opuse una vez, y uno de los otros desarrolladores interpuso que le gustaba la convención "porque entonces no tengo que pensar en mis nombres de variables". Ese lugar fue un verdadero espectáculo de terror ...

2
TMN

Tal vez el estándar de codificación de The Huawei Software Company. Quieren que declares públicos a todos los miembros :))

2
LostMohican

Escribir cualquier cosa en Fortran ( WATFOR , FORTRAN 77 ) donde hay un carácter sin espacios en blanco en la columna 1 fue un comentario, y el compilador no te advirtió que si ibas más allá de la columna 72, simplemente lo ignoraría en silencio.

Al menos solo pasé siete años haciendo esto.

2
Mark Thalman

Tener lo que equivalía a archivos de encabezado C, en un proyecto Java.

Las interfaces existen por algunas buenas razones, pero este estándar requería una interfaz (foo.Java) para cada clase individual (fooImpl.Java) si tiene sentido o no. Un montón de cosas para mantenerse sincronizado, interrupción completa del método de clic de Eclipse, trabajo ocupado sin sentido.

El sistema de compilación lo impuso, pero no puedo imaginar cuál era el propósito original. Afortunadamente, lo abandonamos por un nuevo código cuando cambiamos a un nuevo sistema de control de versiones y compilación, pero todavía hay mucho de eso.

Al mismo tiempo, también abandonamos el estúpido hábito de versión-control-información-en-comentarios-archivo que había sido obligatorio.

2
user763

Actualmente trabajo en una empresa donde las consultas SQL se realizan a través de algo llamado "Clase de solicitud". Que ridículo:

En "include/request.class.php"

class RequestClass
{
    // ... some code.

    public function getUser($where)
    {
        global $initrequest

        $sql = $initrequest['users']
        $sql.= $where;

        return execute($sql);
    }
}

En initrequest.php:

$initrequest['users'] = 'SELECT * FROM users WHERE ';

Y se llamó desde la aplicación de esta manera:

$request = new request();
$tmpquery = "username = $username AND password = $password";
$request->getUsers($tmpquery);

Y tienen un sistema de plantillas similar basado en "bloques", pero después de comprender lo que muestro aquí, seguí presionando para tirar a la basura todo nuestro software y reescribirlo en Symfony.

2
Arie Deckelmann

No se permite más de una línea de código en Main ()

Una profesora de mi universidad que tuve la suerte de no haber insistido en que no se permitiera a sus estudiantes menores de C # poner más de una línea de código en el punto de entrada de sus aplicaciones de consola.

Esto tiene mucho sentido cuando se desarrolla una aplicación profesional, pero cuando la única intención del programa es tomar pocas entradas básicas y producir una sola salida (es decir, MultiplyTwoNumbers.exe), tal requisito es más doloroso que bueno.

Además de "una línea de código en main", el profesor también insistió en que cada línea de código tiene un comentario descriptivo y cada miembro de la clase tiene un nombre descriptivo verbosely. Puntos perdidos si el profesor no considera que estos requisitos se han cumplido "adecuadamente".

Los estudiantes obligados a cumplir con estas reglas eran (casi) novatos en la programación y, por lo tanto, puedo ver el valor de hacer cumplir conductas como nombrar bien y separar las preocupaciones. A pesar de eso, como Tutor de .NET en mi universidad, constantemente ayudaba a sus estudiantes a cumplir con estos requisitos mundanos y desagradables mucho después de que obtuvieran su código trabajando.

En mi opinión, al educar a alguien que es nuevo en un lenguaje de programación, la primera preocupación debe ser cómo crear código, no cómo crear basado en estándares código.

1
Nathan Taylor

"No use el estilo de comentario C++ para el código C".

Si bien esto puede tener un valor pequeño si existe el riesgo de tener que portar su programa a un compilador obsoleto, es principalmente una molestia. Mi mayor objeción es que hace que sea muy difícil de usar /* para bloquear comentarios en una región grande durante el desarrollo o las pruebas unitarias. */

1
AShelly

Mi profesor de ADA en la universidad insistió en que cada método tenía un comentario que describía las condiciones previas, las condiciones posteriores y la gran O. El mayor problema con esto era que nunca se molestó en explicar qué significaba realmente la O grande y nunca comprobó si eran correctas, así que me encontré copiando y pegando este bloque de comentarios cientos de veces.

-- Method_Name
-- PRECONDITIONS: none
-- POSTCONDITIONS: none
-- O(n) = n
1
Christopher

(C++)

Todos los valores de retorno tenían que ser HRESULTS (los estándares, no los resultados definidos por el usuario)

Esto fue solo hace unos años. Las personas mayores todavía estaban tan enamoradas de COM y nunca leyeron ni aprendieron sobre otras mejores prácticas. Era un ambiente increíblemente cerrado.

El mismo lugar tampoco permitía usar STL.

Me fui poco después de descubrir ese dato.

1
Tim

En Visual Basic 6. , tuvimos que agregar bloques de manejo de errores a cada método. Sin excepciones. Entonces lo hicimos.

Luego tuvimos que explicar por qué partes de la aplicación eran lentas.

1
Chris Brandsma

El espacio limitado para nombres de variables/objetos es probablemente mi mayor irritación. He trabajado en un lenguaje propietario relativamente moderno que solo permite 10 caracteres. Este es un remanente de sus versiones originales.

El resultado neto es que terminas con convenciones de nombres divertidos que definen lo que cada personaje de tus 10 permitidos debe representar. Algo como:

  • 1-3: prefijo de aplicación
  • 4-6: prefijo del módulo
  • 7-9: sección definida por el usuario
  • 10: un número solo en caso de que dos ... o 9 se llamen igual.
1
Brad Gardner

Mi favorito tendría que ser las pautas de nombres de bases de datos que actualmente estamos tratando de cumplir. Todas las tablas utilizadas para las relaciones de muchos-muchos deben nombrarse utilizando los nombres de las tablas vinculadas y deben tener el sufijo "Enlace". Y, por supuesto, no hay pluralización de nombres de tablas.

  • OrderLines? No Debería llamarse OrderProductLink
  • ¿Amigos? No Debería ser PersonPersonLink
1
CodingInsomnia

Ser obligado a agregar una descripción de archivo en cada archivo (es un proyecto C # ).

// --------------------------------------------------------------------------------------------------------------------
// <copyright file="User.cs" company="Company">
//   Copyright (C) 2009 Company. All rights reserved.
// </copyright>
// <summary>
//   The user.
// </summary>
// --------------------------------------------------------------------------------------------------------------------
0
Carl Bergquist

En una compañía tuvimos que escribir documentación técnica que explicara cómo escribiremos una funcionalidad. Rápidamente se desactualizó ya que no piensas en todo cuando estás programando en UML.

0
IAdapter