Chris Uppal wrote:
> To start with a diversion: most programmers have programming languages they
> would rather use that others (maybe more than one, maybe not). When pressed to
> explain why their pet language is better than some other language, they'll
> usually talk about productivity, or a combination of productivity and
> reliability. But I doubt if that ever is /really/ the reason -- or even
> particularly closely related to it. I believe that people prefer one language
> over another for reasons like: it has the crutches that I like to lean on. It
> doesn't have the crutches that I don't want to use. The language's way of
> working fits well with the way I think. And so on. (If the matches are all
> good, then the person may in truth be more productive, but that's not why they
> prefer the language).
Indeed, I completely agree with this. I would add, though, that I think
the massive deception is propogated by a kind purist limited version of
the maxim "use the right tool for the job" that implies that real
programmers will be able to work just as effectively in any language or
environment. I am often surprised at programmers' unwillingness to cry
BS about that one for fear of being labeled unprofessional or lacking
good engineering rigor. It's really rather silly, given that common
sense ought to tell us that of course programmers will be more
productive using a language that they know well and use often.
However, since developers are reluctant to just come out and disagree, I
frequently see them reduced to a kind of universal advocacy of their
language; not out of any kind of arrogance, but out a desire to actually
be productive. This is in no way meant to contradict the common (and
correct) realization that developers become better by learning more
kinds of languages. Balanced against this, though, is the companion
fact that developers become more productive in the short term by
focusing on one. I used to be a very good C++/MFC programmer in 1996,
for example; now that I haven't done it for nearly a decade, it would
take some time before I could really be as productive in C++ and MFC as
I currently am in Java (even if MFC still existed, which I'm glad it
doesn't). Then, and this is the trick, I wouldn't be as productive in
Java any longer. The jack of all trades really is a master of none,
regardless of how many he's been a master of in the past; the human
brain is limited, and unfortunately it makes room for more information
by discarding the older stuff.
IMO, it's long past time for a revival of the recognition that
developers and their quirks and differences matter critically when
developing software.
> Your first example seems to fit that latter pattern, but I think the others may
> be more about over-generalisation (through fear, perhaps) /masquerading/ as a
> drive for greater reusability.
Yes, you're right. I ended up coming up with rather poor examples,
since they were interface reuse rather than implementation reuse.
Nevertheless, it sounds like we've both seen the same thing. My big
complaint with marginal cases of reuse, though, is they often don't
really do what you want, but someone appeals to reuse and argues that
adapting the existing product to the current needs is better than
writing from scratch. When this happens, I often suspect that a month-
long development cycle may be superior to the consequences of
shoehorning someone else's not-quite-appropriate software into the wrong
place. These tend to be cases where it takes someone a week to make it
work anyway, and then the next few months are largely occupied with
wrestling bug reports that are hard to fix because they're not even in
your code.
> Incidentally, another thing which I diagnose as an over-emphasis on reuse works
> sort of backwards: Have you noticed a strange reluctance amongst many
> programmers to create custom implementations of the java.util.* collections ?
Yes, I see this. It seems to be a different matter where I'm looking;
coming from the idea that implementing custom containers is "hard".
This is reinforced by the fact that no book I'm aware of talks about
doing it, etc.
--
Chris Smith - Lead Software Developer / Technical Trainer
MindIQ Corporation
|