Para mí la distinción es muy clara.
El diseño es solo eso, estás diseñando la solución y cómo la construirás. Esto podría cubrir todos los requisitos reunidos o podría ser la solución técnica para los requisitos proporcionados.
La programación debe ser la construcción del software siguiendo los requisitos completos y las especificaciones de diseño y los planes de prueba. (Bien, entonces es raro obtener buenos y completos requisitos).
- ¿Cómo acceden los motores de JavaScript al DOM?
- ¿Debo aprender Ruby on Rails 2017 para comenzar una startup?
- Cómo restablecer mis funciones de JavaScript
- Cómo ser un diseñador web profesional y qué recursos se necesitan
- ¿Cuáles son los criterios más importantes al seleccionar un lenguaje de programación para el backend de un sitio web?
En el mundo real, un arquitecto crea el diseño para un gran bloque de torres, los ingenieros elaboran las especificaciones para que se destaque y cumpla con las regulaciones. Los constructores construyen el bloque de la torre, excavan los cimientos y vierten el hormigón.
Durante el proceso de construcción, todavía hay que tomar decisiones sobre el diseño, las especificaciones y cómo construir físicamente el bloque de la torre. Pero cada conjunto de habilidades sabe lo que está haciendo y su área de responsabilidad.
En el software, las distinciones entre los diferentes conjuntos de habilidades pueden fusionarse, por lo que el programador que necesita escribir el código a menudo tendrá que hacer preguntas sobre lo que debe lograr. Por lo tanto, el programador termina actuando como arquitecto, ingeniero y como constructor, lo cual no es una situación ideal, pero sucede muy a menudo.
Construyendo en el mundo real del acero y el concreto, todos los profesionales están altamente calificados en diferentes disciplinas, si un ingeniero de estructuras dice que el acero debe ser de un tamaño determinado, está construido para ese tamaño. Las personas que encargan el edificio no determinan el tamaño del acero utilizado ni ignoran las normas de construcción. (OK puede depender de dónde se encuentre en el mundo)
En el desarrollo de software, el número de personas que tienen calificaciones relevantes en esa materia puede ser muy bajo y cada uno tendrá una opinión. Las personas que comisionen el software esperarán que sus opiniones sean tomadas en cuenta.
Si está construyendo un edificio de 20 pisos, no puede agregar otros 10 pisos en la parte superior si los cimientos no pueden soportar el peso. En lo que respecta al software, no hay problema, volveremos a trabajar todo durante la noche una vez más. Quizás no sea sorprendente que tantos desarrollos de software tengan problemas.