I often think language skills also has a significant impact on code quality. When I have trouble "naming things" (as opposed to "cache invalidation") I use dictionaries and thesauruses. "Naming" is an important part of organization and improving language skills help a lot.