Random evening thoughts.
# How to learn virtually any STEM subject.
1) Go through prerequisites and fundamentals, math being the most important one. You won't be able to grasp important concepts the meaning of formulae is unclear. Speak Italian in Italy, speak math in physics class.
2) Fix you handwriting. Make sure it's readable, increase the size if necessary. Every symbol is important and there is no point in writing if you can't read it later on. Use A4 paper for complicated stuff to fit more on one page, especially if you went with "bigger is better" approach.
3) Don't break the sequence. Most textbooks follow the same narration order for a reason, and skipping a topic is generally a bad idea. Every concept builds on top of the previous one, so do yourself a favor and don't skip chapters.
4) Whenewer you don't understand something from the first attempt - spend anywhere between twenty minutes and an hour pondering the concept. Then make a break and afterwards do it again for 20 minutes or so. If this didn't help - open your browser, go to youtube and look the thing up. The thing you are struggling to understand is probably explained thoroughly multiple times, and different wordings usually solve the problem.
5) Don't hesitate to go back in your or to make your notes look nasty. Cross things out, write on margins, just make sure it's readable. Whenever it isn't - cross it out and rewrite. Notebook is not a project, it is a tool that helps you to understand the subject.
This may work for some cases, indeed, but trying to figure out, say, divergence theorem using top-down approach... I wouldn't do that, honestly.
@academicalnerd after having the basic knowledge, I like the "programming debugging" approach better. Instead of using a bottom up approach as you described, use a top down approach. Dive straight into the deep end and try to figure out what is causing the condition. Then question what is causing those causations, until you get to a point, where no further investigation is needed.