Cómo escribir menos código [cerrado]


12

Una cualidad que me gustaría desarrollar es escribir un código más conciso. Con una escritura más concisa, al menos en mi opinión, la oportunidad de agregar errores al código es menor. Es más fácil leer el código para otro.

Mi pregunta es si es algo que solo viene con experiencia o es algo que puedes hacer explícitamente para desarrollar esa calidad.


66
Trace la tendencia y vea cuando cruce el eje x ...

1
Puntero obligatorio a macros, macros, macros: paulgraham.com/avg.html
vemv

Puede generar código muy breve y legible adoptando el estilo de programación sin sentido. La programación sin sentido es programar solo aplicando funciones. Se puede reconocer por su amplio uso de funciones de orden superior como el mapa, filtro, concat, doble / reducir / inyección / [insertar otros nombres para una lista catamorphism] etc
dan_waterworth

2
-1: Esto parece una enhorabuena disfrazada.
Jim G.

Todavía no he visto código libre de puntos legibles. No en ninguna biblioteca importante.
Simon Bergot

Respuestas:


12

Diría que, en general, es algo que viene con el tiempo y la experiencia, pero es posible que si trabajas con idiomas más concisos, devuelves esa calidad a tus idiomas de trabajo habituales.

Ciertamente, después de un año o dos trabajando con Ruby, encontré que mi C # se volvió mucho más tenso. Creo que si entendiera mejor la programación funcional (una ambición continua) probablemente tomaría más de eso.

También hay algunas pautas que pueden ayudar, por ejemplo, si escribe las mismas dos líneas más de una vez, divídalas en su propio método. Esa es una pauta simple pero reduce rápidamente las líneas de código y la programación de cortar y pegar, de la cual la mayoría de nosotros somos culpables de vez en cuando.

Si comprende la herencia, a menudo puede ahorrar repitiendo el mismo código en diferentes lugares al proporcionar una funcionalidad común a las clases primarias. Esto es obvio en principio, pero algo que la gente suele pasar por alto en la práctica.

Puede haber una diferencia entre escribir menos código y tener menos código en su aplicación; a veces puede usar la generación de código para evitar tener que repetirlo, por lo que solo escribe unas pocas líneas de código, pero luego generan una gran cantidad de otro código para usted - Eso puede darle mucha influencia. Mire lo que hace una herramienta como Rails o Entity Framework a este respecto para comprender cuán útil puede ser. Sin embargo, sea claro acerca de la necesidad y piense dos veces, tres veces y luego cuatro veces sobre la creación de su propio código, eso puede llevarlo al infierno de YAGNI.

Comprenda su idioma, su API y sus herramientas. Una vez más, esto parece obvio, pero a lo largo de los años he escrito tanto código que más tarde me di cuenta de que estaba reproduciendo una funcionalidad que podría haber heredado de la API o haber utilizado una función de lenguaje para simplificar que me di cuenta de que algunas horas de lectura sobre la documentación para la API con la que estoy trabajando me ahorrará muchas horas de codificación o depuración más adelante. Del mismo modo, la mayoría de las plataformas con las que trabaja tienen un gran potencial: aprenda a trabajar de la manera que esperan y su vida será mucho más fácil. Dedique algo de tiempo a encontrar la dirección de menor resistencia para la plataforma con la que está trabajando y hará que las cosas se hagan mucho mejor.

Si se pregunta si hay una mejor manera de hacer algo, probablemente la haya y siempre vale la pena descubrir cómo hacer las cosas mejor.


Sí, en mi opinión, la única razón para las funciones privadas de una línea es el principio DRY

Como he tenido más de esas funciones, el número de líneas de código en mis clases ha disminuido notablemente y se ve mucho más ordenado y claro.
glenatron

Suena como un poco de contradicción, más funciones pero menos líneas, pero tal vez yo también pueda ver la misma tendencia en mi código ... Tengo que pensar en eso ...

¿Tiene alguna más de estas pautas que podrían seguirse? Parece que podrían ser útiles para un joven desarrollador como yo.
stuartmclark

@stuartmclark: he agregado algunos más, aunque sospecho que no hay demasiado allí que no hubieras escuchado en otro lado.
glenatron

16

Una excelente manera de escribir menos código es tratar de evitar reinventar la rueda y usar los componentes de software existentes cuando estén disponibles.

Una respuesta común que obtengo cuando pregunto por qué las personas hicieron su propio ORM, o su propio motor de registro, o sus propios componentes de la interfaz de usuario, o su propio todo:

Pero nuestro es mejor

Creo que esta afirmación es correcta en la mayoría de los casos, pero el impacto negativo en el ROI es muy alto en la mayoría de los casos. Tu mamá hace los mejores platos ¿verdad? Pero no puedes pedirle a tu madre que venga a casa y los prepare todos los días.

Es por eso que creo que los desarrolladores deberían interesarse en el impacto financiero de sus elecciones. Algunos de ellos son:

  • Se requiere trabajo adicional para construir el componente
  • Trabajo extra para principiantes para aprenderlo
  • Enorme trabajo extra para mantenerlo

Me gusta pensar que esos proveedores de componentes son su equipo extenso que trabaja para usted por una pequeña fracción de lo que habría pagado para construirlo, mantenerlo y mejorarlo usted mismo.

