Am I Really That Unemployable?
Frustrated Programmer asks: "I'm a programmer with seven years of experience on various platforms/languages. The past few years, I've primarily freelanced, building my expertise in C/Unixes/Oracle, dabbled in Perl a bit. Since my last contract, I haven't been able to find any work at all. I've learned Java2 to update my skills, I know C++ from university, however, I can't seem to get a break from any companies. I get the same response, no Java experience, or no OOP experience. I'm wondering if this is a problem systematic of Canadian companies (specifically here in Montreal), or do any of my American cousins have run into the same problem? Anybody care to share their experiences?"
ANY parallel program can run on one computer. Does that make it serial? No! So get off the high horse and start thinking about what I'm saying.
What I'm saying is that there is a 1:1 relationship between EVERY OO program and EVERY parallel program. I'm not talking about a functional relationship, here, as you can implement any computable problem in any form you choose. I'm talking about an actual 1:1 code-level relationship.
Let's look at an example, to make this clear. Let's have a class called "Point", with four methods on it - getX, getY, setX and setY. It also has two private variables, X and Y. (Not very tidy, but - hey! - it's an example, not a CompSci exam entry!)
Each time a Point object is created, it will have these four methods and two private variables attached.
It is possible to parse this class into four distinct programs, accessing two variables in shared memory. The class has been parallelised, as it can now be run on 1+ machines in EXACTLY the same way as it ran as a single class.
To argue that a 1:1 relationship is the same as comparing the atom to the solar system is ludicrous. There's no 1:1 relationship there (ever seen an atom with a binary nucleus? ever seen particles orbiting electrons? ever seen an electron with rings?) and it's a vast over-simplification.
However, when you can directly translate on a 1:1 basis between ANY class and it's parallel form, it ceases to be an approximation and becomes an identical description.
Ok, so why run objects in this way? Because you don't need to faff around with all that stupid, meaningless CompSci parallel programming nonsense. If you can code parallel programs WITHOUT using a parallel programming language OR a specially-written parallel compiler, life becomes much easier. And, by modelling objects in the above way, you can distribute over any arbitrary number of machines, WITHOUT having to know how the code is to be divided up, beforehand.
(For those using Qt and KDE, this basically means that you can beowulf a window manager.)
It's a small world and it smells funny; I'd buy another if it wasn't for the money; Take back what I paid (SoM)
I hire programmers constantly.
I don't issue a shopping list of the languages, paradigms, applications, etc. that the successful applicants should know. Such lists are a primary indicator that the company you are dealing with is one that just *doesn't get it*. If you go to one of those companies, you will find yourself herded like cattle and dictated to by so-called "Human Resources" types who generally lack any insight into programming or development.
Those in school should also keep this in mind. The content learned during a degree is secondary. What is important is that, for a certain amount of time, you can be put under a lot of pressure, and learn a great deal without cracking.
Here's what I'm looking for:
1) Great communication skills - It does me no good to hire a genius that nobody understands, or who irritates customers
2) Graduate Of The School Of Hard Knocks - Graduates fresh from school generally are pumped full of misguided notions about their worth. While they may be paid handsomely after graduation, they are generally a drain on the company for the first 6 months to a year. I'd rather hire someone who has at least one computer-related nightmare job on their resume. These jobs generally build character and give the employee some perspective about what the work world is really about.
3) Signs of Life - Many applicants are very sluggish during the interview. I'm not hiring you so I can tell you what to do; I'm hiring you so I can give you a domain of responsibility and then not have to deal with it anymore. Take the initiative.
4) A brain - I don't particularly care about the degree, although it's generally a safe bet that a person who makes it through an engineering degree has some intelligence. If the person can show that they're motivated and willing to learn, then I'll hire them.