Daniel said:
Has anyone else noted if the success level of a programmer is related
to, and in what proportions, technical ability and communication
skills?
I think there are two parts to this. One is about communication skills in
general, the other is about a love of precision.
Programming is /all about/ communication -- I can't think of many professions
in which wide-ranging factual communication skills are more essential. (There
are certainly professions in which more focussed communication skills, or
non-factual ones, are even more essential -- think of salesmanship for
example). A good programmer has to be able to understand other people
regardless of whether (a) the other person knows what s/he is talking about
(they may be talking about their own subjects, or may be attempting to talk
about the programmer's subjects); and of whether (b) the programmer knows what
the other person is talking about; and of whether (c) the other person is a
good communicator themself (communication is part of /our/ job, it's not their
responsibility). Similarly, programmers (if they are to be any good) have to
be able to /explain/ things, again both to technical and non-technical people.
Of course, many programmers /aren't/ good communicators. They neither listen
well, nor speak with due empathy for their audience. Such people also tend, I
find, to write bad code -- specifically, /uncommunicative/ code. In a way
that's incidental to my point since I'm claiming that direct communication with
other people (which includes writing comments) is of central importance to the
programmer's work -- it depends on whether you think of "good" code primarily
as code which is likely to work as intended, or primarily as code which is
comprehensible (those are not conflicting requirements of course -- thankfully,
or we'd all be in deep shit).
Now good communication is not the only talent that's needed to be a good
programmer (having a good memory comes to mind, as does a talent for abstract
thought). One other... er... well, let's call it a talent, if only for
politeness sake, is a love of precision. A need for clarity. You can't be a
good programmer, or rather you can't write a good program, if you don't
understand the nature of the task, and the approach you are taking to solving
that task, and in precise detail. So, the chances are that any good programmer
is going to be the kind of person who /naturally/ works to attain that state --
call it an aversion to muddle. Such a personality trait likely to show up in
other activities -- for instance in use of language. So I think there's good
reason to expect that most good programmers are going to be precisionists in
all (or most) things, and thus to prefer using and hearing "well-formed"
language.
Going off at a slight tangent: my experience is that the best programmers are
extremely rigid in the little ways that they write code. For instance /always/
putting a space before a ; or /never, ever/ doing so. Or in how/whether they
place spaces around = or brackets. (And the great layout debate comes in here,
of course.) I think that inconstancy in such (let's be honest) inessentials is
a good sign that the program itself will be sub-standard. It isn't that care
in such matters makes someone into a better programmer, but that good
programmers tend (I have never met a counter-example, in fact) to take care
automatically. I think that the same effect will probably show up in the way
that good programmers use language.
There are probably other effects too. Programming is itself a rather
linguistic activity, so it may be that programming attracts people with a love
for using language. If so then being a good programmer would probably
correlate quite well with using very deliberate sentence construction and so on
("deliberate" as opposed to "careless" rather than to "informal"), even if my
main two claims should prove to be utter tosh.
tx 4 ur attntion.
-- chris