For a few years now, as I've interviewed at various companies, whether for full-time position or as a consultant or contractor, one of the common questions that repeatedly comes at me is “What are you passionate about? What's your passion?”
Passion, passion, passion, it's the new catchword of the software development world. It's what drives the development of new technical stacks, and it's supposedly what drives great programmers. Consider, for example, this quote below from Jeff Atwood, written during the most recent economic downturn in response to a programmer thinking of exiting the field:
"Joel implied that good programmers love programming so much they'd do it for no pay at all. I won't go quite that far, but I will note that the best programmers I've known have all had a lifelong passion for what they do. There's no way a minor economic blip would ever convince them they should do anything else. No way. No how.
"So if a programmer ever hints, even in passing, that they might possibly want to exit the field; they probably should."
In other words, if you lack the passion for programming that would lead you to program even if you weren't paid to do it, then maybe you shouldn't be paid to do it, either.
It's not like this is an unusual sentiment. Robert “Uncle Bob” Martin routinely expresses similar sentiments. For example, his most recent (as of this writing) blog talks about “novices,” he reminisces about our (programmers') first line of code:
Do you remember that first line of code you wrote when you were very young? Do you remember the thrill it gave you to see that line of code actually execute? Do you remember the feeling of power it gave you? You were the master. The machine was your slave, and you could make that machine do anything!
I've even heard it expressed in person: While sitting on a speaker panel with the inestimable Dave Thomas (a.k.a. “Ruby Dave,” the co-author of the “Pickaxe” book on Ruby), he said, point-blank, “50% of all programmers should take up farming instead.” (To which I said, "Way to insult half the room there, Dave.") His point was the same as Uncle Bob's: that the “key difference” between those who excel and those who pretend is that passion, that devotion, that incredible motivation that can only come from deep inside, where the strongest emotions lie.
Passion is the outgrowth of that sense of power. We even have a book about it, “The Passionate Programmer,” by Chad Fowler. It's everywhere, it seems, and it's the “secret sauce” to success in the profession. It's what defines us. It's what motivates us. If you lack it, you should quit and take up something else.
And I don't agree with it.
Professionalism
Don't get me wrong; passion provides motivation, and keeping programmers motivated can be tricky. So much of programming is a mental discipline, and keeping a programmer's “eyes on the prize” can sometimes be a difficult task. After all, a programmer has so many things they have to keep track of while programming: avoiding obvious security bugs, avoiding obvious performance bugs, avoiding obvious scalability bugs, and that's just the starting point, because then we have to worry about the subtle bugs that can appear. And that's before we even start to worry about the long-term implications of the software we write, the class design, object dependencies, excessive call interactions between components, and so on.
Interestingly enough, Uncle Bob goes on to make a strong point, talking about his recent flying lessons:
"I started taking flying lessons a few months ago. The first lesson was free! The instructor took me up in a lovely little Piper Warrior, and then handed me the yoke. With no instruction at all, I was flying! Whoo! Hoo! I can fly! I can do this! I'm a pilot!"
Passion. It's a beautiful thing. We get that. But check out what comes next:
"We landed and I signed up for lessons. And then the instructor gave me twenty pounds of books to read. He signed me up for hours and hours of ground school lessons. I've been reading and studying like a college senior the day before finals ever since then. I do homework. I take quizzes. I attend lectures. And how much flying do you think I've done? I just checked my log. I've been in the air for just over three hours, including that first free flight. I'm not allowed to just hop into the airplane and do what I want."
In other words, flying might be your passion, but to be a pilot, to be given actual control of an aircraft, a pilot-candidate must exhibit an entirely different characteristic, the one that I think really defines the difference between the sub-par programmer, and the one that stands out: professionalism.
Professionalism 101
Run the word “professionalism” through your favorite search engine, and you're likely to find definitions like “the competence or skill expected of a professional” (Google) or “the conduct, aims, or qualities that characterize or mark a profession or a professional person” (www.merriam-webster.com).
But what does professionalism mean in context? Fundamentally, professionalism consists of five basic elements:
- Character
- Attitude
- Excellence
- Competency
- Conduct
Character: Maintain a professional mindset: to do what is best by the customer at all times. This includes making decisions that aren't always in the software developer's best interests; choosing to avoid the newest bright and shiny technology, for example, or to build a desktop app instead of a mobile app. It means understanding that software development is about building something of value for your customer, first and foremost, and only secondly building something that follows some kind of internal moral compass of perfection.
Attitude: The professional's internal mental view of him- or herself doesn't abide arrogance in oneself, and it avoids hubris at all costs, but it doesn't shy away from expressing knowledge or competence, either. It accepts suggestions from even the newest employees, on the grounds that every suggestion deserves fair evaluation regardless of its source. Your customer gets to make the business decisions about what takes priority, not you.
Excellence: The professional seeks to uphold a high standard at all times, in all aspects of their career. Code will be of the best quality they can deliver while remaining within the constraints of the project. Accountability will be a key concern: if a professional creates a bug, he/she accepts it and doesn't try to shift blame elsewhere.
Competency: Not only does the professional learn the things that they want to learn, they also learn the things that are necessary. Like learning how to automate, use version control, study new debugging techniques, and more. A professional, when coming into a new environment, studies the new code, the processes, and the environment with equal diligence.
Conduct: At all times, we treat our customers and our co-workers with respect. No “brogrammers.” No “elitists.” Every programmer on the team is given the opportunity to contribute, and those that ask for help are given it. The code is always stored in source control, and under unit (and other) tests, except in such cases where doing so would run contrary to the business' decisions. (Yes, sometimes these situations do arise; thankfully, rarely.)
In many respects, the way I think about professionalism boils down to this: Treat your customers as you would have your service providers treat you, and treat yourself as you would want your service providers to treat themselves. And if you still need more guidance, Search for the Boy Scout Motto for inspiration. Or the doctors' Hippocratic Oath.
Choices
So which is better, professionalism or passion? Obviously, having both is best-just as having both youth and experience is better than having just one or the other. And there's really nothing against passion; quite the opposite. Passion is defined (again, from www.merriam-webster.com) as “a strong feeling of enthusiasm or excitement for something or about doing something.” Passion provides motivation. Passion is often a synonym for love, and who doesn't want to do what they love?
But for my money, professionalism trumps passion every time. Passion is an emotion, and like all emotions, it is ephemeral and elusive. Passion fades. Uncle Bob loves flying. So does my father, who taught it for a number of years to people just like Uncle Bob. Lots of them were excited in the beginning. Lots of them felt that elation, that excitement, that sense of freedom and that passion that taking control of a small metallic cabin 10,000 feet in the air gives you. And he watched them sign up for lessons, and he watched them then discover what all qualified pilots know: that flying is not about passion, it's about discipline. It's about studying the physics of flight. It's about charting your flight plan and route, knowing exactly where you're going to land and with how much fuel will be left in the tanks, complete with some wiggle room in case something goes wrong along the way. It's about studying the weather reports, to try and avoid being surprised by weather moving in. It's about knowing the capabilities of your aircraft, so that if something does go wrong, you don't ask of it what it cannot perform. And if you're a professional pilot, it's about logging thousands upon thousands of simulator hours, going through scenario after scenario, practicing and practicing until any emergency scenario becomes almost routine. Engine fire: check. Landing gear malfunction: check. Flaps stuck: check. Bird strike to the engine: check. Professional airline pilots practice all of it, over and over again.
Professionalism doesn't happen by accident. Passion can emerge from that first line of code, certainly. Passion and excitement don't appear out of nowhere. Passion can provide the spark that leads us to take up the keyboard, or the artists' paintbrush, or the writers' pen, or the pilots' yoke. But passion alone doesn't give us the skills that enable us to be successful-that comes from an internal obligation towards professionalism.