Estaba leyendo el artículo de Wikipedia sobre Douglas McIlroy y encontré una cita que menciona
"El verdadero héroe de la programación es el que escribe código negativo".
Qué significa eso?
Estaba leyendo el artículo de Wikipedia sobre Douglas McIlroy y encontré una cita que menciona
"El verdadero héroe de la programación es el que escribe código negativo".
Qué significa eso?
Respuestas:
Significa reducir líneas de código, eliminando redundancias o utilizando construcciones más concisas.
Vea, por ejemplo, esta famosa anécdota del equipo original de desarrolladores de Apple Lisa:
fuente
Hay una cita de Bill Gates en el sentido de que medir la productividad del programador por líneas de código es como medir el progreso de la construcción de aviones por peso.
Quisiera agregar que la métrica LOC ha alentado el uso de idiomas excesivamente largos y reinventa deliberadamente la rueda para cumplir con la cuota.
fuente
Cuando estaba en la escuela secundaria, y sí, teníamos computadoras en los años 70, aunque tuvimos que sacarlas de pieles de animales con cuchillos de piedra, uno de los maestros de matemáticas organizó un concurso de programación. Las reglas eran que el programa ganador sería el que produjera la salida correcta, y que tuviera el producto más pequeño de las líneas de código de tiempo de ejecución. Es decir, si su programa tomó, digamos 100 líneas de código y ejecutó durante 5 segundos, su puntaje fue de 500. Si alguien más escribió 90 líneas de código y ejecutó durante 6 segundos, su puntaje fue de 540. El puntaje bajo gana, como el golf.
Me pareció un sistema de puntuación brillante, que recompensaba la concisión y el rendimiento.
Pero la entrada que técnicamente cumplía con los criterios ganadores fue descalificada. El problema era imprimir una lista de todos los números primos menores que 100. La entrada descalificada fue algo así (la mayoría de los estudiantes usaban BASIC en ese entonces):
El estudiante que escribió esa entrada señaló que no solo era breve y muy eficiente, sino que el algoritmo debería ser obvio para cualquiera con un conocimiento mínimo de programación, haciendo que el programa sea altamente mantenible.
fuente
Es irónico. Si le cuesta $ N por línea codificada promedio, entonces codificar "líneas negativas" seguramente es un ganador.
Esto significa, como consejo práctico, que el código pequeño que realiza el trabajo es mucho mejor que el código grande que hace lo mismo, todas las demás cosas son iguales.
fuente
X
líneas. Luego, durante varias iteraciones, reduciendo el producto final porY
líneas. Entonces, las(X-Y)
líneas restantes parecen ser muy costosas porque la carnicería de la refactorización ha cortado toda la ruina.Escribir el mismo programa en menos código es un objetivo para todos.
Si un programa tomó 200 LOC para codificar, y lo escribí en 150, escribí -50 LOC. Entonces escribí un código negativo.
fuente
La respuesta de Thilo es probablemente la más precisa históricamente, pero la metáfora del "código negativo" también puede incluir el rendimiento y el uso de la memoria, recompensando los esfuerzos para diferir la ejecución o la asignación de algo hasta que sea realmente necesario.
Esta mentalidad de "la dilación paga" produjo axiomas irónicos como "No hacer nada siempre es más rápido que hacer algo", "El código más rápido es el código que nunca se ejecuta" y "Si puedes posponerlo el tiempo suficiente, es posible que nunca tenga que hacerlo "(refiriéndose al aplazamiento de operaciones costosas hasta que sea realmente necesario)
Una técnica para realizar un código negativo es desafiar los supuestos iniciales y las definiciones del problema. Si puede redefinir el problema / dominio de entrada de modo que el "problema fijo # 3" sea categóricamente imposible, entonces no tiene que perder tiempo o código para tratar el problema fijo # 3. Has eliminado el código optimizando el diseño.
fuente