top | item 19615534

2019 Stack Overflow Developer Survey Results

235 points| joaomoreno | 7 years ago |stackoverflow.blog | reply

185 comments

order
[+] andy_adams|7 years ago|reply
Can someone help this old (2^5 years) developer out? I've worked with a number of programming languages over the years, and have never found a combination that brings me such joy and productivity as Ruby and Rails. However, I've always felt that Python and Ruby were very similar in style & goal.

Can someone who is experienced in both Rails & Django explain why Python & Django are trending up so quickly, while Ruby & Rails are ranking on the "most dreaded" lists? I don't want this to become a holy war, I am just genuinely curious what I'm overlooking.

[+] burlesona|7 years ago|reply
You asked about why Python but it has a lot to do with JS too. But first lets compare against Python:

Ruby is a delightful language, but it's dominated by one niche (web development) and one framework (Rails).

Over the last 10-20 years Python has become the main teaching language in Academia. This has greatly contributed to it's ecosystem for math and science, which in turn has contributed to its rise in Data Science and Machine Learning. It also gets a lot of support from Google.

All of these things combined mean that the broad rise of Python is lifting up Python for web development, but if anything I'd say web dev in Python is lagging behind those other uses.

There's one more thing that I think is the root cause of why Rails - the framework - has faded somewhat in the minds of web devs. Rails has always been an opinionated framework, and early on they came up with "The Rails Way" to do front-end assets. The combination of Sass + CoffeeScript + Asset Pipeline with built-in concatenation, minification, and asset hashing was pretty neat compared to the old world of a bunch of es5 files loaded via script tags.

But this hit before the rise of NPM and being able to `require('foo')`.

The JS packaging wars went on for a while and none of those asset solutions are as simple and "just work" as the Rails Asset Pipeline -- but the asset pipeline doesn't hook you into NPM. Rails dragged its feet for a long time on that before adding webpack support.

So I think during that time you had a TON of the trendy hipster open source people moving into Node first on the front end, and then eventually losing interest in Rails because the framework wasn't making it easy for them play in the very latest js ecosystem.

And I think there quickly became some saltyness among Ruby devs about Javascript, that people were overdoing it and that really you only needed "sprinkles" of Javascript to make a great app.

So (1) Python has risen a ton overall, lifting Django, and (2) Rails was slow to embrace the JS craze and that held Rails back.

Those two trends pretty much tell the story as far as I can tell.

[+] 0xFACEFEED|7 years ago|reply
You're probably going to get a lot of responses with "this is why rails is bad" and "this is why django is good".

Though having worked extensively on both and not having a particular love for either, the simple answer is this (IMO):

Python skills transfer to other industry disciplines far better. Picking Django (vs Rails) is just a good career move. Data scientists use Python heavily (scipy, numpy). Many universities teach Python as the first scripting language. Python has a much stronger foothold outside of web frameworks.

[+] rootusrootus|7 years ago|reply
I have no hard evidence, but from a business perspective I have figured that one of the main appeals of Python is the combination of simple and strict that defines the community. Some languages (cough Perl cough) are practically art, and that frequently translates to a steep learning curve for new developers to a project, which in turn means cost to the business. Bringing on a new developer to a Python team feels like it involves a much shorter time-to-productive transition period. As a manager that makes me biased towards Python for workloads where a scripting language makes sense.
[+] tomca32|7 years ago|reply
I also don't understand this. Even today, Rails is, by far, the most productive environment that exists for developing a web application. I speak this as someone who also wrote a ton of backends in Node.js, Java, and many other languages (never tried Django though, so I don't know about that). Almost all of those applications would have been 10% of the effort if they were just Rails apps.

A sibling comment here mentioned that Rails' power came from other gems, but that's not really true. Rails is still actively developed, and just Rails, by itself, gives you more functionality out of the box than whole 1000+package Node stacks.

