How is the set of all programs countable? I'm having a hard time seeing how the number of programs is not uncountable, since for every real number, you can create a program that's prints out that number.  Doesn't that immediately establish uncountably many programs?

In a programming language that works by translating whole compilation units (such as source files) at a time, the set of possible programs is countable.   An infinitely long stream is not considered a valid program, because the compiler never terminates and so there is never an executable form.
In a programming language which can interpret (or compile, on the fly) an indefinitely long stream of code (such as from an interactive session), and produce useful behaviors before reaching the end of the stream, the set of programs is uncountable.
So, for example, the set of possible interactive Lisp sessions (which are de facto programs) is uncountable, whereas the set of possible C programs is countable.
Each finitely long program corresponds to an integer, and so there can be a one-to-one mapping between programs an integers. Infinitely long programs correspond to the real numbers.
