Is developer compensation becoming bimodal?
danluu.com
danluu.com
I see bimodal grade distributions all the time. The more technical a subject, the more bimodal the grades.
In fluff subjects like software engineering where grading relates to essay writing and group projects, grade distribution tends to be gaussian. OTOH in technical subjects where I grade by automated test suits, basically students fail almost all tests or pass almost all tests.
These grade distributions have been constant, regardless of university, regardless of who teaches the course.
There really is a sharp threshold that separates those who get programming from those who don't. And those who get programming really are a lot more productive than those who don't get it. Moreover, once you get it, learning further parts of CS (e.g. new algorithms, new programming languages, new OSes etc) is much easier then if you don't get it, and learning new things makes you even more powerful. The mastery of doing great things is joyful and makes you want to learn more. The frustration of failure drives you away from the subject.
I find it plausible that grade distributions turn into similar income distributions later in life.
Most visibly, there's a wild disagreement about whether we have too many programmers, or not enough. Big tech companies consistently say that they struggle to find programmers, while contrarians at places like The Atlantic love writing pieces about how we're education way more programmers than we hire each year, and the bubble is going to burst.
The ultra-cynical take is that companies are trying to drive a crash to drop salaries. It fits with the wage-fixing collusion, but doesn't really explain things like paying massive referral bonuses for new hires.
The more interesting take is that it's about this bimodal distribution. "A degree in computer science" is a pretty amorphous thing, and thinkpiece writers who assume that every CS program produces employable CS-job-seekers aren't going to get decent data.
So I think the explanation might be that CS isn't harder than EE or chemical engineering, but rather less prescriptive. There's a huge range of programs producing "CS degrees", and jobs titled "software engineering", and they're not really describing the same things.
Wordpress management? You can hire a Jr PHP developer and be fine. They don't teach PHP in school.
Need someone to manage your non e-commerce website? Web Developer. Again, not something they seem to teach CS majors but the title could say Web Developer or Front End Engineer
When I took a glance at the job market, most jobs didn't really need anyone who studied Boolean algebra, discrete math, how digital and analog interfaces work, big O notation etc etc
With the advent of companies like Weebly, Shopify and others you don't need to have an engineer with backend experience(which most CS teach) so you end up hiring a "developer" but the same title exists at Google and they want people who understand computer science.
So we're left with this fractured market where it's not clear from job posting to job posting what is actually wanted.
I've ended up going to University to get a degree because I was being screened out of job applications before my experience counted for anything.
I really didn't want to sit through a CS degree either learning stuff I know already or stuff I know won't be much use in industry.
So I chose a tangential discipline and am enjoying it thoroughly, being a bridge between Operations and IT provides real value to an organisation.
(not speaking to parent poster, but instead generally) Were you a foolish humanities student when you got your bachelors? Worse, did you take it seriously and actually learn something? Great! Now study a technical discipline and blend away. IT is increasing the depth breadth and profitability of these blends daily.
Yes :\
> Worse, did you take it seriously and actually learn something?
Yes :(
> Great! Now study a technical discipline and blend away.
This is a much better perspective than my usual one. Thanks!
Ironically, plenty of tech departments hire guys who are skilled first rather than having some intrinsic interest in the area they program for. Believe me, some old school companies will hire a CS grad who couldn't spell supply chain over you in a heart beat.
Maybe it's different outside the bay area, but it almost never comes up in interviews much about my passion/prior work experience for _____ they build. Reminds me of a guy who went to work for Tesla expecting a bunch of people pumped to expand green energy only to find guys who couldn't care less: they were hired on technical acumen first, enthusiasm for environmentalism last.
I am building direct industry experience rather than filling GitHub.
Let's seperate tech companies with an e-commerce side and straight up traditional vendors leveraging the internet to increase sales. Backend engineers are critical in the former and very useful mainly to those who have specific needs in ecommerce(many vendors don't even have a clue where to even start). Usually they just outsource the whole project to a third party web dev/design firm or some I.T. guy in-house.
It's worth noting, many older business folks are truly clueless about ecommerce....I tell every client to start with ebay or amazon or etsy but they insist a pot of gold awaits when their website goes live. THey'll need some type of web related worker(design, developer, etc.).
Generally, the degree is supposed to indicate some sort of sufficiency with development. Probably universities are dumbing down requirements for $$$.
I 100% believe this is true. When I was in college it was pretty staggering to see my fellow classmates receive passing grades and get shoveled through the programs despite never grasping the basic fundamentals of CS. These were people who, at the end of CS 101, still couldn't tell you the difference between a string and an int, who after CS 202 _still_ couldn't tell you the difference between a string and an int, and so on and so on. Yet happily through the system they continued.
I eventually became part of the lowly drop-out club (I found attending college later in life to be a maddening experience of pointless busy work, rather than a challenging mind-expanding one). However, those people who fumbled around randomly swapping out types until things compile are now CS degree holders.
It seems true even for the higher tier degrees too. It seems even a masters degree isn't a good indicator. In the past year alone I've watched several guys with masters enter and then promptly leave our startup due to having just absolutely no idea how to write software. :(
I went to University of Texas, and managed to do really well on all the tests and projects without learning how to code. But that wasn't because anything was easy. There were a lot of very tough math, and logic classes that some of my class mates who had been working on open source projects since they were 16 did terribly at. It's not easier skills, it's just different skills.
99% of software development challenges are how do you write/maintain large projects without getting totally crushed by the complexity. This is a skill that no one tries to teach, and is also very hard to teach. Similar to being a good writer, it is very subjective, and CS professors are very uncomfortable grading subjectively. It's also harder to create homework for students than just building out toy projects.
Just for the record, I don't approve of this. I'm all for standards, glad they exist, but I think some UC schools are pretty callous in how they treat students. I admire those who get through, but there are plenty of people who would have made wonderful contributions if they'd had just a bit more understanding and breathing room. I think Berkeley wastes people because they know there will always be another 10 lined up to take someone's place.
Can't say I love privates in every way, but really, it's a good thing to try to work with someone who is new to college and struggling rather than kicking them straight to the curb.
At the end of freshman year, everyone who wanted to major in CS had to apply to gain entrance into the CS degree program.
If you got a C in weed-out calculus, you were in troubled academic standing, and you would have to retake MATH 1910 until you got the B-, otherwise you wouldn't get accepted into the CS major.
Other majors had similar, and often less-stringent, degree requirements.
Perhaps ironically, don't academic types feel they are enlightened by their education? So requiring a degree for doing the same job one has done for several decades, an exclusionary act; seems to me to be at odds with their open, enlightened views.
I was contacted yesterday by a recruiter for a startup. He said, "you have over two decades of experience doing exactly what we need but our founders are graduates of <fancy place 1> and <fancy place 2> and I think they probably will require someone with a degree.".
I thanked him, I couldn't even remember applying there, I guess he just wanted to reach out and let me know how he felt.
Granted, sometimes you want to make the tradeoff - there are some truly toxic people with zero professionalism and beautiful code, after all. It's just obvious to me that I'd rather have better code than someone with a piece of paper from a university.
is this a problem with degrees or the interview process? How did they get the job without ever proving they knew anything about software?
The skills required for writing software only truly come about if set your own project at home and work through it and write it fully.
Because neither CS nor, especially, EE are "coding" degrees.
Now, if you want to code CS (and for certain domains, EE) can help you become a much better coder, but that's not really the central focus of the degree. So they aren't irrelevant as qualifications for coding work. But neither are they, on their own, qualifications for such work.
So a weak coder can get through the program as long as he can pass the exams.
Teaching group work for programming is great. Among other things, it gets lots of side benefits like promoting source control practice and distribution of code tasks. There just needs to be something that consists of "sit down alone and code".
Unfortunately this seems to be increasingly foiled by an active market in solutions. I've even seen people hire freelancers online to do their programming assignments for them.
The short answer seems to be: because they're allowed to.
The longer answer has to do with the "$$$" part. Fundamentally, universities aren't in the business of educating people; they exist to sell credentials. Which has some thematic overlap with "educating people", but is still a step and a half removed. And with the long-term transmogrification of universities from "institutions" to profit centers, the inevitable rush toward mediocrity (and widening of the gap between perceived value of said credentials, and their actual value) results.
I'd apply this to the other end of your argument too. The reason there's wild disagreement, i.e. "too many programmers, or not enough" is that they're talking about very different things.
There is no linear scale between "can't code" and "great programmer". Anyone smart enough to be a great programmer should understand very well that no system is that simple; especially one involving people.
On the personality side, you have pioneers, early adopters, people who are comfortable being in the wild, out of their depth... and you have town planners, who like to optimise systems they understand already... and in the middle settlers, who are best when taking innovations and promoting them to a wider audience. In a large software organisation you need ALL THREE types, because they all fulfil important functions.
There are similar differences in terms of learning style, ambition, network, experience, confidence, bias, and luck.
Putting people into buckets like this is ill-advised.
I know plenty of people who somehow manage to make it all the way through an undergrad degree without ever really getting programming. They then managed to get a low-skill job at a low-caliber employer, where they produce bad code, poorly. But because even bad employers need code these days, they manage to maintain a job in programming despite never really understanding it on a fundamental level. Unfortunately, in such an environment it can be hard to ever improve since you rarely have competent coworkers (and the ones you do have quickly leave).
It might just be a matter of time, but only if you frame it that some people get it really quickly and others take forever. Ultimately, I think programming performance correlates very highly with IQ. Otherwise I really don't see any coherent explanation for why I should be able to out-program someone who started programming before I was born.
Of course, some companies see IT in a more strategic light so software development is robust and they do look for talented developers. A mid-sized financial company, I was employed at 12 years ago, wanted custom finance packages. At one time, Fidelity had a separate business unit that was IT R&D: I'm not sure if it still exists. Nowadays I believe they are the minority.
It's the task-switching and firefighting elements of that position which tend to dominate, and which I've found increasingly untenable (at least to my own personality) with time. I need the long, clear timeblocks in which I can actually think.
(I also caution them that some likes and dislikes won't be known until they've been in the field a few years.)
I spent too many years being frustrated by this lack of understanding and outright denial. After all, we're in IT, don't we all want to produce really great software to help people?
Recently I had to admit to myself that the answer to the above question is "No". Often a timely good solution beats out a future great solution in the minds of people who thrive in in-house IT. They accept good enough and have no qualms about a vendor providing it.
[EDIT: spelling correction]
http://blog.mathed.net/2011/07/rysk-erlwangers-bennys-concep...
"The problem with this place? Everyone with get-up-and-go has already got up and gone."
But becoming a really good programmer requires putting in a lot of time doing programming, and a lot of students don't put in that time.
Anecdata: My high school got access to a computer (dialup modem). I essentially taught myself programming and then took the official class to teach me programming. Aced it, obviously. My younger sister saw how much I enjoyed programming so she took the class and struggled tremendously. I tutored her... I recall a problem where she had to do an operation repeatedly, an obvious (to me) application of a "for" loop. She struggled with why one problem pattern required a "for" loop and one pattern required an "if" statement.
My sister is very smart and was a straight "A" student in things that she could memorize, graduated from college summa cum laude (IIRC). She became a very good elementary school teacher. Myself, I was very much not an "A" student, especially in things that required me to memorize facts, but I "got" programming instantly.
More anecdata: I am now mentoring FIRST Robotics teams. I continue to see a dichotomy in aptitude for programming... two years ago I walked a student through a program for controlling a robot. She got pretty excited and interrupted my explanations and said "wait, let me think this through"... and she (verbally) worked out the logic of a complex "if" statement. She took over programming that year, is now in college pursuing a Computer Science major, and loving every minute of it.
Still more anecdata: Last year and this year I have a student that loves computers and intends to pursue it as a carrier, but he isn't a "natural." I spent a huge amount of time last year coaching him, but he still struggles to understand what pattern he is looking at and why e.g. he needs a "for" loop to solve the problem.
I could give a lot more anecdata, but I've worked with Robotics students that can program e.g. move sequences once I coached them through the details and I've worked with Robotics students that took off and created complex programs with nothing more than a simple introduction to constants, variables, loops, and conditional statements.
I've always been slow. Never did all that well in classes. When I was on a FIRST Robotics team I was phased out by the genius programmer that was already there and barely saw any code. I never really had a problem with for loops or if statements. But never really instantly got the more complex programming concepts, either. My father was a programmer so I was exposed to a lot of the things earlier, maybe that's why I missed the not getting for loops stage. I shouldn't be a programmer if many posts in this thread are to be believed. My father shouldn't be, either.
Worst of all, my programming understanding has went through several key developments in a very jagged fashion. For loops and if statements just didn't give enough to push me over the edge. And it wasn't just programming, but the general theme was that sometimes I would just not get some concept, or miss a simple concept, and after that, I would get stuck, and I could not get unstuck without some unusual event like getting the right help from the right source at the right time. One of my most important degrees of understanding did not develop until I took a certain class in the second-to-last semester of college.
After a while, it seems that enough things clicked all at once, and the problem went away. I don't get stuck anymore, I always know where to go. But that was supposed to happen earlier, so much earlier, but it just didn't.
While this was all happening I was definitely the kid who doesn't get it in the eyes of others. Maybe there's some teacher or mentor out there right now writing a blog post or a comment somewhere else about how they tried, they really tried, but I didn't get it.
And, yet, leaving for another industry would have easily been the worst decision of my life.
I found what personally helped me to overcome the insight bridge/gap was I had to read several different books to find the right analogy that helped achieve the "insight".
I am curious what percentage can make the jump as I did. Clearly there are certain "epiphanies" to be had. I almost immediately understood "for" loops, but took several years to get pointers and polymorphism each. I know of people who get some or all of these concepts instantly.
There is clearly the appearance of bimodality here, even in just my experience with just how I learned things.
For example, I became a software entrepreneur about five years ago making money from my own projects. Dealing with a lot of business related "work", I actually discovered I also really like law, in particular tax law.
A friend of mine was a pretty good lawyer (hung up his hat to do more entrepreneurial stuff) and I occasionally ask him to look over contracts I've drafted. He said some of the contracts I put together are better than what some of his colleagues put together. I've also defended myself in a few tax disputes with legal arguments, and always won. If I knew more about it before, I think I would've genuinely enjoyed being a lawyer.
If you enjoy something, it's not that hard to become really good at something. If you don't, it is extremely hard to become better than the guy who loves what he does.
I started programming as a kid because I wanted to make games. It was fun. The problem was that I didn't get the more formal stuff until college, and it made me a much better programmer. But I could also see how boring the data structures class would be to someone with no experience because they really didn't have insight into how applicable some of the concepts could be.
I have always advocated for creating games (and other useful things) to teach programming. Most if not all the major concepts can be applied to games. Why anyone would use the fibonacci sequence to teach recursion is beyond me - it's a stupid solution to a stupid problem. Let's talk about board games and minimax search. Yeah, you have to build a lot of code before that comes into play but you'll learn a hell of a lot more and have way more fun doing it.
Doing simple games like 2D scorched earth really brings home basic vector math and physics. Any 80's arcade game with a thrust button allows you to apply that stuff.
Any kind of 3d graphics goes right along with linear algebra - a topic that is not required by all CS programs even though matrix operations run 24/7 on supercomputers.
Text processing. chat bots anyone?
I used to have an example that used trees but it escapes me right now. Chess doesn't really count because you don't store the tree. We can go back to 3d graphics of course - photon mapping, kd-trees, various BVH structures.
If you start with data structures and algorithms, peoples eyes will glaze over. If you start with simple things that are somewhat interesting you'll get people interested and then you can progress them slowly to more advanced topics by introducing problems they'll want to solve.
And yet, I will use Fibonacci as introductory example tomorrow when I teach "Intro to computational complexity" this week. The great advantage of Fibonacci over just about anything else is that it is so short, so simple, that everybody can immediately understand it. There is no preparation needed. Just about anybody who can breath, can understand Fibonacci.
Despite this simplicity, Fibonacci is so rich: You can use it to illustrate: Recursion, exponential complexity, going from exponential to linear complexity by memoisation. Relationship between loops and recursion. Tail calls. Stack space used by compilers, the limitations of compilers that do not do proper tail call optimisation,generating functions, recurrences, solving recurrences.
Despite this simplicity, Fibonacci is so rich: You can use it to illustrate: Recursion, exponential complexity, going from exponential to linear complexity by memoisation. Relationship between loops and recursion. Tail calls. Stack space used by compilers, the limitations of compilers that do not do proper tail call optimisation,generating functions, recurrences, solving recurrences.
I agree with all you said too ;-)
I would say "Intro to computational complexity" is a more advanced course and the students should already be familiar with recursion from experience prior to learning to analyze time complexity ;-)
IMHO Fibonacci is still a poor example because the most obvious (to me) implementation has always been a loop. Pointing out how a recursive version can be simplified to a loop seems silly, and so does making it more efficient with memoization. But as a first example, sure I suppose. Then you drop the bomb on them and show how it can be done in O(log(n)) by using fast matrix exponentiation.
I start with the recursive algorithm because it follows directly from the definition F(n+2) = F(n) + F(n+1). I also think there's a big schism in programmers: between those that think recursively, and those that are of a more iterative bend. I'm in the former camp, probably owing to the fact that my first programming language was Scheme.
And that would be me ;-)
When you're a programmer, you understand that the processor is dumb and has to be guided through absolutely everything. If you don't factor in the corner cases, your program is going to screw up somehow.
Legal drafting is the same thing, just replace the processor with a judge and the programming language with English. If, while writing a contract, you precisely define everything and cover all the ins and outs of what can and cannot happen and what should and should not happen in the event that any or all of the above likely or unlikely events shall happen during the lifetime of the contract. Then if you ever need to get the contract enforced by the judge, you can clearly point out exactly how the opposing party already agreed to resolve the situation in some way.
The real reason why you need to hire lawyers has more to do with making sure that the contract you draft is enforceable (considering current law and legal precedent), or else risk having the entire contract thrown out later by the judge. AKA legal system faulting.
So then the question is: why do you enjoy something? Are we born that way, or is it something we do? (I don't know what the answer is)
Edit: also, it is interesting to replace "programmer" with "math professor". Can anybody become a good math professor if they enjoy doing it? If not, what is the difference (assuming it is true for programmers).
None of my friends (or parents for that matter) understood because they were mostly jocks with a few artists types mixed in. But, my friends never cared as long as they could get me out of the house to play whatever sport was in season.
To circle back around, I had a natural inclination with people like my grandfather encouraging it without really knowing.
It's similar to the old saw about growth vs fixed mindsets.
I often describe programming as "failing 99 times and succeeding the 100th time, and counting that as success". There are a lot of people who are not wired and acculturated to that sort of "success".
That said, I don't (obviously via the growth mindset) think it's a fixed quality, it's more of a learned and acquired routine.
If we keep struggling with it, we will hate it, even if we thought we would like it at first.
We could also begin to enjoy an activity if we see ourselves progressing in it. When you see your improvements, your brain probably releases dopamine (or another one of those addiction chemicals) and that makes us want to do it more (to taste that sweet taste of victory/progress).
When I think of somebody who enjoys programing, they usually have a goal or task to compel them. Just solving random CS questions and math is pretty boring to the majority of folks.
It's not fair to call people that find programming difficult lazy. You can work harder and longer, but it only pays off up to a certain point.
There are some tasks which require more intelligence, and some which are easier for more people to do. And thankfully. there's more that can be done to make the former more like the latter.
An assembler class where the high end spent 2-3 hours and come in with 3-5 pages of code vs. the low end that spent 50x as long had 100+ pages of code that did not quite work. At first glance the difference was if you looked up how the math coprocessor worked, but more generally how much you tried to brute force the problem vs. look for a cleaner solution.
That's the kind of thinking that really works. Because you can look up well known probelms, but you need to start thinking in terms of trade offs instead of going with the first idea.
That's not to say there's not a difference between all possible solutions and the people trying to find them. Some will be able to zip together the objectively most efficient solution right from the start. These are the true "superstars." People for whom doing something once is as good as doing it a million times (ie, they don't forget things). These folks are exceedingly rare and the rest of us will have to settle with kowing enough to know when we need a better way.
If they want to double X, they are happy to use X + X, 2 * X, or X << 2 and map them all to the same place. So, if they suddenly can't use * because the CPU does not support it they are happy to use the other 2. And somehow this is the same skill where someone hmm database is to slow, let's do X.
It's probably a learnable skill, but it's just not directly part of CS classes. Someone can learn X XOR 1 is the same as X MOD 2, it's another to use XOR when they can't recall the MOD symbol.
For a non programming example, you can use the handle of a shovel as a long stick. This should be more or less obvious when looking at a shovel, but I have seen people ignore shovels when looking for a stick to do something.
If everyone (roughly) either fails programming, or aces it, then the working professionals are the ones who passed AND excelled.
There is an amazing bit though: there are the ones that you classify as "surely worthless", but then you see they can indeed get some jobs done, so a non-technical manager or HR-person can easily confuse one of those that "can sometimes program computers to do useful stuff or keep things running" vs someone who can do "software engineering".
Oh, and then there's the infuriating third category of those extreeemly smart (IQ through the roof + wealth of knowledge) but extreeeemly unproductive (like even manifesting "negative productivity" and dragging a team down or an entire project into the ground, the "-10x programmer").
People are... complex :)
On larger teams, you want some commonality with your code. You want to be able to look at code written by others and at least have common style, strategy, and idioms. Engineering style devs tend to follow this nicely and it all works fairly well in a team dynamic. Whereas, scientist developers are often looking for new ways to do everything. When they see things done in a common and consistent way, they tend to look for unique solutions and tend to do more of "research" style development.
Don't get me wrong, both styles have their benefits. But on a typical largish development team, the scientist are often a more negatively-impacting developer to the overall productivity of the team.
The really scary thing happens when these scientist type developers become architects. And then you end up with what is often called an "architecture astronaut".
In general, this seems to be a problem that arises when smart, capable people (who are short on common sense and teamwork) become so valuable that they get to call shots no one else can accommodate.
Imagine Mel being on a team of 15 people: http://www.catb.org/jargon/html/story-of-mel.html
People who don't get this are really the worst to work with.
John X leaves for a more interesting project, team A can't make modifications to the current over-engineered system so they need do a rewrite of a few key components that incurs a huge delay.
And yes, it was not John X's fault. It was the manager's who assigned it to the wrong team and project, and the team leader's that they didn't have working code review process to be able to give JX feedback early to "write code easier to maintain by a less experienced team even if it's maybe less efficient and takes him a bit longer".
So you're right in insinuating that category-three people don't really drag projects down: it happens when they are assigned to the wrong place and when you have teams with broken processes, so objectively speaking, bad management is actually what's dragging things down in this case. But isn't "bad management" close to a pleonasm anyway?
I've worked with people in the past who know just enough to hack together a front end on top of a simple database, but who would completely fall apart when presented with anything more complex than that. These are the sort of people who when asked to build an internationalised website "solve" the problem by copying an entire PHP application into directories called "english" and "german" and then proceed to change the text in the German version.
I think this is a big chunk of explaining how bad programming goes, too. It's not "too incompetent to build a thing", it's "incompetent enough that everything runs on voodoo and evil".
However, it is very easy to cheat your way through college and obtain good grades. My assessed coursework regularly shows up on rentacoder.com and similar. There is an industry out there for writing dissertations. Group work is another mechanism that weak programmers use to avoid getting better: they let the good programmers do all the programming and then do documentation, or UI design, or nothing. In addition, there is a pronounced grade inflation, so even weak students look great on paper.
Not every organisation has the know-how to filter out weak students that look great on paper.
One person I interviewed stood out in my mind for having completed a Master's in CS, was able to classify the problem I posed her as belonging to a certain type and told me how it should be approached. She still couldn't even begin to write the (simple) code to solve it, however.
This person was obviously smart, and also quite obviously had no programming skill.
I have a different one, derived from teaching 1000s of students over 2 decades. the bimodal distributions comes from two sets of people: one set working hard and putting the hours in until the master the subject, the other set being lazy, cheating, and don't put the hours in, so they never achieve mastery. Appearance and substance.
Good test to tell them apart: if the lecturer mistakenly starts to talk about stuff that he already said in the last lecture (i.e. mistakenly doing the last one again), the first group will be happy and silent because there will be less stuff to learn for the test. The second group will tell the lecturer because they want to learn. This is then often mistaken by the first kind of people as trying to please the professor or "siding" with the prof instead of the fellow students. Because they think in a school-mindset.
Given that the people earning the most money aren't necessarily the ones with the most technical ability, why would this be the case?
How is SE a "fluff subject?" Why are they writing essays? When I took SE we had individual programming projects and a group project to write a compiler. Not fluff at all.
Frankly, I'm surprised that your SE class did compilers at all, many schools in CS have their own "operating systems programming"/"low level programming"/"compiler design" sort of class, where the topic is fully fleshed out, rather than just a tiny project.
In my school, SE ended up weeding out quite a few people who couldn't actually program. They were fine at math and "theory," but when it came down to actually programming, they produced garbage which only eventually worked through trial and error.
For most other classes, grading was based entirely on test cases so they could still pass with their frankenstein programs. SE was the only course which required the development of a large application and where grading was substantially based on actually looking at the code.
For the record, there were 0 essays in my SE class and lots of large, in-depth projects.
Once you get up to the actual SE electives, they're all about the formalization of software and how it can be represented. These classes are usually avoided by students as well, since students opt for fun (from the student's pov) classes like robotics programming, compiler design, web development, crypto, etc, which only makes the SE classes seem like more "fluff".
In general I only recall writing one simple essay and it was, indeed, for our completely fluff project planning class, which was almost entirely about the instructors homegrown, mostly bullshit agile-like system.
"Nothing I learned as a toddler is anything I do now that I'm an adult"
I am not really buying that this is some kind of a reflection of a natural or deterministic phenomenon.
It's been retracted, but it's the only case I've ever seen where I found the retraction unconvincing. The retraction effectively says "After this paper came out, I made a lot of wild claims about it that the data didn't support. Therefore ignore the paper, even though the results replicated successfully."
Why is Cravath raising salaries while 85% of legal grads are taking jobs making half or less of its old salary scale? Because it has a hiring floor. It won't hire lawyers that aren't at least one standard deviation, if not more, from the mean.[2] Their demand is high--each lawyer generates on average $1.3 million in revenue--and supply is limited to the 10-15% of the market that meets the hiring filter.
I suspect the same is true in the tech industry. Google, Facebook, etc. don't hire candidates who can "do the job." Like in law, there is this idea that it's important not just to have competent programmers, but programmers who are smarter than your competitors' programmers. These firms limit their pool of hires to those who, by their metrics, are one or even two standard deviations away from the mean.[3]
Meanwhile, everyone else is willing to hire the median programmer. They can do the job, and there isn't the same idea in that segment that it's worth paying much more to have people who can not only do the job, but do it faster/better than your competition.
[1] How this group of highly profitable firms continues to exist despite market competition is outside the scope of this post.
[2] Cravath measures that as a function of law school rank and class rank. No comment on the validity of this model.
[3] Again, no comment on whether going to CMU and acing interview puzzles makes you a top programmer. What matters is that these firms think it does.
The web-scale software segment is at a unique point in time where it is still in an "arms race" mode of growth for the best employees between its competitors AND making tremendous profits.
1) $100k or less: backoffice programmers where software itself is not the product sold. Also known as enterprisey/LOB/CRUD developers working outside Silicon Valley. (E.g. programmer working on mortgage servicing software for a bank in Kansas earning $80k salary.)
2) $150k or greater: programmers for a "tech" company in Silicon Valley. (e.g. the programmers at Apple/Facebook/Google earning $150k+)
If you combine those 2 groups nationwide, you'd end up with 2 humps in your graph.
https://www.wolframalpha.com/input/?i=$80000+salary+Kansas+C...
Even if you assume that all your expenses are linearly multiplied (hint: Amazon costs the same no matter where you live), your savings are a lot more afterwards. If you were living on $40k/yr in Kansas City, you could move to SF and suddenly be saving $80k/yr.
Would you really rather have $600k in Kansas City than $1 million in SF?
You can buy a 3BR, 2,000 square foot in Overland Park, a great school district, for $200-250k. You'll be about a 15-20 minute drive from your work downtown. What does a 3BR, 1,700-2,000 square foot house run you within 15-20 minutes of downtown Mountain View, in a good school district? It looks like $1.5 million+. That's the difference between a $7,200 per month mortgage and a $1,200 per month mortgage.[1]
So housing alone almost completely wipes out your extra income. Then you have other costs that scale with cost of living: house cleaning, after-school child care, etc. You'll pay more for gas, you'll pay almost double for a cocktail, etc.
Obviously, once you're up to $1 million per year, your're better off in San Francisco. But even in SF few programmers are earning that much. $300k is a solid household income in that area, and in that range you're not better off, materially, than you would be in Kansas City.
[1] A family making $300k in the Bay Area is getting close to not even being able to qualify for a mortgage big enough to buy a house close to work.
I guess it depends on ownership v. rent. Over the long term, housing is a forced savings account.
Even 20 years out, that $7,200 per month is going to be worth a lot of money. Sure, you paid $1.7M in mortgage payments, plus property tax and maintenance. But you also have a place that probably kept pace with inflation and at best, doubled in value. If value climbed at a modest (for SF) 4% per annum, that house would be worth $3.8M in 20 years.
So, in 20 years, you're looking at an additional $2MM (3.8M - 1.7M) increase in network by living in SF. This is assuming your compensation does not include stocks/options, which are rare in the midwest, but very common in SF.
Edit: for the record I don't live in and have never been to Kansas City.
This statement is farcical. You do realize that the median wage in SF is less than $100k. How do you think those people are living?
Have you actually lived in SF or NYC? You're totally out of touch with the actual costs.
Yes, housing is expensive. But you can still easily get a solid apartment for $3k/m. Add in another $2k/m for food (high!) and that's still only $60k a year. You're still left with $10k more than the KC developer even started with.
Unlike you, I'm actually using real numbers and the reality on the ground. I made $150k/year in NYC and managed to save almost $100k/year.
Who does your taxes? Your take-home in NYC on a $150k/year salary is going to be like $90k. Spend $5k/month on food and rent, and you're saving like $20-30k/year.
What does the same apartment cost elsewhere though? Cost of living calculations are not for calculating how little you can possibly spend in a given location, they are for comparing the same standard of living in various places.
It sounds like you are willing to sacrifice your standard of living to make more money, which is fine, but not comparable to the parent's calculations.
Most of them are grandfathered in via rent control. Some immigrant groups give preferential treatment to people coming from the old country, but if you are on HN, you can't access those networks, and you might be too fussy anyway.
Your income after taxes in NYC would be about $100K (assuming Single filing status, no dependents, etc). That's without paying for literally anything, including rent, utilities, food, transportation, entertainment, internet, insurance, etc. Can you clarify how you managed to save so much?
Oh great thanks
Second, even that million+ condo only cost me a third of my salary, including property tax and HoA after tax breaks and shit. Literally everything else is essentially fixed cost (eg: while labor for renovations is a bit more expensive, the bulk of the cost is in the materials, which are shipped from out of state in most cases). Cars aren't any more expensive, etc.
So when you're borderline, big cities (I'm on the east coast, but same applies) are totally not worth it. You'd be living paycheck to paycheck. But once you reach a threshold, it's just better.
Now there's remote work that messes up with all that math, obviously.
Even if my property was to lose 50% of its value tomorrow, its still better than renting, or getting an expensive car, or whatever. And in the best case, it will have a hell of a return.
Clearly there are other cost and quality of life tradeoffs to consider, but the above gives you a pretty good baseline to work off.
Housing will swallow everything in any real apples-to-apples comparison. But if you can accept that you'll be living in a much worse apartment, then the COL differences aren't as extreme as they're generally stated to be.
As I said elsewhere you need to make that after-tax housing cost comparison. Aside from a few other potential factors like private schools, most of the other purely cost deltas are going to be relatively modest.
To be fair, it's a lot worse than that. I live in a nice, spacious, modern loft in the middle of an urban area. We're not talking about a big, suburban house. Just a nice apartment. I'm looking at apartments in the high-COL city that resemble my current apartment's entryway in size and in conditions I wouldn't even consider here.
*editted
In terms of raw salary, I made $10k less, but my money went infinitely further in the South. I wasn't hurting for money in CA, but I had to be much smarter about my financial choices towards the end of the month. In the South, I always has leftover money at the salary. I mean, that 740 sqft apartment in CA for $1200 really sucked compared to that 2 BR house I was renting for $850 in the South.
What escalates in expensive areas is really just housing and other costs related to physical space, like parking and transit. As he said, Amazon costs the same everywhere. So do your cell phone and computer. Utilities, food, gas, clothing, medical, all of those really don't vary all that much. They might swing by 50% between the cheapest and most expensive areas in the US, but that's nowhere near multipliers like 3x that people try to claim from just the housing data point.
After tax.
Of course, you also have the option of downsizing into a smaller apartment. The amenities in a large city make it much easier to have a small apartment (for example, in NYC I drop off my laundry instead of washing it at home or hop around different coffee shops to work with a change of scenery). My quality of life is definitely higher in a small NYC apartment than a large Vermont house.
>you're much better off making $150k in SF than $80k in Kansas City.
Don't forget state income tax and tax bracket. Also don't forget that some things like student loan interest aren't deductible above $80k. And don't forget that to get the mortgage interest deduction you have to actually own a house (easy in Kansas city on $80k, not in SF on $150k). The list goes on (price to get your kids into a decent school, etc) once you really start to dig into it.
SF is great if you don't mind rooming up with people or living in a tiny studio. To raise a family though... it's not so cut and dry.
I bought my house when I was making about 60k. My last local job paid 220K, working for a company that is now being bought by Bayer, so I have seen the difference between 80k and 150k. 80k in a cheaper place is far better, especially if you are renting.
As far as dropping off your laundry, then you also have to consider that you are spending more money per load of laundry than I do by using the washing machine.
Now, what is true is that cost of living calculations are not linear: A simple multiplication doesn't really capture the differences between making 30k, 60k, 80k and 150k in the same location: There is a point after which cost of living doesn't matter: In St Louis, for instance, I'd argue that anything more than 70K or so is just flat, past tax rate differentials, because you are talking luxuries that are about the same everywhere. That line, however, is way past 150k in San Francisco, because housing cots are nuts.
I meant to type 3K/mo (which is where my 36K adjustment came from). And yes, I've actually looked up housing in the Yay when I was considering a prospect there. Honestly, at the tiime I was looking for 2 bedrooms so my 3K adjustment may actually be under because now I need 3 bedrooms.
>Of course, you also have the option of downsizing into a smaller apartment.
No I don't. I have a wife and 2 children who if I can afford to give them their own room, I will.
That being said, I understand my calculations do not apply to everyone because we are not all at the same places in our lives (and may never be).
Fair enough, I didn't mean you specifically. Once you have a family the advantages of a low-cost locale definitely become greater.
Of course, the advantage of working in SF/NYC is that by the time I'm ready to have kids I'll have enough money saved up to buy a house in a low-cost area in cash.
That doesn't follow from the argument. If the COL adjustment means that the salary differential is not enough to cover the difference, you will be able to save more in the low cost location as well.
Of course all of those arguments are reductive as COL is not that easy to calculate and there may be other financial advantages to being local to the higher cost area (more diversity of work, less risk at job loss, or higher chance for a lottery style payout for instance).
That's assuming you are spending all of your income.
If you're saving money in KC (on $80k/yr) you should also be able save twice as much on $150k/yr—even if you assume a linear cost multiplier for all your expenses.
Problem is, they aren't. Income taxes are regressive, so your percentage income to taxes goes up as you get paid more. Everything else should scale linearly.
> (hint: Amazon costs the same no matter where you live)
I spend maybe 3% of my annual salary on Amazon and similar websites. It's a non-factor.
> If you were living on $40k/yr in Kansas City, you could move to SF and suddenly be saving $80k/yr.
Only if your expenses go up by the same scaling factor as your salary. As soon as they get out-of-whack even a bit in favor of expenses the math starts to break down. It also breaks down if you are saving a small-ish portion of your salary to begin with.
Because the staff delivering that labor also experiences an X multiplier in shelter costs (and for lower-wage workers, the multiplier is highly regressive and frequently much higher for them to obtain an equivalent quality of life), the labor input cost is increased. Unless you DIY everything, including not eating out (restaurants have very high labor input costs), fixing your own vehicles, do your own plumbing/electrical/HVAC, do your own dry cleaning/dentistry/vision care, etc., you'll see commensurately higher costs for any material goods and services with high proportion labor input costs.
For busy single professionals, two-income couples, or families, it is not realistic to even mitigate these costs. A big chunk will unavoidably come out in property taxes for everyone, paying for public schooling: all those administrative staff, operations staff and teachers, wanting to live as close-in as they can afford, paying those linearly-increased dirt costs, will be expressed in your property tax bill.
For the vast majority of people not connected with the real estate industry, they are far better off commoditizing their shelter cost complement, see [1] for this complements concept. This means vigorously opposing any increase of the "value" of their homes, even when selling. In the US, you will never, ever make back that "increased value" in the average time most US homeowners hold a mortgage (7 years), if you honestly accounted for all the actual costs you bear in all consumed goods and services for increased real estate prices. That increased value only benefits those who have a high churn rate on their properties.
[1] http://www.joelonsoftware.com/articles/StrategyLetterV.html
No, because not only do we have a progressive federal tax system, but state/local taxes in San Francisco are higher than they are in Kansas City.
Just running the numbers for a simple case, say you are single and renting. You earn $80k in Kansas City. Based on http://dor.mo.gov/forms/MO-1040%20Fillable%20Calculating_201... it looks like $2100 is not taxed as a personal exemption and $5000 is not taxed if you pay at least that much in federal taxes (which we will; see below). $6300 is standard deduction. So deductions are $13,400, taxable income is $66,600. Per the table on page 25 of http://dor.mo.gov/forms/MO-1040%20Instructions_2015.pdf that gives us $3771 in MO tax. Note, not enough to make it worth itemizing federal taxes if you rent.
Federal taxes for 2015 would give you a $4000 personal exemption and $6300 standard deduction, for taxable income of $69,700. That's gives a federal tax of $13218.
Total taxes are $16,989, for after-tax income of $63,011.
OK, let's look at San Francisco. Salary is $150k. Looking at https://www.ftb.ca.gov/forms/2015_California_Tax_Rates_and_E... the standard deduction for state taxes is $4,044 (less than Missouri, which is ridiculous given cost of living). Personal exemption is $109 (really?). Taxable income is $145,847. State tax is $11040. That's enough to make it worthwhile to itemize federal deductions. I didn't bother to look into the AMT rules for CA; this is meant to be a simple estimate. By definition the AMT can only make things worse here.
Federal taxes again have a $4000 personal exemption, our $11040 itemized deduction, taxable income of $134,960. Federal tax is $30860.
Total taxes are $41900, for after-tax income of $108,100.
OK, so say you were living on $40k in expenses in Kansas city, making $80k pre-tax, saving $23k per year. You move to San Francisco, start making $150k pre-tax, expenses go to $75k (if you accept the 1.87x cost of living difference). You are now saving $33k per year. More, true, but nothing even close to $80k/year.
Note, by the way, that the cost of living difference is largely driven by housing costs in this case....
> Would you really rather have $600k in Kansas City than $1 million in SF?
It really depends on my lifestyle. Still for a single filer, the Federal marginal tax rate on that extra $400k is 39.6%. The CA marginal tax rate is 12.3%. Medicare marginal rate is 2.35%. So overall marginal tax rate is 54.25%. CA taxes on that first $600k would be about $60k while MO taxes would be about $35k. So the extra $400k is actually about $160k post-tax.
This is the part where lifestyle matters: housing in SF can eat up a large chunk of that if you let it... If you're single, SF is probably a win in the 150k vs 80k case. If you have a family, chances are it's not.
Or, to use another analogy, it's like being the wealthiest man in a developing nation. There's no amount of money that can buy you reliable infrastructure in a place that fundamentally lacks it.
Oh, and this is just the monthly cost at the apartment building, not for destination costs which are separate.
Almost every city in America besides NYC is built under the assumption of car ownership and, for that reason, the vast majority of people have cars. NYC is the only city in the US where the majority of people go without one, because the infrastructure is in place to support it.
I think you've actually got this backwards. People in NYC would prefer to own a car, just like everybody else in America. The difference is that in NYC it's a lot more expensive and difficult (traffic, parking, etc). That, coupled with the presence of a strong transit system, results in low rates of car ownership.
In Kansas City, to take your example, there actually is decent bus transit [0]. But owning a car is also dirt-cheap and far more convenient than owning one in NYC. So people own cars. I live and work directly on a train line in St. Louis, but I still own a car, because, why not? Cost of ownership is very low -- parking is included at my apartment (and free and easy basically everywhere else) -- and it gives me more options. But I definitely don't need it.
In summary: 1) You absolutely can get around by transit in many (most?) largish Midwestern cities; 2) People own cars anyway because it's cheap and convenient; 3) People choose transit not when it's merely convenient, but when it's more convenient than car ownership.
[0] http://ridekc.org/assets/uploads/documents/SystemMap.pdf
I'm not trying to argue over the merits of living in a city vs a suburb. The parent stated that cars cost the same in KC and SF and I'm providing a realistic alternative -- they do not because of parking and ancillary costs. At this point it is obvious we need to move out of the city and it is down to an optimization problem of how much space we want vs how many hours a week i can see my child (e.g., I can live in NJ, but i wont be back home in time to see kids 4+ days out of the week.) I imagine the calculus is the same in SF, but I cannot say firsthand.
What a weird remark. Have you considered that there might be people who don't fetishize cars like you do?
I very specifically hate driving. I specifically choose which cities I live in so I can avoid driving.
I've tried transport in most cities outside of NYC. It's really not on the level of NYC. Yes, there is a bus system but it's hardly comparable to a subway system where I can get anywhere in the city throughout the night with minimal waits.
I feel like you might have this loaded as a sort of generic thing you say to people, but it doesn't apply here. I'm talking about the tradeoffs people make in general. Calling me a car fetishist is a non sequitur.
What I'm actually saying, though, is far more benign, which is that just as many people would own a car in NYC as in Kansas City if it were equally convenient and inexpensive [0]. People (in general) don't choose public transit merely because it's convenient. They choose transit when it's more convenient than car ownership.
The flip side of this is that high car ownership rates aren't necessarily evidence of nonexistent or inadequate transit. Where car ownership is cheap and convenient, people almost universally choose to own a car (even if other options exist).
[0] Well, clearly not just as many. I don't like driving, either, and New York is attractive to me, too, because it enables that preference. But, still, consider that nearly half of all New Yorkers do own a car, despite how wildly inconvenient that is. Consider also that even in cities like Detroit and St. Louis something like 25% of people are carless, so there's some baseline level of poverty (even in very inexpensive cities) that prevents ownership. All of which is to say that a 50% ownership rate in NYC actually strikes me as pretty high (and as evidence, again, that people really will put up with a lot to keep driving).
150k is much less after taxes.
For one, I'd be paying about half as much in income taxes, even if I was earning the same salary in both places.
For two, I'd be living in a midwestern state with more reasonable laws and regulations, as opposed to California.
Of course, I'd rather make $100,000 and live in Montana, or Alaska, or the northern band of New England, than in either of these places...
My job offers in Minneapolis and Seattle were similar from a COL adjusted perspective (70k/yr in Minneapolis vs. 130k/yr in Seattle). However, after two years in Seattle my cost of living has stayed flat while my income has grown by about 20%.
Every single penny of that 20% is going into investments, and that makes a massive difference to my expected net worth in 10 years. And I can take that net worth and move back to Minnesota if I want (there are certainly universes in which that's an attractive option).
edit: I do acknowledge that life situations in which COL adjustments eat up or exceed 100% of the income difference between Seattle/Minneapolis could exist, but they are an edge case and certainly not the rule.
I've worked for consulting companies, product companies, and right now I work for a sort-of back-office organization. The best I've been able to do, despite several years of experience, good references, inside connections, a graduate degree, and being pretty (I think, anyway) personable is...75k. And I don't know anyone doing much better unless they moved to SV or NYC.
My long-term plan is to see if somehow I can find the time to find a side-project or contribute to something open source, so my ability is out there and highly visible to anyone considering me, but that is going to be very difficult for where I am now. I'd love to make low six figures, it seems difficult to believe even in SV there are new grads making 150k, and it's frustrating to me because I know I perform at the level of people making that much money.
EDIT: In case anyone was curious, new grads hired for development in my area of the US get paid from about 35-45k.
I'm a self taught developer who have roughly 1 year exp. and moved to Tennessee(40th poorest state in the union, ultra low cost of living) for a software gig last year. I'm black, 30 year old male, and have a resume with more job/career hopping than a con-artist.
I'm not really that great at programming(got fired after 6 months!).....first offer(I took it) was low ball....at 55k!! Next job I took over paid me and offered $92k with zero negotiation to lower it: All within one year.
I've worked prior tech jobs offering $25k-40k and they were usually some unholy mash up of lite programming and I.T. help desk/system admin roles.
From talking to companies, the non-sexy locations have to pay up the ass and fly in talent for open source. The .Net guys around me make bank too.
If you have several years of programming experience and can only get $75k, I wonder if you program in VB or some obscure academic language....I usually have to argue with recruiters to lower their pay requests per hour...in the south.
I can't explain the .NET world, but I think what could hurt me with open-source type companies is my lack of a Github. Nothing I've done for work has been public, my personal projects are nothing I'd be willing to share and, quite simply, the very last thing I want to do when I get home at the end of a ten-hour day is program, especially when I have many, many other things that need to be done - around the house, with the family, etc.
Like I said, my plan is to somehow find the time and contribute, so there's something out there, but it's going to be rough and take a while. But if that's what I've gotta do, that's what I've gotta do.
Overall, I think the biggest factor is my unwillingness to move. I do live in a very poor state. I am very confident that if I went elsewhere I could make a lot more. There are maybe a dozen and a half employers here. Generally the rule seems to be the commercial companies pay nothing, and the government contractors pay by what you can negotiate plus years of seniority.
Maybe I should go the recruiter route - I never have. That's one reason I posted, to see what other experiences are. Thank you.
Any tips on what to look for? I've interviewed with a few remote teams and they weren't able to give me anything close to that.
There are companies which value software engineering and those that don't. Eventually all the good developers migrate towards the former (where they are paid well) and the bad developers are stuck in the latter (where they are paid poorly).
I definitely think the bimodal distribution is between firms, not within them. That being said, it's not as simple as geography or sector. There are plenty of remote gigs which will pay 6 figures, and there are plenty of non-tech companies which value software enough to pay $150k+. And there are, amazingly, some "tech" companies who still pay relatively poorly.
Which of these don't have programming jobs at "tech" companies? Seattle (Microsoft and Amazon)? San Francisco isn't technically in the valley... Phoenix (GoDaddy)? Austin (Blizzard, a bunch of non-HQ offices like eBay, Google, Amazon, HP...)? San Antonio (Rackspace)? Armonk (IBM)? Malta, NY (Global Foundries)? Lockport, NY (Yahoo)? Amsterdam (Booking.com)? Houston (cPanel, Practice Insight, AlertLogic)? NYC (Fog Creek, regional offices for Google, Amazon, Facebook, etc)? Raleigh, NC (RedHat)? London (Canonical, Avanti Communications)? Portland (Puppet, some jobs for nVidia, Wacom, Mozilla...)? Boston / Cambridge ( Carbonite, Akamai, LogMeIn, Draft Kings, Wayfair, TripAdvisor ... with offices for Amazon, IBM, Google, Apple, Microsoft, Twitter, PayPal... )? Dallas / Fort Worth and their metro sprawl ( Texas Instruments, AT&T, MetroPCS, Ericsson, Intuit, Match.com, offices of ZTE, US headquarters of Blackberry ...)?
(Of course, that's a gross oversimplification. There are lots of lawyers with, e.g. solid in-house corporate counsel jobs. But the overall "commodity" market for lawyers isn't great these days.)
> this is from about 100 data points, members of the “Hackathon Hackers” Facebook group, in 2015.
What's the point of analyzing data from such narrow and unusual sample?
RE: how to get data about programmers salaries, I'd say try to check job postings, they usually say how much company offers.
In my experience, 150k base pay sounds awfully high
A programmer working at a large internet company may be impacting millions upon millions of people. Building a feature that lets you collect (or save) a penny from a user every month is worth $240K a year when spread out over 2 million users. $120M when spread out over 1 billion users.
That's really my answer to the common question at the end of the post: "I don’t understand this at all and would love to hear a compelling theory for why programming “should” pay more than other similar fields, or why it should pay as much as fields that have much higher barriers to entry."
The actual scale of the work certainly informs the compensation, like it might for other jobs like journalists for example, but that is only part of the story. If you need developers, you simply gotta pay them salaries the are competitive with what others pay for that particular role.
Using dkopi's example, at a company with 2M users, it's worth hiring a developer for each "penny per user per month" problem. A company with 1B users, it's worth hiring a developer for each "0.002 pennies per user per month" problem.
Or similarly, if you look at developers who work on internal tools that save other developers time. At a startup with 40 employees, each new tools developer must save everyone else two days per year. At a large company with 20 000 developers, each new tools developer must be able to save everyone else 6 minutes per year.
As the scale gets bigger, smaller and smaller problems become worth hiring people for.
Long term Efficiency versus short term gains is the issue.
A company like google can get away with this but not most.
How much impact does a laborer repairing a Dutch dike have? How much of that impact do they earn?
Most times the toll roads also have to compete with "free roads", limiting the amount of money you can charge per ride. http://reasonrail.blogspot.co.il/2011/06/do-toll-roads-make-...
However, there are infinite ways a developer can make something. 1 developer can make design a system that can save/make their company millions that most other developers would miss. The supply side of developers is more like a monopolistically competitive market. Thus, they can extract some of those savings/profits in wages.
It would be interesting to compare revenue or profit per employee for tech company, comparing to law firms and the like.
Another thing is that we believe (ie. The Mythical Man Month) in software, there is a limit of programmers per task before you just can't throw any more body into it anymore. Is this true (or still true), and does this apply to other fields of comparison?
Immigration could likely be a bigger factor than we thought. How long has developer compensation been skyrocketing? The immigration situation to the US has only been getting shittier for the past 5-7 years mostly (although it wasn't flower and pleasant before that, if you wanted to do startup or worked in the US with a job offer, it's several folds easier back then). And seeing that it takes like 5-7 years for a startup to mature, even longer for immigration "market" to catch up with reality (it takes a long time for people to decide or to immigrate in general), it wouldn't be a surprised that compensation is still lopsided for the US.
Apple makes about $2m/employee/year. Goldman Sachs makes about $1.2m. These metrics are easy to get for any public company.
This is important. The effect is that to complete the task you have to effectively scale the team up, you can't scale horizontally, which increases demand on top talent.
It means that if a programmer is (theoretically) 10x more effective than an average programmer he may get much much more than 10x the pay.
How did we end up like this? Is it not a bad thing for the company that employees are demotivated when their pay sucks? I feel it is a very basic thing. To make more profits you need to build better products and sell better. How much can you save on operating costs by paying employees less?
I feel the companies & HR needs to modernize itself. There was a time, you could get away by paying a particular employee less and he may never find out. This is an Information age!! Information freely flows. There are many sites like Glassdoor, Paysa where people can go and find out more about salaries that you are paying to your employees. It is no longer a well kept secret. What is required here is that companies and HR's understand this and make salaries open and relevant to the value produced/added to the company.
Since the early managers probably didn't understand the dynamics they went with what they could do best at their time. I feel this model of negotiating a salary based on previous salary should be deprecated. It should be replaced with a more open model.
It doesn't hurt much to know that the next guy is getting paid more than me, if that guy truly deserves it and produces much better code or is adding more value to the company than me. What hurts more is that to know that the company values the other guy more and pays him more just because he is straight out of college or gets lucky at salary negotiation.
I think it is time Developers & Engineers talk more freely about their salary.
The average banker or lawyer is an order of magnitude better at negotiation and valuation than the average developer. It's literally their job. For a finance guy, not optimizing your compensation package is sacrilegious.
Meanwhile we have still have lots of developers who think it's absurd that they'd even be paid $100k and don't want to think about money at all. [0] They drag down compensation for themselves and for others.
Unfortunately it's not simply a matter of information. You can tell people that the market rate for their position is $200k/yr but they'll tell you that's absurd, that they think it's too much, or that they'd rather just focus on code.
Doctors solved this by sharply restricting supply and making it illegal to practice without being part of their cartel.
[0] Seriously, on HN people regularly complain about making too much. Even in this very thread you can find people who are skeptical of high salaries: https://news.ycombinator.com/item?id=12588504
At the same time none of them seemed very enthusiastic at all.
In the world of top-tier law firms the "transparency" actually works against the incoming lawyers. You notice the quote in TFA: "Cravath announced that it would pay first-year associates $180k, and many other firms followed suit"? I see that as an implicit agreement to fix prices among these top law firms. I'm sure they're not foolish enough to actually collude on salaries, but Cravath knows exactly what it's doing when it says to the world "this is what we're paying our employees, sound good?"
I'm in a similar situation, and have had this happen so many times. I explicitely state when starting the process I'm a contractor. I lose wages when I interview, so I want to ensure we're on the same page. It's also an allocation of your companies time, and resources interviewing me. This is my minimum, are you able to meet it. Because between software projects, phone screens, and on sites. That's alot of time sunk into an application, and again your resources interviewing me. I've had so many times, after all the work get to the offer stage and it's 20k to 50k short, after they ensured me they could meet the minimum. I've renegotiated at times, but it's like pulling teeth. One company even tried shaming me, for not putting enough value into the awesome company culture. I'm here because I love your company, but if you don't want me worrying about bills and retirement during working hours then pay me a decent rate.
I just got an offer 10k shy of what I asked. I already took 30k off my current rate, because it was a less populated area. I can cross counter negotiate or come up with other ideas. What got me was that it's based on me being a "junior" in the stack they use. I don't like the inflated use of senior. But a good techie/programmer can move from stack to stack.
If we were more open about rates and what's avaialble. I think it would do more good.
What makes you think that the situation in other fields is any different?
Companies are quite opaque and it's hard to know what you are worth to them, that's why they don't disclose this sort of thing. (and get angry when workers discuss it)
You would do yourself (and the people in your world around you) a whole lot better service if you worked together, rather than worrying about embarrassment.
That sounds like leverage. Did he ask for more? Depends on the company. Lots of small companies can't pay what Google does. Also possible that your friend's expectations aren't realistic.
> How much can you save on operating costs by paying employees less?
In a software business, a lot. Employees are the primary operating cost in many software businesses.
> Why are they not transparent like finance guys, lawyers, doctors etc.
I could be wrong, but I believe most employees in all industries in the US are either asked or implicitly expected to keep their compensation to themselves. I also believe that salary-transparent organizations outside of public institutions (government, universities, etc) are fairly rare. Salary is default private AFAIK, has been for a long time, and has nothing to do with software vs other industries.
Law pay is great on the upper on end and a shit show on the lower end. Many lawyers are self employed for a reason.
Doctor pay IDK much about but given the small pool of applicants, it makes sense to be transparent.
I think that is the point of the article commenting on the bimodal distribution of salaries.
That said, I know bunches who will make over 200 k$ in total liquid comp this year. And before you pooh-pooh the equity part, if you've been at a public company for more than a year, equity's pretty much the same as cash (albeit a slightly unpredictable quantity thereof.)
The numbers for programmers are total compensation, not just salary. The lawyer figures are actually salaries though.
> Programming also doesn’t have a licensing body limiting the number of programers,
> nor is there the same prestige filter where you have to go to a top school to
> get a well paying job.
This is my favorite quote from this article. I went to a great school and even though it wasn't Berkley, Stanford, MIT, or CMU, that qualification has never limited my ability to get great opportunities.Consider tho' that a developer with say Google on their CV has the "prestige" that once would only have been conveyed by a university.
Your degree is largely just a way to break the ice with some companies, hiring manager x went to school y so he knows that you must be as good as him. Simplified greatly obviously (you still have to know your stuff), but networking is hugely important
That you know of.
However, there are reasons for this. It's quite difficult to gain admission to a top law school, but the people who apply tend to come from very low attrition majors like history or literature. Furthermore, attrition rates from elite law schools are vanishingly low - less than one half of one percent. Lastly, interviews in law firms are actually interviews, not a series of oral exams.
You don't need a degree to be a programmer, but it helps. Think about what you had to go through to get that degree. The curriculum is relatively standard and is highly rigorous at all "reputable" schools - and by that, I don't mean elite, I just mean real CS departments. Attrition rates for CS majors is very high. At the graduate level, attrition rates remain quite high - PhD programs have an attrition rate of 35%-50%, depending on the field - and that is true of elite programs. Athough MS attrition rates are lower and I've found less data on them, what I did find suggested about 30% - and keep in mind, you have to make it through a high attrition major to apply.
On to interviews. I actually did go to Berkeley for an MS, though not in CS (I did the MS in IEOR and as a cs-ish math major for undergrad), and maybe that was instrumental in getting an interview at Google, but it sure didn't exempt me from the same technical grilling everyone else goes through! It was about 5 hours of what I considered to be genuinely difficult whiteboard exams. I actually felt OK (not great) about my performance, though it was ultimately a no-hire.
This is why I don't agree that programming has a low barrier of entry, especially if we're going to talk about a bimodal distribution. Where you went to school is less important, but that's because getting through is so difficult - we don't have these vanishingly low attrition rates in our field, even at elite programs. And the interview process is very, very difficult.
Great analysis from this post, and very interesting data, but I think it does miss the mark when discussing why programmers are well paid at the elite level. The claim that "U.S. immigration laws act as a protectionistic barrier to prop up programmer compensation" is indisputably true, but I don't think it explains much - if this is true for programmers in the US, it's just as true for every other field. In fact, it may be the reverse - programming does have the H1B visa, so if anything I'd say programming is subjected to a higher level of international competition for jobs located in the US than other fields that require "current right to live and work in the US".
Ultimately, I think people confuse the absence of formal barriers backed with the force of law with the absence of barriers in general. Considering what I went through to get my degrees (in high attrition rate fields), and the kind of problem solving, math, programming chops, poise under pressure, and presentation ability it takes to get through google-style interviews - you know, I really don't think we face considerably lower barriers to entry than law. Different, more porous in many ways, more fluid. In law, you must (in general) attend a law school, whereas in programming, there are multiple paths toward getting that knowledge and those top jobs. But it's actually not at all easy to break into the elite level of this field. I'd say barriers to entry are actually quite high.
In the middle of a gold rush, how does it happen that people change their plans, and go out and mine the gold, sell the pick-axes etc? Dropping your plans generally sucks. All else being equal, you'd rather not. And you probably know less about the opportunity than the one you're pursuing. Because not everyone is going to drop everything and go mine gold, if the gold mining is profitable, the people who do pursue the opportunity are going to do very well. And that'll continue to be true for a long time — because people just don't respond to these opportunities that efficiently.
As a comparison: in Australia during the mining boom, the salaries available for work in the mining industry compared very favourably to other industries. And yet I knew lots of smart high-school grads starting degrees in fields like chemical engineering, aerospace engineering, computer engineering...Smart kids would eagerly enroll to study fields where there was no industry to speak of in Australia; even though a lot of them weren't planning to move overseas. In the meantime, salaries for mining-related fields were sky high.
My hand-wavey, empathic read on this is that following price signals into a field you don't have a particular affinity for feels somehow wrong. I think smart kids are very vulnerable to this sensation. They feel like simply going into the high-paying field is somehow too "obvious". It's an affront to their sense of individuality. I think the small/large company thing is in part a similar effect.
Being the local subject matter expert on a relevant topic or straddling the management/technical line goes a long way. Look at what happened in the defense industry in the 1990s and tech in the 2000s.
Being able to code well and having domain specific knowledge is more valuable than just being able to be a rock-star. When times get tight companies shed weight (people) and carrying around a splitting maul is a better deal than a sledge and wedge because it even if it's a little less powerful overall.
But what's even more interesting to me is another question the author discusses halfway through the article:
> How is it possible that programmers are paid so well without these other barriers to entry that similarly remunerative fields have?
The author posits three hypotheses: 1) supply of programmers is naturally low, 2) immigration laws keep the supply artificially low, and 3) the overall relative efficiency of American companies create a productivity force multiplier for everyone at the company, including programmers.
I want to introduce a fourth hypothesis, which is that programming skills are highly commoditized, which causes demand for those skills to increase.
If I work for OmniCorp using 100% proprietary OmniCorp technologies, they have no reason to pay me more than the bare minimum because I'm effectively married to them. If I work for OpenCorp on a 100% open-source stack, then the buzzwords listed on my resume prove I can be productive at thousands of other companies, giving them all incentive to compete for me.
So if they leave the company, they probably have to leave town and learn something totally new.
(All those, and more, are the reasons I decided not to go to an on-site interview with them after invited.)
But OmniCorp knows that the developer has to pay rent, and no other company is going to offer them anything but an entry level job, because the only experience they have is OmniCorp this, OmniCorp that.
It may seem far-fetched, but believe me, this discussion is hitting close to home for me. My team is currently moving to a highly customized tech stack that is open-source, but has zero or near-zero adoption outside of the company. It's scary; I've been in software for eight years and I feel like I'm fresh out of college. If you're in software I hope it never happens to you.
I'm mostly playing devil's advocate with my replies. It's generally better to stick with mainstream -- and ideally open source -- tech. But I don't entirely agree that proprietary tech is only beneficial to the company in these scenarios. They are taking risks that the employee can take advantage of. Heck, for me, that proprietary company still contacts me on occasion to see if I'll come back.
I remember doing the climb from the bottom myself: Few places hired new grads, but the ones that did hired pretty much everyone. it only took a few weeks for teams to realize who knew how to program and who didn't: inter team communication quickly became a network of the people that could get things done. Eventually, as people came in and left, the high performers started taking other high performers with them to better companies, where similar sorting happened again, but with a higher floor.
What I have seen instead of big salary differences is that the best firms have better management and treat developers better: Given that outside of consulting, the market has relatively well defined maximums, the good developers congregate in places where the work is more rewarding and doesn't put high tolls on peoples' lives.
In the valley there are companies that get so much more value out of developers that they can pay more, but even that has a ceiling, and when we get to that ceiling, being good companies to work for becomes the next differentiatior.
Plenty of broke ass lawyers running around like Better Call Saul.
But you can order a catalogue from a redistributor, containing every persons income from work and income from capital and taxes payed, for previous year. Would not take much to scan it and analyze.
Salaries listed per Quartile, in SEK. The categories are quite broad. There is a listing per decile but I could not find it right now.
https://docs.google.com/spreadsheets/d/1yPjcXoKuwq8SBngQ2-G9...
http://SCB.se is the source.
The data probably masks those who are self-employed subcontractors and take a lower salary in order to lower taxes at profit time, which should effectivly double or tripple the reported salary.
Ofcourse, it does get a bit difficult to compare this data vs USA, because we have social necessities already payed for by the high tax of the collective workforce, such as health care, pensions, safety, and many other insurances.
So, say average is 42 000sek per month, that gives about 59 000USD per year salary. Which may seem low compared to USA, but behind those 59 000USD, is 31.49% in taxes for things we enjoy.
I believe the salary listed here is pre-tax so the take home pay (for someone living in Stockholm) would be 30 330 Kr/m or $42.5k/yr.
This number excludes social costs; the total cost per month for the employer is just over 55 000 SEK/m.
I have added new statistics at the bottom, including 10th and 90th percentile.
https://docs.google.com/spreadsheets/d/1yPjcXoKuwq8SBngQ2-G9...
> Developer compensation has skyrocketed since the demise
> of the Google et al. wage-suppressing no-hire agreement
Is this true? This seems like a bold claim, given that most of the post is about how little data there is on programmer compensation.This is imo a big part of why high-end salaries have skyrocketed, but the author's reasoning is total "let them eat cake."
It's not that there's a shortage of programmers overall. There are lots of programmers working non-industry jobs for relatively piddly salaries who would leap at the opportunity to double or triple their compensation at a big name tech company - if they were qualified to do so.
The problem is that there's a shortage of people who have the aptitude and skills to work in a big tech company with very high expectations for even their entry-level engineers. I don't doubt that there are intangibles at play: soft skills, "cultural fit" biases, to a lesser extent academic pedigree, but none of that trumps needing to be an actual honest-to-goodness engineer, rather than a "programmer".
Plenty of other pieces (citation needed) have been written about the growing chasm between the two classifications of development jobs - engineers who can create software, vs. programmers who can write code - and I think the salary differences are just an aspect of that.
Or in other words, (good) programmers care a lot more about motivating factors than hygiene factors than other employees.
I have no data to back this up, only a gut feeling.
I think in US it will be same cutting edge skill vs traditional skills.
I work for a large, well-known tech company and they just re-titled all of their front-end engineers to "Software Engineer" (probably to stop creating a pay divide between front-end and back-end engineers). If you have a "Software Engineer" doing basic wordpress stuff, another "Software Engineer" doing PHP/Zend framework stuff, another doing pure JS/React/Angular stuff, and another doing backend services (concurrency/spring boot/API, etc) - the pay scales of all these "Software Engineers" should be different.
I'm surprised it's not trimodal.
Up in Canada, the compensation seems to be more of a normal distribution.
Tier 1: Those who solely re-implement. You can do a lot copying and pasting. It's just not worth as much money.
Tier 2: Those who re-implement while creating anew, typically in specialized areas or occasionally very well over a wide range of tasks.
Note the importance of re-implementation to both job tiers.
Tier 1: Those who solely re-implement. You can do a lot copying and pasting. It's just not worth as much money. Tier 2: Those who re-implement while creating anew, typically in specialized areas or occasionally very well over a wide range of tasks.
Note the importance of re-implementation to both job tiers.