Actualmente casi todas las actividades de la vida cotidiana son mediadas, aumentadas, auxiliadas, producidas y controladas por dispositivos electrónicos interconectados en redes; estos dispositivos y estas redes tienen como núcleo de operación al software. El software se compone de algoritmos que necesitan ser diseñados, analizados y optimizados para resolver los nuevos desafíos, sobre todo en escala y tiempo, que esta relación dispositivos-humano-entorno está demandando.