4 ms·
Ask HN: How to properly model, reason about, and solve problems?
I'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.
During this journey I've noticed that I lack skill when it comes to modeling and solving problems (for instance the Exercises in SICP) I'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.
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.
I dropped out of college and never really had a course in my 3 1/2 years that drilled a rigorous mathematical and logical process for understanding and solving problems. I'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.
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 10y agoI 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 10y agoFirst, 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 10y agoThere 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 10y ago"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.