Future coding in VR

I’ve been doing a lot of computer programming for VR recently. Yet my software tools are still grounded in traditional screen-based methods.

I am starting to wonder whether the look and feel of computer programming itself will end up evolving, as we start to work more and more in VR. This question will make sense to anyone who remembers the era of punched cards.

Back then you needed to write an entire program, prepare a set of cards with one instruction per line, and submit your deck to compile and run. If you made an error, you had a chance to correct it the next day and try again.

Of course all of that changed after people could program interactively. Errors are now caught immediately, and the ability to rapidly iterate on your program design is simply taken for granted.

Might we see a similar sort of fundamental power-up once we replace screen-based software tools with completely immersive software tools? Will there be a new kind of power-up in productivity that we can as yet only vaguely imagine?

I guess this is a case for Alan Kay’s dictum: The best way to predict the future is to invent it.

Collaborative design by coding

I have spent many years doing visual design by coding. I know I am far from the only person who designs this way.

There are very good programs out there, like Blender and SketchUp, to let people work with a graphical user interface to visually sketch out their ideas. But for me the power of working in code is just too great to ignore.

Using function calls and definitions, loops and conditionals, and a well-chosen set of primitives, I can quickly put together visual representations of what is in my head. The standard tools for visual artists just don’t give me the kind of procedural power I need.

But there is a problem when I want to collaborate: Other people don’t work the way I do, so what I do ends up seeming like a kind of black magic to collaborators and potential collaborators.

I wonder whether it would be possible to develop a kind of literacy in this style of “prototyping through code” for visual artists. It would be great to have a truly shared language for such things.

I know that p5.js (the successor to Processing) already does a version of that, but I find it to be limiting in its capabilities. Maybe it’s time to propose an alternative.

Green tree irony

Ever since I was little I associated the color green with life-giving sunshine. This was natural I suppose. You look around and the world is covered in green trees and other plants, soaking up all of that yummy sunlight and using it to create the nutritious food that sustains all of life.

But then at some point I realized that I had it exactly wrong. The reason tree leaves are green is that green is the one color from which chlorophyl does not absorb energy. What cannot be absorbed is reflected.

So basically, when we look at a lush verdant forest, we are seeing sunlight’s reject. There is something kind of ironic about that.

But also kind of neat.

TV commercials

Why do TV commercials work? I have been wondering this since I was a little child.

Nobody really seems to like them. When they show up on our phone we eagerly skip past them as soon as we can.

When we see them on TV they drive us crazy. They end up disrupting our experience of whatever movie or TV show we were watching.

Yet clearly we still go out and buy the products they are hawking. Why else would people spend so much time and money getting them in front of our faces?

There must be some rational explanation for the phenomenon of TV commercials. Has somebody actually figured out why they work?

The question in question

One year at our annual Siggraph conference, I was the chair of one of the technical paper sessions. That position comes with certain responsibilities.

For one thing, you are responsible for calling on people in the audience who want to ask questions. That is assuming, of course, that somebody ends up wanting to ask a question.

Every once in a while, an author presents his or her work, and nobody in the audience ends up asking a question. When that happens, it is expected that the session chair will rise to the occasion and ask a pertinent question.

Unfortunately, during one of the paper presentations I zoned out. And wouldn’t you know, at the end of that presentation there were no questions.

So here I was, faced with the responsibility of asking a question, and having no idea what the author had just been talking about. So I decided to try to fake it.

“Great presentation,” I said. “If you had another year to work on this,” I asked, “What would you focus on?”

The author was very eager to answer my question. He happily explained to the audience how he would extend his research given another year.

During the coffee break that followed, I got into a conversation with a colleague. He told me that he had really enjoyed the session, and then he made a surprising observation.

“You know,” he said, “it occurred to me that the question you asked would have worked equally well in any situation. What do you think?”

I couldn’t think of a response, so I just nodded thoughtfully.

Birthdays today

I know someone who was born on December 25. He is also a devout Christian.

He told me recently that his whole life, he was not the most celebrated birthday boy, for reasons that should be obvious. And he is more than ok with that.

There is something about the humility in that statement that I find very appealing.

Low level optimization

I have been doing a lot of computer programming recently, and I am struck by how many of the same principles keep recurring. No matter what project you work on, some things always seem to be true.

One of those principles concerns optimization. Interactive computer animation needs to be fast. This is especially true when you are trying to compute a virtual reality scene at 90 frames per second for both a left and a right eye on a VR headset that’s not all that powerful, like the Oculus Quest.

So you’re always trying to optimize things. But you don’t want to do that in a way that is going to make your program big and unwieldy and complicated.

It turns out that a good principle is to push down all of the optimizations to the lowest level possible. You need to find the place in your code where things are simple and stupid.

I think it comes down to the fact that computers are really fast but also really stupid. And you need to respect both their speed and their stupidity. If you can manage to remember that, you’ll be ok.


Saw the Jupiter/Saturn conjunction last night. Last night, December 21, you could see Jupiter and Saturn nearer to each other in the night sky than we would have been able to see since about 800 years ago.

If you didn’t see it, you haven’t totally missed it yet. Tonight and for the next few nights they will still be nearly as close.

It was magnificent. I bought a telescope just for the occasion, and I am very happy that I did. As an extra bonus, the three largest moons of Jupiter were stretched out in a perfect line with Jupiter itself, and the whole thing was quite beautiful and thrilling.

Now I have caught the planetary astronomy bug, and I want to see more. I am going to need to need a bigger telescope.

I imagine a lot of other people are having similar experiences, something that probably happens every time there is a major celestial event.

Maybe we can all form a club, We could call it the Astronomical New Devotees (AND) society.

Which iI guess makes sense, because AND is a conjunction. 🙂