Thanks, Keith! No apology necessary. Perhaps I was abrupt (If you had seen an abusive message from me, you would know!).
Lemme try again on the actual questions...
"How come Nasm was written in C???"
You'd have to ask the original authors, but I assume for "portablity". While Nasm will emit machine code (what a "program" is) for x86(_64) only, it was intended that Nasm could be run on any machine. Nasm jumps through hoops to guarantee that it will emit little-endian code, even if it's running on a big-endian machine. At the time Nasm was written, the most commonly available build system available was C.
Now when we come to the "first program"... a "program" is a series of bytes - opcodes and their operands (and "data" for these to operate on). What you need to create a "program" is some way to place bytes in consecutive memory locations. I understand "front panel switches" were pretty early, although I suspect that even more primitive methods were used at "first". A byte was constructed a bit at a time, and a button(?) was pressed to enter it into memory, and set the next memory location for the destination for the next byte. When finished, the "run" (from whatever address we started at) was pressed. As soon as possible, I imagine, one wanted to enter a few bytes that would "read N bytes from the paper-tape reader (or whatever), load them consecutively starting from memory location M, and jump to M". Keyboards came later...
As I said, all this was before my time...
Best,
Frank