Exactly How Do You Find Qualified Parallel Programming Professionals?
Right off the bat, most of the IT managers that handle the small development support staffs are off the hook regarding fears that have to do with parallel programming. They've got one of the easiest ways out. Just defer the parallel programming requirements to the cloud. Problem solved!
Then there are the army of software-consultant-integrator-developers out there that, when faced with the problems of maximizing multiple cores, will simply bill the client for the latest, greatest, one-size-fits-all-multicore-programming-in-a-box solutions, and inform the customer that everything is running at top efficiency. Problem solved!
Then, there are the poor shmucks whose job it is to make the Cloud go, or who have the mind-altering responsibility of building the one-size-fits-all-multicore-programming-in-a-box solutions, or the guys and gals that are staring down the barrel of some HPC (High Performance Computing) scientist's gun. These boys and girls actually have to do the do. Recently, I was at an organization that actually needed to hire one of these unfortunate types. So my first response was, well, look in the classified ads. See how everybody else advertises for a person with the requisite skill set and copy cat.
Surprise, surprise, surprise — I had no idea what the state of software development job advertising had fallen to. I've been lucky enough to not have to worry about the want-ads for a while. My, my, my, how things have changed. I was stunned to see ads that were looking for software developers whose responsibilities included things like:
- Responsible for all high level customer interaction and satisfaction;
- Must be knowledgeable of installing and maintaining large scale networks;
- Responsible for the installation and maintenance of Corporate DBMS;
- Responsible for setting and enforcing corporate software security policy;
- Website development, and maintenance, Youtube and channel content programming, Windows-Enterprise This-N-That, Mobile Programming, App Development, Virus, Spyware, Malware, and Spam removal, Cloud Liason, etc.
Mind you, this list has been paired down a wee bit and paraphrased so as not to cause an outcry from any particular company. But I couldn't imagine adding the myriad tasks involved in designing, developing, installing, and maintaining, software that required serious parallelism to any poor soul that had such a job duty list. What have things come to?
Sure, there were some ads out there that advertised for a software developer, software engineer, or programmer/analyst where the job duties were very much in line with the job title. But on that day, they were few and far between. I don't even know how with a straight face these companies place an ad like this for a single person, not to mention a software developer.
So what can you do if you're looking for someone who understands how to get the most out of instruction-level parallelism and understands compilers, multithreading, thread libraries, mutexes, semaphores, pipes, msgqueues, locking, dead locks, data race, parallel algorithms, parallel data structures, shared memory, vector programming, clustering, massive parallelism, parallel simulation, debugging tracing, documenting parallel systems at the user level, application level, operating system level, and hardware level? Someone who understands all of the various message passing schemes, including MPI, PVM, etc.? Someone who is familiar with languages like Erlang, Parallel C++, Parlog? Someone that knows the latest greatest one-size-fits-all-multicore-programming-in-a-box tools? Someone that is knowledgeable about task-level parallelism and system decomposition; someone that is interested in trying new parallel programming paradigms; or someone who would like to invent new parallel programming paradigms?
How do you advertise for such a person(s)? If we were to add these requirements to some of the want-ads I saw, it would clear the room. Maybe we should use an Android or iPhone app to contact Watson in the cloud to get some direction.