6
$\begingroup$

I am a CS undergrad trying to improve my problem-solving skills. I have noticed that I have a problem with theoretical computer science which I've been trying to fix largely unsuccessfully till now. I have noticed these in Undergrad courses such as Theory of Computation, Algorithm Design, Discrete Mathematics, Game Theory etc. I am able to understand most of the underlying theory pretty well and even visualize a lot of stuff but when it comes to solving problems during examinations, the correct approaches never seem to come to me. I have tried practising a lot of sample problems for such courses but it never seems to help with questions which involve some sort of creative thinking. I spend way too much time in a limited-time setting and end up not being able to come up with a seemingly 'obvious' solution. I have also noticed this with puzzles. In trying to isolate the problem, I've noticed that exam temperament is not the problem, since I'm able to do fairly well in Systems courses or courses which are not so puzzle-oriented. Here are some examples of questions I'm talking about:

  • Write a Context Free Grammar $G$ such that $L(G)$ is <given>
  • Find an algorithm for a multi-armed bandit problem which satisfies <some given conditions>
  • Write an algorithm to solve a <given task> in <given time complexity>
  • Prove that <given language> is not a regular language
  • Find the Nash Equilibrium for a <given game design> etc

The common aspect of all such problems is that they can't be solved methodically, but rather there's that one creative manipulation/idea which splits the problem apart. How do I get my creative juices flowing and get better at solving such puzzling problems in a limited time frame?

P.S. I really want to get better at this since I'm genuinely putting in a lot of time and effort but my scores don't seem to reflect that. I couldn't find the most appropriate tags for this question, but I've tried to enter what I felt was appropriate. Open to suggestions for better ways to frame the question!

$\endgroup$

1 Answer 1

5
$\begingroup$

Without knowing You and Your personal situation, this question is almost impossible to answer. So all I can try to give is some general-purpose advice which hopefully gets You on the right track.

Get Enough Sleep

Thanks to modern Hustle Culture, bright white LED-lighting and bright-screened smartphones that make noise every 2 minutes, it becomes harder and harder to get enough regular sleep. According to studies, sleep is very important for both learning and creative thinking. Pulling all-nighters for studying is a terrible idea.

Do not ever write a PHD or a Thesis for/with an idiot Professor that seems to celebrate and/or demand sleep deprivation of his employees! Burnout is a real risk with such superiors!

Know Your Learning Type

Everybody learns differently. There are different psychological models of Learning Styles. These are just models, so don't get too lost in them, but it is good to roughly know which type of learner You are. This will give You a good idea how to study more efficiently.

Find the Right Resources

Once You know Your learning type, it should be easier for you to pick the right resources. Sadly, You can usually not choose Your teacher. But You can pick and choose almost everything else. Do You get frequently stuck reading one book on some topic? Try another book that better suits Your learning style! If You are more of an audio-visual learner, You could try some open source online lectures like MIT OpenCourseWare.

Bounce Your Ideas Off Somebody Else

The ability to explain a topic is a really good measure of how well You understand that topic. If You get stuck during explanation, You will quickly realize the gaps in Your knowledge.

It might be a good idea to join a study group. If study groups are not Your thing, talk to Your friends, Your goldfish or Yourself. If even if they do not understand a word of what You are saying it will still help You. If You are able to explain a topic to a layman or a child, You have achieved true understanding!

Learn Programming

I cannot speak for other countries, but in Germany, I have met my fair share of graduated computer scientist who did not know a single programming language. Based on that experience, my advice is: Learn a programming language! A good starting language may be Python. Even if it doesn't improve your grades, it will make you a better computer scientist. But the ability to program can also be a great study help.

Need to understand context-free grammar? Why not implement you own Earley parser? Or use an existing parser, to write Your own silly little programming language?

Need to study algorithmic complexity? Why not implement some sorting algorithms and learn what makes them tick?

Don't Beat Yourself Up!

It saddens me to hear that You seem to feel like You have to emphasize that You really want to learn. People try their best all the time and still fail sometimes. That's normal! That's human! Keep trying! That does not mean You didn't try hard enough!

In this modern Hustle Culture world, people are laser-focused on the success stories, the toxic, narcissistic tech billionaires and (wannabe) dictators. In truth, we could learn much more from our mistakes than our successes. But this modern Hustle Culture society seems to think, that people who fail, have done everything wrong, and people who succeed have done everything right. Nothing could be further from the truth. There is an interesting GDC talk that points out, just how clueless successful game designer are, for example.

People that focus on Your mistakes and tell You that "You just didn't try hard enough!" are absolutely toxic. Steer clear of those people and ignore them! Instead, look for the people that give advice on how to improve things in the future!

$\endgroup$
2
  • 1
    $\begingroup$ Thank you very much @DirkT! There's definitely some more reflection I need to do to understand my learning type. I actually learnt programming before starting with CS and do it regularly. However, I feel the major issue would be the lack of sleep. Thank you very much for the help. $\endgroup$
    – kaddy
    Commented Sep 27, 2023 at 13:46
  • $\begingroup$ This sounds as if it should be very helpful. In particular learning — and practicing — programming is also a way of confronting yourself with a lot of more or less creative problem-solving challenges. And it sounds as though you hit the mark with sleep. (But you do not need to capitalise “you” in english!) $\endgroup$
    – PJTraill
    Commented Oct 7, 2023 at 12:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.