Surprisingly, the tasks that higher-order functions accomplish aren’t always trivial to solve, at least not well. Learning to sort, search, and modify arrays is frequently the first challenge students in algorithm classes are faced with because it’s so easy to screw it up by exploding into quadratic time.
This is arguably all a programming language is. We are invoking pre-written commands.
I’m absolutely sympathetic to this point of view, though I don’t think we would have anything to gain by writing code for the challenges that we wouldn’t want to use in production. If you’re truly interested in the low level stuff, there’s no substitute for learning it in the context of computer science.
CS50 - Intro to computer science
Build a tiny compiler - Because why not?
Introduction to Algorithms - I actually prefer the Harvard course, but this one is excellent and taught by Robert f%&king Sedgdwick!
Functional Programming - This is difficult to get through because it’s buggy and very advanced, but you will implement all of the major higher order functions. The last part gets into observables, which I love, but require a separate library to use for now, so you may want to skip.