Pregunta

Al escribir una prueba matemática, un objetivo es continuar la compresión de la prueba. La prueba se vuelve más elegante, pero no necesariamente más fácil de leer. La compresión se traduce en una mejor comprensión, a medida que eliminar a los personajes y la verbosidad innecesarios.

A menudo escucho a los desarrolladores dicen que usted debe hacer que el código del pie de impresión lo más pequeño posible. Esto puede producir muy rápidamente código ilegible. En matemáticas, no es un asunto tan dado que el ejercicio es puramente académico. Sin embargo, en el código de producción donde el tiempo es dinero, que tiene la gente trata de averiguar lo que algunos código muy concisa está haciendo, no parece tener mucho sentido. Por un poco de código más detallado, se obtiene la legibilidad y el ahorro.

¿En qué momento se interrumpirá la compresión de código de software?

¿Fue útil?

Solución

Trato de alcanzar un nivel de verbosidad donde mis sentencias de programa se leen como una sentencia de cualquier programador podría entender. Esto significa en gran medida refactorización mi código de tal manera que es todas las piezas cortas de una historia, por lo que cada acción se describe en un método separado (un nivel aún más podría ser la de otra clase).

Significado yo no reducir mi número de caracteres sólo porque se puede expresar en menos. Eso es lo que las competiciones código de golf son para.

Otros consejos

Mi regla es dicen lo que quiere decir . Una forma común que veo la gente va mal es "reducción de la resistencia." Básicamente, sustituyen el concepto que están pensando con algo que parece saltar los pasos. Por desgracia, que están dejando los conceptos de su código, por lo que es más difícil de leer.

Por ejemplo, el cambio de

for (int i = 0; i < n; i++)
    foo[i] = ...

a

int * p = foo, q = foo+n;
while ( *p++ = ... < q );

es un ejemplo de una reducción de la resistencia que parece ahorrar pasos, pero se deja de lado el hecho de que foo es una matriz, por lo que es más difícil de leer.

Otra común es el uso de bool en lugar de una enumeración.

enum {
    MouseDown,
    MouseUp
};

Tener esta sea

bool IsMouseDown;

deja de lado el hecho de que se trata de una máquina de estados, haciendo que el código sea más difícil de mantener.

Así que mi regla de oro sería, en su aplicación, no cavar a un nivel inferior al de los conceptos que están tratando de expresar.

Puede hacer el código más pequeño al ver la redundancia y la eliminación de ella, o por ser inteligente. Hacer lo primero y no lo segundo.

He aquí un buen artículo de Steve McConnell - Mejores prácticas http://www.stevemcconnell.com/ ieeesoftware / bp06.htm

Creo corto / concisa dos resultados de código bien escrito. Hay muchos aspectos para hacer el bien y el código de muchos resultados de código bien escrito, se dan cuenta de los dos son diferentes. No tiene la intención de una pequeña huella, a planificar una función que es conciso y hace una sola cosa extremadamente bien - esto debe conducir a un pequeño pie de impresión (pero no). He aquí una breve lista de lo que iba a centrarse en la hora de escribir código:

  • individuales funciones enfocadas - una función deben hacer sólo una cosa, una entrega simple, multi funciones destacadas son buggy y no es fácilmente reutilizable
  • imprecisa - no llegan desde el interior de una función a los datos globales y no se basan en gran medida de otras funciones
  • denominación precisa - utilizar nombres de variables significativas precisos, nombres crípticos son sólo eso
  • mantener el código simple y no compleja - no sobre el uso del lenguaje wow de técnicas específicas, bueno para impresionar a los demás, difícil de entender y mantener fácilmente - si lo hace añadir algo 'especial' comenta que lo que al menos la gente puede apreciarlo antes de maldecir a salir
  • uniformemente comentar - a muchos comentarios serán ignorados y antiguo a pocos tienen ningún significado
  • formateo - enorgullecerse de cómo se ve el código, el código correctamente sangría ayuda
  • trabajo con la mente de una persona de mantenimiento de código - pensar lo que sería como para mantener el código que está escribiendo
  • tenga miedo o pereza refactorizar - nada es perfecto la primera vez, limpiar su propio desorden

Una forma de encontrar un equilibrio es buscar legibilidad y no concisa-dad. Los programadores están constantemente la lectura de códigos visuales para ver qué se está haciendo, por lo que el código debe lo más posible flujo muy bien.

Si el programador está escaneando el código y golpea una sección que es difícil de entender, o requiere algún esfuerzo para analizar y comprender visualmente, es una mala cosa. Usando construcciones bien entendidos común es importante, mantenerse alejado de la vaga y utilizado con frecuencia menos que sea necesario.

