Software plays a key role in almost every aspect of our lives, including transportation, communication, economics, and healthcare. We rely on software to perform complex and vital tasks for us, such as managing our finances, sharing memories of our family and friends, diagnosing illness, flying, or driving.
The complexity of these tasks, although it becomes transparent to us, does not disappear: it is distilled into the software on which our civilization depends. Indeed, we are already in the era of large-scale software systems, composed of millions of code components that interact with each other.
In such a scenario, the software cannot be understood without its data and the data becomes valuable only because of the software that analyzes it. In other words, software engineering aims to manage the complexity of the software, keeping it under control.
Data engineering instead focuses on how to collect, store and process huge amounts of data, which can be analyzed to gather information and support decision-making activities.