Code Must Be Fluid


The first law of software — and life — is change.

It doesn’t matter how easy a programming language or tool makes things. If your code isn’t fluid — if your data and algorithms can’t flow between components — you will always run into problems.


Do You Remember the Time…?


Do you remember the time we went for ice cream?

We tend to believe that when we remember something, it’s because that something actually happened in the past. When I remember walking to get ice cream this afternoon, I believe I actually did get ice cream this afternoon. But the reason I believe that, is because of memory. In other words, we use memory to justify the validity of memory — a circular argument if I’ve ever seen one.

For example, I want to remember the web address “plpatterns.com”. When I get home from work, I want to be able to type that address into my browser. To try to prove that I remember the address correctly, I write it down on a piece of paper and put it in my pocket. So now, when I get home, I type in the address that I remember: plpatterns.com. But wait, is my memory accurate? Is the address that I remember actually the one I saw earlier in the day? To find out, I can compare the address I remember against the one I wrote down on the piece of paper in my pocket. Look, they match! Therefore, my memory is accurate. When I remember something, I can be reasonably confident that it did indeed happen. …Right?

But wait… How did I know that what I wrote down in my pocket is what I actually saw earlier that day? Well, because I remember writing it down when I saw it. And I’m certain that I didn’t change what I wrote on the paper or switch papers — because I don’t remember doing that. …So I am essentially justifying my memory with other memories. There is really no way to know that what I remember ever actually happened. What I remember matches with what my friend remembers? Great! But that still doesn’t prove that what we remember actually happened, because any justification we use is based on other memories accurately representing what happened.

What are the implications of all this? Essentially, these things occasionally pop into my mind, like thoughts, but for some reason that I can’t prove, I compulsively believe that they represent things that I did before, saw before, heard before, said before. In fact, the entire concept of time is based on this belief that I can remember, with some amount of accuracy, what the Universe looked like before. And it’s all based on these things that pop into my mind — which we call “memories” — that I have absolutely no justification for.

Every time you remember something, you’re recalling it now. Right now. Every time you imagine what will happen in the future, you’re imagining it now. Right now. Nothing ever happens at any time other than now.

In the movie Blade Runner, we’re provoked to question who we are based on the idea that our memories might not be ours. But it’s much more drastic than that. You don’t need a futuristic city with androids running around. You just have to look, right now, and see for yourself through your own first-hand direct experience — that any time other than now is a made-up mental construct. A figment of your imagination.


Notes from Rich Hickey’s Keynote at ClojureConj

I greatly appreciate being around inspiring people. This weekend I was fortunate enough to be around many inspiring people at ClojureConj, the kind of people who question their reality, not just their programming tools.

When was the last time you spent an entire hour thinking about a problem?
- a day
- a month

Practice to be good at something.

Problem Solving
1. What is the problem?
- out loud
- written
2. Understand the problem
- what do you know?
- what don’t you know?
- are there related problems?
3. Be discerning
- problems in your own solution?
- what tradeoffs?
- read in and around your space
- explore multiple options to say what tradeoffs were

Focus - “On the hammock, no one knows you’re not sleeping.”

Use waking mind time to feed work to background mind.

- Mind can juggle 7+/-2 things.
- When more, write it down.
- Go over in different order. Load in different combinations.
- Have no-input receptive time.

- at least overnight, sober
- sometimes months
- work on more than one thing
- not interleaved within a day, but over the course of time
- switch when stuck

Try it
- Get feedback
- Evidence may show that assumptions were wrong

You will be wrong
- You will think of better ideas
- Input facts change
- You’ll make mistakes
- It’s okay

When you read something, and you know that’s bogus, that’s positive!

"The beautiful thing about ideas is that they don’t have feelings."
- If you have implemented a bad idea, you start to not like it.
- Detachment is natural.
- Why would you want to keep around a bad idea?
- Get rid of it. It’s not a child. It doesn’t have feelings.

Update 2010-10-27: Stumbled on Rich Hickey’s Clojure Bookshelf full of books about advanced programming topics, plus a hammock.

Studying history helps you predict the future by teaching you which things are old enough to be permanent.