How do you know when you're ready (technically proficient enough) to dive into the world of JUCE?

Getting into JUCE is a step in fulfilling a childhood dream… I’ve always been a terrible programmer, and this time I’m really trying hard to be a less terrible programmer. I worked through some JUCE tutorials and quickly realised I needed to take a step back and build up my foundational C++ skills before moving on to incorporating another library.

I searched the forums which confirmed this was the right move. Someone suggested Thinking in C++ by Bruce Eckel, and somewhat depressingly, mid way through that I realised I needed another step back!

So I’m working through a book to work through a book to begin to work through JUCE.

Actually, that’s not entirely true either, I’ve paused the second book to focus on some practical challenges (I have completed all the challenges on edabit.com setting ‘very hard’) and I’m now working through some material on linked lists, in order to really grasp pointers once and for all.

While I’m enjoying all of this, I’m wondering if I might be getting lost in the world of abstract C++/programming theory, somewhat like the movie Inception, where you enter a dream inside a dream inside a dream and can’t find your way out anymore. I suspect this world is endless, and I won’t know when I have dipped my toes in enough!

My current plan of action looks pretty clear.

  • Complete this set of activities on linked lists in order to really grasp pointers
  • Build my own linked lists class so I get comfortable with classes with realworld applications. (i.e. away from the world of Class Sally : Human, Sally.doSomething() etc.)
  • Finish the second book (Teach yourself C++ in one hour a day)
  • Finish Thinking in C++
  • JUCE Tutorials

But I guess I’m just writing this up here for a bit of moral support/encouragement. Does this look like a good plan? Anything else you’d add/recommend/suggest?

1 Like

how about building a simple app/plugin with a function that you define yourself?
you’re likely to get trapped in perpetual student mode if you don’t combine your study with a graspable project. You will encounter automatically what you need to learn in the process, and there are a lot of things you can use, of which you dont need to know the specifics: that is the idea of a framework like JUCE… not needing to know every litttle thing.

4 Likes

I totally agree with this, its how I’ve generally learned programming, and its been a similar process for each language or framework I’ve learned. Having a project to build is a great motivator to learn. Just keep things simple to begin with. There are many ways to shoot yourself in the foot with C++, and unfortunately best learnt from experience… when it does happen though its important to understand why, and hopefully catch yourself before you do it again!

1 Like

…or contribute to your favorite FLOSS software/project…

1 Like

This is exactly why I’m here! :smiley:

Hi arifd, welcome and it’s great that you’re following your dream!
I wholeheartedly agree to what the others have said. It’s a balance act: Having a project ensures that you are learning what you really need. Going through theory can help to solve any frustration with your project, by making it less “trial-and-error all time time”. The “wondering” you talked about is most valuable, and helps to gain that balance again and again.

In my humble opinion (!), in a 600 page book about C++ there’ll be a lot of things you don’t need to create your first app/plug-in.

Learning pointers is to develop an awareness of all the things they don’t do for you. Raw pointers don’t keep an object alive, don’t delete it, don’t automatically become null, and so on. Having seen other programming languages, we often have assumptions that pointers would be more intelligent.
With pointers and object lifetime, I would lean towards a bit more theory and build a good understanding, because pure trial-and-error in this area can cause a lot of frustration.

Before getting into audio programming, I was a frontend web developer. I had read some books and knew I had to do a project now, otherwise it would be in vain. So I made a very run-of-the-mill synth plug-in, and to have more motivation, I wrote a tutorial about it.

…as far as I can see from where I’m standing now, C++ is an inception of a lifetime.

1 Like

Great words @basteln, I’d be interested to read your tutorial, just to see another perspective on it.

@guitarpolson, I made an audio panner all by myself actually. (Incorporating a slider and simply multiplying a couple of audio streams) And was pretty chuffed at doing so. I understand the DSP behind filters, so I wanted to make a simple IIR filter, and that’s where it got immediately problematic for me. One of the first words were ‘vector’ and that was always a scary word for me. (I’m comfortable with them now!!) Perhaps now is the time to get back in and give it another go!

1 Like

JUCE’s buildin IIR filter class works fine and is the perfect start, no mods needed there.
Just an idea for you: if you want to make a parallel multi band eq, you can make your own IIR filter lib version using SIMDregister, that will run your filters parallel using the SSE/AVX or NEON extension of your cpu. The SIMDregister class will do all instrinsics for you.

2 Likes

Darmn @guitarpolson, just as I was getting comfortable, you throw a bunch of new scary words at me! I know I can google the others, but what do you mean by ‘make my own filter lib version’?

well: the builtin class for IIR filters is simple to use and the best way to start.
https://docs.juce.com/master/classIIRFilter.html
Once you’re settled with that functionality, and have a plan, you can step up the game…

If you want to run filters in parallel you can use SIMDregister: it will basically do 4 filters in parallel on most cpu’s. (SIMD=Single Instruction Multiple Data)
But for that you have to make your own filter class, using SIMDvector< float > instead of floats…
So that is where you can learn to write fast optimised code for DSP, which is a very specific skill and very cool to have in your skillset.

3 Likes

Of course! This is the link. But it is ~6 years old now, and does not use JUCE. So nowadays I would recommend to use it just as another perspective (like you said), and not follow it closely 100%.

2 Likes

To be honest, I don’t think you need any help, just experience. You seem pretty interested and have a structured approach. Just start a project and continue reading whatever you like (Tutorials, books, blogs, …)
You’re doing fine :slight_smile:

2 Likes