Do you mean at the technical level? Vidrun's asked to solve FizzBuzz, and like a good engineer, she reuses an existing, well tested solution. However, the interviewer, Martin, chides her by telling her the point of the interview is to see how people might solve things for themselves. He then asks her to explain how the FizzBuzz program she copied works. So she implements a C-like language in Cloture.
Pretty elementary stuff. Not "so easy a little kid can do it" but literally, in the sense that these techniques, this knowledge, underpins every programming language you use. Every computer scientist and software engineer should know how to do this. If you get a chance, work your way through a copy of _Essentials of Programming Languages_ (https://mitpress.mit.edu/9780262062794/essentials-of-program...). It will help make sense of what Vidrun does here.
At a non-technical level, well, that requires a longer explanation for which I lack the time to write.
I think you have unrealistic expectations of software developers if you think they should all be able to do this. Elementary sure, and maybe they “should” in the platonic sense, but ask 10 developers to implement a language and 9 will fail to make any meaningful progress. And I think that’s fine. It’s like when people get upset at web devs for not knowing the networking layers. Elementary sure, good to know, maybe, critical to their everyday function, doubtful in the extreme
Of course, some of those people then do get asked to build a language, and the result is awful and ignores the last 60 years of knowledge on how to actually do that ... (yes, I have seen this)
It's been my experience that software developers can be wildly successful not knowing or using any deep magic like this. Still, I think this stuff is good to know.
Edit: Oh, I should have used "elemental" instead. That might have gotten my point across better—underpinnings, not trivia.
I would argue it's still too much (and not useful) to expect most people to be able to do this.
Understand, yes. Good software engineers and computer scientists should be able to read this blog and fully understand what's happening, modulo any clojure-specific syntax they might be unfamiliar with. But this isn't something people should be expected to able to already know how to up and do.
I still think a software engineer should know this stuff, but given the other material covered in an accredited degree program, there probably isn't enough time for computer science fundamentals like programming language concepts. That's a damn shame. I think software engineers having that level of understanding is a good thing.
PLT was part of my CS degree, but only as a senior level course, and it was extremely abstract, and extremely difficult. Double majors (common with business) were exempt from it.
I think it’s fair to say that almost none of my fellow CS degree holders from that cohort (which was neither a rinky-dink program nor full of dim witted students) could do what we’re discussing here, and if they can it’s because they either were uniquely talented at the lecture material or learned it outside of their coursework, probably after graduation.
Not all software developers are computer scientists or software engineers, and not all software developers are preoccupied with turning computers into a salary.
This is a pretty elitist viewpoint, and also totally wrong.
It's fully possible to be an excellent software engineer without being able to implement a new language, or deeply understanding how to. It's completely reasonable to be among the best in the world at using a tool, and understanding how the tool works, without being able to create one of those tools.
You might as well ask the same software engineer to design a CPU. Or ask a woodworker to design a lathe.
The best pilot may not be able to design a plane, while still being a better pilot than an aerospace engineer that doesn't know how to fly the planes they design and build.
Maybe call yourself a software developer then? Or a software technician?
A mechanical engineer does have deep understanding of everything they do. They understand their systems from first principles. Maybe not as much as a physicist but certainly more than your carpenter example. They know how lathes are designed, they understand the principles, and a good mechanical engineer can design (and build) a lathe.
Building a programming language is such a tiny, niche part of computer science and software engineering that most computer scientists and software engineers never do it. They don't need to do it.
I think a decent computer scientist and software engineer should be able to understand everything written in this blog post, modulo any Clojure-specific syntax if they're unfamiliar with that language.
But replicating it off the top of their head? No, and that's not expected.
A mechanical engineer is a different example than I gave, so that changes the analogy. We're discussing a member of a profession being able to de novo create the things they use in their trade. I would expect most mechanical engineers to be able to build a lathe, yes.
But a mechanical engineer is not a materials scientist or a metallurgist. I would not expect a mechanical engineer to be able to create rubber capable of being used for a belt in the lathe, nor capable of creating steel hard enough to form the cutting bit.
Perhaps you're right, and there's insufficient granularity in the terms used, where "computer scientist" or especially "software engineer" is used to describe the 99% of us who haven't and have no need to create a programming language, plus the rest.
But I won't be updating what I call myself. To paraphrase Office Space, "Why should I change? They're the ones who are elitist gatekeepers".
I've done it a few times in my career. A lot of people build domain specific languages or compilers or translators or assemblers. Compilers and related theory is often covered in a CS degree curriculum.
I didn't say replicating off the top of your head. The blog post is meant as parody. I'm not suggesting someone should be asked to design a language in an interview though maybe some questions on the topic might be ok for some specific roles.
A mechanical engineer is not a material scientist or a metallurgist but they're definitely educated on the topic of materials. They need to choose the right alloy or material for their designs and understand its properties, they need to select vendors and understand the relevant processes. They're not as specialized but that have some base understanding and the capability to dive in if needed. That's I think what a software engineer needs to have as well. A car mechanic doesn't have those and that's fine.
I don't think this is elitist. There needs to be some distinction between people at different levels and capabilities. I'm not saying a car mechanic isn't capable of being a mechanical engineer. They can even become the equal or better through self study. But replacing an alternator isn't the same thing as designing the alternator.
EDIT: And just to be clear, I wasn't trying to be personal there. The reality of life is that lots of people that work on software call themselves (and companies call them) software engineers.
Pretty elementary stuff. Not "so easy a little kid can do it" but literally, in the sense that these techniques, this knowledge, underpins every programming language you use. Every computer scientist and software engineer should know how to do this. If you get a chance, work your way through a copy of _Essentials of Programming Languages_ (https://mitpress.mit.edu/9780262062794/essentials-of-program...). It will help make sense of what Vidrun does here.
At a non-technical level, well, that requires a longer explanation for which I lack the time to write.