Writing: both learning how to write, and then practicing writing. Specifically, writing as a way of working through a problem and explaining it.<p>I talk about this in more detail, and suggest a book to read about writing, here: <a href="https://codewithoutrules.com/2016/06/15/writing-book/" rel="nofollow">https://codewithoutrules.com/2016/06/15/writing-book/</a>
Ask yourself questions about structure, purpose and functions of parts you have spotted in anything in your daily life until you find out that your partner has a hidden "mute" button, that you just never knew existed and become excited about the value of analytical thinking.
Mathematics and puzzles/games. Take sudoku for example. It helps you to practice deductive reasoning. But the important step (I think) is when you start trying to solve harder problems and turn to math to formalize the collection of techniques you have accumulate during practice, resulting in concepts like 'pre-emptive sets'. When you transition from a collection of techniques to a theoretical foundation, you know have a much deeper understanding of the problem and how to reason about it.<p>You could call it 'deep learning'.<p>But you shouldn't ;)