Yeah, I recommended PD because it’s free.
I agree about JUCE being the next step. It’s not the only option but I think it’s the best in class and free for non-commercial use.
My progression was that I tried to make a 32-partial additive synth in Max... It worked, but it was a mess. I now know that that was entirely my fault
But I found JUCE and decided to remake it in that because I naively thought it would be faster and easier. In some ways it was but the reality is that 32 partials * 16 voices is going to slam almost any CPU, and I found myself too tempted to try to optimize it prematurely. Later I learned that a proper build without the debug flags enabled was the right way to do that
Anyway, around that time I miraculously found a DX100 in my family’s piano bench, that nobody seemed to know about. I brought it home with me and encountered the inevitable “this isn’t great to program, I wish it had some knobs, maybe I could remake it JUCE.” So I basically did that. i got it to about 90% complete before I lost interest, but I learned a lot from it. Most of what I struggled with was that the conventions for managing the UI that are put forth by the JUCE tutorials (which are nonetheless a great way to get started) are difficult to manage when you have a complex enough UI. My plugin got left in a state where that really needed a rework so it wouldn’t take me forever to make changes to it, and in the meantime I upgraded JUCE and found that some of it had broken compatibility and that I would have to fix that as well.
But really, it is abandoned for now because I found that I was programming all day for work and then in all of my free time, which was overloading me and not actually leaving me time to make music. I also wasn’t interested in selling a commercial VST that was not my own idea, and so that led me to use Max4Live for my smaller personal projects, and then eventually to purchase Max itself for larger ones. I use it more as a compositional tool at this point and build small, purpose-made synths to facilitate those, rather than trying to make general purpose synthesizers in it. I did make a Prophet 6 “clone” in Max4Live that I use often, and occasionally I tinker with better ways of rewriting in order to improve my skills.
In summary, I’d say that I’ve learned enough JUCE to know how to learn whatever I need to build whatever synth I want as long as I understand how that synth works. However, prototyping that synth would be much faster in Max, so that’s how I do it, and so far I haven’t come up with something that I felt was worth the effort of rewriting in JUCE. If you want to do this stuff on your own you need to learn to be a good instrument designer as much as a programmer.