The very first programs would be written in machine code and entered via a set of switches (or similar), one machine word at a time.
Then, using the above method, (still entering via the switches) it would be possible to write a simple assembler, which is a program that translates simple mnemonics into machine language.
After that stage is completed, the assembler program code can be re-written in its own language and used to assemble itself. This is a test that the program is working, and more importantly allows an improved, more advanced version of the assembler to be developed.
The assembler can then be used directly, and also to develop other higher-level languages.
Thus, each stage is used to enable the next, in effect pulling oneself up by one's bootstraps. That's the background to the term, booting-up.