yeoj:
I'm planning on having my Arduino in a lake and transmit water quality data to my PC. I believe Wi-Fi or Bluetooth is my best option due to the range.
WiFi is rarely the best choice, unless you need or want ubiquity. Bluetooth may be better but has a relatively short range. Have a look at XBee before making your final decision.
Since the Arduino and PC won't have access to the Internet, how would I go about sending the water quality data to the my PC?
Connecting across a network is fundamentally similar to physically connecting two devices with a serial cable. Unlike a serial cable, network endpoints are defined virtually, by numeric addresses. The network protocol stack provides the interface between an application (at OSI layer 7) and the physical connections between devices (at OSI layer 1). Provided you have a functioning stack and the right address , your application does not need to worry too much about how the network might make the physical connection.
The Internet is built on the TCP/IP transport protocol. There used to be many other transport protocols but the Internet caused TCP/IP to become the de-facto standard. A short time later, the Sockets API was created to standardise the interface between applications and the TCP/IP protocol stack. In brief, you open a socket, connect to an address and you have yourself a data stream, just like a serial cable provides a data stream.
I'm not really understanding how the Arduino will be able to communicate/connect to the PC. Would I use a program like RealTerm and have the Arduino send the data to that?
You could do that, or you could use a PC development environment to roll your own application. Virtually all programming environments provide a Sockets API these days. Some are easier to use than others.
I'm kind of struggling with this so all information will help!!
There are many resources covering the OSI 7 Layer Conceptual Model, which is a great place to start learning how modern networks work. Note the word 'Conceptual' in the name. Real World protocols do not map exactly onto the OSI model.
After briefly familiarising yourself with the principles of the OSI model, which is all you need to do. You might go on to find a high level language (like BASIC or Python), with a Sockets interface and send some data between two PCs. With the understanding such an exercise provides, you would be in a much better position to start programming a sockets application using lower level C/C++.