java
El problema de los estándares de códificación
No me malentiendan. ¡No estoy en contra de los estándares de codificación!. Pero hay que reconocer que son complicados de aplicar.
Donde estoy trabajando, estamos trabajando con un código compartido. Con distintas prácticas. Por un lado un veterano programador, adorador de Java y por otro lado uno no tan veterano, pero experto programador en C/C++. Ambos son Ingenieros muy secos, pero poseen formas de trabajo muy distintas. Y yo estoy al medio.
El primero, es tan adorador de Java que intenta aplicar la misma nomenclatura a C/C++. Esta bien, es una buena práctica, pero C/C++ ofrece ciertas facilidades que a veces imitar a Java no tiene sentido. Les doy un ejemplo, el escribir un archivo utilizando C estándar es bien simple. Solo hay que crear el puntero al archivo y luego para usar el archivo tenemos las siguientes funciones básicas:
- Abrir el archivo: fopen()
- Cerrar el archivo: fclose()
- Leer el archivo: fread(), fscanf(),fget(),fgets(), etc.
- Escribir el archivo: fwrite(), fprintf(), fput(), fputs(), etc.
Si quisieramos imitar el modelo Java en C/C++. Olvidando el tema de hacerlo solo con C, que se puede, pero su complejidad no lo justifica. En el caso de C++ tendríamos que implementar las clases similares a Java. Es decir: BufferedReader, InputStreamReader, PrintWriter, BufferedWriter, FileWriter, etc. Además de la captura de excepciones. Cuando podría ser más fácil crear una sola clase que hiciera de Wrapper sobre las funciones estándar de C. Lo cual es similar a los objetos ifstream y ofstream de C++.
Por otra parte, el esquema de desarrollo de C/C++ hace que de repente aparezcan esos nombres de variables místicos. Como el clásico ejemplo del ciclo for que explica Kernighan y Ritchie:
int i, n = 10;
int a[10]:
for(i = 0; i<n; i++) a[i] = 3;
Ese tipo de código lo he visto muchas veces, nadie sabe que es i, ni n, ni mucho menos a (hasta son indistiguibles en prosa). i queda un poco claro, es un indice, pero ¿un indice de que? ¿bajo qué está normado?, n indica cantidad, pero ¿es la cantidad de elementos o el límite que se desea recorrer?, en el caso de a se pone más enredada la cosa, puede ser una lista de clientes, una lista de sueldos de empleados, una lista de valores asignados a un hardware específico. Sé que es rápido desarrollar así, pero diganme, ¿qué es más legible? ¿El código anterior o el siguiente?
int indiceEmpleado, numeroEmpleados = 5;
int sueldoEmpleados[numeroEmpleados];
int valorSueldoPorEmpleado = 3;for(indiceEmpleado = 0; indiceEmpleado < numeroEmpleados; indiceEmpleado++)
{
sueldoEmpleados[i] = valorSueldoPorEmpleado;
}
Debo admitir que me tomó más tiempo escribir dicho loop, pero vale la pena, queda claro cuál es el objetivo, que valor es asignado. Podríamos seguir mejorando dicho loop, pero creo que captan la idea. No podemos basar una práctica de desarrollo guíandonos por estilos asociados a un lenguaje. Hay que ser un poco más prácticos y definir algún estándar general y luego tratar los temas específicos del lenguaje. Obviamente hay temas rescatables de cada lenguaje, tal como el uso de capitalización tipo Java o el agregar prefijos para distinguir los tipos de datos, las variables miembro de una clase del resto como se hace en Visual C++. Así entre otras, pero sin casarse con un determinado lenguaje.
Espero que donde estoy lleguen a un acuerdo. En otra ocasión hablaré de como los problemas de comunicación pueden contribuir a la duplicación de código y por consiguiente a la duplicación de código propenso a errores.
RSS
SubscribirTags
arte arte robótico blogs Bolsa buenas prácticas chile control de versiones derechos digitales Diseño Economía economía personal estafadores experiencias feeds general google reader hipocresía humor ideas Ingeniería Ingeniería de Software john atkinson la vida links linux LPI mi vida máquinas de escribir ocio País piratería política programación prácticas reciclaje regionalización robots SCD sentiment analysis tips trabajo Transantiago vida laboral videos windowsPublicidad