Is developer compensation becoming bimodal? - <AUTHOR> https://danluu.com/bimodal-compensation/ <comment><USER3> 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.

<comment><USER4> 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.

<comment><USER5> > 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.

<comment><USER6> 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.

<comment><USER7> 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.

<comment><USER6> 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.

<comment><USER8> 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.

<comment><USER6> 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 :)

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> 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.

<comment><USER10> >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...](http://www.imperial.ac.uk/study/ug/courses/chemical-engineering- department/chemical-engineering/)

[2]: [https://www.imperial.ac.uk/study/ug/courses/chemistry- depart...](https://www.imperial.ac.uk/study/ug/courses/chemistry- department/chemistry-bsc/#structure)

<comment><USER11> 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.

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

</comment></comment></comment></comment><comment><USER13> 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.

<comment><USER14> 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.

<comment><USER15> 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.

</comment></comment></comment><comment><USER16> >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.

<comment><USER17> 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.

<comment><USER18> 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.

<comment><USER19> > 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.

</comment></comment></comment></comment><comment><USER20> 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!)

<comment><USER21> 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.

</comment></comment><comment><USER22> 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

<comment><USER23> 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.

<comment><USER22> 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.

</comment></comment></comment><comment><USER24> 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.

<comment><USER25> _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.

<comment><USER26> 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.

<comment><USER25> _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.

<comment><USER24> 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.

<comment><USER25> _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).

<comment><USER27> 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.

