One of the most important skills for knowledge workers is logical thinking/reasoning. It's of course also true for software crafters. In this article, I'll explore what it means to think logically.
Like our computers, our brains need to have enough "raw computing power". Analytical skills help us to analyze/process and understand information faster. These include logical reasoning, data analysis, critical thinking, research, forecasting, problem-solving, data mining, reporting, organization, etc.
The good news is that analytical skills are not innate. You can train yours, and improve.
Thinking logically is all about thinking in steps. It's about going from ideas/observations/facts, making assumptions, validating those, and reaching conclusions. Again and again, and again.
Cogito, ergo sum. I think, therefore I am. —René Descartes, Discourse on the Method
Logical thinking is mainly related to the left side of the brain, which is all about logic and control (facts, patterns, words, language, perception, order, time, comprehension, etc). The right side of the brain is more closely related to emotions, creativity, and looking at the big picture. We all have a dominant side; either more logical or more creative. But, luckily, we can strengthen both sides at will; logical thinking is certainly not an innate talent. We can all learn and improve.
Programming is a great way to improve your reasoning skills because you'll need to apply logical thinking all the time. While designing your system, while coding it, and of course while troubleshooting issues.
Dubito, ergo cogito, ergo sum. I doubt, therefore I think, therefore I am. — Antoine Léonard Thomas
The following argument terminology diagram, taken from Wikipedia is quite interesting and worth exploring a bit:
Based on arguments/premises/ideas/claims, each having a truth value (i.e., true or false), we try to reach conclusions using deduction or induction. When using deduction, the conclusions follow from the premises. When using induction, the conclusions follow from the premises... with some level of certainty.
With deduction, our conclusions may be valid or invalid, demonstrating sound or unsound reasoning. With induction, the reasoning may be cogent or uncogent, depending on the level of certainty of our reasoning. I just wanted to mention those because both deduction and induction are super useful "tools" for going from issues to solutions, and it's useful to pay attention to which kind of reasoning we're using while solving problems.
Often, we also use abduction to find solutions. Abduction is basically inference to reach the most likely conclusion. We often use abduction while developing because we lack time to verify our conclusions and instead have to use our gut feeling. Another reason to use abduction is also the cheapness of trying things out. More often than not, we can pick a good candidate solution and try it out quickly (i.e., we use empirical evidence). Abduction works better and better as you get more experienced in a specific domain. For instance, once you'll have solved a thousand bugs with a specific technology stack, then your deduction/abduction skills should be much stronger in that domain.
Let's take an example: I've used Java and Spring for a number of years. When I start a Spring-based application, and it crashes with an error message, it doesn't take me long to figure out what's going on and make good guesses about potential solutions.
Whatever problem you're working on, make sure to evaluate the pros and cons and to test-drive solutions to increase confidence in your reasoning
The stronger your logical thinking skills get, the faster you'll identify inconsistencies, and errors in reasoning. This will help you to better judge arguments, ideas and proposals, and influence things for the best. Critical thinking is very important in this regard.
The definition of insanity is doing the same thing over and over again, but expecting different results. — Albert Einstein
In IT, we often think we're going crazy when we're in front of a problem that we don't understand. But it's all right (really :p). Software systems are deterministic by nature, so there's almost always a very logical explanation; it's just that there are so many inter-related parts that problems quickly get complicated to understand.
- Descartes' Error: Emotion, Reason, and the Human Brain by Antonio R. Damasio
- Logic @ Wikipedia
- Logical thinking @ Cleverism
- Logical thinking @ Lifehack
- Logical reasoning @ Wikipedia
- Modus ponens @ Wikipedia
- Deductive reasoning @ Wikipedia
- Inductive reasoning @ Wikipedia
- Abductive reasoning @ Wikipedia
- Inference @ Wikipedia
- Rule of inference @ Wikipedia
- Argument terminology @ Wikipedia
- Empirical evidence @ Wikipedia
- Cogito ergo sum @ Wikipedia
- Memory improvement @ Wikipedia
In this article, I've discussed the importance of cultivating a logical thought process. Logic is key for knowledge workers in general and software crafters in particular. That is why I encourage you to train and improve your analytical skills.
In future articles, I'll explore different approaches we can use to analyze and solve problems in a consistent and systematic way.
That's it for today! ✨
Hello everyone! I'm Sébastien Dubois. I'm an author, founder, and CTO. I write books and articles about programming (TypeScript, Web, React, Angular, NestJS, etc), personal knowledge management, personal organization, and productivity.
If you've enjoyed this article then subscribe to my newsletter: https://newsletter.dsebastien.net
You can follow me on Twitter: https://twitter.com/dSebastien 🐦