Leo Gau home

Rich Hickey’s Keynote at ClojureConj 2010

<figcaption class="wp-caption-text">via flickr/ironrodart</figcaption></figure>

When was the last time you thought hard about something for…

These are tremendously valuable moments if you get to have them at all.

When was the last time you felt confident about trying to do something you’ve never done before? And what do you think it takes to become confident doing something you’ve never done before?

The step before, “Go do it.” is an important step and we don’t spend enough time and energy on it. We are definitely suffering in quality because we don’t spend enough time on Analysis and Design.

To simplify — Analysis and Design is about identifying the problem and accessing our proposed solution in terms of whether or not it solves our problem.

We should be solving problems. We should not be building features. There’s no guarantee that the  sum of features is going to solve anyone’s problem. Or that they aren’t going to introduce new problems. Programming is about solving problems, not building a list of features.

Avoiding problems != solving them.

Solving problems require understanding, recognizing, and stating them.

Problem solving is a Skill. Book recommendation: How to Solve It

Humans get good at what they practice. If you practice problem solving, you will get good at it.

How To Solve Problems

  1. The first step is to state the problem. Say it somehow. Out loud in conversation or write it down.

  2. Next, understand the problem. What do you know?

What don’t you know?

Are there related problems? Go find some other solutions to similar problems. Looking at other solutions to similar problems is a great way to get up to speed on a problem and start working ahead of the best known solutions in the space. Because, what you have to do is just an incremental step above what the last guy did instead of starting from scratch.

Write it all down.

  1. Be Discerning.

Find the problems in your solutions. Solve those too.

Look for the tradeoffs.

Write these down too.

  1. More Input, Better Output

You can’t connect things you don’t know about. Get a lot of different inputs

Read in and around your space.

Look critically at other solutions.

4b. Tradeoffs

Everyone says design is about tradeoffs but, you need to look at at least 2 possible solutions and you have to find out the good and bad things about those things before you can say, I made a trade off.

You might want to write that down!

  1. Focus

On the hammock, no one knows you’re not sleeping.

The computer is a prime source of distraction.

You can’t do everything, you will drop things — calling people back, and things like that. You should communicate to people that you care about about this process. Let loved ones know you are going to be ‘gone.’

The process involves 2 parts of your mind.

Waking Mind and Background Mind

Waking Mind

Good at critical thinking. Extremely analytical and good at tactics.

Looking at the short term decisions, look at what’s right in front of you and make a decision based on that.

Prone to finding local maxima.

Use the waking mind to assign tasks to your background mind. Think hard about something and create work for you background mind. Also use it to analyze things that the background mind came up with

Background Mind

It’s good at

Solver of most non-trivial problems. Unfortunately you can only feed it, not direct it.
When we’re sleeping, we’re processing the information we have learned during the day.

Sleep makes memories stronger, and it even appears to weed out irrelevant details and background information so that only the important pieces remain.

Most importantly, it finds hidden relations and solves problems we’re working on while awake.

You have to work hard, thinking about a problem during the day, so it becomes an agenda item when you’re asleep.

Loading It Up

Our mind has a 7 +/- 2 limit

Write the proposed solutions down — with pictures maybe.

Go over and over it, in different orders. No more input, now just use recall.

Hammock time is important thinking time.

Wait for it

At least overnight, sober

Sometimes, it takes months. It just does. One way to get around that is to work on more than 1 thing — not within one day, but over the course of time.

Switch when stuck

Wake up Working

Eureka! You solved a hard problem.

If you have the answer to something else, at least capture it.

Try It

Eventually, coding is required.

Type sparingly, and with confidence

Feedback loop is important but, don’t lean on it. “Test Driven Dentistry” is a bad idea.

You Will Be Wrong

You will think of better ideas.

Also, the facts change. When the facts change, do it over again. And don’t apologize.

Do not be afraid of being wrong.