Creo que los roles se superponen estrechamente - y en términos de habilidades individuales y antecedentes son casi idénticos. De hecho, muchos ingenieros de datos que conozco son o han sido también ingenieros de software.
Algunos conjuntos de habilidades comunes, aunque ciertamente existen excepciones:
- La educación es ingeniería, ciencias de la computación, TI
- Lenguajes de programación de alto nivel (Java, C++, PHP, JS, Python, etc.), ETL, lenguajes de datos y plataformas (SQL, HiveQL, MongoDB, Spark, Kafka, etc.), Lenguajes de computación científica (SAS, R, Matlab), Desarrollo móvil (C#, Swift/Obj-C)
- Redes, Interfaces, APIs (TCP/IP, REST, FTP)
- Nube, Virtualización, Contenedores, Computación distribuida (AWS/Azure/GCP, VMWare, Xen, etc.)
- Arquitecturas de software/datos (n-Tier, MVC, Cliente-Servidor, Edge, P2P, etc.)
Y podría haber más - dependiendo de las herramientas únicas y la pila del cliente o empleador.
Creo que la principal distinción radica en el objetivo del rol. Algo importante a considerar es que en ambos casos los ingenieros apoyan a los usuarios. Los ingenieros de software apoyan a los usuarios de las aplicaciones mientras que los ingenieros de datos apoyan a la ciencia de los datos. Los ingenieros de software son requeridos principalmente para aplicaciones - ya sea de escritorio, web, móvil - la intención principal es crear software para uso general, público o de la empresa. Los ingenieros de datos se requieren principalmente para construir y mantener la infraestructura de datos - las aplicaciones apoyadas son centradas en los datos como Business Intelligence, Advanced Analytics, o Machine Learning.
Ambos roles son constructores - pero los ciclos de vida de construcción son más diferentes que similares. Las construcciones de los ingenieros de software generalmente tienden a ser más ajustadas - mirando a los lanzamientos específicos vinculados a los lanzamientos de productos o al mantenimiento. Las construcciones de los ingenieros de datos tienen más variabilidad, por ejemplo, pueden ser fluidas y menos estructuradas para apoyar la exploración de datos y la creación de prototipos de ciencia de datos a algo más rígido como un almacén de datos o el despliegue de un lago de datos.
Otra cosa a considerar es que estos roles podrían evolucionar entre sí. Por ejemplo, una simple arquitectura de ciencia de datos podría convertirse repentinamente en una arquitectura de aplicación completa si se toma la decisión de convertir un simple experimento de ciencia de datos en una aplicación (por ejemplo, convertir un algoritmo de clasificación geoespacial en una aplicación de tráfico como Waze o un sistema de precios de sobrecarga para Uber). En este punto, los ingenieros de datos que participaron en el experimento original pueden pasar a formar parte del nuevo equipo de ingeniería de software. Y viceversa, una aplicación pública/de usuario puede convertirse en una fuente de datos para una investigación de ciencia de datos, momento en el que la base de datos de la aplicación original puede portarse a una arquitectura de datos para futuros análisis. En este caso, los ingenieros de software originales tal vez sean aprovechados para formar parte del equipo de ingeniería de datos para el nuevo proyecto.
Creo que la ingeniería de datos se convirtió en un término reconocible más recientemente debido a la demanda de la ciencia de datos. Esto sólo puede ser bueno para los ingenieros de software en general, ya que permite más trayectorias profesionales dentro y fuera del desarrollo de software general.