The Invisible Line

People can draw distinctions of all sorts with programmers based on their experience, what language they use, what their education is or whatever, and this distinction I think is the most important one - much more so than any of those other things, no matter what their education is, how long they've been doing it, what language they're writing in. I usually tend to bin programmers into two groups.

One is the programmers who take something that someone else wrote and use it to make a program. They learn Ruby on Rails and they make a web application. They learn UIKit and they make an iOS application, right? And those people distinguish between the magical elves that make the things theyre going to use to write their program and their program.

The second set of people make no distinction between the things they're using to write their program and their program. It's all one continuous thing, and those are the people that are going to write their own thing even though the vendor provides one, or those are the people who are going to write their own web frameworks or their own blog engines, or, you know, in the extreme case, their own language.

Its a complete continuum, and there's no hard and fast line between These are the words I type to make my program work and this is my program. I don't know if you call them "Tool Builders", it doesnt necessarily have to be that type of thing, but there are some people who will never cross that line, and in every environment they find themselves in programming, they will draw that distinction somewhere and say, "That is other, and I don't do that, and that is magic, and I call those things to make my program work, and then MY program is a series of conditionals and loops and variables and classes or whatever that use that thing to do their work."

I think that distinction is, well, being afraid and trying to draw that line and using it as a barrier and saying, "I shouldn't cross over the line." Now, one thing is practicality, like maybe you shouldn't write your own programming language and compiler to do this tip calculator program or something. That's one side of it.

The other side of it is that I see a lot of people who draw that line and are afraid to ever cross it. Everyone starts with that line, because nobody knows what the heck you're doing when you start out, right? But I would encourage everybody who thinks they can recognize that line to realize that line doesnt exist. It's all one big continuum of code written by people, and theres no reason you can't write a better one of whatever it is you're using, all the way up and down the chain, and in some cases you should.

I mean, obviously, knowing when you should and when you shouldn't is a whole separate matter, but if there's a reason not to do it, its not because "Oh, I'm going to screw it up, and I'm not as good as this," because the people who made those things are, at a certain point, they're just other people too. Who made FMDb? It's just another guy. The only way you'll ever get good at doing something like that is to decide "I'm going to make my own thing, here." And then your thing might not be as good, but the fifth version of your thing will be as good, and then you've just become one of those people and that line is gone.

--John Siracusa, from Ep. 24 of the Accidental Tech Podcast