automatic programming tool