Hacker News new | past | comments | ask | show | jobs | submit login
Is developer compensation becoming bimodal? (danluu.com)
381 points by signa11 on Feb 9, 2018 | hide | past | favorite | 561 comments



One (semi-pedantic) quibble with the article: there absolutely are barriers to entry for programming. Programming is hard! These barriers may not be artificial, but they are real.

To use a non-software example, there are barriers to entry to chip manufacturers and power companies even under anarchy. Fabs are tremendously hard to build. Power plants are extremely hard to build. Building up knowledge and skills about computers is also very hard, especially when our genes don't seem to guide us toward thinking highly logically.

And programming is hard because it requires us to understand a bunch of modular systems and then the systems they're built on, all the way down, and in some cases, all the way up. Then, we have to understand the whole integrated system of the individual modules. Not all programming problems require this level of difficulty, but these problems do exist. I've been on teams where I'm the only one who understands what the OS is doing or the CPU is doing or what the network is doing or why some other distributed component might have stopped working. Most of my teammates in these cases seemed to enjoy programming, but didn't care to become overall experts in computers as a whole.

I once had a top-tier business school grad friend claim that programming really isn't that hard and that we're all whiners. He is a genuinely smart person. Today, he himself is trying to code in JavaScript on the client side. He's a friend so I help him, but the problems he has are junior-level or even entry-level. Suffice it to say, I haven't heard much more about how programmers are "whiners" when we say programming is hard.


If you want to know just how hard programming is, try teaching it to someone.

Programmers have to remember a vast amount of domain knowledge. Consider the basic task of choosing where you are going to store some data, well first you need to know which options exist and there's dozens of them (do you want Postgres, SQLite, Redis, LevelDB, ..?). Then you need to know the strengths and weaknesses of each. And I hope you have been keeping your knowledge up-to-date because the answer in 2018 is very different to the answer in 2008.

The lack of barriers to entry actually makes it harder. There are "law schools" and "med schools" to teach you all the knowledge required to become a lawyer or a doctor. There is no "programming school", every programmer is self-taught. A computer science degree hardly scratches the surface.

While there are specialisms, such as game development or embedded development, most programmers are expected to be generalists. You may find yourself needing to write networking code, and there's a whole bunch of knowledge that goes along with that. Or, many programmers end up having a working knowledge of cryptography.

Sure, almost anybody can learn JavaScript or Python, and write code, but learning a programming language is only 1% of the job.


> There are "law schools" and "med schools" to teach you all the knowledge required to become a lawyer or a doctor.

Programmer now, gained a law degree in a previous life. Know lots of folks who studied medicine.

The idea that med school or law school teach you "all the knowledge required to become a lawyer or a doctor" is laughable and a truly absurd statement. The sheer size of the problem domains these subjects cover alone renders this impossible, and furthermore I'd argue it's pretty insulting to insinuate that Computer Science is somehow more difficult in this regard.

While I can't speak fully for medics, a law degree "hardly scratches the surface" as you put it either.


> While I can't speak fully for medics

Medical school will teach you the basic science and theory and give you basic clinical experience, one still needs to complete a 3 to 7 year residency in the field one wants to practice in. Then there are fellowships that one may want to do if they want to specialize even further.

It's definitely not the case that you learn everything you need to know in school.


I don't think that is what he/she meant. I don't know what your professional software experience has been like, but software is applied and required to some extent in all industries nowadays, and therefore there is a broader scope required. It is also more of a moving target. I'm a contractor providing software engineering services. One contract I might be doing Subsea control systems, the next OpenGL graphics hardware programming sprinkled with Java and Eclipse, the next contract may be embedded assembly language for turbine control systems etc. Law/Medicine maybe moving, but I am fairly certain a doctor or lawyer does not "move as fast". They tend to stay specialised in maybe an area or two. In fact, for a serious medical condition, from a patients point of view, I would be quite alarmed to be seen by a doctor that has not "specialised" in my condition. Ideally, one that does nothing but my condition. I think it is easier for a doctor/lawyer to fall into the trap of becoming specialised in one or two areas alone than a software engineer, simply for the fact that if I did not constantly have to become specialised in a new area, usually for every contract), then I would not be able to pay the bills. So I imagine that is what he/she meant.


Your point is a good one, but to me it confirms the comment you are responding to.

> The idea that med school or law school teach you "all the knowledge required to become a lawyer or a doctor" is laughable and a truly absurd statement. The sheer size of the problem domains these subjects cover alone renders this impossible

You seem to be an example of a programmer that can be good and proficient in many different fields, languages, and scopes. You don't really see that in law or medicine. Doctors can't jump around from orthopedic surgeon to psychiatrist to dermatologist. And it's very uncommon (at least for lawyers under 60 or so) to be both a corporate lawyer and a litigator.

As giobox mentioned, the sheer size of the domains of law and medicine all but require doctors and lawyers to specialize. That's certainly true to some extent with computer science but it doesn't seem to be quite as strong in that field.


I think you misinterpreted me a little. I think the reason that lawyers and doctors cannot "jump around" is not because, for example, a lawyer cannot absorb the information required to be both a good corporate lawyer and a good litigator, due to it being too much. They can. It is that the system that they choose to be in (law/medicine) demands the individual to be certified and formally trained to such an extent that it cripples this kind of professional mobility. This is not true in software. Not because of any other reason other than society is catching up. Unlike the fields of law and medicine, where those fields are growing "linearly" with society. It is also the reason that I do not by law require to be a chartered engineer to perform my job to the full extent.


The (jurisdictions will have their own phrasing) 'demand' placed upon lawyers is that they are competent at the work they're doing.

The magnitude of knowledge needed to push a company to become public or undergo a merger, to litigate a divorce with children in custody, to defend an individual in a murder trial, or to litigate an aboriginal rights claim is substantial and there is very little overlap between them.

The issue isn't the regulatory requirement for competence - it's that the fields of specialization require years to become decent in.


I have limited idea whether its fundamentally barriers in terms of the subject-matter (because I do not know or practice in multiple fields of medicine) or in terms of the social structure (where it is pretty obvious the highly structured/time-based hierarchical regulated fields).

But I will say one of the MAJOR things that I LOVE about programming is its relative lack of artificial and social barriers. In psyche, med, law, science: even if i am good enough to pick something up in 6-12 months, or even if I have already been studying or been experienced in said field (say because I have a family member who has been surreptitiously teaching me or bringing me along on the side), there is an inescapable time, money, and social barrier that is effectively immutable.

I can't REALLY do law/medicine without running them in serial, paying the fixed costs of time/money for both (which almost no one has), and I can't fast-track through either or leap-frog students or peers of lesser ability. And god help you if, half-way through, you then think that something in chem/physics might be interesting and applicable. Or if you have the insight/ability to say: i think i'd learn more over there (well too bad, these are the requirements for the program and this is the course structure and this is what you need to do to get your practicing certificate...and except in exceptional circumstances, that's even if you had someone in a position of authority who would agree with you).

Those barriers have not yet been established effectively in programming. Sure, some people tried earlier to establish things like certification and structure, and we're now starting to see the germination of university degrees in arbitrary specializations, and that force will always be there, but few people take them comparatively seriously. The barriers to entry are low (you could almost always even just pirate some software to get started and install it on relatively cheap generic hardware). And if you want to apply it to different fields, you quickly find the barriers aren't generally from the computing/programming side, but from the social/structural barriers inherent in those fields in our society.

Now to be sure, we get the downside of this too: cranks, frauds, used-car-salesmen, agile coaches, wannabes, fads, marketing, etc.

But they don't stop me learning for my own ends, and if i ignore them they have no effect on what I can learn for myself once I pass the relatively low barrier of stable employment and income and basic hardware. And my knowledge makes me more employable and more attractive.

Whereas there is no way I can participate or do the same with engineering, medicine, or law etc without effectively cancelling my life and/or desires in other fields.

And whereas my knowledge and self-direction make me immediately more employable and desirable NOW and at all times in the future in programming, i have huge sunk, upfront, and opportunity costs for several years to participate formally in each of those other fields.


Yep. Except I would consider what I do as mostly engineering, and what I said above still applies. Subsea oil/gas control systems, gas turbine control systems, etc, but then sometime just desktop applications, eg OpenGL/Java etc. All need software. But all engineering, although I would say the desktop application contracts are less engineering, more programming. But then we would have to start talking about the whether programming is actually engineering so don't want to go there :)


I am about to graduate from law school. I also agree that a law degree "hardly scratches the surface" of law.

That's why in most countries lawyer candidates are required to do mandatory legal internships. And even after becoming a lawyer, you need to gain a lot of experience before you can be trusted to practice law without the supervision of an experienced lawyer.


One of my law professors speculated that you learn about 3% of what you need to be a lawyer in law school. At the time, I thought that was a bit conservative. In hindsight, it seems pretty fair.


Do you have a throwaway email? I'd like to ask you a few questions about transitioning from law to programming. Thanks.


Afraid I don't really have much to say about this - I did a postgrad Computer Science Masters, applied for Software Engineer jobs and started new career immediately following completion of Masters. I've known several law graduates follow this path. If like me you've always had an interest in the field and were a reasonably competent programmer before starting the CS degree this wasn't all that difficult by comparison - I found attaining the CS Masters easier than studying Law if I'm honest.


CS PhD here and worked over a decade. Yesterday, I made a list of over a dozen technical areas in CS I feel inadequate on. I think the issue is not that a CS Masters is easy. It is that CS knowledge is a never ending firehose. When I graduated (2008), most NoSQL systems were not even created. For anyone transitioning from law/medicine to CS, while I welcome you to the field (good for you!! tech is awesome), just be aware that tech gets obsolete very fast. While an older lawyer or doctor may be considered experienced, the newbies right out of school may run laps around you (lots of examples but the creator of Ethereum comes to mind. I know oh so many PhDs who work on distributed systems but it took a Waterloo undergrad student to think out of the box).


Yeah if we're talking about barrier to entry, I can't think of one much greater than the LSAT.


That's an interesting idea. What would you say makes the LSAT difficult?


>furthermore I'd argue it's pretty insulting to insinuate that Computer Science is somehow more difficult in this regard

Why in the world would that be insulting and who is it insulting to? If anything it's a reflection of how immature the industry is and how computer science degrees have minute overlap with software engineering.


> Why in the world would that be insulting and who is it insulting to?

It’s insulting to diminish the legitimate achievements of other people through unjustified comparison, in particular when doing so results in the elevation of the person doing it.

There is no objective criteria by which we can state computer science is a more difficult field than law or medicine. To imply that is therefore offensive, and people are not “immature” just because they react to offensive things by being insulted, even if you believe they shouldn’t feel insulted.


It's insulting to all the people who are doctors/lawyers/any number of other fields where the degree is just the entry point to being able to work in it.


> Programmers have to remember a vast amount of domain knowledge. Consider the basic task of choosing where you are going to store some data, well first you need to know which options exist and there's dozens of them (do you want Postgres, SQLite, Redis, LevelDB, ..?). Then you need to know the strengths and weaknesses of each. And I hope you have been keeping your knowledge up-to-date because the answer in 2018 is very different to the answer in 2008.

I'm pretty sure 90% of us would just look for a Stack Exchange question describing a bunch of popular database platforms and choose whichever looked best after thinking about it for a few minutes, and that outside of extreme circumstances (>terabytes of data, distributed over an actually unreliable network, other exotica) almost any option would work well enough.

Which is to say, programming is complicated but it's not very precise. Compare to mechanical engineering, where if you use the wrong steel your bridge will fall down; or to medicine, where if you prescribe the wrong drug someone might just die. So while there's lots that's useful for a programmer to know, if they don't know it they can get by alright almost all the time, and it's really hard for their managers to tell the difference. (Which is also why we can get away with not having a "programming school" beyond a handful of required courses for a CS degree.) So it's hard for this to seem like a very effective barrier to entry.


> Compare to mechanical engineering, where if you use the wrong steel your bridge will fall down; or to medicine, where if you prescribe the wrong drug someone might just die.

Dereference the wrong pointer and the rocket blows up. Forget a memory barrier and the robot brain gets corrupted memory and sees human life as an impediment to paper clip maximization. Forget to zero out some memory in a goto: cleanup section and suddenly there's a back door in a popular security library leaving machines to the whim of any curious script kiddie.

I know a lot of people aren't working on real time systems or encryption libraries that have the same level of significant consequences as what you're describing, but some are.


For software developers (and in fact, for the general public), the smart play is to rely on real engineers to provide mechanical, electric, or electronic failsafes in their designs.


That seems to have worked well for Intel.


Nowadays the electronics has code in it.


And most mechanical engineers are not necessarily making bridges, they are making adhoc small objects.


> I'm pretty sure 90% of us would just look for a Stack Exchange question

When you're starting from scratch, I think the bigger barrier isn't "where do I store this data", it's "what the hell is data"? Try to explain to a computer illiterate person that the latest Mariah Carey CD is just a really big number and you'll get a glimpse of this. The person who knows they can jump on Stack Exchange is already past the worst part of the learning curve.


> When you're starting from scratch

And other times. I've been working in software for almost two decades. I ran into a particular data problem that I could describe but didn't know the name of (a la wizard of earthsea). So I couldn't search to see how others had tackled this.

Google and blogs and YouTube and stackoverflow have pushed the boundaries of knowledge. You don't need to know exactly how to do something (for many kinds of tasks) but you do need to know what it is called, and how to adapt what you find on the net to your situation.


You haven't seen some of the really generalized questions that come up on stack exchange then. ;-)

That said, it's often a great resource.


> I'm pretty sure 90% of us would just look for a Stack Exchange question describing a bunch of popular database platforms and choose whichever looked best after thinking about it for a few minutes, and that outside of extreme circumstances (>terabytes of data, distributed over an actually unreliable network, other exotica) almost any option would work well enough.

And you're the reason why I have to mop up poor performance because someone decided to use MongoDB for highly-relational data.


Oh, yes[1]. I was arguing why there isn't a knowledge barrier to entry into programming, not why there shouldn't be one. :)

[1] Well, not me in particular! I know the important things and only use SE for looking up trivial details, of course. But maybe not everyone agrees with me which is which...


I'd argue the reverse: that in software, very small errors can have vast consequences, but it's virtually impossible in many cases to tell what those consequences may be or where they'll fall.

The reason is that software systems are at another level of complexity.

The Space Shuttle is often given as an example of the most complex machine every built, with more than 2.5 million parts. The Airbus A380 has about 4 million parts.

https://www.quora.com/Whats-the-most-complex-machine-ever-bu...

The Linux Kernel, not necessarily the most complex software ever written, has nearly 10 million lines of executable code, over 12 million with comments, scattered over 36,000+ files.

https://www.quora.com/How-many-lines-of-code-are-in-the-Linu...

Google's back-end cluster and services are frequently given as the most complex software existing.

The full LoC in Debian GNU/Linux has been estimated as 324 million as of 2009. This is the stable archive, which includes somewhere between about 30k to 70k individual software packages (I'd have to do some digging to see what the count was for the stable release as of 2009).

https://unix.stackexchange.com/questions/111281/exploding-am...


>I'm pretty sure 90% of us would just look for a Stack Exchange question describing a bunch of popular database platforms and choose whichever looked best after thinking about it for a few minutes

I used to do that but I got burned more than a few times.

These days I do a bunch of research - sometimes days, including tracking down obscure blog posts about obscure issues, reading issue trackers and spiking code. Can feel like a waste to begin with but it's saved me from some very dark places.

I would not trust stack exchange or stack overflow for a technology recommendation ever.


I don't think the problem with programming is that it is complex or has wast domain knowledge, it is true, but this is not a unique problem.

I think the biggest barrier in programming is just how abstract and alien it is, cognitive load can be enormous. Try to teach engineer about materials or steel liquation or semiconductors - it might be abstract or complex but at least it is dealing with real life physical processes.

With programming it is whole different galaxy. Like explaining pointer arithmetic to someone who just started learning CS. Or recursion, or asking someone to rotate tree in their head - there is a huge chance it will simply BSOD them. Programming is much more close to theoretical physics or maths than engineering.


It's a good thought, but I agree with madengr. Other disciplines are faced with abstract challenges, and even those in plain sight are very difficult to reason about. Magnetic fields. Rotational moment of inertia. RMoI--still so confusing. Even simple to explain, easy to observe concepts can still be abstract and difficult to understand.


Have you taken a course in semiconductors? Just as much abstraction there, and EE in general, as CS.


Programmers have to remember a vast amount of domain knowledge.

It's even more elementary than that, I think. I've encountered lots of intelligent people who lack any sort of diagnostics skills - absolutely essential for being a programmer.

Things like.. the landline is broken. Well, then, get another phone, plug it in and see if it works. If it does, then it's the phone we need to look at, if it doesn't, we need to move further up the line.

It frequently boggles my mind how many people struggle with simple elimination, experimentation, and narrowing down to resolve problems, and I'm not sure such people could become developers without this ability.


That's learnable. For example, military forces teach enlisted people with varying levels of skills how diagnose systems, and it works.


I disagree. It may be possible to teach a monkey to perform X. But can you teach a monkey to teach another monkey to perform X? EDIT: no implied insult there.


You can disagree but you would be wrong. I have personally taught people to diagnose and repair systems. Many others have as well.

There are are also formalized methods of teaching how diagnostics. And training on how to teach it. So yes, you can teach a monkey how to teach another monkey to do X.


Not if X is problem solving, which is what I was getting at really. For example, you could teach a monkey to teach X to another monkey, but what if the other monkey did not consume the learned material. Then the teacher monkey would not be able to adapt to still achieve the goal of teaching the student monkey. What you say works, assuming what is being taught is simple, and there is no feedback from the monkey that is being taught to teacher monkey.

That feedback loop from student to teacher, is similar to a problem that you tried to fix, and it still doesn't work. You then need to adapt, just as the teacher monkey would need to when the student monkey did not understand what was being taught. How you adapt to the input from that feedback can not be taught, because the particular feedback that one will receive in the future cannot be predicated (for complex troubleshooting etc).

Sorry for bad monkey examples. :)


This is so true. In my job, it's the problem solving ability that is valued. Not the innate knowledge of tools etc that we use to solve the problems, however that is, off course, required also.


I have an issue with that: law school and medical school certainly do not teach you how to practice law or medicine. Computer science sounds akin to both: you get theoretical underpinnings (many of which are outdated or will be unneeded for your specialty) but all your actual learning is on the job.


Agreed. I've done both law and programming. Law school categorically does not even try to teach aspiring lawyers how to practice. The classic curriculum is designed to teach you how to "think like a lawyer." There are exceptions here and there, but if you want practical skills, you have to deliberately look for the handful of seminars and clinics that teach them.

Between learning to program and learning to practice law, once you get past your chosen programming language's syntax and a few core CS concepts - learning to program is much easier.


Learning how to do X can be very easy if you accept an arbitrary level of competence as enough to claim "I know how to X".

I have the feeling that a lot of people can believe they have learned to program while all what they did is to go past their chosen programming language syntax and grasped a few core CS concepts.

That's quite a low barrier to entry, but if that's what people mean when they hear the word "programming", then I'd argue that Software Engineering would be a better name for the field we're here comparing with practising law.


Don't let the electrical and hardware engineers hear you say that, that'll just open the old debate about whether software engineering is really engineering at all. (Kidding.)


In the UK the practical skills are taught postgraduate in a Legal Practice Course.


To become a good programmer you need either a gift (which some young people have) or experience -- lots of experience. A CS education gives you a good foundation, but you still need to learn so much more: software engineering practices, lots and lots of details, a variety of programming languages and their huge libraries, mistakes mistakes mistakes (so you can learn the patterns, so you can spot them in code reviews, so you can avoid making them again, ...), full-stack-ness (so you can scale, so you can foresee problems before they strike), ...


To be honest I'm not really sure how it works in the US, but in the UK if a doctor has passed their exams to become a registrar, they are by that time reasonably competent to practice their chosen speciality (except for surgeons). Obviously being a doctor requires a lot of practical on-the-job training but the point is the whole process is managed top-down.

Programming education is totally ad-hoc and you can be a great programmer even with a degree in agriculture.


> Consider the basic task of choosing where you are going to store some data

Yes, do consider.

In many, many cases the appropriate answer is "whatever stack you're familiar with".

In maybe 10% of cases the answer will boil down to technical requirements and you'll need familiarity with "Postgres, SQLite, Redis, LevelDB, ..."

And that's where the bimodal distribution comes from.

> There are "law schools" and "med schools" to teach you all the knowledge required to become a lawyer or a doctor. There is no "programming school", every programmer is self-taught

I don't know a lot about the law.

But if you think that MDs are not "self-taught" in the same way bootcamp graduates or CS graduates are "self-taught", you should talk to an MD some time.


> If you want to know just how hard programming is, try teaching it to someone.

> The lack of barriers to entry actually makes it harder. There are "law schools" and "med schools" to teach you all the knowledge required to become a lawyer or a doctor. There is no "programming school", every programmer is self-taught. A computer science degree hardly scratches the surface.

+1024

I have said quite a few times that the best CS program is one where you learn how to learn without being spoon fed. In fact, I know a couple great programmers who were _not_ CS (one studied econ; the other, physics), and they similarly learned how to learn without being spoon fed.


Yep. I've talked before that we are doing a huge disservice by not focusing on the sequential logic of programming, which is the first barrier to overcome. Also, we reinforce memorization over problem solving in maths throughout school. Hearing students say, "When are we ever going to use this?", was not uncommon when I was in school 15+ years ago. And as far as I can tell, the push for standardized curriculum and testing has only made this worse.

https://news.ycombinator.com/item?id=15164948#15168430

https://news.ycombinator.com/item?id=12589473#12592521


I've been teaching my partner bits and pieces of programming. Sequential logic, and control flow were some one of the easier topics.


I call this the essential learning skill and am totally bummed that our public education not only does not cultivate it but actively deters it.


I run a Computer Science academy, and that’s quite literally our goal.


Which is why I question the usefulness of a computer science program/degree for the vast majority of dev positions. Learning how to learn would I imagine be the best use of such a degree; but then one with at least half a brain, given a few years in the field, starts to pick that up independently.

I chose to avoid computer science degrees because in those days, in the late 90's, it was pretty much 80-90% math classes. I don't regret getting a degree in a totally different discipline: it turns out learning philosophy, history, linguistics, writing, etc. etc. was far useful to me as a person (and, arguably, a worker) than some boring math classes ever would have been.

Have comp sci curriculums improved in that time? Given that job interviews these days last 4-8 hours, require group approval and whiteboarding in front of an audience, I would argue, NO. Obviously, no one trusts the degree.


The number of hours of hands-on programming in a degree (probably only a couple of hundred a year) are too few for a graduate to learn anything but the basics.

Most professional programmers would put in more hours of hands on programming in a months work.


The funny thing to me is that you implicitly mention something else in this point. The languages/databases you specify are all popular in web/mobile/end user based applications, and almost exclusively never used in enterprise where C#/java/Sql/Oracle still make the vast majority of tech stacks.

You could add another layer to what you are saying as do you want to build apps? platforms? or enterprise line of business software? if so you need to know entirely different stacks. Then you need to know what is important to being "good" at the chosen stack.

This is just a long winded way of agreeing with you, there are vast amounts of knowledge required to "make it". Most importantly you cant ever feel like you know enough and stop trying to learn. I took about 12 months off from stretching myself and now I feel 3 years behind...


> If you want to know just how hard programming is, try teaching it to someone.

Continuing with the example from the article: law and medicine are also hard. Try teaching those to the same set of people.

> Programmers have to remember a vast amount of domain knowledge.

Programmers are not at all unique in their need to understand significant domain knowledge. Essentially every knowledge-based field, including those with licensing barriers to entry, also have this requirement (and arguably to a greater extent).

> And I hope you have been keeping your knowledge up-to-date because the answer in 2018 is very different to the answer in 2008.

Lawyers and doctors must also keep current with their field and the industry in general. If anything, the degree to which they must keep up with their respective fields seems to be a difference of degree when compared to software developers, not of category.

I don’t think any of this difficulty is the reason why programming enjoys high salaries, because (circling back to the article’s thesis), it isn’t distinct from other fields with higher barriers to entry in that respect.


> law and medicine

Law and medicine also trend towards bimodal compensation.

There is an enourmous earnings difference between the top echelon of lawyers and all the other lawyers.

Same thing for specialist surgeons.


> Programmers have to remember a vast amount of domain knowledge. Consider the basic task of choosing where you are going to store some data, well first you need to know which options exist and there's dozens of them (do you want Postgres, SQLite, Redis, LevelDB, ..?). Then you need to know the strengths and weaknesses of each. And I hope you have been keeping your knowledge up-to-date because the answer in 2018 is very different to the answer in 2008.

And yet there are a lot of examples of companies that got it wrong, picked objectively-shitty options, and still succeeded massively and then had the money to pour into cleaning up the resulting messes.

There's countless options, but they don't seem to matter as much as people believe. As much as it would be nice to think Lisp is a superweapon and it's easy to replicate Paul Graham's stories, that's not what's happening in the market.

There's an interesting split the OP discusses that seems to largely be a B2C vs B2B thing. With a few exceptions at the high end, many of the winners in both of these spaces aren't determined by "purely better technology" but by other things. However, in the B2B space, battles can be won much more easily on the strength of salespeople and business strategy, whereas in the consumer space, it requires more skilled implementation of ideas - great UX doesn't require technically great programming, but it requires competent execution of the original idea, in a way that a medical records system sold to a hospital administration board doesn't.


