I find Prolog very challenging for several reasons. I identified 3 levels of difficulty with it:
1) Syntax
2) Reasoning and Paradigm
3) Implementation
1) is things like "\=" for not equal. Those are mostly just inconveniences and Prolog's age is showing there. But I still don't have a firm grip on the pattern matching of lists.
2) is the whole stuff around switching mentally from functions to predicates. I often find myself trapped in trying to reason functionally and if I was very proficient in functional programming that might even work. But so far I'm still at the level of trying to wrap my head around the fact that there no return values and that sequencing via comma (which is actually a conjunction - AND) will be evaluated "kind of" procedural by serial evaluation. This makes it seem familiar but conflicts with the actual paradigm.
3) is the most critiqued aspect of it. There are many Prolog implementations it but they all seem to suffer from the same problems. Like Prolog getting lost in some tree which forces the developer to understand what the interpreter is doing to help it find the right branch. Also the aforementioned confusion that logically (A AND B) is identical to (B AND A) but in Prolog isn't and can make the subtle difference between the program finishing successfully or running until memory is consumed.
In my opinion there is reason why Prolog is one of those subjects that are brought up here again and again and again but without any justification with regard to something about it being "news". It's a very fascinating paradigm and I find it very sad that it doesn't really get any attention today. Just check the list of literature about it - there's almost nothing and what there is either old or distinctively academic.
One reason clearly is the lack of convenient interfacing to other languages. Because even a Prolog genius would probably admit that there is no point in trying to implement anything IO with it.
I'm working through Learn Prolog Now. Which is a good book. Already ordered Prolog in Adventures. I could see several projects for it that would be a natural fit but I already anticipate that eventually my enthusiasm will fade at the point where I'm forced to dig into SWI as soon as I leave the toy level. SWI is also kind of weird. It seems to be the best choice but there are surprisingly trivial aspects about it that I find very unsatisfying (I can load a DB with "[filename]." but I cannot purge it before loading another DB without restarting the session ... or does somebody know how that's done?). That's basically what I observe as far as my as well as other people's experience goes with it: very promising and exciting but eventually disappointing. It shouldn't be like that.
I also believe that symbolic AI / Prolog and deep learning could very well benefit from each other.