Huh. I'd always kind of guessed that dd used if=input-file of=output-file as a way to sort of prevent the use of shell globbing and to not rely on the order of arguments (as cp does) since dd as it is often used can be a bit dangerous (I often found myself using it with disk device files) and you want to be extra careful in specifying the input and especially the output files.
For some reason, this seems to be vanishingly scarce knowledge in Linux / Unix circles.
There was someone on HN a couple of weeks ago who was astounded to learn that "modem" means "modulator-demodulator." Like it was some kind of forbidden magic.
Things that you an I consider entry-level knowledge are like scrolls and rune stones to tech people these days.
I had a similar experience, when ppl didn't know that codec comes from coder-decoder... It happened, when I called a Clojure namespace x.y.codec, with encode and decode functions in them.
I've also noticed how some of my colleagues hasn't realized, that the Rust serde library is short for serialize-deserialize.
You don't have to be a certain age to have used modems. You used one today to send that comment! Likely more than one.
Radio, cable, and fiber don't carry bits. They carry waves - analog signals - just like an old fashioned copper phone line. They all need a modulator-demodulator to convert between bits and waves.
Edit: wikipedia agrees with your IBM origin story https://en.wikipedia.org/wiki/Dd_(Unix)#History