Live data from Hacker News

How to do hard things

drmaciver.com

71–80 of 123 posts

Re: How to do hard things

#71
I changed recently the way I look at problems, instead of thinking I don't know, or I don't understand. I think that is more useful to think that I have a wrong model of reality, that way it helps to

a) Acknowledge that I might have already assumptions that need be questioned

b) Forces me to re-visit what I think I know

c) Realising that accessing the right model is "just" a matter of finding what building blocks are misunderstood or missing in my model.

I think the article suggestion fits this philosophy and it is a valid angle to attack a problem, in "model" terms "Find something that is like the hard thing but is easy" for me easy means, that is familiar to you meaning that is a model that you understand, meaning it is a model that you play and gives you the expected results.

Re: How to do hard things

#72
TLDR; The core idea described in article is to identify components that makes things "hard" and then apply each component in isolation to "easy" version and master that easy+one hard thing problem. After you do that for each component, you likely find thing isn't hard anymore. This is "single loop system". The "double loop system" applies to thing that you don't know what the "good" final state looks like. So you basically consider that as problem and apply single loop system to first find out the good final state. Then again apply single loop system to achieve that good final state.

This is insightful but claims are rather over-inflated. More formally thinking, if this system works then my first instinct would be to apply on np-hard problems or build machine with human level intelligence. The issue is that hard things are often hard because solution search space is extremely vast and achieving any level of predictability is difficult because there is almost always new information lurking in space you haven't explored yet.

Re: How to do hard things

#73

The most valuable thing I learned at university was how to tackle difficult problems. Taking advanced math and science courses where I had to really study, and still struggled, and having to write essays so frequently that I could no longer procrastinate or wait for the spark to hit me, was more valuable in the long run than any of the actual knowledge I gained. The advice to break a hard problem down into simpler pi…

totally agree, I think when I confront a new complex system, let's say AWS Cloud, I wish there would be a page or tutorial where all the building blocks would be stated up-front, so I agree with you that identifying those building blocks are crucial, and a good teacher or good documentation should help putting that information up-front then go into details on how those building blocks relate to each other.

Re: How to do hard things

#74

I am a 4th semester CS student from Germany and still don't grasp recursion, even though I already took the data structures & algorithms courses. If you did have something like a magic moment where it made sense to you, please enlighten me as I would really like to truly gain an intuition (and implement a parallelized msd-radixsort for learning-purposes because I failed to do this assignment yesterday).

The best way I've found is to imagine a physical tree, and perhaps go outside and stand in front of a big one...

Notice there are 2 types of parts:

  - A leaf, which is the end (has no children)
  - A branch, which may have leaves or more branches (has children)... and because a branch can have more branches, this is recursion, so we abstract to a 3rd type of part:
  - A node, which could be a branch or a leaf...
Imagine if you were blind and had to feel your hand up the stem, and when you reach a node, you'd move your hand up the node to check 'is this a leaf, or a branch' If it's a leaf, you mark it; but if it's a branch, you move your hand along the branch and do the same check for the next nodes 'is this a leaf, or a branch'...

  function int getNumLeaves(Node node):
    foreach childNode in node:
      if childNode.IsLeaf(): leafCount++
      else: return getNumLeaves(childNode) // NOT a leaf -> check this branch's children

  print getNumLeaves(tree.stem); // (start with the outermost 'node')
The pseudocode above could have errors, but it's simple enough to get started for understanding;)

Re: How to do hard things

#75

The most valuable thing I learned at university was how to tackle difficult problems. Taking advanced math and science courses where I had to really study, and still struggled, and having to write essays so frequently that I could no longer procrastinate or wait for the spark to hit me, was more valuable in the long run than any of the actual knowledge I gained. The advice to break a hard problem down into simpler pi…

Most valuable things I did not learned at university:

* Ignore whole craze toward being cool, participating in random competitions, chasing opposite sex

* Keep detailed notes of your days, who did you meet, what did you learned?

