¿Cuál es la diferencia entre el desarrollo de sistemas y el desarrollo de software?

¿Cuál es la diferencia entre el desarrollo de sistemas y el desarrollo de software?

Depende de lo que sea el "sistema". Si el sistema consiste en un único componente de software, entonces la diferencia entre el desarrollo de sistemas y el desarrollo de software es excesivamente pequeña. El desarrollo del sistema está subsumido dentro del desarrollo de software.

Un sistema más complejo, sin embargo, podría consistir en múltiples componentes de software (tal vez todos ellos operando en una sola CPU/instancia de un entorno operativo o potencialmente podrían estar operando en CPUs geográficamente separadas). Entonces el desarrollo del sistema se complica y entra en cuestiones como Cómo se ha diseñado el software (por ejemplo, ¿el sistema está centralizado o distribuido?). ¿Qué funcionalidad maneja cada componente? ¿Cómo se comunican los componentes? ¿Es el sistema escalable añadiendo más componentes? ¿Qué ocurre si falla un componente? ¿Cómo se pone en marcha el sistema? Y así sucesivamente. Ahora, el desarrollo del software se produce a un nivel inferior y más detallado que el desarrollo del sistema.

Cuando trabajaba para Qualcomm, el sistema era un chip de teléfono móvil. El diseño del sistema no sólo implicaba el software (y de ahí las preguntas anteriores) sino también el hardware. Cuántas CPUs y GPUs tendría el sistema? ¿Cuántos periféricos de hardware serían compatibles? ¿Compartirían algunos periféricos recursos (pines, buses, etc.) que podrían impedir ciertas combinaciones de periféricos? ¿Cuál es el modelo de memoria? ¿Las CPU (y las GPU) tienen memoria dedicada o compartida? ¿Cómo es el escalado de voltaje y reloj (los voltajes bajos y los relojes lentos implican una mayor duración de la batería / los relojes rápidos y los voltajes más altos implican una mayor potencia de procesamiento)? ¿Cómo se comunican todas las partes del chip? ¿Cómo se pone en marcha el hardware (así como el software)? Y así sucesivamente.

En una parte anterior de mi vida como ingeniero que trabajaba con sistemas robóticos, el diseño del sistema incluía cuestiones mecánicas (¿cuánto pesa? ¿a qué velocidad se mueve? Qué capacidad de batería se necesita?) y cuestiones físicas (detección auditiva, visual y táctil, por ejemplo).

Para resumir, el desarrollo de sistemas se centra en el sistema en su conjunto y en cómo todos los componentes que lo componen forman el sistema. El desarrollo de software suele centrarse en un único componente del sistema, aunque, como se ha indicado al principio de esta respuesta, puede haber elementos de desarrollo de sistemas dentro del desarrollo de software.