[+] robbrit|7 years ago|reply
I use Python extensively at work for one main reason: Tensorflow. We're an ML shop, and Python has the most well-developed tools for ML. Ruby doesn't have anything that even compares to numpy in quality, let alone all the things built on top of it like scipy and pandas. It will take a huge amount of effort for Python to catch up.

Personally as an infrastructure engineer, I'd be incredibly happy to drop Python, and almost everyone on my team agrees. When you're building complex data processing pipelines that have to support the hundreds of features that scientists ask for, having static types (especially ones that differentiate between different dimensions of tensors) is a huge win over having to write a unit test for all the possible combinations of things that can happen.

Unfortunately from a solid infrastructure perspective, Ruby is even messier than Python due to the rampant metaprogramming culture. This doesn't matter so much in web dev where the layers of complexity are not that thick, but in other types of development it becomes a real burden very quickly. That might be one reason why Python is preferred over Ruby.

[+] burlesona|7 years ago|reply
Separately from my other comment, you said Python and Ruby are very similar in style and goal, and what are you overlooking?

As someone who has done a decade of Rails development and works in a Ruby + Python shop, I'd say you haven't overlooked anything.

Ruby and Python are so similar in style and tradeoffs that it's quite difficult to make a case for one _language_ over the other for any particular task.

So then it comes down to (1) ecosystem and (2) personal preference.

For a long-time Ruby has had a better web ecosystem. I'd argue this is still true, but I don't know if it will last. The reason is that Python's overall ecosystem has developed a lot more than Ruby's and the overall larger community is really valuable.

[+] web007|7 years ago|reply
I can speak to the RoR dread side, as someone who is now in Django-land coming from RoR.

RoR is ridiculously opinionated. If you don't know The Ruby Way then you'll be fighting the framework for every inch of productivity. It also has a lot more magic than any other framework I've ever used. It hides so much of what it does behind abstractions on top of abstractions that it's hard to do a simple thing and understand what's happening. (This ignores the fact that Ruby is Perl in better clothes, both a huge strength and weakness, depending on your past experience.)

Django is better in that it's slightly more obvious what's happening and why. It still has some magic to it, but not to the same extent. You can also do whatever you want, and it'll be a little harder or a little easier, but it doesn't fight you nearly as hard if you're not doing things The Django Way.

I think if you're a RoR dev and know RoR and like how it works then you're golden - stick with it and be productive. If you don't drink the kool-aid then you're not going to be happy.

[+] anderspitman|7 years ago|reply
There's a saying I'm fond of that goes something like, "Python isn't the best language for anything, but it's the second best language for almost everything."

But if I had to pick one thing to point at to explain its rising popularity, it would be data science, as others have mentioned. I wonder if Travis had any idea the impact he would have when he made numpy.

[+] JoelTheSuperior|7 years ago|reply
Whilst I'm pretty heavily experienced in Rails I'm less-so in Django. If I had to guess Rails being dreaded is down to experienced Rails veterans wanting to move onto the new hotness, and the rise of Python / Django being simply down to the fact that people newly getting into web development are far more likely to know Python than Ruby.
[+] hodder|7 years ago|reply
Django is likely rising because Python is rising. Most people are learning Python as their first language, and Django is a logical tool for them to try to build web apps.
[+] whytaka|7 years ago|reply
Personally I choose Python over Ruby and Django over RoR just on syntax and readability. There’s absolutely nothing about the way Django names and structures their framework that has me guessing but RoR is full of them.
[+] __exit__|7 years ago|reply
I personally prefer Django because everything is more explicit than in Rails.

Explicit imports, no magic file locations or configurations...

[+] snarkyturtle|7 years ago|reply
The main reason why Python is trending is mostly because of the data science community. Things like Pandas, NumPy, Jupyter Notebooks and Tensorflow all are built on python, mostly because of its simplicity and ease-of-use more than anything.
[+] diminoten|7 years ago|reply
There's nothing rising about it, Django been around and very popular for years.

