Advice to a CS Grad: Ego vs. Pride in Programming
A few weeks ago I had the opportunity to have a spirited discussion via email with a fellow just about to graduate with a CS degree, centered around a few themes here on Programmer for Hire. Here are excerpts from the email that got us started:
I’ve read nine or ten of your essays in about an hour or so time frame, and I find myself wondering “Hmm.. I’m about to graduate college, and this fellow’s got it in his pocket. Seems to do well for himself, et cetera…” but then after I finished reading the last two, “The Free Day” and “What Happens if I Get Hit by a Bus?“, something bothers me, and I can’t really put it into the most perfect set of words, but I’ll try to communicate/ask-about my thought(s). It may read like an “attack” on you… and that might be a fair assessment, but that is not the intention. My goal was to show how your actions perpetuate a mentality that would be difficult to break out of, not to mention degrade the field as it is already.
I’ve noticed that in the field, there are what appears to be hidden .. guidelines (rules, codes, mores?, not sure what word to put here).. that revolve around the ego. Is this true, or is it more an attribute most seen in the “lone programmer” types? I recall reading you “walked out on air” [The Free Day] as though you ‘saved the day’ or something, as if you were the man of the hour, or day, as it were. Then, in the second essay discussing ideas for your hypothetical replacement, the new person should be able to understand your work, because “my code is quite beautiful and well organized, with perfectly uniform indentation and formatting, completely consistent conventions, and immaculately well factored” in the space of just one day.
First off, from my perspective, I don’t even need to synthesize anything from the preceding paragraph. I think it speaks with enough volume to make its own point. Maybe I missed a day in class that covered ego and “why it’s important to have to succeed in this field” because if so, man, a) I’m fucked, but more importantly b) the industry is fucked. If you can think about it [don't want your ego to get in the way here], consider this: you are a tool. It sucks not being on top. Even Zuckerburg isn’t on top. Sure, he’s got numbers to play with and spout around, but in reality. he is a tool. His job is to make other people richer. Sure, you’re probably not at his level in the field, but the idea of you make other people richer still applies. A tool has to be bought, so there is the initial investment [see that key word here?], but its price is paid off [usually] by using it to create things that cost more for those the tool’s services are required, in order for it to be sold for a profit. [hammer -> house -> homeowner]. Your job as a tool is no different. Maybe that’s why you and others in similar environments look to other ways of measuring success, ie: “I had 40 clients last year!” or “My app was downloaded 3400 times last night!”, et cetera.
… I am not saying you will cause a war to occur… but then again, aren’t you already in one? You purport yourself to be a one-man army, capable of reducing the vision into reality. You may very well be able to do such things [it seems so], but does that mean everyone should then become a one-man army? …
Alas, I think soon it won’t matter. As I wrap up my studies, I keep finding evidence that I don’t like the field I’ve chosen, even though I’ve been told I’m pretty good. I subsequently tell those who tell me that, that they are incorrect; they are comparing me to their skill in the art, not the greats. Of course the greats don’t become great by staying behind the scenes. They need their name out there, in front of people, part of some discussion or controversy, et cetera. As the days go by, the counter measuring my disgust increments too.
PS: I don’t want you to stop cold-turkey. In fact, continue what you do. This is just some new guy to the real-world trying to understand it [even if from a more... aggressive and accusatory standpoint]. If you read it all, and want to kill me.. or whatever… I do apologize. I am a new-born programmer… but that doesn’t mean I don’t have convictions.
This gave me real pause for thought. If my tales of programming are leaving members of the next generation of programmers with misgivings and distaste about the field, I’m both surprised and keen to make amends.
Here was my reply:
First off to be clear: I don’t want to kill you. On the contrary, I give you serious props and respect for thinking deep on all this enough to question my words and raise some real valid points of contention. I appreciate your earnest curiosity and willingness to call (what I would label) tentative bullshit on some of the ideas I share on the blog.
So what I’m hearing in your words is a healthy concern that programming (or at least the freelance market of it) is being purported as a massive bout of egos: with both constructive elements (e.g. how bolstered sense of self importance fosters serious productivity) and destructive elements (e.g. if you’re not good enough to follow MY code, you’re fired).
If you’re open to it, I’d like to offer you a different perspective which may help to decrement your disgust counter about your contemplated field as you round out the current phase of your education.
Consider programming as a craft, and you and I as craftsmen.
As craftsmen we may choose to take serious pride in our art and commit ourselves to deepening our practice and grow, learn, and improve in an ongoing basis. We may also choose to resist our craft while staying in it: complain about it, insist that the other guy’s code is shit, and maintain a tendency to make excuses for difficulties encountered, lack of results, broken promises, etc. (Since it is pretty well agreed upon that programming is a rich, complicated, and on the whole difficult practice, we have a lot to draw from when making excuses.)
My ethos in my craft is to be the best darn programmer for hire I can be, and to hold myself to a very high standard so that I’m worth every penny to the people who hire me (that entails making big promises, following through with high integrity, and completely owning my fuck ups when the occur). My aim in blogging is to spread that sort of pride (and the attendant benefit, i.e. charging a lot and doing folks a lot of good for it) to my fellow programmer, and at the same time advise the hiring world that you don’t have to settle for shitty development talent, which the business world by and large seems to think it must (just ask a typical project manager about the frequency of excuses, lack of results, and broken promises they’ve encountered).
Where ego gets nasty (and is apt to rightly increment your disgust) is when it is applied with hypocrisy: when I’m a bumbler but should be tolerated ‘cuz I’ve got lots of really great excuses, while everyone else who missteps is shit and should be fired.
That, I agree, just fucks the industry with a warped terrain of self-deluded talent and hapless hire-ers who don’t know who to trust.
The world in general works better when people (meaning ourselves and the folks around us) take responsibility for results happening, pursue excellence, have pride in doing great work, honor promises, and decline to indulge in excuses, blaming others, and complaints. (Please look for yourself to see if the preceding sentence sounds about right to you.) Consider that our craft is no exception.
Side note about being a tool: no one needs to be bummed about being one. With a deliberate choice of language you can flip the notion of “being a tool” into “being of service to something or someone, which gives purpose”. Most everyone who earns a living is a tool by the definition you invoke. Consider that it’s actually not a problem, especially if you enjoy and have pride in what you’re doing. Success is in the eye of the beholder, and what works well for me in gauging success is the quality of life that my craft affords me to live.
So you’ve got the opportunity to play in this craft. If you focus your attention on all the prick waving and caustic competitiveness, I reckon it doesn’t look that appealing, especially since you’re apt to fall into that game by the mere act of focusing on it. (It’s analogous to “keeping up with the Jones’s”: obsess over whatever’s parked in their driveway and you’ve got a problem, ignore the Jones’s and you’re free to do your own thing.)
There is an alternative, and that is to transcend the whole darn thing. I’m actually not at war with anyone, and you don’t need to be either. I learn a lot from the greats (my heroes who contribute massively to our craft), pay it forward by contributing to others, and otherwise just do my own thing in a personal pursuit of what to me is excellence.
There’s one last thing I want to leave you with about the field you’ve chosen but are having second thoughts about: it’s actually pretty sweet. My wife and I are–no joke–moving out of our apartment in two weeks to go on a roughly 15 month world tour. Everyone says how lucky we are, and though I resist that a little because it’s more a deliberate choice and creation (we didn’t win the lottery), there is truth in how blessed I am to have a job where I can work anywhere in the world with just a laptop and wi-fi. To me that’s awesome, that’s that quality of life thing I mentioned. No one’s stats are a threat to that.
I hope at least some of the above is useful to you, and know that I appreciate you sharing your perspective. As you might guess from the tagline of my blog I’m fascinated by the culture of programmers and how we view and act in the field–the good, bad, and ugly. So if you’d like I’d be happy to continue this spirited conversation with you on the phone some time–my number is (720) 621-0600. In any event, all the best as you finish your undergrad studies, and in whatever path you pick for your career.
He and I had one more email volley, and to his follow up remark,
“…you do bring up some food for thought. I’ve thought about the craftsmanship aspect, but I can see a little ego in there still — however, I think with good practice, it can be useful, but held in check.”
I had this to say, which I think sums it up for all of us programmers:
When it comes to ego: it’s up to you to manage it in whatever manner works well for you. At the end of the day you’ll either come of as an insufferable cock-jockey, a complete delight to work with, or somewhere in between. Since that reality holds true for you and everyone else, there’s a lot of great incentive and room for folks keeping their egos in check and having our craft be more of a peaceful playground. It’s the notion that I get to control my part of the equation which makes me pretty optimistic about the state of our field–your mileage may vary, but try that on.
This is Programmer for Hire, a series of essays and explorations on the art of being a great programmer doing on-demand custom software development.
Looking to up your game as a programmer for hire? You can get one-on-one coaching from the author of this blog.
Looking for help and advice on how to get your programming project done? The author can help you as well.