Los seres humanos no son los compiladores. Los compiladores pueden comer las cosas y seguir avanzando. código Obscure no se consume por los seres humanos mentalmente tan rápidamente como código claramente entendido.

A veces es muy duro para producir un código legible en un algoritmo complicado, pero en su mayor parte, la legibilidad humana es lo que debemos buscar, y no la inteligencia. No creo que la longitud del código es en realidad una medida de la claridad o bien, porque a veces un método más detallado es más fácil de leer que un método conciso, y algunas veces un método concisa es más fácil de leer que una larga.

Además, los comentarios sólo se deben complementar, y no deben describir su código, el código debe describirse a sí misma. Si usted tiene que comentar una línea, ya que no es obvio lo que se hace, lo que es malo. Se tarda más tiempo para la mayoría de los programadores con experiencia de leer una explicación Inglés que lo hace para leer el código en sí mismo. Creo que el código del libro martillos completas un gol.

En cuanto a los nombres de objetos ir, el pensamiento sobre esto ha pasado por una evolución con la introducción de nuevos lenguajes de programación.

Si usted toma las lenguas "corchete", empezando por C, la brevedad se consideró el alma del ingenio. Por lo tanto, tendría una variable para contener un valor de préstamo llamado "LV", por ejemplo. La idea era que estuviera escribiendo un montón de código, así que mantenga las pulsaciones de teclado a un mínimo.

Entonces llegó la sancionada por Microsoft "notación húngara", donde las primeras letras del nombre de una variable estaban destinados a indicar su tipo subyacente. Se podría utilizar "FLV", o algo así, para indicar que el valor del préstamo fue representado por una variable de tipo float.

Con Java, C # y, a continuación, el paradigma se ha convertido en uno de claridad. Un buen nombre para una variable de valor del préstamo sería "loanValue". Creo que parte de la razón de esto es la función de finalización del comando en la mayoría de los editores modernos. Ya que no es necesario escribir un nombre completo más, que también podría utilizar tantos caracteres como sea necesario para ser descriptivo.

Esta es una buena tendencia. Código debe ser inteligible. Comentarios A menudo se añaden en el último momento, en todo caso. Asimismo, no se actualizan a medida que se actualiza el código, por lo que se convierten fuera de fecha. Descriptiva, bien elegido , los nombres de variables son la primera forma, mejor y más fácil que los demás sepan lo que codificando aproximadamente.

Yo tenía un profesor de informática que dijo "Como ingenieros, estamos creando constantemente los tipos de cosas que no existían antes. Los nombres que damos ellos se adhieren, por lo que debemos tener cuidado de nombrar las cosas de manera significativa . "

Es necesario que haya un equilibrio entre el código fuente dulce corta y el rendimiento. Si es agradable fuente y corre más rápido, entonces bueno, pero por el bien de buena fuente que funciona como un perro, entonces mal.

Se esfuerzan por refactor hasta que el código en sí lee bien. Usted podrá descubrir sus propios errores en el proceso, el código será más fácil de asimilar para el "tipo de al lado", y no será cargado por el mantenimiento (y luego olvidarse de cambiar) en los comentarios de lo que ya está expresada en código.

Cuando eso falla ... claro, me dejan un comentario.

Y no me diga "qué" en el comentario (que es lo que el código es para), dime "por qué".

A diferencia de largo / incoherente? Seguro!

Pero se pone al punto en que es tan corta y tan conciso que es difícil de entender, entonces usted ha ido demasiado lejos.

Sí. Siempre.

SECO : No te repitas. Eso le dará un código que es a la vez concisa y segura. Escribiendo el mismo código varias veces es una buena manera de hacer que sea difícil de mantener.

Ahora eso no quiere decir que usted debe hacer una función de cualquier bloque de código de forma remota que buscan por igual.

Un error muy común (terror?), Por ejemplo, se factorización de código haciendo casi lo mismo, y para manejar las diferencias entre las ocurrencias mediante la adición de una bandera para funcionar API. Esto puede parecer inocuo al principio, pero genera el flujo de código sea difícil de entender y de errores en decúbito prono, y aún más difícil de refactorizar.

Si usted sigue las reglas comunes de refactorización (mirando sobre el código huele) el código será más y más concisa como efecto secundario la mayor cantidad de olores de código son acerca de cómo detectar la redundancia.

Por otro lado, si se intenta hacer que el código lo más corto posible no seguir las directrices meaningfull, en algún momento tendrá que parar porque simplemente no verá más la manera de reducir código.

Imagínese si el primer paso es la eliminación de todos los espacios en blanco inútiles ... después de que el código de paso en la mayoría de los lenguajes de programación llegará a ser tan difícil de leer que no tendrá muchas posibilidades de encontrar cualquier otra posible mejora.

