
Ask HN: How to properly model, reason about, and solve problems? - 40acres
I&#x27;ve been on a self learning mission the past few weeks, using a variety of sources (mostly obtained from HN) to teach myself computer science and math related topics.<p>During this journey I&#x27;ve noticed that I lack skill when it comes to modeling and solving problems (for instance the Exercises in SICP) I&#x27;ve been able to solve problems either through initially knowing the techniques needed to solve the problem or through brute force, and when I fail at those two methods I resort to looking up the solution.<p>I know that this method is not the proper way to go about solving problems and will not be effective when faced with a problem that I or my colleges (or someone on the internet) has not seen before.<p>I dropped out of college and never really had a course in my 3 1&#x2F;2 years that drilled a rigorous mathematical and logical process for understanding and solving problems. I&#x27;ve been able to get by in my career thus far but would like to work on more interesting problems in the future. This self-learning period has been humbling in realizing that I lack the tools needed to make this goal happen.<p>What tips, tools, techniques, books, papers, lectures, etc have you used that help you model and understanding problems with enough clarity to solve them? I am looking for processes that can be used across a wide range of subjects to better model problems and develop mathematical maturity.
======
psyklic
I suggest doing lots of problems. Here are a few excellent resources that
concentrate on teaching "problem solving" in math from the ground up:

\+ Brilliant -- [https://brilliant.org](https://brilliant.org). Fun problem-
oriented introductions to specific math areas. Their "explorations" are
designed to help you think about problems in new ways. Brilliant also gives
you a weekly problem set of beginning-intermediate-hard problems. You can even
practice writing proofs by writing solutions to new problems.

\+ The "Art of Problem Solving" books. Advanced high school, but has really
great insights and lets you practice common math patterns you'll see later.

\+ The "Book of Proof" book. Gentle introduction to proofs. An introduction to
fundamental higher-level math.

\+ Project Euler -- [https://projecteuler.net/](https://projecteuler.net/).
For getting better at programming and math together.

------
a-saleh
First, most problems you encounter, even those 'more interesting' won't
probably require much of an algorithm-creation chops.

It does usually require more of an ability to evaluate many of of those
possible solutions that you were looking up. A.f.a.i.k this was one of the
reasons why current iteration of SICP is taught in Python and not in Scheme.

But if you encounter these kinds of problems more regularly, what helped me
was to build over time a library of more general problem solving strategies.

i.e. is this a graph search? Can I use dynamic algorithm? Is there some
recurring pattern that would suggest recursive algorithm? Can I pre-compute
something that would help here?

I acquired my (even though somewhat limited) library by studying the problem
areas that interested me. I.e. graph theory, distributed systems, complexity
theory, databases/logic programs, security. On the other hand, I have learned
most of this while in college.

------
sjg007
There are a bunch of known algorithmic tools and you basically pattern match
those to the problem in question. However, that may not lead to the best
algorithm for a problem and at that point you might need to "solve" it de
novo. For example, take an open problem such as solving 3-SAT or k-SAT where k
> 2.

One nice result in computer science is that problems have a defined complexity
so you can translate algorithms from one problem to another. This is why some
people view everything as a graph... or a tree is a special case of a graph..

------
Someone
"How to solve it" by George Polya
([https://en.wikipedia.org/wiki/How_to_Solve_It](https://en.wikipedia.org/wiki/How_to_Solve_It))
probably will be a good read for you.

It focuses on cases where you don't know how to attack a problem. Rightfully
so, because (to a mathematician) problems where you know how to solve them
aren't problems.

