@pdcjlw1:
The reference created in the first example is indeed a reference, but it's empty. At that point joe is still null. This is useful if you are going to get the actual object from somewhere else and don't need to create a new one. Say, if you had a method that created a Guy object, you would do like so:
Dim joe as Guy joe = GuyMethod()
which is also the same as:
dim joe as guy = GuyMethod()
Really, you don't need to create a reference and instantiate it on different lines.
This:
Dim joe as New Guy
is the same as:
Dim joe as Guy joe = new Guy
If you did both lines like you had in your example:
Dim Joe as Guy Dim Joe as New Guy
You would get a compiler error because you told it to create two separate variables with the same name.
EDIT: On the subject of learning, you might check out this search and this search on MSDN. Some of the articles are a bit old, but the principles are sound.
I think it's funny that when you include the language you want to use, you get a whole bunch of people obviously looking for people to do their homework for them.