

How do You Improve Problem Solving Skills? - lambdaman

I seriously lack problem solving skills particularly when it comes to solving algorithmic or mathematical questions. I think the issue is that I can't think "outside the box." I am only good at solving problems that I've sort of encountered before. For instance, I struggle through Project Euler questions and take long hours or even days to solve questions and I'm not even past question 10!<p>This worries me a lot since it seems that there is so much emphasis on the ability to solve problems or puzzles to get to good companies. What can I do to improve?<p>Some background if relevant at all: I'm a 2nd year student in computer science in a university, not very strong math skills (as pointed above)
======
tubbzor
I also struggled at first semester in college (I'm in my 3rd year now) with
math (particularly Calculus) and found after my first semester it was due to a
gap in my knowledge. I did not have a solid enough understanding of trig or
high level algebra to calculate or manipulate equations expected of me so I
would bomb all the exams.

If you can't fully understand low level concepts how can you even expect to
even grasp the broader view? It's like trying to explain multiplication to
someone who has no concept of addition. To understand a topic you must also
understand all the sub-topics that make it up, and once you grasp all the
moving parts a problem by nature become much more intuitive to you. This also
includes math equations, if you are expected to know an equation dont JUST
memorize it but instead understand why its necessary, how to derive it, and
when you can and can't use it. You'll be able to look at an
equation/function/program and pull things out automatically just by looking at
it that may have taken some time and work to conclude before. This is very
similar to Scott Young's learning ideology that I also recommend reading up
on. [1]

Therefore after that semester I took some time and reviewed my algebra and
basically re-learned trig from the ground up (it was very weak). Calc and
Calc2 came a lot easier to me after this.

In college you must continually fill these gaps in your knowledge as every
professor is different and has different expectations in student's knowledge.
I've got in the habit of taking topics(whether it be a CS topic, math formula,
ect) that I don't fully understand and writing it at the top of a blank sheet
of paper. I then just start writing as if I was explaining the topic to my
girlfriend. You'll quickly figure out where your gaps are and then know what
you need to work on (which may include writing one of those sub-topics on a
blank sheet and starting from there).

[1] [http://www.scotthyoung.com/blog/2007/03/29/studying-and-
holi...](http://www.scotthyoung.com/blog/2007/03/29/studying-and-holistic-
learning/)

------
keefe
You need to simultaneously level your creativity and pure reasoning skills.

The first and most obvious thing is to level your math - checkout the
offerings on coursera. If you have never done higher math, there is a certain
type of student (often quite mathematically gifted) that require the ground up
approach higher math takes, I'd highly recommend a 100 page book called a
concise introduction to pure mathematics by liebeck. This will teach you the
mathematical foundations of logic and remember, I often say computer
programming is convincing a computer to do something.

Writing and especially debugging code is often abstracted as having a
generative model for computing in your head (playing computer in your head to
predict what will happen). You're looking at this interface or problem and you
are trying to find an efficient solution under different paths through a
solution space, until you have closed that space with a provably efficient
solution. This involves following out chains of reasoning - if this happens,
that will happen and if this and that and the other thing happens, the
computer will respond this way and so forth.

For that training, I would recommend learning to play go (the game, not the
language) it operates in a binary space and teaches you to run out chains of
reasoning.

------
ajrobinson
I can't speak specifically to mathematical problems, but in my experience,
there are two main ways to improve problem solving skills in general:

1\. Practice.

2\. Work on developing a better understanding of the problems you're solving.
For example, if you are designing a website and all you do is memorize an
html/css layout from a tutorial, then you won't be able to solve problems that
develop because you won't understand why certain properties behave the way
they do.

Therefore, it's important to spend a lot of time figuring out why things work
they way they do because by understanding those foundations, you have the
material you need to solve problems.

------
sonabinu
Try to start with the first book in the series - Art of Computer Programming,
Volume 1: Fundamental Algorithms by Donald E. Knuth

~~~
lambdaman
Did I forget to mention that my math isn't very good? :(

~~~
sonabinu
You could always start with the fundamentals ;)

------
sidcool
Thanks for asking. I have been struggling with this problem since joining
work.

