Have you ever considered the age-old nature versus nurture debate? You should. What is it that makes a person a great software architect? Is it an innate talent that some guys have and some guys don't, determined by genes and the size of your brain? Or is it determined by a person's passion and a persistent effort to seek challenges and overcome obstacles?
I used to think that I wanted to work with the best. I say I used to, because I've come to realize that this idea has caused some problems for me in the past, so now I've changed my mind about it. If you know me at all, you're probably at least marginally familiar with my interesting job history. Yet in spite of these challenges including not having a degree, I'm still an Adobe Community Expert today. This itself is only true because I continue to push myself and in the past few years, more specifically because I've started pushing myself in an area unrelated to software: personal development and communication skills.
Joel Spolsky obviously wants to work with the best. Who wouldn't, right? He's talked about this both on his blog and in Inc Magazine. If you read his articles on the subject, there's a particular way he talks about his new hires and the way he courts them that used to make me think "wow". However after reading Carol Dweck's book Mindset: the new psychology of success, now I'm thinking "uh oh".
Although it's possible that Fog Creek could be a fantastic place to work, that's not the direction I'm leaning at the moment. Do I know what it's like to work there? Do I know what kind of boss Joel is? The answer is no... I don't know what kind of boss Joel is or what it's like to work for Fog Creek, I merely see things in his communications about it that would make me leery about accepting a job there. Here's an example:
The great software developers, indeed, the best people in every field, are quite simply never on the market.
The average great software developer will apply for, total, maybe, four jobs in their entire career.
The great college graduates get pulled into an internship by a professor with a connection to industry, then they get early offers from that company and never bother applying for any other jobs. If they leave that company, it's often to go to a startup with a friend, or to follow a great boss to another company, or because they decided they really want to work on, say, Eclipse, because Eclipse is cool, so they look for an Eclipse job at BEA or IBM and then of course they get it because they're brilliant.
If you're lucky, if you're really lucky, they show up on the open job market once, when, say, their spouse decides to accept a medical internship in Anchorage and they actually send their resume out to what they think are the few places they'd like to work at in Anchorage.
But for the most part, great developers (and this is almost a tautology) are, uh, great, (ok, it is a tautology), and, usually, prospective employers recognize their greatness quickly, which means, basically, they get to work wherever they want, so they honestly don't send out a lot of resumes or apply for a lot of jobs.
Does this sound like the kind of person you want to hire? It should.
Hold on there Joel, maybe not. It all seems very logical doesn't it? I mean, at least, it seemed very logical the first time I read this blog. Let me ask you a question: on which side of the nature versus nurture debate do you think Joel leans? I notice now that he makes very little commentary, in fact almost no commentary at all about what these "great" programmers do... aside pointing out that they get to wander around like erant princes, having powerful companies bow at their feet for the joy of basking in their brilliance. So I have to ask myself, do I want to work with people who are treated like (and possibly behave like) royalty? Or do I want to work with people who are maybe a little more down to earth?
More from Joel:
The corollary of that rule--the rule that the great people are never on the market--is that the bad people--the seriously unqualified--are on the market quite a lot. They get fired all the time, because they can't do their job. Their companies fail--sometimes because any company that would hire them would probably also hire a lot of unqualified programmers, so it all adds up to failure--but sometimes because they actually are so unqualified that they ruined the company. Yep, it happens.
These morbidly unqualified people rarely get jobs, thankfully, but they do keep applying, and when they apply, they go to Monster.com and check off 300 or 1000 jobs at once trying to win the lottery.
Numerically, great people are pretty rare, and they're never on the job market, while incompetent people, even though they are just as rare, apply to thousands of jobs throughout their career. So now, Sparky, back to that big pile of resumes you got off of Craigslist. Is it any surprise that most of them are people you don't want to hire?
Astute readers, I expect, will point out that I'm leaving out the largest group yet, the solid, competent people. They're on the market more than the great people, but less than the incompetent, and all in all they will show up in small numbers in your 1000 resume pile, but for the most part, almost every hiring manager in Palo Alto right now with 1000 resumes on their desk has the same exact set of 970 resumes from the same minority of 970 incompetent people that are applying for every job in Palo Alto, and probably will be for life, and only 30 resumes even worth considering, of which maybe, rarely, one is a great programmer. OK, maybe not even one. And figuring out how to find those needles in a haystack, we shall see, is possible but not easy.
So which side of the nature versus nurture debate do you think Joel is on? Certainly Joel believes that software is developed and improved over time - he knows all about releases and version numbers and feature enhancements. But what does he believe about his employees? Does he believe that people can change and improve? Does he believe that people can grow? If you include his article in Inc Magazine, It seems apparent from his writing that he wants to get the best programmers straight out of college and keep them at Fog Creek until they retire. Whether or not that turns out to be what happens, I can't say. But it certainly seems to me that he values born greatness and brilliance much more than passion and a desire to learn. After all, he's described his hires as "great" and "brilliant" several times, but made no mention at all of their attitude. It's as if they've come out of the womb reciting Turing's essays.
This is odd to me in an industry in which, there's an increasing chance that the technology you work with after graduating from a four-year degree program, didn't even exist during your freshman year. Moreover there are a few flaws in Joel's logic that occur to me now that I'm a little older, a little wiser and a little better read. According to Joel when you go to the hiring pool and you start taking in resumes, you get this big batch of a thousand resumes and out of those, only 3% of them are actually competent. Those 3% are a sizeable number of applicants, however, according to Joel, the remaining 97% of applicants that nobody wants to hire are incompetent people who are constantly on the job market. Really? Personally I have yet to meet anyone who continually pounds their head against the wall, day after day, expecting to find a good stable job in an industry in which they're incompetent and stays in the industry and stays incompetent. Either they find ways to learn and improve and become better at their job, or they move on to some other industry where their talents could be put to better use.
It's not obvious at first, but if you read between the lines I think what Joel is saying is that "the average person is a complete idiot who shouldn't be trusted with a potato gun." Not only is he saying that of the average person in general, he's saying that of the average programmer. To put it bluntly, if I'm reading it correctly, Joel thinks you're stupid. Moreover he thinks you're hopelessly stupid and that you'll never "get it".
The problem with princes is not that they're bad people. The problem is that the endowment of being told that they were born "special" usually leads to some unfortunate conclusions about life. These conclusions then lead in turn to unfortunate behaviors which Carol Dweck explains at length in her book. She's been studying human motivation since the early 80s and the bulk of her work has been on the subject of mindset. She identifies two specific mindsets, a nature-dominated fixed mindset in which we believe that a person's traits are predetermined by genetics (or other factors) and can't be changed, or a nurture-oriented growth mindset in which we believe that a person's traits can be developed.
For example, something I didn't know before reading this book is that being the best leaves no room for error. Obviously if you are the best then you don't make mistakes right? And you especially don't make the kinds of mistakes that other people make. If you're the best then the only time you make mistakes is when they're totally unavoidable, when they're out of your hands... when they're someone else's fault. That's trap number one. Someone who believes they must be the best because of their status or their "brilliance", needs to be constantly validated and their ego filled. Unfortunately in order to do this, they often need scapegoats so they can save face by laying blame on others for mistakes. Have you ever known someone who received a poor grade on a test or class assignment and then said, "it's not my fault, the teacher hates me." It's certainly possible this could be a true statement, however, ask yourself how much they studied? Were they really hitting the books or were they expecting to coast the class?
If you're familiar with Machiavelli's satirical book the Prince (in which he suggests that it's better to be feared than loved), then you probably won't be at all surprised by Dweck's description of the fixed mindset, because it's basically a play-by-play of the behavior Machiavelli ascribed for the Prince. (Incidentally, you can read the entire text of the prince here.)
Did I say prince? After he was fired from Ford motor company, Chrysler aggressively courted Lee Iacocca to get their company back on track, and he did... for a little while... and then he drove it back into the ground because he couldn't allow any of his employees to have good innovative ideas. He shot them all down because he was the genius behind Chrysler. Lee Iacocca had a fixed mindset and as a result he behaved just like Machiavelli's prince. Check out these quotes from Iacocca's autobiography. Speaking of his time at Ford, he says, "If Henry was king, I was the crown prince... I was His Majesty's special protégé... All of us... lived the good life in the royal court. We were part of something beyond first class--royal class... White coated waiters were on call throughout the day, and we ate lunch together in the executive dining room... Dover sole was flown over from England on a daily basis." Part of what would concern me about Fog Creek, now that I know this, is how much Joel's Inc Magazine article reminds me of these notes from Iacocca's autobiography. That article could have been much shorter, or it could have included some information about what constitutes a really productive engineer. We could have heard what kinds of questions he asks in interviews (which might have been quite helpful), but instead he chose to write two pages that sound like a brochure for working at Fog Creek, with great heaping helpings of detail about how he lavishes "interns" with perks on top of a salary that exceeds all but one salary I've received in my entire career. So I'm happy to hear what a Neverland it is to work at Fog Creek, but frankly I think their money could be better spent.
Not too long ago I worked for a company who hired me knowing about the fact that I have Asperger Syndrome. That job didn't work out in the end and I admit that I'm an equal partner in that event. Since I first found out about autism, I've struggled to find a succinct way of explaining the challenges we face and the strengths we have. When I applied for this job I made a pretty serious mistake in my cover letter: I used the word "savant" and also made mention of "working with the best". Although my use of the word savant was appropriate, there were two things I didn't realize about the connotation of my cover letter. First most people don't seem to be aware that the word "savant" doesn't mean "savant syndrome". The syndrome is much more specific and it involves seemingly natural (i.e. fixed) abilities far beyond the natural talents I have. But the word savant by itself can also mean "a person of extensive learning", and in spite of the Rain Man image the word conjures for a lot of us, this is the first definition given by dictionary.com. (Someone once actually called me narcissistic for using the word "savant"... it took me a while to learn from that mistake.) The other thing I didn't realize is how this view of talent as being a fixed, unchangeable quantity (the fixed mindset) influences the culture of an organization. You might remember that earlier in this article I mentioned that princes have a need to save face and lay blame on others for mistakes because they've been told that they were born "special", or more specifically "better" than others. Here's how that plays out in the corporate world.
Initially my boss had told me that he liked the fact that I blogged and hoped that I would continue and that we could put some of my content on the company website to attract clients. I like that idea. I enjoy writing and I certainly think that sharing knowledge with the broader community is important, for example as you can see with companies like Bryant Web Consulting, Kinky Solutions, Alagad and BroadChoice. Then one day in 2008 the fact that I blog suddenly became a threat to the company. Why was it a threat? Well one day there was this event that caught most of the ColdFusion community off-guard. Lots of people in the community were struggling with an unexpected rash of SQL Injection attacks. At that time most ColdFusion programmers weren't very good at protecting their applications from SQL Injection attacks. Those in the community who were using the recent proliferation of ORM tools were pretty much safe from most of the damage because all of the people who developed these tools were very conscientious about database access and ensured that the systems always used cfqueryparam tags both for performance and for security. If you'd asked the average CF programmer about database access at the time, maybe a third of them would voluntarily mention the tag (ORM developers always with emphasis) and half of the remainder would say something like "yeah, I know about it, but I'm not worried". Well, as often happens, people who didn't heed the warning suffered a fair amount. I honestly don't remember if any of our clients were affected by the outbreak, but I do remember that they were vulnerable. All four of us in the office spent an entire day doing nothing but fixing vulnerable cfquery tags to protect our clients from the threat.
None of my code needed to be changed, because I'd been using cfqueryparam tags religiously for the better part of a decade. I could just be really self-congratulatory about this whole event, and at the time I probably was, but honestly that gets old. I mention it here because I want to highlight two very specific and very different responses to the event.
One response was the company I worked for, who knowing that several years of my own code was protected by my ORM tool (DataFaucet) still refused to even examine or test the ORM tool. Moreover in addition to refusing to consider it as an option, they also became very fearful that I might have blogged about the events of that day. They sent a clear message that "we are the best, and therefore, we do not make mistakes." They could not have allowed anyone to be aware that they made mistakes (even though they had made a rather big mistake, along with the vast bulk of the community), because it would in their eyes permanently devalue the company. The only circumstance in which they would have allowed outside communication about any of our clients being affected by or even vulnerable to a malicious attack would have been in the event that we could be seen as "first on the scene" with the fix. Basically, we could not communicate anything to the outside world, unless it portrayed us as superhuman.
The other response is the one from Mark Kruger, the ColdFusion Muse of CFWebTools, a man whom, I find myself looking up to more all the time. Here's the first paragraph of Mark's blog:
Back in February I wrote a blog post on SQL Injection that included an example of how a malicious user might inject into a character field even though ColdFusion escapes single quote marks. The attack involved other forms of escaping single quotes - and was effective against MySQL. This week I stumbled upon (more like a train wreck) an attack that is much more sophisticated - and also involves injection into a character field. I am told that others have discovered and written on this attack over the last few weeks - but I was unaware of it until a customer of ours was victimized. Amazingly, the specific real world attack I discovered and fixed allowed the hacker to append a string to every char column in every table of the database...
He went on to explain the details of what he'd discovered about the rash of attacks. Right now I'm sure a lot of folks are thinking to themselves, "boy I'm glad I'm not that guy"... but I'd love to be Mark. I'd love to learn to be more like Mark. Not too long ago Marc Esher commented on another one of my articles and paid me what is I think one of the highest complements I've ever received. I was really flattered at the time, but honestly, I didn't yet have the deep understanding or appreciation for his comment that I have now. Maybe part of the reason why I was so flattered at the time was because he was so excited when he posted to twitter. But he also said this on my blog, which is much more revealing (hrd 2 get much nsite into 140 chars):
your persistence in figuring this out is admirable. I especially appreciate your walk through of how you debugged this. I don't know whether this laborious, persistent, methodical approach can be taught, or whether it's tacit, but at any rate, I'm glad you showed the world how you tracked it down.
If you read the twitter comment, you know he also said "no ego" and that too is kind of important and flattering for me. What he's commenting about in part is that I took the same kind of approach that Mark Kruger took to the problem. There was an issue that, at the time seemed potentially pretty serious... and then when I found the problem it turned out to be something simple... But unlike the company I worked for before, I didn't interpret this as a permanent devaluation of myself or a blow to my ego. I'm not saying that posting that follow up blog was terribly exciting, after all I was following up another article in which I'd stated that I thought I'd found a great new technique for caching with ColdFusion and it turned out not to be the case because of this mistake I'd made. But that's the thing, I viewed it only as a mistake and I looked for ways to learn from it. That's what Mark Kruger did also. He acknowledged not only that there was a problem, but that one of their clients had been affected by it. He addressed the problem and he shared information about the problem with the community, so that we could all talk about the solutions and learn from the experience.
Reading Carol Dweck's book about mindsets has given me a much deeper understanding of the person I want to be. I know that I've fallen into fixed ways of thinking in the past. I grew up being told (and believing) that I was smart and special. And honestly, most of us think, logically, that these are good messages to give our kids. But if you read the book, you'll understand that it tends to cause some problems like it did for Machiavelli's Prince and continues to for a lot of people in business today... but Dweck isn't just doom-saying. She's also providing powerful information about how to turn it around and start to think, talk and behave in a growth-oriented way. I don't want to be enshrined at a company (fixed), I want to challenge and be challenged and to grow and participate in the creation of new things that didn't exist before.
I realize looking back on my career that this fixed thinking has been a problem for me on more than one occasion. At no less than three of the companies I've worked for, I've been reprimanded for writing code that "the other guys won't be able to maintain". Can you guess what that involved? At one company it was a cfimport tag. At another company it was a cfparam tag. Not rocket science to be sure. Can you imagine how one of these companies might respond to the use of a CFC after upgrading to ColdFusion MX? How about how they might respond to the use of a cfthread tag after upgrading to CF8? These managers had declared not only that their other employees were "not smart enough to understand", but that they weren't even capable of reading the language documentation to learn how to use those features. A growth mindset is probably the single most essential skill that a software engineer can develop. It's sad that so many software companies seem to have fixed-mindset cultures. Fixed mindsets have a lot of effects, but the one surest effect they have is to squelch and prevent innovation! This is what Lee Iacocca did during the latter half of his tenure at Chrysler. (To his credit, when I made a mistake with cfthread at DealerPeak a few years ago, Chris Phillips responded in a very growth-oriented way. He realized the problem suddenly, told me about it, explained it, let me fix it and we both moved on a little bit wiser.)
Now, I could just say "I've had rotten luck and worked for a bunch of bad employers". I could. But then I think I would be cheating myself out of an opportunity to learn and grow from these experiences by denying my part in creating them. (And indeed, this would be falling right back into the fixed mindset that causes many of these problems... if you can't admit a mistake, you can't learn from it and you'll repeat it.)
Part of the challenge I've faced with jobs in the past is a result of my autism. Most people are better communicators in part because they're able to read minds via facial expressions, but with an autistic person, the fusiform gyrus (the part of the brain that reads facial expressions) is underdeveloped and so we don't have the incentive or the instinct to look at them. And although I've learned to try and make eye-contact I often don't make it the way other people do because I forget. I was having a conversation with Tiffany the other day and listening intently to what she was saying until I heard her suddenly pause and then say "is there something wrong with my shirt?" It turns out that, although I was tuned in to the conversation, I wasn't tuned in to her face. Instead I was staring intently at the buttons on her shirt. This is the kind of thing you'll find autistic people doing a lot, simply because we don't have the instinct to read facial expressions. Often these kinds of things get misinterpreted, for example, I'm really glad I wasn't having a conversation with a female coworker at that particular moment. ;) And I've been accused in the past of being egotistical (or worse) because of the effect it's had on my communication skills. At one of the aforementioned jobs one of my coworkers said "when you say these things you don't have to make people feel stupid". Well I certainly hadn't intended that to be the interpretation. I thought it was an honest question, in fact, I was giving the other guy the benefit of the doubt at the time. If I'd known he was going to be defensive about it, I'd have thought of another way to ask the question. Fortunately for me, I've discovered that a scientist named Paul Ekman has spent many years studying facial expressions. Ta-da! In the past couple of years I've been on a mission of self-improvement and it's accelerated for me in the past few weeks. So one of my next steps is to read through Ekman's books, Unmasking the Face and Emotions Revealed. There are also several other books about body language and motivation in my wish list. If you'd like to help me with my learning, I'd be flattered if you picked something off my wish list for me, but I'd also be equally as appreciative if you bought the same book for someone else you know with autism. Or for the parent of a person with autism. It may be the most important thing anyone could do for them. :)
There's also something much more specific that I'll be doing about my job issues. A few years ago I was living near DC and at the time I'd been thinking for a while about the possibility of working for a particular company that's well known in the ColdFusion community and has been for a long time. I called them up and I asked them about their opportunities and found that they make the mistake of only hiring people with college degrees... except for their most famous employee, who's an icon of the developer community and didn't quite complete a degree in philosophy. But according to them, it's impossible for any other human being to replicate his brilliance. They did send me a "test", but it wasn't a test of my ability or potential, it was a litmus test to make sure that I don't actually think about problems, but simply regurgitate all the specific design patterns they endorse. Like many of my other employers in the past, they didn't want employees who think and grow, they wanted employees that had specific, set skills and never, ever under any circumstances, think outside the box. So I realize now that part of the problem I've had is that I didn't know how to look for the right companies, with the right growth-oriented culture that would work for me (or anyone really). I may never apply for another job. I don't know. Things in my life are in flux right now. But it used to be that I was always a bit unsure what to say when an interviewer asked me if I had any questions. I'm still not entirely sure what questions I'll ask, but you can bet that I'll be interviewing the company from now on. I'll be asking them how they encourage collaboration, how they address mistakes that make it to production and how they keep the developers challenged and learning so their skills stay relevant. I'm fairly certain that the salaries at CFWebTools are lower than they are at Fog Creek, but frankly, I think I'd much rather work for Mark Kruger than for Joel Spolsky.
As a final note, I've met a lot of great people in the ColdFusion community. Have people stroked my ego? Yeah, sure. But they've also challenged me and helped me learn. Over the years I haven't always done the best job of appreciating the latter of these. So I'd like to say thanks to all the great guys and gals out there who've challenged me, like Rob Parkhill, Matt Woodward, Peter Bell, Judith Dinowitz, Hal Helms, Sean Corfield, Ben Nadel, Joe Rinehart, Sammy Larbi, Charlie Arehart and Marc Esher (one of these days I am going to learn mxUnit). :) And I'd also like to request that you keep challenging me. And not just on software. If I say something that sounds snarky or elitist or if I come across as egotistical, let me know so I can work on it. Communication is a big challenge for me, I need all the help I can get. :)