One of the issues sending a question to the internet, whether it's to Google, a forum, or Wikipedia, is that if you don't know a lot about the subject, it is hard to ask the right questions.
I'm not trying to figure out how to use Reaktor 5 or Csounds, I want the knowledge so that I could create those programs from scratch by writing all the code by hand.
Ok I'm tired and ready for bed, so apologies in advance as this will be wishy washy and probably contain errors:
Firstly this is a programming question. A lot of musicians using such software won't have a clue how it works underneath.
Things you want to have a bit of understanding about:
1) What is sound. Get a physics book or wiki and make sure you understand what it is. Soundwaves of compression travelling in the air.
2) As background it's slightly helpful to know how people perceive sound in the ear through the cochlear etc. And that slightly different versions are received in left and right ears, and the brain is able to interpret these differences to perceive direction, distance etc.
3) Understand how computers, and all digital audio devices (cds, dvds etc) output audio. It's done as samples. If you are interested you can read back on the history of this with things like the Fairlight CMI, Synclavier etc.
4) If you are doing things yourself (and sounds like that's what you want) you'll be writing raw audio data out for your device (PC, tablet etc) to play. There are various APIs for this. Which you use isn't that important to your understanding of the rest of the system, as they all tend to do the same thing.
5) Making a music app is about mixing together a bunch of sound sources (could be samples, software instruments, whatever) with the right timing, then usually rigging it up so you can add audio effects to the mix, like reverb, delays, flangers etc. There are lots of ways of doing this. You might be inspired by another program or come up with your own way of doing it.
6) Depending on what your app is to do, you will probably have to spend a lot of time thinking about your GUI, how your sequencer works, tracks patterns. There is no 'rule book', so it's not realistic to expect someone to lay out exactly how you should do this for your program.
7) For your sound sources I'd suggest starting with being able to just handle samples for instruments, and varying the pitch. That's pretty easy. I'd also suggest using a plugin system for your instruments, and your effects. You can also have a look at the specs for things like VST plugins if you want ideas, or want to be able to use them in your app (I dunno the practicalities of this).
8) If you want to use realtime MIDI input you need to think about this from the outset, because this will have a lot of design implications (low latency etc).
Right bedtime *yawn*. :)