Being a coder is pretty easy… That is what every school in the world teaches it’s students. They can take a detailed design document and implement it in code. A coder knows a language. Often just one. They know the IDE surrounding that language. They have minimal understanding of the operating system. Often just enough to do their job. And that is what it is.. A job. They will learn new skills if the job demands it. They often don’t code for themselves. Frequently, they will have not thought of coding until they got to adulthood and so they went into a technical school or MIS in college. They are likely not very opinionated about coding. They do things a specific way because they were taught that way. They code in “their” language because that is the first one or the easiest one to code in. They don’t often have creative problem solving skills. They almost never think outside of the box. They don’t break the cage! Usually, they don’t have to. As I said, they are given a final design document, most often.
Programmers and Developers are a step above coders. They know more, maybe a handful of languages and the IDE and operating system they use. But they don’t have an in-depth knowledge of the OSes. They know enough to do their job plus a little. They might do some independent research into new technology, but don’t count on it. These people were more likely drawn to coding before a formal education, but not always. They might have a strong opinion on coding techniques. But they are just as likely not to. And if they are asked to change, they probably will without too much complaint. They also probably won’t have a strong language preference. If they do have a strong opinion on technique or language, they probably can’t tell you why. They might be able to problem solve, but they don’t like it. They aren’t usually subject to thinking outside the box. They don’t break the cage! If the design document is 90% complete, they are comfortable filling in the gaps, but they wouldn’t be the one to write the design document.
A software engineer is the ultimate in coding. He can do anything the coder/programmer/developer can do. But he takes it a step further. He understands the workings of the OS that he is programming against. He doesn’t know every language, but understands that they all amount to the same thing, so he can easily learn a new language (although there is probably one or two languages that his is very loyal to). He is comfortable inside multiple IDEs, but can also code in a simple text editor. He doesn’t balk at the idea of learning a new language, even if it means some unpaid research outside the normal hours. He tries to be intensely knowledgeable about everything he has to touch. Which means he is likely to be both the developer AND the DBA for his databases. As well as the administrator of his development machines. He often does independent research into new technologies. And isn’t afraid to integrate a new/unknown technology into his projects in order to solve a problem. He codes for himself. Not occasionally, but frequently. He sees problems all around him that have solutions in code. He often has been programming or inventing since he can remember. He’s likely to have physically disassembled a computer either to fix a problem or just “investigate”. He likely knows a pretty detailed history of computers and the computer industry. He will almost always have a strong preference for a specific language (although as I said he doesn’t mind using a different one to solve a problem). And he will have equally strong opinions about techniques. If pushed, he will change, but he will complain about it. If you question him, he will most likely give you a specific, well thought reason for his preference.
When talking to a non-programmer, I usually use a real world example that most people will get.. I like the Architect vs. Construction Engineer.
Architect vs. Construction Engineer
If you want a house built, you hire an architect to design it. You tell him what you want. He gives you a blueprint. His job is done. His only education and consideration is the confines of the piece of paper he delivered. He makes sure the walls are strong, the roof won’t cave in and the front door is in the correct location. He might even know the slope of the land the house will sit on or where the trees are located. But he only needs to know those things if they are an issue in the design. And even then, he doesn’t need much detail about them. The vaguest description of those outside parameters are more than enough for him to do his job. A construction engineer is a completely different animal. He needs the blueprints. He can even do the blueprints instead of the architect (although he might not be as artistic about it). But he goes further. He needs to know the exact slope of the land, what the ground is made of. How deep to dig to hit bedrock. How thick the concrete needs to be in every section of the house, where the main sewer lines is located, how the electric will be run into the house, etc. When problems arise, he does the problem solving and pushing the project to completion.
Dreaming in Code
So.. back to what I was saying (this was going to be a short little entry)… I dream in code.. Coders don’t normally do that. They are vested in the code to a high enough level.
So outside of coding, I have multiple other hobbies. We just moved. Moving is NOT one of my hobbies. It’s not even an event or past time that I like in any way. So we were unpacking boxes. Jenn unpacked a couple of kaleidoscopes that I’ve had for a long time, but never had room before to put them on display. We were looking thru them. One is a simple mirrored type with a fish-eye lens at the end. So your surroundings are when it shown.
And then it struck me.. Jenn always says that when she looks at my code, she goes cross-eyed and just sees random characters. So I asked here if this is what she sees. It is!