Esta puede haber sido una pregunta difícil hace algunos años, pero hoy en día ya no es difícil eliminar la complejidad accidental.
Lo que Kent Beck dijo sobre sí mismo, en algún momento: "No soy un gran programador; solo soy un buen programador con grandes hábitos".
Vale la pena resaltar dos cosas, en mi opinión: se considera un programador , no un arquitecto, y se centra en los hábitos, no en el conocimiento.
La forma de Feynman de resolver problemas difíciles es la única forma de hacerlo. La descripción no es necesariamente muy fácil de entender, así que la analizaré. La cabeza de Feynman no solo estaba llena de conocimiento, sino que también estaba llena de la habilidad para aplicar ese conocimiento. Cuando tienes tanto el conocimiento como las habilidades para usarlo, resolver un problema difícil no es difícil ni fácil. Es el único resultado posible.
Hay una forma completamente no mágica de escribir código limpio, que no contiene complejidad accidental, y es en su mayoría similar a lo que hizo Feynman: adquirir todo el conocimiento requerido, entrenar para acostumbrarse a ponerlo a trabajar, en lugar de simplemente esconderlo en algún rincón de tu cerebro, luego escribe código limpio.
Ahora, muchos programadores ni siquiera son conscientes de todo el conocimiento requerido para escribir código limpio. Los programadores más jóvenes tienden a descartar el conocimiento sobre algoritmos y estructuras de datos, y la mayoría de los programadores más viejos tienden a olvidarlo. O gran notación O y análisis de complejidad. Los programadores mayores tienden a descartar patrones u olores de código, o incluso no saber que existen. La mayoría de los programadores de cualquier generación, incluso si conocen los patrones, nunca recuerdan exactamente cuándo usar las piezas y los controladores. Pocos programadores de cualquier generación evalúan constantemente su código según los principios SOLID. Muchos programadores mezclan todos los niveles posibles de abstracción en todo el lugar. No estoy al tanto de un compañero programador, por el momento, para evaluar constantemente su código contra los hedores descritos por Fowler en su libro de refactorización. Aunque algunos proyectos usan alguna herramienta de métrica, la métrica más utilizada es la complejidad, de un tipo u otro, mientras que otras dos métricas, el acoplamiento y la cohesión, se ignoran en gran medida, incluso si son muy importantes para limpiar el código. Otro aspecto que casi todos ignoran es la carga cognitiva. Pocos programadores tratan las pruebas unitarias como documentación, y aún menos son conscientes de que las pruebas unitarias difíciles de escribir o nombrar son otro hedor de código, que generalmente indica una mala factorización. Una pequeña minoría conoce el mantra del diseño impulsado por el dominio para mantener el modelo de código y el modelo de dominio comercial lo más cerca posible entre sí, ya que las discrepancias pueden crear problemas en el futuro. Todo esto debe tenerse en cuenta, todo el tiempo, si desea que su código esté limpio. Y muchos más que no puedo recordar en este momento. la métrica más utilizada es la complejidad, de un tipo u otro, mientras que otras dos métricas, el acoplamiento y la cohesión, se ignoran en gran medida, incluso si son muy importantes para un código limpio. Otro aspecto que casi todos ignoran es la carga cognitiva. Pocos programadores tratan las pruebas unitarias como documentación, y aún menos son conscientes de que las pruebas unitarias difíciles de escribir o nombrar son otro hedor de código, que generalmente indica una mala factorización. Una pequeña minoría conoce el mantra del diseño impulsado por el dominio para mantener el modelo de código y el modelo de dominio comercial lo más cerca posible entre sí, ya que las discrepancias pueden crear problemas en el futuro. Todo esto debe tenerse en cuenta, todo el tiempo, si desea que su código esté limpio. Y muchos más que no puedo recordar en este momento. la métrica más utilizada es la complejidad, de un tipo u otro, mientras que otras dos métricas, el acoplamiento y la cohesión, se ignoran en gran medida, incluso si son muy importantes para un código limpio. Otro aspecto que casi todos ignoran es la carga cognitiva. Pocos programadores tratan las pruebas unitarias como documentación, y aún menos son conscientes de que las pruebas unitarias difíciles de escribir o nombrar son otro hedor de código, que generalmente indica una mala factorización. Una pequeña minoría es consciente del mantra del diseño impulsado por el dominio para mantener el modelo de código y el modelo de dominio comercial lo más cerca posible entre sí, ya que las discrepancias pueden crear problemas en el futuro. Todo esto debe tenerse en cuenta, todo el tiempo, si desea que su código esté limpio. Y muchos más que no puedo recordar en este momento. mientras que otras dos métricas, el acoplamiento y la cohesión, se ignoran en gran medida, incluso si son muy importantes para un código limpio. Otro aspecto que casi todos ignoran es la carga cognitiva. Pocos programadores tratan las pruebas unitarias como documentación, y aún menos son conscientes de que las pruebas unitarias difíciles de escribir o nombrar son otro hedor de código, que generalmente indica una mala factorización. Una pequeña minoría conoce el mantra del diseño impulsado por el dominio para mantener el modelo de código y el modelo de dominio comercial lo más cerca posible entre sí, ya que las discrepancias pueden crear problemas en el futuro. Todo esto debe tenerse en cuenta, todo el tiempo, si desea que su código esté limpio. Y muchos más que no puedo recordar en este momento. mientras que otras dos métricas, el acoplamiento y la cohesión, se ignoran en gran medida, incluso si son muy importantes para un código limpio. Otro aspecto que casi todos ignoran es la carga cognitiva. Pocos programadores tratan las pruebas unitarias como documentación, y aún menos son conscientes de que las pruebas unitarias difíciles de escribir o nombrar son otro hedor de código, que generalmente indica una mala factorización. Una pequeña minoría es consciente del mantra del diseño impulsado por el dominio para mantener el modelo de código y el modelo de dominio comercial lo más cerca posible entre sí, ya que las discrepancias pueden crear problemas en el futuro. Todo esto debe tenerse en cuenta, todo el tiempo, si desea que su código esté limpio. Y muchos más que no puedo recordar en este momento. Otro aspecto que casi todos ignoran es la carga cognitiva. Pocos programadores tratan las pruebas unitarias como documentación, y aún menos son conscientes de que las pruebas unitarias difíciles de escribir o nombrar son otro hedor de código, que generalmente indica una mala factorización. Una pequeña minoría es consciente del mantra del diseño impulsado por el dominio para mantener el modelo de código y el modelo de dominio comercial lo más cerca posible entre sí, ya que las discrepancias pueden crear problemas en el futuro. Todo esto debe tenerse en cuenta, todo el tiempo, si desea que su código esté limpio. Y muchos más que no puedo recordar en este momento. Otro aspecto que casi todos ignoran es la carga cognitiva. Pocos programadores tratan las pruebas unitarias como documentación, y aún menos son conscientes de que las pruebas unitarias difíciles de escribir o nombrar son otro hedor de código, que generalmente indica una mala factorización. Una pequeña minoría conoce el mantra del diseño impulsado por el dominio para mantener el modelo de código y el modelo de dominio comercial lo más cerca posible entre sí, ya que las discrepancias pueden crear problemas en el futuro. Todo esto debe tenerse en cuenta, todo el tiempo, si desea que su código esté limpio. Y muchos más que no puedo recordar en este momento. s mantra para mantener el modelo de código y el modelo de dominio comercial lo más cerca posible entre sí, ya que las discrepancias pueden crear problemas en el futuro. Todo esto debe tenerse en cuenta, todo el tiempo, si desea que su código esté limpio. Y muchos más que no puedo recordar en este momento. s mantra para mantener el modelo de código y el modelo de dominio comercial lo más cerca posible entre sí, ya que las discrepancias pueden crear problemas en el futuro. Todo esto debe tenerse en cuenta, todo el tiempo, si desea que su código esté limpio. Y muchos más que no puedo recordar en este momento.
¿Quieres escribir código limpio? No se requiere magia. Simplemente aprenda todo lo que se requiere, luego úselo para evaluar la limpieza de su código y refactorice hasta que esté satisfecho. Y siga aprendiendo: el software todavía es un campo joven y se adquieren nuevas percepciones y conocimientos a un ritmo acelerado.