La respuesta a su pregunta radica en la definición de programación, es decir, su visión de la programación como codificación es simplemente demasiado estrecha. La programación adecuada abarca la mayoría de los elementos de su lista: experiencia en el dominio, comprensión de las necesidades del cliente, diseño de soluciones técnicas sólidas, desarrollo de la arquitectura del software, integración de los comentarios de los usuarios, resolución de problemas más difíciles, facilitación de la reutilización, etc. Tenga en cuenta que solo dejé dos de sus elementos fuera de mi lista: proponer soluciones empresariales (es decir, resolver el problema sin usar una computadora) y asegurar la adopción del software (es decir, evangelizar una solución) como no una programación real.
Si lees los artículos de quora sobre cómo convertirte en un gran programador (o incluso en un gran programador), encontrarás la mayoría de los que hablan sobre la habilidad para resolver problemas y casi ninguno habla sobre el aprendizaje de un lenguaje de programación específico. De hecho, pocos programadores experimentados hablan de codificación. Simplemente no es relevante.
La programación toma un problema que no se especifica con suficiente detalle para que una computadora pueda resolverlo con un algoritmo conocido (es decir, una variación de un programa existente) y rellene ese detalle hasta el punto en que pueda resolverse. Para completar esos detalles, debe comprender el dominio en el que se expresa el problema, cuáles son las necesidades del cliente e integrar cualquier comentario del usuario sobre cómo funciona su solución prototipo. Si no lo haces, tu programa no resolverá el problema.
El acto real de construir un programa implica diseñar una solución técnica, lo que implica desarrollar una arquitectura de software, abordar problemas más difíciles y quizás facilitar la reutilización.
El único punto donde esto intersecta la codificación es que el “detalle suficiente” es el aspecto de la codificación. Para ser una solución de software real, el problema eventualmente debe ser codificado. La mayoría de la gente piensa que es la parte de la programación, cuando en realidad es simplemente el último detalle. La programación no es la codificación y nunca fue, pero la codificación es parte de la programación. En eso quiero decir: la forma en que se completan los detalles, debe ser de manera que el problema se pueda relacionar con un algoritmo (es decir, algo que una computadora pueda entender), para programar uno debe aprender a pensar algorítmicamente, y desde entonces esa no es una habilidad “natural” para la mayoría de las personas, mucha gente piensa que la parte de codificación es la totalidad de la programación. No lo es.
Por el contrario, adquirir experiencia en el dominio, aprender a obtener las necesidades de un cliente y aspectos similares no son exclusivos de la programación. Por lo tanto, algunas personas los descartan como parte de la programación, ya que serían necesarios incluso si el resultado no fuera un programa de computadora. No los hace menos parte de ello.
El único aspecto en el que la codificación es una habilidad relevante es el grado en que uno necesita completar el problema con “suficiente detalle”. Muchas personas carecen de la información y el rigor necesarios para obtener el nivel detallado correcto, incluso aquellos que se llaman a sí mismos programadores. Por lo tanto, tenemos sistemas mal equipados que no hacen exactamente lo que se supone que deben hacer. En ese sentido, los grandes programadores, aquellos que entienden los detalles y los implementan correctamente merecen elogios. No es que sean excelentes para codificar, sino que son grandes solucionadores de problemas que prestaron atención a los detalles y no cortaron esquinas en los lugares equivocados.