As someone who dropped out of highscool after 10th grade and never went to university/college one great way I've found for learning mathematics without any foundational basis is trying to learn CG/3D programming.
I always felt like maths was too abstract to keep me engaged, but when the output of your work is immediately observable visually it becomes a lot more engaging. There's just something so much more satisfying being able to "see" the results.
Plus as a self-taught programmer, I find it much easier to learn front-to-back by deciding on a desired outcome and working towards it, rather than progressively building up abstract fundamental skills that can later be combined to achieve a desired outcome (which is essentially the traditional academia path for learning STEM fields)
This is why I love to do game development without using a game engine. It gives you a reason to learn math, optimize your code down to the metal, all while having fun playing your game.
Yeah I've been self-learning 3D "the hard way" and have been really enjoying it.
Keeping it as low-level as possible, I'm using CycleJS for dataflow management and Regl.js for drawing via a CycleJS-Regl.js driver.
All state is explicitly managed observables/streams in CycleJS, which maps out to Regl.js draw commands, which are basically raw frag/vert shaders with some bindings mapping my state from CycleJS to appropriate uniforms/attributes.
I probably would be able to produce some usable output much faster if I used an engine like Unity or a framework like Three.js, but I feel like I would have missed out on gaining so much knowledge by only working with high-level abstractions and never having to even touch GLSL code.
I always felt like maths was too abstract to keep me engaged, but when the output of your work is immediately observable visually it becomes a lot more engaging. There's just something so much more satisfying being able to "see" the results.
Plus as a self-taught programmer, I find it much easier to learn front-to-back by deciding on a desired outcome and working towards it, rather than progressively building up abstract fundamental skills that can later be combined to achieve a desired outcome (which is essentially the traditional academia path for learning STEM fields)