Hello all,
Today I want to share the story of a student who reached out to me. He had a very direct opening -
I get messages like this very often. Many people take theoretical Computer Science classes in the second/third year of their university and truly struggle with what they are learning. Ideas like Finite State Machines, Deterministic Automata, Chomsky-Normal Form etc ect just seem so random.
A fun story from my own college experience. In our second year of college, we had to take a class called “Introduction to Computer Science Theory”. On the first day of the class, we had more students than seats in class. By the last, we had enough free space to all sit one seat apart. That is how many people dropped out of that course. Many chose to drop out of Computer Science altogether, including a friend of mine. Most of my subscribers are working professionals, but I’m sure all of you have struggled with theoretical Computer Science.
In this post, I will share how I helped many students actually understand these ideas and learn to love them (yes it is possible). Contrary to popular opinion, theoretical knowledge is a must to ace your interviews. You can spend months of your life practicing 300+ Leetcode questions. Or you can spend a few hours studying theory and ace your interview with 75 questions. Think of the difference.
[FREE SUBS]To buy just this article, use any of the following links. The price is 3 USD. Once you send the payment, message me on IG, LinkedIn, Twitter, or Email:
Venmo: https://account.venmo.com/u/FNU-Devansh
Paypal: paypal.me/ISeeThings
You can also get a premium/founding subscription for 20% off using the link here. Learn more about the newsletter here
Why People Struggle with Theoretical Computer Science
A good question to ask. After all, a good diagnosis precedes a good treatment. The answer is much simpler than you would think. Simply put, it is because they fail to understand the context of what they are learning. The content of their classes will talk about these ideas, and sometimes briefly touch upon where the ideas are used. But that’s it. Very rarely is the context of how these ideas were developed given any weightage. No matter how well the student did in their theoretical CS course, they don’t look at their code compiling and think of the Backus–Naur Form and the developers of the language might have used it.
Colleges/Textbooks are able to get away with it because they can argue that they have a lesson plan. Thus an individual course can focus on its specific curriculum and let some other professors handle the other perspectives. However, while this allows them to teach you more stuff, it severely hampers your ability to make connections between different ideas and actually see how the problem is useful. This problem is prominent in not only Computer Science but other theoretical fields like Math. The next time you hear someone say, “Ideas like Trig, Calculus, and Linear Algebra are not useful” remember this post. It’s the exact same problem, people learning facts and theories, instead of solutions to problems.
How do we change this?
Time for me to tell you the secret to how we change this. How do I get people who get nightmares when they hear about Regular Expressions to love Turing Machines? The answer is simpler than you’d think. But it’s probably not what you’re expecting.
The first and most important thing you can do is to slow down. Stop trying to learn this in one or two months. Rome wasn’t built in a day and trying to cram all that you need in a short time frame will be counterproductive. Sure you will be able to learn a lot of facts, but that won’t be too helpful when it comes to utilizing them anywhere. If you have spent a lot of time learning basic information about Graphs, only to fail when you attempt any graph problems, you already know what I’m talking about.
Here’s how you fix that. Spend more time learning the basics. As you come across ideas, try to read up about the history of it’s development. Think about why a particular idea/framework was strong/weak, and how variants tweaked the properties. This will make your overall process much slower. However, you will find the quality of your learning to skyrocket. Why?
Levels of Learning
Believe it or not, there are levels of learning. And they aren’t all created equal. The higher you go, the deeper your learning. The deeper your learning, the more likely you are to remember it in higher stress situations (interviews, your job, etc) and spot the utility of an idea in a non-obvious context (remember how we talked about Mastery yesterday?).
Most people get stuck on remembering and applying. They come across ideas, test them out in some contexts and then move on. This is fine if you only care about surface-level usage. However, when it comes to foundational information like Theoretical Computer Science, that’s a terrible idea. It works for getting an A in your course and then forgetting everything you learned in 2 months. Not for knowing what to do in messy and ambiguous real-life situations.
Compare this to the approach I recommend. When you learn the history behind an idea, force yourself to evaluate the strengths and weaknesses, and try to think of how variants can be developed, you are engaging with the higher levels of learning. Even if you’re not successful (you probably won’t get the full scope), your learning will be on steroids.
That’s it for this post. I’ll end on a simple note. When it comes to such foundational skills, your best bet is to pursue mastery over the knowledge. This is many ways an impossible topic, because there is an infinite amount of depth and width. But being willing to take it slow and engage deeply with the basics will pay off much more than anything else.
Make sure you share your thoughts on this question/any interesting questions/developments in the comments or through my links. If you liked this post, make sure you tap that heart button and let the world know.
Happy Prep. I’ll see you at your dream job.
Theory Lover,
Devansh <3
Reach out to me on:
Instagram: https://www.instagram.com/iseethings404/
Message me on Twitter: https://twitter.com/Machine01776819
My LinkedIn: https://www.linkedin.com/in/devansh-devansh-516004168/
My content:
Read my articles: https://rb.gy/zn1aiu
My YouTube: https://rb.gy/88iwdd
Get a free stock on Robinhood. No risk to you, so not using the link is losing free money: https://join.robinhood.com/fnud75