you can learn to do java or any other programming language at a university leve, or any other language they might have taught if you go back in time, but if you really want to understand software, you need to have competencies in many other different areas, such as requirements, architecture, testing, unit testing, integration testing, system testing, performance testing, not to mention configuration management, version control, differences between building frameworks and building applications, building reusable software, soa, and so on

Ivar Jacobson, Masterminds of Programming