Author Archives: LivingLimeGreen

Mental Freedom for All

team painting“Mental freedom for all.” I like it. It’s our new Shared Vision. It’s only a small adjustment from our old “Enable Mental Freedom,” but it has a powerful effect on me, kind of like a slow rumbling eruption of glitter. Our shiny new Shared Vision gave us just the boost we needed to decide on our Version 2.

It wasn’t easy. We have lots of amazing ideas (or at least I think they’re amazing; Paul Graham might disagree) — something like twenty-odd full projects we could try — and we need just one. So, we decided to use the Passionometer Protocol:

Passionometer:

  1. Decide how to represent degrees of passion. (We used sticky tabs of five different colors, cool to hot.)
  2. Write down all the ideas.
  3. Each person expresses his/her own degree of passion for each idea. (I stuck one tab next to each idea of a color to indicate how passionate I was about it, and Charlie did the same, so at the end there were two tabs next to each idea. It was quite pretty when we were done.)
  4. Tally the total amount of passion for each idea. The idea with the highest cumulative team passion wins.

There were two ideas that stuck out, and one of them clearly fit our new Shared Vision: an On-line Team Canvas.

In McCarthy Bootcamps, it’s not uncommon to do team painting. Team painting is a team bonding experience that gets creative juices flowing:

  • Premise 1: Each person is unique and sees the painting from a unique perspective.
  • Premise 2: The more perspectives that are completely engaged, the better.
  • Conclusion: Each person should add exactly what he/she thinks the team painting needs, including painting through or over other people’s work.
These premises are actually derived from deeper assumptions within the McCarthy system: that the best results come from everyone doing what they want and asking for help (rather than through chains of command and authority) and that mutual trust is the defining trait of a good team. “Trust Over Control” is the motto, and it’s very well represented with the team paintings.

Team paintings seem to always come out awesome. I don’t know why, but they do. (See the team painting from my Bootcamp at the top of this post. Eleven people worked on it.) So far as I’m concerned, they’re the epitome of collaborative creative expression. Charlie and I have actually started applying the concept of team painting to a lot of things we do collaboratively, and it always provides us with superior results.

Wouldn’t it be awesome if there were an on-line collaborative painting app specifically designed for team painting? Sure, there are other collaborative drawing apps out there, but we want to try our hands at making one that’s truly amazing. Who knows? Maybe we’ll make something that would be worthy of a McCarthy Bootcamp.

Creative freedom for all. Yes.

– Kia

New Ways of Thinking

Our Version 1 was a success!

Or at least, it was for me. (I can’t speak for the inside of Charlie’s brain.) I set out to learn one new way of thinking, and I think I gained about three. The first was a new way of thinking about what it means to be a programmer. The second was a new perspective on programming languages and my relationship to them. And the third was meta: a new way of thinking about teaching new ways of thinking.

What it Means to be a Programmer

I started out being worried that I wasn’t a “real” programmer, or even if I was, that I wasn’t any “good.” I had a major breakthrough when I made the connection that programming isn’t so much a skill as it is a creative process.

Art is a creative process, and it wouldn’t make any sense to me if someone said they were a “bad artist.” There’s no such thing! If you’re doing art, you’re an artist. If someone doesn’t like your style, find someone else who does.

If I’m programming, I’m a programmer. And I have my own style. This whole time, I’ve been thinking there’s only one kind of programmer: the kind of programmer who loves the puzzle and the challenge and gets a kick out of the struggle. I’ve been trying to be like that, and I’ve been miserable because I’m not. I hate the struggle. I want to go from idea to implementation to next idea as quickly as possible. Charlie helped me see that my style of thinking isn’t incompatible with programming, it’s just incompatible with the programming languages I’ve been trying to use: C and C++.

A New Perspective on Programming Languages

Prior to this weekend, I thought of a programming language as a tool: something inflexible and impersonal that I could gain proficiency at through arduous practice, and that, with enough skill, I could bend to my will. Sometime between Sunday and Monday, my perspective took a crazy sharp turn: programming languages are friends. Learning a new programming language is like building a relationship with a new friend. When you start a new friendship, you have no idea what the future of the relationship will hold, and if you try to force the relationship into a mold of your design, it probably won’t work that well and you definitely won’t get as much out of it. A friendship should unfold, gradually revealing the unique qualities of your new friend, teaching you about yourself, and making you a better person in the process. And that’s what learning a new programming language should be like. In fact, that’s what learning anything should be like.

