The idea of different infinities is very important to programmers. In particular, they are the underlying reasons for undecidable problems.
You can write any valid computer program as a string of finite length from a finite alphabet. This means the set of programs is countable. (This should not be surprising--everything is ones and zeroes, after all, so you always end up mapping your program to a really large natural number to use it.)
EDIT: To clarify a bit--the set of computer programs is infinite and countable. I sometimes use "countable" to mean "countably infinite" which is a very bad habit. My only justification is that the fact that a finite set is countable is trivial and therefore boring.
The number of functions between two countably infinite sets is not countable. This is also fairly easy to see: the set X → Y can be easily mapped to a subset of P(X × Y) where P deontes a powerset. All this says is that you can describe any function from X to Y as a set of ordered pairs (X, Y). For two countable sets X and Y, X × Y is also countable; if either X or Y is infinite, X × Y is also infinite. This means that P(X × Y) is not countable, so X → Y is not countable either.
EDIT: My justification for why X → Y is uncountably infinite if either X or Y is countably infinite (and both are countable, of course) is not correct. Just mapping something to a subset of P(X × Y) doesn't actually tell us anything. However, the actual fact is correct even if I don't show it, so I'm going to figure out (or, honestly, probably look up) why this is the case and amend my post further :P.
So the number of programs we can write is countable; the number of functions we can write over interesting domains (like natural numbers or integers) is not countable. There has to be an infinite number of functions we cannot write programs for!
So we have managed to show, in a fairly simple way, that there have to exist undecidable problems. The real trick is that we can see this without having to construct a problem like that or even reason much about programs in general; all we have to know is that programs are strings and have finite lengths.
The other neat bit is that this reasoning is very easy to adapt to proofs rather than programs. After all, mathematical proofs are also finite-length strings! And, for example, propositions about the natural numbers are essentially functions ℕ → {true, false}. So you can't prove all of them.
So now we also see a deep relationship between proofs and programs, without actually doing much thinking about proofs or programs.
We can also see that I'm no mathematician and either made some blatant errors or was not very rigorous throughout :P.