the counting argument
The counting argument is the engine behind 'undecidable languages must exist'. The intuition is the same one a parent uses at a party: if there are more children than chairs, then no matter how you seat them, some child stands. Here the chairs are the machines (programs) and the children are the languages. We show there are strictly more languages than machines, so some languages are left without any machine. The whole force of the argument comes from comparing the SIZES of two infinite sets, using Cantor's notion of cardinality.
Step one: the machines are countable. A Turing machine is described by a finite string over a fixed alphabet, and we can sort all finite strings by length and then alphabetically, giving a complete list machine 1, machine 2, machine 3, ... Nothing is skipped, so the set of machines is exactly as big as the natural numbers. Step two: the languages are uncountable. A language over {0,1} is just a way of saying yes or no to each string, which is the same as an infinite binary sequence (1 if the string is in, 0 if out). Cantor's diagonalization proves that no list can contain all infinite binary sequences: given any proposed list, flip the n-th bit of the n-th sequence to build a new sequence different from every entry. So the languages cannot be listed.
Comparing the two: countably many machines, uncountably many languages. A countable list can be put in one-to-one correspondence with the naturals; an uncountable set cannot. Therefore the map 'machine to the language it recognizes' cannot be onto: it misses uncountably many languages entirely. Those missed languages are recognized by no machine at all (unrecognizable), and in particular decided by none (undecidable). The argument is clean, but remember its limit: it is a pure existence proof and hands you no specific culprit.
Think of a language over {0,1} as an infinite checklist: row for ε says in/out, row for 0 says in/out, row for 1, for 00, ... Any attempt to list ALL such checklists can be defeated by reading down the diagonal and flipping each answer, producing a checklist not on the list.
Machines are countable; languages over {0,1} are uncountable, so the recognizing map cannot cover them all.
Countable does not mean small or finite: there are infinitely many machines. The point is purely relative — uncountable is a strictly larger infinity than countable.