I'm working through introductory CS and Discrete Mathematics courses on my own and I've come to notice that I have difficulty thinking abstractly. Any words of advice on how to develop my abstract thinking abilities?
As a profesional mathematician I can say the following: Always start thinking from an example - first take the most simple one that you can come up with, then gradually increase the complexity and include all the possible unusual, weird, extreme, ... cases to really understand why the abstraction is formulated the way it is.
No mathematician ever came up with an abstract theory from the top of their head - they also started from examples and were gradually increasing abstraction only when they understood the matter on a certain level and needed to express this understanding in a simple abstract language in order to move on to the next level of complexity...
It takes quite a lot of time to learn abstract mathematics this way, but it is the only way when you really want to understand what is going on.. But it's normal, mathematical texts are just extremely "dense" - you are not supposed to read them in the same way (and speed) as say history or biology books. So take your time , read every sentence and every formula, read it multiple times if needed, and always have one or more examples in your mind that on which you visualize (in your mind or on a piece of paper) every single bit of the abstract theory you read. It is slower than just reading, but with experience you will be able to it faster and faster until it will turn into a process that automatically runs in the background of your mind anytime you read a mathematical text..
This comment is mainly for the OP but I really enjoyed your reply. I’m currently reading A Programmer’s Introduction to Mathematics by Jeremy Khun which is absolutely phenomenal so far. But he gives the same advice as above. He states that as soon as you see a theorem or problem in math you need to instantly start writing down examples. Write down examples and then see that they fit the rule.
I found when I took Discrete back in University that advice as very helpful (I got the advice to split up large complex problems into their smallest and simplest cases from a TA at the time.) in proving things you often work yourself up from simple examples to more complex examples generally, but often if you can prove by induction you need only the simplest case (base case) and the abstract case (induction step from n to n+1). Sometimes these abstract cases are hard to spot and they definitely take time, but as you learn more of them over time you’ll find that you can do them a lot easier. My Discrete Math teacher said to learn something in mathematics you have to basically already know it. This was just to say with math there is no metaphorical “royal roads” [1] (short cuts) in mathematics and that things come step by step. You’ll eventually get enough tools in your tool belt to handle abstract thought better and better.
Many very successful mathematicians “only had a few tricks up their sleeves” when they developed their life’s work. They reused these “tricks” over and over.
Don’t feel like you have to know everything.
I’ve never been more satisfied (and validated) when I have achieve a great solution to a problem, only to find out that I’ve re-discovered a theorem. You’d think this would be a waste of time, but actually it leads to a sudden explosion of knowledge and gives insight into the edge cases you wouldn’t have thought of without a lifetime of effort.
Research inductive reasoning. But beware, ideologies gained from abstraction are seductive in their simplicity and can utterly fail to handle complexities of real life. Super Thinking, by Gabriel Weinberg and Lauren McCann is a fantastic read on using abstractions as mental models.
No mathematician ever came up with an abstract theory from the top of their head - they also started from examples and were gradually increasing abstraction only when they understood the matter on a certain level and needed to express this understanding in a simple abstract language in order to move on to the next level of complexity...
It takes quite a lot of time to learn abstract mathematics this way, but it is the only way when you really want to understand what is going on.. But it's normal, mathematical texts are just extremely "dense" - you are not supposed to read them in the same way (and speed) as say history or biology books. So take your time , read every sentence and every formula, read it multiple times if needed, and always have one or more examples in your mind that on which you visualize (in your mind or on a piece of paper) every single bit of the abstract theory you read. It is slower than just reading, but with experience you will be able to it faster and faster until it will turn into a process that automatically runs in the background of your mind anytime you read a mathematical text..
Good luck!