2020 Developer Survey Results(stackoverflow.blog)
stackoverflow.blog
2020 Developer Survey Results
https://stackoverflow.blog/2020/05/27/2020-stack-overflow-developer-survey-results/
126 comments
Absolutely amazed that MongoDB is the most wanted database at 19.4%, and is less dreaded than MySQL. What is their marketing team doing that's so effective?
I generally agree Mongo has some rough edges, especially when you use it more, but I don't think it's hard to understand it's popularity. Mongo is simple to get started with, the interface is similar to JS (which is what a lot of devs using Mongo are going to be connecting from) rather than learning SQL, there are no migrations necessary to add a column, etc.
Can kind of say the same about Rust. Benefits aside, it's hard to imagine a more hostile language. Is it the language or the idea of the language people are thrilled about?
> [...] it's hard to imagine a more hostile language.
C++?
C++?
Hostile, but not more. C++ isn't completely unlike every other language people have been using for decades.
>C++ isn't completely unlike every other language people have been using for decades.
Neither is Rust, most of the things that seem weird or new in Rust already exist in functional languages.
Neither is Rust, most of the things that seem weird or new in Rust already exist in functional languages.
I heavily disagree, as someone who uses C++ as my primary language at my job for the last three years, and who has a lot of experience in many other languages.
It has developed a lot of idiosyncrasies that range from "confusing unique syntax" to "using these two features together will blow your app up with no warning from the compiler".
It has developed a lot of idiosyncrasies that range from "confusing unique syntax" to "using these two features together will blow your app up with no warning from the compiler".
I'm very confused by this claim. Rust's borrow checker is new, but everything else in the language is extremely familiar and recognizable to me from other languages I've worked with.
Structs and enums are all over the place
Free function definitions, and methods defined on a data type, are extremely common
Rust Traits are ways of naming groups of operations to be associated with different types, and share a lot of similarity with Type classes, roles, interfaces, mixins, etc. present in many common languages
async/await is similarly present in many common languages
Generics / Parametric Polymorphism, extremely familiar from C++, Java, C#, etc.
It's almost all modern takes on normal common PL things that have been in many languages for decades
So by my perspective, I see a very normal imperative language, with its own take and small quirks on very familiar features, and the only feature I've been able to come up with that's "completely unlike every other language people have been using for decades" is the borrow checker. One new unique feature seems well within the weirdness budget of a new language.
Could you expand a bit more on what it looks like from your perspective? What other features or properties of the language seem strange, alien, foreign, or otherwise completely unfamiliar to you?
Structs and enums are all over the place
Free function definitions, and methods defined on a data type, are extremely common
Rust Traits are ways of naming groups of operations to be associated with different types, and share a lot of similarity with Type classes, roles, interfaces, mixins, etc. present in many common languages
async/await is similarly present in many common languages
Generics / Parametric Polymorphism, extremely familiar from C++, Java, C#, etc.
It's almost all modern takes on normal common PL things that have been in many languages for decades
So by my perspective, I see a very normal imperative language, with its own take and small quirks on very familiar features, and the only feature I've been able to come up with that's "completely unlike every other language people have been using for decades" is the borrow checker. One new unique feature seems well within the weirdness budget of a new language.
Could you expand a bit more on what it looks like from your perspective? What other features or properties of the language seem strange, alien, foreign, or otherwise completely unfamiliar to you?
It totally is unlike every other language... I can't think of any other language that has rvalue references or move semantics or template metaprogramming or all sorts of other stuff that C++ has in order to pull off its zero-cost abstractions. For other things, like RAII and desctructors, the only language I know that has the same concepts is Rust.
I agree that Rust has some things (maybe just one thing: the ownership + borrow checking system) that are "completely unlike every other language people have been using for decades", but so does C++.
I agree that Rust has some things (maybe just one thing: the ownership + borrow checking system) that are "completely unlike every other language people have been using for decades", but so does C++.
It's the language. If you go into the detailed results here: https://insights.stackoverflow.com/survey/2020#most-loved-dr... that most loved is described as "% of developers who are developing with the language or technology and have expressed interest in continuing to develop with it."
I couldn't disagree more. I didn't find the borrow checker rules that hard to learn: they all seemed pretty sensible and intuitive (and I came from a JavaScript background, I hadn't done any low-level programming before). And all the little details of the language are wonderful: Enums, Traits, expression-orientation. It makes for a very expressive language.
Depends, a simple hello world yes maybe then you start working on some more complex structure that are trivial to do in any other languages but you will fight hard in Rust, I invite you to look how GUI things are implemented in Rust.
Even some simple sharing can be a pain and counter intrutive.
I would add that tooling and stability are also not a thing for Rust as of now, that being said it's pretty clear that Rust is here to stay like Go.
Even some simple sharing can be a pain and counter intrutive.
I would add that tooling and stability are also not a thing for Rust as of now, that being said it's pretty clear that Rust is here to stay like Go.
Complex structures are easier to get right in Rust than in mosy other languages, because the compiler railroads you into a subset of possible solutions that work correctly.
That being said, those structures are a subset of all possible structures and may feel roundabout. Sharing does end up being even less obvious, but it also steers you away from bugs which would be difficult to spot in other laguages. I think it comes out even here.
That being said, those structures are a subset of all possible structures and may feel roundabout. Sharing does end up being even less obvious, but it also steers you away from bugs which would be difficult to spot in other laguages. I think it comes out even here.
I confess I do find C++, warts and all, more expressive than Rust.
There are little conveniences in Rust like switch / if being expressions and the ? operator, but the gimped Templates and refusal to do Implicit Conversion wind up littering boilerplate everywhere. I do somewhat prefer the way its standard library handles iterators, though.
There are little conveniences in Rust like switch / if being expressions and the ? operator, but the gimped Templates and refusal to do Implicit Conversion wind up littering boilerplate everywhere. I do somewhat prefer the way its standard library handles iterators, though.
People are quite attached to technologies these days.
Could you expand on what you have found hostile about the language? Is it its syntax, semantics, development experience, ecosystem or maturity?
Mostly syntax and semantics. Programming with Rust is unlike anything else, at least unlike anything else I've used. Despite the apparent effort they put into making great error messages, I don't think manual lifetime management is something a typical programmer will pick up very quickly. Most of the other languages on the list, I imagine one could be productive relatively quickly. I have myself proven empirically that for not utterly-trivial programs, Rust isn't something one "picks up," due to layers of novelty. To be repetitive, my take is that benefits aside it's got to be the most hostile language currently achieving popularity.
Something that I've found confusing in Rust: the fact that the return type of a function call seems to depend on how the returned value is used. This thread [0] has the following example, where the statements:
I don't know what the name for this sort of behavior is, and I haven't seen it in other languages. Perhaps it's just a property of Rust's trait system? Regardless, it feels intuitive to me - like the compiler is taking type information and using it to make implicit casts throughout the program.
Not a huge impediment - just something I found confusing that isn't related to the borrow checker.
[0] https://users.rust-lang.org/t/why-cant-the-compiler-the-type...
let v: Vec<u8> = b"3q2+7w==".iter().cloned().collect();
and let v: HashSet<u8> = b"3q2+7w==".iter().cloned().collect();
are both valid, even though both statements have the same expression on the right hand side. In a language like Java you could assign a value to different types based on a sub-type / super-type relationship (Object foo = Arrays.asList(...)), but that's not the case here, nor is it the case that Vec<u8> and HashSet<u8> have the same layout in memory. Instead, according to the thread, the result from collect can be interpreted as any type that implements the FromIterator trait.I don't know what the name for this sort of behavior is, and I haven't seen it in other languages. Perhaps it's just a property of Rust's trait system? Regardless, it feels intuitive to me - like the compiler is taking type information and using it to make implicit casts throughout the program.
Not a huge impediment - just something I found confusing that isn't related to the borrow checker.
[0] https://users.rust-lang.org/t/why-cant-the-compiler-the-type...
It's called type inference: https://doc.rust-lang.org/rust-by-example/types/inference.ht...
I don't think that's what the parent comment is pointing at.
What's throwing him off is static method dispatch based on type inference on the return value.
Haskell, for example, does this too:
What's throwing him off is static method dispatch based on type inference on the return value.
Haskell, for example, does this too:
class Foo a where foo :: a
instance Foo Integer where foo = 3
instance Foo Char where foo = '*'
foo1 :: Integer
foo1 = foo
foo2 :: Char
foo2 = foo
main = do
print foo1 -- prints: 3
print foo2 -- prints: '*'> like the compiler is taking type information and using it to make implicit casts throughout the program.
It's not a cast. Rather, it's an inferred/omitted type parameter. In this case, the collect() method is actually collect::<ContainerType>(). So it's not that collect returns something to be cast, but rather that there is a different collect() implementation for each target type. When the compiler is able to infer the target type unambiguously -- for example here, because you assign it to a typed variable -- then you don't have to specify it.
It's not a cast. Rather, it's an inferred/omitted type parameter. In this case, the collect() method is actually collect::<ContainerType>(). So it's not that collect returns something to be cast, but rather that there is a different collect() implementation for each target type. When the compiler is able to infer the target type unambiguously -- for example here, because you assign it to a typed variable -- then you don't have to specify it.
Ah, I see - the "inferred/omitted type parameter" is the part I was missing. Really no different than Arrays.asList in my previous comment. Thanks!
That could be just strong signal from folks who have used both Postgres and MySQL and who don't want to go back to MySQL. An object store like MongoDB might not even be a consideration. At my current client, there is zero chance of going to MongoDB, so it's not dreaded.
A lot of enterprise developers are just catching up on the NoSQL Hypetrain. Today only I interviewed a .Net developer who was explaining how SQL Server was not able to handle their IoT workload and their team was moving to MongoDB to store the sensor data!
I was just introduced to Firestore (in Datastore mode) last week at work. (Enterprise dev.) Should I be afraid? I've heard so much shit about Mongo that at least I hope we are not dealing with as bad a product as it.
FireStore is quite good for what it does. Please be sure to visit the limits page: https://firebase.google.com/docs/firestore/quotas
If you can design your schema and usage patterns so as not to hit those limits, it's a very scalable option. But in return, you are in for a very strong vendor lockin.
Unfortunately, almost all pay as you go, linearly scalable managed databases, for example, FireStore, DynamoDB, CosmosDB are essentially lockin in nature (and maybe by design)!
Other OSS NoSQL products almost always need a base cluster costing $1000 (or more) per month to get decent baseline performance. After that point, you can scale to a very high scale by vertically and horizontally scaling your cluster.
If you can design your schema and usage patterns so as not to hit those limits, it's a very scalable option. But in return, you are in for a very strong vendor lockin.
Unfortunately, almost all pay as you go, linearly scalable managed databases, for example, FireStore, DynamoDB, CosmosDB are essentially lockin in nature (and maybe by design)!
Other OSS NoSQL products almost always need a base cluster costing $1000 (or more) per month to get decent baseline performance. After that point, you can scale to a very high scale by vertically and horizontally scaling your cluster.
Consider using Aerospike. I think it beats Mongodb in every aspect. TCO is very low, very fast read/write. IMO is the best document store out there.
The full results https://insights.stackoverflow.com/survey/2020
Thank you! I came here to ask why there was only one chart. Just wasn’t clear on mobile that it wasn’t the main report.
dang: Could you point to this article, instead of the summary?
A few things I noticed: Other than management and sysadmin, the area with the highest average seniority was embedded programming. That fits nicely with my view that embedded is an area with less age age discrimination.
Haskell pays better than C++, by a fair amount internationally, but only fractionally better in the US. I'm not sure what to make of that, but I thought it was interesting.
A few things I noticed: Other than management and sysadmin, the area with the highest average seniority was embedded programming. That fits nicely with my view that embedded is an area with less age age discrimination.
Haskell pays better than C++, by a fair amount internationally, but only fractionally better in the US. I'm not sure what to make of that, but I thought it was interesting.
Wow, the map shows Crimea (the region of Ukraine occupied by Russia) as part of Russia.
Some of those stats could use better context. At least for what I am curious about. Just for example, the years of experience of developers who visit SO.
It would be interesting if we knew that in the larger world, equal number of programmers were in each experience bracket. So then we could see which experience group visits SO the most often. But we already know there are far more programmers with 5 to 9 years experience than there are programmers with 35 to 39 years experience. So are those stats showing anything other than the natural bell curve of experience distribution of all programmers in the world?
If we had the experience distribution over all programmers whether or not they visit SO that we could compare with, it would be interesting to see any differences. My guess is that there isn't. I bet highly experienced programmers visit SO just as often as those with 5 to 9 years experience.
Maybe to a recruiter or for someone paying for job adverts, those numbers are interesting on their own.
It would be interesting if we knew that in the larger world, equal number of programmers were in each experience bracket. So then we could see which experience group visits SO the most often. But we already know there are far more programmers with 5 to 9 years experience than there are programmers with 35 to 39 years experience. So are those stats showing anything other than the natural bell curve of experience distribution of all programmers in the world?
If we had the experience distribution over all programmers whether or not they visit SO that we could compare with, it would be interesting to see any differences. My guess is that there isn't. I bet highly experienced programmers visit SO just as often as those with 5 to 9 years experience.
Maybe to a recruiter or for someone paying for job adverts, those numbers are interesting on their own.
Interestingly, job priorities for men and women are not the same[1] : Men place higher importance on "Languages, frameworks, and other technologies I'd be working with", while for women, "Office environment or company culture" and "Flex time or a flexible schedule" come first.
[1] https://insights.stackoverflow.com/survey/2020#work-most-imp...
[1] https://insights.stackoverflow.com/survey/2020#work-most-imp...
Another data point against the wage gap being a result of sexism
Except people who have flexible schedules are generally paid more.
Working flexible hours when the company chooses the hours normally pays more but working flexible hours when you choose the hours normally pays less.
No, it means you're a consultant and charge premium.
How do you tie this correlation to the negative of that causation?
Women are more likely than men to adjust their work schedules in order to provide childcare[1] because we have entrenched gender expectations about who "should" shoulder what responsibilities in a heterosexual relationship.
[1]https://www.pewresearch.org/fact-tank/2015/10/01/women-more-...
[1]https://www.pewresearch.org/fact-tank/2015/10/01/women-more-...
Having a human growing inside you for 9 months creates a pretty special and undeniable bond.
No men have yet given birth (yet?).
No men have yet given birth (yet?).
And how does growing a human make someone more qualified to shuttle kids back and forth to after school activities?
I know your question is not serious, but there are actually a large number of genetic behavioral differences between men and women that make them more easily accustomed to child care.
It's no surprise that the childcare/teaching industries are almost entirely made up of women.
It's no surprise that the childcare/teaching industries are almost entirely made up of women.
My question was genuine, if absurd. And I would ask the same of you: Which “genetic behavioral differences,” specifically, make someone more qualified to shuttle kids back and forth to after school activities?
There’s also some research that over-representation of women as K-12 teachers is responsible for the growing education gap where men are falling behind women. It isn’t just women who are held back by gender stereotypes.
There’s also some research that over-representation of women as K-12 teachers is responsible for the growing education gap where men are falling behind women. It isn’t just women who are held back by gender stereotypes.
I think your questions assume a lot of things:
- Women do most of the shuttling of kids? I've yet to see any evidence of this.
- There are differences between the genders, but 'genetic behavioral differences' is a very broad and deep assumption regarding nature vs nurture and opens a whole other spectrum of basic questions.
- Over representation of a gender in some particular field. Being equal does not mean we all have the same aptitudes and interests.
- Women do most of the shuttling of kids? I've yet to see any evidence of this.
- There are differences between the genders, but 'genetic behavioral differences' is a very broad and deep assumption regarding nature vs nurture and opens a whole other spectrum of basic questions.
- Over representation of a gender in some particular field. Being equal does not mean we all have the same aptitudes and interests.
I wonder why no one addresses the lack of representation of males in some highly female dominated sectors. For example male nurses are a minor fraction of the number of female nurses.
It's interesting to see that women ranked "Family friendliness" lower than men in this year's survey however. 11.7% for men, 10.7% for women.
Perhaps an indication that men are (rightly!) starting to expect paid parental leave? That’s encouraging :)
I'd imagine that is correlated to the significantly higher percentage of non-cisgender/non-male people who report harassment and abuse in workplaces.
I'm a guy, and I place higher importance in the latter (with women) more than the former.
There's a few technologies I actively try to avoid (.NET, etc.) but otherwise I'm open minded.
But I am much more peculiar on what kind of company environment and culture I want to work for. Call me trivial, but I really, really, don't want to work for any company that forces me to wear business casual (or worse). It's not just the dress code that irks me, but the wider culture it typically implies.
In fact, the reason I'm adverse to certain tech like .NET is also related to company type/culture that would use such tech, more so than the actual tech itself. I happen to like C#.
There's a few technologies I actively try to avoid (.NET, etc.) but otherwise I'm open minded.
But I am much more peculiar on what kind of company environment and culture I want to work for. Call me trivial, but I really, really, don't want to work for any company that forces me to wear business casual (or worse). It's not just the dress code that irks me, but the wider culture it typically implies.
In fact, the reason I'm adverse to certain tech like .NET is also related to company type/culture that would use such tech, more so than the actual tech itself. I happen to like C#.
> In fact, the reason I'm adverse to certain tech like .NET is also related to company type/culture that would use such tech, more so than the actual tech itself. I happen to like C#.
This is interesting to read - what does a .NET company type look like to you? (And follow-up, does that stereotype assume developing on Windows with .NET Framework; does it hold for .NET Core?)
This is interesting to read - what does a .NET company type look like to you? (And follow-up, does that stereotype assume developing on Windows with .NET Framework; does it hold for .NET Core?)
Mostly of the "software/tech as an unrespected cost center" kind. Ties in with my other bit about "must wear business casual". Now I know not all companies using .NET are like that of course, but a huge majority do seem to be. Disclaimer: I started my career, and spent most of it, as a .NET dev.
Does anyone really use .NET Core in production? Maybe in certain locales and industries only? I've been on the job hunt for a while, talked to and interviewed at numerous companies, and I've yet to encounter a single company advertising that they use .NET Core.
Does anyone really use .NET Core in production? Maybe in certain locales and industries only? I've been on the job hunt for a while, talked to and interviewed at numerous companies, and I've yet to encounter a single company advertising that they use .NET Core.
I've been using .NET Core on prod for like 2 years
Friends from other companies are also using .NET Core whenever they can, so yea.
Eastern Europe here.
Friends from other companies are also using .NET Core whenever they can, so yea.
Eastern Europe here.
Stack Overflow uses NET Core. I think the reason you don't see it in the wild as much as is because NET Core is pretty new. Stack Overflow migrated in late 2018. That's really about when NET Core became mature enough to use in production for new development, never mind legacy. Most companies feel no pressure to use NET Core - their huge amount of legacy software still works and can be maintained on NET Framework. Not to mention Windows-based tech like WPF and WinForms only just got support with NET Core 3 which was released 7 months ago. Companies with 'unrespected cost centers' as noted are especially conservative.
Every C# project (and programmer) I've ever worked with has been obsessed with "Enterprise" code laden with boilerplate, excessive use of design patterns, and hundreds of tiny 3 line classes that force you to jump around in the editor.
Generally these projects are not fun to work on and having colleagues that spend significant chunks of time "refactoring" or talking about refactoring is not fun.
Even saying this is going to open a bunch of sealioning from these types ( https://knowyourmeme.com/photos/873260-sea-lioning) but that's just my experience.
C# has pretty good support for lambdas and implicitly typed variables these days, so a lot of the enterprise stuff is overkill. Implementations in C# could look more like Python while being more type safe but they tend not to.
Generally these projects are not fun to work on and having colleagues that spend significant chunks of time "refactoring" or talking about refactoring is not fun.
Even saying this is going to open a bunch of sealioning from these types ( https://knowyourmeme.com/photos/873260-sea-lioning) but that's just my experience.
C# has pretty good support for lambdas and implicitly typed variables these days, so a lot of the enterprise stuff is overkill. Implementations in C# could look more like Python while being more type safe but they tend not to.
I'm a long time .NET developer and I love the framework, language (C#) and developer tools (I use Jetbrains Rider). However, if there is one thing I have to find that I do not like it is this. It is extremely common to find over-engineered .NET codebases, and the developers will just blindly follow some best-practices document from Microsoft without asking themselves whether all of it is necessary.
I once had a developer commenting on one of my blog posts who was very angry that I did not use a proper layered architecture in the blog post :)
I once had a developer commenting on one of my blog posts who was very angry that I did not use a proper layered architecture in the blog post :)
One does not simply retrieve a record from the database. One must first declare a type to represent the database's view of the record and copy it into a repository layer. Next a type shall be declared to translate the repository's view of the record to a domain layer. Another type shall translate the domain layer's view of the record to the controller layer's view...and so on.
I've been working at a .Net shop for the past year. There a tendency to see encyclopedic knowledge of OOP design patterns almost as a form of currency.
C# itself is an ok language. It's just the culture around developing web applications with .Net that's painful.
At my workplace, we're currently transitioning from C# to Typescript. As you can imagine, it's not pretty. Key to this is how Microsoft have managed to encode much of the misdirection inherent in .Net webapp development, into the Azure API surface.
I dunno...
Now I sound as dogmatic as the community I'm accusing of dogmatism...
C# itself is an ok language. It's just the culture around developing web applications with .Net that's painful.
At my workplace, we're currently transitioning from C# to Typescript. As you can imagine, it's not pretty. Key to this is how Microsoft have managed to encode much of the misdirection inherent in .Net webapp development, into the Azure API surface.
I dunno...
Now I sound as dogmatic as the community I'm accusing of dogmatism...
I am curious how that C# -> TypeScript transition is going, and how it is structured.
I was in a project that involved a team of mostly traditional enterprise .NET devs writing a greenfield app in Python (language choice mandated from up top). The result was basically something that was designed like a dogmatic enterprise .NET application, only using Python abused and wrangled to fit that style.
After that project was done, for subsequent work, the team split into two camps - one camp that despised being forced to work with Python and continued to write Python in enterprise .NET style, and one camp that decided to explore more about Python and try working in more "Pythonic" style. Code review sessions were full of emotions and drama.
Pretty much everyone in the first camp eventually left, either for other internal teams that were still working in .NET, or for other companies.
I was in a project that involved a team of mostly traditional enterprise .NET devs writing a greenfield app in Python (language choice mandated from up top). The result was basically something that was designed like a dogmatic enterprise .NET application, only using Python abused and wrangled to fit that style.
After that project was done, for subsequent work, the team split into two camps - one camp that despised being forced to work with Python and continued to write Python in enterprise .NET style, and one camp that decided to explore more about Python and try working in more "Pythonic" style. Code review sessions were full of emotions and drama.
Pretty much everyone in the first camp eventually left, either for other internal teams that were still working in .NET, or for other companies.
Yes. This sounds a lot like my current experience, except for the language involved (TS in my case) and the team split (I'm the one with less .Net experience). I like to think I'm experienced enough to see it as a valuable opportunity to learn something that's not just about code and product...
Anyway, everything else you mentioned sounds uncannily similar.
Makes you wonder how such a culture develops. The only constant appears to be Microsoft development tools, curiously.
Anyway, everything else you mentioned sounds uncannily similar.
Makes you wonder how such a culture develops. The only constant appears to be Microsoft development tools, curiously.
Not to diminish your opinion, but you (and I) are each only one data point.
The point of these surveys is to tease out the trends, since data points like us are noisy.
The point of these surveys is to tease out the trends, since data points like us are noisy.
You have to imagine this is largely that women can't take company/workgroup culture for granted like many men can.
What do you mean? Are women more adversely affected by certain types of common work environments?
Speaking from experience: Bro culture. When going to work feels like sitting in the corner of a seedy frat house trying to ignore the stench in the air. Regular beer/bar outings. Outside of bro culture there is the standard issues women deal with in the work place.(Being ignored/hepeating/mansplaining.) So having a higher priority for good office environment and work place culture makes sense.
That usually has more to do with the age of the people you work with than the company culture.
> 52% of respondents think “Hello, old friend” when they search for a coding solution online and find that the first result link is purple because they’ve already visited the link.
It's amazing how no solution has yet been found for this very real problem.
It's amazing how no solution has yet been found for this very real problem.
Wow I'm in the most popular demographic again!
"White or of European descent: 68.3%"
...seriously though, how relevant is that racial statistic? Should we break it down by eye color? Hair color?... I think categorising people based on race does more harm than good...
"White or of European descent: 68.3%"
...seriously though, how relevant is that racial statistic? Should we break it down by eye color? Hair color?... I think categorising people based on race does more harm than good...
People evidently find it interesting. You did, enough to post about it, for example.
Racism and sexism is a constant complaint against the tech industry. But unless someone is actually compiling data on it, no one knows how bad the problem actually is (or if it’s actually even a real problem).
Problems don’t get solved unless they’re being tracked.
Problems don’t get solved unless they’re being tracked.
So what problem is being tracked by showing this statistic, exactly?
Come on man, it was the first sentence of my comment.
Your first sentence was a generalisation. I still don't see how reasserting that somebody is white helps... anything related to the problems of racism and sexism, really. Help me here?
I'm having a hard time assuming good faith based on your comments so I'm going to bow out of this conversation. I'd suggest you take some time to stop and think about why someone might want to track demographic statistics in a field that is constantly under fire for being dominated by young white men.
I'm also having a hard time assuming a good faith from you even though in my eyes I asked a fair question and you choose to leave instead.
You come across like you have an agenda. What is it?
I'm also not seeing what "under fire" means. The IT area has dozens of millions of people employed. If it was truly under fire then I'd assume it would shrink in numbers, at least in terms of representation of white men? But I'm not seeing it happening. If you have links proving otherwise I'd be interested to read them.
You come across like you have an agenda. What is it?
I'm also not seeing what "under fire" means. The IT area has dozens of millions of people employed. If it was truly under fire then I'd assume it would shrink in numbers, at least in terms of representation of white men? But I'm not seeing it happening. If you have links proving otherwise I'd be interested to read them.
I don't understand why this has been downvoted so much. The question was based on a statistic on users of an English-language website, not even remotely related to discrimination, so why is it being used as an accurate description of discrimination? For that matter, why is one race being more active than another evidence of discrimination at all?
Why do you feel as if it does more harm than good? (Genuinely curious.)
It's a measurement that I am certainly curious about.
I do not belong to that most popular demographic, and have a passive interest in that demographic distribution becoming more proportional to its global distribution.
It's a measurement that I am certainly curious about.
I do not belong to that most popular demographic, and have a passive interest in that demographic distribution becoming more proportional to its global distribution.
Well to me, the color of your skin/eyes/hair shouldn't be matter in any context, let alone programming...
And these graphs convince people that it somehow is important on what skin color you have...
And these graphs convince people that it somehow is important on what skin color you have...
I agree with you that these things shouldn't matter.
Unfortunately, we live in a world where they do matter.
Measurements like this are necessary if we want to make them matter less.
Unfortunately, we live in a world where they do matter.
Measurements like this are necessary if we want to make them matter less.
> "Measurements like this are necessary if we want to make them matter less."
How does measuring skin color help make skin color matter less?
To me it emphasises the importance of skin color, when it should be ignored
How does measuring skin color help make skin color matter less?
To me it emphasises the importance of skin color, when it should be ignored
This measured race, it did not measure discrimination even by correlation let alone causation. It is not useful as any sort of evidence of discrimination.
The closest thing that can be said is that StackOverflow is biased towards western English speakers, which correlates well with white/European.
The closest thing that can be said is that StackOverflow is biased towards western English speakers, which correlates well with white/European.
Having the measurement allows us to relate it to other measurements that others have made. We may not be able to draw conclusions from the Stack Overflow measurement, but we can use it to contextualize information that we are presented with in the future.
My tech stack: Rust, Redis, MongoDB, is most loved on Stack Overflow, and most hated on HN! That must be a good sign. :)
Rust is a complete breakthrough in modern popular languages as a safe, fast, and expressive alternative.
MongoDB, or really any aggregate-oriented database, is perfect when you’re modeling your domain as aggregates and you align your data access patterns with the design of these aggregates. Do your homework to set the right settings, take regular backups, then focus on what matters (hint: it’s not really persistence).
Redis is a no-brainer, it’s just plain great for managing user sessions.
There’s a place for everything, keep your mind open :) https://martinfowler.com/bliki/PolyglotPersistence.html
Rust is a complete breakthrough in modern popular languages as a safe, fast, and expressive alternative.
MongoDB, or really any aggregate-oriented database, is perfect when you’re modeling your domain as aggregates and you align your data access patterns with the design of these aggregates. Do your homework to set the right settings, take regular backups, then focus on what matters (hint: it’s not really persistence).
Redis is a no-brainer, it’s just plain great for managing user sessions.
There’s a place for everything, keep your mind open :) https://martinfowler.com/bliki/PolyglotPersistence.html
What happened to Clojure? If I remember, it was in the top 10 for most loved language, and now I don't even see it mentioned anywhere.
Seems completely excluded, not even mentioned together with the rest of the JVM languages in the "How Technologies Are Connected". My guess would be that Clojure developers generally don't use Stack Overflow as much as others, so usage over there is low enough to not be a mark on their radar. Rest assure, nothing has drastically changed from last year, the same people who loved Clojure then, loves Clojure now :)
I’m a bit surprised Julia is ranked below Python for how much developers love the language. I’ve programmed extensively in both, and with Julia it’s an absolute joy, while I always feel like I’m fighting with Python to get it to do what I want (efficiently, at the very least).
Honestly, I'm pretty happy there were enough responses for them to actually call it out separately in the results. I'm not sure that was the case last year. Also, I think Julia's audience tends to not hang out on StackOverflow as much, since they're often scientists primarily and software developers second. Sure they use StackOverflow, but how many have an account and would answer a survey.
> Also, I think Julia's audience tends to not hang out on StackOverflow as much, since they're often scientists primarily and software developers second.
My impression is the opposite. Julia forces you to think more about CS concepts early on (which is nice) while with Python or R you can get further by just figuring out the syntax for what you want to do and not worrying about how your code is executed.
My impression is the opposite. Julia forces you to think more about CS concepts early on (which is nice) while with Python or R you can get further by just figuring out the syntax for what you want to do and not worrying about how your code is executed.
Sure, that seems plausible, but I still don't think that translates into the kind of user that would take the StackOverflow survey, which I suspect to mostly be users that are quite active on StackOverflow. More generally, I'm seeing StackOverflow metrics underperform on Julia compared to other languages (as opposed to things like Discourse usage for example).
Rust still on top. Real shame there are so few Rust jobs out there. I agree, the language is still changing way too much but that is to be expected from a relatively new language. A lot of polishing has been done and imo, it's a production ready language at this point. Tooling is awesome, cargo is awesome, packaging is great. The compiler is still very slow, despite a lot of improvements on that front but that is to be expected given Rust's nature. Real shame it's so underused in the real world :/
There are also not that many actual professional rust developers out there. I think there are a lot of developers who love the idea of rust, and are curious about rust, but I suspect the number of developers who have actually completed a rust project of meaningful complexity and deployed it to production is vanishingly small.
The metric used by Stack Overflow is "% of developers who are developing with the language or technology and have expressed interest in continuing to develop with it", so it seems likely to me are likely to have some understanding of what writing Rust code is like.
You seem to equate "actual professional" with "meaningful complexity" or "deployed to production", which seems limited. I'm pretty sure I've written meaningfully complex code outside my day job -- and I would guess many open source developers write such code outside the context of their job.
You seem to equate "actual professional" with "meaningful complexity" or "deployed to production", which seems limited. I'm pretty sure I've written meaningfully complex code outside my day job -- and I would guess many open source developers write such code outside the context of their job.
Unfortunately, people have a tendency to not read the question well or just lie to support their favorite.
If the question included the word "professionally", I think it would be a lot more meaningful.
I can only guess that this enthusiasm and high pay for finding the best Rust programmers will be "justified" in companies using it in data structures and algorithms interviews in Hackerrank and Leetcode which would be interesting to see if that makes any sense given that they can control which crates you can use, no use of unsafe{} etc which might be a turn off to some.
I'm pretty sure that no-one wants to fight with the borrow checker whilst implementing a data structure either on a whiteboard or in Hackerrank / Leetcode.
I'm pretty sure that no-one wants to fight with the borrow checker whilst implementing a data structure either on a whiteboard or in Hackerrank / Leetcode.
At what point do we stop holding Rust to lower standards because it's "relatively new"? Go first appeared in 2009 [1] while Rust first appeared in 2010 [2], but Rust's flaws are apparently expected as it's perpetually "relatively new".
I want to like Rust, but its "do anything and everything" packaging system (Cargo) makes it hard to properly integrate into external build systems, which is pretty important to large companies or any company that has an integrated build system or an existing build system. The language is also increasingly complex and shows no sign of slowing.
Developers may have a high opinion on Rust, but the evident scarcity of Rust jobs and underusage in the real world doesn't give me the impression that it's a production ready language.
[1] https://en.wikipedia.org/wiki/Go_(programming_language)
[2] https://en.wikipedia.org/wiki/Rust_(programming_language)
I want to like Rust, but its "do anything and everything" packaging system (Cargo) makes it hard to properly integrate into external build systems, which is pretty important to large companies or any company that has an integrated build system or an existing build system. The language is also increasingly complex and shows no sign of slowing.
Developers may have a high opinion on Rust, but the evident scarcity of Rust jobs and underusage in the real world doesn't give me the impression that it's a production ready language.
[1] https://en.wikipedia.org/wiki/Go_(programming_language)
[2] https://en.wikipedia.org/wiki/Rust_(programming_language)
The comparison to Go is catastrophically unfair. Google is the main driver behind the development of go, while Rust is being developed by a tiny community within mozilla and a few volunteers.
I'm not sure on this. Rust has some users all over big tech firms including Google, MS, FB, Apple and Intel.
Arguably yes, but open up github and check the scale of the largest go and rust projects. They are universes apart:
* kubernets - 2.5k contributors, 66.5k stars, 3.2k forks, 91k commits
* cargo - 609 contributors, 5.6k stars, 1.1k forks, 9.5k commits
No doubt there are large companies using Rust but that's peanuts compared to Go.
* kubernets - 2.5k contributors, 66.5k stars, 3.2k forks, 91k commits
* cargo - 609 contributors, 5.6k stars, 1.1k forks, 9.5k commits
No doubt there are large companies using Rust but that's peanuts compared to Go.
Go is notoriously slow moving and very conservative feature-wise. Can you actually point to anything specific about Go and say "Go only has that because they have more contributors"? Anything more specific than "Google is richer, checkmate"?
Note that I didn't say that Rust was buggy or was too small or something like that, I said that Rust was too complex and it didn't allow integration into external build systems. Both are things that the Rust project is completely capable of addressing but has chosen not to prioritize in favor of other language features.
Correct me if I'm wrong, the earliest discussion I can find about meeting large org requirements took place in 2019 [1], 8 years after it first appeared, or 3 years after v1.0.
It's their choice what to do and when to do it, but I think it's misleading to perpetually point at Google and ignore the Rust project's priorities. I'm open to a better explanation as to how Rust is somehow production-ready and extremely well known but comparatively few professionals actually choose to use it.
[1] https://users.rust-lang.org/t/rust-in-large-organizations-me...
Note that I didn't say that Rust was buggy or was too small or something like that, I said that Rust was too complex and it didn't allow integration into external build systems. Both are things that the Rust project is completely capable of addressing but has chosen not to prioritize in favor of other language features.
Correct me if I'm wrong, the earliest discussion I can find about meeting large org requirements took place in 2019 [1], 8 years after it first appeared, or 3 years after v1.0.
It's their choice what to do and when to do it, but I think it's misleading to perpetually point at Google and ignore the Rust project's priorities. I'm open to a better explanation as to how Rust is somehow production-ready and extremely well known but comparatively few professionals actually choose to use it.
[1] https://users.rust-lang.org/t/rust-in-large-organizations-me...
> "% of developers who are developing with the language or technology and have expressed interest in continuing to develop with it"
This is the metric for most loved language. So if 15 developers responded that they use rust, and all 15 have interest in continuing with it, then its score is 100%.
This is not such a great metric of rust's success IMO. you can't try to push a well designed systems language into applications space and expect it to win everywhere.
The actual problem is, there is no mature language with sufficient compile time guarantees for applications space. Go which is somehow treated as rust's competitor, is nowhere near that in terms of expressiveness or compile time checking. You would actually want generics, nullable types, exceptions, and streams in an applications language.
This is the metric for most loved language. So if 15 developers responded that they use rust, and all 15 have interest in continuing with it, then its score is 100%.
This is not such a great metric of rust's success IMO. you can't try to push a well designed systems language into applications space and expect it to win everywhere.
The actual problem is, there is no mature language with sufficient compile time guarantees for applications space. Go which is somehow treated as rust's competitor, is nowhere near that in terms of expressiveness or compile time checking. You would actually want generics, nullable types, exceptions, and streams in an applications language.
Surprised to see JavaScript so low on the average salary by programming language[1]. Browsing HN you'd think that everything outside the browser is dead and long gone.
[1]https://insights.stackoverflow.com/survey/2020#technology-wh...
[1]https://insights.stackoverflow.com/survey/2020#technology-wh...
It's a classic case of supply/demand dynamics. There are a lot more JavaScript developers than demand so the prices are low.
As an anecdote, I am not a professional programmer but I was writing some code to solve a problem at work and when it got to the front end stuff I was told not to worry about it because they would just get a cheap contractor to build the front end. The backend needed to be written by an expert who knows the problem and understands the solution but the front end can be spec’d out and outsourced to cheaper contractors.
I don’t usually live in the world of enterprise programming so I’m not sure how normal that is, but it definitely surprised me.
I don’t usually live in the world of enterprise programming so I’m not sure how normal that is, but it definitely surprised me.
There are tons of "Javascript Developers" who have no experience and about as much knowledge of the front-end. They usually make up the large crowd of "web consultants" that offer to make you a website for just $300 and then deliver wordpress with some skin they bought from somewhere.
The web specs are millions of pages of legalese (and that's without mentioning things like WebGL which are handled by groups other than w3c). Learning all the stuff required for building a modern application on the web takes a long time. In addition, the incompatibilities and inconsistencies (between both browsers and browser versions) paired with the inconsistencies of much of the tooling and frameworks (though that has gotten much better in the past couple years) leads to a frustrating experience.
If you need an actual web app and want to hire a knowledgeable developer who's willing to learn everything and not burn out from dealing with all the frustrating parts, it's very likely that you'll wind up paying more than for a back-end dev with similar amounts of experience.
The web specs are millions of pages of legalese (and that's without mentioning things like WebGL which are handled by groups other than w3c). Learning all the stuff required for building a modern application on the web takes a long time. In addition, the incompatibilities and inconsistencies (between both browsers and browser versions) paired with the inconsistencies of much of the tooling and frameworks (though that has gotten much better in the past couple years) leads to a frustrating experience.
If you need an actual web app and want to hire a knowledgeable developer who's willing to learn everything and not burn out from dealing with all the frustrating parts, it's very likely that you'll wind up paying more than for a back-end dev with similar amounts of experience.
"Formal Education Importance
Almost 85% of the respondents that are professional developers feel that formal education is at least somewhat important, which is contrary to the popular idiom that you don't need formal education to become a developer. However, almost 16% believe that it is not at all important or necessary."
Well as someone who doesn't have a formal comp. sci. education, this is a bit alarming for me. Personally didn't think the number was that high.
Well as someone who doesn't have a formal comp. sci. education, this is a bit alarming for me. Personally didn't think the number was that high.
Also as someone without formal CS education: I'm surprised too, though not alarmed. I've very rarely felt like I didn't have the right education to do my job at giantmegacorp w/ CS PhD coworkers.
The bigger problem is that I feel a bit of a cultural outsider. There are jokes, stories, language that coworkers use and I'm just not familiar with. That can promote impostor syndrome and definitely affects interviews (eg "cultural fit").
The bigger problem is that I feel a bit of a cultural outsider. There are jokes, stories, language that coworkers use and I'm just not familiar with. That can promote impostor syndrome and definitely affects interviews (eg "cultural fit").
It is not about formal education itself though. Mostly 'bootcamp webshit' meme is - about those developers who don't know things like algorithm complexity or memory related stuff, working at a top level of a multi-layer stack leading to inefficient/bad code.
The common consensus is it is pretty important for every developer to know some low level programming (C, asm) and algorithms/Data Structures stuff. Not so much about other things covered in standard CS curriculum.
The common consensus is it is pretty important for every developer to know some low level programming (C, asm) and algorithms/Data Structures stuff. Not so much about other things covered in standard CS curriculum.
As someone that was self-taught and then got a formal education (BS in CS), here's my explanation after having worked with new hires who only did bootcamps:
Formal education is not necessary to be capable of doing the job, especially if you have some good people to learn from and are willing to learn on your own.
However, it is very very good at filling in the things you don't realize you don't know. It provides a huge number of hooks in your mind you can investigate further as necessary on the job, as well as random little factoids you didn't know were important.
For example, those bootcampers I worked with? Never encountered deep copy/shallow copy, and had trouble figuring out a bug caused by using shallow when it should have been deep. None of them had issues the moment it was explained to them, but they'd just never experienced it before, so had nothing to work from.
Maybe they'd have figured it out and understood it eventually, or maybe they'd make guesses from StackOverflow and find something that works well enough without understanding why it works (so next time it comes up they're starting from scratch) (and yes, I have seen this).
It's just lots of small things like this that make up that split (and a sibling comment mentions more of them). The survey was not well-structured to get this nuance.
Formal education is not necessary to be capable of doing the job, especially if you have some good people to learn from and are willing to learn on your own.
However, it is very very good at filling in the things you don't realize you don't know. It provides a huge number of hooks in your mind you can investigate further as necessary on the job, as well as random little factoids you didn't know were important.
For example, those bootcampers I worked with? Never encountered deep copy/shallow copy, and had trouble figuring out a bug caused by using shallow when it should have been deep. None of them had issues the moment it was explained to them, but they'd just never experienced it before, so had nothing to work from.
Maybe they'd have figured it out and understood it eventually, or maybe they'd make guesses from StackOverflow and find something that works well enough without understanding why it works (so next time it comes up they're starting from scratch) (and yes, I have seen this).
It's just lots of small things like this that make up that split (and a sibling comment mentions more of them). The survey was not well-structured to get this nuance.
It's interesting what Flutter has done for Dart! Before Flutter, I used to think Dart was dead. Typescript had won. If Flutter for Desktop becomes a viable option to create desktop apps, I think Electron will have a formidable competitor.
For the non-dart-speaking folks, what's flutter? Just a framework?
Yeah. It's just a UI framework for Dart
> “Flutter is Google's UI toolkit for crafting beautiful, natively compiled applications for mobile, web, and desktop from a single codebase.” [1]
[1]: https://flutter.dev
[1]: https://flutter.dev
It's basically React-like components, but implements everything to target Skia rather than native or web. It's big interesting feature (to me) is that they added a native compiler so they can run on iOS (which forbids JITs).
As a language though, Dart is MUCH better than Typescript. If you're going to go all-in on types, at least go with a decent type system rather than one who's core objectives explicitly do NOT include soundness.
https://www.typescriptlang.org/docs/handbook/type-compatibil...
As a language though, Dart is MUCH better than Typescript. If you're going to go all-in on types, at least go with a decent type system rather than one who's core objectives explicitly do NOT include soundness.
https://www.typescriptlang.org/docs/handbook/type-compatibil...
Is Flutter/Dart the Ruby on Rails of UI development? I know it may put some people off that we have to use a completely new language to solve problems we've already (kinda) solved, but I believe this time google got it right. The ideas, execution, tooling, and community are amazing. Give it an hour and you'll love it
Honestly, it's hard for me to take anything meaningful away from this survey.
For example, it groups technology as "web frameworks" that just are not equitable [e.g. rail != express != jquery != react] and compares things like react native to node.js [makes no sense].
Personally, this survey feels more like a marketing handout than anything else and I would take it all with a giant grain of salt if at all.
For example, it groups technology as "web frameworks" that just are not equitable [e.g. rail != express != jquery != react] and compares things like react native to node.js [makes no sense].
Personally, this survey feels more like a marketing handout than anything else and I would take it all with a giant grain of salt if at all.
There is actually one thing this survey represents very accurately. Hype. Especially in the programming languages/frameworks section.
one thing, I wish StackOverflow would show is framework | language use across geographic distribution. And one thing, I liked was the data on variation in gender between developers in different countries. though it was just a few countries.
What's the matter with Perl? I don't remember seeing it anywhere near the top-paying programming languages the last couple of years. What happened this year?
I don't think anything has happened to Perl. Instead, the popularity of all its alternatives has exploded.
edit: I can count the number of Perl scripts I have used at my job (0). I cannot count the number of Node and Python scripts I have used at my job (there are too many). The niche has been filled.
edit: I can count the number of Perl scripts I have used at my job (0). I cannot count the number of Node and Python scripts I have used at my job (there are too many). The niche has been filled.
It correlates strongly with tenure, which I imagine also correlates strongly with pay, so perl is transitively associated with money. I bet perl is also associated with SRE, the rarest and highest-paying role among these survey respondents.
Honestly, the detailed page https://insights.stackoverflow.com/survey/2020 reads like a Stack Overflow Advertisement / Pushing than a normal survey highlights
> When asked what steps to take when stuck on a coding problem, 90% of respondents indicated they visit Stack Overflow.
> 0.3% of respondents had never visited Stack Overflow before taking the survey.
> More than 40% of respondents reported that they are members of other online developer communities beyond Stack Overflow.
> More than 15% of people find Stack Overflow at least somewhat more welcome than last year. We still have work to do, but it’s a start.
A big difference from last year's page, if you check. Probably the effect of new CEO and bunch of new CTAs popping up everywhere about their paid tools!
> When asked what steps to take when stuck on a coding problem, 90% of respondents indicated they visit Stack Overflow.
> 0.3% of respondents had never visited Stack Overflow before taking the survey.
> More than 40% of respondents reported that they are members of other online developer communities beyond Stack Overflow.
> More than 15% of people find Stack Overflow at least somewhat more welcome than last year. We still have work to do, but it’s a start.
A big difference from last year's page, if you check. Probably the effect of new CEO and bunch of new CTAs popping up everywhere about their paid tools!
Does anyone have any insights about why ASP NET Core is ranked so highly in the surveys? It doesn't get much discussion at all on HN.
Is it just popular with 9-5 big-co dev jobs and their large numbers influence the survey?
Is it just popular with 9-5 big-co dev jobs and their large numbers influence the survey?
I'm guessing here, but SO has always been very .NET-friendly place (it runs on Windows and .NET, and it was very active in the .NET-related topics when it started) which might skew results a bit. But again, guessing.
IMO ASP NET Core/NET Core is actually pretty good; seems lighter weight than Java at least to me. Beats most web frameworks in terms of raw performance, comes with all bells and whistles (e.g. even Grpc is supported with a built in server) but bolted on only as required. i.e. definitely beats in performance many web frameworks today (e.g. Spring Boot, etc) with a bit more "officially supported" polish which can be important for adoption.
The problem still is the traditional .NET conservative developer culture that I've experienced in .NET jobs IMO. It stops them from trying out the best things in their space (e.g. F# as one thing that comes to mind). NET Core as a runtime on a Linux platform is actually pretty good these days. This can vary by team and company however so not a reason to not choose the technology per se.
The problem still is the traditional .NET conservative developer culture that I've experienced in .NET jobs IMO. It stops them from trying out the best things in their space (e.g. F# as one thing that comes to mind). NET Core as a runtime on a Linux platform is actually pretty good these days. This can vary by team and company however so not a reason to not choose the technology per se.
> When we break down differences in years since learning to code by gender, we notice some retention problems. We see a big drop off at the 10-14 year mark when compared to men, though we've seen some improvement from last year's survey. This is consistent with other research that women leave tech jobs at higher rates than men.
I'm sure that women leave tech jobs at higher rates than men, but hasn't there been a stronger focus on educating women for tech jobs in recent years as well? In other words, if more women have been learning to code in the past decade, then I'd assume that that also leads to a larger percentage of women in tech having learned to code more recently.
I'm sure that women leave tech jobs at higher rates than men, but hasn't there been a stronger focus on educating women for tech jobs in recent years as well? In other words, if more women have been learning to code in the past decade, then I'd assume that that also leads to a larger percentage of women in tech having learned to code more recently.