An actress acquaintance of mine—let's call her Esmerelda—once said,
"I can't imagine being anything except an actress." To which the
retort was given, "You can't be much of an actress then, can you?"
I
was reminded of this exchange when someone said to me about Go, "I
can't imagine programming in a language that doesn't have generics." My
retort, unspoken this time, was, "You can't be much of a programmer,
then, can you?"
This is not an essay about
generics (which are a fine thing and may arrive in Go one day, or may
not) but about imagination, or at least what passes for imagination
among computer programmers: complaint. A friend observed that the
definitive modern pastime is to complain on line. For the complainers,
it's fun, for the recipients of the complaint it can be dispiriting. As a
recipient, I am pushing back—by complaining, of course.
Not
so long ago, a programmer was someone who programs, but that seems to
be the last thing programmers do nowadays. Today, the definition of a
programmer is someone who complains unless the problem being solved has
already been solved and whose solution can be expressed in a single line
of code. (From the point of view of a language designer, this reduces
to a corollary of language success: every program must be reducible to
single line of code or your language sucks. The lessons of APL have been
lost.)
A different, more liberal definition
might be that a programmer is someone who approaches every problem
exactly the same way and complains about the tools if the approach is
unsuccessful.
For the programmer population,
the modern pastime demands that if one is required to program, or at
least to think while programming, one blogs/tweets/rants instead. I have
seen people write thousands of words of on-line vituperation that
problem X requires a few extra keystrokes than it might otherwise,
missing the irony that had they spent those words on programming, they
could have solved the problem many times over with the saved keystrokes.
But, of course, that would be programming.
Two
years ago Go went public. This year, Dart was announced. Both came from
Google but from different teams with different goals; they have little
in common. Yet I was struck by a property of the criticisms of Dart in
the first few days: by doing a global substitution of "Go" for "Dart",
many of the early complaints about Go would have fit right into the
stream of Dart invective. It was unnecessary to try Go or Dart before
commenting publicly on them; in fact, it was important not to (for one
thing, trying them would require programming). The criticisms were loud
and vociferous but irrelevant because they weren't about the languages
at all. They were just a standard reaction to something new, empty of
meaning, the result of a modern programmer's need to complain about
everything different. Complaints are infinitely recyclable. ("I can't
imagine programming in a language without XXX.") After all, they have a
low quality standard: they need not be checked by a compiler.
A
while after Go launched, the criticisms changed tenor somewhat. Some
people had actually tried it, but there were still many complainers,
including the one quoted above. The problem now was that imagination had
failed: Go is a language for writing Go programs, not Java programs or
Haskell programs or any other language's programs. You need to think a
different way to write good Go programs. But that takes time and effort,
more than most will invest. So the usual story is to translate one
program from another language into Go and see how it turns out. But
translation misses idiom. A first attempt to write, for example, some
Java construct in Go will likely fail, while a different Go-specific
approach might succeed and illuminate. After 10 years of Java
programming and 10 minutes of Go programming, any comparison of the
language's capabilities is unlikely to generate insight, yet here come
the results, because that's a modern programmer's job.
It's
not all bad, of course. Two years on, Go has lots of people who've
spent the time to learn how it's meant to be used, and for many willing
to invest such time the results have been worthwhile. It takes time and
imagination and programming to learn how to use any language well, but
it can be time well spent. The growing Go community has generated lots
of great software and has given me hope, hope that there may still be
actual programmers out there.
However, I still
see far too much ill-informed commentary about Go on the web, so for my
own protection I will start 2012 with a resolution:
I
resolve to recognize that a complaint reveals more about the complainer
than the complained-about. Authority is won not by rants but by
experience and insight, which require practice and imagination. And
maybe some programming.
Source: http://commandcenter.blogspot.com/2011/12/esmereldas-imagination.html
Source: http://commandcenter.blogspot.com/2011/12/esmereldas-imagination.html