Friday, November 16, 2007

How will we adapt to the future?

When I was at QCon San Francisco last week, Martin Fowler put together a panel of 4 people that had been speakers at the conference. They accepted questions from the crowd, and I asked a question about the future of software development given recent changes in parallelism. I want to ask that same question here (with a little bit of preliminary set-up first).

There is general consensus that the current set of programming languages and paradigms is not well suited to concurrent/parallel programming - almost all of these languages were created with sequential, single-threaded development in mind. Given that it is now almost impossible to get a single-core CPU, and that the number of cores on a computer is going to keep expanding dramatically, we need to do something to address this pain point.

There seem to be four major things that we can change to address the parallelism/concurrency problem:

  1. The programming language
  2. The execution environment
  3. The abstractions and APIs
  4. The programmer

Which do you think is the most likely to succeed, and why?