Cómo convencerme de tolerar un código imperfecto que creé para poder dedicar tiempo a cosas más importantes

Solo puedo decir lo que funciona para mí.

En un momento incluso tuve un “bloque de código” (quiero decir algo muy parecido al bloqueo del escritor, no unas pocas líneas entre paréntesis) debido a esa mentalidad. Escribí un fragmento de código, o incluso pensé en un fragmento de código sin siquiera escribirlo … y todo lo que pude ver fue otras formas de hacer lo mismo, eso sería mejor: más eficiente, más simple, más genérico, más fácil de reutilizar, etc.

Finalmente me di cuenta de que el código perfecto no existe por sí mismo. Cada pieza de código se puede mejorar. Por ejemplo, generalmente es casi imposible escribir código que sea rápido y genérico. Quiero decir que el código genérico puede ser rápido, pero si acepta restringir el espacio del dominio, generalmente puede hacerse aún más rápido.

Pero incluso si mantiene una mentalidad muy estrecha, como solo pensar en el rendimiento, el código “perfecto” sigue siendo inalcanzable. El libro clásico de Michael Abrash Zen Of Optimization me ayudó mucho sobre eso en ese momento. Se incluye en el Libro negro de programación de gráficos de Michael Abrash, edición especial disponible gratuitamente aquí.

Entonces, olvídate de la perfección. Todo el código que escriba siempre será imperfecto , al menos ante los ojos de su yo futuro . Si no lo siente, significa que dejó de mejorar en la programación en algún momento o la falta de lucidez, nada de lo cual es muy deseable.

¿Cómo superé mi bloque de código? En algún momento decidí escribir código incorrecto a propósito (pero la unidad probó un código incorrecto). Las pruebas unitarias eliminaron mi temor de que podría romper todo si cambiaba esa mierda de código más tarde.

Lo que sucedió fue que una vez que supe que podía cambiar mi código incorrecto si era necesario, pude continuar y realmente cambiarlo solo si fuera necesario (si el código incorrecto se interpuso en la escritura del nuevo código que deseaba escribir).

También me concentré en escribir código más simple. Escribir código complejo que casi nadie entiende es fácil. Puede haber alguna razón, como una arquitectura abstracta atractiva o algo así, pero un código más simple facilita la vida de las personas que trabajan con usted, incluido su yo futuro.

Me convertí en un gran admirador de los olores a la refactorización, es maravilloso ver cómo se aclaran cosas intrincadas y ver que la estructura emerge por sí misma de algo mal pensado al principio. A menudo obtengo una mejor arquitectura de código final de esa manera que a través de un diseño cuidadosamente pensado. No fui tan lejos como el mal diseño a propósito, pero realmente 5 minutos de reflexión a menudo dan algo tan bueno como diez horas, de ahora en adelante no es necesario pasar las diez horas de diseño.

Otro truco que uso es escribir TODOS comentarios en el código cada vez que no tengo tiempo para escribir algo correctamente (o si veo posibles problemas en el código). El propósito es evitar interrumpir el flujo deteniendo lo que estoy haciendo para corregir de inmediato cualquier pequeño error. De hecho, vuelvo más tarde, para arreglar TODOS y esa es probablemente la parte más difícil. Este truco lo tomé del escritor de novelas de fantasía Piers Anthony. Es un escritor prolífico y explicó que uno de sus trucos fue incluir perturbaciones externas dejando una nota en el texto que está escribiendo , para evitar dejar de escribir. Eso es más o menos lo que pretendo hacer.

Espero eso ayude. Esto funciona para mi.

Convencerse a uno mismo de tolerar un código imperfecto es generalmente algo que se hace para proyectos de trabajo, donde lo perfecto es enemigo de lo bueno.

Como se trata de proyectos personales, creo que está bien luchar por la perfección.

Pero si se convierte en una obsesión poco saludable, algunas cosas en las que pensar:

  • El código puede ser imperfecto, pero lo compartí con GitHub, por lo que otros aún pueden mejorarlo. Incluso puedo ayudar a otros a aprender dándoles la oportunidad de mejorar este código.
  • Este código es imperfecto porque no soy lo suficientemente bueno como programador. Pero he aprendido de ellos, y es hora de seguir adelante.
  1. Reconozca que cada vez que cambia el código de trabajo, está presentando un riesgo de errores. (Ese riesgo puede ser aceptable, o incluso inevitable, si agrega una nueva función o arregla un área que ya tiene errores).
  2. Trate de trabajar en las compensaciones de costo / beneficio en su mente. Hay momentos en los que observa una característica y piensa “Sería bueno tenerla”. Cuando lo miras un poco más, podría resultar que tomará mucho más tiempo de lo que pensabas. En este punto, debe reconsiderar si la función aún vale la pena. Tal vez lo sea, y tal vez no lo sea. Un código más perfecto es una característica, por lo que debe mirar el costo / beneficio de ese código.
  3. A menudo, el código más perfecto de una persona es el código menos perfecto de otra persona. A veces, estas son solo una cuestión de convenciones o preferencias personales, y cambiar las cosas que alguien más hizo para que coincidan con sus preferencias personales podría no ser el mejor uso de su tiempo.
  4. Cree errores o elementos de seguimiento para las cosas que desea arreglar, y dedique algo de tiempo para dedicar a solucionar los que más le molestan. Eso le permite priorizar los que realmente le atraen, y si realmente programa el tiempo, evita que se vuelva loco por la cantidad de tiempo que dedica a ese tipo de artículos. Programa un promedio de 4 horas por semana laboral en este tipo de “impuesto”.

