Where is Computer Science going in the next 10 years?

phil jones
5 min readOct 5, 2015

--

Just as a little experiment, I’m cross-posting this answer I wrote on Quora to Medium to see if anyone likes it. It’s a summary of a lot of trends I’m paying attention to these days, and forms a fairly coherent overview of how I think the next 10 years will play out.

So, where is Computer Science going in the next 10 years?

Thesis 1 : Lots of computers

Firstly, we are going to continue with the explosive growth in the number of computers. There used to be a few very (physically) large and expensive computers for a lot of people.

By the late 80s / early 90s we had the idea of “personal” computers. A one-to-one ratio between computers and people. Today, most people own several working computers, and carry at least two or three of them around habitually. (Laptop + tablet + phone).

Very soon, most people will own / interact with tens (or even hundreds) of computers. As wearable devices, embedded in your home and household appliances, in your car, in public infrastructure etc. These won’t necessarily be very powerful computers, though plenty of them will be more powerful than your laptop today. And what they’ll spend most of their time doing is talking to each other.

This “device swarm” will not be composed of dozens of identical processors, but will be highly diverse, in both power and functionality.

Applications will be written, increasingly, for such heterogeneous collectives.

Applications will be designed to work and sync. seamlessly between a data-centre in Sweden, your home server, the phone you carry in your pocket and your watch / glasses etc.

Programming in this environment will mean :

- learning about Functional Programming ideas, techniques and languages.

- understanding Reactive Programming (possibly Functional Reactive Programming) for handling the interaction between the swarm and the user.

- thinking in terms of message queues and encapsulating packets of functionality in notifications that flow through the network

- designing for a highly dynamically reconfigured architecture … devices will join and leave the swarm at all times … software has to be able to adapt, to track new resources that are becoming available (eg. I put a different smart-watch on) or disappear (my phone runs out of battery). It has to be able to search for and handshake with new service providers.

Huge amounts of data need to be handled and processed. More of the actual processing will also need to be parallelised. Not just across multiple machines in large data-centres, but also at local nodes in the network closer to the users generating it.

Calculation and inference needs to migrate through the network too.

Processing also needs to collate from many sources. Self-driving cars will share huge amounts of live data about traffic conditions and traffic flow. Other urban infrastructure will do the same. User-side software will increasingly mine and analyse the behaviour of its own user, and their social locality.

As the device swarm gets cheaper, we’ll see more fragmentation and modularization creeping into “traditional” computer areas. Some people may still work with a “desktop PC”, but that will mean a keyboard and screen which are just the front-end to half a dozen specialized resources: storage server, graphics server, firewall, encryption server etc. All of which may be hot-swappable modules.

Thesis 2 : Within this rich broth of ubiquitous computing / internet of things, we’ll finally see “The Rise of the Robots”

Initially, home automation … turning on the lights, opening doors and windows, washing and cooking at the appropriate time. But then self-driving cars. Delivery drones. Cleaning robots for shops and hospitals and offices.

We’ll see the continual development of desktop fabrication technologies … 3D printers, sinterers and CNC machines. Not in the home, but in your home-town. Increasing numbers of designers and makers of custom physical stuff : all created through this technology and interacting with a world which is increasingly scanned and mapped in detail by cheap sensors.

Creativity and design of hardware will flourish. Integration between hardware and software will increase until the distinction breaks down : the device swarm will incorporate software “compiled” into custom electronics (ASICs) or even custom mechatronics. “Programming a robot” may come to mean that your program specifies and becomes the actual body as well as mind of the robot.

Everyone will pack drones. Small, portable flying cameras. For security. For leisure. For conveniences that haven’t even been thought of yet.

Thesis 3 : All of this needs to be secure

From accidental failure to deliberate cyber-warfare. From phishing and identity theft to mass spoofing of distributed infrastructure and data-collection; to swarms of quad-copters cruising down the street looking for open windows that afford opportunistic burglary. The world (and you) are facing a terrifying security nightmare that you haven’t even begun to imagine.

Thesis 4 : The number of programmers is increasing rapidly too

There are more people writing code than ever before. This is both a huge blessing and a huge challenge. On the one hand, the amount of human creativity and ingenuity available to put into software is spectacular. On the other, social programming is here but co-ordination and collaboration issues abound. Brooks’s point, in The Mythical Man Month still holds. Programmers are not “fungible”. How do you stop so many programmers working at cross-purposes? How do you avoid wasting all their energy in the redundant creation of hundreds or thousands of libraries and frameworks trying to do more or less the same thing? How do you avoid your stacks becoming over-complex and brittle? Complexity and composability are the eternal problems in software. And the problems scale wonderfully catastrophically as the computers themselves proliferate.

We need to invent new strategies, methods and tools to better discover and learn and compose existing work, rather than continually reinvent it.

One thing I think will become increasingly important is “upfactoring”. That is, the automated analysis of legacy code and systems; and their resynthesis in new, more robust and powerful languages.

In summary

So that’s that world that computer science is going to be inhabiting in the next 10 years. And the world it needs to prepare for.

Massively parallel, distributed real-time processing across heterogeneous devices in loosely coupled, dynamically shifting networks. Computation needs to be mobile (i.e.. migrate across the network). It needs to handle masses of data. And needs to be secure and robust. It will be fed by millions of sensors. And will drive tens of thousands of actuators. In real-time, in a world where machines have to move and manoeuvre fast and are closely coupled with physical, moving human bodies. Without killing (too many of) them.

And software needs to up its social game too. To take advantage of and thrive in an exploding population of programmers. We dismiss many social issues in our professions as “politics”. But we need to learn to do better “politics”.

Enabled by tools.

Git and GitHub are good starts. The allegedly distributed management structure of companies such as GitHub or Valve are a promising direction. Free / Libre / Open Source Software (FLOSS) has been the most important social revolution in decades. Extreme Programming, Agile, Pattern Languages all have a place. But there is more to be done and discovered as we teach an increasing multitude of machines to work together, and in doing so, learn better how to work together ourselves.

--

--