We can then think of the machine description $\langle M \rangle$ as the source code of $M$. If we do this, then the Halting Problem is really concerned with the decision problem
Given the source code of a program and an input string, will the program halt if fed the string as input?
There are many programs that take program code as input. A compiler is a well-known example; a specialized text editor is another.
If the Halting Problem were decidable, there would be a predictor program that could correctly predict the behaviour of any given program, given its source code. We could then modify the predictor program such that it would always behave differently from the program that it was analyzing. But then we could of course feed this modified predictor program its own source code and predict how it would react. And the conclusion would be that its behaviour would be different from its own behaviour -- and this is of course a contradiction.