It's all to do with PATH's.
"./" means "this current directory", so that when you use this to precede the file, it tells the OS to execute that file with that name that is in the current directory.
If you are familiar with the windows implementation of the PATH variable, then Linux is similar.
My Windows PATH variable looks like this:
Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\PROGRAM FILES\THINKPAD\UTILITIES;C:\PROGRA~1IBM\CLIENT~1;C:\PROGRA~1\IBM\CLIENT~1\Shared;C:\PROGRA~1\IBM\CLI ENT~1\Emulator;
What this means, is that when I try to run a command (and I don't specify the directory) MS windows will look in each of the locations specified in my "path" variable for that executable file. If it doesn't find the executable, and the file is not in the current directory then you get the error "command not found" (or similar).
Linux has the exact same functionality. The path statement on Linux might look like this:
which gives you the directories that linux will look in for an executable.
One of the quirks of Windows v's Linux is that by DEFAULT Windows will look in the directory you are currently in for an executable, without having to specify the current directory in the PATH. Linux doesn't do this. If the file is in the current directory, then you need to explicitly specify this using the "./" reference.
With both OS, if the file isn't in any of the dir's specified in the PATH statement, then you will need to give the OS the FULL path to the executable file, so that it can find it.
The command to view the environment variables (including PATH) on both OS is "set" by itself, which will display all of the current environment variables. Just scroll up to find the PATH variable.