After 15 years of undergoing interviews in this business, one question always haunts me when I’m seeking a new position:
“Do I have the right to call myself a ‘Senior’ Software Engineer?”
The answer may seem obvious:
- 15 years of professional development experience
- Major if not sole contribution to numerous shipping applications
- Numerous independently developed applications for multiple platforms
- Experience leading in-house and offshore development teams
- Multiple years of experience in C, Objective C, Java, Visual Basic and, to a lesser extent, C++
- The title of “Senior Software Engineer” at several companies
But wait, there are good reasons why I still ask the question:
- I don’t consider myself anywhere close to an expert in any language that I know
- All of the code I write is written simply, at a novice level, so that anyone who has taken one class in the language can understand it. I don’t use concepts or language features introduced in the “Advanced Topics” sections of programming books. Therefore, I don’t understand those concepts/features when I encounter them in other peoples’ code and I’m fairly lost until I can get my hands on a book to brush up
- Practically every time I see a macro defined in code I think, “what in the world is that and what does it do?!?” because I never use macros myself
- I don’t have a particularly good memory, so I find myself referencing documentation to get the correct syntax of or method signature for language features or methods that I’ve used practically every day for years
- I’m not particularly skilled at using any IDE. I use them for basic editing, compiling and basic debugging. 90% of what most IDEs can do I’m not familiar with and never use
- I almost never use profiling tools or any of the other very useful development tools outside of the IDE itself
- I’ve never been particularly diligent at error checking or handling. I rarely use exceptions and never use assertions
So I can’t give a definitive answer to my question. Maybe it boils down to the larger question:
What makes a software engineer “senior”?
I wish I had some great insight into the answer… but I don’t.
When it comes down to it, I do call myself a “senior software engineer,” for a number of reasons.
Time spent in the industry DOES count for something. It’s a reasonable assumption that the more time you’ve spent working in the field, the more problems you’ve had to solve, the more your problem solving skills have matured, and the better equipped you are to overcome future problems in a reasonable time with reasonable solutions.
In a corporate programing environment, managing the personalities of your coworkers is almost as important as managing code. Software engineers are notoriously, and legitimately, criticized for poor social skills. Surviving in the industry long enough to become “senior” likely means that you’re at least adequate at managing the personalities of people with slight social disorders.
If I’m assigned a task to accomplish, I WILL accomplish it. The code I write may not be the most efficient, or use the most relevant features of the language, but it will WORK. And perhaps more importantly, the next programmer who comes after me, even if they’re fresh out of school, will be able to understand it.
My history as a self-taught programmer, I think, makes me more likely to be able to pick up a new language or framework and run with it when the company needs it. Plus, I’m also more likely to be keeping up with new trends and technologies all on my own, because I care about more than just the project I’m working on in my 9 to 5, and often the stuff I work on on the side is more likely to be cutting edge.
So, at the end of the day, a Real Programmer, despite not being a Hotshot Superstar Software Engineer, can nevertheless make a great Senior Software Engineer.
Hopefully the next hiring manager who interviews me will agree, especially if they’ve read this. :-o