3 ms·
This was always one of my least favorite koans. Yes, theoretically, there's an abstract idea of what to do, and a programming language is a "mere" concrete exp
by ckastner 4y ago
This was always one of my least favorite koans.
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.
- BlargMcLarg 4y agoIn practice, the vast majority of the job market is encompassed by JavaScript, TypeScript, Python, C# and Java. A lot of that Python still adheres to imperative and OOP ideology too, despite being able to ditch it entirely. Most people also aren't doing things which differ immensely from other languages. 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.
- qsort 4y agoI don't agree, it applies now more than ever. Good developers have strong fundamentals, not being able to switch between static and dynamic languages taking advantage of the differences, or between imperative and functional paradigms is the mark of a very weak developer. There's been an explosion of languages, but not really an explosion of concepts.
- ckastner 4y agoI think where we differ is in our assumption about the strength of the fundamentals. You're assuming a good developer already has full breadth, whereas I'm assuming that you can be a good developer and still encounter challenging novelties. 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.
- ungamedplayer 4y agoThe point that the koan makes is not that they are different, but both have their own corner cases that you need to learn and its not that hard to learn them.