El ejemplo anterior es bastante caricaturesco, pero no tan lejos de lo que se obtiene cuando se trata de optimizar para tamaño sin seguir ninguna pauta razonable.

No hay una línea exacta que se puede extraer de distinguir entre el código que es simplista y código que es de flores. Utilizar su mejor juicio. Hacer que otras personas miran su código y ver la facilidad con que pueden entenderlo. Pero recuerde, la corrección es el objetivo número 1.

La necesidad de las pequeñas huellas de código es un retroceso desde los días de lenguaje ensamblador y los primeros lenguajes de alto nivel un poco ... hay pequeñas huellas de código en una necesidad real y apremiante. En estos días, sin embargo, no es tanto una necesidad.

Una vez dicho esto, no me gusta código detallado. Donde trabajo, se escribe código que lee tanto como sea posible como un lenguaje natural, sin ningún tipo de gramática o palabras adicionales. Y nosotros no abreviar nada menos que su una abreviatura muy común.

Company.get_by_name("ABC") 
makeHeaderTable()

es lo más concisa a medida que avanzamos.

En general, hago cosas obvias y fáciles de trabajar. Si la concisión / dificultad no me falla en ello, mejor que mejor. A menudo respuestas cortas son las más claras, por lo que falta es un subproducto de la obvia.

Hay un par de puntos a mi mente que determinan cuándo dejar de optimización:

  • Vale la pena el gasto de tiempo realizar optimizaciones. Si usted tiene gente pasar semanas y no encontrar nada, hay mejores usos de esos recursos?

  • ¿Cuál es el orden de prioridad de optimización. Hay una serie de factores diferentes que uno podría preocupan cuando se trata de código: El tiempo de ejecución, espacio de ejecución (tanto correr y sólo el código compilado), escalabilidad, estabilidad, cuántas características se implementan, etc. Parte de esto es el comercio fuera del tiempo y del espacio, pero también puede ser a dónde va, por ejemplo, un código middleware puede ejecutar comandos ad hoc de SQL o dichas ser enrutado a través de procedimientos almacenados para mejorar el rendimiento?

Creo que el punto principal es que no es un moderación que la mayoría buenas soluciones tendrán.

Las optimizaciones de código tienen poco que ver con el estilo de codificación. El hecho de que el archivo contiene espacios o nuevas líneas x menos que al principio no significa que sea mejor o más rápido, por lo menos en la etapa de ejecución - que formatear el código con caracteres blancos que son inusualmente ignorados por el compilador. Incluso hace que el código es peor, porque se vuelve ilegible para los otros programadores y usted mismo.

Es mucho más importante para que el código sea corto y limpio en su estructura lógica, tales como las condiciones de prueba, control de flujo, supuestos, el manejo de errores o la interfaz de programación global. Por supuesto, también me gustaría incluir aquí inteligentes y útiles comentarios + la documentación.

No hay necesariamente una correlación entre el código conciso y rendimiento. Esto es un mito. En lenguajes maduros como C / C ++ los compiladores son capaces de optimizar el código de manera muy eficaz. Existe una causa necesidad en estos idiomas suponer que el código sea más concisa es el mejor código rendimiento. Más nuevos, menos idiomas rendimiento optimizado como Ruby carecen de las características de optimización del compilador de compiladores de C / C ++, pero todavía hay pocas razones para creer que el código es conciso mejor rendimiento. La realidad es que nunca sabemos qué tan bien el código llevará a cabo en la producción hasta que se mete en la producción y se perfila. Simples e inocuos, funciones pueden ser enormes cuellos de botella de rendimiento si se llama desde suficientes lugares dentro del código. En sistemas altamente concurrentes los mayores cuellos de botella son causadas generalmente por los pobres algoritmos de concurrencia o de bloqueo excesivo. Estas cuestiones rara vez se resuelven mediante la escritura de código "concisa".

La conclusión es la siguiente: El código que realiza mal siempre puede ser reprogramado una vez perfilado determina que es el cuello de botella. Código sólo se puede refactorizar efectiva si es fácil de entender. El código que se escribe para ser "concisa" o "inteligente" es a menudo más difícil de refactorizar y mantener.

Escribir el código de legibilidad humana entonces refactorizar para el rendimiento cuando sea necesario.

Mis dos centavos ...

Código debe ser corto, concreto y se concentró. Siempre se puede explicar sus ideas con muchas palabras en los comentarios .

Puede hacer que el código lo más corto o más compacto te gusta, siempre y cuando usted comenta ella. De esta manera su código puede ser optimizado, pero aún hacen SENCE. Me tienden a estar en algún lugar en el medio con variables y métodos descriptivos y comentarios sparce si todavía no está claro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top