Ciertamente no soy la mejor persona para hablar de esto, pero creo que no debes renunciar a tratar de hacer que tu código sea perfecto (donde “perfecto” se define como “tan simple como puede ser mientras haces el trabajo” )

Sin embargo, priorice las cosas que necesita refactorizar (impacto versus esfuerzo) y considere si se deben dejar algunos cambios más profundos para la “versión 2”.

No se deje atrapar también por infinitas reescrituras: si nada ha cambiado significativamente en la tecnología subyacente o en su mente, no hay razón para creer que la próxima versión será mucho mejor que la actual. Solo concéntrate en refactorizar en este caso.

Para ayudar con la refactorización, intente construir su programa a partir de componentes ortogonales que le otorgarán simplicidad actual y libertad de acción futura.

La gente dice en retrospectiva que todo es fácil, así que llegue a ese punto y aproveche el hecho de que el código no está escrito en piedra stone

En mi opinión, el código es solo una herramienta para expresar mi mente. Como poema al poeta.
La pregunta que hizo no es un problema para mí. Porque como mi mente, no busco lo perfecto. Solo me concentro en su crecimiento.
Sobre el código, solo escribo de manera concisa y efectiva. Porque aunque tu mente es perfecta, el código no es tu mente misma. El código denota tu mente.
Entonces, la forma en que mido mi código no es el grado de perfección, sino el grado en que se expresa y el grado en que se expresará continuamente.
En realidad, el código al igual que el software es evolutivo. Tu mente tampoco es inmutable. Así que codificar para el futuro es la mejor práctica.

No voy a mentir, a veces es difícil. Especialmente cuando ves algo que es claramente ineficiente en un código que sabes que se llamará con frecuencia.

Sin embargo, una cosa a tener en cuenta: a menudo, el código que está viendo fue escrito por alguien muy inteligente, y tenían buenas razones para hacer lo que hicieron. Si tienes suerte, dejaron un comentario explicando por qué el código es como es. Si tienes más suerte, ese comentario sigue siendo relevante. Por ejemplo, he visto muchas construcciones extrañas que se implementaron debido a errores del compilador: el compilador rechazó la forma “simple”. Pero nadie volvió después de actualizar los compiladores para ver si ese hack todavía era necesario.

Entonces, supongo que si hay una respuesta breve, sería “si no está trabajando activamente en algún código, asuma que hay una buena razón para que el código sea como es, y continúe. Si usted” está convencido de que el código debe irse, tome una nota para analizarlo más tarde, o al menos hable con alguien más de su equipo para ver si conocen el historial.

Ver nuestras propias imperfecciones personales podría ser nuestra única oportunidad para crecer.
Las imperfecciones de las que somos conscientes en nuestro trabajo también son oportunidades. Que suerte tienes La conciencia es fruto cognitivo.
Muchas instalaciones que está creando ya existen en idiomas como Haskell.
Recrearlos en un lenguaje tan expresivo y poderoso es conveniente y gratificante. Un idioma como Racket podría incluso ser mejor, ya que puede crear idiomas específicos de dominio con tanta facilidad.

Date cuenta de que tampoco eres perfecto. Por lo tanto, cualquier cambio que realice probablemente introducirá posibles errores y complicaciones. Cuanto antes se dé cuenta de esto y adopte un enfoque más práctico, mejor.

More Interesting

Cómo practicar patrones de diseño en el desarrollo de software después de leer libros

¿Qué trabajos de programación requieren más inteligencia y creatividad que velocidad?

¿Cómo funciona el enhebrado en Ruby 2.0 y cómo es diferente de Ruby 1.9.2?

¿Es una buena idea que un profesional independiente ofrezca una tarifa comparativa y un bono de rendimiento premium en lugar de solo una tarifa premium con clientes conscientes del precio?

¿La ingeniería de software requiere buenas habilidades en matemáticas y física?

¿Cuánto cuesta patentar software o propiedad intelectual?

¿Cuáles son los mejores libros de lenguaje de modelado unificado (UML)?

¿Existe una relación entre el aprendizaje automático y la programación concurrente?

¿Se respeta a los desarrolladores de software en los bancos de inversión?

¿Cuáles son los algoritmos que todo profesional de software debe practicar para descifrar entrevistas de codificación?

¿Por qué Microsoft usó y aceptó Node.js y no Ruby on Rails?

¿Cuál es el mejor software de generación de plomo para la industria manufacturera / industrial?

Hay tantas API disponibles sobre el reconocimiento facial. ¿Cuál es la mejor opción para usar si quiero desarrollar un software?

¿Por qué las compañías de software tienden a tener grandes equipos dedicados de control de calidad, pero la mayoría de las compañías de Internet tienen pequeños?

¿Cuáles son los diferentes tipos de servicios de prueba de software?