Python is just a great confluence of all of the things that other languages lack, and the Python language is adapting to include more and more of the things people actually want. I don't think the Ruby language has been nearly as responsive (some would even say that Python has been too responsive, and certain language features are going too far outside of what the core of the language should do).

Also, Python is notorious for its excellent documentation (Django follows in those footsteps) and gigantic helpful community. I don't know how comprehensive Ruby's docs are, however.

Python hits all the notes, from "I want to write a random script to do a thing" to "I want to develop enterprise level software with hundreds of thousands of lines of code". You can probably pick Python as a default for nearly any baseline business-method problem and be in pretty good shape.

[+] jaabe|7 years ago|reply
I think Python is trending up because it’s a general purpose language that’s easy to learn.

Django basically does what Ruby on Rails does, not exactly but close enough. Flask does what Node.JS does, to the extend that we’re talking about building quick prototypes, not running Netflix. So you have most of your web-based needs covered. Python also does data though, and is to ML and BI what NPM is to web-development, and lastly Python does systems scripting. Basically Python does most things, well enough. By comparison, ifyou’re a .NET house like we have been, you’ll use C#, Microsoft SSIS/SSRS, Powershell and probably Python to do what you could do with all Python.

So I think that’s a big part of it. The other big factor is that Python has replaced JAVA in most of Academia. JAVA was great and all, but being something a very high percentages of CS majors learned surely helped it.

[+] bluGill|7 years ago|reply
As an outsider to both: I think a lot of it is new/shiny. ruby on rails has been popular enough for most people to have seen the mess bad coders can make. Django never got as popular (I think it is older, but it for long has been an also ran).

The other half is ruby/rails got a reputation of being a language where some write-only code was encouraged. Djanjo and python have long encouraged writing maintainable code. This is a culture thing - there is no reason you cannot write unmaintainable code in python or maintainable code in ruby, but the reality is people didn't. This is part culture, part rails encouraged getting something working fast even if it wasn't maintainable while Django has also said take a little time to get it right in the first place and it will pay off.

[+] zepolen|7 years ago|reply
If it wasn't for Rails, Ruby wouldn't have had half the success it did. This is not the case for Python which is used for things besides Django.
[+] dajohnson89|7 years ago|reply
Calling yourself old at 32 doesn't really help the problem of ageism.
[+] hintymad|7 years ago|reply
Maybe language does not matter that much in many cases. Modern languages have become so good that I don't find myself wrestling with them very often. When it comes to the point that I do need to fight my programming languages, well, let's just say there are way more serious stuff for me to worry about first, like system designs, algorithms, underlying platforms, ecosystems, and team dynamics. Really, language is the least concern at certain point of your career.

Or maybe great engineers just pick whatever that suits their job, and create amazing things. After all, Guido uses Python, Katz uses Ruby, Linus uses C, Odersky uses Scala, Jeff Dean uses C++, and the list goes on.

[+] WrtCdEvrydy|7 years ago|reply
Rails' power came from the gems, once the development shifts from there, Rails became a problem to maintain.

I'm liking React more now since you get the full power (and clusterfuck) of npm.

[+] andrewjw|7 years ago|reply
Correlations. Language and framework preferences are driven heavily by the environment in which those languages are used. My hypothesis is that firms which still use Rails are likely to be less responsive to their developers' demands and interests in exploring new technologies and thus "working in Rails" has an association of "working somewhere which makes me use Rails."
[+] jbtule|7 years ago|reply
Python is really simple and easy to read, and macros can make it really hard to switch from code base to code base in ruby. Python is also the #1 intro teaching language in boot camps.
[+] itronitron|7 years ago|reply
if it makes you feel any better, many of the YC companies are looking for devs with Rails experience
[+] strictnein|7 years ago|reply
> "almost 70% of respondents say they are above average while less than 10% think they are below average. This is statistically unlikely with a sample of over 70,000 developers who answered this question, to put it mildly."

