First of all, spending weeks learning a new tool because it _might_ be
5% better for some small/rare job may make little sense unless he's
reasonably certain he'll be able to apply that tool to a lot of jobs.
And apply it well, not just as a "Swiss Army Knife" (Leatherman?) used
because it's the one which does everything. And in many cases one which
other people can pick up and use/modify/fix (Perl, for instance, it
fairly easy to write but every Perl writer I know is familiar with a
different subset of the language, often making it difficuly for a
maintainer to pick up).
Second, he should look not only at the task at hand, but what it may
grow into -- it can often make a great deal of sense to start with a
tool that borders on overkill, rather than one that's highly effective
as it stands right now but won't scale well over time.
Heh. It was said of me when I was at university that if I wanted to
know the square root of 2 I would start by writing a program that
calculated the roots of nth order complex polynomials. It wasn't quite
true, I probably wouldn't have bothered with complex coefficients (but
would probably have left 'hooks' so that they could be added if
wanted)...
Finally, a programmer may have enough greater proficiency with one tool
than another that it's perfectly reasonable for him to describe himself
as a user of that tool, even if he's perfectly open to using others
when they work well.
Yup. I use awk, sed and grep by preference for shell programming, but I
can also use other languages where it makes sense (and other shells on
other OSs).
As an obvious example I'm pretty sure I've described myself as "a C++
programmer". I've certainly written a lot of code in a lot of other
languages, and have no problem with using other tools when they appear
well-suited to the task at hand. Nonetheless, my proficiency with C++
is such that my tendency is to use it unless some other tool appears
_substantially_ better for the task at hand. At least in my case, this
seems to be somewhat justified -- I'd guess that around half the time I
start trying to do something in some other language, I end up doign it
in C++ before I'm done.
As far as most job agencies I've used are concerned (I was a contractor
for 12+ years, and may be again) they like descriptions like "C
programmer" or for that matter "C/C++ programmer" (or "C++/C" if the C++
skills are greater), they can see at a glance that the person has C and
C++ experience (or C/Fortran, Ada/Pascal/Cobol or other combinations).
They will look at the detailed experience description later, but they
make the initial cut on the description. Yes, they are often
non-technical and will tend to assume that knowledge of C implies
knowledge of C++ (and "What's the difference between C and Fortran?"),
but then they also treat all databases as equivalent, it has nothing to
do with the notation (many non-computer-literate people will also assume
that "you know computers, can you fix my Windoze machine?" without
realising that there is any difference between a PC with WinXP and a VAX
running OpenVMS and that experience with one does not imply familiarity
wth the other).
Chris C