We all know guys from both those camps, so something must be up.
I think a lot of guys get trapped in this cycle between their own lack of confidence and predatory companies that look for that sort of employee to exploit. I mean, what better employee to have than one who's constantly in fear of losing his job in the next round of layoffs and will happily work long hours for "market average" wages in the quest for job security.
That developer, when he hits the market, will hit it via a layoff. And he'll have four years of his last employee reinforcing his lack of value, so he won't expect much beyond a desperate search for somebody, anybody who will hire him. That's not the sort of dude who will network his way into coffee with your CTO. He'll pray and spray resumes at HR and endure half a year of being rejected by keyword filters. By the time the next exploitive company finds him and offers him another death march at a "market average" salary, he'll be so grateful that he'll never want to leave.
You see that guy here from time to time (though more often at Slashdot and Reddit). I wish there were a way to get through to him to let him know that it's really not like that.
Programming computers for money is the single greatest profession in the 21st century. If you're doing it and you're not happy, know that you can fix it.
I'd consider myself to be in both camps simultaneously. I find that there are a ridiculous number of opportunities, but they're A) pretty bad ones or B) are unwilling to pay for what the talent they claim they want. I hate to sound so negative, but a lot of opportunities just aren't great. It isn't working for a startup, or working on some new infrastructure in a company that does something interesting. There's a lot of extending spaghetti code for a cost center within Cardboard BoxCo with enterprise software that's EOL'd by its vendor. More so if you live outside one of the big tech hubs.
I can have 8 finals in 4 weeks and get 4 offers, but after meeting with the organizations and finding the reality is the opposite of what they advertise, that I don't want any of those jobs. Especially at the levels of compensation they think they can get anyone, nevermind the top 5-10% of the candidate pool.
I've resorted to freelancing. Within the first 30-minute phone call we already know where things are going based on their reaction to my hourly rate. Additionally I figure if I hate the assignment, I know when it'll end. It also pays well enough that I only need to bill 7 to 8 months a year and can spend the rest of that time making video games.
Contrary to your image of the guy who can't find a job, I've been networking heavily and for the first couple of weeks, that's all I did. I explicitly decided not to focus on applying or interviewing until I'd had the chance to chat with multiple people with hiring authority, either over beers or coffee. Interestingly a sizable chunk of people I've met at hackathons have been in a similar situation, minus the networking focus.
>We all know guys from both those camps, so something must be up.
I think what's up is that nearly everyone is chasing the same few attributes in potential employees, one of which is already having expert skills at X thing they want to do. As
mentioned in the article, few companies are willing to train entry level or junior level employees and many even have a policy of rejecting any candidates who don't already have a job! This is almost guaranteed to create a bidding war for a small number of people while passing up many others who could fill their shoes after an adjustment period.
I fully agree with you about the importance of networking, but when large numbers of hard-working people with a high percentage of the needed skills can't get in without an inside contact, the overall job market for the sector is not hot. Anyone who claims the job market is 'on fire' is either out of touch, full of BS, or both.
What is a red-hot job market right now is teaching English in China as a foreigner. There, horribly incompetent people who lack skills, charisma or even valid working papers are hired quickly! Programmers in the US had a similar situation in the late 90's. In 2000, I was offered multiple jobs despite having no programming experience just because I knew some HTML.
Interestingly, the market for really low-brow contract programming work has been much easier to crack. I've been meaning to blog about it, but haven't had the chance to fully organize my thoughts on it. Basically there seems to be a bimodal distribution of supply of programming work vs difficulty of the work.
I've never worked at a place that did this (unless "X thing they want to do" == "basic computer science"). I've always had difficulties hiring.
The fact of the matter is that most people you interview just aren't very good. It's hard to find the good ones. This is a complaint about search costs as much as price.
I have a folder in Gmail of comments thanking me for my negotiating advice articles. My running tally is folks are $214k a year wealthier literally just by asking for it.
With no functional receptionist (we kinda had one, but she was always offsite or legitimately busy elsewhere), my day was interrupted more and more and I couldn't focus on my actual role. I was told that my role now includes general reception, and I refused to take this unilateral change. This was an issue that I was always careful to diplomatically make them aware of prviously, so it's not like they were blindsided. That was the end of my employment there.
My circumstance was a little unusual, but seriously, it's not as feelgood or harmless as it sounds to 'just ask for it'. I wasn't even asking for more money. I was asking to do my job as agreed upon in the countersigned job description. And this was at a generally ethical workplace that just had a cashflow and hence staffing numbers problem.
Although strangely, you use words like "countersigned job description" as if a job description is a legally binding contract. I think that it's reasonable and expected that the job you do does not always match word-for-word with the job description you had when were hired. Things change, and it's good to be flexible. You might have to learn a new programming language on the job, install some software, design some icons, and other programming-related tasks that were not technically in your job description.
But that doesn't extend to answering the main switchboard, getting the front door for people, and cleaning up coffee cups after a meeting.
You're right to say, "I'm a programmer not a receptionist". Good for you. But I would be less supportive if you said, "I am a programmer not a DBA" when asked to create a new index.
Good luck to you.
After all, remember what the common person finds revolutionary about tech companies. Not the nice salaries and high employment rates. Food. Laundry services, on premises events. The faintest hint that the company cares about the people, and tries to treat them well. That's a foreign concept to most.
Mostly employees get "you're lucky to even have a job" shoveled down our throats. (And that could in reality be the situation at those larger tech jobs I've loosely described, but the point is, things like that? Good PR against it.)
A fair portion of tech companies don't even do this stuff. My first corporate job had Peapod snacks from Stop & Shop, but didn't have so much as an actual lunch hour. We were often told we'd get a tech seminar or go out to one at a local university, and somehow we never did.
It wasn't that any particular boss withheld perks they had promised. There was just an overall culture of "keep your head down, don't act like a geek, and work all the hours God sent to earn your salary", which was a very strange thing to encounter in the tech sector and a downright disturbing thing to see happening without enforcement by a cruel authority figure.
It's weird when people oppress themselves.
If programming wasn't worth the money it is, I'd either be making less money or doing something else that I maybe don't have the same aptitude for.
So to that extent, lucky that the market values us so much for something many of us were innately drawn to anyways.
How do you ask for it? (or how do you get there?)
Recruiter: "Our client is offering $45/hr for the position, what do you think of the offer?"
Myself: "How close to $50/hr can we get?"
Recruiter: "He can do $50/hr."
That was all it took, and that was the discussion about it verbatim. It's hard when you're already in the position and you have to negotiate a higher raise with your boss because you need to prove you're worth it by performance(and whether or not you meet their metrics, etc etc), but in the interview process, that's how it went for me.
As someone who's been on the hiring side most of my career: I've never given my "best and final offer" to a potential hire right away. Doing so is leaving money on the table, as most hires accept the first offer made to them unless it's totally out of the ballpark.
But that also conversely means that not asking for more than you get offered is leaving money on the table.
If they clamor to accept right way, I'm left wondering if I offered too much.
I've also never terminated discussions with someone, or known about situations where that happened, without providing at least one counter offer. I'm sure it could happen, but as long as you're not being an ass about the way you're doing it, few people will turn around and decide not to hire you just because you try to get more money. If anything I want the people who have the confidence to ask, rather than the one that just quietly accept what's offered.
I doubt that it's ever "too much", but sometimes it can just be a matter of appeasement or desperation. I told the same story above to a friend of mine who had been out of work for at least one or perhaps two years after finishing a degree from a video-game school as he was being offered a position as a web developer. I encouraged him to ask for just a little more than what he had offered, but he sent back an acceptance of the original offer from the employer as he was afraid of rocking the boat, and simply just wanted to get paid as bills began to mount up.
The original offer was for a $50K salary, which isn't terrible for starting out of school. In my eyes, I was slightly disappointed that he didn't even really try to get another $2000 or $3000, but in his position, he didn't want to risk losing the original $50K just for a little more.
A counter-intuitive trick for those who have trouble getting offers and/or worry about talking up their offers: Look for jobs below your desired salary range.
Most people look for jobs where any stated salary range match what they expect based on past experience - I see that in candidates for jobs I hire for all the times. Most candidates fit squarely within the range.
If you look for jobs slightly lower, it will often mean you interview against less skilled candidates than yourself. As long as you can convince the hiring manager you're not overqualified and looking to leave as soon as possible, it significantly increases your chances of an offer.
Once you have an offer, if you stand out skills wise, you'll be in a far stronger position to ask for more, even if you're asking for more than their salary range - everyone will have "invested" in you as their preferred choice, and standing out in terms of skills makes it easier to justify to HR to offer even beyond the top end of the range, sometimes beyond what they'd planned on stretching to.
I've seen this work from both sides of the table - psychologically it's hard to give up what is seen as a great deal, even when the other side makes the deal less and less attractive (by bumping up the salary requirements), and in the end people (on both ends) tend to be happier with deals where they've had to negotiate.
But it also leads to the situation where people's compensation is mostly based on how good they are at negotiation, not how good they are at their job. I would argue that this is not only unjust, but actually in the long term poisonous to your business.
People talk. They compare salaries. If the results are out of whack with perceived contribution, people get upset. If they're the kind of person who wouldn't negotiate a higher salary with you in the first place, they simply leave the company. And you're out a valuable employee because you tried to screw them on the margin for not negotiating.
Not a quick effect, granted, but if you plan to operate your business for longer than a couple years it seems to be very important to me.
But within that range, we'd never start at the top, not least because we need a buffer to deal with the candidates we really want that do negotiate.
If the rest are the kind of persons that don't know their worth and can't stand up for themselves enough to ask what they think they're worth, perhaps they're not worth that much in the first place.
I'm about as left wing as you get (enough so that I know plenty of people who where openly watched by security services in Norway back in the day...), but I also realized a long time ago that I was wasting my time (being politically active) fighting for what was in fact other peoples benefits, as I could easily get jobs at well above average rates while the people whose interests I fought for had no interest in it, or actively disagreed with the level of redistribution I believe is fair.
As long as the vast majority of people support a system that makes the above the natural corporate response, I don't see it as screwing them. I see it as rewarding the people who have skills that are valuable to the business (ability to stand up for themselves, and to negotiate) at the expense of those who can't really be bothered taking responsibility for themselves.
This isn't an issue where someone for whatever reason can't - everyone can look at the offer and say "is that the best you can do?", or "I was looking for X amount more; if you can meet that I can sign right away". If someone is so scared about standing up for themselves or care so little, I really don't want to pay them more. If that makes them leave sooner, then so be it.
But if you're hiring software engineers, it's just not true. There's a pretty strong negative bias against negotiation for most engineers, and it's not useful to the job. Being good at demanding higher compensation does not correlate with programming skill. I don't know what kind of employee you're hiring, but you really might be driving away some of the best people that way.
That said, I'd advise really just about anyone to get over themselves if they don't negotiate. You should always negotiate when you take a job, or at least try.
I absolutely can't agree with that at all.
Any developer that needs to talk to product people, customers or other teams spend a substantial amount of time negotiating. Even when dealing with other team members you're constantly engaged in negotiation.
In my experience there's a strong correlation between ability to assert yourself and negotiate, and your ability to get your point of view through to a team and develop consensus around your solutions.
A developer can write brilliant code, but if they struggle to assert themselves enough or negotiate to get buy in for their views, they can often get steamrollered completely and the team end up shipping some mediocre solution that wasn't as hard to defend, written by someone who isn't afraid to make their voice heard.
Conversely, I've seen teams where some "high profile rock star" team member leaves, only for the rest of the team to breathe a collective sigh of relief that it's now ok to throw out his code and change most of the decisions he made that they disagreed deeply with but that they were unable to stand up to, despite in some cases outranking said developer.
As a result of those experiences, I want developers that can stand their ground and that are not afraid of fighting for what they want and believe is right, and that know how to do it in a manner that isn't confrontational but wins them respect. And no, I don't believe for a second that the meriot of the code itself is sufficient - so often it boils down to heated opinions.
He offered $45 an hour because he know some would take it and he'd save $5 per hour. Don't be that group.
More specifically, when they make you an offer for $x/year, you say "how about $(x + 15)" instead of "holy crap yes yes yes!"
You can also try it at your current job if you've been there a while and haven't seen more than "cost of living" adjustments in your salary for a while. Though the sad reality is that it's usually a lot easier to ask another company instead and get your raises by switching jobs.
I applied for jobs with well-known BigCo's in senior year of college. I got 2 job offers out of maybe a round dozen firms, though these two offers were from Amazon and Microsoft. I got to a sight interview with Google, but got rejected. Overall, did good but not great. Didn't even get to meet start-up folks, because most start-ups are in San Francisco and what start-ups exist in Boston, even funded ones, fall all over themselves to hire from Harvard and MIT while pretending UMass Amherst doesn't exist.
Then, over the summer, when I decided I couldn't move to Seattle, I worked with a boutique recruiter in Boston who catered mostly to funded-stage start-up software companies. Suddenly, firms were falling all over themselves to hire me. I bet it helped that they knew I had a standing offer from a BigCo!
Ended up job hunting again this winter. Got lots of interviews, but no offers until my friend recommended me to his boss. Got told by a lot of people that they couldn't take the risk of someone without front-end web development experience, that I didn't have the right background (for entry-level software engineering? Give me a break!), or the most disappointing response, that they thought I belonged in academia and would clearly end up there.
End of the story: I ended up contracting, living in my nice town again instead of freaking Boston, and signing up for graduate school somewhere very nice. But through it all, I can say I've seen both sides of the market.
To get a job, you need to cast a glamor/enigma spell on yourself, and seem like you're searching for exactly the kind of position the companies are hiring for. It helps if you work with someone like this recruiter I worked with, who (if they're good) maintains a huge Rolodex of companies who're hiring.
Personally, I was in the "this job is awesome" camp before I turned 30, as well as before I turned 40, and still am.
He he, the kids never learn, even when the discussed article covers the crashes of this roller coaster job market... :-)
That said, an insightful comment.
That doesn't work with other candidates for "single greatest profession". Doctoring, lawyering, nailing things together, whatever. They don't scale the same way.
That is, there's no way for a Dentist to perform a single act of Dentistry that he can sell as a service on the Denternet and maintain his lifestyle indefinitely with just a few hours of work per week. He has to keep Dentisting day in, day out, either by hand or by running a practice, or the money stops rolling in.
Software is rather unique in that quality.
I have seen that.
On the other hand, he described an army of job-hungry young people striving to get the right education for entry level work... but missing the boat on just the right tech -- again for overly-constrained hiring processes. That does not match my experience: I see students coming out of the educational system -- reputable universities -- with a huge gap in fundamental knowledge.
I fear that universities, colleges, and vocational schools, in their effort to deliver workers with fashionable resumes, are failing to deliver the fundamentals.
Yes, you can teach yourself the fundamentals if you know you need them. But if you've gone through 4-6 years of university under the theory that they are teaching you what you need to know, it may be harder to realize that, in fact, you have learned how to look good, but not how to be good.
I vividly remember attending a lecture by a noted career counselor my first week in school. They had just laid off tens of thousands of engineers nationally when the space program wound down. He told us if we got the engineering degree and weren't in the top twenty percent of our class we wouldn't find work.
But if we went the journalism route there would be four jobs for every graduate. I was more passionate about Journalism so that's what I majored in.
So what happened? Four years later I literally couldn't find work in my chosen field. But my buddy with his engineering degree and 2.1 gpa had employers fighting over him. All of this happened in four years time.
To the extent that this guy is right, recruiters are getting paid a lot of money and doing a pretty crap job. They are supposed to be the ones saying to employers "The requirements are too specific, The salary is too low." They are supposed to be the ones qualifying borderline applicants with a low percentage out of a deep pile. It's a hard job, but its not like they're charging $100 for it. They charge a lot. enough to justify full days talking to lots of applicants, hundreds if necessary.
It feels like HR "consultants" spend 60% of their budget chasing clients 30% advertising & 10% actually doing the job you want them to do.
Anyway, this guy, or one of the good HR consultants should blow the whistle (I'm exaggerating) on what they actually do. Then, show us how to do it right. Make a video going over job descriptions and point out when/if they're absurd. Show us the CVs that come in. Let us see the pain from the employer side. Why is Joel Spolsky the best resource for this? Where is the industry?
Yet somehow we end up with people who cannot solve fizzbuzz.
That seems like a talent shortage to me.
Remember that those people (most likely) won't get hired. But they will keep fiddling with their resume/CV until they get called. So they'll keep showing up at interviews and be over represented. The talented folk will interview just a few times years apart so they are far less likely to be seen by interviewers.
If you do end up interviewing someone who can't solve fizzbuzz then it is a very good indicator that the hiring process is broken. The usual solution is to keep adding extra requirements in an attempt to weed them out, but that also weeds out the talented people too since they are less likely to have the exact required set of acronyms.
Hiring is hard - simple solutions like adding acronyms doesn't make it easier.
Thus why software engineers often get a degree, buy books, pay for classes, and so forth.
The self-education threshold tends to be even higher at the beginning. Most people have no clue how to get from owning a computer to Hello World, to FizzBuzz, to simple scripts, to a well-designed and documented program.
The real failure is when people turn to university (etc.) to learn a skill, get a "QC Okay" stamp at the end - and then still can't FizzBuzz.
You need shorter feedback cycles which focus on finding and correcting errors, not monolithic course grades and monolithic degree pass/fail stickers. You wouldn't expect it to end well if you tried code a major project that way. Why would it work any better as an education plan?
I think the reason my first instinct is to say we aren't good at self education yet is that we can see so much potential. There really is no reason someone couldn't get to bachelor level chemistry, biology, civil engineering or economics on their own. There are all sorts of problems that just go away and let everything go much quicker when you're self educating. People might be able to learn 4 year equivalents in 6 months.Who knows.
Universities solve all sorts of problems in seemingly inefficient ways that we might see being superseded soon. A lot of the things they solve though are genuinely hard problems. Most people in an Econ2003 are not fascinated with Theories & Models of Supply Elasticity in A Recession. They are sort of interested in economics and have a general feeling that its something they should be studying. They might even be reading Why Keynes Matters. But, in a lot of cases they're cranky they have to take this stupid class in the first place. I'm not sure how that problem gets solved outside of a University. Maybe it doesn't need to get solved. Maybe the future is a word where students don't need to get dragged through material they don't want to learn. If it is, I'm excited.
35 year olds are looking back and thinking: "If I was 19 today I would do it like this..." But if you were 19, you'd be a different person, a 19 year old. You'd probably think like one. There are better tools than econ2003 out there a lot of the time. But they don't work for everyone all of the time. I think we have to accept some clunky systems that sort of get the job done.
If you could tear into existing houses to look at how they're built, and if building practice houses were cheap and easy, building houses would be more like building programs.
The feedback cycle is great with DrRacket. And I don't think that's the only beginning-programmer learning environment.
Or is it because people learn early on in school that there is "no other way"?
I recently met with a banker to discuss a mortgage. We talked about what I did and discussed my education. I proudly stated that I was self-taught. When we opened up the financials, she almost fell out of her chair in amazement that someone could make that much without a degree and proceeded to call me a genius.
I'm not a genius. In fact, I ended up being self-taught because I wasn't smart enough to enter into college in the first place; rejected from every single one I applied to. Most people think like the aforementioned banker though, with the idea that only a super genius can learn without a teacher. The result is that most people aren't even willing to try to learn on their own.
So what happens is you apply filters to screen out people. One method is to filter out colleges, GPA, lack of work experience, underqualification, overqualification, or anything that isn't legally protected to get to a workable candidate pool. Another method is to only hire people you know, or people you know people you know. Still another is to build barriers (Civil Service exams, grammar tests, math test).
The problem is that if you are an unfortunate soul who doesn't get through the filter (ie. 2.9 GPA, state school, etc), doesn't operate in you social circle, or doesn't know about or cannot get through the barriers, you're screwed.
Which is why I am making 17/hr and no benefits (no health/dental, no paid time off at all). Also probably why I spent a year looking for any job at all before I landed this one.
Now I've "made it" from some people's POV. Some of the companies who wouldn't give me the time of day a decade ago would hire me in a minute now.
Well, not to be self critical, but I don't see myself ever being a rockstar. I'll be lucky if I ever hit 60k+... Sadly even that isn't much here in the Seattle area.
no scholarships anyway, plenty of student loans. Too many. I was 26 when I started college, and while my parents always told me they'd help if I went to college, all I got was co-signed loans. I'm 35 now.
The tech industry, like many other industries, uses simple filters (such as work experience or a college degree) to pick the number of people they have time to interview. The skills required to be a talented programmer, and the skills required to get and keep a job (or earn a living programming without a job) are not equivalent.
If there are people who can't solve fizzbuzz that are getting programming jobs, what do they do at work?
I can solve fizzbuzz easily, but I haven't ever built an application that I would consider useful. I've solved puzzles like fizzbuzz and completed lots of programming assignments (mostly involving stuff at the command line) and I feel like I know nothing when it comes to actually building something significant. I feel like it would be impossible for me to get an entry-level programming job right now, but from the sound of it, maybe not.
The good news: They cause the programming messes which you'll eventually get hired to clean up, while they're off somewhere else making another mess for you.
> I can solve fizzbuzz easily, but I haven't ever built an application that I would consider useful.
The bad news: All you're ever do is clean up those frauds' messes. Anyone can build a system with 100k lines of Java code (incl comments). But only people like you can come along after it's up and running and make it work, so that's all you're ever be doing. Unfortunately, the employers will expect you to carry a cellphone around and solve those problems at 3:00am. It's cheaper to pay you 10% extra for wake-up calls than take your time away from other maintenance clean-ups in the daytime.
Much of the programming work out there is little more than connecting libraries together into an easy to use package. I've worked with some people that I'm not sure could pass the fizzbuzz test, but they were still really good at what they could do and provided value to the organization that way.
Those people probably aren't going to be hired by Google to optimize their search algorithms, but software development is many-faceted. You don't always need someone with those skills to still create something of value.
This is just one example, but it's a very accurate description of all of those people who can't solve fizzbuzz and yet still manage to get jobs.
Somebody who can't write fizzbuzz clearly does not have the fundamental CS background needed to do any sort of nontrivial programming. It takes most people years to get this background, usually in a university setting. You can't replace that with on-the-job training!
I'm not disagreeing with his assessment so much as questioning the value to the typical employer. In aggregate it sounds like the right solution, but individually I'm not so sure.
What would it look like if we had a talent shortage instead of a skills gab? How would that effect our expectations?
So why have this debate?