Where are all the jobs in the computing industry??!!


To start with, let me clarify that this post is not meant to be a job search guide! It is intended to only give some pointers in choosing the right courses.

If you are in the field of computing, you would know that these days the mantra is Multi-core CPUs rather than Blazingly fast single-core CPUs. Gone are the days of clock-cranking where you would see a jump in the CPU clock speed every fortnight or so. In a way, the computing industry has reached a theoretical barrier of cranking the clock speed. The focus is now on inclusion of multiple cores on the same die. No wonder you see the "dual-core, tri-core, quad-core and soon octa-core CPU" ads. Unless there is a breakthrough in the field of microelectronics and cooling solutions, this "stuffing-of-more-cores-on-the-same-die" will continue.

From a normal computer user's perspective, it may seem like "Wow! Two cores, double performance!". Nope...Thats not entirely true, in fact not even half true! There are some inherent challenges in the multi-core environment. What are those challenges? If you can find the answers to these challenges, then Hey Presto you most probably would be hired! The challenge is 'Parallel Programming'. What is parallel programming? This is a concept, which deals with processing data in parallel. Lets say you need to perform this task: Fill two glasses of water. Assuming you have 2 glasses with you, 2 taps and a big container, enough to hold the water of 2 glasses, this is pretty easy and fast. You can fill in those two glasses with both your hands in parallel and there, you completed the task in half time as compared to doing that work sequentially!

Now, what happens if you have 2 glasses, but only 1 tap? Even though you have enough resources, you are forced to do the work sequentially because you need to wait on the tap (the source). What happens if you have 2 taps, 2 glasses but a container big enough to hold only one glass of water? You need to wait till its consumed and then fill in from the other glass. See something here which you can relate to the world of computing? The glasses are the cores of the CPU, the taps represent the programs, the container represents data bandwidth. Makes sense? What it all means is that if you do not have complementing system components and a program optimized to be processed in parallel by multiple cores of the CPU, the performance gain will be negligible even if you haf the world's most advanced CPU.

Let me iterate the title of this post now: "Where are all the jobs in the computing industry??!!" The jobs are here:

1) in making sure that there are as many taps as glasses - developing parallel algorithms and programs which all these years were sequential, so that each part of the program can be processed in parallel on each core of the CPU
2) in making sure that there are more glasses - designing multi-core CPUs, understanding the shared-memory problem, coherent caches etc, so that you have more "workers" for completing the task
3) in making sure that there are big enough containers - designing memory systems which can complement the multi-core CPUs by keeping them busy, feeding them with and extracting useful data/results without being the bottleneck

If you are interested in 1) then you will most probably be a Computer Sciences student and IMO you should take up courses like Algorithms, Parallel Programming, GPGPU etc.

If you are interested in 2) then you will most probably be a Computer Engineering student and IMO you should take up courses like Parallel Architecture, Design of GPUs, Advanced Microarchitecture etc.

If you are interested in 3) then you will most probably be an Electrical [Electronics] Engineering student and IMO you should take up courses like Memory Systems, Digital/IC Design etc.

Whether Computer architects come up with many-core CPUs or not, whether Electrical Engineers come up with high bandwidth systems or not, Computer Sciences students will always have the job of converting the billions of already existing sequential computer programs into parallel to make use of the current multi-core CPUs. So if you are a CS student go ahead and register for any and every Parallel Programming related course that you can. These are sure-shot job fetching courses.

I hope this post was useful :)

Comments

Glad, I'm a C.S. student (MCA).
I just started learning parallel processing algorithms.
Lets see how it goes!
Nice post!
Anirudh Acharya said…
Parallel programming? Thats good :) So what are you learning? MPI, OpenMP etc.?
calcium said…
Parallel programming is used specifically to serve working software developers, not just computer scientists. It is a complete, highly accessible pattern language that will help any experienced developer "think parallel"-and start writing effective parallel code almost immediately. Instead of formal theory, it deliver proven solutions to the challenges faced by parallel programmers, and pragmatic guidance for using today's parallel APIs in the real world.

Popular posts from this blog

My iNav Remix - iPhone and iPod Touch UI

Mac4Lin ver.1.0 Released!

Mac4Lin ver.1.0 Release Candidate