The recruiter said, “I have observed that Unix hackers scowl or become annoyed when I ask them how many years of experience they have in a new programming language. Why is this so?”
Master Foo stood, and began to pace across the office floor. The recruiter was puzzled, and asked “What are you doing?”
“I am learning to walk,” replied Master Foo.
“I saw you walk through that door” the recruiter exclaimed, “and you are not stumbling over your own feet. Obviously you already know how to walk.”
“Yes, but this floor is new to me.” replied Master Foo.
Upon hearing this, the recruiter was enlightened.
--Raymond, Eric S., ed., "Master Foo and the Recruiter", Rootless Root, http://catb.org/esr/writings/unix-koans/recruiter.html
Though I note that in real life the recruiter would never be enlightened. He is beholden to the HR departments, and the HR departments have settled on a system which works for their purposes.
1) Learning the intricacies of a language takes some time before you're truly proficient in it.
2) Different languages demand a different approach to problems, a different style of forming the solution. A programmer with 10 years of experience in Ruby and 0 years of C is less desirable for a C programming position than a programmer with 5 years of experience in C. Though the Ruby programmer will be quick to pick up Python, he/she never had to deal with manual memory management, pointer arithmetic, and all the pitfalls that come with those.
You might come across a ML job advert that says the person needs to know Matlab. Well, what if you're a Numpy or R ML guy? It's quite clear to me that such a person is just as well qualified.
If you're looking for a compiler guy, you want someone who understands those optimisations on a theoretical level, ie abstracted away from the concrete language. The toolset may be completely different for each language, but people with equivalent fundamental knowledge should not be separated just by what tool they happened to use.
Do you think when Google decided to create the V8 JavaScript JIT they hired a couple of Django programmers and asked them to google 'how to write a JIT'? Or do you think they specified a certain level of experience in writing JITs on the job advert?
That really depends on what "from scratch" means. Any particular piece of code can be examined in enough detail that nobody in the whole world would understand all of them. Luckily people who understand specific pieces will produce a part for others to use. Often the only thing that hasn't been done before is one particular mashup of existing parts. Then the skill of coding is like the skill of cooking: using judgement to assemble well known parts into a new whole.
> Do you think when Google decided to create the V8 JavaScript JIT they hired a couple of Django programmers and asked them to google 'how to write a JIT'? Or do you think they specified a certain level of experience in writing JITs on the job advert?
That wasn't the point. I'm not saying that any programmer can do any programming job. But that the selection criterion (language, framework) is in general wrong. If you have a guy who did a JIT for Java, do you disqualify that guy from a JIT for Go job? I don't think so.
It bothers me how job ads tend to focus on various buzzwords. I'm quite sure you're better off hiring someone with good fundamentals who can learn your stack, rather than someone who is a novice but has some experience in the stack.
I started off doing financial trading code in c++ / c#. It wasn't a huge leap doing Android and iOS. Principles are the same:
- Some kind of OO. They are all pretty similar for most purposes. C++ is maybe a bit more intricate. Similarly, some kind of functional/lambda.
- Some way to access a database. Plenty of ORMs or ways to do SQL if you need that.
- Some GUI organisational principles. WinForms, WPF, Qt, Android, iOS, whatever. They tend to have things like "only draw on the main thread" and a pile of APIs for organising the screens, buttons, and so forth. But if you've done one, you're not going to need a course to do another.
- StackOverflow will tell you everything that's pure translation. Things like {} dicts for python.
- Get a brief tutorial for each new language/framework. They're all over the web, and the main point it just to highlight the features.