I'm back in school as an adult, which is a strange and good thing to admit in public. Two tracks are running at once. One is a self-paced Intro to IT course where I read the material and take open-book milestones. The other is CS50x, Harvard's intro to computer science, which I'm working through on my own clock toward a certificate. And quietly underneath both of them is College Algebra, which I'll be honest is not my first run at it.
What I've figured out, finally, is how I actually learn. I don't learn a thing by reading it twice. I learn it by building it.
The CS50 part
CS50x is structured as weeks, Scratch first, then C for most of the run, then a pivot to Python, then SQL and a little web. You start by dragging colored blocks around and end up writing a spell-checker backed by a hash table that you have to free without leaking a single byte. Doing it in C first is the point: by the time Python shows up in week six, all the hard ideas already live in your head and the new language is just nicer clothing on them.
There's an honesty wrinkle I actually like. CS50 only sanctions its own AI tutor, a rubber duck that will ask you questions and explain errors but flatly refuses to write your code. So the way I use any AI around the course is the same: explain the concept, interpret the error, never hand me the answer. It keeps me inside the spirit of the thing, and it turns out a tutor that won't just tell you is a better tutor anyway.
The TI-84 side-quest
The part that's been the most fun is the least required. For College Algebra I started building a library of programs for my TI-84, the same graphing calculator I had as a kid, written on a real keyboard and pushed over a USB cable in a few seconds.
Here's the thing nobody tells you: writing the program is the studying. To program a vertex finder I had to actually hold vertex form in my hands, the whole a(x - h)^2 + k of it. To write the rational-zero candidate generator I had to genuinely understand the theorem, that the candidates are every factor of the constant over every factor of the leading coefficient. To make a radical simplifier I had to think hard about prime factorization, which I thought I already understood and did not. Synthetic division, polynomial long division, Cramer's rule, end-behavior, the distance formula, each one went from a procedure I half-remembered to a thing I could explain to a machine, which is a much higher bar.
By the end I had a couple dozen little programs. The rule I hold myself to: they're for homework and for checking my own work, never a way to skip showing the steps, and before any proctored test I ask my instructor what's allowed and clear them if I should. The programs don't take the test for me. They just made sure I understood the material well enough to write them.
That's the whole lesson, really. If I want to understand something, I should try to build it.