¿Por qué tanta gente glorifica la programación cuando la codificación es una parte tan pequeña del desarrollo de software?

Cuando miras un producto terminado a nivel macro, (no solo un software) siempre habrá una amalgama de varias disciplinas y habilidades. Todo el proceso será la combinación de muchos procesos pequeños. Aunque todos estos procesos son importantes, y cada uno es requerido para que un producto esté completo, siempre habrá uno u otro proceso que será más importante. En desarrollo de software sería codificación / programación. Sí, necesitamos que las personas hablen con el cliente y comprendan sus requisitos, analicen esos requisitos y alcancen un acuerdo de diseño. Sin embargo, todas estas decisiones eventualmente se reducirán al hecho de que los programadores podrán codificarlo y entregar un producto que pueda ser utilizado por un usuario final. Por lo tanto, la “programación” se presenta como el proceso más sólido en todos estos procesos.

Además, no siempre podemos generalizar que los programadores tengan todo el protagonismo. Dennis Ritchie y Steve Jobs murieron el mismo año (Jobs murió probablemente hace una semana). No habrá computación moderna como la conocemos hoy sin Ritchie. Todo lo que hacemos en las computadoras hoy se remonta a Ritchie. En el otro extremo, Steve Jobs, que era una personalidad carismática, fue glorificado por nuestros medios de comunicación y Ritchie fue casi olvidada.

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.

“Al principio estaba programando. Fue genial”.
“Los problemas aumentaron. Los probadores fueron concebidos. Y estuvo bien”.
“Los problemas aún aumentaban. Nacieron los diseñadores y las metodologías de SW. Eso también estuvo bien”.
“Los problemas no se detuvieron. Los estándares crecieron. Eso todavía estaba bien”.
“Los problemas nunca se detuvieron. Nada de bueno en eso”.
(‘Crónicas de desarrollo de software’ – Anónimo, siglo XX)

La programación es lo que las personas normales saben sobre el desarrollo de software. Los medios no ayudan en eso (hackers de películas, chicos nerd en un teclado).
No sé qué papel juegas en el desarrollo de SW. Estar orgulloso de ello.
Conozca y promueva el valor que agrega a la cadena de valor de su producto. Estar más orgulloso de eso.
Sé consciente de tus propias cualidades. Se Orgulloso de ti mismo.

(Esto fue escrito por un autor anónimo, que desempeñó un papel desconocido y un tanto esotérico en una gran empresa de desarrollo de software. Tenga piedad de él)

Porque el código entrega resultados y los resultados mediocres son a menudo más impresionantes que ningún resultado en absoluto.

Además, los marcos de trabajo en estos días pueden brindar tanto valor que un idiota que esté familiarizado con ellos puede sentirse como un superhéroe en comparación con un científico en computación, un ingeniero de software u otro profesional que no se enfoca tanto en asimilarlos.

¿Hay algún resultado (adverso) del comportamiento actual? Si no, ¿por qué cambiaría la gente?

Vea mi pregunta relacionada: ¿Es un problema que la educación en informática esté completamente inclinada hacia la resolución de problemas de tipo de algoritmo lineal?

No es una pequeña parte del desarrollo de software, es el 45%, otro 55% es idea.
Pero bueno, la programación es fácil, si lo sabes, las personas sin experiencia piensan que necesita 300 IQ o algo así, por eso

Es la parte que más se empuja en la escuela, tal vez eso tenga algo que ver con eso.

También es una etapa de desarrollo donde se toma una gran cantidad de decisiones importantes.