Personally I’d start with the easier languages and gradually work downwards. I started in BASIC, then Pascal, small amounts of Z80 and 6502, C, Java, C++ and my current job is web technology and Java mostly.
The only thing I have ever programmed was beep noises on a computer that was either a Sinclair Spectrum or Commodore 64, that was years ago from memory it went something like this beep (2,3) or something along those lines!
I think I am going to enrol with the Open University on a programming course, that should cover HTML, Java and C++
2. I suggest you to start with arduino tutorials, as a kind of “training wheels”. There are too many programming classes that focus on programming for a desktop computer or a smartphone, or for websites - you don’t want to get into that - you’ll have to unlearn a lot if you get into that. So I suggest starting by arduino (which uses a subset of C/C++), and then digging deeper from there.
3. You can create software synths (plug-ins) with no knowledge of electronics - this knowledge would come into play only if you’re interested in accurately emulating analogue circuits.
You need some good knowledge of electronics to create firmware for a hardware synth - because your code will control circuits in the microcontroller (peripherals) and outside of it.
If you aim for understanding how telling a Computer what to do works (aka programming) and not for designing a Synth like the Shruthi with that platform you may have a look here for the Toy Version (just like my son) and here for embedded System environment for total clueless starters (just like me)
I’d say the big difference between the lower level languages like C and the higher ones is memory allocation and access. Pointers in C tend to confuse a lot of people, they’re not that bad but they cause a lot of crashes for beginners.