Formas de romper el "Síndrome del programador perfecto" [cerrado]

16

Probablemente no soy el único que se siente así. Pero tengo lo que suelo llamar "El síndrome del programador perfecto", que muchos podrían decir que es lo mismo que ser perfeccionista, pero en este caso pertenece al dominio de la programación. Sin embargo, el dominio de la programación es un poco problemático para tal síndrome.

¿Alguna vez has sentido que cuando estás programando no confías o nunca confías lo suficiente como para que tu código esté limpio y sea un buen código que siga la mayoría de las mejores prácticas? Hay tantas reglas a seguir que me siento abrumado de alguna manera. No es que no me guste seguir las reglas, por supuesto, soy un programador y me encanta programar, lo veo como un arte y debo seguir las reglas. Pero también me encanta, quiero decir que quiero y me encanta seguir las reglas para tener una buena idea de lo que estoy haciendo va por el camino correcto ... pero solo desearía poder tener todo un poco más en "control" con respecto a las mejores prácticas y buen código.

Tal vez es una falta de organización? Tal vez es una falta de experiencia? Tal vez una falta de práctica? ¿Quizás es la falta de algo más que alguien pueda señalar? ¿Hay alguna forma de deshacerse de ese síndrome de alguna manera?

Rushino
fuente
1
Esta pregunta solo se puede responder sabiendo un poco más sobre su experiencia personal, aunque eso podría hacerla demasiado localizada rápidamente. El Tao de la programación podría ser un buen lugar para comenzar.
back2dos
No estoy de acuerdo allí ... creo que cualquiera que sea el fondo puede sentirse de esta manera, quizás en diferentes grados, pero aún así.
Rushino
2
Si bien todos pueden experimentar los mismos síntomas, la causa varía mucho y, de hecho, la "cura".
back2dos
No hay programador perfecto. Puede encontrar uno experimentado y orientado al detalle que tenga impulso y deseo de mejorar sus habilidades. - puede llamarlos "go Getters" ...
Yusubov
"Debo seguir las reglas" ... y ahí está tu problema. Las "mejores prácticas" no son reglas, son sugerencias basadas en la experiencia colectiva. Si las trata como reglas irrompibles, puedo ver la raíz de su estrés.
GrandmasterB

Respuestas:

21

Dar prioridad . Lo primero es lo primero. Concéntrese en lo que importa.

Sus prioridades pueden variar, pero en general debe preocuparse por:

  • Código correcto
  • Código mantenible
  • Código limpio
  • Código simple y elegante
  • Código eficiente

Quizás en ese orden. Sin embargo, el primer punto es el más importante. Sin él, el código es inútil. ¿Qué haces con un programa que no funciona correctamente?

Haz que funcione, todo lo demás es casi irrelevante para resolver los problemas que necesitas resolver. Por supuesto, yo también sufro por esto. Lo que he aprendido que ayuda es centrarse en las soluciones que funcionan . Es suficiente. Eso es el 99% del trabajo.

Es posible que desee pensar en algo como un buen código . ¿Qué es? ¿Qué tipo de gente lo escribe? ¿Cómo escribir un buen código ? Es muy simple. Escribe el código que funciona . El código de trabajo es un buen código. Todo lo demás viene después.

Por supuesto, al escribir código en un entorno profesional, en equipo , el código obvio y legible y el código mantenible se vuelven cada vez más importantes. Sin embargo, todavía la primera tarea es hacer que funcione y centrarse en eso. Solo entonces puede comenzar a refinar y refactorizar para mejorar, si es necesario.

A menudo es bastante obvio que la corrección del código es muy importante; sin embargo, todos fallamos en aceptar su importancia al escribir código. Cortamos esquinas, utilizamos la optimización prematura, tratamos de escribir código elegante incluso antes de tener un código de trabajo escrito. Es la naturaleza humana luchar por la perfección desde el principio, pero la programación y el desarrollo de software son procesos iterativos y existen prioridades. Por lo tanto, nuevamente, haz que funcione , preocúpate por todo lo demás más tarde. Comprenda la importancia del código correcto y esfuércese por él.

