Will new ecosystems make us, programmers, feel human again?
In Part 2, we explored the transparency of programming (or rather the lack of it) and came up with a way of visualising software (as a factory) to make programming more inclusive. Next, I would want to open up the world a bit by moving momentarily away from our two dimensional screens.
Despite computers having tremendous progress since the advent of home computing, somehow we are still staring into a glass rectangle. Luckily virtual and augmented realities are on the verge of being available for the masses. At least I am longing to engage my peripheral vision instead of always having a point of fixation on the screen (central vision). Sure, the VR/AR hardware is still costly, sometimes a bit clunky and even physically uncomfortable (especially for prolonged periods of time). The field just needs a bit more time to get past these quirks. But once it does, it will change the way computers and software are perceived.
Software has been evolving mostly through what is technically possible rather than being optimised for our human bodies and capabilities. Thus we are not utilising e.g. our magnificent motor skills or 3D visuo-spatial ability to the fullest.
Currently we use software. But instead of having a detached and somewhat limited tooling, we could experience software. For instance, a software project could be manifested as a collective environment (or as a part of a collective environment) for a team of software developers rather than being a pile of files on individual computers. “Using” would turn into “visiting”.
Let’s dream together how a software project could feel like in an alternative reality. First, put on your imaginary VR glasses, and remind yourself about the analogy of software project being a factory, where classes/functions/methods are seen as machines and calls to other parts are connected with conveyor belts/wires etc. The factory would be an actual three dimensional place. Now, ready yourself to take the last step by placing yourself on the factory floor, and look around. What do you see?
“I hear a soft beeping coming from a bit further away. A quick glance at my HUD reveals an automatically highlighted issue. I start walking towards the sound, and soon see a blinking warning light on one of the machines. Ah, already spotted what’s wrong here… The machine, which is responsible for billing credit cards, is missing a connection to a receipt generator. I’ll fix it by connecting a wire from the nearby receipt generator to the billing machine. Ta-da! Dependencies injected. To make sure that the machine is really okay (it does look a bit rusty), I should take a peek at its code panel. Yes, seems like the source code of this machine needs some tweaking, too. I’ll grab my physical keyboard, and make some minor adjustments. As I close the code panel, I realise the beeping has stopped. The green light assures me that the fix is working. I will ask my colleague to inspect the changes before committing them to the production version of the factory. Time for some lunch!”
Phew, back to reality! How did it feel to be suddenly surrounded by all these machines? It’s a bit like having something grand built out of LEGOs or such. It’s much more tangible than software usually is. So let’s try to break the imaginary experience into separate parts to understand why it’s exciting:
- Navigate/observe. You can move or walk around to get an overview of the software. You are more or less in a relaxed but aware state, seeing the components, the flows, the architecture. One can start by being “zoomed out”, so the unnecessary details are not obstructing the overall sense. Move a bit closer to see specific parts of the software with more detail, intentionally limiting your field of view. Spatial memory is powerful.
- Spot visual cues. We can make things reflect their state. Lots of code = a big machine. What about a piece of code that no one has touched for a long time? Add some cobweb to it. Some minor code convention mistake — add a bit of rust to the machine’s surface. Poor performance — the animation runs slowly and forcefully. And if you come across the most horrible spaghetti code spanning hundreds of lines? Well, make it look like a monster which is going to explode soon, taking down the whole factory.
- Focus. If there’s actually something that needs attention, you will probably need to edit the source code. Thus you should not be too distracted because of other things. Switch off everything else, and let that code dance on the screen! Also, a keyboard is the best tool (that I know of) for editing text, and now would be a good time to grab this specially crafted equipment (to avoid a sad 3D UI for inputting text).
- Collaborate. It’s an explicitly shared experience, a shared world. Things are not only happening on your laptop anymore. You can be in the same place, pointing out small details (code) and planning an overall structure (architecture) with your colleagues.
In these steps lies the essence. To be able to transition smoothly between working modes and different tools! No more being in the same position, using the same tool, staring at the same thing. Switch, move, adjust. That’s what we humans are good at. If you get stuck, change things! So let me give you another example.
How do you usually feel like when you are programming under a tight deadline, sitting in front of a screen? Your eyes are focused on a small area, some stress slowly piling up, adding bit of a tension to your body. Now, even with the virtual environment, would being immersed in a fast-paced factory setting change things? I am not so sure about that. When you need to have a tight focus, a factory might feel like a place to get some work done. But of course our work is not like that all the time. Sometimes we need slow down, reflect and be creative. And again we can use some magic: we are free to change the setting to suit the current working mood. If you need to activate your imagination, why be in a factory? Go somewhere where you can relax instead. Would a forest or a palace work for you?
The same software would still be there, just visualised as something different, maybe helping you to see things in new ways. We are able to change the scale, too. Sometimes you could be walking on the factory floor feeling smaller than the machines, or sometimes the previously enormous machinery could be fitted inside a project war room (a bit like having LEGOs on your table).
Talking about different settings, imagine companies trying to lure in new people not just by having a trendy office, but also having created the coolest proprietary visual world for their software projects. Welcome to the multiverse!
P.S. Although having a shared visual programming world, things would still stay the same under the hood. Yes, the code i.e. the text is still there! You can think of the visualisation as a compilation result. An extra layer, a tool. The only change or an addition to a regular codebase could be storing some coordinates and such in e.g. code comments (docblocks) or separate metafiles. The purpose is to make creation of software more accessible without taking anything away.