A lot of people in the software industry are told to specialize as quickly as possible (at least that's what my lecturers told me in 1st year CS). The problem with this is that a Java expert is an expert only in Java. A future change to a new technology will prove difficult and a lot of knowledge gathered will be wasted. However an OOP expert will be able to apply their knowledge to almost any future technology that they need to learn.
- What tools and principles have you learned that are effective across multiple domains?
- What principles / tools do you think all software engineers should learn early that will be useful in all future paths of their career?