Where are all the jobs in the computer?

To begin, let me clarify that this article is not meant to be an employment search guide! It is planned to give only a few indications to choose the right courses.

If you are in the computer world, know that nowadays, the mantra is: multicore processors rather than extremely fast single-core processors. Gone are the clock start times where you would see a jump in processor clock speed every couple of weeks or so. In one way, the computer industry has reached a theoretical hurdle at the clock speed. The focus is now on including multiple kernels on the same die. No wonder you see the commercials "dual-core CPU, tri-core, quad-core and soon octa-core". Unless there is a breakthrough in the field of microelectronics and cooling solutions, this "stuffing operation of several cores on the same matrix" will continue.

From the point of view of a normal computer user, this can look like "Wow! Two hearts, a double performance!". No … This is not quite true, in fact not even half true! There are some challenges inherent in the multi-core environment. What are these challenges? If you could find the answers to these challenges, then Hey Presto, you would most likely be hired! The challenge is "parallel programming". What is parallel programming? This is a concept that processes data processing in parallel. Let's say you have to perform this task: Fill two glasses of water. Assuming you have 2 glasses with you, 2 faucets and a large container, enough to hold 2 glasses of water, it's quite easy and fast. You can fill these two glasses with your two hands in parallel and there, you finish the task in two times less work than sequentially!

Now, what happens if you have 2 glasses, but only 1 tap? Even if you have enough resources, you have to do the work sequentially because you have to wait at the tap (the source). What happens if you have 2 faucets, 2 glasses, but a container big enough to hold a single glass of water? You have to wait until it is consumed, then fill it with the other glass. Do you see something that you can understand in the world of computing? The glasses are the CPU cores, the taps represent the programs, the container represents the bandwidth of the data. Logic? This means that if you do not have additional system components and a program optimized to be processed in parallel by multiple cores of the processor, the performance gain will be negligible, even if you have the most advanced processor in the world.

Let me reiterate the title of this article now: "Where are all the jobs in the computer industry? !!" The jobs are here:

1) making sure that there are as many faucets as glasses – development of algorithms and parallel programs that have been all these sequential years, so that every part of the program can be treated in parallel on each core of the CPU
2) making sure that there are more glasses – multicore CPU design, understanding of the shared memory problem, consistent caches, etc., so that you have more "workers" to carry to this task
3) to make sure the containers are big enough – design memory systems that can complement the multicore processors by occupying them, feeding them and extracting useful data / results without being the bottleneck

If you are interested in 1), you will likely be a computer student and you will have to take courses such as algorithms, parallel programming, GPGPU, etc.

If you are interested in 2), you will probably be a computer engineering student and you will have to take courses such as parallel architecture, GPU design, advanced microarchitecture, etc.

If you are interested in 3), then you will probably be an electrician [Electronics] Engineering student and IMO, you must take courses such as memory systems, digital design / IC, etc.

Whether IT architects develop multi-core processors or not, whether electrical engineers develop high-bandwidth systems or not, computer science students will always have the task of converting the billions of existing sequential computer programs into parallel. current multi-core processors. So, if you are a CS student, sign up for any courses related to parallel programming that you can. These are shooting courses in the essentials.

I hope this post has been helpful :)