In early 2007, I was less than a year out of college, and I was working for a small consulting firm on the east side of Indianapolis. One day, a company approached us for some potential work, but before fully committing to us, the leads from their development teams wanted to see how we wrote code.
Of course, my boss - proud of a product I had been working on for another client - asked me to load up Visual Studio and show the new client the code. The thing is, my boss had never seen the code, and just simply knew how the application worked and what it looked like.
I was embarrassed, to say the least, as it was the very first professional project I had ever worked on, let alone the very first project I worked on in C#.
I was new to OOP, and, at the time, I didn't really understand the concepts of classes, inheritance, polymorphism, etc., so when I brought my code up on the projector for all eyes to see, my boss gasped at the horror and passed out on the spot, the leads got up and left promptly, and my career was over less than a year in.
"Mom! Dad! Great news! I'm moving back in!"
(I'm kidding, of course.)
I was, however, peppered with many questions about my design and architecture (or lack thereof, rather) that I couldn't answer honestly, because the honest answer was that I had no fucking clue as to what I was doing. Of course, I couldn't tell the client that (or my boss, for that matter), even though it was pretty obvious, so I stumbled my way through the interview, and somehow, we still landed the client.
The client had more work than their development staff could handle, so my team was really there to augment one of their teams and pitch in on a large billing application. We apparently did a good enough job (or the client was really desperate for help - still not sure to this day), because the client asked us to come back and pitch in on a larger project on which many developers from other consulting firms would also be working.
I was asked to work onsite for about a year, along with one other developer from my team, so I rarely saw my office in that time frame. My teammate was asked to continue working on the original billing project, and I was moved to this new project with a handful of developers from other consulting firms.
I was the youngest on my new team by several years and certainly the most inexperienced. As much as I tried to put on a façade and act like I knew what I was doing, the other developers saw through my bullshit instantly (I mean, my code kinda spoke for itself).
Thankfully, though, the other developers didn't berate me and my lack of skills, but instead, took me under their wings to help boost my development skill set.
One developer in particular, who got his foot in the development door sans degree by acquiring certifications and working various IT roles, would ask me to come sit alongside him and we'd review code together. He would highlight a chunk of code and ask if I could tell where the bug was without running/debugging it.
He was training me to be a human compiler and think like a computer.
Using the IL Disassembler tool, he would show me a bit of what was happening behind the scenes, which helped me better understand how to write more efficient code.
I learned a ton from this guy in such a short amount of time, and to this day, I am still very grateful for the opportunity to work with him. He did wonders for my skill set and my career, and I can't thank him enough. He is just an all around developer badass, and it should be no surprise that he now works for Microsoft.
Interested in how he knew so much and seemed to stay on top of all the latest updates, in addition to having a family, house, and other hobbies/interests, I asked him one day what his secret was, and his response has stuck with me ever since:
"Tony, the way I see it, there are two types of developers: there's the professional developer and then there's the developer who gets paid to write code for a living. If you really think about it, there's a huge difference between the two."
Being young and naive, I really didn't grasp the depth of his advice, but it resonated with me nonetheless, and I've pondered it over and over and over again for the last twelve years.
What I believe he meant by this is that a professional developer goes the extra mile. It doesn't feel like a chore to this person to read blog posts, get certifications, take extra courses, go to conferences, and find ways to constantly improve his/her skill set.
The professional seeks to understand not only the “how”, but also the “why”.
For some, development may be more than just a career, and is something he/she does on the side, though I don't believe that's really a requirement to be considered a professional, especially since that can really lead to burn out and other bad habits, but that's more of a topic for a different post.
I would also argue that a professional isn't afraid to admit when he/she is wrong or when he/she doesn't know something (unlike me early on, which definitely got me into a bit of a bad situation, like working 95 hours my second week on a project to hit the deadline).
I think this type of person is also intrinsically motivated, and while financial rewards or praises are nice, they're not the driving forces behind why this person does what he/she does.
On the other hand, someone who gets paid to write code for a living is more concerned with just getting the job done, regardless of how he/she gets there. If the solution is well-organized and efficient - great - but if not - well, that's fine, too. As long as it works, right?
Studying and improvement of any sort isn't really a concern for this person, either. It's typically pretty evident when you try to explain why his/her solution is inefficient or needs reworked and all you get back are eye rolls or facial expressions screaming, "If I hear 'refactor' one more fucking time, I'm going to lose my shit all over your nerd ass!"
He/she may also be quite content just copying/pasting answers found on the web without any real clue as to what the snippets are doing. (Professional developers may do this from time to time, as well, especially with impending deadlines, but this tends to be more the exception than the rule).
Over the years, I have definitely found myself on both sides of the fence, and over the last three or four years in particular, I would say I've tended to be more of a guy who gets paid to write code for a living. The old professional side of me pokes its head out every once in a while (and yells things at me like, "You call that Clean Code? What kind of pattern is that? Drop and give me fifty, maggot!"), but for the most part, I've taken on more of a "I just simply don't care anymore" sort of attitude, which is a bit of a shame (for me), because it seems like I'm doing my early self a disservice by not continuing to improve myself and stay on top of things like I used to.
I spent so many years early on reading books and blogs, attending meetups and conferences, seeking out mentors, and even going back to get my Masters in CS (which, by the way, was a huge waste of time and money) to improve myself and my chances at a really successful development career. Overall, I'd still say I've had a pretty successful run thus far, but that drive is really lacking these days.
I think corporate politics, the lack of any sort of reward for being loyal and bending over backwards for companies, toxic teammates, and working for managers and team leads who promote bad practices has led to this decline.
I also don't have the same financial drive anymore, as I've pretty much peaked in terms of what companies are willing to pay for my type of position. I think I have a little wiggle room left before actually reaching the top, but life-changing raises are a thing of the past at this point, unless I want to go more of the managerial route (no thanks) or try to start up my own business. I'm quite content with my salary and the lifestyle my wife and I are able to live at this point, though, so there's that.
In all honesty, I really think I'm just burned out.
Maybe it's the paradox of choice, as there are just too many options these days?
Maybe it's something else? I really don't know.
All I know is that with any profession, you can apply this same filter to the people within it: the professional "X" vs. the person who gets paid to do "X" for a living.
There isn't a right or wrong type of person to be, especially since, at the end of the day, we all need to make a living somehow.
You just need to decide which type of person you are and which type of person you want to be.