Es mejor que toda la empresa obtenga el ROI máximo en lugar de trabajar para maximizar la satisfacción de nuestro ego;) Cuanto más dinero obtenga su empresa, más probabilidades habrá de que aumenten sus condiciones de trabajo y su salario.


1
También soy culpable de eso, hace unos años escribí mi propia clase de ruta de archivo que podía convertir la ruta de archivo entre el formato Win, Unix y Apples. Solo usamos ventanas. Tal vez esa también sea una regla, nunca haga las cosas a prueba de futuro

A veces se debe a su falta de conocimiento de un marco determinado. También escribí mi propia clase de ruta cuando comencé a trabajar con .NET, luego descubrí la clase System.IO.Path unos días después :-)

Preferí el espagueti de mi mamá, pero las cosas en el frasco eran lo suficientemente buenas. Esto realmente se reduce a los encargados de los requisitos. Si no se conforman con la solución del 85%, no tiene otra opción.
JeffO

Mi mamá hace el espagueti mucho mejor que el tuyo.

1
+ las interconexiones para "evitar reinventar la rueda". Una de las habilidades más importantes que he desarrollado es poder identificar problemas que alguien probablemente ya haya resuelto. No solo casi siempre me da una mejor solución de la que habría producido por mi cuenta al manejar un montón de casos marginales que probablemente habría pasado por alto, sino que me libera para trabajar en los problemas que realmente me pagan para resolver .
BlairHippo

5

En mi opinión, escribir menos código se puede hacer de varias maneras:

  • No lo vas a necesitar . No codifiques algo que aún no necesitas. Codifique solo los requisitos. De esta manera, reduciremos el código necesario para escribir.

  • No te repitas . Creo que usar CMS, framework o la biblioteca de terceros es una forma de aplicar el principio DRY.

  • Abstracción . Y por último, pero no menos importante, la programación de abstracción también puede reducir el código mucho. Al abstraer el código, la posibilidad de reutilizar el código aumentará porque reduce la duplicación.


3

Más allá de la comprensión de un lenguaje de programación, creo que la propia comprensión de un problema y encontrar una buena solución tiene mucho que ver con eso. Hay muchas soluciones para la mayoría de los problemas, no todos son óptimos. Puede conducir de la ciudad A a la ciudad B a través de diferentes caminos: uno podría tomar dos horas, el otro podría tomar el doble. Es la misma idea en programación. Es posible que conozca muy bien un idioma, pero puede encontrar una solución que tome, por ejemplo, dos páginas de código, mientras que otra persona encontrará una solución que se pueda implementar en un cuarto de la mitad del tamaño del código. Lo he visto mucho a lo largo de los años.

Asegúrese de comprender bien el problema. Analícelo, proponga soluciones, evalúe los pros y los contras (por supuesto, "las soluciones con una 's' 'variarán mucho de un problema a otro, solo hablando aquí en general). Luego está la implementación de la solución elegida, que es donde entrará en juego su comprensión del lenguaje (y el marco, si corresponde).


¿Cuánto tiempo pasas preparando la solución versus la programación de la solución?

Varía según el problema, por supuesto. No estoy hablando días aquí. Pasar un poco de tiempo pensando antes de codificar generalmente vale la pena. En realidad, no se trata del tiempo dedicado a hacerlo, ya que se trata de una buena solución, idealmente mantenible a largo plazo. Puedo producir un código malo para soluciones malas, cualquiera puede hacerlo.
MetalMikester

1

Se puede decir que todo el arte de la programación se reduce a esto.

Puede estudiar idiomas que tienen un énfasis tradicional en la claridad y concisión (por ejemplo, Haskell, Scheme, Python), o incluso paradigmas terser como Factor y otros lenguajes concatenativos, pero en última instancia, todo lo que podría elegir estudiar debería contribuir a ayudarlo a escribir más brevemente , código menos redundante.


1

Como todas las otras aflicciones, si no admite tener un problema, no va a buscar una solución. La experiencia comienza a ser un factor cuando aprende cómo se ve menos código. Cuando vuelve a visitar su código, es un buen momento para determinar si puede reutilizar el código o refactorizarlo con menos código. Microsoft pudo mejorar la velocidad de impresión con Windows 2000 al NO ponerla en cola dos veces (cita del empleado de Microsoft en una de sus demostraciones gratuitas).


Entonces, debería volver a visitar mi código y refactorizarlo para obtener una idea de cómo escribir menos código o, como dice Piet, ¿código terser?

2
@Gorgen: podría hacerlo si tiene tiempo o simplemente mira cualquier código que escribió hace una hora. A veces, detectar un ejemplo en SO puede pedirle que regrese y haga algunos cambios en su propio código.
JeffO

0
  1. Regrese a su antiguo código de largo aliento,
  2. ponlo bajo control de versiones,
  3. escriba algunas pruebas para que tenga una esperanza razonable de no introducir nuevos errores,
  4. volver a escribir.

Repita ad libitum. Y bienvenido al infierno.


-2

El desarrollo impulsado por pruebas podría ayudar. Con esto, solo escribe el código mínimo requerido para pasar esa prueba.


En ese contexto, mínimo se entiende en términos de características, no de longitud.
vemv
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.