Today, I had to stop myself writing “solving the problem” about developing software. Why do we say that? Why do software people call any bounded area of reality “the problem domain”?
My change of mind has been fermenting for a while, due to modelling business processes, learning about incremental, agile software development and more recently writing and learning functional programming. In the shower this morning, I finally concluded that I think software is primarily a modelling medium. We solve problems using the models we build.
Wanting to create another first-person shooter game or to model the fluids in a thermo-nuclear reactor are challenges, not problems. We build models of systems we have defined and the systems don’t even have to be real. I read a couple of days ago that a famous modern philosopher said our world is made of both reality and our ideas. Assuming the computer hardware is real, the software can model either reality or our imagination; our chosen narrative.
‘Digital’ gets everyone working with software models instead of reality. Once everyone lives inside the shared model, when does it become our reality?
Or when did it?
It’s been a while since I blogged. I’ve been busy.
A major theme emerging from ‘writing my book’ is that we humans are very bad at confusing our models of reality with the reality we are modelling.
I started planning with the ‘Freemind mind-mapping tool for hierarchical brains’ before finding my own creative process had a network architecture and discovering ‘concept mapping’ which uses graphs to represent concepts and propositions. I saw that graphs were what I needed and decided to experiment with building my own software tools from bits I had lying around.
I didn’t have a current programming language, so I set out to learn Clojure. Being a Lisp, Clojure uses tree-structures internally to represent lists and extends the idea to abstractions such as collections but the only native data structures available to me appeared to be 1-dimensional. I confidently expected to be able to find ways to extend this to 3 or more dimensional graphs but despite much reading and learning lots of other things, I’d failed to find what I was looking for. I had in mind the kind of structures you can build with pointers, in languages like ‘C’. There are graph libraries but I was too new to Clojure to believe my first serious program needed to be dependent on language extensions, when I haven’t securely grasped the basics.
This morning, I think I ‘got it’. I am trying to build a computational model of my graphical view of a mathematical idea which models a cognitive model of reality. There was always scope for confusion. Graphs aren’t really a picture, they are a set of 1-dimensional connections and potentially another set of potential views of those connections, constructed for a particular purpose. I was trying to build a data structure of a view of a graph, not the graph itself and that was a really bad idea. At least I didn’t get software confused with ‘actual’ reality, so there’s still hope for me.
Yesterday, I used Clojure/Leiningen’s in-built Test-Driven Development tool for the first time. It looks great. The functional model makes TDD simple.
After its Autumn maintenance shutdown, the Large Idea Collider is back up to operating temperature. I’ve run a few simple tests in the shower this morning (the cooling system?)
A link provided by video provocateur http://emmapuente.com/ showed a dancer interacting with a digital grid, projected onto an invisible net box in which she performed. It reminded me of a band called ‘Mad Action’, that I saw in about 2003. They were a 2-piece who performed inside a 3-sided white box onto which were projected the shadows of 2 other virtual musicians, probably also them, who were also playing on a pre-recorded backing track. Their ‘real world shadows’ were also cast onto the sheet. The audience experience was a combination of reality and projection from a virtual world and different from those trapped inside the boxes, arguably more ‘real’.
For quite a while, I’ve been using the Internet slang IRL (In Real Life) fairly sarcastically, as a large proportion of my life seems to take part in this semi-virtual domain. Obviously, I’m not alone here, @euan regularly talks about his networked life, http://euansemple.com/theobvious/.
As already reported, the time-shifted video of Hal Abelson’s (http://codequarterly.com/2011/hal-abelson/) 6.001 course at MIT re-enforced my belief that process (and therefore software) exists outside of our gravitational field. It is a world in which, he argues, we can do anything we can imagine. He must lack imagination but we can do ALMOST anything.
The question then, is: where is the Human Computer Interface now? Forget that question! Half of the computational machinery I use is virtual too. Where is the boundary between reality and our (almost) wildest dreams?
Here’s a woman dancing in a virtual box. Or is it the other way around?
p.s. Is this what famous mathematician Charles Dodgson was grasping for, in his philosophical book about mirrors? https://en.wikipedia.org/wiki/Lewis_Carroll