I’ve been programming for over 20 years.
I’ve been a professional software developer for 15 years.
There are certain things, in that time, that I’ve come to understand, both in terms of how things are, and how things should be.
Hotshot Superstar Software Engineers will probably disagree. But this is a blog by and for Real Programmers, so their opinion doesn’t count.
Without further ado, here’s what I “know”:
1) 90% of Real Programmers use only 10% of their IDE’s features
Over the years, IDEs have gotten more powerful, more flexible… and more complicated. Nowadays they can do everything except write the code for you. Oh wait, they can do that, too. Nevertheless, in my experience, most programmers use their IDE to do three things: edit code, compile code and debug code. Yeah, I know, that’s obvious. No, you’re not getting it. Most programmers don’t use their IDE to profile code. They don’t use it to set watchpoints. They don’t use it to attach to rogue processes. They don’t use it to create and reuse their own code snippets. They don’t use it to automatically refractor code. They don’t use editing features beyond cut/copy/paste. Many of them don’t use it to browse documentation. I even know one who still debugs using “printf” instead of using more modern debugging features. Most don’t even modify the default layout, hotkey or syntax coloring settings.
2) Real Programmers only use about a third of the features of a programming language
Object oriented programming languages are very powerful and very flexible. Most have esoteric features that let programmers accomplish great things with minimal coding. Real Programmers don’t use esoteric language features.
Also, anything listed in the “advanced topics” section of a programming book is probably a feature Real Programmers aren’t going to use and aren’t going to recognize or understand when they come across it in someone else’s code.
3) Hotshot Superstar Software Engineers use advanced features of a language just to show off the fact that they can
4) Programmers working on projects that will have to be maintained by other programmers SHOULDN’T use advanced language features
Unless you’re working on a personal project, odds are you’ll eventually move on and someone else will inherit your code. That someone else might be a Hotshot Superstar Software Engineer who knows more about the language than you do. But odds are it’s going to be a Real Programmer. Don’t be the jerk that makes life harder on your coworkers when you really didn’t need to.
Code that will have to be maintained by other programmers should be written, as much as possible, so that a novice can understand it.
Caveat: you work at a company that’s prone to having random layoffs, (even though the company is financially stable,) or shipping your job offshore. Programming complexity may lead to job security. THAT, I’m never going to argue with. If your company isn’t concerned about protecting your future livelihood, then you don’t need to be worried about protecting the future maintainability of their products.
5) Most software engineers have never actually typed “main(int argc, char *argv)” (or similar) outside of a classroom setting
A lot of programmers out there came up in the era of modern IDEs. When they want to start a new project, the IDE takes care of certain basic stuff for them, like coding “main()”.
Maybe more importantly, many programmers who took up programming as a career path have never written a complete app of their own, or even started a REAL app of their own. Instead, ever since college they’ve taken jobs working at established companies where all they do is maintain or extend applications that were first created before they even started high school.
6) The best Real Programmers started (and usually continue) programming as a hobby
I know a lot of programmers. If I had to staff my own software company, I would do it strictly with people who started programming as a hobby, and it eventually turned into a career for them. Going to college to study programming wouldn’t mean anything, unless you had still started as a hobbyist. Then it might be worth a bonus point or two. Maybe half a bonus point.
Hobbyist programmers program because we love it. Programmers who are in the business because they graduated high school and some aptitude test told them they would be a good software engineer and software engineering is a lucrative career, are in it for a paycheck.
7) Real Programmers who started as a hobbyist in the 80s programmed on an Apple, TRS-80 or Atari 8 bit computer
I started programming in the 80s, as did a lot of the other programmers I know. Of everyone I know who was “into computers” back then, every single one who owned a Commodore 64 or early IBM PC/PC Jr. DIDN’T end up as a programmer. Most of the people I know who started on a TRS-80 Color Computer or Apple 2 or such, ended up as a professional programmer.
8) Being a “software developer” ONLY implies that one knows how to write code
There are several different designations given to programming jobs: computer programmer, software developer, software engineer, etc… (makes job searches really irritating)
But unless there’s a “Senior” in front of the job title or a number higher than ’2′ after the job title, it doesn’t mean that the person knows how to use an IDE, knows how to use programming/debugging/testing tools, knows the first thing about databases or web technologies, etc…
A “software developer” could be someone who’s done nothing but program command line utilities for Linux in ‘C’ and never even used a modern application framework. And you shouldn’t expect any more than that.
9) When a Real Programmer says they’ve tested their code, all that necessarily means is that they’ve tested for success
A piece of reasonably long code can fail in dozens of ways. Real Programmers program because it’s fun. There’s nothing fun about testing for dozens of potential failure conditions.
However, a good Real Programmer can tell their testers, (the people who are actually paid specifically to test for failure,) exactly where their code is likely to fail and not recover gracefully.
10) Real Programmers like reinventing the wheel
Solving programming problems is fun. That’s why we do it. Very few, if any, problems we face haven’t been faced and solved 1000 times before we encountered them. The generally accepted answer to any programming problem is usually “out there” and easy to find.
But if you want someone to develop an application by piecing together a bunch of standard code fragments, then hire a trained monkey to do it. There’s no fun in that. There’s also no personal development or valuable experience that would be gained by developing your own solution.
Or… wait… is that actually descriptive of Hotshot Superstar Software Engineers?!?
Now I’m confused…