Babel and Snow
The Babel tower of Programming Languages. An illustration that became famous after appearing on the cover of Sammet’s book Programming Languages: History and Fundamentals (1969). Source: craftofcoding.wordpress.com

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...

Ardavon Falls

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!

要查看或添加评论,请登录

Benjamin Lau的更多文章

  • Metaphors I Work By

    Metaphors I Work By

    tl;dr For many years I've been thinking about my life as a developer/employee/contractor using the following three…

  • On Persistent Recruiters

    On Persistent Recruiters

    tl;dr If I sent this to you I've identified you as a persistent recruiter and probably also blocked you. I like working…

  • These are the Chats I Know [1]

    These are the Chats I Know [1]

    [1] Title is a reference to the Kids In the Hall "Daves I Know song" sketch I've used a variety of different chat…

    2 条评论
  • Inpuuuuut!

    Inpuuuuut!

    When working through my depression I generally go through a few phases. One of those is something akin to trying to…

  • The Long Winter

    The Long Winter

    The last couple of years have been rough. We had some personal material set backs, dealt with an extensive identity…

  • How and Why I Journal

    How and Why I Journal

    I used to hate writing. I never understood the point of our various writing assignments in school.

    3 条评论
  • Recommendations for Remote Work

    Recommendations for Remote Work

    Be asynchronous. You can’t and shouldn’t expect people to be watching slack continuously.

    2 条评论

社区洞察

其他会员也浏览了