We've been moving in this direction for a while now, decades even. Focussing on the desired behaviour over implementation, this is especially true for low level code (managed languages, ORM's, even reducing or picking algorithms, like the flashfill you mentioned).
Where I think the biggest innovation for this area is the big picture; the architecture. This is where most of the developers time and effort is spent today isn't writing new code, it's managing the complexity as software and systems grow.
Developers should only have to worry about expressing their intent and the system should take care of optimisation/ partitioning to make the most of the available systems, memory, IO and CPU. Devop's is ripe to be heavily automated with self tuning systems.
Going as far to fix legacy software is harder. Nobody sets out to write legacy code (I've yet to see a legacy system that was untouched because it was perfect). Making a legacy/ obfuscated system easy to work with and maintain is the holy grail of such software.
Where I think the biggest innovation for this area is the big picture; the architecture. This is where most of the developers time and effort is spent today isn't writing new code, it's managing the complexity as software and systems grow.
Developers should only have to worry about expressing their intent and the system should take care of optimisation/ partitioning to make the most of the available systems, memory, IO and CPU. Devop's is ripe to be heavily automated with self tuning systems.
Going as far to fix legacy software is harder. Nobody sets out to write legacy code (I've yet to see a legacy system that was untouched because it was perfect). Making a legacy/ obfuscated system easy to work with and maintain is the holy grail of such software.