I have said this earlier, with the hardware guys pumping out multi-core processors, software developers will have to cope with them. Also the fact that number of cores in a multi-core processor are increasing at a fast rate, using them for increase in scalability is going to be one of the core skills of software development. In fact, increasingly, business models require scalability as a core feature of an application.
One of the ways of doing this is concurrency – a way of coding parallelism in the software world. This is one of the reasons some concurrent programming languages are being seen in the new light, especially Erlang. Erlang is an open source programming language designed at the Ericsson Computer Science Laboratory. Concurrency has arrived for the traditional imperative languages like Java, C++ and Python. However, a language that is developed with concurrency as inbuilt features will provide better semantic and syntactic support. The others will still have to handle workarounds for problems like global variables.
If you are thinking that all this applies only to system or server software, you are wrong. Even the personal computers will be based on multi-core architectures, so all software – right from applications like email clients, feed readers to a variety of business applications, including the Web applications – will demand it. Yes, even Web applications. ErlyWeb is a Web framework in Erlang and can be used as an indication of entry of concurrency into Web programming.
What does this means for a developer is that programming will now include learning to work with multi-core processors, by default. Whether a newbie or not, at least the basic theory of concurrent programming will be required in programming. And that will include challenging some of the fundamentals we know today, and probably even an effort to unlearn some of them. Like one of the critical steps in design would be to identify the tasks that can be executed in parallel. Or to understand the impact of the share nothing architecture or design the ability to handle the shared resources through parallel processes.
If someone asked me today about learning programming languages, my advise would definitely include at least one language that allowed concurrent programming. The future is in concurrency.