Recently, I ran across one of the many little spats that develop between bloggers. This time it was between Alastair Rankine of girtby.net and Jeff Atwood of Coding Horror.
It’s the typical spat. One blogger decides that another blogger is no longer writing what they want to read. Rather than just unsubscribe, they write a big public post about why they have decided to unsubscribe and why the other blogger sucks.
And, as is typical of these kinds of spats, the blog post starts by talking about how they don’t normally slam on people they unsubscribe from… then they slam on them anyway.
Anyway… you can read the spat at the two links below if you want… but the details aren’t that important to what I have to say.
What really got my attention in reading Rankine’s part of this train-wreck (this is the nerd version of Jerry Springer right here) was that Rankine jumped Atwood’s shit for not knowing C. In fact, he went as far as to say that by not knowing C, Atwood was not credible as a programmer.
Every time I see this opinion put forth by otherwise smart programmers it makes me foam at the mouth in rage and frustration.
This isn’t a minority opinion in my experience.
I see this “must know C” prejudice all the time. I’ve even been passed over after a job interview had revealed my lack of a C background. There isn’t any telling how many interviews I didn’t even get to attend because my resume lacked C/C++ (even though I’ve never applied for a C/C++ dev position).
I also see this idea put forth by people that I otherwise respect… even Joel Spolsky, a hero of mine, makes a big deal out of knowing C. In his legendary advise to college students article #2 on his list is “Learn C before graduating”.
He even gives an amazing (in terms of stupidity if you ask me) example:
“…if you can’t explain why while (*s++ = *t++); copies a string, or if that isn’t the most natural thing in the world to you, well, you’re programming based on superstition, as far as I’m concerned”
So how does knowing this help me write better C#? This doesn’t directly apply in C#. Wouldn’t it be better if I knew how C# does string stuff, which mechanisms are more efficient in specific cases, and why?
I could take Joel’s advice and go off wasting my time learning C. Then, like him, I’d be able to translate my C# concepts into C in order to understand how it all works under the hood… or I can just learn how C# works and skip the C translation step. Both are valid approaches, but I think it’s unfair and narrow minded to discount my ability to understand what goes on under the hood just because I lack a formal C background.
I’m not saying that knowing C would hurt me. In fact, I’ve often wished I had the patience to go back and learn C. But honestly, writing in C makes me want to die. How did any of those old C guys actually get anything done?
Besides, if everyone based their understanding of higher level languages on C then where is the diversity? In some ways, my understanding of some areas of C# is actually better than that of people with C backgrounds precisely because I DON’T have a C background.
While Joel has good reasons for preferring C experience in his employees due to the kind of development his company does, that doesn’t map well to other areas of the programming field.
I do asp.net web applications. When I’m hiring, I’d MUCH rather you have a solid understanding of how IIS works internally. I don’t care if you can write a fancy-pants sorting algorithm in C. I trust that the .NET framework guys will work out most of that anyway. As long as you understand the internals of C# or VB and the .NET framework you’ll do fine in my field without knowing any straight C at all.
When someone like Rankine makes such a prejudicial assumption about an otherwise competent person based just their lacking a C background… well… it strikes me about the same as the racial prejudices I’ve had to hear all my life.
See, I live in the Deep South of the USA where all Mexicans are illegal, all black men have 15 kids by 5 different women, and all Arabs are terrorists. Here most narrow minded ass-holes blame their minimum wage income on the irrefutable fact that non-English speaking illegal Mexicans have stolen all the jobs. While everyone here complain that Mexicans should be wasting their time learning English instead working, the Mexicans are working their asses off, getting shit done, and getting paid.
I guess it’s fair that all you C snobs can watch those ignorant non-C speaking savages steal all your jobs too.
while (*bigot++ = *asshole++);//see, natural isn't it?