> and still succeeded massively and then had the money to pour into cleaning up the resulting messes.

And they typically have to pay enormous sums of money to hire the talent required to clean up.

This is large part helps create the bimodal compensation model.


if you want to create a CRUD app, then you probably don't need the best and latest library.

There are plenty of apps out there today which support millions of users but didn't choose the most optimal database, wasn't well architected, and has mountains of sloppy technical debt.


> Programmers have to remember a vast amount of domain knowledge

And that is only half the job. You also have to practice, a lot.

I think "Teach Yourself Programming in Ten Years" is about right http://norvig.com/21-days.html

You can learn academic computer science, or know a lot of trivia about programming and computers, but without years of dedicated practice it doesn't translate into actual productivity.


In Electrical Engineering, which the article often mentions as a counterexample, the 10-year veteran is not nearly as likely to drop out of the profession. Programming has a constant bleed-out of people who learning how to program, became veterans, and then were dismayed to discover that they were going to have to do it all over again, because the libraries, frameworks, languages, etc. were different. Some just do it, but some move into management or out of the field entirely. This happens in engineering as well, but not nearly as often, and it means there is a more nearly constant shortage, I think.


In my experience, while there is a new library/framework/language every day, most of them aren't introducing brand new concepts that the developer has to worry about. A lot of the patterns they implement are also common in other language/frameworks. Nothing against React, but every other day someone posts a new concept that is very similar to a pattern that has existed for years.

Edit: I should note, on the last sentence, this may be done by a veteran developer who knows better but is trying to introduce the concept in a new light. It could also just be a developer figuring out a common pattern on their own. I've heard the actor model pattern was developed by several different people at the same time who were unaware of each others work. I'm not saying it's a bad thing.


React is interesting. It takes something that we started out with, immediate-mode style UI programming, and brings it to something we have now, retained-mode UI (i.e. the DOM). History in our field loops...a lot.


I always wonder if some of the veteran drop-out in programming is that improvement (in my lone experience anyway) is couple with/ consists of realizing what else could go wrong. Every step up the ladder of experience affords a better view of how things can fail and that can be hard to deal with. I feel like I keep getting slower as I get older but not simply because of age; some of it is the motivation to sit down and write something that is probably going to come back and bite me in the ass (possibly through no fault of my own) later on down the line. A lifetime of programming means a whole horde of problems to think about at night.


I was just trying to point this out! Though in a more pedagogic setting: I have a very smart coworker who's been out of school for ~1.5 years. He works quickly and tends to create bugs he has to fix later. I got him to contrast his style against our coworker in his 50s who is slower to merge, but the rarely has to fix a bug!


I think the EE drop out rate may be slower, but from what I see electrical engineers tend to migrate at some point into something that isn't exactly EE. Typically that means systems engineering, management, software, or product management.


You are right. Now thinking about that It seems to me generic Software world seems more comparable to interior designing or fancy restaurants where patrons keep spending because tastes change faster than requirements.


I don't know. Is it having to learn new things, or is it having to do the same things over and over, with the names changed?

Once you get the principles, there isn't much difference in languages, etc. But if you are a senior developer after 5 years, or 3 years, there isn't much room to go up.


I'm not sure they all have a choice, sure you can learn new frameworks or technologies but without real experience it's difficult to demonstrate competence in them. How many employers would hire a Cobol programmer who learnt Angular in their spare time?


There is one point where the article asks why programmers seem to get compensated well compared to other professions.

> The second most common comment that I hear is that, of course programmers are well paid, software companies are worth so much, which makes it inevitable. But there’s nothing inevitable about workers actually being well compensated because a company is profitable. If we look at this list of the most profitable companies per employee, we see companies that pay well, like Alphabet (Google) and Facebook, but we also see hardware companies like Qualcomm, Cisco, TSMC (and arguably ARM now that they’ve been acquired by SoftBank) that don’t even pay as well software companies that don’t turn a profit, and that the compensation between the software companies that are listed isn’t very strongly related to their profit per employee.

The relevant barriers to entry perhaps aren't to programming-the-skill, but programming-the-business-activity. In other words, the barriers to entering business of profiting from programming. And that makes software engineers higher priced commodity because there is higher competition from other companies, but also self-starts.

Hardware companies don't have pay their engineers as well because those engineers have a harder time leaving for other businesses. There are fewer capitalized companies, and self-capitalizing a chip HW business is very difficult. (and arguably the many smaller company options in that industry are rapidly consolidating - so employer options are going down rapidly).

So in the end software is paid well perhaps because the software profession deals with business areas which yield high value return on the labor, _and_ the low capital business barriers to those activites supports higher competition for software labor.


This is absolutely true. I've claimed for years that programming is easy and it's not hard to teach to children, but I started when I was six. For older people, the field is hard to break into due to a cognitive barrier I've seen. "I don't know how to program and computers are mysterious-- therefore I don't know how to learn how to program."

The biggest impediment to much larger participation in the top tiers of software engineering is imposter syndrome and the elitism of the industry when faced with a trainable candidate. Every startup aims to hire someone who can "hit the ground running" and who doesn't need an assist from anyone.

Also, the largest tech companies have chosen to use LeetCode-like problems almost solely to assess candidates, which are unlike most tasks done on the job most days. These tend to select for people who trained specifically for the interview and for coding competitions, such as ACM.


It's not just old people. When I was a kid, the Commodore 64 was the absolute state of the art in consumer computer hardware. What I was able to produce in C64 Basic after a few months of trying was, at least to a first order of approximation, comparable to the sorts of things that were considered professional software back then: the machine just couldn't do that much, so writing a simple game with an amorphous blob that was controlled by the joystick and shot at other amorphous blobs was not _that_ far off from the sorts of games you could buy; I felt like I was doing "real" programming. Compare that to the situation today. Modern games have gigabytes of 3D rendered playfields. Even iphone games like jungle run are in 3D. But what a beginner can produce after a few months of practice still probably looks like something that might have been state-of-the-art on a C64 back in 1986 (in fact, may be harder, because the development tools are so fragmented these days). What felt like a real accomplishment to me when I was 12 feels like failure to my kids - once they realize what a hurdle they have to climb, they wonder if their efforts might be better spent elsewhere.


Have you tried creating a game in a modern engine such as Unity3d? If you try going through a few tutorials, and browse through the asset store, you might be surprised.

While the gameplay in your first game may still be simple, it can look great because the engine does most of the work. It absolutely won't look like something from a C64 (unless you want it to).


This absolutely. As someone who started later (in college) I was unbelievably dismayed at the amount of effort it took to output something that was nowhere near comparable to the software I used daily and took for granted.


I think we're kindred spirits in a way. I don't find programming terribly vexing, either (I started when I was 12), but trying to teach others has given me more appreciation for how difficult it is to grok something so rigidly logical.

That said, I have no patience for the "smartest boy" syndrome or the, as you say, "LeetCode-like problems" given in interviews.

I suspect that these interviews do "work" in the sense that they successfully filter those who know what they're doing (albeit rejecting numerous ones who do as well), but they run the risk of encouraging elitism, rockstars and "smartest boy" cultures. (I also think programmers are uniquely bad a hiring because when we can't reduce a problem to something solvable by an algorithm, we tend to try to find the cheapest heuristic.)


When I taught AP CS, I got around that rigidly logical issue by performing a very simple exercise on the first day of class to build an appreciation for algorithms.

The students were asked to write out instructions to build a paper airplane. One by one, I would follow their directions as loosely as possible and build lopsided airplanes. The lesson did a reasonably good job of explaining how computers handled algorithms and code.


Part of that might be because you started so early, but part of it might just be some innate properties of how you think. Is your brain good at programming because you started so young, or did you start so young because your brain is good at programming?


I think there are two interesting correlaries:

1) programming seems to be one of the only "hard" professions that pays well (compared to math researchers, hard science researchers, or even things like some social work -- that's really hard in entirely different ways). Of course I'm probably missing some hard stuff that pays well

2) programming seems to be the "hardest" of the high paying jobs mentioned. Once you get them, banking, consulting and law jobs actually have a lot of mindless or not super challenging work


I guess the grass is always greener. I'm a lawyer who lurks here occasionally. Most legal jobs involve 60+ hours of work, being on call 24/7, and there is pretty much no legal equivalent of a 10Xer because almost all work is billed by the hour. There is no way to make a contract that's 10x as valuable as your competitor's, and certainly no legal equivalent of scaling to the degree of Google or Facebook.

Law is incredibly challenging work - I know more than one lawyer who complains that they should have went into programming to work 9-5 at Google between free massages and endless burritos or whatever other perks you guys have. It's certainly not work you can casually do while watching youtube - especially considered there's such a thing as legal malpractice a.k.a. get something less than perfect and you could personally be on the hook for your license. Also, it seems like career longevity in software engineering is a lot higher than in law - most lawyers for the top firms (the Google/Facebook equivalents in pay) wash out by the 4th year and practically all do by the 8th.

I always wondered if I made a mistake picking law over software engineering. I don't have any strong passions and I was good at reading/writing so I went into law, but have been kicking myself for missing out on stock options and equivalent pay for a laid back lifestyle. Glad to see there are programmers who think lawyers have it easy.


Software keeps working after the work is done. That’s the key differentiator, not the brain power. This leads to economies of scale on two fronts.

1) scale for the low end. As an engineer, I’ve made a game where I have customers worldwide that pay me something like 25 cents a week. A lawyer can’t really do work that scales out at the low end like that. It’s not a brain power thing, it’s just the nature of the work product.

2) at the high end, a big company like Google or a financial institution can keep hiring programmers at say $100k, and have them produce tiny detailed enhancements that produce say 150k or or more of revenue per year over a multi year period. Most large systems can always sustain a little more enhancement that will produce an optimization of revenue.

I think this is the key difference between programming and other kinds of work. Programming is scalable at both the low end (distributable to very cheap consumers) and the high end (can always get more revenue through optimization). And at both ends of this spectrum the machine keeps earning money even when the programmer is sleeping or working on a new project.


Software doesn't keep running indefinitely. It has a shelf life of a few decades at the most, and usually just a few years.

Programmers definitely have leverage due to scale, but lawyers also have a lot of leverage when dealing with cases that have large $$$ amounts tied to them. Traders obviously have leverage by using large quantities of capital in their trades.


A lawyer can make a small modification to a drug patent that helps a company earn for example $2B a year for 15 years rather than 12

A lawyer can make a change in a corporate structure to lower a company's tax rate indefinitely

From the perspective of lawyers adding value to the law firm, a good lawyer can do this with dozens or hundreds of clients a year, and increase the firms revenue by bringing in tons of new clients. Creative lawyers can also figure out a way to differentiate themselves in a particular sector, like tech startups, and one lawyer who becomes a leader in an area can add millions in rev to the firm a year, for many years, by bringing in new business

Some law firms also take equity, and good decisions about when to do this can bring in huge windfalls


I hear you; I'm only a hobbyist programmer myself. I worked in investment banking at the beginning of my career and did an MBA so know lots of consultants and work a lot with lawyers in my work at startups, and I know those can be grueling jobs and that most people don't make nearly as much as the lucky few at the top firms

I was referring more to the intellectual challenge of the work. In investment banking there is basically no intellectual challenge at a jr level and at senior level it's all relationship management. The trading side can be hard but increasingly that's a programming job

I'm sure there are some super challenging law assignments but from what I understand from friends at top firms there's a lot of template changing and standard cases for a lot of stuff. At startups I try to do as much of that basic work myself so we can save on legal fees. Of course I get lawywers to review / sign off, but it's usually easy for them to do so

But programming is hard at an intellectual level in a way that is different from banking and consulting work and from what I understand, legal work. The first time I did a problem set in C involving memory allocation it took me like 20 hours to get it right. And the engineers working on massive systems that have to run perfectly, fast and be maintainable by hundreds of random people have work that is orders of magnitude harder. In programming, the difficulty of the work seeks to scale as your skill does. Don't know many other professions like that

I interned at google not as a programmer, and you are right that the work life balance there can be amazing, but it probably is the best company in the world for work life balance. Lots of programmers at other companies like work crazy hours as well, and often for non technical bosses or poor managers who make those long hours unpleasant


> I interned at google not as a programmer, and you are right that the work life balance there can be amazing, but it probably is the best company in the world for work life balance.

I'm not convinced. From what I hear, being a developer at Google can actually be stressful, if only for the fact that your peers are likely to be talented and ambitious - so it will take effort to keep on par with them.

Compare that to countless corporations which also hire developers, but where the motivation and talent levels are lower. In many of those jobs, you will be fine with doing maybe 15 hours of real work peer week. I'm not sure it would fly at Google. Based on this, I recently declined an interview invitation from Google recruiter - precisely because I was worried that my work-life balance would plummet.


>I'm only a hobbyist programmer myself.

There's also a very important point to be made here. Large-scale software development and self-directed programming have very, very little overlap in terms of time allocation and mental effort. To exaggerate the difference somewhat, it is like comparing building a go-kart in your garage with designing a factory that produces commercial, road-ready cars.


I tried to make that point in the post, though I don't have experience building large scale software. If hobby programming is building a go kart in your garage then the analysis you do in banking is like playing Mario kart :)

There's a huge jump in intellectual challenge of hobby programming vs the analysis you do in investment banking, and I'm sure there's another huge jump between hobby programming and large scale swe. Though I don't know which jump is harder. And I'd imagine that designing the factory in your analogy probably is the work of very experienced engineers, and jr eng is probably more like designing and building the machine that attaches all the wheels as part of a massively complex automated system


Are you at a top tier law firm? Because you're comparing yourself to programmers at a top tier employer of programmers.

The life of the average programmer certainly does not involve endless burritos or massages, and the compensation is probably below yours.


