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?
I don't know your definition of 'program', but I'm fairly sure that any program will be a finite length string of characters over some finite alphabet.  For any finite set $X$, the set $X^*$ of all finite length strings over $X$ is countable (by the same sort of argument you would use to show the rationals are countable).
Well ,why don't we define a program as a circuit rather to give us an output of one's and zero's?

That is i am saying that rather than looking at the program at the highest level only. Lets look at what a program does at the physical level. All it does its take a set of 1's and 0's as input and then give us another set of 1's and 0's as output. So, the question will now change to whether the number of sets of 1's and 0's is finite or not?

Obviously this will be again be infinite. as the cardinality of this set of 1's and 0's will be an integer and the number of integers will be infinite so, again we can say that the number of programs is indeed infinite. 

Though i don't understand what is the definition of uncountable.

We normally say that the grains of rice in a pack are uncountable which is blantantly wrong as if i had the time and motivation i could definitely(very easily too i might add) count the exact number of grains in say 1 kg of rice.

Thus the concept of uncountable is in itself flawed and gives a wrong perception about things. According to me only one which is infinite can be considered as uncountable.