Si bien hay toneladas y toneladas de las llamadas buenas prácticas , creo que el sentido común es lo más importante, piense por qué las prácticas se consideran buenas, cuándo y dónde aplicarlas. Sin embargo, no se esfuerce por cumplir con todas las buenas prácticas. No hay reemplazo o sustituto para la experiencia personal. No puede evitar las trampas comunes, sin importar cuántos libros lea, seminarios a los que asista o no. Lo que importa es aprender haciendo, haciendo las cosas correctamente y divirtiéndose, siempre que sea posible.

zxcdw
fuente
9
La mejor optimización es la que lleva su programa del estado no operativo al estado operativo.
deadalnix
1
@deadalnix ¡Perfecto consejo! Es tan simple, tan obvio, pero tan cierto en todo el código.
zxcdw
77
+1. Consideraría poner mantenible arriba correcto . Después de todo, una cualidad del código mantenible es que corregirlo es una cuestión de esfuerzo razonable;)
back2dos
1
EFficient debería estar por encima de todo, pero correcto si está hablando de código de base de datos y mucho más elegante. Un buen código sql (bueno para la base de datos que no es el desarrollador) rara vez es elegante. Se conocen formas ineficientes de hacer las cosas y no son menos fáciles de mantener o más difíciles de entender una vez que comience a usarlas regularmente.
HLGEM
2
@HLGEM De hecho, en campos específicos las prioridades podrían ser completamente revertidas. Por ejemplo, a veces escribo un código de ensamblaje de ingeniería inversa que se ha escrito bajo restricciones extremas de tamaño y velocidad (productos de demoscene). En tales situaciones, incluso la corrección del programa podría ser cuestionada: muchas piezas de código que funcionan mal han resultado funcionar extremadamente bien (hermosos artefactos visuales y de audio basados ​​en un código incorrecto, por ejemplo).
zxcdw
6

La forma más sencilla de evitar este problema es cambiar solo lo que duele. No pulir código que sea correcto, legible y mantenible, incluso si cree que algunos cambios podrían hacerlo aún mejor. Pero una vez que, por ejemplo, intente cambiar algo y no se pueda comprender una variable cuyo propósito no esté claro, o una función que sea demasiado larga para comprender, arréglelo. No antes

Eso no significa que no deba esforzarse por obtener un código bueno y limpio en primer lugar, por supuesto que sí, pero debe considerar su primer intento "suficientemente bueno" a menos que se demuestre lo contrario.

usuario281377
fuente
+1 me gusta la parte ... "tu primer intento" suficientemente bueno "a menos que se demuestre lo contrario".
Rushino
Secundado y votado. Definitivamente un consejo de oro!
zxcdw
4

Creo que el mejor antídoto para esto es recordarse a sí mismo que todas esas mejores prácticas y reglas de limpieza del código no existen por sí mismas, ni el código en sí mismo.

Al final, lo que importa más que cualquier otra cosa es que el software funciona y se puede utilizar. Y eso no sucederá si no lo terminas.

No me gusta la comparación de la codificación con el arte, pero a este respecto funciona: los artistas ( especialmente los autores ) a menudo también quieren seguir trabajando en una pieza porque siempre hay algo que no es perfecto. Pero, ¿qué valor tiene la perfección cuando retrasa la publicación indefinidamente y, por lo tanto, impide que alguien aprecie el trabajo?

Michael Borgwardt
fuente
2

Lo más importante a tener en cuenta es que su código siempre va a cambiar, y siempre hay margen de mejora. Ningún código es perfecto. La mayoría de las veces, una biblioteca de clase en la que trabaje hoy será muy diferente dentro de seis meses. Aprendes alguna técnica nueva o encuentras un patrón que realmente funcione para ti. Mientras el código sea fácilmente mantenible y legible, entonces debería ser bueno. Lo ideal sería tener pruebas unitarias para que sea más fácil refactorizar más adelante.

Es fácil quedar atrapado en hacer que el código se vea perfecto y seguir todos los estándares que se te ocurran. Nos pasa a todos. Mirar el código que escribí hace un par de semanas me hace pensar en hacer cambios. Agregue una propiedad aquí, refactorice el método allí. Y parece suceder al final del proyecto. Pero si te envuelves demasiado en eso, podrías terminar cometiendo un error espectacular. Lo hice un par de veces al principio de mi carrera. Un par de sesiones de corrección de errores de 3 AM me curaron de ese problema.

