I feel like beginner programmers should experiment with the following concepts in order.<p>1. File I/O to plaintext files. fread/fwrite, or whatever equivalent is in your programming language (Python fd.read() or whatever) is your first step into I/O. Especially because you can open the file and read it yourself as a human.<p>2. Piped I/O using Unix Pipes and/or Fifos. Pipes (./program1 | ./program2) are by far the easiest interprocess communication mechanism. They're not very flexible, but they're obvious to understand once you have mastered simple File I/O.<p>3. TCP Sockets are the natural evolution from pipes. Your first TCP Server will not be socket/bind/accept, since this is a bit complicated. Instead, you should write nc -l (port number) | ./myprogram, where netcat does the heavy lifting for you and creates a listening server for ./myprogram. You then have the ability to write ./myclient (which communicates to netcat, and therefore to "myprogram").<p>4. You finalize this by writing the server side without the netcat training wheels, to learn the socket/bind/accept dance.