Thoughts on concurrency and ubicomp development

Pile of devices

Not actually my devices, in case you were wondering

It has come to this. I am at breakfast table with five different portable/wearable devices.

They each have relatively low processing power. They get stuck all the time since I run so many apps.

So I’m thinking, couldn’t each of these devices effortlessly offload processing load to each other, wirelessly? How far are we from a future, where concurrency is so advanced?

This would seem to make it possible to make the user experiences a lot more fluid. We could make mobile devices that provide processing power where user focus is. Accordingly, it would allow deprioritization of tasks on devices the user isn’t currently interested in.

To non-techie humans, individual devices are irrelevant except as physical affordances to information: Physical placeholders/reminders of available functionality and experiences. Enabling this is what our hardware and software design should be driven by, on broad scale. As far as I can see, anyway.

So a friend asked me,

“Do we really need more processing power? Can’t this all be solved with code that is just a little more optimized?

What I’m going for is: Can  concurrency can be built into platforms / high abstraction level programming languages? I.e. abstracted away, like garbage collection abstracts away memory management (whatever your opinion is on *that*).

In such a platform you wouldn’t have to get lost in mutexes to get something like this to work, but could actually concentrate on creating user value on a higher level.

Could we actually build applications without caring about which device the application is running on?

(This is implied in ubiquitous computing or ubicomp)

Making code more optimized requires humans coding those applications. The limitation is that there are extremely few people who are interested in all three:

a) creating superb user experience
b) optimizing code for optimal hardware use and
c) building viable business.

AFAIK often optimization gets irrelevant enough fast enough for it to get never done in real life commercial projects.

We need this to work without requiring the whole stack to be custom built every time! The easier it is for UX/business types to be closer to WHERE THE ACTUAL BUILDING HAPPENS,  the more likely it is that commercially/UX-wise viable applications actually get built.

It’s easy to think there’s enough processing power for everyone if you can always afford to buy the highest end single device available. For my personal use case above, this fails because those devices are both not durable enough and lack a keyboard. Mobile processing power is still part of the compromise you are making in these cases.

In developing countries the most common devices will not be high end devices. If we had a platform where processing capacity could be shared, that might be enormously powerful.

See also: Related discussion on Facebook

Photo: Blake Patterson

Hey! What did you think?