In the previous article1 we discussed some basic ideas in theoretical computer science like decision problems, languages, Turing machines, their encodings as strings over a finite alphabet, Universal Turing machines and some important computational complexity classes. In this article we discuss a powerful technique called diagonalization for arriving at lower bounds on computing resources for deciding languages. We will discuss the method, its success and possible limitations. © Indian Academy of Sciences 2010.