A New Way of Thinking About Teaching New Ways of Thinking

In the beginning of our project, Charlie tried to teach me. He made a hypothesis that I would enjoy higher-level programming languages, so he tried teaching me Lua.

It didn’t work very well. Not because Charlie is a poor teacher (he’s actually a pretty good one), but because this was an entirely new way of thinking for me. The challenge was not in learning Lua syntax; it was in re-wiring my C-minded brain, and that, as we discovered, can’t be taught.

Fortunately, there was a crucial moment of frustration when we realized we were doing it wrong and changed our tactic. Instead of Charlie guiding me by giving me examples and exercises, I started just exploring. Charlie still gave me examples and suggestions for things to try, but the major difference was: I was asking for them. I thought about what I wanted to know, what sounded interesting, and what sounded fun, and I just asked him all the questions I wanted to ask. I asked for comparisons to things I already knew, definitions and examples of entirely new concepts, and good resources I could use to study on my own. It was amazing! Instead of feeling generally reluctant, frustrated, and confused, I felt excited, joyful, and insatiable! After we were done for the day, I couldn’t get myself to go to sleep at a decent hour, because I was so excited about all the reading I was doing. By the end of the next day, I had a solid understanding of the basics of Lua, Common Lisp, and Racket, I had written several small programs in Racket including a webpage, and I could write a macro in Lisp. Now that is what learning should be like.

Conclusions:

  1. If I’m programming, I’m a programmer.
  2. Programming languages are friends.
  3. Teaching a new way of thinking is not possible. Learning a new way of thinking is.

Version 1 was mind-blowing, and I can’t wait to find out what Version 2 will be like.

– Kia

IDP

One of the most powerful secrets of the McCarthy Protocols is the Intentional Development Protocol, or IDP, which is not actually one of the Core Protocols, and which I can’t find a link to, so I’ll attempt to describe it here:

It’s pretty commonly accepted that in making any product, a team has to perform a wickedly difficult balancing act among three attributes: resources required, time required, and quality achieved. Usually, the problem is that there are a fixed timeline and fixed resources for building the project, but to get a product of high quality, more time and resources might be needed.

Scary Idea: What if we could have it all? What if we could have a high-quality product on time with exactly the resources we have?

IDP is a suggestion for how to do this:

  1. The team decides on a clear Shared Vision, which is a far future vision of what the world will be like after the team completes all of its work on this planet. (Note: “team” includes those of the marketing and product management persuasions, as well as developers.) It is a requirement that every member of the team believe that the Shared Vision is truly great.
  2. They decide what this Version will be, which is just a smaller version of the Shared Vision or the next step they can take toward it. (This is usually the product that will be shipped by the next ship date.)
  3. They decide and prioritize a set of features for the Version, each of which directly support the Shared Vision.
  4. They start implementing those features one by one, starting with the highest priority one.
  5. When the ship date is getting close, the team stops adding features and focuses entirely on testing and polishing.
  6. When the ship date arrives, the product is shipped.

This is a neat trick. Since the Shared Vision is considered great by every member of the team, and every Version is completely aligned with the Shared Vision, and every feature of every Version is directly in support of the Shared Vision, then the product development can stop whenever it needs to in order to meet the ship date and the team will still consider the product to be great. In other words, the team delivers great products on time every time with exactly the resources they have.

For example, if the Shared Vision is, “a computer on every desk,” then Version 1 might be “a computer on every desk in the company.” In this particular example, it isn’t directly obvious that Version 1 is a product, but in a sense it is. Once the company has completed it, they have added wealth to the world.

Currently, we’re on Version 1 of our Shared Vision, which is the tagline of this blog: “Enabling Mental Freedom.” [Edit: We’ve changed our Shared Vision since this post.] One really effective way to enable mental freedom is to encourage new ways of thinking, so our Version 1 is to each teach the other a new way of thinking. I asked Charlie to help me rekindle my passion in programming, and he asked me to help him understand the Chinese cultural concept Guanxi. If we succeed, not only will we have made progress toward our Shared Vision in that each of us will have more mental freedom, but we also will have gained valuable insight into how to enable mental freedom in others because of having experienced the phenomenon ourselves. If we fail, we’ll probably learn even more valuable lessons from our mistakes.

I’ll tell you how it goes.

– Kia