bwalk2895
fuente
1

Hazlo al revés.

En lugar de "¿qué se puede hacer mejor?" buscar "¿qué me molesta?" hasta que nada lo haga.

Arnis Lapsa
fuente
44
"Un libro está terminado no cuando no se puede agregar nada más, sino cuando no se puede quitar nada". - Código completo
Jonathan
En realidad, es una paráfrasis de Saint-Exupéry, es curioso cómo puede tener menos credibilidad que Code Complete aquí.
scrwtp
1

Como programador, su trabajo es producir código. El propósito de las mejores prácticas es aumentar su tasa de producción haciendo que las cosas sean más fáciles de entender / hacer / recordar. Si adherirse a estas prácticas se interpone en el camino de hacer las cosas, estás haciendo algo mal. Simplemente intente producir código lo más rápido que pueda, y sus prácticas deberían evolucionar para permitirle hacer exactamente eso.

suszterpatt
fuente
Estoy en desacuerdo. Como programador, su trabajo es resolver problemas. Demasiados programadores miran un problema y dicen "Puedo codificar una solución para eso", y no buscan soluciones que ya existen . La mejor solución es la que no tiene que escribir. Dicho esto, como programador que debe codificar la solución, su trabajo es cumplir con los requisitos. Existen mejores prácticas para garantizar que el código que cumple con los requisitos se pueda cambiar fácilmente cuando los requisitos cambian (no si , sino cuándo ).
KeithS
1

Haz que funcione, hazlo limpio, hazlo SÓLIDO, haz que funcione.

Los primeros tres son un adagio que defiendo cada vez que alguien se pregunta cómo escribir código SOLIDO en una línea de tiempo. Cuando escribes una línea de código por primera vez, simplemente tiene que funcionar, así que haz lo que tengas que hacer y no te imagines. La primera vez que vuelve a visitar una línea de código, ya no es única y debe limpiar el código para que sea legible y, por lo tanto, más fácil de mantener. La tercera vez que su cursor va en esa línea, probablemente sea un gran problema ahora, y debe refactorizarlo para que se adhiera a la metodología SOLID, abstraiga dependencias, implemente patrones y, en general, haga que el código sea más fácil de conectar o enchufar para futuras mejoras.

La elegancia en el código se logrará cuando el programador note una oportunidad, y generalmente es una función de simplificar, limpiar y mejorar en general la legibilidad y la facilidad de mantenimiento del código mientras se siguen los pasos anteriores. No es algo para maximizar .

El código de rendimiento es casi siempre la menor preocupación en los lenguajes gestionados por memoria (Java, la familia .NET, la mayoría de los lenguajes funcionales, etc.). En estos entornos, el objetivo es escribir el código correcto ("correcto" aquí definido como producir el resultado esperado en todos los casos esperados, yes comprensible y bien estructurado, y por lo tanto mantenible), y el rendimiento es secundario (por lo general, procederá en cierta medida del código correcto). En todos los casos, un algoritmo es eficaz cuando es "suficientemente bueno". Recuerde, "la optimización prematura es la raíz de todo mal"; Hacer optimizaciones que no sabe que necesitará hace poco más que perder el tiempo, ofuscar el código y, en general, evitar el progreso. Primero tiene que funcionar, luego, una vez que funciona, lo ejecutas y ves qué tan rápido se ejecuta. Si no es lo suficientemente rápido (como lo define algún punto de referencia que es un requisito publicado), lo mejora hasta que lo es, y luego se detiene .

KeithS
fuente
0

Realmente necesitas ser pragmático sobre la programación. Sí, a todos nos gusta hacer las cosas bien, pero a usted le pagan por entregar software que funciona, no por pulirlo por el resto de su vida.

El enfoque a seguir es "hacerlo" en su vida profesional. Entregar y seguir adelante. Guarda tu perfeccionismo para proyectos personales.

James McLeod
fuente
Entiendo, pero no podemos considerar este "blanco o negro", creo.
Rushino