Multi Core Processors, Scalability, Devices with always-on Broadband Access - Some of the Future Programming Challenges

What are the future technology trends and what impact will they have for us programmers? Here are my thoughts on this.

From my point of view there are 3 major changes that will influence technology dramatically:

  • Multi core processors and parallel programming will become standard
  • Many more devices will have broadband Internet access, not only computers and mobile phones
  • This results in increased scalability requirements for Internet services

As everybody already realized, the clock rate of the processors in our computers don’t increase anymore. Instead there are dual core and quad core chips at the moment. There is a trend to put more and more processors on one chip.  It will not take long time and there are 32, 64, 128 or a few years later thousands and millions of processors on one single chip. The biggest problem with this trend is, that the software is not written for supporting multiple processors. Currently people say that you benefit from dual or quad core in a way that you can run several applications in parallel. But even when you can spread individual threads of you application across several processors, you hit a point where hundreds of processors are unused. I’m pretty sure that in the future - we as software developers - have to program for parallelism in mind. Currently most of the programming languages don’t have parallel concepts built into the language. Erlang is probably the most prominent exception. Parallel computing is very difficult, but not a new topic, so there already exists a lot of experience, concepts and solutions.

Secondly broadband Internet access will be available for every device everywhere. I don’t care if it is 4G, 5G, WLAN extrem or LAN, fact is the network bandwidth is there. And with broadband Internet access I mean a bandwidth that enables you to stream video on demand to any device. Chips will be available that manufacturers of different kind of products will have Internet access built into their products. Can you imagine the possibilities?

These two trends result in new scalability requirements of the services, because many more clients request information. Traditional 3-tier-architectures with web server layer, application server layer and database layer only scale to a certain extend. I assume that many of those services will be replaced by new highly scalable solutions similar to Google AppEngine and Amazon Elastic Compute Cloud (Amazon EC2).

Now let’s have a look at some existing programming languages and how they eventually support those new trends. I’m an extensive Java user, but not always very happy with the language and especially with the J2SE standard libraries. Java definitely will improve the support for multi core servers as they always mention, but I doubt that it will have language level support for other parallel computing techniques like map/reduce. Currently there are other programming languages that get more and more popular then traditional Java, C++, or C#. Two of them are the scripting languages Ruby and Python. From my point of view they are quite similar but I prefer Python, not because I think it is the better language. It’s just because it is used and supported by Google and they have a really dominant role. Additionally Python has native support of the map/reduce concept and is the major technology behind Google’s AppEngine. I also believe that Python will play an important role for scalable web applications and parallel computing. Erlang is another interesting language with a strong support of concurrent and distributed programming. I don’t think that a functional programming language will be a huge success. It’s just not the way people normally think and structure tasks. I remember the time at the university where I had to learn Lisp. For some problems you can write really elegant programs but I didn’t continue to use it later. A few years ago PHP/MySQL was the number one web technology out there, but I think it will loose attraction. This combination is just not made for the requirements in the future. Microsoft is an own story. It will still be an important company with a big community, but will continuously loose to be important. There are many other interesting programming languages like Scala, but none convinced me to be the future language.

Conclusion, people like scripting languages, and prefer short code and quick results over strong typing and complex syntax. But I did not find the perfect programming language yet, so there is probably a good time to invent something new.

Another important aspect of the new parallelism concept is data. I’m pretty sure most of the DBA’s disagree, but traditional databases are often not the right tool for many problems. First of all databases don’t scale well, and are simply too complex for storing simple data. The whole object relational (O/R) mapping topic is a disaster. Of course, databases have its place and will have its place in the future, but you can already see some alternatives like Google bigtable, Amazon S3 or Hbase.

The iPhone and Google Android already showed it. New devices and new input methods will come up. But not only PC’s and mobile phones with Internet access will exist, also many other new devices and products. The biggest problem at the moment is, that there is no platform, operating system, programming language and environment on the market that enables those device manufacturers to create new products very easy. Google Android is an exception, and enables companies to create custom applications quite easy. But currently it is only available for mobile phones with a well-defined specification.

My Vision

I believe right now it is a perfect time for a new operating system, programming language and environment, and I would have so many innovative ideas for it. Here are some of ideas for the operating system:

  • It has to be secure by design
  • Support concurrent and distributed computing concepts
  • Network enabled
  • Can be used on servers, desktops, mobile phones and many other devices
  • Supports different output and input methods

Probably many will argue that it is very difficult for people to accept a new operating system and new concepts. Additionally how do you get companies to write applications for the new operating system with the new programming language? Can you remember, Steve Jobs had a brilliant computer and environment with NeXT. Years ahead of Windows, Unix and Mac but also failed.

I think the situation has changed dramatically. My vision is that you don’t need such a big operating system like Windows Vista bundled with its thousands of applications. The only thing that is required is a web browser with some extended functionality. I think this is enough as a desktop replacement. Combined with some new ways for input and output like on the iPhone, but for the desktop, it would be perfect.
Applications you would get with this concept:

  • Email (e.g. Google Mail, Yahoo! Mail, Hotmail, …)
  • Calendar (e.g. Google Calendar, …)
  • Office (e.g. Google Docs and Spreadsheet, …)
  • Project management tools (e.g. Mingle, Jira, Confluence, …)
  • Messaging (e.g. Google Talk, …)
  • Programming environments (e.g. Heroku, …)
  • And many many more

I have so many ideas for a future operating system, programming environment, device support. If I would have the time, money, people and resources I would start this project immediately.

One Response to “Multi Core Processors, Scalability, Devices with always-on Broadband Access - Some of the Future Programming Challenges”

  1. voqk Says:

    I have seen a lot of discussion regarding the join/fork framework in JDK 7 regarding concurrent programming. Also another interesting Java framework available for developing data intensive apps to take advantage of multi-core hardware is DataRush.

Leave a Reply