At an event recently, someone was kind enough to introduce herself to me, and during the course of our pleasant conversation, she asked me, “So are you a programmer?”

My first impulse was to acknowledge once again that I look really nerdy. I embrace that. But my second impulse was to be mildly offended. I wasn’t sure exactly why.

As I have reflected a bit about that, I think my visceral reaction to being called a “programmer” arose from my perception of programmers as just people who write code, which is a science. That’s different from software engineering, which is an art.

Don’t get me wrong. Programming is awesome. You download something, play with it and get it to do something cool. There is incredible value in building something from nothing. But anybody sufficiently motivated can do that. It takes experience and professionalism to build something from nothing that others can customize and use.

Here are just a few of the many things software engineers do that programmers don’t:

  • Balance between the theory of clean code and design patterns and the practical realities of building real software for real clients to solve real problems
  • Write small classes (if applicable) and small methods/functions that do only one thing
  • Replace hardcoded values with configurability
  • Provide high code coverage as tests are the best documentation
  • Test not only for functionality but for performance and security
  • Ensure automated deployability as part of a continuous delivery pipeline (if applicable)
  • Use logging instead of print statements scattered throughout the code
  • Document your work with a README, Swagger, language-specific tools like Javadoc, or whatever is appropriate

In other words, what distinguishes software engineers from programmers is an appreciation for the danger of technical debt. Software engineers minimize technical debt. Programmers don’t care about technical debt—if they are aware it exists at all.

My code is hardly debt-free, but I work hard every day to learn the infinite skillset and tooling I need to be a software engineer.

So no, I am not a “programmer.” But I am a software engineer—and yes, really, really nerdy. So nerdy.