Jesus, I feel old now, and I never even had to mess with punch cards or batch processing. Hell, I only had to use a hardcopy terminal once or twice over the course of my college career.
Here's how we did things back in the late Cretaceous (circa 1986). I was working on VAX/VMS through a VT220 amber-on-black character-based terminal that could display in either 80x24 or 132x24.
First, you fired up the text editor:
$ EDIT/EDT HELLO.C
EDT was the VMS equivalent of vi, falling somewhere in capability between DOS edlin and Notepad. You typed in your program text
saved it to the file, and then exited the editor.
Then you ran your code through the compiler:
$ CC HELLO
This translated the source code in HELLO.C and generated the object file HELLO.OBJ. The object file contained the machine code for the program, but it wasn't in an executable form yet. For one thing, the actual binary code for the
printf call isn't present; there's only a placeholder for it. You still had to run the object file through a linker, which incorporated the binary code from the standard library (and any other libraries you need) and formatted the file so that it could be recognized as an executable:
$ LINK HELLO
The result of this step is the file HELLO.EXE, which is the executable version of your program.
The procedure's pretty much the same on any modern system; it's just that the specific toolchains are different. For example, the sequence of commands on a typical Linux system would be
$ vi hello.c
$ gcc -o hello hello.c
$ vi hello.c
$ gcc -c hello.c
$ ld -o hello hello.o -lc
Since I grew up in this environment, I never understood how someone could need an IDE just to write their code. However, early this year I started working in Java, and while Eclipse has its many, many faults, I can understand how someone can come to rely heavily on an IDE to get their work done. Since Java's such a huge language compared to C, and since I'm still trying to get the finer points of the syntax down, it helps to have a smart development environment that knows what packages particular types are in and helps me organize the imports.