refactoring programming language