Yep - top tier firms pay roughly the same as tech companies do as far as I can tell (with the added bonus that you don't need 250k in grad school loans to work for Google at an entry level - and a much higher ceiling for the truly, amazingly talent).

Another key difference is that in most top tier law firms, literally 2-3% of every starting class can expect to have a full career there. I've heard tech has a similar concept called stack ranking, but it seems much milder in terms of the forced attrition. Not to mention you don't need a full career at Google - you can always take that resume line and go to another big tech company, a startup or something midmarket. Law is much more segmented. The M&A lawyer laid off during a recession isn't going to find a job at a small firm because those generally do not do M&A.

I don't really hear of top tier software engineers struggling to find work - happens to out of work top tier lawyers all the time.

Oh, and for the record 15% of law school grads get that sweet 180k starting salary (a trajectory most won't stay on).

There are many, many lawyers making 40-60k a year working horrendous hours with no real hope of advancement.

Let me be clear: I have zero doubt in my mind, even with my very limited knowledge of the software engineering market, that I have no doubt the median software engineer is far better off than the median lawyer, likely in terms of pay, hours, and prospects all at the same time.

My question related solely to the top tier because that's where it's even remotely competitive.


"something less than perfect and you could personally be on the hook for your license"

You might get sued by a client, but from what I have seen getting disbarred is really hard to do. Like, you have to blatantly defraud a client or something. Just doing shitty work, or even (as some I have known has acutely experienced) actively screwing over your client in a technically-legal-but-totally-sleazy way, the Bar Association will give you a slap on the wrist, if anything.


Lawyers don’t have the monopoly on 60 hour weeks of deep thinking.


Programming is one of the few "hard" jobs that is demanded in very large quantities. There are roughly 1.6 million people working as programmers in the US[1]. That is approximately as many as all engineering professions combined (the largest individual engineering profession is mechanical with 285k). It is roughly 50% more than all life, physical and social sciences combined.

[1] https://www.bls.gov/oes/current/oes_nat.htm#17-0000


I think I have to disagree with both statements.

banking - extremely long hours with unpredictable work, huge attrition rate (most people who start in banking don't stay in banking), eventual career progression is into sales

consulting - long hours, weekly travel, huge attrition rate (most people who start in consulting don't stay in consulting), eventual career progression is into sales

law - long hours, high attrition rate (most people who start in big law don't stay in big law), eventual career progression is into sales

At least for me software engineering is much easier than any of those.


I agree with your statement but when I said "hard" I meant the work itself was hard rather than the work "lifestyle", if that makes sense

I woerked in banking and agree it is a hard work environment , but getting the deliverables done was easy and not intellectually challenging. From my friends in big consulting and law firms the work sounds similar in nature


That's a good point and I mentioned it because you included social work in your list of hard careers so thought hard doesn't necessarily mean doing hard math/logic/etc.


I think social work is a hard work "lifestyle" but also hard in the sense the problems you are trying to solve are very hard. In banking / consulting advisory work, the problem is making the client happy, which is not easy but not as hard as rapidly scaling a software system, or "solving" the problems like ptsd or homelessness that social workers deal with.

I'm sort of mixing apples and oranges but it makes sense in my head :)


> 2) programming seems to be the "hardest" of the high paying jobs mentioned. Once you get them, banking, consulting and law jobs actually have a lot of mindless or not super challenging work

Are you saying this as a programmer, or are you saying this as a banker/consultant/lawyer?


Every task is easy to the person who doesn't have to do it. I usually say this to non-technical people when they ask for a feature that sounds simple to do, in their minds. But the same fallacy is at work if you think that highly paid bankers or consultants have mindless work.


A former banker, have also done freelance consulting work and did an MBA do know lots of consultants. I'm relaying things I've heard from lawyers I've worked with in various roles. Am a hobbyist programmer, been doing 10-20 hrs of coding / week the last 18 months, and interned at a FAANG in business roles tho knew some engineers

The stuff you do in investment banking is at least an order of magnitude simpler than making any useful software. It's basically modifying excel templates and debugging complex models, making slide decks that are 80% template slides, and working on deals that are intellectually challenging on occasion but a lot of it is blocking and tackling and managing processes


Having been both an attorney and a programmer, the better jobs in both industries will be quite challenging. I personally find writing software much more rewarding than practicing law, but it's certainly not more mentally taxing.


"Of course I'm probably missing some hard stuff that pays well"

Hitting major league pitching.


Programming seems to be the "hardest" of the high paying jobs mentioned

Perhaps for some people. Most of what I spend my time on is little more than simple data munging, some trivial analysis and glorified crud apps.


Once you've become a highly paid software engineer it's very human to try and justify your status by claiming that programming is exceptionally hard and therefore your status/salary is justified.

That's not to say that the job isn't hard... but lots of jobs are hard. Dealing with the constant loss of people around you if you work in a retirement home or hospice is also hard; but those jobs aren't rewarded equally.


"Dealing with the constant loss of people around you if you work in a retirement home or hospice is also hard; but those jobs aren't rewarded equally."

That is a completely different sense of the word "hard" from "programming is hard". Working in the retirement home requires enduring emotional pain and sacrifice. Programming (at least some kinds of programming) requires a high degree of skill, knowledge, and intelligence.

The distinction being there may be a larger number of people with the skills to work in a retirement home, than there are people with the skills to write particularly difficult programs.


I don't know why the parent went to hospices and nursing homes as a counterexample, but your response is missing the point: lots of jobs are hard in the way that programming is hard, and don't have the same compensation levels.

Of all the programmers I have met in my life, I would trust only a select few to do the things that most professional engineers do on a daily basis. For example, control system engineering, where quite literally, life-and-death attention to detail is required. The scope of the knowledge required and (in)tolerance to error is astounding. Meanwhile, try to get a programmer to do something as essential and mundane as writing comments. It's like this eternal, "unsolvable" problem in the industry that nobody can fix.

Most of the well-paid programmers I know (including quite a few at AmaGooFaceSoft) can't wrap their heads around databases well enough to deploy a low-traffic web application. And this industry is now rather routinely hiring totally inexperienced people, right out of bootcamps, at salaries that are mind-blowing to most professionals. It's clear that this stuff isn't rocket science.


The compensation is not based on how hard the job is so it doesn't matter. There's a limited amount of people that can do programming, but also limited amount of people that can do safety-critical engineering. Perhaps there is some overlap. But can you engineer a bridge that's used by a billion people every day? Probably not, hence the salary differences.


"The compensation is not based on how hard the job is"

Well, yeah. That's what I'm saying. And so is the original article.

"...so it doesn't matter."

This does not follow. Maybe it does matter, but the market is irrational. For example: maybe there are a lot of highly-paid, under-utilized software engineers sitting around FaceGooAmaSoft, because FaceGooAmaSoft are terrified of what those people might do, if they weren't twiddling their thumbs and enjoying complimentary massages while eating catered lunches.

"There's a limited amount of people that can do programming, but also limited amount of people that can do safety-critical engineering. Perhaps there is some overlap. But can you engineer a bridge that's used by a billion people every day? Probably not, hence the salary differences."

Prove your claim. Most programmers making big salaries are affecting maybe hundreds of thousands of people a day, at best. It's pretty rare to find gigs where you affect even millions of people a day. Even inside GooAmaFaceSoft, those are coveted positions, with lots of cookie-licking and internal politics.

It seems more plausible to me that the market is where it is because of deep pockets and a willingness to engage in defensive spending, more than any kind of individual productivity. But yeah, this isn't an argument that is going to flatter most HN readers.


> Most of the well-paid programmers I know (including quite a few at AmaGooFaceSoft) can't wrap their heads around databases well enough to deploy a low-traffic web application.

I honestly don't believe this. You did caveat that this is anecdotal, but it's such a bold claim of ignorance I think it should be qualified.

> And this industry is now rather routinely hiring totally inexperienced people, right out of bootcamps, at salaries that are mind-blowing to most professionals

This is also dubious. It clearly does occasionally happen, but those candidates are also not as inexperienced as you imply ( e.g they typically hold STEM degrees like mechEng, chem, physics, Maths - often from prestigious Universities - or have years of experience with non-dev technical work like security, IT, ETL, etc. )


"this is also dubious. It clearly does occasionally happen, but those candidates are also not as inexperienced as you imply"

Sorry, but no. It happens All. The. Time. Bootcamp grads are working everywhere, especially in SF. Throw a stone at the next Off the Grid, and you'll hit one, the stone will ricochet, and you'll hit another. These sorts of folks are readily employed in the writing of CSS and creation of web forms, which is ~99.8% of all day-to-day webapp work.

(Also: holding a physics degree and attending a bootcamp doesn't mean you're a competent programmer. Imagine suggesting that a BS in Physics makes you a competent structural engineer. The fact that you would imply this almost makes my point for me.)


> Once you've become a highly paid software engineer it's very human to try and justify your status by claiming that programming is exceptionally hard and therefore your status/salary is justified.

Salaries for the vast majority of occupations are driven by the supply and demand for employees - its a job market after all. Demand for programmers is increasing. Supply is increasing too, but is generally limited by, among other things, how technically "hard" the job is. "Deserve" isn't even part of the equation.


Writing software is not difficult. Anyone can do it. The hard part is learning to structure your thinking such that the software you will be writing will actually solve a problem as it currently exists in a cost-effective way.

With that skill, you don't even always need to know how to write software programs. Sometimes, you're better off delegating specific tasks to humans.

When someone hands you a problem like "make this dead elephant disappear" other people will still be scratching their heads after the programmer has already figured out

  while( elephant.mass > 0 )
  {
     eater.TakeABite( elephant );
  }
And they think to themselves, "I can vanish an elephant in two lines." Everyone else is still thinking about the problem in terms of tons. The chewing and swallowing is a trivial implementation detail.

(Meanwhile, some other programmer will be at the north pole wondering what happened to the elephant they left in Cairo.)

Some people simply aren't able to deal with problems they have not encountered before, that are too far beyond their domain of comfort. They can learn, but they don't innovate. As long as such people exist, they will have to pay other people to teach them how to cope with changes in their environment. Software engineers get paid well because a lot of them can effectively solve problems without needing to be domain experts in anything.


No real programmer would propose an O(N) solution like that.

Here's O(1):

    elephant.invisible = true;


And now the world is filled with invisible elephant carcasses.


Careful your not over-engineering :)


‘Writing software is not difficult. Anyone can do it’

The drop out rates from programming courses suggest otherwise.


It is unclear whether that is due to lack of aptitude, lack of desire, or incorrect expectations.

The qualities of those people who have ever successfully written software programs suggest that there is no magical determinant that would prevent any motivated person from doing it.

Apply the construction from the Pixar film Ratatouille. "Anyone can cook" does not mean that everyone can, just that there's no one who couldn't.

I suppose some kinds of brain defect or brain damage could prevent it, if you really want to pick nits. But in that case the condition would likely also prevent that person from doing much of anything else.


Sure, but how much time does one need to invest to handle the constant loss at a retirement home.

I often get in trouble for saying things are easy or hard. For instance, building a website can be easy but costly. So what language would help here?


Not only is it hard, but the landscape changes frequently. You wouldn't design a system like you designed it pre-mobile, and you wouldn't design a system pre-mobile like you designed it pre-internet, and those are just the big shifts. Cloud is another big shift. A lot of people read how so and so design a system. So and so is successful, so I will design my systems that way. That's rarely ideal. Also, designs can change company to company, depending on what the company structure is, who they serve, etc. Designs can change when a company changes, so hopefully your software can change with it.

Sometimes you inherit a bad system, so how do you fix it while keeping your releases in stride. That's not easy, especially when then original designers aren't there anymore. Speaking of which, what's the best release stride for this company? You might have to adjust design for that too. Was this weird code done on purpose, is it a bug, or were they trying to hack around a mistake somewhere else? Time to roll the dice, because you need to change it. How do you minimize the collateral damage if you are wrong?

You also need to consider your limitations like network and persistence storage. That's a huge part that many haven't even considered yet. How are networks designed today? How is data persistence designed today? What are my options and what are my limitations with this company? What type of reports does this company need? That's a big one. How about failover, what does your system do when the network or database quits? Do you lose any data? Are you sure? How important is it to not lose data? It's not that bad if Facebook loses a post, but it sure is bad if a bank loses half of a transaction.

Programming has a lot of levels that we don't even realize until we hit a new one. Turning good specs into working code is level 1. It takes a hell of a lot of brainpower and abstract thinking to just do that.


Whats this thing you call "good specs"?


What are "specs"? The most I get is a shout from the marketing director, "I NEEEEEEED X! Project Manager ok'd it 3 days ago!"


Bad specs bumps you to level 2.


Very small pebbles


> One (semi-pedantic) quibble with the article: there absolutely are barriers to entry for programming. Programming is hard! These barriers may not be artificial, but they are real.

Barriers don’t refer to how hard a discipline is skill-wise, they refer to how hard it is to enter the discipline. Law and medicine are also hard disciplines, but they have actual barriers to entry that cannot be surmounted by self-study. In this sense (which is the sense that the article means), programming does not have those barriers, no.

Considering that, unless you’re going to mount an argument that programming is objectively harder than those other fields skill-wise, it doesn’t seem productive to talk about an orthogonal “barrier” to entry that the other two also share. They are all difficult, so we end up in the same position.

Your comment here has spawned a large thread of people talking about how hard programming is (which frankly seems a bit self-congratulatory for this community, to be honest), but that’s completely separate from the core point being forwarded in the article; vis-a-vis, that programming is interesting and unique precisely because it has such a high compensation for a field without a central body limiting the supply (among other things). Law and medicine are also hard fields, and lawyers and doctors would be happy to explain why they’re difficult and have their own “skill-based” barriers aside from the licensing ones.


I've seen a few variants of this comment, so I wanted to address it.

I don't think we disagree much here.

I agree that medicine in particular is hard on its own. I'm not entirely sure about law, because the legal profession has only become highly-credentialed (in the US at least, which is the subject of this article) relatively recently. Regardless, to not make the trap of my b-school friend, I don't know enough to dispute whether law is super hard. I suspect it's not easy.

(Just as an aside, I'll note that from what I do know about medicine and law, both professions also require an extremely logical approach. I suspect certain specialties in medicine like surgery or anesthesiology or oncology are much harder than programming for various reasons. From cursory web searches, these specialties appear to earn much more than programmers do, and even much more than other physicians.)

Thus, assuming that medicine and law are also very hard (on the same order of difficulty as programming), we can likely say that even without licensing and credentialing requirements, entering the medical or legal professions would be hard.

I suspect we have slightly different ideas when using the term "barriers to entry". Indeed, I might have made a better argument if I had said programming has "high" barriers to entry, since what I'm talking about is clearly a continuum and not a boolean. C'est la vie. When I use "barriers to entry" as a concept, I'm using it broadly. To me, it encapsulates not only legal or political costs, but any cost, which is why I mentioned building a power plant or a semiconductor fab. I am using it the same way I see it used in the various economics literature. In this case, I suspect the cost is that most people seem to feel uncomfortable thinking abstractly and logically, and haven't refined those skills over time. Alternatively, high capital costs are a common contributor to barriers to entry in economic analysis. "Human capital" (another econ term) is exactly how I'd categorize the learning required to practice programming, whether it is acquired through formal training or self-direction.

As far as the self-congratulation, I agree, although that was not my intention. As long as I stay a few standard deviations from Erik Meijer[1] (whom I otherwise deeply respect), I'll consider it a success. ;)

[1] https://vimeo.com/110554082


Sure, programming is hard, but so is any job that pays more than the median wage. Hence why they pay more than the median wage. No one refers to "shit is hard" as a barrier-to-entry, because this "barrier" is so ubiquitous, it doesn't even need to be mentioned.

Artificial barriers-to-entry though, such as the licensing requirements for doctors/lawyers, are unique to some specific professions. Hence why they are worth highlighting.


I studied Electrical Engineering in college and I've been a professional programmer for 10 years. EE is much harder.


This isn't popular with the "everyone can learn to code" crowd but one significant barrier to becoming a proficient programmer is intelligence.

Maybe intelligence isn't the right word (after all how smart is it really to sit in front of a computer all day shuffling bits around?), a certain way of thinking or aptitude might be better. Education doesn't overcome this, training only partially overcomes this, experience doesn't necessarily overcome this. I bet most of us in the field have come across individuals with high levels of training, perhaps even very "intelligent" individuals who simply fail to fit concepts together in a useful way. Who get the pieces, who can answer quiz questions, who know facts and trivia, but simply cannot bring it all together into a useful, coherent, maintainable whole in a reasonable time frame. And I don't see this barrier being broken.

Anything that can be taught by rote memorization can be automated. Anything that requires higher levels of abstract thinking may never be automated.


Lack of knowledge doesn't neccesarily stop one from programming. There's nothing stopping you from calling yourself a programmer, or applying for programming jobs, and so on. Whereas to be a lawyer or a doctor you usually have to be licensed by some sort of government authority.


Programming is easy. I taught myself. It just took 5-10 years.


Actually, I think that if someone has got to the point where they are dealing with the details of CPU and OS then they’re well along the learning curve.

Many, perhaps most, people have trouble with the basics of programming. Pointers, functions, even basic iteration are concepts that cause a lot of people to flunk out of introductory programming.


> These barriers may not be artificial, but they are real.

Real and non-artificial? Could it be?! :P


"I once had a top-tier business school grad friend claim that programming really isn't that hard and that we're all whiners."

It truly is amazing how people outside of a field always seem to have the best idea of how long something in that field takes to do.



Yes, it is. And the example used in the article of chemical engineering reinforces the point. It ties into computer science quite nicely.

To become a chemical engineer, you first have to complete the course work for a degree in chemistry. Chemistry as chemistry is an extremely modular subject matter; you can solve most problems in discrete steps in isolation. In a computer science sense, chemistry is about pure functions. Very easy to analyze, as material side effects (like spontaneous detonation) are rare.

Chemical engineering, on the other hand, is about analyzing systems that leak their state everywhere and have effects that feedback into other parts of the system. But it needs to be extremely efficient nonetheless. There is no isolation because it doesn't exist in real-world complex systems. I have seen excellent chemists absolutely fail to grok chemical engineering even though it is literally the same subject matter. The only difference is that chemical engineers are required to reason about complex distributed systems; as with computer science, only a minority of practitioners ever seem to grok it despite their best efforts. Same problem, different domain. And chemical engineers are paid on a different scale than chemists as a result.

In engineering, bimodal distributions are the sorting of people that naturally have the ability to easily reason about complex distributed systems with many concurrent moving parts and people that cannot. Increasingly, the market is discriminating on this characteristic and it is reflected in wages.

Anecdotally, it is somewhat well-known that people competent at chemical engineering find advanced software engineering to be intuitive; it is a very easy second "language" to pick up. An inordinate number of chemical engineers end up in high paying software engineering careers -- it comes very naturally and lends itself to the abstract analytical toolset you develop as a chemical engineer.


>To become a chemical engineer, you first have to complete the course work for a degree in chemistry.

That is incorrect.

Look at the programme of study for a chemical engineering undergraduate degree [1]. It doesn't cover anywhere near the same content as an undergraduate chemistry degree [2].

[1]: http://www.imperial.ac.uk/study/ug/courses/chemical-engineer...

[2]: https://www.imperial.ac.uk/study/ug/courses/chemistry-depart...


I was typing a similar response. I did a 4-year MEng in ChemEng and there were only a few non-elective courses in organic and physical chemistry. The bulk of the content is fluid mechanics, thermodynamics, vessel design, safety, control systems, mathematics etc.


To quote a Chem eng friend, "I don't know chemistry, all I know are flow rates."


I probably over-generalized from my own experience. The only chemistry degree coursework we could avoid was a class about lab operations, basically safety/hazard management.

This turned it into a de facto 5-year degree even though they stripped most of the non-related coursework to a bare minimum; you still had two years of coursework for the engineering program after the chemistry. People that lost their appetite for chemical engineering after compressing all their chemistry into three years could switch to chemistry, which meant they spent their last year taking the filler non-technical courses that the engineers were allowed to avoid.


It was nearly correct in my case: While getting a BS in ChemE at CU Boulder, I also earned a got a minor in chemistry and biochemistry (and inorganic chemistry, but I was only allowed two minors for whatever reason).


Yep.

My classmates from Chem.E had more classes in common with us mechanical engineers than any other branch.

Thermo, fluid dynamics, CFD and heat transfer is where it is at.


There are huge overlaps between the different kinds of engineering - not quite enough to support a single unified core curriculum, but enough to make it obvious that there's a lot of similar math across all the disciplines, and only the emphasis varies.

The big problem with engineering isn't the specialisms, it's the name. Outsiders still think engineers are people who wear oil-covered overalls and are essentially mechanics.

Not one person in fifty understands that the job is mostly mathematical modelling of complex systems.


I completely feel you. I had EE friends being asked to fix light bulbs and MechE being asked to fix cars.


Way to miss the forest for the trees...


> In engineering, bimodal distributions are the sorting of people that naturally have the ability to easily reason about complex distributed systems with many concurrent moving parts and people that cannot. Increasingly, the market is discriminating on this characteristic and it is reflected in wages.

What faith in the system :). The truth I think is "it's who you know" more than "what you know". The best paid engineers are ones who spend a lot of time positioning themselves to get well paid. Why that is bi-modal I can't be sure - but my guess is that once you hit a certain network effect you start to make a lot more.


It's both. You have to know people of whom you impress with your ability.


Sure, but I don't think the differentiator in the bimodal distribution is technical ability.


I would guess being good hits the first mark, being good and knowing someone who can pay a lot that knows you're good hits the second mark.

Perhaps the second mark not only includes being good and knowing someone, but being good and providing a larger value, like being able to analyze and communicate with a company and quantitatively save them money through business process automation.


And yet the primary indicator of a programmer's ability through job interviews are tiny-scale optimizations and brain teasers.


Tbt, I haven't seen that much evidence that correlates developer ability with salary. For example, developers living in the Silicon Valley are paid the most. Not because they are the best, but because they are living in the Silicon Valley. Geographical factors play a much bigger role in compensation than developer ability.


But that 'greater' SV salary for a junior developer can give you less purchasing power than a 'lower' salary for a senior somewhere in Europe, due to cost of living.

Granted, money is 'absolute' if you use it to e.g travel around the world, but most people don't do that. In general money is 'relative' to one's environment.


Not really. I did the math in the past because I seriously considered moving to the US cuz I got an offer there. In my estimates, you would end up spending the same % of your salary in surviving, but of course the remaining let's say 30%, is simply a lot. Also a lot of things are not really that expensive (most things that are not housing, or maybe eating out.) And when you get out of the Junior level, I think the difference between SV and Europe becomes abysmal.

Also, "Europe" means many things. I am talking about Berlin here. I also know other places, like Madrid, where you just simply earn pennies in comparison so the difference becomes even higher (Madrid is more expensive than Berlin, earn less)

I still decided to stay here though (because of quality of living, work culture, music and partying, politics).


Get a remote US job ? Harder since you compete with many people but doable.


Most US-based companies are vary of hiring remotely from Europe. As a worker, I'm not sure I'd want to work from 4pm till midnight. The timezone difference makes collaboration difficult. South America seems to be in a much better position here.

Obviously, there are also US-based companies with globally distributed remote workforce, but those are a minority.


Yeah, but still many with "work on your own timezone and just meeting at 4pm".


Not true. If you're making 120k in SF, after taxes and pay 4k/month on rent, your remaining salary is still greater than most junior engineers gross pay in the UK.


Yes very few developers in London earn as much as the train driver who drives the train the developer catches to work (60k for a 4 day week 80k per year after OT )


I was comparing Junior USA vs. Senior Europe


Have you investigated the correlation between developer location and developer ability?

Do you think developers who are very good want to work with the best, thinking the best are in SV, then move to SV? Or perhaps they think they'll get the best return on their effort if they're working on software with big impact, and software with the biggest consumer impact is mostly written in SV?


I didn't know the United States had unrestricted immigration. :) You're probably right that Silicon Valley developers on average are a little bit sharper than most everyone else. But not by that much. People have other priorities than getting the best colleagues, such as living close to family and in places that feel like home.


> People have other priorities than getting the best colleagues, such as living close to family and in places that feel like home.

Yes: people who don't prioritize excellence in development. And it does require compromises in your life choices. You generally need to move to where the most interesting jobs are, where the cutting edge tech is being developed. It's a virtuous cycle: SV attracts the next generation of high quality developers because it's the place that already has the highest concentration of good developers.

> I didn't know the United States had unrestricted immigration.

FWIW, even though I got my H-1B visa, I stayed in London. It would definitely have been a better career move to follow through and emigrate. I have zero doubt it has cost me in career prospects and quality of opportunities.

Living in London is already a compromise in my quality of life.


For your dream scenario to become true, you not only have to live and work in the Silicon Valley. You also have to work on interesting problems at interesting companies. Google may employ 10k engineers, but only 100 or so work on the really interesting stuff.

My passion is research and free software, so yes I do "prioritize excellence in development." I don't have to move to the Silicon Valley nor the United States to take part in that.


It is not practical to compare research or open source development to working at Google.

You can definitely prioritize excellence in development, but only within the scale of a few humans. You cannot research what it is like to work at scale.

Scale of hosts, requests, code, people, money. It's an experience to itself.

It's always funny to "break" open source tools people rave about. Most recently elasticsearch is barely coping with some of my teams volumes and we have to do some really tricky distributed computing stuff to workaround and keep it happy. Mind you, like a Honda Civic, it is an amazing tool, and works brilliantly for most almost all uses, but at certain scale you need a Ferrari and that isn't something you can get anywhere but big companies. And when you learn by designing and debugging a Ferrari, everything else becomes trivial very quickly.


This is highly dependent on personality. As an anecdote, I know a developer that does not like working with "the best" because they make him look bad (even though he's not a terrible developer).

Given, he works at a company with stack ranking so I guess that company is self-selecting for developers like him.


Relevant to your username - people who don't challenge themselves are self-limiting. To grow, you need to go outside your comfort zone, you need to take some risks. And "not terrible" certainly doesn't sound like top 1-5% material.


So you're pointing to the ability to manage complexity? I had not heard it put that way before but it feels right to me. From TFA the author said

"How is it possible that programmers are paid so well without these other barriers to entry that similarly remunerative fields have? "

My initial thought was that there are people who get it those that don't. But you can teach many people the tools of programming. It's using those tools to do something interesting that seems to be the challenge. By interesting I suppose I mean something exceeding some level of complexity.

This makes sense, I don't see our schools teaching anything too complex - it tends to be compartmentalized.


Also, because software developers are like soldiers or litigation lawyers. The more other people have, the more you will need.

If company X is your competitor, and they employ 10 software developers, sooner or later, whatever it is they're working on will release, and that might provide X with a massive competitive advantage over you. So you have to hire your own people to keep up with your side of the arms race. And sometimes, a brand new person comes along with a bunch of software folks to create company Y, and they devastate both you and X within their first 5 years.


> Anecdotally, it is somewhat well-known that people competent at chemical engineering find advanced software engineering to be intuitive; it is a very easy second "language" to pick up. An inordinate number of chemical engineers end up in high paying software engineering careers -- it comes very naturally and lends itself to the abstract analytical toolset you develop as a chemical engineer.

As someone trained as a chemical engineer who now is a Data Engineer (SQL & Python pipe fitter), feel free to add me to your anec-data :-)


I thought it was just because the GAFA tech giants are currently in a bidding war for programmers in a very expensive part of the country. I've met and worked with many very talented engineers, fully capable of grokking complex systems, not working in Silicon Valley.


I'd definitely call that the best explanation. You spend a few years working at a GAFAM, and now you've got a hugely prestigious resume from an expensive, high-cost-of-living area that other companies will shell out for, big time. You spend any time outside that cluster, even doing excellent and difficult work, and you just don't have the prestige.

It's also a matter of scale: the GAFAMs just ship more units in terms of revenue per employee. Sure, that's largely because of monopoly and network effects, but hey.


Fascinating argument, which fits me well (PhD ChemE who learned software and is now SWE at large tech firm).

Allow me to take an alternative argument: Highly-driven students, especially those driven by money, became ChemEs to earn a lot of money and prestige. They looked up highest paying majors and chose ChemE for these reasons. I think it is now obvious SWE is very high paying and prestigious -- perhaps more so than ChemE -- so these highly-driven people switched. It had nothing to do with the topics intrinsically, but rather ChemE was largely perceived as the hardest/most-prestigious field and now SWE is.


I like your analogy.

To offer my own anecdote: In pure/theoretical Chemistry you conveniently ignore in-situ solvation effects to think about mechanisms of the organic reaction.

Then in the real world, you can't replicate someone else's paper because of humidity differences between your lab and the author's.


> as material side effects (like spontaneous detonation) are rare.

My father has been responsible for every chemical (including, explicitly, explosives) factory in the entire country (Hungary, 80s) and later for just one pharmaceutical company for those "side effects" to stay rare. They do not stay rare without some very stern rules.


The OP was explicitly referring to the difference between chemistry in the lab (when you can conduct perfectly isolated, small scale experiments -> very low risks) and chemistry in industry (which is what you're referring to), where risks are much higher.


>Chemical engineering, on the other hand, is about analyzing systems that leak their state everywhere and have effects that feedback into other parts of the system. But it needs to be extremely efficient nonetheless. There is no isolation because it doesn't exist in real-world complex systems.

Is it not possible to engineer in isolation on real world complex chemical engineering system?

I try to do that with software, and most software can certainly benefit from stricter isolation (e.g. looser coupling), but most software teams - even well paid ones - often have an in-built bias against investing in less tangible work which means that you ultimately end up with these complex systems are that hard to reason about.

Not that I feel like I should be complaining about this if it is indeed the reason I'm paid well.


Boss studied chemical engineering, he's not remotely a techie but is ridiculously smart and he assimilates stuff at a speed I've rarely met.


And also chemical engineering also requires skills in mech /fluids engineering doing a reaction in a lab vs at scale is a completely different thing.


Just anecdotal but all of my friends who majored in chemical engineering are somehow software engineers now..


Almost all professional and semi-professional salaries are becoming bimodal.

I'm too tired at the moment to look this up, but the NY Times had a piece sometime in the last couple of years where they were discussing income distributions, and had an interactive, and what they looked like, almost across the board, was a bigger lower mode, and then a second, smaller, more spiked mode much higher.

What struck me about that piece was that it was framed in terms of skewed incomes, but the bimodality of it didn't get discussed much at all, nor the fact it was so widespread across different disciplines.

To me it was very disturbing, because it suggested that there was a growth, across disciplines, of two "classes", one established, with a relatively large income, and another, larger class, with a much smaller income.

I was very curious about this, and have wondered what the groups are--if it's because of older, senior individuals and younger, junior individuals. Maybe the latter are trainees? Maybe the latter came into the labor market at a less favorable time? Maybe there's just a kind of winner-takes-all sort of phenomenon?

It was really disturbing to me, and seems difficult to explain in terms of any specific features of any field, because it was so, so widespread across labor areas. It was partially disturbing that it was sitting right here in these graphs at a major news outlet about income distributions, and was not being acknowledged even then. It was probably more disturbing to me than the general long-tailed skewed income distribution that gets discussed, because it suggested (at least to me) very unnatural about how incomes were being allocated, even more so than the stereotypical long-tailed but unimodal curve.


I can imagine a simple explanation where one mode of gratification aims to pay as low as possible to keep the workforce willing to work at all, and another mode is to use pay amount to avoid talent from going away. Pay is thought about and used differently in both modes, and it's a simple enough management pattern that it could translate to every field. This is an over simplistic hypothesis and it would need more info to confirm but it seems potentially reasonable to me.


I think that's true from the management side. I also think it reflects personalities on the employee side: you have to be able to risk rejection and possibly worse to ask for a significant raise which means you either need to be very risk tolerant or in a situation where you can afford to fail.


>Another possibility is that U.S. immigration laws act as a protectionist barrier to prop up programmer compensation. It seems impossible for this to last (why shouldn’t there by really valuable non-U.S. companies), but it does appear to be somewhat true for now.

I feel like this is the real issue here. The reason that the US has great companies is simply from the availability of large amounts of capital. And if the millions and millions of Indian, Chinese, and Eastern European programmers who are inifinitely more talented/driven/intelligent/educated than myself were able to simply move here and seek employment with no immigration restraints, I know that I would be out of a job instantly. In that sense it feels perversly exploitative and priveleged to make so much more money than practically anyone else on earth due to nothing but the physical location I was born.


> In that sense it feels perversly exploitative and priveleged to make so much more money than practically anyone else on earth due to nothing but the physical location I was born.

Is it perverse to go swimming because you were born near a beach? Is it perverse to visit the Louvre if you are Parisian? Is it perverse to go to a good university because the universities in Elbonia aren't good?

You're not entirely wrong, but that's a very limited view on how the world works. It's not all random. We're not all rolling dice and separating into "haves" and "haven'ts".

Once upon a time: Somebody's parents moved to the coast. Somebody's predecessors funded and built the Louvre (and managed to keep priceless things safe despite war, disease, famine, etc.). Various parties spent decades (or centuries!) of history recruiting and utilizing world-class talent, raising world-class capital reserves, and building world-class facilities for their universities.


> Is it perverse to go swimming because you were born near a beach? Is it perverse to visit the Louvre if you are Parisian? Is it perverse to go to a good university because the universities in Elbonia aren't good?

If you actively promote or passively allow politicians and legislation that bars other people from having a shot at earning those things themselves, then yes.


> bars other people from having a shot at earning those things themselves

Restricting immigration doesn't 'bar' people from making their own country better...

Have you never visited a place that has had it's beauty or charm ruined by the sheer number of visitors it receives?


Can't activelt promote legislation in a dictatorship


This is why people don't like the concept of privilege, it seems almost built to shame people for having more due to circumstances.


If people don't like the concept, they don't really understand it. The way the word is often used and even the word itself, absolutely that ruffles some feathers and rightly so.

They do studies, if people are given massive advantages (e.g. rolling two dice instead of one in monopoly and starting with double the cash) that are obvious and explicit, people will still believe they deserved to win, they earned their victory.

Recognizing a lot of your success is because of dumb luck (yes you worked hard, but millions of others worked just as hard or harder and weren't lucky) is a good way to stay humble, and to remind yourself to stop pretending you "deserve" what you have -- we all live in a fundamentally (intentionally) unjust economic system where "desert" has no meaning but we try to superimpose it on our lives because of a need to believe things are fair. Privilege is a word that can be a good way to remember that.

It can also be used as a rhetorical weapon to bludgeon people.

The word itself is terrible and I hate it: it is not a "privilege" in my view to be treated decently, to have a chance at success, to not be discriminated against or assaulted by police or have to face anything that the poor, minorities, women face. It is a right. Everyone has the right to be treated the way straight rich white men are and have been for centuries and using the word "privilege" conjures up this notion that they are getting something they do not deserve: rather, they should be viewed as the model, the goal, they are getting something that we all deserve to have as well alongside them.


I think “privilege” because the right is not the norm. Like “black lives matter (, too!)” because being black and having respect for your life and freedom is not the norm, at all.

In a situation where not being exposed to massive dangers and obstacles is a rare occasion, I think it is fair to classify that as a privilege.

White / wealthy / male / educated / citizen of the US, all indicate the top parts of pyramids of oppression and massive obstacles.

The blind acceptance of these structures by the ones standing on top of them, is the actionable part. We (I am definitely amongst the privileged) can’t easily see the nature of the structures, the way we don’t choke on clean air.

But once we’re aware of them, our responsibility kicks in. Not taking actions to actively challenge these structures makes us complicit and defines where we stand.

The anger of the ones living life on “extra hard” so that we can live ours on “quite/super easy” or even “normal”, is fully justified. We are passive perpetrators, there’s no way around it.

Very uncomfortable.


There's a good reason many of us dislike current usage of word "privilege", and to your credit, you avoided it. Lots of times the word "white privilege" is thrown around by relatively well-off people in urban areas, and that usage is extremely hurtful and frankly stunning if you're a poor white person living in a small town in say, W. Virginia. You work multiple minimum wage jobs and still barely scrap by, watch friends and family succumb to desperation and opiates, and look around your town as it crumbles in neglect. And you don't feel like you're very "privileged" in spite of being white.

The term is particularly bewildering to rural and small town poor whites when it's tossed out by a 20-something-year old professional in some big city who's making a $200,000/year salary, or by a trust-fund kid protesting in a university where tuition costs more money a semester than your whole extended family makes in a year.

I realize that many people who use the term "white privilege" may not be targeting such people with the term (although many clearly are). However, when the only qualifier someone uses is "white", it's hard to draw that conclusion.

Again, to your credit, you used the term "straight rich white men". But most people fail to make this distinction.

I also strongly agree with your final paragraph. What we call "privilege" is something that all people should have. Instead of working to destroy privilege, we should work to ensure that all people have that same privilege.


Being poor and white is still an advantage over poor and Latino/Black. Look at conviction rates at criminal trials for example.

Now, it's not the kind of advantage that feels meaningful, but it really adds up over a lifetime.

Even +/- 1% sales can make or break a small business for example.


> Being poor and white is still an advantage over poor and Latino/Black. Look at conviction rates at criminal trials for example.

No argument, but is that really justification for wealthy urban whites to go around shouting about "white privilege" to poor rural whites? I mean, if you feel that way, continue, but I can guarantee you it won't be a net positive for our country, black or white.


A poor white man is less likely to be convicted than a rich black man. So, the racial devise is larger than the economic one.

I don't think the term white privilege is great, but it is a massive injustice that's IMO worth talking about.


> Being poor and white is still an advantage over poor and Latino/Black. Look at conviction rates at criminal trials for example.

Are there stats for convictions of poor white people vs poor black latino/black, or just all white vs all latino/black? I don't think the latter stats would be particularly helpful here.


Yes, it's so bad: Poor white kids are less likely to go to prison than rich black kids "https://www.google.com/amp/s/www.washingtonpost.com/amphtml/...

"One in ten Black males in their thirties is in prison or jail in the United States." That's insane.


Very interesting.

However, one thing that I fail to see addressed here is reason for the incarceration gap. The way I see it, it can be partially because black kids are prosecuted more (the "white privilege" argument) and partially perhaps because, for whatever reason, rich black kids just commit crimes more often.


I don't buy the argument that rich black kids commit crimes at higher rates. White and black people smoke weed at roughly the same rates, yet black people are far, far, far more likely to be prosecuted for it.


It's not an argument, merely an unknown. Considering that black people have elements of their own culture that are anti-hard work ("acting white") and pro-crime ("gangsta rap"), I wouldn't be suprised if this culture managed to spoil even the kids from the good homes to some degree.

BTW how do you know that white and black people smoke weed at roughly the same rates?


There have been studies on that very thing. https://www.washingtonpost.com/news/wonk/wp/2013/06/04/the-b...

If you look, Figures 21 and 22 show usage rates to be about the same. However, if you look down at Figure 10, you'll see a huge disparity in arrest rates.


I think white privilege is in contrast to being not white. Statistically, you can think of it as a, for example, 1% effect that gets added to another 1% effect that gets added to another 1% effect and so on. Add enough of these effects and you have a pretty big impact.

Even accounting for the racial makeup of those states, I know far more white people than non-white people from poor states who are now making great money.


> we should work to ensure that all people have that same privilege

That is working to destroy privilege.


The reason people refer to these things as privileges is because they are unavailable to the majority of the population.

It's a very privileged perspective to live in a world where these things are considered normal.

Privilege has to do with the idea that these things are so far from being a reality for so many people that it's evident to them that the world does not consider this to be their right.


And I think realizing these differences is maybe helpful somehow, but here is the reality:

> In that sense it feels perversly exploitative and priveleged to make so much more money ...

It seems to be more useful for shaming people.

> ... that the world does not consider this to be their right.

This seems to imply that those with privilege think their privilege is a right.


> It seems to be more useful for shaming people.

It is sometimes used that way, but is (I think more) often used in a much more analytically useful sense: as a means of indexing passive/automatic advantages that some people benefit from, and as a lens into the ways that advantage might be extended to others.

> This seems to imply that those with privilege think their privilege is a right.

That doesn't follow logically (if group A is bothered that the advantages of group B are not considered to be group A's right, it does not follow that group B considers those advantages to be group B's right), or textually (GP referred to "the world" as the thing not considering privilege a right for some people, which I interpreted as a reference to the context/emergent behavior/power structures that confer advantages; not specific people).


So privilege is useful primarily for charity?

> "...a reality for so many people that it's evident to them that the world does not..."

The dichotomy is those with privilege, and those without.


> If people don't like the concept, they don't really understand it.

I think plenty of people understand it, they just don't agree with it. Why wouldn't humans use every advantage available to them to succeed? It's a tough world out there and people want to thrive and survive, they'd also like to pass along the fruits of their labor to their offspring. That's how nature works.

There will always be a will to be the best, it doesn't matter if the demographics of people with economic advantages shift. I don't imagine we'll ever see people willfully make their lives more difficult and we shouldn't expect them to.


Generally, people don't say you should refuse to take advantage of them, but that you recognize them. That is, right now, you're misunderstanding privilege.


Recognize them then do what? Humans are complex and I see no value in using a one dimensional, subjective metric to make any sort of decision or guide a personal philosophy.


Privilege is a lens through which you look at the world and analyze things. It's more or less an analytical tool developed as a response to various flavors of social darwinism.

The idea behind privilege theory is to say that, when you compare people, you don't say "the more successful one is more successful because they are better", but instead "there are a number of factors, many of which are difficult to quantify, that contribute to the varying levels of success between two people (or especially groups)".

It's not one dimensional, and there's no objective way to measure or compare things as generic as "success". Privilege theory being explicit about this makes it superior to many of the alternatives.

"Do what" is such a broad question that I can't really answer it. Are you an academic, or a company or a government or something else? The answer depends on that. It's a malformed question, like asking "What do you do with Kantianism?" or something. The best answer I can give is "use it as an analytical lens to guide your decision making", which is a bad answer precisely because its a bad question.

A better one might be "What value does analyzing situations/systems via the lens that privilege provides give?" Which is incidentally also a pretty good question to ask about Kantianism.

The answer to that question also depends on exactly who you are and what you're doing, but at least it makes sense. For example, for me personally, I think that looking at things via a lens of privilege helps me to be a more empathetic person, on the whole.

For an academic, it might help you decide whether or not you are asking the right questions in an experiment.

As a very straightforward historical example, for many years in the US, there was explicit bias against African Americans in segregated schools. This was justified in many cases, through a social darwinistic lens: black people are less intelligent, the proof is that they perform worse, and so we should devote fewer resources to their education.

Looking at the same data through a lens of privilege though, one might instead conclude that segregated schools performed worse because they had fewer resources. In other words, the same correlation is explained in two vastly different ways.

I use that example specifically because today the same thing still happens, as a result of most school systems getting funding based on property taxes, and historical reasons so you still have a world where, in practice, predominantly black schools have much less funding. Ostensibly, this is "fair", since you use the same rule to fund everyone, but clearly it isn't actually. Privilege is one way of accounting for how things that are ostensibly fair may not be in practice.

As an aside, in a much more mathematical sense, I think that privilege theory is all about picking the right bayesian priors when doing an analysis.


I think this is a very well reasoned argument that makes sense within your logical and philosophical framework.

What it doesn't take into account is different meanings to the term "fair" or the morality of a system based on staunch individualism.

> Ostensibly, this is "fair", since you use the same rule to fund everyone, but clearly it isn't actually.

I actually find the situation you outlined extremely fair and would find it quite unfair to apply different funding principals to different schools based on demographics.

I suppose one of the problems I have with the concept of privilege is that I find it promotes a very dangerous mindset. Having grown up poor and non-white and achieved success through hard work, more often than not I saw people being held back by their own sense of victimization than any sort of systematic oppression. The concept of privilege exacerbates that and thus is counter productive.


>I actually find the situation you outlined extremely fair and would find it quite unfair to apply different funding principals to different schools based on demographics.

But that "fair" method isn't independent of demographic. And that's what privilege tries to highlight. It's almost always possible to dress up policies that are de-facto prejudicial as independent of the thing that they're supposedly prejudiced against.

If you want to discriminate against women without making it obvious, you can add an unnecessary height requirement. It's only when you take a look at the correlations between those variables, when you realize that women are inches shorter than men that something seems off. (and to be clear I'm talking about an abstract situation where height doesn't matter for whatever it is we're doing). When you take into account the correlations, the non-discriminatory rules suddenly feel a lot less non-discriminatory.

If you really supported a funding principle that was independent of demographics, you should support a system that grants funding solely based on headcount. Otherwise you're implicitly admitting that rich people deserve better education solely because they are rich, which seems discriminatory to me.

Granted, there are flaws to that system too, but what it doesn't do is further disadvantage the already disadvantaged. Your "fair" system leads to the poorest areas (and the least-white areas, and a few other similar things) getting the worst education. The result of this is that I, as an individual, receive a worse education do to things that are totally out of my control. That doesn't seem particularly fair to me.

(And that's ignoring other arguments that there are probably very compelling reasons to fund the least well off schools more, much like a progressive tax system favors those at the bottom. And as an extension of this, I'm curious if you favor a progressive tax system, or something else).

Another user mentioned this study[1], which unfortunately I can't find the paper for, but the video is still worth watching. I'll quote an important bit:

>As a person's levels of wealth increase, their feelings of compassion and empathy go down, and their feelings of entitlement and deservingness...increases.

The crux of this is that while you may disagree, its possible, and even perhaps likely, that your success is less "yours" than you believe, and that your mind is rewriting history, so to speak, to make you feel more in control of your outcomes than you actually were. This is by no means your fault or anything, and there are probably good evolutionary reasons for our brains doing this (I say probably only because I'm not an evolutionary psychologist, I can make some pretty good arguments for why this would be evolutionarily good). And there are times when it's probably a good idea to ignore that fact and feel like you're to blame for your outcomes, but there are also times where it isn't.

In any case, I hope you understand that there's more to it than just fake-victimhood and an attempt to make successful people feel bad. And that while you may disagree with the theory, its at least not total SJW nonsense :P

[1]:https://www.ted.com/talks/paul_piff_does_money_make_you_mean


> I'm curious if you favor a progressive tax system

I favor a flat tax if we must pay tax at all.

> The crux of this is that while you may disagree, its possible, and even perhaps likely, that your success is less "yours" than you believe, and that your mind is rewriting history, so to speak, to make you feel more in control of your outcomes than you actually were. This is by no means your fault or anything, and there are probably good evolutionary reasons for our brains doing this (I say probably only because I'm not an evolutionary psychologist, I can make some pretty good arguments for why this would be evolutionarily good). And there are times when it's probably a good idea to ignore that fact and feel like you're to blame for your outcomes, but there are also times where it isn't.

This is the crux of why I think the concept of privilege is extremely dangerous. You have no idea who I am and I've already stated that I fit some of the demographics that you deem underprivileged. Yet instead of listening to what I had to say (which is a quite simple explanation -- work smart/hard == do good) you fit a very elaborate psychological explanation over my experiences (of which you know nothing about).

Do you believe that poor people cannot succeed without help? If the answer is yes, then why would you question someone telling you that's what happened? If the answer is no, then I think you need to reexamine your philosophy as it's fairly dehumanizing to be told that you're not capable of success.

I also find it somewhat amusing that I've seen this pattern repeated over and over. Poor people claim to know what's hold them back. Rich people claim to know what's holding poor people back. Poor people who became wealthy are told they're experience is invalid, an outlier, not useful. Really shouldn't they (we) be the ones that have the most valuable opinion since we've proven it can work?

I'm not just talking about this exchange or my own experiences. You'll see this conversation happen over and over when someone who is self-made tries to discuss how they did it.


>This is the crux of why I think the concept of privilege is extremely dangerous. You have no idea who I am and I've already stated that I fit some of the demographics that you deem underprivileged. Yet instead of listening to what I had to say (which is a quite simple explanation -- work smart/hard == do good) you fit a very elaborate psychological explanation over my experiences (of which you know nothing about).

It doesn't really matter who you are, it's unlikely that you're immune to bias. I absolutely listened to what you said, it's just orthogonal to the point I made, which is that no matter your experience, how your brain works is probably not unique. You're almost certainly subject to the psychological quirks as everyone else. Do you want me to give your experiences special deference because you come from an underprivileged background? I thought that's explicitly what you were arguing against.

>Do you believe that poor people cannot succeed without help? If the answer is yes, then why would you question someone telling you that's what happened? If the answer is no, then I think you need to reexamine your philosophy as it's fairly dehumanizing to be told that you're not capable of success.

No. And I don't think I've ever said that poor people cannot succeed without help. I've said it's more difficult for poor people to achieve the same success as rich people, all else equal, but I don't see anything dehumanizing about that. I'd ask that you take another look at what I'm actually saying, because you're turning my words into something that they very much aren't.

>Poor people who became wealthy are told they're experience is invalid, an outlier, not useful. Really shouldn't they (we) be the ones that have the most valuable opinion since we've proven it can work?

No. Not at all! For the same reason that I wouldn't ask Jeff Bezos for life advice. Its survivorship bias, plain and simple. For every person with your story, there's someone else who had a similar background, worked just as hard, and isn't successful.

The common explanation for this is that a lot of successful people say that a good things is to take risks. They all have this in common. They took risks. But so did tons of other people who ended up broke or bankrupt or otherwise unsuccessful. Only listening to successful people will result in exactly what you're doing now: thinking that [hard work/risk taking/keeping a strict schedule/buddhist minimalism] is enough to do succeed, ignoring the fact that there are many people who did exactly the same thing who have failed.

Just to be clear, are you arguing that you worked harder/smarter than every person from your hometown who has seen less success than you? Because I'd find that highly unlikely. It certainly wasn't true for me.


> Just to be clear, are you arguing that you worked harder/smarter than every person from your hometown who has seen less success than you?

Yeah I'm arguing that. I used to try to help these people. I spent a lot of time doing it in fact. I would try to teach people in my town about computers but was told it was "geek stuff". I would try to get them to read books but again...that's for the nerds. I'd try to tell them there's more to life than football (was told there wasn't). I would tell them that maybe it wasn't a great idea to use crystal meth (this was before they all got hooked on opiods). I'd tell them that joining the military wasn't a path to success. I would tell them that they shouldn't be afraid of people from other cultures and that maybe they could learn from them and teach what was unique to their culture.

It all fell on deaf ears or was met with overt hostility. Even when I started to become successful and it looked like maybe some of this geeky stuff was actually valuable, all I got was anger for "abandoning" my roots. So at some point I just said fuck it. They don't want help. They are lazy and afraid and if you try to help them they will bring you down too.

Fast forward 20 some years and I see very privileged, successful people (such as yourself) making very well meaning but very misguided arguments about how to help underprivileged people. Do they, I and nearly everyone else face some systematic biases? Yes!! I've hit multiple glass ceilings and currently reside at one I don't have the energy to break through. That's not the main problem though. By far the biggest thing holding people back is their own fear of trying to succeed and the lack of strength to stand up to their own community who holds them back.

I don't know your background, but if it were practical I'd suggest actually going to live with some poor people. I think you'll find it's not the "myth of meritocracy" or the "patriarchy" holding them back. It's for the most part their own bad habits. I think most people who have escaped poverty would agree.


>Yeah I'm arguing that. I used to try to help these people. I spent a lot of time doing it in fact. I would try to teach people in my town about computers but was told it was "geek stuff". I would try to get them to read books but again...that's for the nerds. I'd try to tell them there's more to life than football (was told there wasn't). I would tell them that maybe it wasn't a great idea to use crystal meth (this was before they all got hooked on opiods). I'd tell them that joining the military wasn't a path to success. I would tell them that they shouldn't be afraid of people from other cultures and that maybe they could learn from them and teach what was unique to their culture.

And every person in your town was like this? You were the valedictorian of your high school and worked jobs on the side to make money because your parents didn't but you needed to be able to take care of your sister and keep the lights on anyway.

>I don't know your background, but if it were practical I'd suggest actually going to live with some poor people.

Aren't you the one assuming things now? I've lived with and interacted with some very-not-well-off people, more similar to the crystal meth hooked in-and-out of jail people you describe than you might at first think. Some of them are even relatively successful now. And yeah it absolutely took hard work and determination and grit in every case. But that's not all it took, for any of them. They all got lucky breaks, and they mostly admit that readily. I'm not as naive about this as you want to believe.

I mean, to be clear here, you appear to have had reliable access to computers 20+ years ago. That's a huge advantage over many people. And don't get me wrong, I don't mean to belittle your success, success is a good thing. But you seem resistant to recognizing your biases. Biases that everyone has and that are well documented. I don't really know why that is, but the fact that you picked that specific line to target, and ignored everything else I said is revealing. That you think hard work is all it takes is, if nothing else, naive.


Yes, my town was a hellhole and very, very small. I'm the only person who has achieved professional success. Most are dead, in jail or hooked on drugs. My relatives included.

> You were the valedictorian of your high school

No, I was a very poor student as I knew back then that school had little to do with success.

> worked jobs on the side to make money

There were no jobs in my town.

I admit I'm making some assumptions about you since I've literally never heard a poor person say the things you're saying but many, many middle-upper middle class people say them. I could be very wrong though.

> you appear to have had reliable access to computers 20+ years ago

My school had some very dated Apple IIes. The rest I got from magazines and library books. If there was a privilege there it was that I was alive at a time that booting up a machine dumped you into BASIC.

I'm 100% sure I'm biased. Everyone is, including yourself. Our conversation has drifted far from the original topic but I do appreciate you taking the time to have it. I don't think we could ever agree on many of these issues but its interesting to see them juxtaposed.


>No, I was a very poor student as I knew back then that school had little to do with success.

See, this is the kind of thing I mean. This is essentially a post-hoc justification of your success. Why did you "know that school had little to do with success". Why didn't your classmates? Did the valedictorian also end up on drugs and in jail? Or did they just end up less successful, despite working hard?

I mean I can actually take this same argument and apply it to some absolutely terrible choices: "I knew school had very little to do with success, so I decided to forgo school and start hustling and selling drugs at a young age, and here I am now an upper ranking member of a street gang, by many measures a fairly successful person". It's not like everyone who does the first does the second. A lot of them end up dead or in jail. But given what you've said so far, you would believe that individuals should follow that advice.

And if that's not the case, I ask what the difference between

> Take my advice, ignore your schoolwork and work with computers instead, you could become a millionaire, just look at Bill Gates!

and

> Take my advice, ignore your schoolwork and start selling drugs instead, you could become a millionaire, just look at [insert local gang leader or dealer]!

I could be wrong, but it really sounds like you're looking at your past through rose colored glasses. And as a result of this, you ascribe your success more to the "smart choices" you made than to the "lucky choices" or "lucky breaks" or "random opportunities" you got. I'd suggest you go out and look for people from similar backgrounds who made similar choices to you, I think you'll find it will be sobering how many of them didn't find success, despite the hard work, and that you're luckier than you think. Heck, I think if you really try and take an objective look, you'll find that some of the people who you feel like made worse choices than you were more similar to you thank you think, but didn't get the same lucky break.

Just in general, I think it's a good idea spending more time listening to unsuccessful people. It reminds me how they're not so different from me, and that's why I think privilege theory is both important and often correct. I hope you take the time to do that too.

Edit: I also think you're misunderstanding my use of the word bias in this context. I mean "evolutionarily hardwired to view things through a certain, objectively wrong, lens". See my earlier citations for how that reveals itself, but the result is that you, like everyone, are likely to take more credit for your achievements than you objectively deserve. This isn't unique to you, but it means that I basically have to take your entire description of your success and everyone else's failures with a grain of salt.


Your assumptions about me are pretty off base and that’s the problem. You’ll never be rhetorically successful by invalidating people’s personal experience. I have a lifetime of making decisions and viewing their outcomes to draw from. You have theory. I can look at what works for me, do more of it and see it pay off. I can see people do the opposite and fail.

This is why I think the concept of privilege will never grow beyond the people who already believe in it. It’s just too smug at its core.


>I can look at what works for me, do more of it and see it pay off. I can see people do the opposite and fail.

And this is the fallacy in your thinking. I can find people who made terrible choices and became more successful than you. I can find people who made similar choices to you and are much less successful.

If that's all you do, then plain and simple, your experiences are invalid. They don't matter. They're not data. And anyway, you're already successful now, so your choices practically don't matter anymore. Success begets success.

To put it simply, you need to accept that there are people who made good choices as you did, and aren't successful despite their hard work and good choices. Because that's fact. That's the world we live in. That's not smug. It's a hard pill to swallow, sure and I don't really blame you for refusing to. But there's nothing smug about it.


Do you really believe that nothing we do matters? That it’s all a roll of the dice or uncontrollably riding the waves of systematic oppression and privilege?

I don’t see how that’s useful. Yeah, life is not always fair but if you don’t believe in free will or that you can actually have some impact on your own existence, then what’s the point of even living it?

And let’s be real, if you’re good at what you do, you’ll be fine. Every good developer can get a job. That’s the economic reality we live in. People are capable of achieving that with hard work.

Like you said though, it doesn’t matter. It worked for me and it worked for millions of other people so whether you think that was luck, privilege or something else it doesn’t impact my success. What you may accomplish is encouraging people who could help themselves to not do so. Probably not even that though because the kind of people who can help themselves are already used to ignoring the naysayers.


>Do you really believe that nothing we do matters? That it’s all a roll of the dice or uncontrollably riding the waves of systematic oppression and privilege?

No, and this is the second time now that you've made a ridiculous strawman out of my statements. I'm saying systematic oppression and privilege matter and have an impact. This is opposed to what you said which, if I understand correctly is "work hard and you'll be successful, no matter the situation". When I say "no the situation matters too", you manage to interpret this as some kind of fatalistic "everything is predetermined" argument, which it is not.

To be clear, I'm not saying that privilege is the only component of success. I'm saying that hard work is not the only component of success. So far you seem to be interpreting the second as the first.

Perhaps if you actually tried to understand what I was actually saying, instead of going out of your way to misinterpret it, you would realize that it wasn't as much nonsense as you think.

>And let’s be real, if you’re good at what you do, you’ll be fine. Every good developer can get a job. That’s the economic reality we live in. People are capable of achieving that with hard work.

There are a lot of people that don't have the means to "become a good developer". I'll agree that good developers can get a good job, but for a lot of people, there aren't enough hours in the day to do what you handwave away as a given.

>the naysayers.

What, specifically, am I doing that is naysaying? Is saying "your success is a product of both your hard work and your circumstances" naysaying? Really?


You say this:

> To put it simply, you need to accept that there are people who made good choices as you did, and aren't successful despite their hard work and good choices.

I 100% disagree. If you make good decisions and work hard you'll be more successful than you would have been without doing that. If you study something with economic value, you'll get to participate in that value (if you're good).

I've never seen someone who is actually good at what they do (if it's something that's valued economically -- I've seen plenty of poor but skilled musicians for instance) live in destitution. Not once.

> There are a lot of people that don't have the means to "become a good developer".

There are people who don't have the mental capacity to do it yes, but I accept that and have no problem with it. We can't all be successful, utopias are a fantasy. I'm talking about the people with the capability to be successful. They should work hard and not give a moment's thought to anyone telling them to "check their privilege". It's a pointless exercise, you don't owe anyone an apology for doing well.


> it seems almost built to shame people for having more due to circumstances

That's quite literally what it is. I'm not particularly Christian, but at least it doesn't make me pay for the sins of the father unlike whatever this new orthodoxy is.


Some people use it as a shaming device, which is rarely constructive.

Many, many others simply use it as a means of gaining a better (more compassionate) ethical understanding of the world. Unless you subscribe to a Rand-ish "altruism = bad" ideology, it's perfectly possible to understand contextual factors that you benefit from, understand that others do not, and--even if you don't actively spend resources to improve that system--at least keep its existence in mind when interacting with others and understanding the world. None of that requires you to feel shame.

It's like going up to a random person at an international airport: knowledge of the existence of other languages means you don't automatically assume that person speaks English. You don't have to be ashamed of speaking English, or learn their language, but knowing why they might not understand what you say to them can sure help you avoid being an ass.


What about original sin?


The difference is that others' lack of access to the Louvre or the beach isn't preventing them from feeding their families.

To a degree, we should feel bad for having access to capital when there are far greater needs for this capital elsewhere. Most of us don't have any real power to change the situation unfortunately. But it is definitely something to be conscious of and you should reflect on what you can do to help turn the tide for those less fortunate.


How bad should I feel exactly? Is this equivalent to murder? Had we foregone some luxury many could be saved from starvation.

I don't even really disagree, but the weight of the burden you assume responsibility over is very great. Why not devote your entire life to helping others if you are responsible for them, consume no luxuries, or anything but the most basic of needs.

I'm sure you could save thousands.


That is my end goal. My best chance at having a lasting impact on society and this world requires me to first accumulate more capital before I can help. If I spend everything helping others now, then I won't have done all that much, and chances are it won't be a lasting change.

It is important to be aware of your place in society. I am a 28 year old white male with only a handful of years of professional experience. I am benefiting from the past and present exploitation of others. But within this privileged class I am not so high up on the totem pole.

By working my way up the totem pole, and always looking for ways to help, I will find myself in a position to make a real impact. And if not myself, then hopefully my children.

It makes sense to enjoy your prosperity to the extent that it allows you to continue progressing toward this goal. In order to climb the totem pole, you have to spend money on luxuries. You have to wear expensive suits and go to exclusive parties.

At the same time, there are always things you can do to help right now. For example, I tip service workers well as they need the money more than I do. I give change to beggars and those who find themselves in tough spots. I also make an effort to spread the perspectives of those less privileged than myself as I've found that straight white males pay more attention to other straight white males.


Are you saying that you think you will be able to climb faster than everyone else and when finished (when are you rich enough btw?) be better at making an impact than all the other efforts trying to change the world?

At least be honest. It's not that it's the most efficient way to spend your money; you simply want to be the hero. While letting your spare coins trickle down to those below. And it's ok cause you'll pay back later. Maybe through the next generation even.

But perhaps it was I who missed the irony?


I don't have to climb faster than others, but I would like to peak in wealth and influence before I come up with my own ultimate plans. That will likely be around the age of 50 or 60.

We must all do our part to look out for others. I give away whatever I can afford to friends and family who are short on money. I accumulate relatively little compared to my earning potential. But I am also laying the groundwork to help others further down the road.

My influence comes from being born a straight white male to a wealthy family in a wealthy nation. I am educated and practice an in-demand vocation. I command a high wage on the labour market, and this allows me to accumulate capital faster than most people. A factory worker makes less than a third of what I do per hour. So I can make a larger impact than them.

Most people do not earn enough to accumulate any meaningful capital in their lifetime. I am more privileged than most, and of course, less privileged than others.


> But I am also laying the groundwork to help others further down the road. > I command a high wage > [I] accumulate capital faster than most people > A factory worker makes less than a third of what I do > I can make a larger impact than them > Most people do not earn enough to accumulate any meaningful capital in their lifetime

You are presenting pretty much every argument i can think of for why it's a problem that wealth generates wealth. That the very fact that you earn more than others is what prevents them from accumulating meaningful capital. Yet i don't see you fighting for wealth redistribution, which is a proven way of making an impact.

If you had said: "i believe i earn more than i deserve", "i have mostly been lucky", "hard working factory workers should earn more", or "free healthcare and education!", i might have believed that you planned to fight for making people who are rich like you at 60 slightly less rich (relatively). But you didn't. So i maintain my position that you should at least be honest.


I think it's kinda pointless to "feel bad" about something we have no control over (while we could not take the job, we definitely can't give someone else our seat). It's mostly just unhealthy.

Much better to support political movements trying to help spread the wealth and donating money to things that advance the public good in the mean time.


It is useful to feel bad so that one can change what it is they can about their situation that causes those feelings. But to continue to feel bad beyond that, yes I completely agree, it is of no use.


I don't understand the self-loathing that is so popular these days. Somehow we've convinced a generation of perfectly decent human beings that they are "exploiting" the weak and that their "privilege" is oppressing the rest of the world, just by going about their business.

You're a programmer. Maybe you're decent, maybe you're not. It is VERY unlikely that the "millions and millions" of "infinitely more talented" Eastern European/Indian/Chinese programmers you mention actually exist. And even if they did, there are many societal and economic reasons besides "US Immigration Laws" that would prevent them from coming here and taking your job for an order of magnitude less money.


Truth be told, most software development doesn't require a high amount of intelligence, skill, or innate talent.

I'm not afraid of a superior person taking my job. They would be no better at it than I am. I would probably be more productive if I were less intelligent (or on booze, but employers frown on that).


I don't know what type of code you write, or where you went to school, but I had a professor who actually put the exam score distribution on the whiteboard after each test in a second level CS class, and the bimodal distribution was stark. And these are people motivated or interested enough to spend their academic career pursuing it beyond intro level washout.


This is wrong. Even simple software requires a radically different way of thinking than the way most are trained. I've taught 6th graders how to code and it is clear that the way of approaching problems and creating solutions (i.e. creative thinking, intellectual curiosity, and willingness to collaborate and ask questions) really separates the students from who "get it" and thse who don't. Don't sell it short because the industry has made tools and languages that abstract over some of the simpler concepts for entry-level tasks.


Perhaps he means in relation to other careers? As someone who is both a software developer and a farmer, software isn't exactly easy, but in comparison to the knowledge and skill required to farm successfully, it is a breeze.


This is quite interesting - I'm actually quite curious about what makes farming more intellectually challenging and difficult than programming, especially from somebody who does both. (Honest curiosity!)


I would imagine it's the constant problem-solving with real-world, "dirty" problems. You can't take the fact that your crops are failing through a debugger and reason about it line-by-line. You can't quickly run another simulation. You can't insert a single solution at one point and know that it won't affect the rest of the application.

Your answers are always based on fuzzy data, experience, and intuition. Your solutions will always affect the local ecosystem of the crops, and cause hard-to-predict chain reactions.

...but I'm not a farmer, so I'm just guessing.


I suspect it's that and so much more! There's a huge science aspect to it now; and every year there's new pesticides, new seed varieties, crop-rations, yield techniques, etc. Not to mention the huge complicated business and tax bureaucracy that is modern farming. I'm sure this is only a small slice which is why it would be great to see more.

What I don't have even a sense of is how much of a daily concern a lot of this is or if it's a once-a-year kind of thing, or how much of it impacts somebody who "only" farms to support his family and may only have 1-2 workers versus hundreds.


That is a good question. I'm not sure how well I will be able to put it into words, but I'll give it a go! For what it is worth, I have a grain farm, so my perspective comes from that type of operation.

A big one is simply the breadth of the subject matter. To me it feels like learning to program, forgetting everything, and repeating several more times. You have to know about plants, chemicals, machinery, computer technology, business, just to name a few. I don't think you need to be a expert in any of those things, but it seems to me like the most successful farmers approach being that.

Every year is different. If you've built one CRUD app, every CRUD app is going to come with a similar set of problems. If you've grown one field of corn, who knows what next year will bring? I've been farming for more than a decade now and I still encounter situations that I've never seen before. Luckily, which makes it much less of a challenge, but might be interesting being that I'm the sixth generation to work my family's farm, I can ask family for advice and you get the "Well, back in '72 it was like this and we did that." Still, there is lots of problem solving to do. In that respect, it is a lot like programming.

What is not not like programming is an answer for everything on the internet. I truly miss that. While programming, if I have any kind of mental block, a few minutes on Google will turn me right around. On the farm, family is an amazing resource, and there are plenty of academic and other professionals available to be contacted, but it's not the same. Programmers are incredibly fortunate!

I'll just throw in that farming constantly makes me feel dumb. Still, after a decade at it. Not very quantitate, I know, but it's a feeling I have never experienced in the same way as a programmer. I'm sure I could go on, but I have to move on to other engagements. I hope you found this interesting.


Thank you very much for the thoughtful response! The parallels are interesting. Farming sounds a lot like writing assembly! Start over every time, have to know about wildly arcane and disparate concepts, hard to get help except from somebody who has encountered something very similar perhaps a long time ago, and takes many years to feel productive.


My grandfather was a farmer. By necessity he was also forced to become a competent mechanic, carpenter, electrician, and plumber (did I miss any?).

Farmers are the most self-sufficient people you'll ever meet.


They've always been (incorrectly) characterized in what I've seen in media/pop-culture as hardworking but relatively simple. The more I learn about the difficulties of modern farming and what it takes to succeed, the more respect I have. I'd love read a blog from somebody with career-level experience in both software-engineering and farming. I'm sure I/we could learn a lot.


Business person, maybe economist when you take into account prices for crops and deciding what to grow.


I disagree, GP is absolutely correct. The reason people think that programming or software engineering is hard is because they were told that it is hard. US and the West in general has this strange culture where those that are supposed to know (teachers, parents, professors) like to tell those who are learning (students, children, etc) that whatever is done is hard. Math, apparently, is hard. Algebra is hard. Trigonometry is hard. Geography is hard. Physics is hard. It does not matter what it is - if it is worth doing it is all "hard".

Students that "get it" are the ones who managed to ignore the "hard" label. That's it.

In the industry I keep hearing that everything is hard:

Dev: "Logging is a solved problem at the rate we are looking at - it is what, 100 messages per second?" VP of Eng: "I dont know man. Logging is hard. We should outsource it."

SRE: "Just build images and spin them up" CTO: "That's hard. We should outsource it"

Dev: "Lets fix this reliability issue. We keep getting disconnects and it does something wacky to our API" CTO/VP Eng: "That's hard. Lets just see if we can spin up enough instances not to notice"

Most of stuff that we do is not hard.


Algebra is hard - it's an abstract problem-space. It takes learning problem-solving! I've seen brilliant middle-school kids struggle with it because it's a way of thinking that has to be learned. Don't cut yourself or others short by saying these things you think are easy are easy by their very nature.

Doing any of those things you describe with effectively in a mid/large-scale engineering organization with many competing tech priorities is not something an amateur or simpleton could do with any real success. I can put seeds in the ground, but that doesn't make me a farmer.

But also - maybe larger point - many of the things that are not coding/math/science are also quite hard. My father fixed auto-bodies for a living and he made some incredibly difficult, detail-oriented, craftsmanship tasks look dumb-simple. He asked me to tape off a car once so it could be painted - something he thought a 13 year old should be able to do because it was "so easy" was a complete disaster. He forgot how second-nature it had become to him.

So..just because you think it's easy doesn't mean it is. And just because it's hard doesn't mean it's fairly characterized in popular-opinion as being as hard as it actually is.


I completely disagree. Every single subject I've ever struggled with in a school setting was described to me as "No don't worry, it's actually really easy" which was a problem.

If I'm struggling to understand something that is so easy, maybe I'm just dumb.


I think software development is hard, but not because the subject matter is intrinsically difficult. (Sometimes it is, but usually that's not the primary reason.) It's hard because we've invented a mountain of little annoying problems with little annoying workarounds and it takes decades to learn most of them in any particular domain.


Does it have to be though? I'm sure reading/writing were thought the same for women/blacks/etc.. at some point in history.


I suspect I'm ideologically closer to you than to some of the more libertarian commenters on this thread, but that comment is both a false comparison, intensely reductive, and, I think, needlessly divisive.

No-one is arguing that certain groups have greater aptitude or learning ability for programming; they're arguing that certain individuals might differ.


Seriously. A lot of comments in here are "Well it's hard so we deserve it!".

There are thousands of developers making fractions of what their equally talented counterparts make in the US.


Offshore developed code is not usually the same quality. Not that we all deserve huge salaries, but code quality important.


Let's ignore the fact that this may or may not be true (offshore code quality is bad) and just assume it's true...

Why is offshore-developed code not the same quality? What is it about living (growing up?) in the US that has developers producing higher-quality code?

I highly suspect that it's merely selection bias. US companies outsource offshore to save money and when your goal is to save money you've already decided that "the best" isn't really what you're going for. So the code we--as US-based developers--see from offshore development often looks like barely-working garbage.

Yet if we look at open source code written by offshore developers it's often of high quality (i.e. higher quality than the crap we see in the world of Enterprise software). Why doesn't it match our experiences with commercial software development?

It probably has a lot to do with incentives. Open source software is often developed for pleasure or as a learning experience whereas US companies outsourcing software development aren't exactly "driving excellence."


I would imagine among most companies the cheapest option is not the one they go with. It's not a new business concept, cheapest thing is not usually what you want.

I would also be curious what the relative salaries are, e.g. food and shelter are usually much cheaper in foreign countries.


"Offshore developed code is not usually the same quality."

American exceptionalism and absolutely wrong.


Outsourcing creates all sorts of new project planning and communication challenges that most companies are not accustomed to managing. Add in significant timezone offsets, language and cultural barriers, lower communication fidelity and often a tinge of resentment and you've got a recipe for low quality if the project is completed at all.

I don't think this has to be American to be true.


I think, for many of us, our only experience with offshore code is with the bottom dollar coding sweatshops, which are universally shitty.

I have no idea what % of offshore code work that represents compared to just a regular consulting firm that happens to be located overseas, or a branch office of a company located in another country.


I speak primarily from experience.


As an "offshore developer", I have worked on multiple US projects with low quality code written by US developers.

Should I assume that American code is usually low quality?


Not at all denying the existence of low quality programmers in the US, but generally it seems like there is a focus on quality that does not exist for the majority of offshore developers, just about churning out code as fast as possible.


I feel like I miss a part the meaning of "offshore" here, and I suspect it's more cultural than a linguistic problem. I mean, technically, German or Japanese developers working for US companies are "offshore" too, but I don't believe you're accusing them of "churning code without regard to code quality"?

Oh, and also, both the previous paragraph and your comments in the thread are (edited:)nationalist[1]. Not that it's not fun to use stereotypes and a few anecdotes to form an opinion, so don't mind me, just noting.

[1] Not sure if it's the correct word, I mean discrimination by ethnicity and nationality.


It is not, shockingly, racism does need to involve race.

Nor do I think my nation is the greatest, and all the others suck. So I don't think it counts as nationalism.


Yeah, sorry, I'm not actually well versed in these matters (of discrimination, never needed to be), I couldn't find the correct word.

Anyway, you do attribute certain characteristics to members of whole nations without any kind of proof (beyond what "everybody [in the field] knows"). I believe you shouldn't, and that it doesn't matter if the characteristics are positive or negative.

In reality, there are both good and bad programmers everywhere. That you ended up working with the bad - or maybe ill-incentivized due to some circumstances - programmers from here or there does not mean that there are no good programmers there or businesses that care for quality. It just means you didn't meet them.


> Yeah, sorry, I'm not actually well versed in these matters ...

Perhaps you should not be accusing others then if you aren't even certain what you're accusing them of.

> Anyway, you do attribute certain characteristics to members of whole nations without any kind of proof

Homogeneous groups of people often share similar attributes, I don't see what is incorrect or wrong about that.

You are correct though, I do not have proof, but it is something that I hear from and discuss with colleagues, as well as have observed myself.


> Perhaps you should not be accusing others

I said I'm sorry, and I edited the comment. This is, however, a detail - that you are unjustly discriminating, only on a basis other than race, I stand by.

> Homogeneous groups of people

Assuming homogeneity of any group of people is almost certainly wrong.

Why don't you substitute "black" or "Hispanic" or "Jewish" for "offshore" in your arguments and see what happens? Would you be able to leisurely write that, in your opinion, "black programmers are sloppy and only churn code as quickly as possible"?


Does this focus exist for the majority of US developers or is it about churning out code as fast as possible?

You can also hire the better part of offshore developers if you'll pay just a bit closer to US rates. I saw the situation "$15/h developer failed everything, help us $35/h developer!" quite a lot in Russian-speaking freelance communities.


this is not true. perhaps just bad luck. i've worked with developers in other countries that are at least as good as any american developers i've worked with.


> Should I assume that American code is usually low quality?

Yes. It usually is.


You could quite simply expand this to The vast majority of code is of very low quality


Are you including Canada in "offshore"? Europe?

That is implied, from the comment you replied to. You may need to rephrase.


The majority of offshore developers I have worked with have been from South America, India, and Eastern Europe.


Anecdotes are not data.


To be honest I thought it was common knowledge, but I assume there exists no such study of code quality between countries.


Offshore developed code, when created using a similar process and for similar cost to US developed code, is usually of comparable quality.

You can get ridiculously poor quality of code by paying bottom dollar and failing to properly communicate with your developers, no matter what country those developers happen to be situated in.


I don't think that the code created for example at Google Warsaw is worse than code created at Google Mountain View (you can even check yourself, people in Warsaw work on Kubernetes, which is open source). And yet, the Warsaw salary is maybe 30-50% of the salary in MV.


Great example, very representative. Largest global tech company vs. your average offshore developer.


I don't know the situation in other countries, but in Poland Google's approach is rather typical. American corporations typically just set up an office here instead of buying services from some shady local offshore company. I don't see much of the latter around (and incidentally, the big ones are American as well - IBM, Accenture etc.)


But wouldn't you live a whole lot better in Warsaw on 50% than in Mountain View on 100% of that relatively high Google salary?


Depends on what do you mean "live better". iPads, cars, plane tickets, electronics and other luxuries aren't cheaper in Poland than they are in US. You might "live better", but you also might never be able to visit Hawaii or drive a Tesla.


By live better parent commenter almost certainly meant make more money.

Even if luxuries are not cheaper, food, shelter, healthcare etc. are, freeing up more monies.


Depends on your living situation. If you want a house in the suburbs with not terrible commute, it's going to cost you $200-400k in Warsaw vs probably three times as much in SV? This (and higher taxes in the US) can probably consume a lot of the salary difference. But, on the other hand, if you're ok with living in a small studio, you're going to make bank in SV.


>Offshore developed code is not usually the same quality. Not that we all deserve huge salaries, but code quality important.

Cheap offshore developed code is usually not the same quality. Pay people the same and it's amazing what you'll get.


Are offshore developers not being payed competitively to their local rates?


I assure you there's plenty of native code that is the same quality.

I write a lot of it professionally.


Quality declines as the gap between customer and devs increases.


This is true. I recently applied for a job in the US and one in the UK. In the US, I got a ridiculously good salary offer. The UK job's compensation was maybe half what the US job offered. My cost of living is also lower than the folks in London, so it's just perverse no matter how you slice it.

I honestly don't think it will last, though. Economically, it just doesn't make sense. My recommendation to any of my fellow US developers: save as much as you can while the money is good.


To be honest, I think if anything the trend will continue and the salaries will go up. There will still be a shortage of highly skilled developers who demand higher salaries. At my company we've been trying to hire a senior frontend developer for the last 6 months; it's hard, especially outside of major tech areas. Most people come unprepared, lie in their resumes, and suffer intensely from the Dunning Kruger effect. I don't see this trend of lying to get the job that pays good money to stop anytime soon. Out the 1.6M programmers employed in the US, I think a large portion still have the job because companies are desperate to hire, but don't know how hire for this industry.


I disagree, but time will tell. I think that at some point companies will realize that it's 2018 and remote work is a (mostly) solved problem. Once that realization hits, the high salaries are going.

I've worked remotely for the past 3 years. If you're open to remote work, the challenge isn't finding qualified employees. The challenge is turning off the firehose of qualified applicants once you post a job listing.


Have you seen the revenues? Have you seen the stock prices? Besides that they obviously can afford to keep raising salaries to compete with each other, they also have to keep raising salaries to compete with the devs. Market entry has such a low barrier, they have to essentially pay every developer to not simply take their knowledge, walk out the door, and set up their own shingle.


US Tech also makes a lot more money than UK tech. Starting with the big ones, ending with the amount of investment funding the area has.


> U.S. immigration laws act as a protectionist barrier to prop up programmer compensation

It's almost impossible to immigrate to England (much harder than the US), yet programmers in SF are far better compensated than those in London.


> It's almost impossible to immigrate to England (much harder than the US), yet programmers in SF are far better compensated than those in London.

Immigration per se may be hard, but working is much easier than the US; I know several Romanians working as programmers in London.


Immigrating to the UK from Romania (or the rest of the EU) is extremely easy.

1) Move there. You can do this even without a job.

2) Book an appointment with the Job Centre (usually used by people seeking work), where you must show your passport.

(Start work if you like. Your employer may ask to see your passport, if you don't yet have the tax number.)

3) Tax number arrives a week or a few later; tell employer.

The process is actually the same for British citizens without a tax number, e.g. a child born abroad who moves "home" to the UK.


Someone in my family has fought for the US in every war since the civil war. They have fought, bled, and died for this country, paid taxes, and helped build it from a weak country to the most powerful civilization in human history. They did it because they wanted their children and grandchildren to have a better life. Why should I feel guilty about this?


Because you did absolutely nothing to earn having good family members?

Most people feel at least sheepish about their own success when faced with others, no less deserving, who experience failure.


This is a quasi-religious reversal of cause and effect. Parents create children. Children aren't assigned parents. People - real flesh and blood people, not abstractions - devote an enormous amount of their resources and waking life to doing the best possible for their next generation.


?

You're the one reversing cause and effect. As though I should feel proud and deserving that my ancestors (who, mind, I had nothing to do with) worked hard, got lucky, and gifted me remarkable advantages.


The point is that millions of people made sacrifices for themselves and their families which cumulatively created the greatest civilization in history. Why should we feel guilty about reaping the benefits of those sacrifices? Why should we feel obligated to hand over our prosperity to those who contributed nothing to it?


Don't feel guilty, but realize that you're not entitled to what you have - you got lucky being born to parents who worked so hard etc. Continue to work as hard as they did and appreciate their work.


The only thing talking about privilege does is create a game of one-upmanship where everyone tries to tear others success down.

I would argue everyone is privileged to some degree. Hell, being born in a first world country makes you way more privileged than most of the world.

And yes, there is luck involved, but hard work plays a massive role in outcomes. To ignore that is folly.


> realize that you're not entitled to what you have

That's ridiculous. The fact that his parents worked hard is what entitled him to the life he has, all the way up the chain to the ones that emigrated to America and earlier. This 'original sin' stuff that people are trying to push just because we are born in the US is crap.


People all over the world work quite hard. Yet, their families don't get anywhere near the benefits that some others do.


They haven't lost them at the expense of those others either, though, nor would the people who have more likely have received it if the people who had to work for them knew that they would be whisked away in large measure to iron out every last inequality.


I'm not super interested in debating this philosophy and your response reads to me as pretty flippant and entitled, so I'll bow out. I hope you receive everything you're entitled to.


I don't understand why you're "bowing out" instead of debating, if you have a strong case to make. What about the GP's post is factually incorrect?


You shouldn't feel guilty. The Privilege argument is a way for people to feel like victims instead of taking responsibility for their own destiny. Life is unfair and it's quite impossible to accurately distinguish all the ways life has been unfair to all the different people. Is a white person's privilege balanced out because they are a cripple? There's not scientific metric to measure any of this, it's the new moral fashion an nothing else.

Bring on the downvotes, I don't give a shit.


Down voting is one of the few powers some downtrodden people have in this world. You won't even afford them the satisfaction of at least pretending they hurt your feelings? ;-)


Ideally not. But then your government unilaterally decided that spreading American values, culture, and products is the best thing to do. And now a lot of people want to come here and experience first hand.


I'm fine with that, as long as they can positively contribute. I'm not fine with bringing in millions of people who immediately go on benefits while US citizens can't afford health care, college, and military vets are living on the street


The reason the US can't afford any of that is because it's not a priority. Every other modern country manages to pay for all that and now they are also putting up with large scale immigration such as with Syrian refugees.


> millions of people who immediately go on benefits

This is difficult in most countries and extremely so in the US. Which benefits? How do they prove entitlement to them? By what process are they entitled to them but the military vets living on the street aren't?

I'm not saying it doesn't happen, but I suspect it happens a lot less often than you think.

(also, you've done the old "Schroedinger's immigrant" thing: at the top of the thread we were talking about jobs, you're talking about benefits now. Who are these people who simultaneously go on benefits while also stealing your job?)


illegal immigrants drive down wages in low skill jobs which depresses wages up the chain because natives have to find more skilled jobs to retain their previous standard of living.

At the same time their children, whether "dreamers" or native born get free education and healthcare the average cost per student in the US is around 15k the highest in the world, which these kids receive for free despite their parents never paying into the system.

The end result is that illegal immigration costs US federal and state governments 85-100 billion a year.

I support highly skilled labor ie top .1% of worldwide talent, not unlimited immigration sponsored by corporations to drive down wages for US citizens, whether that be low skilled manufacturing or software engineering

http://www.politifact.com/truth-o-meter/statements/2016/sep/...

https://fairus.org/issue/publications-resources/fiscal-burde...


Those two issues are orthogonal. It's not people on benefits, immigrant or otherwise, who are causing skyrocketing college tuition.


>Another possibility is that U.S. immigration laws act as a protectionist barrier to prop up programmer compensation. It seems impossible for this to last (why shouldn’t there by really valuable non-U.S. companies), but it does appear to be somewhat true for now.

I find this quote confusing. Historically, the poaching of highly-skilled foreigners has been an important step in developing mere import substitutions into products which can be competitive on a global scale.

The Tudor government (Henry VII-Elizabeth I) kicked off its finished-wool-import-substitution program by poaching skilled weavers and machinists from the low countries (e.g. Flanders, Holland, France). Then, as the export of finished wool goods grew, so did restrictions on the exportation of raw materials and the importation of finished wool. Nearly 100 years later, England had the ability to drive European countries to famine by simply banning the export of raw wool.[0]

In the early 18th century, France started poaching British watchmakers, weavers and metalworkers; Britain responded by outlawing the emigration of skilled workers in 1719.[1]

With that context, I find it odd to hear that U.S. immigration policy has started to work in opposition to the what I believe is the largest benefit of immigration. What incentive is there to keep highly skilled workers, along with their advanced knowledge, out of the U.S.?

[0] - Chang, Ha-Joon. Bad Samaritans: The Myth of Free Trade and the Secret History of Capitalism. New York, NY: Bloomsbury Press, 2008. Print. pg. 40-42

[1] - Chang, Ha-Joon. Bad Samaritans: The Myth of Free Trade and the Secret History of Capitalism. New York, NY: Bloomsbury Press, 2008. Print. pg. 129


> And if the millions and millions of Indian, Chinese, and Eastern European programmers who are inifinitely more talented/driven/intelligent/educated than myself were able to simply move here and seek employment with no immigration restraints, I know that I would be out of a job instantly.

Couldn't you say the same thing about other professions?


Where's all the great Indian, Chinese and Eastern European software? Seriously wondering, because most software I saw from these regions was mediocre at best.

The whole world uses operating systems, browsers and development tools made in western countries.


The best ones are making all the software that western companies use. The US (coast) pays an absurdly average high salary as compared to other countries for CS roles.

Now, the quality of engineering education received at top CS/engg. institutes and a local college is night and day. This means that only a small subset of the graduating engineers get any decent quality of education.

Most of these people, often considered the cream of the crop are poached by the aforementioned western companies or go for graduate studies. Graduate institutes in India are underwhelming, so these students land up in the west as well.

The rest of the cream have to choose between software engineering roles that pay around $15-25k with very little vertical movement and business analyst/ consultancy roles where you might earn a bit more and have a much clearer clearer progression up the ladder. These are often referred to as the MBA crowd.

Look at people like Sanjay Ghemawat, whose achievements are as noteworthy as Jeff Dean, having been a fundamental part of developing MapReduce, BigTable, Tensorflow, GFS and Spanner.

It is actually a very ironic situation. One one hand the US is complaining about negative intellectual biases against Asian immigrants, while both the Indian and Chinese govt. are lamenting how they are losing the cream of the crop to the US as well.

If both are the be believed, India and China's best are leaving the countries, but the US is not getting competent people from these countries. So, I guess these people have vanished into thin air. In the mean time Chinese and Indians increasingly churn out ground breaking papers and research in CS.


My experience is that culturally, places outside of North America and West Europe have lagged in attitudes to software development. Tech is still referred to as "IT" and engineers are still seen as code-monkeys or a cost-centre.

This is very much changing, especially in China, but I presume there is still some lag. The other thing worth bearing in mind is that Chinese products are very insular. They are slow to get localized if ever so unless you have a reason to be going out to download them, you are unlikely to ever be using them.


> places outside of North America and West Europe have lagged in attitudes to software development.

This is right. From my experience working with an offshore team in India, the main problem is cultural. A large majority of the developers in India I've worked with have no interest in furthering their development carrier, but see it simply as a way to transition into management as fast as possible. In practice, this means that you can go from a junior developer to a project manager in the span of 2 years or so. 2 years is not enough time to solidify your knowledge and become the t-shaped programmer that this industry requires. I think one needs at least 5 years of work and experimentation in this field to reach the level where you can contribute positively to a company, without creating huge amounts of technical debt.


And with higher quality will come higher labour costs.


Eh, nginx? All JetBrains IDEs? Yandex still beating Google locally? Ukraine being a huge outsourcing hub for US companies? China having ten clones for every service blocked by GFW?


And where's the great German, English, French, Japanese etc. software? The truth is that the global software market is thoroughly dominated by American companies, probably in large part due to its unique investing environment (lots of VCs willing to take risks on startups).


The job of government is to represent the interests of its citizens. Purposely lowering the standard of living of citizens via unlimited immigration is a great way to get yourself out of office.


I think that’s a touch more complex a problem than you’re making it out to be.

Maybe you were born in the right place for the economical opportunity for someone born “lower” (please be generous with my terms here), but maybe it’s that these others were born “higher” to a place where higher education is easier to accumulate granting them a severe advantage competitively should you have to compete in an economic arena on the same level.

Or do we accept that being born to an economic disadvantage due to whatever factors mean you should be solely relegated to your caste of manual labour, service occupations, or direct servitude?

Second to that problem is what value does higher education really have in application in what are varied circumstances.

My understanding was the founding of the US was quite counter to that idea— and it’s one ideal that many countries have thankfully sought to incorporate.

Though I think you’re on to a problem—one that includes the consideration that current rules don’t exactly line up with the values we might wish to pursue as a (human, global) society. Partly because it might be necessary in what appears to be a period of transition.


Ask the other side of the equation: why don't their countries have well-heeled tech companies attracting capital and ideas with the same investment opportunity so that they can live a comparable lifestyle to you where they come from?


It seems like there should be more arbitrage? Google at least has engineering offices all over the world. If immigration barriers were the main issue, it seems like more companies should be doing the same.


I don't completely disagree with you, but software development as a job is not purely based on how talented of a coder you are. There are many, many other aspects to the job that really have nothing to do with computers/computer science.

Don't discount your other abilities that much.


Instead of worrying about potential foreigners competing for your job, you should wonder why there are so few jobs out there: it's because the rich are hoarding them. The money for them, that is. There is so much work to be done, plenty of work for you and your Indian and Chinese friends to all have well-paying jobs. The reason we all don't have them is that we are just extremely bad at allocating resources: we choose the most inefficient method, market capitalism. We, essentially at random, select a tiny group of elite wealth hoarders who centrally plan and distribute nearly all of the world's wealth without any concern for social good or welfare or anything other than their continued accumulation of wealth and power. Then we beg them to give us jobs, to give us their table scraps and we fight each other for them, terrified at any moment our benefactors might take away our livelihood instead of rolling up our sleeves and getting to work.


I completely agree that the main problem is lack of spending money in the hands of people who actually need it. There's plenty of work to be done, if only the people who need it had money to pay for it.

However, capitalism (in the form of Walmart and its suppliers, for example) does seem quite efficient at supplying material things to poor people. More spending power in the right places would go pretty far to fix the problem, along with boosting the economy.


Walmart's profit primarily comes from abuse of monopoly (which is not efficiency) and from government subsidies (they are the biggest welfare recipients in the world, since their workers require government welfare to survive while working so much for so little).

Their profits come from economic coercion and exploiting public subsidies, not efficiency. Walmart's primary competitive innovation historically was union busting.


"However, capitalism (in the form of Walmart and its suppliers, for example) does seem quite efficient at supplying material things to poor people. "

Does it? I don't know if I'd really agree with that.


https://ourworldindata.org/grapher/declining-global-poverty-...

Like it or not, the greedy evil capitalists are making the world a better place for all of us.


Again, are they? Define "better".


> it's because the rich are hoarding them

The enemy are not foreigners man, the enemy are the rich!


I think the reason for high compensations is that software is the enabling factor for capital.

If software can automate, reduce inefficiencies and generally be the means to accomplish the business goal, then it makes sense for the business side to invest heavily into what is essentially a competitive differentiator.

The bimodal compensation reflects a growing split between software activities that are seen as an necessary operational burden, and those which are the "secret sauce" of the business. That's why fintech has traditionally been the highest paying field, as the return on investment is the most obvious for them.

Edit: typo (thanks tzahola!)


This seems like a key component of the answer.

Of course, salaries are largely determined by the industry one is in. If you can position yourself at a place in the economy that attracts large amounts of money (per person) then you will be able to siphon off a relatively large amount for yourself.

As software embeds itself in everything we do, developer earning potential will reflect the industry one is in.

High tech firms like Apple and Google make huge amounts of money per employee, so people that work for them make huge amounts of money too. Not just software developers, but also people in sales and strategy, etc. Same for people in finance.


You meant "increase efficiencies" or "reduce inefficiencies".


I agree. I wonder why people do not make this correlation more often that cloud/fintech companies etc have likely put huge number of people out of work across the world. And disproportional chunk of that compensation has been collected by cloud companies and their employees.


I think the explanation for bimodal dev salaries is pretty clear, and is similar to the explanation for the bi-modality in Lawyer salaries.

Google, Facebook, Amazon, and whatever other big name you want to throw in the pot, are competing for developers. However, they are not competing for the same developers as Epic Systems, for example. FAANG (or whatever) are competing for a highly skilled subset of devs that can meet their demanding hiring criteria. Similarly, top law firms are only competing for a subset of all law grads -- those that meet their demanding hiring criteria.

The difference here is that, in law, that criteria is focused around a prestigious degree. Presumably, this is because it is hard to thoroughly test a lawyer's competency as a lawyer in an interview setting. However, in programming, many top companies, apparently, find that a series of intense whiteboard interviews are sufficient to determine whether or not a dev meets their high standard.

However, we also have a shortage of devs across the board, for all companies. If CS enrollment increased by 100%, then presumably the "lower" distribution of salaries would stabilize at a lower number -- probably close to what traditional engineers make nowadays. However, the salaries of the GooBooks of the world will only be affected if a sufficiently high proportion of those grads can meet a very difficult hiring criteria.

Similarly, law schools have seen a dramatic increase in enrollment over the past few decades. Lower salaries have stabilized, since the market is now saturated. However, the salaries for top law firms remain high, because a similarly low number of candidates meet their difficult hiring criteria: Harvard, Yale, and etc. are producing more or less the same number of law grads as before, with respect to demand.

This is why Google can open an office across the street from Epic and yet still pay devs twice as much. This is also why I don't think immigration is a huge factor. Sure, if companies were able to immigrate significantly more workers, then salaries at top companies might drop to a degree. But the real drop would be seen in the salaries of devs at typical companies.

EDIT: grammar


Lawyer salaries are bimodal for a very specific reason. No law firms really believe that a graduate in the top 9% is worth 160k/year, but a graduate in the 11th percentile is only worth 60k.

But they all have to pay the same because it's a signal to their clients that they are the best. If they paid less than their clients would consider their firm second tier not top tier.

And Google is hiring the same devs as everyone else. Having worked in a large company and seeing several people move to Google. They got some smart devs who stood out on their team, but they also got mediocre devs. The average dev they poached was definitely better than the average dev who worked there but it was a moderate difference in degree not kind.


Maybe, but top firms are still only hiring lawyers from top schools. And as far as salaries go, that bottleneck is the only differentiating factor.

You could also argue that maybe Facebook doesn't need devs to be able to independently produce Tarjan's algorithm while standing on their heads, blindfolded. But for some reason, these companies believe that it is essential. Maybe that's well-founded -- maybe not. But it remains the case.


Whatever Cravath pays, the rest of the Big-law-NYC industry follows.


I think skill differentials in programming is a contributing factor to the bimodal distribution. I think there's also another factor which is the degree to which one is an active "curator" of one's own career. I've known some devs who were quite talented but were perfectly content to stay at low-paying jobs where the value they generated for their companies for developing CRUD or other low-multiplier apps was moderate. Others who were much more deliberate about developing skills in areas of software where much higher multiples were possible and choosing jobs strategically to build their careers made MUCH more money than the former despite not necessarily being more technically skilled. These latter developers are much more likely to be the ones working at FAANGs (or whatever) for $200k+.


Sure, and top companies are not necessarily discriminating amongst dev candidates based solely on technical merit. In fact, there are plenty of recent articles that claim that Google is looking for more and more "soft" skills in addition to high technical merit.

Point being, there are probably lots of factors that combine to make a candidate skilled enough to get hired at Facemazon. It's just that having that combination of skills is rare, so the salary gap persists.


Interesting to choose Epic as an example. In my exit interview there (leaving for SV), the whole interview was about how they could be more competitive when hiring against Google etc (obvious answers were vacation policies and equity, where Epic was woefully behind). So Epic is (or was, ~3 years ago) definitely competing for the same developers as those big companies.


I just chose Epic because the author did. I honestly don't know anything about it.

However, I do have to point out that it seems that Epic is trying to become more competitive with regard to that same subset of engineers that Google hires. Presumably, if they're trying to become more competitive, then they're not yet competitive. Either Epic will have to pay some engineers the same as what Google pays (including equity etc.) or they won't remain competitive for that small pool of devs.

Also, worth noting that I'm saying that as someone that was once rejected by Google on a first-round phone screen.


When I left Epic, they had just reneged on an equity compensation promise by issuing me some form of "shadow" stock tokens, because they didn't want to bring their number of real owners up past a point that would trigger automatic financial disclosures. I read the accompanying paperwork, and decided that I needed to kick my job search into an even higher gear, immediately. Just one of the many reasons I had for moving on. (2007)

At that time, they were not offering salaries that were even competitive with other companies in Madison. Never mind about Seattle or SV. I had four managers in 2.25 years, because three of them left for higher pay elsewhere almost as soon as they got promoted. I left the fourth for ~20% higher pay.

I would guess that any major tech employer could stroll into town and hire the best 50% from under Epic's feet in less than two weeks, while still saving money on salaries compared to SV. Queen Judy is not taking that company public, and would rather divert her profits to charity than to employees. There won't be options or RSUs. The only reason people might stick around is the cult-like atmosphere.


That's crazy. I knew that one of my college friends had interviewed at Epic as a new grad, but he didn't go any further with it. Sounds like a really strange company.

It might be the case that salaries won't become truly bimodal. It seems like there might be "tiers" of compensation which are based on levels of competition between similar companies. SV startups tend to pay less than Google or FB, but their compensation packages are typically within the same ballpark of each other. Perhaps the bimodality is most notable for new grads, since they typically don't get hired at mid/small companies.


>Sure, if companies were able to immigrate significantly more workers, then salaries at top companies might drop to a degree

Is this not the lump of labor fallacy?


Might be. I am not an economist. However, I think the rest of my point still stands without that concession.


I'm partial to the O-ring explanation. Software engineering is uniquely multiplicative because it's possible for a software engineer to create software that does software engineering.

Chemical/electrical/mechanical engineers can't use their field to automate their field. Doctors and lawyers are almost exclusively service jobs, unlike the manufacturing nature of engineering.

Automation is a force multiplier, and software engineering benefits from being able to create automation, apply automation to others, as well as being able to apply automation to itself.


Chemical/electrical/mechanical engineers can't use their field to automate their field.

A mechanical engineer designing a new manufacturing technique or robot is most certainly using their field to automate their field. Most of computing exists because electronic engineers used their field to automate their field. Software is not unique in this respect.


Every field is working to automate their field with the help of software. For which you need software developers. The article raises the question of why people are hired as software developers even if they don't have such a degree. Its because companies see it as an automation problem and not as a software engineering problem. That is also why quality or experience of the developer is irrelevant most of the time, there is no one else to judge it, so if its working then its working.


Every field is working to automate their field with the help of software. For which you need software developers.

Right, but let's be clear about our terminology here. Automation in mechanical/manufacturing isn't being done by CS grads with skills in RoR employed as software developers. It's being done by MechEng graduates armed with FORTRAN compilers who write a lot of code but don't consider themselves to be developers at all.


A rose by any other name would smell as sweet.

How different is a MechEng writing FORTRAN for mechanical engineering from a MechEng writing RoR for trendy widget bean button SV startup?

I'd argue they're both programming, which is sufficient to reap some of the benefits of automation. Software engineering can be described as applying engineering to programming. Any company that benefits from programming would also benefit from the increases in efficiency, reliability, performance, etc. software engineering would bring to programming.


How different is a MechEng writing FORTRAN for mechanical engineering from a MechEng writing RoR for trendy widget bean button SV startup

Because in scenario A the main skill being applied is mechanical engineering and in scenario B the main skill being applied is RoR.

If everyone who ever writes a line of code is a "software developer" would you include an Excel VBA 10-liner writer? Probably not, and nor would that person include themselves, they're an accountant (or whatever).


I don’t typically think of web developers as software engineers.

I think of work like FFTW and the Tensor Algebra COmpiler (TACO) as software engineering.


Whereas when I say "software engineering" I am referring to formal methods, or software components of engineered systems e.g. avionics. Nevertheless - the point is that lots of professions automate themselves. Now that I think about it even a doctor who invents a more effective treatment lessening the workload of other doctors is using medicine to automate medicine.


Not in the same way, or in the same ball park.

Mechanical engineering didn't have its Lisp. We do.


Mechanical engineering didn't have its Lisp. We do

The steam engine was more of a productivity multiplier than Lisp could ever dream of.


Steam engine unfortunately can't make itself. So.


You most certainly can use a steam engine to make it possible to make a bigger steam engine by driving machine tools. So.


Stream engine can't modify itself. Sorry. Somebody using tool A to create tool B, isn't what we are discussing here.

Tool A should modify itself to become Tool B. And Tool B should modify itself to become Tool C and so on...


Modify itself? OK, I will grant you that there are no sentient, self-aware steam engines.


> Software engineering is uniquely multiplicative because it's possible for a software engineer to create software that does software engineering.

I think you misunderstood the O-ring explanation by citing that idea as an example. It doesn't mean building AI. It applies to any of those fields you mentioned. Good people in field X work together with other good people in field X in top firms -> multiplicative productivity.


Who said anything about AI?


Most people would consider software that "does software engineering" AI.


A compiler is software that does software engineering. Saves a lot of time and effort.

Package managers, that used to be hard to do by hand.

Bundlers and linkers, that stuff used to need skilled engineers.

Many other examples


This feels like it could quickly descend in to self congratulation. So to cast this in a different light perhaps another way to think about this is that programming is just becoming a basic skill, like reading, writing, basic mathematics required for all disciplines.

Most dedicated software engineers exist because this new basic skill hasn’t yet gained widespread adoption as a basic skill in other disciplines. But with time it will, and the number of dedicated software engineers required will decline.


It takes a child several years in full-time education to learn how to fluently read and write. Basic mathematics takes even longer. Similarly, a typical person will become a skilled and highly productive software engineer only through spending several years working full-time at the profession, ideally with the assistance of one or more mentors. Having only a basic grasp of the concepts behind programming does not enable anyone to achieve anything particularly useful, and someone working in a different profession will not have the time or energy to acquire the skills needed to roll their own applications, unless they're an unusually dedicated hobbyist.


> Similarly, a typical person will become a skilled and highly productive software engineer only through spending several years working full-time at the profession, ideally with the assistance of one or more mentors. Having only a basic grasp of the concepts behind programming does not enable anyone to achieve anything particularly useful [...]

You can create basic good looking iOS or web or android app without all those years and be extremely useful. Many jobs and positions don't require years of study with mentors. Many self taught programmers started like that.

You can do basic data analytics and write selects without years or study too.

There is huge amount of positions that don't require years of study.


You can. Others cannot. I think you vastly overestimate the number of people capable of doing that.


> You can create basic good looking iOS or web or android app without all those years and be extremely useful.

We obviously have differing definitions of the word 'useful'.


Several years ago I worked in ad ops for one of the biggest publishers on the internet, making a bunch of ad placements by hand using Dart for Publishers, which was a dreadful product. I also was taking a night course in Java mostly for fun. At that point I didn't even know what functional programming, Big-O notation, or any of your other highfalutin' CS stuff was.

All of the company's ads (thousands of different line items at any given time) had been entered by hand in to Dart. Things like "make every add weight-based-bulk with weight 100", etc.

I wrote a craptacular Java app using Swing and the Dart API to get a handle on them. I mean - this thing was AWFUL. "Paste your username and password in to this box and type the name of the site you want to work with in that box and click something in this row of 14 buttons" level stuff. They used it to fix their waterfall.

The first month it was an extra 80 grand or so in revenue. The next month I had a new job.

This is based on what I learned in a few months of tinkering as a kid, and a few months of a Java course at Ohlone College in the east bay.

Perhaps you can provide your own, more helpful, definition of useful? Most of what's "useful" is taking something that was a pile of godawful spreadsheets and making it manageable; not something meant for consumers.


Doesn't your anecdote actually support my primary point, which is that a programmer with limited knowledge and experience will typically produce poor-quality software? (Or, to use your own terms, apps that are craptacular and awful?)

An application, in my mind, is truly useful when it not only fulfils a user requirement, but is also dependable, scaleable and maintainable. It's not best practice for a business to base a process around some jury rigged POS that will be thrown away in horror when an experienced developer eventually gets a look at it.

But hey, we can agree to differ on this.


Eh, it was dependable enough to make money. It scaled to the task at hand. It was maintained longer than the Dart API was since Google retired it months later.

"It's not best practice for a business to base a process around some jury rigged POS "

I suspect you'll find plenty of businesses jury-rig a POS first, and then only fix what needs fixing. Turns out most stuff doesn't need it.


For most companies, craptacular software is heaps better than what they already have (nothing). The point is, any newbie with ~3 months of training can write a non-beautiful non-scalable, line of business program that produces measurable value.


He produced useful, if poor quality, software. It did helped at a time and when it cease to be useful, it is small enough to be completely replaced with something else (instead of maintained).

It is ok to throw away things and not everything needs to be scalable.

It is also not best practice to base everything on the idea that everybody must be experienced senior to do anything. Many tasks are suitable for inexperienced juniors, because that is enough and it is small enough to throw it away if it goes bad.

The things that were most useful for people I worked for were not the things that were most difficult to create.


There is only one definition of the word “useful” that applies across the entire field: one whose output generates revenue for the company.


Defined as "able to be used for a practical purpose". Yes, companies need those apps and web pages and what not. They also need data analytics and what not.


> Having only a basic grasp of the concepts behind programming does not enable anyone to achieve anything particularly useful

This is absolutely untrue.

There are many many jobs that are effective people doing data analysis in excel spreadsheets.

The people doing this data analysis by hand can greatly improve their ability to do their jobs through simple things like learning how excel macros work. This is programming!

There are tons of low handing fruit in the world, where basic tasks that are being done by hand, could easily be automated by the people doing it, through very simple, easy, "toy" solutions.


I don’t see the equivalence. Yes, the skill you listed take some time to acquire. But few master them to a professional level, yet still use them regularly in their jobs.

I think programming is on the same trajectory. We might not even recognize many of the tools as “programming” (they might look more like spreadsheets). But I think general up take of programming skill will increase.


> Yes, the skill you listed take some time to acquire. But few master them to a professional level

So you're contending that few people can fluently read or write their own native language?


I’m saying that few people write as their sole occupation (novelists, maybe journalists etc). Others use it as part of their professional work, but it is not their sole professional work.

Similarly I’m suggesting software engineering will be part of many people’s professional work, but will be the sole professional work of few.


For programming you need at least someone who has no problems with algebra, that's a bit above the basic maths. I say that not because you will need algebra for programming but because you must be capable of manipulating abstractions.


Yeah, but the questions is if creating tools (software that does software engineering) is so complex that only a few developers can do it well? Otherwise this tool creation would still be subject to market prices just as regular development.


You are looking at differences between developers, but try pretending for a while that they are all the same, moderately qualified to adapt to any environment. I'm pretty sure that you would still see roughly the same distribution, since all environments are not created equal, and neither are the different positions inside those environments.

The stagnant bog of billing hours to captive (e.g. internal) customers for example does not lend itself very well to a toolmaking microsingularity. Bimodality of pay is at least as much about the task as it about the one one executing.

There is of course still a lot of correlation between ability and high value positions, but that's a natural consequence of matchmaking: both high value positions and high value developers get disproportional choice relative to their lesser peers.


I am too, and it seems testable, at least for large companies. Are the salaries bimodal within companies or not? If not, then the hypothesis would seem to hold water.


A good answer to why software pays more than industries like law or medicine is that profit per employee in software is enormous. Of the 12 American companies on this chart of the highest profit per employee, 6 are software companies: http://www.businessinsider.com/apple-facebook-alphabet-most-...

I would love to hear an economist explain why this might or might not lead to higher salaries. My hypothesis is there is an element of human nature: if you're rolling in cash you don't have to be stingy.


High profit per employee leads to a higher divergence in salaries - same as it does for industries like financial trading and research.

If profit per "average" developer is $1 million, then the company is way better off paying $100k extra (i.e. double) to get developers that are 20% more productive than the average - and if the company doesn't do that, then their best people get poached by companies who do.

And while it is impossible to hire the mythical "10x developer", it is not all that hard to find the "1.2x developers" if you are willing to pay double to get them...


Not an economist but B.A. Econ here. (Comp sci degree/career came later.) The difference is the product. In the products these companies sell, especially for us, with web based software, the marginal cost of selling to one more customer is very low. An EE could design an excellent device, but the marginal cost of selling that device is still high. As are the services offered by Lawyers etc. It is the efficient scaling of products that make them so valuable. Those companies that have scaled (or have the potential to scale) their product typically have a lot of money to throw at building it. Those individuals which have the capacity to build scale-able products are in high demand and hence have high pay. My two cents anyway.


I'm not sure that list is a fair way to determine an industry's profit per employee.

Law firms aren't allowed to form C corps, which limits their size and would keep them off that list. I would expect top law firms to be in those ranges in for profit per employee, but they're much smaller so it isn't a fair comparison.

2 of the top 6 in that list are in medicine.


at my university's law school, which is a T14, the average starting salary is 125-150k.

Which is a lot, but not as much when considering that most law grads have mountains of debt plus the opportunity cost of not being the workforce for 3 years. Plus they average 55+ hours per week. And usually cannot work from home.

You're better off doing CS undergrad and working for a Big 10. The hours are on average and can be flexible if you're an efficient worker.


That's likely the mean salary. Median starting salary in that space is likely $160k. Some market leaders have recently moved to $180k.

But yes. The debt burden is incredible. I am nine years out of school and - albeit primarily due to working in the public sector - I still have six figures in federal student loan debt. And 55 hours/week is on the low end. Most firms require around 2100 billable hours. If you figure 50 weeks worth of working days, that's 42 hours of real, substantive work per week, which you have to account for in six-minute increments, plus all of your normal basic admin and staff meeting nonsense. During busy times, we were told to aim for as much as 300 hours/month.

There's a reason burnout is so high among lawyers at large firms.


I do get the impression that the ceiling for attorneys is higher.


Maybe the whole U.S. is becoming bimodal, geographically.

I also think that the software "productivity" is in fact "multiplicative". That is, more software written means more complexity which takes more SW engineers to maintain. I actually think that there might be too much software. This is similar to lawyers, who can generate more work for other lawyers (supply generates its own demand). Weapons also have this property.


> Maybe the whole U.S. is becoming bimodal, geographically.

That's been the case for at least a century. A lot of people at the coasts with few in the middle.


IMHO, the title should be fixed to mention that it is only about developer compensation in the USA.

I am always surprised at the salaries in the USA. I have two bachelor degrees and two master degrees from two well established universities, and earn about 2k euro a month (before 20% tax deduction), which is considered fairly decent for a starter. Even then, many corporations outsource software development to Eastern-European countries.


Most of the developer salaries in EU would be below the scale in the bar chart "Programmers in 2015".


I'm not familiar with the larger EU market, but I would guess that German IT salaries skew low as well - and yet I regularly meet freelancers/contractors who can ask for more compensation than most traditional employees ever could.

Collecting that data and adjusting for the fact that contractors have to deal with more taxes and insurance, but less restrictions about vacations, seems impossible.


Being contractor in Germany one still pays the social contributions the same as a person on employment contract, it's hardly the lightweight variant. Contractor in large business in Germany is at the complete end of the development chain (hourly rates 30-80 EUR/h). Have some super old system in obscure technology/stack? Outsource it to PL/CZ/RO/UK. The super high earning rockstar contractors are some unicorns I'm yet to meet in my life.


Independent IT contractors in Germany don't have to put any money in a retirement fund, but hopefully they do, plus they pay 100% of their own health insurance, IT equipment (sometimes), insurance for their business (occasionally required)... A contractor making 10,000 a month is not comparable to an employee making 120,000 a year, probably closer to 90,000? I didn't mean to imply that it's a lightweight model, it just shifts the burden to the contractor.

Thankfully 80 EUR/h is not the upper limit if you can cut out the middleman. Speaking of which, I've heard third-hand horror stories of Polish SAP contractors where the middleman(!) made 65 EUR/h, which was probably more than half of the client paid - ouch.


> Thankfully 80 EUR/h is not the upper limit if you can cut out the middleman.

Yup, I know some guys contracting in Germany at 100 EUR/h. I myself received an offer (not in Germany, but in neighbouring country) at 120 EUR/h. The EU contracting market looks pretty healthy to me.


Isn't health insurance, like, 100-200 month ??? You all acting like it's a big deal. (nl stats, student DE pays 80/month)


I'm probably overpaying because I stayed in a public (not private) health insurance plan, but I pay about 800€ a month, so close to 10k a year.


Probably 250/month for health insurance plus 20% pension contribution and few unemployment benefits.


Programmers don't need unemployment benefits. You can always find a job. Maybe unable-to-work (like accidents etc) insurance.


Sounds like you’ve never experienced a tech downturn yet. Having been through two (and there are folks on this forum who have been through more) I can tell you with great certainty that you are wrong. I have been close to broke twice and am eternally grateful for what little safety net actually exists in the US.


I always smile hearing this arrogant "programmers don't need unemployment benefits" or "programmers will always find a job". Not even tech downturn is necessary, just relocate (e.g. family reasons) to a different location where this profession is not appreciated, neither well rewarded.


.. so.. unemployment benefits will keep you forever when "profession is not appreciated" or you'll convert to a beekeeper or some other job ?

Unemployment benefits, as I know, are temporary. You'll face the real-world in 2-3 years when it ends.


> You'll face the real-world in 2-3 years when it ends.

Just enough to catch up with nuances between different Angular versions and experiment with all cool newest React stacks... or screw it... pulls out a manual on constructing beehives.


I would agree with you, but I lived through the dot bomb / 9-11. There are times when companies, collectively, decide to hold off on hiring for a few quarters while doing massive layoffs. Thats when the market gets flooded.

It's hard to imagine today, but it sure did happen.


> Programmers don't need unemployment benefits.

That's what the person at the (un)employment office said once to me. If you know how to count, count on yourself because most of the insurance contributions simply fall into a black hole.


"Assuming good programmers + assuming you have certain logical thinking skills outside of programming, like, say, don't live paycheck-to-paycheck and credit-lifestyle".. I just stay out of work until I find a better one with my savings. Worst case I find shitty work until better work.


> I have two bachelor degrees and two master degrees

What does that have to do with what you should be paid?

My degree has provided a small and consistent boost over my career. It didn't make me significantly more valuable as a new starter.

I think Western Europe has a harmful fixation on a persons credentials.

In the time it took you to gain four degrees an American dev could have gained 6-8 years of experience and be operating as a senior.


> What does that have to do with what you should be paid?

I would expect that my effort would have at least some positive effect on my starter's income.

> I think Western Europe has a harmful fixation on a persons credentials.

I think so too. At my work I am doing similar stuff as when I started programming at 12. The main difference is that I had significantly more enthusiasm and energy back then.

I did learn a lot during my study, but it is absolutely not required for most of the jobs. Yet, it is required to have at least an undergraduate degree for practically all jobs. There are lots of improvements possible to this system if you ask me.


> I would expect that my effort would have at least some positive effect on my starter's income.

> At my work I am doing similar stuff as when I started programming at 12

Given the second comment I'm surprised that you have that expectation and I think it's heavily influenced by your culture.

In the states we don't care about effort at all. We care about outcome.

I think this leads to a huge number of efficiency gains.


I haven’t in my life seen a programming job that requires skills that are only available through university.

The only employers (USA) that I’ve seen even care about or ask about degrees are the ones that practice “alumni nepotism” (we only hire Stanford grads, etc.). Nobody else gives a crap.


Europe is far beyond the US (regarding cs saleries, I mean), but in e.g. Germany it's not that bad. I've a masters degree and about 3 years work experience and am at around 6k a month (+ vacation bonus +christmas bonus +personal performance bonus +company retirement plan) which is quite average in southern germany at least for bigger company and engineering/technical roles.


This seems more sane IMO. The pay in the US seems just crazy. Programming an sich is absolutely not something you need an extensive training for.

On the other hand, I spent a huge amount of time and effort on my eduation. While I could not do this without financial support from my parents, I also made a lot of sacrifices, and I am a little bit bitter that friends who dropped out as undergraduate make more than I do. Makes you wonder why anybody would like to work in IT at all.


What did you study?


In the US, my salary was about that (6250 USD/month) straight out of university 12 years ago, but of course I only had 2 weeks paid vacation. I did get bonuses, but no pension.

IIRC taxes are slightly lower in Germany too. After putting the maximum amount into a 401(k) (self funded, pre-tax retirement) and paying taxes, I took home around $3500 per month, excluding bonuses.


That's about what I get after taxes, too (in EUR, ~3.6k EUR), but my retirement (with 7% interest) and healthcare costs are covered completely. Also I have about 40 vacation days and a 37h work week :)


And you dont have college debt and your kids will be able to study at college without debt.


College is inexpensive in the US. Even top privates are affordable if you choose an appropriate career such as software engineering at a top company, management consulting, investment banking, medicine, or big law. You don't spend 50k/yr at a top private school to be a school teacher unless your family is already very wealthy. Paying $30k/yr at even a top state school is not a good idea to enter low paying career fields. Most people major in fields that are an extension of general high school studies, these majors are traps and should not be offered as they do not provide additional earnings and only serve as a four to six year timeout from the labor force as well an employment program for professors.

I have multiple degrees from US schools and zero debt.


$56k in tuition, fees, and books to graduate from my alma-mater in-state at today's rates[1]. Tuition nearly tripled from 2000 to 2012 and then they froze tuition by reducing the number of slots for in-state students (thus raising the average tuition charged without changing the sticker price).

Also, most public schools will not hire teachers without a 4-year degree, so saying that those going into low-earning fields like teaching ought-not get a degree is questionable at best.

Hiring credentials is an arms race, so if everyone else is getting a degree you're going to have a bad time if you don't -- even for fiends in which no degree is logically required.

1: http://www.admissions.purdue.edu/costsandfinaid/tuitionfees....


would you have any advice for new graduate entering the market? where to look for and how when searching for jobs?


From my experience so far (cs/ee, software developer): work experience is more important than grades, current tech stack, interested/knowledgeable in what you're doing, networking (xing/linkedin helped quite a lot), bigger company for the first role also helped with salary. started out with about 58k (~13.8 salaries + bonus + >40 vacation days), quickly went up to around 80k (2yrs)


Thanks a lot for the answer! By networking on xing/linkedin you mean that you were reaching out to people? Asking for positions?


Nope actually just being on there (with a current profile) helped a lot. Currently at least here in Germany there are a _lot_ of open positions in my field. At the moment I (as well as other colleagues I talk to) get multiple requests a week. There are a lot of uninteresting ones, but still..

Also: What's mentioned here: https://thehftguy.com/2017/01/23/career-advice-and-salary-ne...


6k is far above anything I have heard of yet. The boni sound like a big company, is this a software or industrial one?


6k is even above IG Metall pay schemes, you will never get 6k in Germany 3years after graduation. I call bullshit. It may be possible if you have a PhD or for some not engineering related reason are rising ranks very fast.


I know a few people across different CS disciplines in Germany and none of them has IG (i.e. union) based wages. €72k a year is realistic with 3y experience in southern Germany or one of the big cities. You can start at 50k if you look around a bit after Uni, no PhD needed. The step to 62k is then easily done by changing companies once after 2/3 years. That sector has seen a lot of wage inflation in recent years.


That's absurd I have multiple german friends >70k euro + all the other benefits. All stem yes but only 1 is a phd. Frankfurt, Berlin, and Stuttgart too so not just 1 isolated city.


6k base means 80k all-in/year which is the highest union level (e.g. IG metall EG17 in Baden-Wurttemberg). You can reach this level only on a specialist level (PhD) position, with very senior >> 3 years experience or as a manager.


It actually is a igm contract. Base salary + "freiwillige Leistungszulage". Also I haven't had significantly less in my last job (in the last position there). Also a lot of friends (engineers/Maschinenbau mostly) earn (at least) the same. All at around 80k (with a 40h work week) all in my age (i.e. around 3-5 years out of university). And yes, bigger companies.


6000EUR or 6000USD? If it is EUR then I can only say very well done! Can you please give us some subtle hint about company name?


EUR. Large industrial manufacturer. But as stated above, other friends working for Siemens, Bosch, BMW and the like don't earn less.


Europe does not value software or developers anywhere near the levels the US does. Other developed economies e.g, Australia, Canada and Singapore are closer to the US but still trail behind.


In Canada developers are valued for the same reason doctors are valued. If the pay is not good we can just move south of the border. In Europe you don't have that option and actually you always have the threat the company will just hire people in Eastern Europe which are in close proximity.


Granted there are different shades of outsourcing/remote work, compensations are only decent in the context of local market rates but in no way they are proportional to the work being done. It is only fair due to lack of regulation in the space of international work.

Consider how basecamp works for example

https://m.signalvnoise.com/how-we-pay-people-at-basecamp-f1d...

https://www.wageunion.eu/


Whether you were aware of it or not, there have always been programmers working for elite companies making high salaries and programmers working for medium or small companies making average salaries as well as programmers just getting by working for unfunded startups or online bidding or whatever they can get.


Perhaps anecdotal, but my opinion is this basically comes down to two general types of workers: those who know what competitive salary rates are and those who don't or don't care.

The first category knows exactly what they're worth and they'll push to get that worth. They know that if their current company won't pay that, they'll easily find another company that will. They end up switching jobs relatively frequently and get a raise each time.

On the flip side, you have the people that simply don't pursue higher salaries. They tend to get a job and stick with it for a long time. They'll take the 2 to 3% COL adjustments and an occasional promotions, but typically they'll stay with a company for years. While they certainly could find a better paying position, they won't. Perhaps because they like the lifestyle, the type of work, or even unaware that other companies are paying significantly better.


That's pretty reductionist. There are more factors that go into choosing a job than the salary. Commute time, work life balance, perks, liking the people you work with, quality of the work, etc. It's a balance between all these aspects and the salary.


In most of the EU one hits the local ceiling and that’s it. There are very few regions where the ceiling is above 100k EUR, in most regions it’s much lower.


In Seattle, salaries are definitely bimodal (at least from my experience over dozens of offers from me and fellow classmates).

Many mid/small corps are paying ~75-120k base with x stock which is of course not worth anything yet.

Most large competitive firms are paying more around 115-150 with 15-75 in stock.

So an explicit divide between the mid/small companies and the large tech giants exists here.


are those new-graduate salaries? what experience level?


Those look like new grad compensation packages, I believe Amazon total comp is ~145k/yr for new grad SDE1s.


To the puzzle about developer comp outstripping EE or other engineering disciplines pay (ie Civil Engineering god help me), I agree that the student in those fields could apply themselves to become able programmers. So why the huge disparity in pay?

I have two ideas:

1. Lots of technically able people still don’t enjoy plugging their mind into a machine. Its probably hard to believe in the HN community but many people don’t enjoy the work, I’ve met a few. Maybe its too abstract or boring, its a mystery to me.

2. What multiple is the market putting on the ‘tech industry’ vs semiconductors or mineral extraction? We can actually look that up. AMZN 220; MSFT 69; FB 33; SOXX 4.7; XOM 25. Investors are paying more to fund the work of programmers than most other industries.


Engineer turned product manager here: there is way too much yak shaving involved in bring a software engineer. Dealing with all the poorly written libraries, unpredictable bugs and shitty APIs made me realize it wasn't something I wanted to do 12 hours per day for the rest of my life. I enjoy the intellectual challenge but I enjoy less figuring out which version of which package crashes my app


You're definitely on to something here. This is probably also why engineers like to 1. rebuild everything from scratch (but better!) 2. can't handle staying at a company more than a few years.


I was reflecting on why I'm hating my current client's codebase so much whereas 6 months ago it was tolerable.

I think for a while you pretend to yourself it's going to get better, then it never does. Code is a always messy, confusing, etc. There's never time to really fix it.

Switching every 2 years helps you pretend that's not the case, at the new place it'll be better and you'll definitely have an impact on this code base this time.


> Dealing with all the poorly written libraries, unpredictable bugs and shitty APIs

Those things don't bother me - to me that's the fun of it (well, ok, not the shitty APIs, but the uncertainty and the whole constant exploration and discovery aspect of this profession). What does bother me is the expectation that I ought to be able to predict down to the hour how long something should take - even by people who ought to know that I'm dealing with so many poorly written libraries, unpredictable bugs and shitty APIs as to make that impossible.


But as a programmer wanting to getting into a management role of some sort. Lets be frank here, the true reason most people want to do is because, the pay as a manager is just way too good, the working hours are next to nothing. And there is a default master-slave relation ship between a manager and a programming, despite the skill, output and intellectual value of the programming being many orders of magnitude more superior.


I’ll let the parent commenter correct me but being a product manager (or project manager) does not mean you are in a management role. I have had both titles and never had people report me. I probably make much less as a project manager than I could as a software engineer.

The real money appears to be in people management which is tougher to break into.


Have you ever managed developers? It is incredibly hard and intellectually-demanding (albeit using a different part of the brain / areas of intelligence.) I tried my hand at it for a few years and went back to development which was much more intellectually satisfying and much less stressful.

It will depend on the company/team/* of course, but don't think that because your manager isn't visibly grinding through programming tasks that she/he isn't just as intellectually competent or taxed as you. You may just not be mature-enough in the industry to see it yet.


12 hours a day, WTF? I've never seen anyone in any of the several companies I've worked for work 12 hours day regularly. I'm sure it happens but that's definitely not normal for software development, so to say "for the rest of your life" is a little misguided. Perhaps you were being a bit hyperbolic.


When (and where) I was studying CS programmers were quite unglamorous and had famously long working days. I obviously didn't mean it literally but I was trying to make the point that the grind was (is?) a very real part of the job.


I recently started working as a programmer and don't like it. I started coding when I was about twelve, and did a CS bachelor and CE master. I like coding.

I don't like, however, my work as a programmer. The tasks are just too mundane. I spend multiple days on a RESTful CRUD controller, just because there are so many (IMO useless and even obfuscating) layers of abstraction. The only challenging aspect is the lack of conventions and documentation.


I have similarly started coding at around 12, and now I work as a C++ programmer in games....and love my job. On the other hand, I get paid peanuts compared to literally any other industry. But then all of my programmer friends who work in other industries(and frequently make 150-200% of what I make with the same level of experience) hate their jobs with passion, every time we meet it's just an endless rant on how the job is shit, the managers are idiots and customers don't know what they want. While I look forward to going to work in the morning and build stuff that gives me and others joy, and my managers are also cool. Is that worth dismissing for a higher salary? I don't know, I haven't decided yet.


Game dev has it's own industry problems, not simply lower pay. You might be working on something you enjoy right now, but that's not necessarily always the case, and there are plenty of crap you have to deal with from clients, publishers, and the like.

And the market is severely hit driven, so you could be working 6 months to 2+ years on a project only to see it land like a thud in the marketplace, possibly due to nothing more than a couple reviewers that clearly barely played your game before writing a scathing review, or you just picked a bad week and get completely overshadowed by other games.

I worked on 7 games for three different companies, and all of those games failed to find and retain an audience, for various reasons. You spend 4 years of your life working on projects that may as well not have existed, except for your own personal development, and the industry starts to look less appealing.

I'm working on software I have much less passion for right now, outside of the game industry, but at least it gets used on a daily basis by thousands of people (not always, I've worked on projects that have gotten binned because clients have backed out or contracts never got signed, or the lead developer quit and the manager decided to outsource the project, in this industry as well). And at least I'm getting paid quite a bit more than I would in the game industry.


I don't think this is the general frustration with programming that the grandfather post mentioned, it sounds more like you are working on a bad project.

There's always been some push-back against over-abstraction, from Rails' "FU Java" spirit to the whole Go ecosystem. It's just that these jobs are much harder to find than the typical Java EE hellscape.


I have seen some very over-engineered crap coming from GAFAM people, bringing such conventions to modern languages...


I didn't care much for my internships and early work. I felt like a cog in a machine. I always wanted to be the guy designing the machine. After a few years I was that guy. Not all entry work has to be mundane, but you learn a lot doing some of that work.

The fact that you are spending multiple days, rather than hours, building a controller hints to me that you haven't really mastered that work. Perhaps the task might feel less mundane if you developed a tool/framework to simplify the task itself.


Which you can't use across multiple customers if you work at an IT-consultant company :(. I guess you could make it open source, but then you still would have to convince every team you join to adopt it.


I don't have time to implement a tool for implementing CRUD. Wouldn't it be better to not have so many layers of abstraction that you need a tool in the first place?

Let me elaborate on what it took me to implement a CRUD controller.

I had to implement a repository interface, a respository a context, a service interface, and a controller. Then I had to understand how to write the swagger documentation. Then there is a convention of wrapping every result and exception in some kind of wrapper, which is not documented so I had to figure this out from looking at other controllers.

Then I saw a execution path for another CRUD controller which could throw an error which was not in this wrapper, so I had to discuss this with someone from the team. Sure enough, he is in another country, and takes a while to respond. I was lucky it was still morning, or he would have gone home already (there's a 4 hour time difference). Sure enough, this was a bug in the other controller.

Then, there is a logging and a monitoring service I had to understand and implement. Undocumented, of course. The controller I used as a reference was inconsistent in monitoring, so I had to discuss this. Then, the requirements for the controller are not clear. The RESTful way of responding to a GET request for a nonexisting resource would be a 404, but the wrapper does not allow this. The reference controller returns 200 OK, but with a null value. So I had to check if this is indeed what's intended.

Then I had to figure out how the unit testing framework works and I had to write tests for each method. OK, good practice, but it feels a bit weird, since the unit tests should not use the database while the entire purpose of the CRUD controller is to use the database. So much of the logic I'm supposed to test is mocked. So, I had to learn how the mocking framework works. Then I wanted to write unit tests for the repository, but entity framework crashes when I use an in-memory database. The other developers had a look, but didn't understand this either. The other repository implementations are not tested anyway, so I skipped this.

Additionally, visual studio crashed, corrupted my git repository, and I ended up deleting and cloning the whole repo again. Then, I had to configure the project again before it would build, which involves opening the project in an older version of visual studio, then opening the same project in the latest version (some errors magically disappear), and adjusting the IIS settings (which are a mystery to me).

I also had a long meeting to attend, and the person who's supposed to get me started didn't have time to help me. In the end, I'm still not quite happy with the actual logic in the controller (it has inconsistencies similar to the controller I used as a reference), but I refuse to spend more time on it.


Hope you won't get me wrong here; this sounds to me like the million details required to implement something properly, and certainly a task like the one you describe here would take a workday or two to implement properly.

But it does also sound like there are some problematic inefficiencies in the way your company's software stack is set up. Common tasks like logging, caching and error handling should be abstracted away to a separate layer so that you get it for free whenever you implement a new service or endpoint. Don't know if this is old news to you, but check out e.g. [1].

This part about abstracting away rote work and optimizing a stack to be less maintenance-heavy is a learnable skill. The problematic part is that your working environment needs to have it in its culture. It needs to be okay for staff to spend a week here and there tuning a process that's used again and again. This is a big force multiplier which needs to be appreciated by management.

I'm in an online banking company with an 18-year history and all the cruft that entails, and we're in aggregate spending multiple full-time positions continually upgrading our infrastructure and practices. Releases used to be one-week affairs that were performed twice a year. Now they're done in half an hour, most of which is verification and monitoring. Etc, etc.

[1]: https://msdn.microsoft.com/en-us/library/dn223671(v=pandp.30...


Most software is moving data around. All the abstractions you mentioned have a purpose. It makes sense to test each in isolation. For example, a controller whos’ service is a mocked implementation. You can test that your controller and its routes make the correct service calls without ever hitting a database.

About the documentation, maybe you’re the one to take initiative and spin up a wiki? Maybe you’re the person that consolidates logging into a reusable internal library?

Related to the topic, maybe this is not what you should be doing. There is good work out there, but as cliche as it sounds, you have to show passion for them to find you.


Look, work is always pain. That's why they give you money for doing it. The real question is what kind of pain are you willing to endure and why are you willing to endure that pain? Is there a problem that you think needs solving, that you are willing to endure pain for?


> The only challenging aspect is the lack of conventions and documentation.

Well, don't forget the challenge of coming up with new, creative answers to why isn't it done yet and why aren't you working faster and what do you mean "reading the documentation", just program, that's what you're paid to do!


If I look at the situation in my home country, chemical engineers still make more than any other kind. Why? Because big pharma (and big tobacco!) extract the most profits per engineer.

When I was in Germany, mechanical and electrical engineers were typically making more than me. Same reason.

A few american software companies are making over a million yearly per developer. 200k for a new grad is nothing to them.

You're right that investors probably spend more to fund the work of programmers in VC backed startups, but nobody forces them. They could simply start investing in more companies outside tech hubs (or even outside the country).


AMZN 220; MSFT 69; FB 33; SOXX 4.7; XOM 25. Investors are paying more to fund the work of programmers than most other industries.

Large compensations enjoyed by engineers in the AMZN, FB, or MSFT is not derived from "investors paying more to fund their work", as these companies haven't been dependent on investors' capital in a long time.


"Investors paying more to fund [developers'] work" strikes me as the wrong perspective for analyzing compensation. As an alternative, consider "revenue generated per developer".

Anecdote: I worked on a team where gross revenues per FT software engineer were north of $4 million USD.


Investors float the stock to levels that alllow the company to pay generous compensation. At amazon for example, salary tops out at $160K. 1/2 or more of comp is in RSUs. Senior Devs are making $300+ in total comp.


Hypothesis: there aren't two clearly differently skilled populations of programmers. There are two different populations of companies that are willing to pay different amounts. Lower pay being at startups and large non-technology companies in lower-cost-of-living markets; high being at the big prestigious tech firms, banks, and the like.


Yeah, I'm kind of disappointed to see this interpretation so far down. Bimodal compensation probably says more about corporations than it does about innate skill issues.


It has long been bifurcated.

Most of us are working shlubs making a fraction of what A-list companies pay. Among us on the B-team are some (but certainly not all) very talented engineers.


> The most common response I’ve gotten to this post is that we should expect programmers to be well-paid because software is everywhere and there will be at least as much software in the future. [...] Yet electrical engineering comp isn’t in the same league as programmer comp, [...] and there are more processors sold than ever before.

What drives the demand for engineers isn't the number of things sold, but rather the number of kinds of that thing. The variety of chips is still growing, but not proportionate to chips sold, because the numbers are mostly coming from the handful of chips used in servers and mobile devices.

> What is it about some software companies that make a similar amount of money that prevents them from funneling virtually all of the wealth they generate up to the top?

We don't have a union, so the only way a company can be punished for low compensation is if developers leave for higher-compensation companies. Salaries in the games industry are much lower for longer hours, because developers are unwilling to leave the industry to go work on something boring. I don't know the specific case with Epic Systems, but if their employees are older (have families) they might be less willing to relocate. I also know (being from there) that people from Wisconsin have a specific aversion to leaving the state, and it could be that Epic is exploiting that fact.


>> The most common response I’ve gotten to this post is that we should expect programmers to be well-paid because software is everywhere and there will be at least as much software in the future. [...] Yet electrical engineering comp isn’t in the same league as programmer comp, [...] and there are more processors sold than ever before.

> What drives the demand for engineers isn't the number of things sold, but rather the number of kinds of that thing. The variety of chips is still growing, but not proportionate to chips sold, because the numbers are mostly coming from the handful of chips used in servers and mobile devices.

This. What matters here is not ubiquitousness of software, but rather it's bespoke nature. Every major corporation is employing thousands of developers (either in house or via some outsourcing arrangement) to write and maintain software according to the company's unique needs. This is the most important driver of demand for developers, and what differentiates us from other technical fields.


Maybe it is not polite to talk about but I do not think most of Epic systems, or any generic IT employee can simply be hired by Google if they are willing to move where Google offices are present.

Most people I know in IT industry understand this deeply even if not talk openly that their 1/4-1/2 of Google pay is decent case scenario. It is also reinforced by the fact average salary for software engineer in valley is about $120K and not $500K + unlimited meals, bus rides and what not.

People here are select bunch and talk about 500K pay so often, it starts to look common when clearly it is not.


>Another possibility is that U.S. immigration laws act as a protectionist barrier to prop up programmer compensation

So, US operating as a country (an entity with citizens, which it prioritizes other foreigners) rather than some arbitrary free-for-all geographical space?


As a manager I’d probably advice against picking programming unless you love it. In our educational system the increase in short-length programming classes at academy level has exploded and I doubt the market will keep up.

Really great comp science or engineering students won’t ever have a problem, but I fully expect the short-length, autodidact or mediocre students to be entering a saturated market within the next five years.


As a manager I’d probably advice against picking programming unless you love it.

That is the dirty little secret of our industry. You need to do your day job AND on your own time, keep your skills up to date, and/or work on open source and/or write a blog or something. There was a post on there the other day on how keeping up to date with k8s is a full-time job in and of itself, well you need to do that - and a bunch of others - in your free time, in the full knowledge that what's hot today might turn out to be worthless in a year or two.

People on the outside, even those aspiring to get in, I don't think fully realize the commitment of those making the headline salaries in this field. Just as you won't make it as a banker unless you LOVE making deals, so much that you'd even do it for free...


Yes, the occasional expectation that you should have a blog to make you a decent developer annoys me. I am pretty poor at writing and don't have a lot to say that I want to broadcast to the world. Answering Stak Overflow questions suits me better as a way of demonstrating that I know something.


a way of demonstrating that I know something

It's the expectation that you need to demonstrate it at all, is the problem. How many lawyers sue people for fun so they can blog about it, how many doctors do surgery at home and stream "live cutting"?

We have created a treadmill that we can't step off


I think this is largely a myth. I don't have any of my work in a public space. In my area I'm in the top 5% of the salary range. Maybe this is more prominent in silicon valley? I've personally never even been asked for any kind of portfolio.


to be fair, the bimodality in the population of lawyers/doctors is an "are you in or out" system that comes from the generally outdated and arduous graduate credentials for these careers administered by bureaucratic boards. medical school, law school, and so on, are all extremely costly investments of time and capital for a shot at attaining that professional certification, and there's generally little recourse if you continually fail.

"software developer," as a label, doesn't signal that kind of credentialing (although something like advanced degree might), so our labor to differentiate ourselves goes elsewhere. i don't want to imply that this isn't a problem for our profession, but the amount of "wow we software engineers have it so difficult" sentiment in this thread seems high


"software developer," as a label, doesn't signal that kind of credentialing (although something like advanced degree might)

A degree from a well-known school and a few years at one or more prestigious companies is an equivalent. Let's imagine a hypothetical developer who graduated from MIT then spent 3 years at Google. He or she would be as "credentialled" in the sense of the piece of paper opening doors as someone who'd gone the law school route and passed the Bar. That person will pass every resume-screen and get invited to an interview for the rest of their careers with just those two names listed.


> You need to do your day job AND on your own time, keep your skills up to date, and/or work on open source and/or write a blog or something.

Not just that! Don't forget about attending a dozen conferences a year, doing talks, and local meetups.


>Not just that! Don't forget about attending a dozen conferences a year, doing talks, and local meetups

You don't really need any of that.

Ultimately, you just need to pass the interview.

Sure conferences and tech talks might help give your resume some more visibility and likeliness of getting hired. Similar to having a couple toy projects, but many top tier companies adhere to a set of standards in their hiring process where they won't let you bypass their DS&A interview because you gave a tech talk.


Agreed. I don't have a Github, contribute to open source projects, go to conferences or meetups or any of that stuff on my off-time. When asked about it in interviews I tell them about the kind of projects I've done, and that's pretty much it. Its a straight forward agreement, I'll give my time and expertise (C/C++) and you'll pay me a fair amount. I'm not going to act like my life is all about programming because that would be a totally sad life in my opinion.


Outside of the SV bubble, the (entirely subjective) impression that I get is that there is much less bleeding-edge/buzzword-based hiring. There's still a fair amount, especially at medium- or small-sized B2B/sales-driven companies without engineering involvement in hiring, but it's much less epidemic.


>I fully expect the short-length, autodidact or mediocre students to be entering a saturated market within the next five years.

That cuts against every labor demand projection.

Frankly, even mediocre programming jobs are a great option for most people. The lower mode is still much more than most entry-level jobs pay.


That point hasn’t been hit yet. Discouraging people from learning programming because you anticipate that point to come soon is unfortunate coming from a manager of programmers. Regardless of job opportunities, which I disagree with but is beside the point, being able to program increasingly allows people to create value and bring ideas to existence.


As a manager I’d probably advice against picking programming unless you love it.

I would definitely advice people to learn programming, but not necessarily to aim to become programmers.


Programming for the sake of programming gets boring after a few years. At least for me, this was the case. There is only so far you can go with it as a pure discipline. Once you've mastered design patterns, higher order functions, etc. you end up with writing "just another" app, service, CRUD thing, etc.

What I found really interesting was going one step further and using programming to solve "higher order" problems, such as data science or artificial intelligence related problems. I'm not talking about implementing something in Tensorflow. That again is just programming. I'm talking about implementing something in Tensorflow to solve a specific problem and seeing the result of that. The programming part is beside the point, it is a means to an end.

I think you really need to dig deep and ask yourself why you are writing code at all. The act of writing software itself is not that intellectually stimulating once you've mastered it well enough. It is just one layer of abstraction. Think about what is the next layer of abstraction you can build on top of your programming layer.


This sounds like natural career progression (and also perhaps why some get bored doing the same thing for so long). You want to move up the lever of impact. For many this means applying their experience to a growing field (e.g. lots of interest in AI/etc recently) or helping other developers be more productive and not have to solve the same problems they did (e.g. growing k8s, cloud, ci tooling, new languages, etc.)


This is what I heard about 10 years ago, and advise I got is to go into engineering because programmers would be "just another over-saturated marked like lawyers".

I'm glad I did not treat it seriously.


This is my opinion as well. Many people still believe that programming equals a unique and high paying job. It is not ut is quite boring and you have to be the guy that always says yes and deliver no matter what, much like a factory worker.


do you have any quantified evidence of this or is it just a gut feeling


Well, it’s anecdotal from experience and my network. 10 years ago we would get 1-5 applications for a programming job, and most would frankly be underqualified.

The last position I put up for a regular .net, jboss and sharepoint position had over 300 applicants, several vastly overqualified.

I work in the public sector, so it’s not exactly because we offer what most developers consider “dream positions” and we certainly don’t offer a good salary.


> The last position I put up ... had over 300 applicants, several vastly overqualified.

Interesting how this contrasts with the widely-held perception that there is a programmer shortage.


Is that really the perception in 2018? If we go back to the early 2010s, I would agree. That the message was spread frequently back then. I really haven't heard it recently. And it makes sense that the market over the last 5+ years should have started to close the gap. That is plenty of time to allow people to become able in development.


Few if any of the 300 applicants were overqualified for that garbage opportunity. Can you describe on how they were overqualified? List a bunch of certs and techs? Good programmers aren't fighting over scraps for underpaid government positions working with JBOSS, they get snapped up immediately when they hit the market. Five years to saturation? Yea right.

Readers who just deleted emacs in despair should keep in mind that parent is hiring for Danish government position, not exactly the hotbed of software development or skills demand.


While I can't speak to the GP's experiences, I'm guessing you're in SV (most likely), NYC, Chicago, RTP, or Austin based on your remarks on how quickly developers get snatched up.

However, those of us living outside that handful of cities have a totally different experience, regardless of how good we are or how much experience we have. There just are far, far fewer jobs outside that handful of American cities.

And many of us are unable to just up and move due to a personal situation (sick relative, illness, spouse's job, etc.). It's just worth bearing in mind that your experience as a developer is somewhat the exception in the US, not the rule. At best, it's a 50/50 split between devs in the cities I mentioned above and the rest of us.


I've had similar experience finding on-site work in a healthy market as I have as a remote worker. I don't think parent's advice is sound, claiming that software eng. is a dead-end path for most, with a five year fuse. Clearly if you're not excellent or willing to move to a city with jobs in your industry, you're going to be in for a rough time. Not specific to software eng.


O-ring sounds reasonable.

Also, consider what kinds of firms hire these professionals. For almost all professions, there are firms that do what the profession is called. There are accountancy firms that do specialist account. There are law firms that do specialist law. And there are software firms that make software ordinary firms don't make. But then there are also firms that happen to have a lawyer, and accountant, and a software developer. They might be some industry firm like a widget manufacturer. In these firms, the professional is not quite the most important resource. Sure, you need some, but you don't think of widget factory as requiring the top professionals. Often you'll hear the firm considered as a sort of lifestyle choice: less stressful than the law/accountancy/software house. And of course if you need specialist help you'll know which external firm to get it from.


The article gives as a potential reason for high developer compensation the possibility of a shortage of talent. That seems obvious to me, but the author goes on to suggest that if there was a shortage, you'd be seeing more people go into development.

Does this actually happen? My understanding is that skill supply is simply not elastic in this way. Kids generally pick what to do based on their aptitude and what they like to do, remuneration is a distant secondary concern. Changing careers is something people only do when they absolutely have to.

It appears altogether clear to me that supply and demand explains programming compensation perfectly, and that these dynamics aren't going to go away any time soon, for the same reason doctor and lawyer compensation stays healthy, lawyers less so.


>My understanding is that skill supply is simply not elastic in this way. Kids generally pick what to do based on their aptitude and what they like to do,

Right. You see this in 1st year CS major attrition rates and programming related MOOC completion rates.


> It appears altogether clear to me that supply and demand explains programming compensation perfectly

My thoughts exactly. Demand for programming is growing faster than the supply of programmers. Not only is demand growing because ever more devices demand an ever-growing amount of software, but also because every already existing line of code in production needs somebody to keep it from falling over. This compounding effect further escalates demand.


I've seen lots of teen-aged students take up an interest in coding simply because they heard it was a well-paying and in-demand career. It's no longer a nerd thing to do living in your parents' basement.

This has likely steered some students who otherwise might have found a niche in other fields to try out coding and choose it as a career (out of both satisfaction and salary prospects).


Isn't part of the bimodality here just a "Silicon Valley Effect", where a few companies in a few very expensive areas compete for talent that has to pay ever more for housing?

If one factors out the major tech hubs and only look at e.g. any random city, is the bimodality there too?


This is the most perceptive comment in the thread. Based on moving from NYC to a much smaller metro area without any major tech companies I think you're right. Compensation here is roughly half of NYC compensation. The big tech firms are driving the high salaries.

I'm sure you'd see the same pattern if you looked at finance grads. The top ones who went to work for investment banks, hedge funds, etc. are pulling down large salaries, the rest are making much less working for small to medium size companies.


I believe the article addressed this with the Madison WI example. The high paying company in Madison was still Google, but if they are paying above average salaries to 100 engineers in a city that may only have 1000 that's still a significant spike in a "random city"


Developer salaries in the UK are very modest. Companies don't even know how to identify good developers, so they have no hope of competing over them.


Not sure on that - nowhere near the US equivalents, but total comp (salary + bonus + equity) of approx £130-140K is what is apparently "competitive" for engineers who are "senior" but not management in London (according to my employer who does all of the usual "market rate adjustment" stuff).

£130K feels like quite a lot of money to me.


According to www.itjobswatch.co.uk a senior Java developer earns £70k. But can command day rate of £575. That works out at about double. Suggestion it is bimodal.


It contractors and engineering contractors in the UK have always been able to demand a decent multiplier for contract work 2-3x normaly.

Though some industries (advertising publishing marketing) that formerly did not have to consider on technical excellence and where used to relaying of cheap Oxbridge liberal arts students with a 1st seem to want to pay temp technical roles at straight time instead of the real contractor day rate.


Yeah, but given current exchange rates £70k is ~$100k. ~100k is nothing to sneeze at...


Apparently, UK IT salaries are still above those in France, even if there is an (apparent) lack of IT professionals in the current market.

Source (in French): http://bfmbusiness.bfmtv.com/emploi/metiers-du-numerique-les...


France and the UK just need a unicorn company or other powerhouse to come in to change the dynamic. Google/FB are there but really a home grown company would be better.


They filter out the people by offering less and less, for shorter and shorter contract periods. After a period of intense job search in UK couple of years ago, I'm still receiving recruitment mail (or spam?) for "initial 2 weeks contract" in Angular/React with "an option to extend" - I'd just have to relocate to London:D


Goods distributed as software and, to a lesser degree, online services have phenomenal scaling leverage arising from very low marginal costs.

I can write some software publish it and in a matter of months have it improving the lives of hundreds of millions of people.

Engineering aptitude is rare, or at least we haven't learned how to mass produce high end engineering aptitude. It's hard to argue that any other domain of engineering has anywhere near the kind of leverage that software does.

Automation has also radically improved the effectiveness of top software performers. Even a one man 'team' with a moderate level of skill can have pretty comprehensive set of automated tests. There is design automation in other engineering fields, of course, but it's especially potent for software because the automation can capture basically everything and because software engineering is also the skill needed to improve the automation itself.

Some of the bimodality may be due to binning what really is functionally separate fields under one name. I've known people who were great at wiring up prefabricated functions to build UIs and simple processes, but wouldn't have constructed a novel datastructure if their lives depended on it. It's hard to draw bright lines because there is a bit of continuum and people grow and change... but there seem to be some pretty distinct categories out there.


There seem to be a couple of major similarities between software development and other jobs with bimodal incomes:

- You do a job that is, in many cases, a company itself. Lawyers, doctors, and developers can all start independent operations since the product of their work, or the service they provide, is monetizable in and of itself.

- There is a very significant skill gap, often driven by enthusiasm at least as much as intelligence, that people rarely transition between.

Compare these fields against something like electrical engineering. There the skill itself is generally a part of a product, rather than a marketable skill in and of itself making independent work difficult. And I don't know that many electrical engineers, but I'm unsure how big of a skill gap there is and, more importantly, what percent of engineers manage to transition upwards in it. If one electrical engineer is, more or less, the same as another - then you're going to see that reflected in income distributions which I would expect look more bell curvy weighted mostly by just years of experience.


"There is a very significant skill gap, often driven by enthusiasm"

Honestly I think its more down to experience.

I know relatively inexperienced developers chasing every new tech on the hype train. And I know others that have been around a while and recognise the new tech as a rehash of something from 20 years ago, with some new marketing.

(To be fair I think you need some enthusiasm as well as the experience otherwise you get the "1 year of experience ten times" developers).


It's probably a function of going to a brand name school + killing the Google style interviews. If you do that and have multiple offers you probably get the average up. SV in general is nuts wrt to housing and rent so that's going to steadily push things up as well. Then certain markets are winner take all so it makes some sense to "over" pay for talent. This would create a bimodal distribution as well. If you work as a software eng in a biotech your pay will probably be less than at Google on average b/c the biotech has less need for a highly qualified say distributed systems engineer. So they will accept a different candidate out of the talent pool. Also the talent may want to work at the biotech for reasons other intangible reasons. H1B is just a guarantee for some employees over some term. So H1B sets the bottom of the market really. There is no reason to work a job or somewhere that pays less than an H1B level wage unless you've got some crazy stock options or something.


It would be interesting to see if compensation is bimodal within a market. There's clearly a bimodal distribution between the US and the rest of the world, and has been for a long time. I think we're also moving toward a bimodal distribution between the top five or ten unicorns and everyone else even in the US. Quite simply, the companies with billions to spend are bidding up the price of talent willing to work there, while growth for everyone else remains slow. While the same has happened with fintech for a while, that has remained too small to show up on graphs. MAGA/FAANG/whatever, on the other hand, are collectively large enough to create a very visible second peak.

There are effectively two markets now. People don't expect to carry their compensation packages from one side of that fence to the other. I should know, since I made such a transition myself within the past year. In terms of effect on personal income, it's not that different than changing careers.


Yep, I switched from fintech to another industry (still software development) and took roughly a 50% paycut to do so. It let me live in a much nicer part of the country (given my non-work interests), but I might go back since the pay is so much more.


I think the simplest explanation is that the number of jobs has been exploding but the number of people who really know their stuffs isn't keeping up. It takes time for any population to adjust to a new situation. Surely it's hard to master EE etc. as well but how many companies really need EE engineers anyways. I've been keeping explaining to others that in EE etc. many probably get a PhD before they apply for a job in a company like Intel or maybe at least a second-rate OEM company which truly needs somebody to design/test their hardware, while literally every company needs somebody who can program. The talk of "not understanding" this thing just sounds like exaggerated posturing. I don't think there's anything very hard to grasp about it. The situation might well change in a few years with the maturation of AI-based program generation technologies and the saturation of population. We'll just have to see.

Also most foreign programmers actually already have to pay a fortune (many via their rich parents) to study in the US in the first place before they get the OPT/visa, so they already came from rich families and it's a kind of like the situation with lawyers/consultants/financiers where such an elitist circle gets elitist pay as well.


Why do companies pay so much for computer programmers? Because on average they make a massive net profit per programmer, that's why. There aren't many other fields where one person can increase productivity by orders of magnitude. When was the last time a clever doctor reduced the number of nurses required to handle a fixed number of patients by a factor of a hundred? Good developers do this routinely!


In the Netherlands the average salary for a senior developer is 40.000$ (~24.000 after taxes) while the cost of living is not that much different from the UK and US, may be except for healthcare. What exactly justifies the difference?


I'd guess this is due to the million aspects that configure that purposefully abstract 'Quality of life' metric.

In the end, it all comes down to: why are these people, who could do it, not moving from the Netherlands to the UK or US?

They are probably 'comfortable' in the Netherlands, whatever that means.


"One possibility is that we have a shortage of programmers. If that’s the case, you’d expect more programmers to enter the field, bringing down compensation."

This is true. I was a mechanical engineer professionally. I moved into software engineering, and the increase in compensation was a dominant factor. I know several other non-CS engineers that have made the same move. While it's not driving down compensation per-say, the difference in demand between disciplines is startling.


Yeah there things are starting g to be filtered down to just easy and very hard in software. Easy is when all the high level apis helping us to a lot of work on easy tasks. The hard part is when you really want to customize it and have many different parts work together nicely and workable. So there is a big gap in knowledge between those 2, hence we sometimes get bimodal payments.


There's a difference between a bimodal and a distribution with a long tail (like a lognormal). The new hire distribution doesn't really give a sense of this because there's an implicit cap to how much companies are willing to pay new hires.


I just want to say I really love how simple his site is and how fast it loaded.

Visual aesthetic not so much but UX is amazing. I definitely want to read more sites like this focused on simplicity of the content.


Quite a long piece of text for that he essentially says that he doesn't have enough data to answer the question. Also: if your article is headed with a question, the answer usually is no.


I wonder if it's possible to put a $ value on how much impostor syndrome has benefitted employers. I suspect it's in the billions, but that's little more than a hunch.



Yes, this is true. At some point which I seem to be unable to identify in retrospect, I became too expensive for about 2/3 of the market. Ah well.


Oddly,this is only even potentially true in the US. The rest of the world, including Europe, pays devs at the low end of the distribution showed here.


I was curious which countries (out of the wealthier developed economies), for programmers, are the most out of line vs the median income for that country (based on a full-time job median wage).

The best are the US, Denmark, Israel.

Germany has a higher median income than the UK, but the UK pays better in programming. Sweden's median income is quite a bit higher than both Germany and the UK, but Germany and the UK pay close to what Sweden does.

Canada is at half the rate of the US, drastically below where it should be based on median incomes.

The worst is France by a wide margin. The average software engineer salary there is around $38,000. Almost one third that of the US.

Switzerland pays very high (still below the US), but their median income is extremely high.

New Zealand has a considerably lower median income these days versus Australia, but only pays about 15% less for programmers than what Australia does.


Would be interesting to hear what data sources you used. There was an article on bloomberg about the same metric, but it's 404 now. Seems like the data has been used in this map, though: http://ramiro.org/map/world/income-software-engineers-countr...

(Results are quite different to yours, but this data is 4 yrs old)


‘Another possibility is that programming is uniquely hard in some way, but that seems implausible to me.’

Seems to be the fatal flaw in the article.


it is could because it is easy to build your own startup in software industry in the US without the i18n for eu.


How do I know which mode I’m in?


Try to make rent in the bay area. If it's easy, you're in the right-hand mode.

~/s


The reasons underlying the bi-modality are pretty clear to me. There are a couple of major factors at play:

1) Inflation. My starting salary out of college many years ago was $35K. Today's starting salaries are double that. Double in less than 20 years. A $50K salary in the early 1980s is equivalent to $120K today, not controlling for geographic location--HCOL areas are actually far worse than that. Let that sink in as you plan for retirement. My take is that you are never going to save enough for retirement because inflation is insidious and never sleeps.

2) The mythology of the higher salary range. How do developers get past that second mode? They start their own company! Only a few rarified corporate people and independent consultants can pull down pay in the 200s. Again, I'm not thinking about SV where the pay is so skewed due to the HCOL. So everyone else works a number of years and ends up in the 120s-150s and they think they are doing great, but they really aren't (me included) due to #1.

Any way you look at doing software development as a career you come to see that it stinks. I'm not going to recommend it to my kids. I think it's important to know how computers work and how code works and not to be afraid of tinkering with those things or coming to believe that you have no control over it, but as a business, it's nasty and getting nastier.


> Only a few rarified corporate people and independent consultants can pull down pay in the 200s

New grads at Facebook who received a return offer as an intern get a bit over 200k/yr total comp. to start.

> Any way you look at doing software development as a career you come to see that it stinks.

I don't see how being able to make several hundred thousand dollars a year with a few years of experience while working at a major company in a safe and clean environment is a bad choice.


> Any way you look at doing software development as a career you come to see that it stinks. I'm not going to recommend it to my kids.

What are the alternatives though? Lawyers work much longer hours and only the ones who went to top schools and get into top firms make more. Doctors make more but have 6+ more years of education and training. Finance is competitive and also has long hours. Programmers have it pretty good.


> Only a few rarified corporate people and independent consultants can pull down pay in the 200s.

I'm not sure that's true. I've lost track of the number of software engineers I know who are in at least the low 200's Total Comp (in Texas).

Common? Probably not. Rarified? Not as much as you think. There's two just on my current team.


I don't think I could disagree with this post any more than I do.


1. You do not need a degree - This puts more pressure on the developers who are employed, now they've to face pressure from uncredentialed people who for some reason fell in love with the software craft. So, quite a lot of people feel inadequate and practice relentlessly to keep their skills sharp, improving visibility. Some are practicing DS/Algo daily while contributing to opensource, improving their GitHub. Boosting productivity, driving up revenue.

2. Taught the wrong way - The CS degree way is bad outside of a few key institutions. Everything which is taught sounds too abstract and complex. It's simply not taught well.

The candidates from those key institutions will not take a low ball offer, they'll prefer being unemployed or going into business chasing their dreams. Most are from well off background. This keeps supply low.

3. Greenfield - After working at a software compare, you'll realize that making a new small business around software is not that hard. Afterall, the dumb people who give you requirements are doing it, how difficult can it be? So, after gaining bit some expertise, you are able to set yourself free. I don't think this is possible in other professions without taking a massive hit in compensation. With my new companies, I am always confident that we'll be 100% successful. I wouldn't have gone to pursue it if I didn't believe success was evident. Lots of smart folks leave for their dream, leaving non-experts in the workforce. So, the money is chasing very small pool of candidates.

4. Robbers - After working at the small business, you'll quickly realize that skill matter much less in business. To make a ton of money, you'll have to be at the right place and at the right time, yea getting to that place does require some skill. You'll find some guys have found a way to convince millions of users to upload their pics on your website and you can sell their data to advertisers making tons of money in the process. This is all new and regulators have no idea what to do, there are no rules - so you rig auction in your favor, yet winning more money from advertisers.

There is potential to do lot more evil in CS.

There are some companies who have built massive leverage. If you do not work for them, you'll simply do not earn much regardless of your skills.

5. Hire more coders what whatever cost - Once startup is growing is growing, you'll find that you need to exploit faster and simplest way to to do is leverage opensource, existing vendors, investment etc... You've no time to reinvent the wheel, the reservoir of nearly infinite free money will not wait for you. So, you'll hire plenty of smart coders at whatever price, you'll use wizard level DS/Algo questions and experience in gluing tons of different opensource technology/vendors etc... If still there are some holes, no problem, contracting someone is the last resort.

Here is the biggest cost alone is time. So, companies are willing to bet as high as possible or risk being unseated.

6. Fast nearly free exponential distribution, creating a copy of iPhone still need some labor, distributing same software to 100K people need much less effort. The software scales faster. We design a system to scale 10x by default. How many other manufacturing plants can scale 10x?

6. Leverage ecosystem - Opensource technology/Vendors/Investors/ and internet is the fastest medium to advertise.

The biggest thing -> Lack of regulation. No, one is verifying your code to make sure that it's not doing anything evil or not extracting something from a user which you didn't have a permit for.


>Fast nearly free exponential distribution

Just because you make an app and publish it to the App Store doesn't mean that it is "distributed" to anyone at all. There are massive costs to marketing apps because apps are commodities.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: