The machine had a paper tape reader and punch, a console typewriter, did arithmetic by table lookup, had 20K characters of memory, an assembler and a Fortran compiler. The nickname for the machine was CADET (can't add, doesn't even try).
To program we wrote programs with pencil and paper, went to the key punch machine, made listings of our card decks on the 407 Accounting Machine, corrected errors, made a paper tape on the card-to-tape machine and then brought the tape to the computer. You loaded the Compiler or Assembler from paper tape, then put in your tape and started assembling or compiling. The first thing the compiler or assembler did was to punch a paper tape with a program loader on it. The it started processing your tape. For the Fortran compiler when it detected an error it printed a message on the typewriter console - something like error 57 on line 12 and stopped!
You corrected your mistake, punched a new card, converted to paper tape and started again. There was also a Fortran pre-compiler that could process a whole program and print out multiple errors but it and the compiler weren't completely compatible so a clean precompile didn't mean a clean compile.
Punching the loader for the Fortran compiler took 7 minutes! This is where I learned that I was going to become a hacker/system programmer. I found the listings of the compiler, found out where it punched out the loader, and made a patched version of the compiler to skip this step. Having saved a copy of the loader on a piece of tape. I and other fellow students could now save 7 minutes of time for each use of the compiler.
This was my last term at Columbia. I returned to MIT as a special student for the spring term, got a part-time job in the computer center, and applied for and got a job at Honeywell writing a Fortran compiler - such jobs got me draft deferment because I was working for a "critical industry".