Design patterns are fairly complex in my opinion. e.g.
You must be registered to see links
Always makes me think wait is this the best way? Or will this turn out like it should be? And etc. Really abstract questions and etc. Pretty cool though.
I have no idea about compilers, drivers, etc. Interpreters are probably a lot easier i would think. Still pretty complex though. Making an IDE of some sort is pretty complicated too. I tried to make my own IDE, and it was pretty hard Lol. Implementing Umm. Code breaking, and like. Error checking, you have to do with this one exe file i forget what its called. Just the interface stuff seems kinda hard to do. Unless there's a component that does most of it already.
A lot of stuff takes practice too. Sometimes you forget what you can and cannot do. With classes, and patterns, and etc.
Other advanced topics would be like: Anything class related, Abstract Base Classes, other abstractions.
And then you have the libraries, and etc. built with that code, and that opens up another can of spahgetti sometimes.
E.g. trying to learn Windows API Lol. Can be frustrating sometimes.
But hey, courses are made, and probably help a lot. And a lot of this has been made easier. But it depends what you're doing i guess. Or what you use.