Not at all. It's a self selecting survey, the people who choose to answer are likely more confident in their abilities than those that don't, and, contrary to common understanding, it is perfectly valid for more than 50% of people to be above average.

Average != median

[+] piaste|7 years ago|reply
> contrary to common understanding, it is perfectly valid for more than 50% of people to be above average. Average != median

For this kind of question ('is X above/below average?'), however, I would expect that people are _actually_ thinking of the median.

Consider a high Gini-coefficient country, where the income distribution looks like this: 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 999999. If you ask people 'is the person earning 5 above or below average?' they will say he is above average, even though he is actually above the median and below the average.

[+] wainstead|7 years ago|reply
> It's a self selecting survey

I feel like I have to point this out every year, and it's one of the most important things to keep in mind about this survey. A true survey would randomly select developers from the global developer population at large.

[+] marcosdumay|7 years ago|reply
> Average != median

Unless given an explicit definition, the word "average" has been abused to an extent that it's currently meaningless.

[+] marvin|7 years ago|reply
Plus: There are so many aspects of software engineering that 70% can easily be above average (or the median) in at least one of them. It's like asking drivers if they're better or worse than average. The skill hasn't been defined with a clear metric. It's lazy to just pin this on dishonesty or hubris on the part of the respondents.
[+] jedberg|7 years ago|reply
> Do Developers Need to Become Managers to Make More Money?

50% said no. I think this is naive. We've had this discussion on HN before. Companies pay lip service to the idea that they have parallel tracks for management and engineering, but the reality of it is that it takes far more success to move up the engineering ladder.

You can be one of the very best engineers in your company, or one of many hundreds of senior managers, and make the same money. If you look at how many people are at each salary level, the higher you go, the worse the ratio gets of management to engineer.

If you want to get to the highest levels of the engineering ladder, you have to be one of the most well known engineers in the world. Or be a VP. It's not easy to be a VP, but there are far more VPs out there than Distinguished Engineers.

[+] scottbreyfogle|7 years ago|reply
I think this is an example of developers taking questions quite literally: You don't need to become a manager, but many (myself included) would admit that it does help.

You also might want to take into account the age and seniority of most developers on the platform - for someone with <10 years of experience, it's likely that you absolutely have an avenue to make more money without becoming a manager.

[+] MrTonyD|7 years ago|reply
Another aspect is autonomy. It is routine in most companies for a low level incompetent manager to be able to waste all the time and talent of a senior engineer. So the issue is more than just money.
[+] umvi|7 years ago|reply
> We asked respondents to evaluate their own competence, for the specific work they do and years of experience they have, and almost 70% of respondents say they are above average while less than 10% think they are below average. This is statistically unlikely with a sample of over 70,000 developers who answered this question, to put it mildly.

I'm torn here. It's hard to correct for bias. It would be like if a bank had a survey and had people rate their financial stability - but they had to have an account with the bank to participate in the survey. Wouldn't that bias the results in favor of financially responsible people?

I'd be interested how many 0 rep new accounts with lots of downvotes claimed high competence vs. established accounts. It could very well be that people with SO accounts who are willing to take the time for SO's survey are the type of people that are more competent on average than developers that don't have SO accounts and don't participate in surveys.

[+] Pfhreak|7 years ago|reply
I'm a non-binary manager who was formerly a non-binary engineer. I use singular they.

I've had people go out of their way to make my professional life more challenging or insulting. But it makes me happy to see nonbinary/nonconforming identities addressed in this survey. Our experience of the tech world is very different, and it's great to see some acknowledgment of that.

[+] ChrisRR|7 years ago|reply
As with every year, take these result with a massive pinch of salt. The results are heavily weighted by students and young developers who are way more likely to chase the latest trends and buzzwords
[+] atonse|7 years ago|reply
Kudos to the Visual Studio Code team for all its success.

VS Code and TypeScript, are kinds of technologies and tools that just win entirely on their strong merit, in spite the image of who has created them.