* Don't worry too much about acquiring every possible new skills that you come across

* The most important part of the textbook is exercises and that's not because there would be tests. If you really want to learn something, you need to do exercises!

* Write down import concepts you learned, new insights you developed. The process of writing down to explain to someone or yourself improves learning by an order of magnitude.

* Avoid depth-first search. Not every chapter, every book, every subject must be learned in all its gory details.

* Most textbooks are written by people who have little passion for that subject and they just want to show off their expertise. If you think you are wasting time, dump that textbook sooner than later.

Re: How to do hard things

#76
post #72

TLDR; The core idea described in article is to identify components that makes things "hard" and then apply each component in isolation to "easy" version and master that easy+one hard thing problem. After you do that for each component, you likely find thing isn't hard anymore. This is "single loop system". The "double loop system" applies to thing that you don't know what the "good" final state looks like. So you bas…

To be fair, the article does explicitly call out that the system won't work for arbitrarily hard or impossible problems. That's addressed in the opening paragraphs, and again called out in step 4.4 of the single-loop.

Re: How to do hard things

#77
post #75

The most valuable thing I learned at university was how to tackle difficult problems. Taking advanced math and science courses where I had to really study, and still struggled, and having to write essays so frequently that I could no longer procrastinate or wait for the spark to hit me, was more valuable in the long run than any of the actual knowledge I gained. The advice to break a hard problem down into simpler pi…

Most valuable things I did not learned at university: * Ignore whole craze toward being cool, participating in random competitions, chasing opposite sex * Keep detailed notes of your days, who did you meet, what did you learned? * Don't worry too much about acquiring every possible new skills that you come across * The most important part of the textbook is exercises and that's not because there would be tests. If yo…

Sounds like you could've used a harder course then, if you picked something that suited you, you wouldn't be able to get through it without most of these.

Re: How to do hard things

#78
post #40

Earlier quoted context omitted.

The specific anecdote may have been fabricated, but the principle is sound. An example is the marshmallow problem[1], where a group is given some materials and is asked to build, under time pressure, the tallest tower they can with a marshmallow on top. Adults generally fare poorly because they don't experiment enough, building a tall tower and placing a marshmallow on the top as time is running out, only to have the…

I don't know if that is really the same principle as the pottery anecdote however, it's not about experimenting but a narrative enforcing the concept 'practice makes perfect', related I suppose but not the same. And anyway the pottery principle is not really sound either - I can suppose that the group tasked with producing a pot a day produces a better pot at the end than the group that was given a long time, but let…

There have also been discussion about the same thing happening in music and science. That is, the people who produce the best work also produce the most work, and a lot of that work is bad. But some of it is very, very good.

Re: How to do hard things

#79

The most valuable thing I learned at university was how to tackle difficult problems. Taking advanced math and science courses where I had to really study, and still struggled, and having to write essays so frequently that I could no longer procrastinate or wait for the spark to hit me, was more valuable in the long run than any of the actual knowledge I gained. The advice to break a hard problem down into simpler pi…

Totally agree. I remember the first days of Algebra at university and you couldn't understand anything what the teacher was saying. Some freaked out as if they didn't know it now, meant they will never understand it (fixed mindset) and some thought "hell, I don't get it but I'll probably understand it once I studied it for a while (growth mindset). In high school, smart students can often get away with not studying.…

> In high school, smart students can often get away with not studying. In university, your attitude and mindset towards failure and learning becomes much more important.

In high school I rarely opened the textbook and did fine. I ended up on academic probation my first semester in college because I had no idea how to study (or even that I had to study). While it was a rough first year, it was definitely needed.

Re: How to do hard things

#80
post #34

One way I accomplish this in programming is to write down what I wish I had. Like ok if I had a magical function that did xyz or if my data just happened to be in this easy to consume format, etc. works pretty well when stuck on a difficult problem.

That's like TDD.

Or DSL.
Post reply on HN