Current sophomore studying CS -- I've been thinking about how to get a deeper understanding of what I'm studying, and how to self-study the topics I'm interested in more intentionally.
Sometimes, it feels like I don't remember the content I learned in a class the quarter after I took them. I'll certainly recall general ideas/concepts, but I feel I'm missing two things -- first, a very strong sense of how to apply what I learn, and second, some of the important minutia (is big endian stored back to front or front to back? how do I structure and inductive proof? etc).
These are things I can look up quite quickly, and aren't the best examples of what I should be optimizing for if I'm looking to work in a traditional software engineering context, but I feel like I should know them off hand. I've looked into spaced repetition for memorizing certain things, but I feel like that doesn't get help with what I'm seeking here, which is a foundational/first-principles understanding of CS.
This was all somewhat prompted by this comment on reddit -- https://www.reddit.com/r/computervision/comments/7gku4z/comment/dqkkbd9/?utm_source=share&utm_medium=web2x&context=3. I was daunted by these questions, but it feels like I could answer them if my understanding of certain things went beyond a surface level (i.e. integer overflow).
My ask(s) are these -- first, do you have any recommended books/resources that did a lot for you in developing a foundational understanding of CS, second, how should I go about intentionally filling gaps in my understanding, and third, how can I get better at being able to apply what I've learned to a new problem/setting.
Apologies for the long, rambly post in advance. I truly appreciate you reading this, please let me know if you have any clarifying questions.