I could teach it. Hands, down.
I am going to take the second class in the sequence for the same reason. My guess is I know most of it.
While in school I got as far as Linear Algebra. So, I'm OK with most math. Although, frankly, I haven't really had to use Calculus very much over the years.
My approach has always been to take deep dives into whatever I've had to tackle. When faced with having to do image processing work on FPGA's and write convolution filters I simply bought every relevant book I could find and jumped right in.
When I came across a problem that could benefit from applying a Genetic Algorithm training a Neural Network, same thing. I have yet to find something I cannot tackle.
You have to keep in mind that what was taught in colleges and universities back in 1984 or thereabouts is stone age when compared to today. I took a C class one semester. I nearly fell asleep. I had already done more on my own than the professor was covering in this class. I was already working with multidimensional arrays when he was covering how to print to the console.
The other reality is that nearly nothing I've done over the last fifteen years even existed back when I was in school. The only way I could have done multi-gigahertz FPGA work was to learn it all on my own. When I was in school I don't even think PAL's existed. I designed and built my first computer. That means, design, buy the chips, wire-wrap the boards and use a dumb terminal and a hex keypad to bootstrap the thing. Different times.
With regards to your question about my grasp of software engineering. Well, you know that movie where the kid goes "I see dead people". I see code. After having done so much work across a number of domains most solutions develop in my head intuitively without thinking. Again, the MIT course I just finished being an example. I really didn't have to think much about any of it. I just sit down and write code. Good, clean and efficient code. Comments and all.