.NET Core is getting up there too. MS has always been a developer friendly company but they are definitely earning mindshare back from non .NET developers.

[+] vturner|7 years ago|reply
Curious about the salaries for the top four paying technology languages. Three of the four for US are functional focused languages, and for global all four are functional focused.

As someone learning Scala, this is both encouraging and interesting, and I'm curious as to any explanation to the table result. Do functional programming languages increase developer productivity so significantly that a single developer can command such compensation? Do these languages attract highly productive developers whom the market compensates for their productivity? Something else?

[+] measure2xcut1x|7 years ago|reply
As a solo indie developer running my own saas business for 20+ years now, and rarely interacting with other devs, this survey is priceless. I often wonder where I and my stack/tools are in relation to the rest of the field. This report (even if it is biased or skewed) makes me feel like I'm not alone and gives me some validation on my life path and technology choices.
[+] tuna-piano|7 years ago|reply
I think the most interesting portion was the "Developer's perspectives by gender".

When asked what one thing they would change about Stack Overflow:

Women used the following words more often (compared to men): condescending, replies, nicer, rude, dumb, friendlier, assholes, thanks, confusing, knowing.

While men used the following words: simpler, huge, banned, angular, official, complex, algorithm, expert, bounty, force.

https://insights.stackoverflow.com/survey/2019?utm_source=so...

[+] Dumblydorr|7 years ago|reply
Can someone explain why rust is so beloved?

Also I work in R primarily, I find it funny that love and dread are both near 50%.

[+] mlthoughts2018|7 years ago|reply
Bittersweet to see how much “distracting work environment” is reported to reduce productivity, given that companies abjectly refuse to provide private & quiet workspaces despite it being unequivocally cost effective to do so even for most start-ups in dense urban centers.

I continue to find the discussion of salary disappointing though. The survey provides a good opportunity for more detailed information.

[+] bad_good_guy|7 years ago|reply
I actually found this to be the most interesting excerpt from the survey results

>In the United States, almost 30% of respondents said they deal with a mental health challenge, a higher proportion than other large countries such as the UK, Canada, Germany, or India.

I would be interested to know just how much a higher proportion it was than other countries.

[+] kyoob|7 years ago|reply
Odd that Perl isn't mentioned anywhere, good or bad, in these results. It's usually at least in there among the Most Dreaded. Was it not listed as an option this year?
[+] iLemming|7 years ago|reply
Clojure did it again. Most paid language.
[+] chillee|7 years ago|reply
VSCode has seriously dominated these lists since its release in 2016.

Overall:

2016: 7.2%

2017: N/A

2018: 34.9%

2019: 50.7%

Web: 2016: Unranked

2017: 24.0%

2018: 38.7%

2019: 55.6%

Mobile:

2017: N/A

2018: 36.6%

2019: 53.8%

Sysadmin/Devops:

2017: 22.4%

2018: 36.5%

2019: 55.2%

Of particular note, in 2019, VSCode is actually more popular than Vim among sysadmin/devops, and is a mere 0.4% less popular than Android Studio among mobile developers.

It seems like it's mostly been gobbling market from its competitors: Sublime Text (peak of 31.0% in 2016 down to 23.4% in 2019) and Atom (peak of 20.0% in Web in 2017 down to 12.7% in 2019), although its possible their decline is circumstantial.

[+] geodel|7 years ago|reply
So Scala is among most dreaded right below Java at 41.7%. Considering in popularity it's quite low at 3.8%, it seem surprising to me.
[+] the_arun|7 years ago|reply
When we say percentage - the numbers are not adding up to 100. How are we supposed to read this report?
[+] Abishek_Muthian|7 years ago|reply
Gone are the days when developers defined their job as 'X-programmer'(X being the language) or at-least in India as platform e.g Java platform.

Companies have realised that programming languages are like 'drill bit in a tool box', one needs to use the best bit for the job.