It's fundamental: You are a programmer if you...
Write code that works.
That’s all, you write working code. And it doesn’t matter what degree you have, what courses you took, or whose blogs you read. It’s all about the code.
Joel, I hear what you’re saying about knowing what a pointer is and understanding the byzantine Windows API. But still, if someone write a program, I say he’s a programmer.
Steve, you’re preaching to the choir. Yeah boy, programming without understanding how programming languages really work is like painting with the brush held between the toes of one foot. But I think it’s still programming.
In Beautiful Code, great programmers share their thinking process with us. And that’s why this book transcends so many other books about programming: thinking and problem solving approaches are universal. This isn’t a book about programs, it’s a book about programming: every page turned will make you a better programmer.
And you over there, the one who just wants a job as a programmer, the one who wants to do whatever everybody is doing and wants to learn as little as possible to get things done. You’re a programmer, don’t let any Chablis-swilling pretentious art-house blogger tell you otherwise between their rants about why we should still be using Lisp or Smalltalk.
All these other things, be they type theory, agile practices, compilers, pointers, DSLs, or anything else… These are all tools. Ignorance of those tools is not helpful. I think you will be
even better with more knowledge. I think you will be
happier if you learn how to “cut with the grain” and work with the principles of software development instead of against them. But even if you decide you can’t be bothered with anything hard, the important thing is that you write programs, therefore you are a programmer.
I don’t want to wake up one day and find there’s a required reading course for being a programmer (even if my blog is on the list). I don’t want
anyone deciding who is—and who isn’t—fit to be a programmer.
I want everyone to be free to program. The price of that freedom is that yes, some people are going to do things I don’t like. But you can’t build a world with room for Ruby unless there’s room for PHP. You cannot build a world with room for Scala unless you build a world with room for Java.
Now, does that mean that when Steve Yegge talks about why you ought to know how compilers work, everyone ought to shout him down and say that compiler architecture and/or programming language implementation is bullshit? No. I will be the first to say that compilers and language implementation are important. I will rant.
I support your individual choice of what to learn and what to skip as a programmer. Agree or disagree with me, I say you’re a programmer and I measure how good you are by what you do with the knowledge you decide to acquire. But I still believe that there are such things as fundamentals. There are things that every programmer would do well to know. There are things that would make everybody’s lives easier if every programmer knew them.
Fundamentals matter, because although you are a programmer without them, you could be a much better programmer with them
I do say that you can program without the fundamentals, but I will never say that they are irrelevant, that we have passed the day when fundamentals matter. They
do matter, because although you are a programmer without them, you could be a much better programmer with them.
But you will still be a programmer.
Elsewhere, I see some folks are arguing whether writing HTML is programming or not. To questions like that, I have but one response: give me an objective definition of what is and what isn’t a program, and I’ll give you an objective definition of what is and isn’t programming.