Hi Frank,
I agree with many things you've said.
Anyone who hires primarily on the basis of language skills is a fool,
because none of these languages are weak in the hands of a professional.
I have to disagree to some extent here. I work in the 3D graphics industry,
and if I were to choose between a moderately skilled C programmer and a
highly skilled Java programmer for writing our package's core renderer, I
would choose the C programmer. Some tools are just better suited for a
specific purpose.
And on the point of C++ versus C# versus VB.NET: C++ is probably superior in
the sense it is closer to the language of the machine, but it is challenging
to write well, especially in the modern era of two-minute turnaround.
I would say that C++ starts out closer to language of the machine. However,
it provides facilities for achieving higher and higher and higher levels of
abstraction that Java and .NET simply cannot provide. In the hands of a truly
skilled C++ programmer, C++ can become a very high level language that,
unlike other high-level languages out there, preserves the power of low-level
languages through its ability to apply solution patterns at compile-time.
While I agree that a skilled programmer should have no problem adapting to a
new language and doing just as well or even better than the programmers
fluent in that language, I would say that the more experienced a programmer
becomes, the more these language differences start becoming significant in
his work.
While primarily a C++ programmer, I've had to work alongside .NET
enthusiasts, and I managed to pick up C# and VB in a few days to the point
where I was showing my co-workers new things about .NET methods of
implementing callback events, using delegates, the significance of sealed
classes, how to implement a thread pool, etc. Not all C++ programmers are
prone to drown in the .NET framework. However, I do agree that the .NET
framework can be a source of grief for C++ programmers. For me, it is because
I find it to be inferior in many places, and I have a hard time implementing
something with techniques I know to be inferior. Take reverse iteration of a
collection in .NET. It doesn't exist using the enumeration constructs
provided. While the typical C# or VB might happily just reverse a container
and then use forward iteration, it's hard for me, a person who has seen
superior libraries, to simply tuck my tail between my legs and write inferior
code. The drive for superiority that many C++ programmers have can be a fault
when compared to the rapid speed at which many of these VB and C# programmers
develop software.
In the
modern time frames, neither VB.NET nor C# is the better language, because in
professional hands the results are the same, which is a good solution. What
sets the professional apart from the non-professional in the world of .NET
programming is knowledge of the framework.
I absolutely agree here. That is the only thing that should be important to
an employer looking to hire a programmer writing .NET applications.
- John