Babel and Snow
5 And the LORD came down to see the city and the tower, which the children of men builded.
6 And the LORD said, Behold, the people is one, and they have all one language; and this they begin to do: and now nothing will be restrained from them, which they have imagined to do.
7 Go to, let us go down, and there confound their language, that they may not understand one another’s speech.
- Genesis 11:5-7[1]
If products are the precipitate of the collective understanding of the problem the organization is trying to solve then the true challenge really is how do we catalyze the process through which that understanding is achieved. This catalyst role is what I consider to be the primary role of management, but I’ve found there are other roles where a focus on being catalyst can be valuable[2].
Obviously, this is easier said than done. We have a whole morass of challenges facing us. We all have different communication styles. We have different learning modalities. Our spoken language gets in the way even when we all “speak English” that is tainted by our different life experience, different metaphors[3], different vocabulary. Hell even where we share particular words they don’t necessarily mean the same things for each other[4].
Like the story in Genesis we have a plethora of obstacles to our communication. And we have a plethora of tools to use to solve our problems. So many languages, so many libraries, so many different systems of one sort or another. So many that you can’t even hope to make sense of them all. And a constant influx of new ones.
That’s what this piece is actually about. Why do we have so many? When I was first learning to program and in my early days on the internet I remember looking at Yahoo’s (back when it was hand curated) list of programming languages. There were hundreds (wikipedia thinks there are over 698[5], but depending on where you look... there are a lot[6]) but I seem to remember running across a number like 2000... and this was back in 1994! But every language served some purpose to someone. The thing I’ve always said is that every language gives you some sort of abstraction or perspective on a problem that will make the sorts of problems the language was meant to solve easier and through the magic of Turing completeness any other problem can be solved, though it might be very very hard.
Think about Perl for a moment. It has one of the most powerful regex engines of any language out there (well... let’s ignore the fact that PCRE is now a thing. ;-) Probably showing my age here.). So that made it insanely good for all sorts of text manipulation type tasks. We used it heavily back at USC in our NLU/NLG groups and for computational linguistics. I suspect this is also why it was popular among the genetic research set ( Pete Turner can probably chime in on that one). PHP in its early days gave you some insanely nice workflows for building websites. Or course some of those turned out to be security nightmares. But the tradeoffs were worth it for some[7].
But on the flip side... do we really need all of these languages? Do they all provide an abstraction that’s worth the overhead of yet another programming language? And now that I’ve been a practicing release engineer for almost 15 years do I really want to deal with that much variance? Couldn’t we survive with a lot fewer languages? But which to choose? And how do you even make the choice? I’ve always been enamored with the idea of NodeJS... the concept of having my whole web stack from front to back being in one language has always had an appeal. But it’s not actually true since NodeJS isn’t the same JS running in the browser... and that JS isn’t even the same across browsers.
And we barely delved into the topic of languages and not even really discussed build systems(make, bazel, ant, etc), image formats(gif, jpg, png, webm, xcf), document formats (txt, doc, odf, gdocs), operating systems(ios, android, windows, mac, unix, oberon, plan9, beos)... and on and on it goes. Each with its own metaphors (though often sharing some with others). Each with its own conventions. Each one requiring the reinvention of existing tools because you liked that feature in that other environment (like cucumber the Ruby BDD tool kit and all its other language cousins). And here I’m only discussion things on the tech stack.
Obviously I’m not the only person even thinking about this sort of thing right this moment. Saw an amusing story on slashdot[8] a while back about how all our command line programs have sprouted all sorts of options:
领英推荐
Another reason commands now have more options is that people have added convenience flags for functionality that could have been done by cobbling together a series of commands. These go all the way back to v7 unix, where ls has an option to reverse the sort order (which could have been done by passing the output to tac).
The physicist and author C.P. Snow[4] spoke eloquently about this as well in a lecture he gave back in 1959 framing the idea as “The Two Cultures” and trying to describe the language and cultural divide between the sciences and the humanities at the macro level but also alluding to the divides between different subcategories of scientists (e.g. biologists, chemists, physicists, engineers, etc) and humanists[8] (e.g. novelists, linguists, anthropologists, historians, economists, etc). [9] But it really does feel like these language and cultural divisions between us have been increasing and not decreasing over time.
I don’t have a solution to these problems but at least being aware of them isn’t a bad thing.
[1] https://en.wikipedia.org/wiki/Tower_of_Babel#Biblical_narrative
[2] https://www.dhirubhai.net/pulse/metaphors-i-work-benjamin-lau
[3] https://en.wikipedia.org/wiki/Metaphors_We_Live_By
[4] https://sciencepolicy.colorado.edu/students/envs_5110/snow_1959.pdf
[5] curl "https://en.wikipedia.org/wiki/List_of_programming_languages?action=raw" | grep "* \[\[" | gcsplit - "/\[\[Lists/" && wc -l xx00
[6] Depends on how you define: https://codelani.com/posts/how-many-programming-languages-are-there-in-the-world.html
[7] https://github.com/facebook/hhvm
[8] https://developers.slashdot.org/story/20/03/05/1450236/the-growth-of-command-line-options-1979-present
[8] is this really the term for a practitioners of the humanities?
[9] I’ll probably have pissed off some group with those lists...
Staff Software Engineer at Twilio
1 年But my new programming language is so much better than all the other languages ever made, see I can do this one thing in one line of code!