Posted at C++ Soup!
by Dean Michael
While catching up on my C++ reading, I chanced upon this article from Intel Software Network by Dr. Dick Brown of St. Olaf College in Northfield, Minnesota which is basically pointing out the writing on the wall which I’ve already pointed out to colleagues while I was still in college. From the article:
This calls for teaching parallelism at all levels of the CS curriculum, starting with CS1 (introductory CS), because the need for learning to reason in parallel can no longer be just a subject area, like AI or HCI, but must become a universal skill, like programing or problem solving. Parallel thinking must become an integral part of CS education, like knowing how and when to write a function definition or having the skills to wield data abstraction and encapsulation effectively. Soon after our students are comfortable with “for” loops, we must give them a chance to write parallel “for” loops, together with some criteria for knowing when parallel “for” is appropriate. Among the various properties we point out with a new data structure, we must consider scalability: would you use a given strategy with gigabytes of data? Petabytes? What measures might one need to insure that an algorithm is thread-safe in its access of data? We used to safely hide these parallel computing concerns away in the hardware or in system code, and relegate the teaching of those issues to an upper level course or two, but now everyone needs to become educated in parallelism.
The above quote (with bold emphasis mine) shows that everyone who’s still in college or getting into college and studying computer science should start learning on their own about parallel computing (or at least leveraging the instructors who do have experience with it) because things in college are not going to change as fast as the technology is changing. I personally have seen the trend to parallel computing at various scales to be the next wave which computing will be riding as far back as 2003 (and 2002 when I was looking for an area/field to specialize in). Now that the time has come for 48-core experimental processors from Intel nonetheless becoming a reality, there’s no more time to waste hoping that programmers will have to avoid the intricacies and the basics of concurrent programming and parallel computing.
Maybe the tools will advance much like how Moore’s Law allowed programmers to get sloppy about straight-line sequential performance of code opting instead for non-robust scripting-style languages. Now that Moore’s law is moving sideways (horizontal scalability, adding more cores instead of faster processors) programmers left in the dark about how to do proper and efficient multi-threaded programming will have a hard time adapting. This is the next scarcity that all future businesses and consumers will rely on to be filled: the skills and experience required to develop applications that leverage the parallel computing paradigm. I personally do not believe that even if the tools advance to a point that allows programmers to hide behind abstractions for parallelism that the situation will be remedied — after all someone’s still going to have to write the libraries, the virtual machines, and the systems and then implementing the algorithms and working within the paradigm of parallel computing.
So if you’re a student right now thinking of going into Computer Science, better choose a school which has facilities, curricula, and instructors that cater to and offer parallel computing as part of as many subjects as possible. If you don’t have that luxury of choice, you can always keep abreast with the times and learn on your own leveraging the vast bodies of research that has already been done in the parallel computing field since the late 60′s to late 70′s.
If you are a professional programmer already now and would like to equip yourself to have relevant skills in the next decade, I suggest you start picking up languages like C++ (C++03 and C++0/1x) and Haskell that offer better support for concurrency at the language level that get translated to actual machine code. Once you are able to get the basics done and get to an intermediate level of proficiency with the tools and the technologies (and the concepts more importantly) I’d say it’s a skills upgrade that you owe yourself to stay relevant and competitive in the coming years.
How about you, what do you think about the current state of Computer Science education and the acceleration of the need for more parallel computing expertise and skills in the industry today?
Five years to the month after it was founded, cross-blog social networking widget 

![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=9135a731-bf6e-4c68-bb6d-03f6feeaa432)



Jeetu Mirchandani