<comment><USER25> Whereas when I say "software engineering" I am referring to formal methods, or software components of engineered systems e.g. avionics. Nevertheless - <USER2> 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.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER28> 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-...](http://www.businessinsider.com/apple-facebook-alphabet-most- profitable-companies-per-employee-2017-12)

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.

<comment><USER29> 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.

<comment><USER30> 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.

<comment><USER31> 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.

</comment></comment></comment></comment><comment><USER32> 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.

<comment><USER33> > 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.

</comment></comment><comment><USER34> 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.

<comment><USER35> 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.

<comment><USER34> 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_.

<comment><USER36> What did you study?

</comment></comment></comment></comment><comment><USER37> 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.

</comment><comment><USER38> 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.

<comment><USER39> 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.

</comment></comment><comment><USER40> 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.

<comment><USER41> are those new-graduate salaries? what experience level?

<comment><USER42> Those look like new grad compensation packages, I believe Amazon total comp is ~145k/yr for new grad SDE1s.

</comment></comment></comment><comment><USER41> 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.

<comment><USER43> 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

<comment><USER44> 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.

<comment><USER45> 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.

</comment></comment></comment></comment><comment><USER46> 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.

<comment><USER47> 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.

</comment></comment><comment><USER48> 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.

</comment><comment><USER49> > 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.

<comment><USER50> >> 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.

</comment></comment><comment><USER51> > _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?

</comment><comment><USER52> 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.

<comment><USER25> _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...

<comment><USER53> 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.

<comment><USER25> _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

<comment> intro-b 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

<comment><USER25> _" 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.

</comment></comment></comment></comment></comment></comment><comment><USER54> 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.

</comment><comment><USER55> 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.

<comment><USER56> >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.

</comment></comment><comment><USER57> 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?

<comment><USER58> 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.

</comment></comment><comment><USER59> 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.

<comment><USER60> 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.

<comment><USER61> 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.

</comment></comment></comment><comment><USER62> 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.

</comment><comment><USER63> 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.

<comment><USER53> "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).

</comment></comment><comment><USER64> 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.

</comment><comment><USER65> 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.

<comment><USER58> 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.

</comment></comment><comment><USER66> 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.

</comment><comment><USER67> 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!

</comment><comment><USER68> 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?

<comment><USER69> 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.

</comment></comment><comment><USER70> "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.

</comment><comment><USER71> 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.

</comment><comment><USER72> 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.

</comment><comment><USER73> 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.

</comment><comment><USER74> 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.

</comment><comment><USER75> 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.

</comment><comment><USER76> Lots of discussion in 2016:

[https://news.ycombinator.com/item?id=12588202](https://news.ycombinator.com/item?id=12588202)

</comment><comment><USER77> 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.

</comment><comment><USER75> 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.

<comment><USER78> 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.

<comment><USER79> 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...](http://ramiro.org/map/world/income-software-engineers- countries/)

(Results are quite different to yours, but this data is 4 yrs old)

</comment></comment></comment><comment><USER80> '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.

</comment><comment><USER81> it is could because it is easy to build your own startup in software industry in the US without the i18n for eu.

</comment><comment><USER82> How do I know which mode I'm in?

<comment><USER83> Try to make rent in the bay area. If it's easy, you're in the right-hand mode.

~/s

</comment></comment><comment><USER84> 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.

<comment><USER42> > 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.

</comment></comment><comment><USER85> 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.

<comment><USER86> >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.</comment></comment>


Why Windows 8 Is Not Fundamentally Flawed As A Response To The iPad - <AUTHOR> http://www.businessinsider.com/why-windows-8-is-not-fundamentally-flawed-as-a-response-to-the-ipad-2011-6

<comment><USER2> Gruber has some brilliant insight at times, and other times it feels like he's reaching. Gruber would never allow a writer to suggest that a beta/alpha/rc was something that could be critised as a full, ready-to-ship product. He should know Office is likely to be refined for Windows 8 and not jump to the same conclusions that he rightfully defends Apple for. When you jump to write an article, and then a poor rebuttal to your knee-jerk reaction, it feels like fear more than commentary. <http://daringfireball.net/linked/2011/06/12/i-like-my-odds></comment>


Mono 2.2 may overtake .NET in some critical categories - <AUTHOR> http://www.betanews.com/article/Mono_22_may_overtake_NET_in_some_critical_categories/1232551276

<comment><USER2> Painfully absent from the article: an actual comparison between Mono and .NET.

<comment><USER3> And guidelines on how to get ASP.Net MVC running on a 64-bit Linux box.

It's so tempting.

<comment><USER4> Depending on the distro, it may be as easy as "yum mono" or "apt-get mono".

</comment></comment></comment><comment><USER5> From what I understand, game programming has been a niche and, god forbid, an actual profit center for Mono, particularly since the runtime can be customized and sublicensed (closed source) from Novell.

<comment><USER6> The Cartoon Network's MMO uses one of these specially customized and packaged versions of mono:

<http://tirania.org/blog/archive/2009/Jan-22.html>

</comment></comment><comment><USER7> Perhaps some kind soul will create a VM image for download -- it would be great to play around with.

<comment><USER8> The mono people always release a VM with the latest version... and indeed you can download it from here:

<http://www.go-mono.com/mono-downloads/download.html></comment></comment>


Show HN: Fast and simple key/value store written using Go's standard library - <AUTHOR> https://github.com/recoilme/pudge <comment><USER2> So your PUTs are 3X slower than badgerdb's, but your GETs are 3.1X are faster. Not bad!

Now benchmark against the leaders: Redis, Tarantool and Aerospike. Don't even bother with low-concurrency, almost nobody cares for that.

<comment><AUTHOR> Yes, you right. But Redis and Aerospike are in-memory DB's. Pudge store data on disk.

Tarantool - much slower, because it's a database, but pudge - is an engine. No overhead on connection/transfer. In that case, i must compare with [http://sophia.systems/](http://sophia.systems/) But now tarantool don't use sophia. I write [https://github.com/recoilme/okdbc](https://github.com/recoilme/okdbc) on top of sophia - high-level cross-platform sockets interface to sophia db. You may take a look on benchmark: [https://github.com/recoilme/okdbc#similar- benchmark-for-memc...](https://github.com/recoilme/okdbc#similar-benchmark- for-memcached-1434-memcache-store-data-in-memory-so-its-more-fast-then-okdb)

memcached-1.4.34:

SET 69520.84 requests per second

GET 53244.68 requests per second

okdb (based on sophia, ex-engine for tarantool)

SET 48804.88 requests per second

GET 56191.01 requests per second

pudge in-memory mode:

SET 439581 requests per second

GET 1652069 requests per second

pudge write on disk mode:

SET 43843 requests per second

GET 666067 requests per second

But speed it's not the main thing

So, pudge as fast or faster then Memcache or Redis or Aerospike or any other database, including in-memory but pudge it's not a database, it's a database engine. With connection overhead it will be probably slower than in-memory DB's if you implement it badly

<comment><USER2> I'm pretty sure Redis stores data on disk by default, dumps every 2 seconds.

Do you write to disk on every PUT/SET?

<comment><AUTHOR> Thank you for your interest. I will try to explain difference redis vs pudge, sorry for my bad english.

Redis is in-memory database. It put keys and values in-memory. If you don't have enough memory you don't may store data. Redis has 2 mode for persistence - AOF and RDB. RDB is snapshot (default), AOF is append only file. In AOF mode redis will write at the end of file and call fsync() every second. Redis is single threaded app (you don't may read data concurrently or utilize all multithread power of your server). And last - you may use redis with redis protocol from any kind of app. It's database.

Pudge is key/value store, database engine. You may write another database with pudge or write server with http/grpc/redis/memcache or other protocol, but in general - pudge is embeddable database. If you need database server on top of pudge you may found some examples in readme.

Pudge has 2 store mode. On disk(default) and in-memory. In on disk mode pudge write data on every set, but pudge may write over old unused data in case of upsert (at the any point of file). Pudge run fsync() every second, like redis in AOF mode. In this mode pudge store in-memory only keys, but values stored on disk. In in-memory mode pudge store keys and values in-memory. In this mode pudge store data on disk only onClose command, like redis in RDB mode. Pudge is multithread app. It has one writer, but readers don't block readers.

<comment><USER2> Ah, thanks for the lengthy explanation. I get it now.</comment></comment></comment></comment></comment>


Study Finds Interpretation of Emojis Can Vary Widely - <AUTHOR> http://www.npr.org/sections/thetwo-way/2016/04/12/473965971/lost-in-translation-study-finds-interpretation-of-emojis-can-vary-widely <comment><USER2> Related, Recent: [https://news.ycombinator.com/item?id=11446047](https://news.ycombinator.com/item?id=11446047)</comment>


Ask HN: Should your boss know about mental issues like depression or ADHD? - <AUTHOR> As the title suggests, what does HN think? <comment><USER2> It depends on whether your boss is competent or not.

Generally, yes. You should be able to discuss this with your immediate manager and they should (1) understand or (2) educate themselves.

This evening I had a long conversation with a direct report about problems he is having with his girlfriend. It's impacting his work and his health. I can help him and direct him to additional resources that help him more. It also provides context to the time off he needs.

If you are uncomfortable discussing these kinds of issues with your boss, find a new boss. Understanding you, your motivation and challenges is literally what they are paid for.

</comment><comment><USER3> contrary to what the `gaspoweredcat` says, and agreeing with others in this post.

I don't have experience with depression personally, but know of other employers who have employees who struggle with depression. Some of these employees are the best in the company, and the employer understands that in order to serve the needs of these employees, this is something that needs to be taken care of.

It's about understanding, and making sure the employer knows what to do to help you be the most productive at work. When you're going through a tough time, what can they do to help?

If your employer doesn't understand, it is possible that they don't value your contributions. And you should want to be contributing.

I'd take that approach.

You are a contributing member to the team, an issue exists, you want to continue to contribute, how can you both work together to make sure it works.

If your employer doesn't appreciate that, maybe you have the wrong employer.

</comment><comment><USER4> my friend did this at a well known tech company, and they screwed her over in a very bad way

sadly your boss usually isn't your friend, and your boss will talk to other co-workers, and then they may want to get rid of you

i'm sure there are exceptions to this, but you sadly can't bank on that

</comment><comment><USER5> Maybe if it is a disability and you require something like a service dog in the workplace to cope with it. I know some people with physical problems require special chairs.

</comment><comment><USER6> I think "should" is a dangerous idea, and when it comes up I look for some other way of framing the question.

It depends.

</comment><comment><USER7> no, theres no benefit in them knowing as its highly unlikely they will understand</comment>


Why desktop computing failed - <AUTHOR> http://www.zdnet.com/blog/virtualization/why-desktop-computing-failed/3747?tag=mantle_skin%3Bcontent <comment><USER2> >Who cares to interact with the operating system for anything other than to run applications?...Desktop computing fails, in part, because the operating system is so easy to corrupt, even for an ordinary user.

These are the main two reasons why the average person shouldn't have a full PC. The attack has always been to insult the user. I'm enjoying the experimentation that is coming with touch. It's forcing the engineer to think what is best for the user instead of what is easier for themselves. Freedom will not disappear for the power user but the needs of the average user has to be met.</comment>


Announcing Pyston: an upcoming, JIT-based Python implementation - <AUTHOR> https://tech.dropbox.com/2014/04/introducing-pyston-an-upcoming-jit-based-python-implementation/ <comment><USER2> > For instance, the JavaScript world has switched from tracing JITs to method- > at-a-time JITs, due to the compelling performance benefits.

This is a weird way of putting it. Method-at-a-time JITs have been around much longer and represent a more traditional approach to JIT compilers. Tracing JITs have only become popular in the last 5-10 years. And during that time they've been seen as the sort of hot new thing, so much that there is a classic LtU thread from 2010 titled "Have tracing JIT compilers won?" ([http://lambda-the-ultimate.org/node/3851](http://lambda-the- ultimate.org/node/3851))

While it's true that V8 has always been method-at-a-time and Mozilla has abandoned their tracing JIT TraceMonkey, LuaJIT is one of the fastest dynamic language implementations out there and is a tracing JIT. Unfortunately the benchmark game dropped LuaJIT so it's not easy to find benchmarks, but last I saw LuaJIT was pretty dominant speed-wise among dynamic language JIT implementations.

Mike Pall (LuaJIT author) argues that TraceMonkey's lack of compelling performance was more a result of trying to bolt tracing onto an existing VM as opposed to any shortcoming of tracing as an approach ([http://lambda-the- ultimate.org/node/3851#comment-57643](http://lambda-the- ultimate.org/node/3851#comment-57643)).

<comment><USER3> Dalvik (the Android VM), when they added a JIT, claimed to be "starting" with a tracing JIT which they would "supplement" with a method later, which they seemed to feel could provide more performance. Their argument is that the method JIT operates over a larger code window; but Dalvik only seemed to operate on extremely short traces, so it has always been unclear to me whether this was just a weird limitation of their specific design :/.

</comment></comment><comment><USER4> I'd love to hear more about their issues with PyPy, it sounds like they wrote of PyPy simply because they don't understand why it works so well. Not to mention that this is mostly a re-hash of stuff found in unladen-swallow.

I mean, if your end goal is to write another Python, sure go for it. But it really sounds like these people haven't done their research. I see nothing to write home about.

\--- EDIT ---

Not to mention that JS is a completely different language form Python. Everytime you add two objects in Python you have the possibility of hitting a system defined add, or __add__ or __getattr__ or __getattribute__, or __radd__, or __getattr__ (looking for __radd__), etc. That'll be fun....

<comment><USER5> Their description does not suggest they don't understand how PyPy works, but rather they don't think they can tackle the yet unsolved failure modes (blowup, etc) of trace compilation.

They approach they're describing is one that already works in V8, JScore, and IonMonkey, which is to mix type prediction, type analysis, and runtime handling of unexpected cases. Basically, you use type feedback information to get an initial set of types for a method, use type inference techniques to squeeze out type checks, and then compile the method in a way that handles the expected types in a fast path and traps into a slow path as necessary.

<comment><USER6> None of V8, JavaScriptCore, SpiderMonkey do allocation removal, which is the single most important optimization PyPy and LuaJIT do, which also goes back to Psyco. I think it is unknown how to do this well in method JITs.

Allocation removal by partial evaluation in a tracing JIT: [http://dl.acm.org/citation.cfm?id=1929508](http://dl.acm.org/citation.cfm?id=1929508)

Allocation Sinking Optimization: [http://wiki.luajit.org/Allocation-Sinking- Optimization](http://wiki.luajit.org/Allocation-Sinking-Optimization)

<comment><USER7> > None of V8 .. do allocation removal

This is not correct. V8 does sink allocations into deoptimization exits. It does not sink allocations out of the loops at the moment though.

> I think it is unknown how to do this well in method JITs

I don't think it is unknown. The main simplification for tracing JITs comes from the fact that deoptimization and loop-exit can be elegantly treated within the uniform framework, which is a little bit harder for method JIT and you need to find right place to insert materialization instruction after the loop based on post-domination. Nothing hard or unsolvable though.

</comment></comment></comment></comment><comment><USER6> Those who do not learn history are doomed to repeat it.

[http://qinsb.blogspot.kr/2011/03/unladen-swallow- retrospecti...](http://qinsb.blogspot.kr/2011/03/unladen-swallow- retrospective.html)

<comment><USER8> I can't speak to the non-technical reasons mentioned in the post, but there's good reason to believe that LLVM is in a very different state than the time that Reid wrote this, particularly wrt JIT support: the JIT engine has been completely replaced. Both of the things that he mentions (lack of back- patching, lack of gdb support) have been added to LLVM mainline.

<comment><USER6> LLVM's JIT support has changed a lot, but one thing didn't change: "LLVM code generation and optimization is good but expensive."

Even LLVM's "fast" code generator is slower than most JITs' code generators.

<comment><USER8> Definitely true; there are some overheads that could be low-hanging fruit to optimize, but the real solution is most likely to use a tiered-compilation system. ie only invoke the full LLVM code generator once a function has been called 10,000 times. It's definitely an open question as to how to get faster compilation times out of it; we have a simple LLVM interpreter but since LLVM isn't designed for interpretation it's pretty slow.

I think you can look at the people who are interested in adding LLVM tiers to their JITs (ex Apple, Facebook) to see that we're not the only ones that think there can be a place for "good but expensive" code generation in a JIT.

<comment><USER9> Like this?

[https://github.com/dropbox/pyston#compilation- tiers](https://github.com/dropbox/pyston#compilation-tiers)

</comment></comment></comment></comment></comment><comment><USER10> There's some more technical details here: [https://github.com/dropbox/pyston#technical- features](https://github.com/dropbox/pyston#technical-features)

Right now they have no baseline compiler but will interpret (un-optimised?) LLVM IR at first, second tier is unoptimised LLVM compilation, then LLVM compilation with type recording hooks and finally a fully optimised compile. Given the history of the Unladed Swallow project and others using the LLVM JIT, they're likely to find they have a lot of work on their hands, particularly as PyPy is really rather good these days.

EDIT: There's some more info here in a post to the LLVM mailing list by one of the Pyston developers [http://article.gmane.org/gmane.comp.compilers.llvm.devel/718...](http://article.gmane.org/gmane.comp.compilers.llvm.devel/71870). They've added a simple escape analysis pass for GCed memory among other things.

As always, if you're interested in LLVM or compiler stuff you should subscribe to [http://llvmweekly.org](http://llvmweekly.org) (disclaimer: I write it) and follow @llvmweekly

</comment><comment><USER11> I was really hoping that they would support Python 3. Unfortunately, Python 2.7 only.

Please. Python 3 is ready. :(

<comment><USER12> Python 3 is still very much not ready for a variety of complicated things, and some large stacks will likely take years of effort to be ported.

Mercurial is an example, I think twisted is another.

<comment><USER13> From what I gather, one of the things holding mercurial back is support for python 2.4, although the support of %-formatting for bytestrings will move the port of mercurial forward.

</comment></comment></comment><comment><USER5> Between Dart at Google, Hack at Facebook, and now Pyston at Dropbox, it's really neat to me that there is a resurgence in interest in language implementations. The field seemed quite moribund through most of the late 1990's, early 2000's.

<comment><USER14> Dart and Hack are new languages, not new implementations of an existing language. Pyston seems like a new VM for Python (more comparable to HHVM, PyPy and V8).

<comment><USER5> By "Dart" and "Hack" I meant the Dart VM and HHVM. What I mean to say is that it's neat to see a renewed emphasis on serious, high-performance language implementations, whether for existing or new languages. For awhile it had seemed that there was just JVM/CLR on one side and a bunch of interpreted languages on the other.

<comment><USER14> Hack and HHVM are completely separate projects (they're even written in different languages: Hack in OCaml, HHVM in C++). They're both really interesting projects though.

</comment></comment></comment></comment><comment><USER15> Why not build this on top of luajit?

I also toy with the idea of build a language, and my main contender is luajit (perhaps with terra). In the other hand, julia have be done on the LLVM...

<comment><USER16> LuaJIT is married so hard to Lua that it makes no sense to do so. Did you look inside?

</comment></comment><comment><USER17> The "How it works" paragraph almost sounds like it was taken from a description of how Julia works. (Not implying anything negative, btw.)

<comment><USER18> It's pretty natural, we don't really have anything better that this stack, do we?. If you're writing JIT, why invent your own backend if LLVM is good enough? I mean, well, probably it's possible to write something better than LLVM, but it would be quite exceptional work. And what that section describes would be pretty typical for any duck-typed language passed to LLVM. Devil's in the details, anyway. Actually, at this level of detalization you can say that almost every cooking recipe sounds the same: "Chop products; put them in the cattle and put it on fire for some time; season it".

<comment><USER6> Many people (including myself) think PyPy is a better stack. We will see.</comment></comment></comment>


130+ essential vim commands - <AUTHOR> http://www.catswhocode.com/blog/130-essential-vim-commands <comment><USER2> MOVING IN THE FILE

        G moves the cursor to the end of the file

        L moves the cursor to the last visible line
        (H for the first visible line and M for the middle one)

CASE

        vEU should probably be veU since I see no mention of
        WORD vs word in the article.

        Similarly, vE~ should probably be ve~.

        Also, those commands only change the case from the
        cursor to the end of the word which may not be what
        we want and is not what the description says.
        viwU and viwu are more correct.

        There's also a consistency issue.

        If we are going with Vx:

        g~~ should be V~

        If we are going with gxx:

        Vu should be guu
        VU should be gUU

        veU should be gUiw
        ve~ should be g~iw

FILE EXPLORER

        :Vex is probably easier to remember than :Sex!

INTERACT WITH UNIX

        Adding <C-z> would be useful.

TABS

        gT shows previous tab

        1gt is quicker than :tabfirst
        0gt is quicker than :tablast

WINDOW SPLITTING

        :nly should be :only

AUTO-COMPLETION

        The title should be COMPLETION as there's nothing
        automatic with it.

        It should mention Ctrl+x Ctrl+o, too.

TEXT INDENT

        = is "format" not "indent". Those two lines should
        go into the ALIGNMENT part which should probably be
        renamed FORMATTING.

        Consistency issue:

        1GVG= should use gg instead of 1G.

        gg=G is shorter, anyway.</comment>


Hackers to NSA chief: Read the Constitution - <AUTHOR> http://news.cnet.com/8301-1009_3-57596420-83/hackers-to-nsa-chief-read-the-constitution/ <comment><AUTHOR> Personally, I'm sick and tired of "OMG! SHARIA LAW!" being used as the excuse to spy on all of us. The same demagoguery was used by the Nazis (using Jewish law) as the basis for their depredations.

> "Why do so many countries want to attack us?" the person asked.

> The general replied that America stands in the way of them reaching their > objective, which is to force everybody to comply with sharia law.

> "They want to attack us because we're bombing them!" shouted another person, > to much chuckling from the audience.

And General Alexander should get a costume that doesn't make him look like one of the Love Boat crew.

<comment><USER3> _And General Alexander should get a costume that doesn 't make him look like one of the Love Boat crew._

Cheap ad hominems only detract from the actual arguments to be made. Ad hominems that focus on an individual's clothing are especially weak, given the average attire of a programmer.

<comment><USER4> Alexander could have worn business or business casual attire to this event, but he chose wear official military garb to a non-military event in order to cloak his arguments with official authority.

As I've argued elsewhere, the amount of political authority "Emperor Alexander" has managed to accumulate, and the unquestioning treatment he has received in congress and elsewhere, are signs of weakening in the republican system.

<comment><USER5> I don't think it was to cloak his arguments with official authority. I think what he was trying to do is use the blackhat conference as an open forum between the technology experts/hackers and the government. He had to have balls to wear that uniform in front of thousands of outraged people. I may not agree with what the NSA is doing, but you have to respect the man for talking at that conference especially in that uniform.

</comment></comment></comment></comment><comment><USER6> > "Why do so many countries want to attack us?" the person asked.

That's the 1 uncomfortable question that is at the center of the whole mess.

It's literally the vicious circle. The problem is, there are people who have an enormous financial interest in keeping this going.

To understand what I mean, look at the scale of the budget that's being distributed (both the absolute and the relative values): [https://en.wikipedia.org/wiki/List_of_countries_by_military_...](https://en.wikipedia.org/wiki/List_of_countries_by_military_expenditures)

</comment><comment><USER7> This was heavily discussed yesterday [1], where tptacek had a great comment [2], which is well worth a read. Anyone interested in watching the talk can head over to Youtube [3].

[1] [https://news.ycombinator.com/item?id=6135833](https://news.ycombinator.com/item?id=6135833)

[2] [https://news.ycombinator.com/item?id=6136338](https://news.ycombinator.com/item?id=6136338)

[3] [http://www.youtube.com/watch?v=xvVIZ4OyGnQ](http://www.youtube.com/watch?v=xvVIZ4OyGnQ)

</comment><comment><USER8> Scary the naivete of a U.S. general who would make such a comment about shari'a. If he really believes such nonsense our defense strategy against Al- Qaeda will be similarly uninformed. The scary thing is that these beliefs are probably widely held amongst high-level U.S. military leaders. If you were to ask them what shari'a law is, they wouldn't have the slightest idea.

</comment><comment><USER9> We have to stop pretending like there is literally zero difference between passive data collection and actively spying on someone.

We also have to stop pretending like being investigated is the same as being found guilty.

All this "read the Constitution" talk begs the initial question - what kind of risk are we okay with accepting when we ask for our privacy? Or to flip the question around, what are we getting in return for giving up our privacy, and is it worth it?

Frankly, we don't know right now, because no one's telling us (and being honest about it). I just want more information and less PR spin...

<comment><USER10> If the difference between passive spying and active spying is 'WHERE ssn='XXX- XX-XXXX', I don't think your 'difference' argument holds any water.

<comment><USER9> Why not? One makes no effort to identify each individual unless probable cause presents itself, and the other is when probable cause already exists and a warrant is granted.

It's watching a place vs. watching a person. How is that not "different"?

<comment><USER10> It's not watching a place, it's watching a platform/utility with fine-grained categorization and structure of information.

I'd compare it to holding the ebola plague in a research facility without publicly providing the safety measures that we put in place to protect the virus from getting out. Do you know how many scientists would be up in arms?

The only difference here is that we are dealing with computers which are usually publicly connected no matter what..and if the government has this information, who says hackers aren't going to be able to steal parts of the DB or query it? The very act of having this info, categorized, is just ghastly..and Orwellian.

<comment><USER9> Lots of stuff wrong with what you've written, and I don't have time to address everything, but I'll give you a short list:

* You're begging the question by asserting it's the Ebola virus. The question is whether or not it's dangerous and by calling it a deadly virus you're asserting it is as a given. Logical fallacy.

* I'd like to know where you got the information that the collected surveillance data is fully processed, even being used in its entirety, or that it's "fine grained". If you have information that hasn't yet been released, I recommend you be careful. See what happened to Snowden?

* What do you mean "computers which are usually publicly connected no matter what"? Are you saying that when a computer is connected to a router, the data it transmits is public information?

* What would hackers do with my location data, exactly? The fundamental problem that privacy solves is that the government would use your private data to cause you legal trouble. Hackers have no such luxury, and while they could steal your money or identity, that's a constant risk for the government, anyway. We already trust the US government with _tons_ of our personal information, and yes, it could get hacked. It does get hacked, and yet somehow we're still here.

* 1984 is fiction. It does not, in any way, shape, or form have any influence or predictive powers on the future outcome of events. It's a good story, but it's as useful as Harry Potter is at telling us how our society is going to transform.

<comment><USER10> Lots of stuff wrong with what you've written:

* I made an analogy, of course it isn't a virus - it's information that would have the possibility to wreak havoc if in the wrong hands.

* Nothing has happened to Snowden yet other than being made an enemy of the state. The fact that he is alive is somewhat of a testament to how much he _hasn 't_ released.

* Nothing of the sort, don't twist my words. Computers are notoriously hard to localize when connected to any network at all, local included. The CIA hacked the firmware of Iranian centrifuges through a massive widespread worm on _all_ computers that were later connected to the nuclear facilities network. ([http://en.wikipedia.org/wiki/Stuxnet](http://en.wikipedia.org/wiki/Stuxnet))

* Your location data is a tiny bit of the information that is stored. Phone records, internet usage by downloads and web sites visited, text messages, etc.. are all being logged by the NSA.

* It's a work of excessive circumstance, it serves to show an extreme -- give you what would result once steps cross bounds, and don't recede.

</comment></comment></comment></comment></comment></comment><comment><USER11> This is hilarious! The Constitution? Paper constitutions aren't worth the paper they are printed on. They are an Americanism. Before the American paper Constitution, constitutions were exactly what the word signified - <USER2> structure of a ruling system. And a Constitution always becomes a small-c constitution even apart from the amendment process. Notice the actual result of the New Deal legislation. The rise the administrative state. Agencies that make, execute and judge on rules. Legislative bills that are shells for bureaucrats to fill (Dodd-Frank, PPACA, etc). NONE of these things are authorized by the "Constitution." Please note that I haven't opined on whether I think this development is positive or negative. I do think that is a secondary matter to the importance that smart people such as the HN audience _understand_ the real structure (small-c constitution) of America is only tenuously related to the big-C Constitution.

Okay downvote away gentlemen!

<comment><USER12> Technically, I believe it's parchment, not paper.

</comment></comment><comment><USER13> Instead of calls to "Read the Constitution", what we really need are calls to "Enforce the Constitution" !!

</comment><comment><USER14> The government and the NSA are still run by Americans. Which means that those Americans are still at fault for breaking the constitution and feeling above the law.

There are many Americans that are still selling their souls to the NSA in order to provide for their families. More programmers are replacing Snowden and more are still being hired. Why? Because government is buying away our freedoms through greedy Americans and corporations. If you want to cut down the NSA spying, the recipe is very simple: stop taking the money and talent from the government. If your employer is constantly submitting RFPs to the government, quit. If you get excited that your company has any "big contracts" with the government, quit.

Take away the talent and end the greed for the easy government money. The choice is, as it always has been, our choice.

<comment><USER15> There is an even better choice. Take the job (and money) but hack the system so it no longer works (but still appears to).

</comment></comment><comment><USER16> USA, where people are afraid to heckle.

<comment><USER17> Please explain how it's at all useful to heckle?

Heckling is probably the lowest form of displaying your disagreements with the person doing the talk.

<comment><AUTHOR> Heckling is one of the oldest forms of political dissent. If one can't handle heckling, one shouldn't be a politician or any kind of public figure.

<comment><USER17> That doesn't make it acceptable / useful as per my question.

<comment><AUTHOR> It's very useful. We're still talking about it.

</comment></comment></comment></comment></comment><comment><USER18> So much Grandstanding in the media makes me roll my eyes after a while.

</comment><comment><USER19> I think it was probably instructive for the hackers to analyze the General attempting to do social-engineering.

</comment><comment><USER20> I may not agree with the guy but I am impressed by him. He had the balls to go on stage in front of a crowd of people who could be aggressive, and presented his case. Not sure how well it was, since I wasn't there. However, that takes courage.

<comment><USER21> A group of hackers is not physically intimidating in the slightest, so what's to admire? I would have admired him if he had apologized and resigned.

<comment><USER22> Not to mention that if you are head of the worlds most powerful intelligence agency, how much does courage even have to come into play?

</comment></comment></comment><comment><USER23> "They elected me to lead not to read" \- Rainier Wolfcastle

</comment><comment><USER17> heckling at a speech with hilariously irrelevant quips isn't really conducive to anything, no matter if you agree with how the NSA does things or not.</comment>