Machine code and punched cards I have been looking into the history of programming, and everybody and their grandmothers begin the subject with a claim more or less similar to the following:


  At first, programmers used machine code. Later, there were assemblers. Then, pseudo code, and finally Fortran came.


With some Google-fu I can very easily find examples of punch cards containing Fortran statements, COBOL statements, and some Assembly statements. Wikipedia has some punch card examples for short code.

But I am yet to find a reliable source explaining how programmers entered machine code into computers using punch cards. Or pseudo code using punch cards.

Were there really punch cards for machine code? Or when stored programs appeared they were already programmable with Assembly?
You normally started by entering a little loader program one word at a time by setting the bits with a line of toggle switches on the front panel, like this:



Wikipedia has a bit of explanation of the process. (Yes, it was tedious.) The little program would then read a larger program off of some convenient input device, which could be a card reader, although the machines I used in those days used paper tape. 

It could even be magnetic tape or some other magnetic storage device.



The larger program was the equivalent to the boot loader which is on sector zero of the persistent storage of whatever computer you used to ask this question, so the process is not that different.

A useful innovation was storing the initial boot loader loader in hardwired persistent memory (aka BIOS).

The use of symbolic codes to replace individual binary toggle switches (or equivalent) grew over time, and the distinction between assemblers and "higher level" languages is not a clear line. Fortran was certainly not the first higher level language, but it was extremely important.

(Some of the images come from David Gesswein's wonderfully nostalgic PDP-8 site.)