This is a good multiprogramming definition. The important point is to realize that multiprogramming is an illusion. What the computer does is create a “thread” for each process. It takes turns switching between threads, and it does it so fast that to the end user, it appears to be happening all at once.
I’ve written software code to demonstrate this process using loops. The computer will start counting from 1 to 100 in 3 different threads. It may get to number 50 in the first thread, and then start counting from 1 in the next thread until it gets to 37 or whatever, then it will jump to the third thread and start counting. It will then jump back to the first thread and pick up where it left off. It does this until it completes all three threads, and I have it display the sequence so that you can see what thread it’s on and what number it's processing.