Master Foo and the Recruiter (2016)
catb.org
catb.org
Yes, theoretically, there's an abstract idea of what to do, and a programming language is a "mere" concrete expression of that idea.
In practice, however, there can be a world's difference between these concrete expressions.
Do a concurrent program in Python and in Go. Solve a particular problem in an imperative language vs. a functional one. Consider the consequences of static vs. dynamic typing. And so on.
At the minimum, this ignores that there are idiomatic ways to solve problems in a particular language.
I think this koan was more at the point at the time it was written (I'm assuming it was the ~80s), but there's been explosion of new concepts and new languages to fit them since, and I don't think it applies any longer.
The old "well Haskell ain't C++ ain't Java" doesn't go for the majority of real life cases. The majority of real life cases are recruiters tilting their head when a C# developer claims to be able to work in a Java shop writing basic CRUD code. Most of the grey zone between "basic CRUD" and "bleeding edge" also isn't too difficult to learn on the job.
Additionally, most languages are slowly implementing things from other paradigms. The only things preventing these features from being fully adopted are, in a twist of irony, the same jobs clinging onto the old ways.
There's been an explosion of languages, but not really an explosion of concepts.
Take my Python vs. Go concurrency example. That's just one fundamental concept, but with two very different solutions.
One could even argue that just the Python version alone can have significantly differing solutions, the choice of which is determined by the runtime (CPython or another implementation without a GIL).
Then, of course, there's the idiomatic way of doing things that cannot just be carried over from knowledge with other languages.
- syntax
- semantics
- idioms
- tools
- packages
The koan glosses over the time it takes to become familiar with the bigger language ecosystems (tools and packages), which is awkward when a business gets value from packages like web frameworks.
Having said that, recruitment can seem 100% about tools and packages.
I’m not sure how consciously hirers think about the different areas of knowledge. E.g. might a deep knowledge of Python semantics offset inexperience with Flask? Does ignorance of idioms necessarily indicate poor semantic understanding?
In hindsight, I’ve had hiring discussions that touched on these questions but without a clear framework for considering the trade offs. Guessing it’s the same for many people hiring at smaller companies.
IMHO, mastering a programming language to write clear, concise & idiomatic code takes time (sometimes more, sometimes less). I think of programming languages as tools; none is better than the other. It’s a matter of using the right tool for the right job.
Learning a tool takes time and dedication; often having experience with one tool may shorten the time required to learn another.
Looking at Prolog for instance, where you need to understand a whole new concept on how to achieve something requires time and experience.
I see "X years of experience in language Y" all the time in job listings, but I have _never_ been asked about it during an interview. My resume only lists a vague descriptor of language experience (Novice/Comfortable/Expert), so they aren't getting it from there.
Has anyone here on HN ever been in a situation where a company requested (for example) 7 years of $language and you only had 6 years and got rejected because of that?
Usually used by recruiters as gatekeeping before the CV lands on the desk of someone technical, most of the CVs that don't uphold the desired metrics don't make it.
If you ask for someone with 10 years Ada experience, my 10 years of React (or PHP, OCaml, Lisp, whatever) is a clear sign I lack domain experience.
So why not just ask for 10 years of domain experience? Because language experience is harder to lie about or exaggerate.
What is a problem is the unwillingness to admit a proxy is downright bad, and the reluctance to investigate the efficiency of a proxy.
Most of recruiting is individuals stubbornly ignoring research and insisting they know better despite doing nothing that could pinpoint the reason for their success. Not always the recruiters either.
... which although less than five years old, I require ten years experience in.