Fabulous Adventures In Coding
Eric Lippert is a principal developer on the C# compiler team. Learn more about Eric.
Thanks for all your insights on what is attractive or unattractive about job postings, and about working on developer tools. A great many of the comments were strongly aligned with each other; no one likes “alphabet soup”. And a number of them illustrated that there is a wide spectrum of what people find attractive and unattractive. To sum up the hundred comments I received:
Factors that make a job posting unattractive are:
Factors that make a job posting attractive are:
Factors that make working on developer tools unattractive are:
The last point I want to talk about in a bit more depth.
You don’t need a PhD in computer science or be a Waterloo grad to work in DevDiv. Now, don’t get me wrong; it helps to have a relevant degree from a great school. A great many of my coworkers have degrees in CS, mathematics or other related fields. But a number of my coworkers do not have degrees and are not even from Waterloo. (At one brief moment in my career my entire management chain from me up to our vice president was Waterloo grads; there are disproportionately many Waterloo grads in DevDiv.) Having an academic background certainly helps because it means that you’ve already been exposed to a lot of the ideas that we work with every day. But what matters is whether you can grasp those ideas and use them in practice, not whether you can “chew algebra and spit assembler” as one commenter put it.
A few anecdotes to illustrate my point. A couple years ago I had a conversation with an architect who had spent several years building up a library of objects to represent control flow operations on generic types, and only a year after he was finished did he realize “aha, this pattern of composable objects that I built this whole architecture around is called a monad.” You don’t need to be able to rattle off “a monad is an endofunctor with an associated bind and return functor” in order to write a library of objects that an academic would identify as being monadic.
A more extreme example: my wife worked at Microsoft successfully for ten years as a software tester; her degree is in the study of the French “Theatre of the Absurd” movement of the mid 20th century. Admittedly, that sort of thing is less common these days than it was fifteen years ago. But it does illustrate that people do come here with all kinds of academic backgrounds. What matters much more than academic background is drive, talent, intelligence, ability to learn new skills, and simply getting stuff done.
Let’s move on to the positives.
Factors that make working on developer tools at Microsoft attractive are:
Thanks again for all your comments and constructive criticisms. I appreciate it very much.
AndyF, if you base your hiring decisions on real world common sense, instead of job abilities, I see that as a problem.
I lock my keys in my car, forget to fill up my low tire, don't see the wallet on the table right in front of me after looking for 30 minutes (my friend came in and found it for me in 30 seconds).
I forget my passwords (combinations) to my accounts (mainly because I use several variations of a password everywhere, not the same password everywhere).
None of that has anything to do with my ability to develop software. Sure you could come up with analogies and "if you can't do that, it hinders your ability to do this" all day.
Fact is, I'm good at software because software is what I love. When I am at the computer writing code, or in design meetings with clients, or designing the system itself with the team, I am -very- detail oriented, see potential issues, and plan ahead without trying to over engineer.
Joke with my friends growing up for D&D: High INT, Low WIS
Actually Eric, I usually ensure the employer knows my salary expectations long before we get to an interview stage and I tend to go after specific posts rather than the shotgun approach, so while it's not in my CV, it will be communicated on to the employer. But yes, putting it in the CV is an interesting idea - the only flaw I can think of is caused by somewhat unscrupulous recruiters hanging onto old CVs -- I've gotten calls originating from a CV that was sent out six or seven years earlier, and of course my salary expectations will have gone up since then, which could be a problem if they were in the CV the employer was looking at.
It's striking to see some of the polar opposites reflected in the list. I think it just goes to show you that whenever there are two extremes to any discussion (such as, for example, "Agile"), you're going to end up alienating some people no matter what.
Then again, if you just average it all together, the want-ad looks boring and indistinct.
My guess? Probably none of these things really matter that much in the long haul, and the only *serious* roadblock for a company like Microsoft is that many if not most of the developers at the desired skill level either (a) are not on the market, and/or (b) overestimate the gap between their own abilities and those required for the job. There's never a shortage of unqualified candidates because they're *always* on the market and consistently *overestimate* their abilities.
Maybe you've gotta do what Google does, or at least used to do - actively recruit, don't always wait for people to come to you.
Eric wrote: "That said, people with a strong background in languages (either from academic pursuits or industry) stand out."
Hmmm. Could you elaborate on the phrase "strong background" a little more? For instance, does that mean developers with experience in a broad range of languages, or developers who have written their own APIs/frameworks? Or, would it be a step beyond that...i.e. having written a compiler, interpreter, or even a scripting language?
(I suppose someone who has written their own IDE or developed their own programming language would probably be even better yet.)
Sure, if we get the opportunity to hire people like Anders or Neal Gafter who have a documented history of designing and implementing famous top-of-the-line tools, those people are very interesting to us. But those sorts of candidates are understandably rare special cases. What I meant more by "strong background" was strength in proportion to the candidate's life experience and the position offered.
Given two fresh-out-of-college candidates who are otherwise equal, the one who speaks enthusiastically and in detail about their Compilers 401 project has an advantage over the one who doesn't. (Full disclosure: I did not actually take Compilers at UW.) Given two industry candidates who are otherwise equal, the one who worked on parsing a query language and optimizing it to their business process has an advantage over the one who doesn't. And so on.
Eric wrote: "What I meant more by "strong background" was strength in proportion to the candidate's life experience and the position offered."
Makes sense. I suppose, more generally, like any hiring situation, that could be summarized as:
chance of getting hired = .2t + .2d + .4e + .1a + .1p
...where t = talent, d = drive, e = experience, a = appearance, p = personality (each ranging from 0.0 to 1.0 based on the candidate) and the sum of the coefficients equals one. An employer could plug in whatever coefficients they want to, depending on their needs/preferences. As for a candidate, drive and/or raw talent could overcome a lack of experience.
Unfortunately, e is typically the dominant factor on a resume, and it is more difficult to convey t and d unless the candidate enters into an interview situation.
@Eric-"The point of the negotiation tactic is to put the other party at a disadvantage."
I strongly disagree that a company should take advantage of an employee who has weak negotiation skills.
I didn't say that a company should or should not do anything; merely that these tactics exist and are used. The question of what should an entity do is a moral question. My belief, which is supported by both law and centuries of practice, is that a company has a fiduciary responsibility to protect the interests of its stakeholders; protecting those interests includes compliance with the law of the land and the policies of all regulatory bodies. To do otherwise is to risk the embarrassment, censure, or destruction of the company, which is not within shareholder interests.
Now, it might well be that the best way to protect stakeholders interests is to foster an environment of openness and generosity in the realm of compensation. Or, it might be the case that the opposite strategy best protects stakeholders. That you and I both find the former attractive and the latter unattractive is irrelevant to the moral question. -- Eric
The salary should be based on a candidate’s qualifications and experience, not on their negotiation skills.
Another moral statement. What justifies this moral statement? Is it simply the case that what you find unattractive is morally wrong? -- Eric
If you come into contact with a company who is trying put you at a disadvantage or their employees at a disadvantage, my advice is to run away. Employment is not like buying a used car, it is more of a long term partnership. You want to work for a company that values their employees and treats them fairly, even if they have poor negotiation skills or are afraid to ask for a raise.
Indeed, I want to work in a place like that, because I am a lousy negotiator. Of course I want to work for a company that gives me a good deal without having to negotiate much. That's convenient for both you and me; I would imagine that like me, you are also of a temperament that dislikes negotiation. But why should someone who is a good negotiator be deprived of the opportunity to negotiate a better deal for themself? Negotiation is a valuable skill and surely you would agree that it deserves to be compensated. -- Eric
@Niall made great comments. I don't think people can appreciate this issue until they actually work for a company where revealing your own salary information is “cause for disciplinary action up to and including termination.” It is very demoralizing to have no official information on what other people in your position at the company make or any general information on salary, raises or bonuses. Everything is individually based and at the discretion of upper management. It is not a fun atmosphere to work in.
I am sure it is no fun whatsoever. Are all companies morally required to be fun places to work? -- Eric
@DRBlaise: Why shouldn't pay be a negotiation? One thing that I think many people overlook (and I did myself for the longest time) is that you are an individual should operate your professional life like a business. You are trying to sell yourself for the most profit you can to your shareholders (family.) At the same time you are trying to create a great partnership with other businesses (such are your employer) that are mutually beneficial. How do you expect the partner (employer) to know what you are worth if you don't negotiate? Should they just take all the profits for the year and split them equally among all of the employees? That would make weak and lazy employees have a huge advantage over those that are strong and hardworking.
At the same time comparing your salary and benefits directly with another employee may not very helpful. Some people could careless about how great the healthcare is and may need/want a few extra bucks tossed their way. Someone else may want the healthcare and educational/training benefits.
There is a reason to have the negotiation. It allows both parties to come to something they both agree on. Even if you are “weak” at negotiating, you still have a choice to accept or turn down an offer.
Regarding "Pay Negotiation" I agree with Matthew, but take it one step further. If one is looking for the new employee to contribute ideas to the environment, they MUST have negotiation skills!!!!! If they can not negotiate for something as important (Especially to them) as their compensation, how will they possibly participate in tem negotiations...
@David V. Corbin,
Negotiating pay is a "confrontation" between an authority figure and employee.
Contributing ideas to a project is a collaboration of supposed equals.
Very different situations. I can only argue/debate/challenge an authority figure if I have a lot of evidence backing my ideas up. Hard to prove why you're worth something to someone who has never seen you work. (I am good at negotiating raises, not good at negotiating initial pay).
Contributing ideas to a team is less stressful in that regard, not only because you are not challenging an authority figure with very little evidence, you are also not making statements that will greatly affect your life style for the next 6 to 12 months.
Now that I have more experience in the work place, I have more proof of past projects should I ever end up negotiating pay for a new job.
However in the past, I was not so fortunate.
@Eric - I didn't mean to make a moral judgment on the practice of all negotiations, I was simply stating what is going to attract me to an employer. Since my publicly traded company got bought by 3 years ago by a private entrepreneur , I have come to value openness about financial information a lot more than I did before. I was just trying to give you a reason why others find it attractive when a company displays a salary range and unattractive when they do not. If a company hides this information from you, it could be a sign that they view you as simply a resource to be take advantage of, instead of a partner in building the company - whether this is for share holders or for a private individual is not relevant. I have worked for companies that partner with their employees and those that see them as resources to be take advantage of, and I find the first type more attractive to work for.
Negotiation is a valuable skill, but it should be treated the same as other skills and compensated for as it relates to how much it is used on the job.
In answer to your last question, companies are not morally obligated to make it "fun" to work for, but it does make it more attractive to work for ... and I thought that was what we were discussing.
Brett, You have a valid point. For people early in their career, there is little ability for negotiation. For people who have been doing this for sometime, it becomes much more of an issue. Sometimes I forget what it was like when i was starting out in the 1970's - just getting a job in the field was a BIG success. These days (for me), negotiation is a very significant part.
@Matthew Whited-"That would make weak and lazy employees have a huge advantage over those that are strong and hardworking."
There seems to be an assumption in your argument that "weak and lazy" employees are poor negotiators and "strong and hardworking" employees are good negotiators. My experience is that how well you do at negotiating is not related to your work ethic or talent. I also believe that I can judge a person's work ethic or talent without them "negotiating" with me. They often have to communicate with me (but not always) but communication is different than negotiating.
I find people and companies that judge and compensate talent and work ethic based on how well a person "negotiates" unattractive.
As much as we may dislike it, salary negotiation is always going to part of the process for a highly skilled role like software development. At the end of the day, you're only worth the salary that you can negotiate. That's why I don't think putting salary on the job listing OR CV is a good idea, because it sets up the expectation too early.
Eric, what advice would you give to someone interested in getting into creating developer tools? Any books, subjects, technologies, or any other more general suggestions that would be helpful?
I think it is generally character-building to build your own compiler at least once, either for a language of your own or for a subset of an existing language. Or check out any of what I'm sure are thousands of open source projects that do developer tools and see how you can help. -- Eric
I think it's perfectly valid to ignore any "programmer wanted" ads that don't include a prospective salary range, the same as I would avoid any car dealership that didn't have price stickers on the car windows or dating ads that state "no liars or jerks". Particularly this is because that implies that an employee must negotiate their salary. While it's perfectly legitimate for some jobs (like litigator, CEO, or athlete), it doesn't make sense for programmers. It's like basing my salary on whether I can tell you why manhole covers or round or how to move Mt. Fuji.
Of course anybody could be a good negotiator, but it's my experience that the aggressive, egotistical, manipulative hotshots are the ones who end up getting paid more and promoted more, and those are precisely the type of people I don't want to work with, much less work for. I want to work for a company that values my skills and experience, not my negotiating skills.
The winner in a negotiation is most likely to be the one with the most experience and most power. Since I rarely have to negotiate for money (maybe every few years) and I can only survive a few months without a job, I have little ability to negotiate with somebody who does it every day and can probably survive years without filling whatever position I applied for. Why would I want to put myself in that position if I can avoid it?
Incidentally, I remember learning in psychology class that the reason women systematically get paid less than men isn't due to discrimination so much as that women just aren't as aggressive in negotiating their salaries.