C and Morse Code
Darren Stokes sides with Joel over Jeff on whether programmers should know C.
So Eric, tell us about your experience as an amateur "ham" radio operator?
My call sign is KA9KEF. To get my General class license, I had to pass a written exam as well as a Morse code test at 13 words per minute.
Really, you know Morse code? Nowadays, it's possible to get a ham radio license with no code at all.
Yes, and I think that's outrageous! It's just wrong.
Why do you think that?
If I had to learn Morse code, then everybody else should too.
So does anybody really need Morse code these days?
Well, I suppose not. But don't pester me with facts that distract from my point. Learning Morse code should be a rite of passage for all hams. Anybody who got a license without code is not a "real ham".
But you -- you are a "real ham".
Yep. I passed the Morse code test. 13 wpm.
So you're still actively involved in amateur radio?
Oh. When was the last time you used your ham rig?
I suppose it's been a few years.
How many years are in "a few"? Maybe five?
More like twenty.
And you still have your amateur radio equipment?
Well, no. I sold my station a long time ago.
OK, let's review. You're a "real ham", even though everything you know about ham radio is two decades out of date. But the guys who got a "no code" license and are actively practicing the hobby today, they're somehow not "real"?
That's right. I know Morse code. They don't.
So you think all ham radio operators should be required to learn a basically useless skill simply because you did?
Exactly! And don't ask me to get down from my high horse. I like it up here.
The argument about whether programmers need to know C is just so similar.
All of the people arguing that C is important are the people who have already learned it. I'm pretty sure that a lot of their argument is resting on the same foundation as those crotchety old hams: "If I had to learn C, then everybody else should too."
I am one of those people. Yep, not only am I a Morse code bigot, I'm a C bigot as well.
I learned C, and I learned it good. I've worked on multiple significant C projects. I even wrote a C compiler. In C. I think all "real programmers" know C.
Yep, we C programmers are elitist and proud of it. The view from up here on our high horse is pretty good. We see lots of so-called programmers down there:
- They don't really know what a pointer is.
- They're not even using a real compiler! That thing they're using doesn't even generate native code you know. It's "byte code", so it's not real.
- Those people have never had to manage their own memory.
- In fact, they've never really had to do anything at all. I mean really. They're building on a class library that's got more features in it than Photoshop.
We are different. We learned C. We are "real programmers".
One big difference
What's the main difference between hams who know Morse code and programmers know C?
The C programmers actually have a point.
Seriously, strip away all the elitism and see what's left. Morse code is nearly useless, but C is still darn important whether you're using it or not.
And a lot of people are still using it, by the way. Don't think of C as merely "important historical and foundational background". In fact, my current project is being written in C. Software development today is a big field. There are still many problems for which C is the best solution.
But even if you're coding in something higher level, the experience of using low-level programming techniques is invaluable.
I'm not going to take a black-and-white stance on this. I won't go so far as to say that every developer must learn C. I've met lots of developers without C experience who are successful and making positive contributions to important software projects.
Furthermore, I'll admit that knowing C is not a magic solution to poor skills. A lousy developer who happens to know C is simply better equipped to hurt himself or somebody nearby.
However, I can say these two things:
- All of the truly extraordinary developer s I know are people who really understand the kind of low-level details that C forces you to know.
- Every programmer without C experience has a clear path of personal development: Learn C. Get some real experience using C to write a serious piece of software. Even if you never use it again, you'll be a better programmer when you're done.