I have been interviewing several freshers who were taught Java in engineering schools under computer science curriculum. Interviewing them highlighted serious problems with their education as well as with the system. This is a brief overview of the issues and ways to interview such candidates. At the end I have included my recommendation of courses for software engineers.

The students in most engineering institutes are being taught Java directly without a good introduction to object oriented development. At best they have cursory knowledge of OO concepts like polymorphism. It becomes nauseous to watch them repeat by rote the definitions without demonstrating a clear understanding of underlying concepts and logic. Such graduates become nothing more than structured C coders using Java.

Learning Java to most is knowing about the "packages", which is an incorrect approach. Java is not just about the libraries it provides. Anyone with logical ability can quickly pick new libraries.

Java is a language with a easy to learn syntax which should be first mastered. It is a platform which helps you to easily develop cross-platform and web applications. Knowing Java without knowing about the web (other than googling and email), for example, is fruitless.

Java programmers do not just need to know Java, the language. They need to have an understanding of basic software concepts like three-tier development, relational database management systems, quality processes etc.

Software developers with a narrow understanding of the field are likely to be a liability to themselves and to their companies. I look for people who have a healthy interest in the field and not the ones who have chosen IT solely because of its salary potential.

My approach to interviewing them is to find out their clarity of concepts in whatever little (or much) they know. I ask lots of "why". Getting them to justify even obvious questions like value of object oriented development or polymorphism sheds light into their logical underpinings.

My recommended courses for software enginners (1 semester each) would be:

  1. Introduction to computers
  2. Computer Language (Fortran)
  3. Algorithm and Data Structures
  4. Object Oriented Development (preferably using SmallTalk)
  5. Java Software Development
  6. Software Development Methodologies (includes Extreme Programming)
  7. Software Testing & Quality Processes
  8. Design Patterns in Java
  9. Enterprise Software Development
  10. Networking - TCP/IP, UDP, SMTP, POP3, HTTP etc.

Optional:

  1. Computer Security
  2. Artifical Intelligence