C and Morse Code
Darren Stokes sides
with Joel over Jeff on whether programmers should know C.
This whole debate reminds me of amateur radio operators
bickering over whether newbies should be allowed to get a license without
learning Morse code.
So Eric, tell us about your experience as an amateur "ham"
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
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"
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
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.