Software Imagination

A system for thought

A well-designed system is not simply a bag of features. A good system is designed to encourage particular ways of thinking, with all features carefully and cohesively designed around that purpose.

Essay by Bret Victor

Bret highly recommend a book called Mindstorms. It describes the possibility for software systems to teach children powerful mental models of the world that aren’t available in other materials.

Anything is easy if you can assimilate it to your collection of models. If you can't, anything can be painfully difficult.

Dan Abramov recently released a course on his personal mental models of Javascript. It’s visual, and it helps you think of Javascript in terms of real, physical things, creating a robust mental model that provides you with intuition.

In my mind, we should take this a step farther and build programming languages that facilitate more powerful mental models. The language changes to change the way we think. Learning the language teaches us about the world.

A system for play

On Netflix's Abstract, Cas Holman talks about designing for play. Creating tools that don't come with instructions, or a single right answer and maximize unexpected solutions.

Software tools should be this way. Software work should become play.

When software and design tools feel like games, and kids 8-16 are better and faster than me at architecting and implementing solutions while having fun, we've done it right.

Even today, project managers and tech leads play a big role in making software work more playful. Create stories that leave space for an imaginative solution that you never expected.

A system for performance

Helen Sandi is a classical pianist turned software developer. She writes about masterclasses, where upcoming students present their work in front of an audience and address passionate constructive feedback from an expert in real time.

Can you imagine emotional presentation, interpretation, and improvisation in software? Can you imagine being a “software artist”?

If the process of programming and presenting a computer system engaged the senses - If it was visual, tactile, made sound - we might find that programming becomes emotional.

A system you can describe to help others learn

An important part of becoming a good learner is learning how to push out the frontier of what we can express with words. From the point of view of teaching someone to ride a bicycle, it’s not whether or not we can "tell" someone "in full" how to ride but rather what can be done to improve our ability to communicate with others (and with ourselves in internal dialogues) just enough to make a difference to learning to ride. The central theme of this chapter is the development of descriptive languages for talking about learning. - Papert, Mindstorms

A syntonic epistemological system

Software can make repetitive tasks convenient, but even more powerfully it can help us learn about how we think. A system that, when learned, teaches us about ourselves is an important system to build.

The need for drill and practice in arithmetic is a symptom of the absence of conditions for the syntonic learning of mathematics. The proper use of computers is to supply such conditions.

A system that disrupts education

What do we say to a child who has made such a beautiful theory? "That's great thinking, Johnny, but the theory is wrong"