The evolution of offline programming