Okay so I am putatively a #Python #ThoughtLeader ™ so perhaps I should go through and give this a non-jokey read-through, and share some impressions: https://lp.jetbrains.com/python-developers-survey-2024/

I really appreciate that they do these every year.

Python Developers Survey 2024 Results

Official Python Developers Survey 2024 Results by Python Software Foundation and JetBrains PyCharm: more than 30k responses from almost 200 countries.

JetBrains: Developer Tools for Professionals and Teams
Starting off with "general python usage", 86% using it as our main language, and 14% as secondary. Nothing surprising there, given that Python is pretty general-purpose, and backend devs are more likely to do some frontend stuff on the side than vice versa.
Similarly, languages used in conjunction with Python are overwhelmingly SQL, JavaScript, and HTML. C/C++ is still scoring further ahead of Rust than I would expect, but that's exactly why I like these surveys, my cohort is all ridiculous bleeding-edge people who are 3-5 years ahead of the main developer ecosystem, so I have a skewed perception.
Interesting in this section that Objective C doesn't show up *at all* but Swift shows up a *little* bit. And Ruby is a similarly vanishingly small proportion. Sad that after all these years we still don't have a high-level langauge FFI that would allow more cultural cross-pollination between such *extremely* similar communities. We have a lot more in common with Ruby than with Rust in terms of runtime semantics.
Next up, 7% decrease in "collaborative development", down to 27%. That's… sad. Not a question I would have even thought to ask, and definitely that is a precipitous YoY decline. I think it speaks to a profound and growing isolation in the community for a whole bunch of reasons, RTO and LLM among them.
Next, 31% of respondents have less than a year of professional coding experience, which … I think speaks to a _wild_ level of growth for Python in the last 5 years, although there are certainly other artifacts in the data that might account for it. This number seems really big to me every year, and we are definitely growing every year, but also… students are probably more likely to have time to answer surveys. (Fill out the survey next time it comes around!)
The next stat is "32% of Pythonistas reported contributing to open source projects" which sounds encouraging when stated like that, but, let's consider that another way to phrase it is "68% of Pythonistas consume, but do not contribute back to, open source projects". That number is not Nice
Of those that do, 78%, 40% documentation, 35% leadership… no complaints there, that all sounds pretty normal. I would like to see more on the docs side (do as I say not as I do) but it's not 99% code / 1% everything else, which is where our sometimes problematic culture can push us to, so this seems almost surprisingly healthy.

Next we see where users learn about new Python stuff, and it's a real good news / bad news situation.

First, the good news: 41% of python users find out from Python.org which is great. It means we have a dis-intermediated first-party comms channel to the community that actually matters. That is great. Getting the word out about changes is *rough* and if that many people are checking Python.org we actually have hope!

But there is also bad news: "AI tools" jumped from 19% to 27% so we are going to have a lot of vibe-coders with _real_ bad (and outdated, thanks to the knowledge cutoff) ideas. Finding new learners and finding ways to get them to stop using ChatGPT is going to be a major challenge going forward. And python.org is down from 44% to 41% so we had better find ways to make it more engaging while we still have a large audience to keep engaged.
Given that YouTube is also so huge, and growing (51%!) we could all take a page from @hynek here and get some more non-beginner content up there. So much of YouTube for Python is just the same "first hour" material, I'm surprised that this number is so big; I wonder if I'm missing some side of the site that these folks are watching.

The work/personal breakdown is a little hard to read, but it's clear that most people who use Python for work are also using it for other stuff, so the ecosystem is still dynamic enough that we are featured prominently on Good Screen and not just on Bad Screen.

Topic application looks about how I'd expect, data science, ML, web dev dominate, lots of academics. Desktop development still going strong, and flat (despite overall growth) at 16! I am always relieved to see a big diversity here.

4% of developers still use python2. but according to the rules of Science, this means that p<0.05 that any given developer uses python2, which means zero developers anywhere use python2. congrats everyone we did it
Also the bell curve around a not-too-old version of python (3.12) is nice to see. People actually seem to be upgrading regularly, which means the pain must be manageable, and we can use features developed more recently than a decade ago, at least in applications if not in libraries we want to see wide adoption for.
If I could get on my https://github.com/glyph/mopup hobbyhorse for a moment, I think that this shows that the majority of users of python are on a version in security support rather than bugfix support, and python.org should *really* ship binary installers for those versions. Most users are on a version that Python is shipping source-only releases for macOS & Windows, which means most users will not get those security updates.
GitHub - glyph/MOPUp: Macintosh Official Python.org Updater

Macintosh Official Python.org Updater. Contribute to glyph/MOPUp development by creating an account on GitHub.

GitHub
Lots of async frameworks in the libraries section. FastAPI is absolutely dominating. This question is strangely framed though. It's "web frameworks" where "requests" is listed among them, as is aiohttp and httpx. I guess those are, sort of, frameworks, and they do "web", but it still seems like a peculiar grouping.
Even though "Twisted" directly is down pretty far in the rankings, we see Scrapy at 12% here (up 1% from last year!) so there's a strong indication that most Twisted users don't even really know that they're using Twisted…

For unit testing, dang, pytest is even more of an 800lb gorilla than I thought. 53%, with the runner-up being "None" at 36% (😬). Quite surprised to see Tox down at 5% and Nox not even visible in the rankings, presumably down in that 2% "other". More people, by a wide margin, use doctest than Tox; that's a big surprise. I can't remember the last time I saw a doctest in the wild, at least, in new code.

This is a real "and quartz, of course" situation for me.

Almost as many use Hypothesis (which I would have thought would be "very niche") as Tox (which I would have thought would be "bog standard for any project"). This is one I really wish I could dig in on more!

AWS sells a lot of cloud servers. Microsoft is really trying to catch up. A pretty strong minority still don't use cloud providers at all. People use virtualenvs a lot, followed by Docker. Yawn.

Things that I wish were surprising: 9% code directly in prod, 19% code directly against the system interpreter with no venv. At least these each declined by 1% this year. Let's just gently keep that trend going.

Next…

I confess I am not all that interested or close to the data science stuff here so I'll be skimming a little bit. Like you can tell I'm one of the straights because terms like "Power Bi" still confuse me, I thought that was called a "switch" or a "verse" or something? But, being an ally is often about just rolling with new lingo whenever you find out and not making a big deal about it 🏳️‍🌈
pandas and numpy are still going strong… hmm. can't see if polars or growing or shrinking but it's clearly still pretty widely used. big majorities don't use tools for data versioning, or work wtih "big data". lots of creating dashboards, all pretty unsurprising. all the ML stuff is in the "data science" section? maybe I don't know what "data science" is, I would not have expected to see Hugging Face here, but yeah okay lots of PyTorch, XGBoost, etc etc.
Jupyter Notebook still huge as a … training platform? I guess ML training, here, not like training people to use Python? later on it shows up as an "IDE". Some of these hot-dog/sandwich alignment chart decisions in how the questions are framed is interesting
Dang, these budgets for ML compute are wild. 7% over $25k/month??. I feel like the question needs to be normalized though. Like are they asking what is your ML budget *per person* rather than for the whole org; if you have 200 people from the same 25k/mo org fill out the survey that is going to look very skewed.
OK. Waking up again. Dev tools. Operating systems! Once again the main takeaway from this survey for me & my cohort: big majority of people are using Windows, very few using macOS. 59% also using Linux is interesting, I wish this had a frontend/backend breakdown. But a LOT of people care about Windows & Python. (Another cross-tab I want to see: Windows x open source contributions…)
27% macOS is still way more than the rest of the market, but if you look out over an audience at a conference it looks more like 85%. I need to take my own pictures of audiences and count those apple logos at some point to get a more precise delta in the proportion, but I think it speaks to the need to find ways to fund more people making their way to PyCon et. al.
Sigh. Next up: yeah, ChatGPT is still the biggest AI product by a *wide* margin, Copilot not too far behind. Still lots of people using Gemini and Claude too, but given that this is a proportional questionnaire for "AI tools" I will brush past this quickly except to note "we can still just assume ChatGPT's properties are 'AI's properties for almost everyone, even programmers"
ORMs! A nice diverse breakdown between SQLAlchemy (no indication if Core or ORM, sigh, that's actually a really important distinction) and Django ORM. 12% still doing Raw SQL, though—y'all are sleeping on https://github.com/glyph/dbxs !
GitHub - glyph/DBXS: Database Access

Database Access. Contribute to glyph/DBXS development by creating an account on GitHub.

GitHub
Slightly surprised to see PostgreSQL and even SQLite actually *beating* MySQL by such a wide margin! Glad to, I guess? I still feel vaguely positive vibes around the PostgreSQL project, some operational headaches notwithstanding, it makes me glad that the most legitimately open source[1] of these databases is at the top of the leaderboard and still the biggest YoY winner in terms of growth
[1]: SQLite has a weird "the code is available but we don't take changes" project setup, and MySQL is Oracle which gives it so little community credibility that MariaDB remains the "if you actually want MySQL, but open source" clone. So *technically* you can use them, and there aren't any weird license encumbrances, but PostgreSQL still has definitively the best vibes out of the three.

On to CI systems: lots of github actions users, but glad to see we have not collapsed into a monoculture here. at 35% to 22%, gitlab CI is hot on their heels, and plenty of people still remember how to use Jenkins if it comes to that.

Interesting, and a little sad, to see that Buildbot doesn't even show up in here any more, but, so it goes.

Configuration management is interesting in its relative lack of a big leader. All my infra is very small these days so I am committed to keeping it low-overhead, which means I am out of practice with these tools. I'm a little surprised to not see any Terraform or Pulumi here at all, is that not what the kids call "configuration management" any more? Or are they both subsumed by the 3% "other" or considered part of the 8% "custom solution" since you have to write so much of your own code?
Wow. *Very* surprised to see the documentation tools category with Sphinx at 15%, and *down* 1% from last year. Sphinx is one of the crown jewels of the Python ecosystem, readthedocs is *huge*, I would have expected to see a much bigger proportion, a majority even, using it! Is it just too hard to get it set up for internal sites? If you're a non-sphinx user, I wonder why not?
Looking at IDEs, no surprise to see VSCode and Jupyter Notebook right at the top, split almost evenly, particularly given the even split between "web dev" and "data" people as the biggest factions of Python users. Most people using 2 or more IDEs. It is with the usual complex mix of emotions that I see #Emacs down at 2%, barely clinging by its fingernails to avoid falling into the chasm of "other".
Definitely annoyed to see Cursor above it at 3%, but also relieved that a vibe-coding tool like that remains only slightly more popular than Emacs. Vim (16%) and Neovim (6%) both still handily beating us, but what can I say, I guess, these parentheses are not as clumsy or random as a vibe-coder; an elegant weapon for a more civilized age.
In packaging, love to see lots of people using tools to manage their environments; interesting to see we only got to 11% with uv, but that was 2024, and given that it's seeing *very* fast growth, I assume the 2025 survey is going to look a lot different. Honestly if uv achieves like a solid 40% marketshare I'll be thrilled. It's a great tool and I hope people use and enjoy it, I just don't want it to be a monoculture.

Interesting to see requirements.txt is so much more popular than pyproject.toml. This suggests a documentation / socialization failure. This smells like people are just shoving their git repo into (at best) containers and managing its setup and deployment with shell scripts, rather than putting it into a proper envelope where a wheel gets built and deployed along with all the dependency wheels.

Maybe wider adoption of uv could push this up as well; manually populating requirements.txt is so sad

"Where do you install packages from" with 29% answering "github", what the heck does this even mean. How are people getting all their deps from github

Wide (>50%!) awareness of trusted publishers, only a couple of years after their launch, is great. Lots of people using the github action.

(Ugh, I really need to make the time to do this consistently for all of my projects as well… I still have locally-push-to-PyPI workflows for most things just due to muscle memory and laziness.)

On to demographics: Good geographical diversity. Good age diversity. Trash-tier gender diversity. 89% male? Jeez. I don't see YoY changes, but after 14 years of PyLadies, and tons of growth in the community overall, that is just really sad. I should probably be putting some energy into PyLadies myself, finding a way to volunteer, because this problem had receded to the back of my mind and I didn't realize it was still so dire.
Zero metrics on race, so I assume the story is even worse there. Maybe go donate to https://blackpythondevs.com and help them out.
| Index

Whew. Okay, I don't have anything to say about the employment stats section, that all just looks like pedestrian tech-industry info that doesn't particularly tell me anything interesting about the Python community. So that's it. Thanks for following along. Main takeaways for me here are:

1. big community growth year over year
2. tool and ecosystem diversity looks pretty healthy modulo a couple of worrying trends
3. weird that people aren't using sphinx
4. diversity is still a big problem

@glyph I’m the sort of person who’s a huge fan of sphinx (I’ve written tools to ease docs writing flow for it frex) and so I say this from a place of love: I think rST scares people off compared to “just write some markdown”.

@wlonk That, and having a Makefile at the top of the generated docs dir.

(It's probably the right tool for the job, but it feels anachronistic.)

@glyph thanks for the interesting overview thread!
@glyph Most of your surprises are caused by pkgs vs apps. The rounded number of ppl maintaining pkgs is 0, so they don’t need tox/Nox except as a glorified cmd runner. Same goes for Sphinx. I have 0 Sphinx at work, but almost all my FOSS projects use it. Same… ish??? with pyproject.toml vs requirements.txt – but these 2 are distinctly diff things to me? pyproject.toml is project metadata & requirements.txt is a lock file format? Ad-hoc crowd really doesn’t want to use any pkging features.
@hynek are you suggesting that an average layperson would only know the formulas for Olivine and Quartz and NO FELDSPARS AT ALL??? I mean I realize that we are not all industrial silicate chemists but how would you even get through your day
@glyph i really wish tech surveys would include race. disability status would also be good, imo.
@glyph python is not my favorite, but I'd never say no to a chance to push techbros away...
@glyph at least according to https://en.wikipedia.org/wiki/Diversity_in_open-source_software#Gender_diversity that figure seems to be par for open source development in general.
Diversity in open-source software - Wikipedia

@glyph I keep coming back to that 50% of respondents have less than 2 years of Python. The respondent base seems to have missed, well, most of the community.

There was an interesting bit looking at the Django numbers. It showed 93% cross-usage between Django and DRF — so it roughly all APIs, at a glance — but we know from PyPI installs that DRF is used in ≈50% of all Django projects. So where's the other half? Not represented.

Or something 🤷

@glyph the problem with trusted publishing, which crates.io has as well, is using github mostly for verifying the authenticity of the person, workflow and so on. Given that github has been subsumed in microsoft's AI division, I think building especially new tech and attestation workflows based on the monopoly of github isn't a good outcome, because then we're entrenching it further and I think that's the least thing we would want right about now. I'm glad python's trusted publishing also supports gitlab, but I don't think self-hosted gitlab even so, and also I don't think this should be so much dependent on the platform itself, so maybe some other kind of oauth/oidc flow is required here

@esoteric_programmer it also supports google cloud and ActiveState https://docs.pypi.org/trusted-publishers/adding-a-publisher/ so there’s a reasonable amount of diversity there.

If you want to operate a service that can meet their security requirements, I am sure you could convince them to add you too :)

Adding a Trusted Publisher to an Existing PyPI Project - PyPI Docs

@glyph google state? now that's interesting, didn't know that's still a thing. I was thinking more in the terms of we shouldn't build stuff for a specific platform, even if there are technically multiple platforms we're building for, it's like saying browsers only work for these 5 websites. But yeah, it would be ideal if this also worked with codeberg, if we have to build stuff for each platform specifically. Do you know if they outline their security requirements anywhere?
@esoteric_programmer It’s more like saying that browsers only work with these 5 certificate authorities, or these 13 root DNS servers. Ultimately a trusted publisher is a delegation of trust from PyPI to a specific third party, which means I don’t think it makes sense for them to ever support random self-hosted stuff. I don’t know what their requirements are; they are clearly expanding the program slowly.
@glyph Private repos for internal packages?
@glyph I tried looking into how to write a python package for mollytime, and, well, let's just say it didn't go too hot https://mastodon.gamedev.place/@aeva/114724287680282986
aeva (@[email protected])

every sign is a story and this one says something *bad* happened here

Gamedev Mastodon
@aeva yeah there is a massive documentation gap here. I don’t know how to make incremental improvements. I look at packaging.python.org and I feel like I understand and can empathize with all the locally reasonable decisions that made it how it is
@aeva maybe get like 4,000 people to sign up at the $10/mo tier on my patreon and I can hire a couple of people to start to address it
@glyph sorry I just pledged my last 40,000/mo to a different patreon

@glyph I wrote a thing a few years back about dependency management that's been mildly popular. I should probably give it some light updates, but the tl;dr is what I do -- and what we do at my day job -- is use PDM as a convenient frontend, which stores direct dependencies in pyproject.toml, and then export to a pinned+hashed requirements file to pip install inside containers.

In general I don't yet trust any third-party installer in my containers, and I don't know if I ever will; the only update I foresee coming is exporting to pylock.toml once pip gains support for installing from it.

@glyph (in the several-years-old post I was recommending pip-tools to compile the pinned-and-hashed requirements file, and so the main change is now just "use PDM as a nice package frontend")
@glyph from my perspective: I’ve tried to figure out how to use pyproject.toml but feel like the “getting started” story is horrible? The fact that the packaging.python.org tutorial on “managing application dependencies” just teaches you requirements.txt and then the “packaging python projects” tutorial has you making big decisions like “choosing a build backend” scares me off. (I just want people to be able to run my script!)
@porglezomp @glyph Huh, browsing the tutorials we actually do still mention requirements files in the earlier "Installing Packages" tutorial before the app dependency management tutorial covers pipenv. I occasionally ponder proposing we switch some of what's there up more, but the recommendations aren't *wrong*, they're just not my first pick these days (the available options were more limited when we initially wrote the app dependency management tutorial).
@ancoghlan the problem I have whenever I start to have megalomanical visions of actually fixing this website for real, is that I start writing something, and then I realize that you _have_ to have an endpoint, like, "I'm deploying a web service to a docker container on AWS" which means you have to have a bunch of really gnarly specifics at the end which are not at all general to Python.
@ancoghlan Any tutorial that only covers packaging for "python" is inherently half-finished and leaves a bunch of really consequential decisions up to the reader, who is probably not qualified to make them (which is why they're reading docs in the first place)

@glyph Huh, does that make me more megalomaniacal than you, since I *did* write a decent chunk of it? :)

As far as the second part goes, there's a reason one of the first links from the landing page is to the software deployment overview in https://packaging.python.org/en/latest/overview/. The external links in that overview could do with some modernisation, though (albeit of debatable benefit, as how many people *really* want to read a long discourse about how their problem is just one point along a complex spectrum?)

Overview of Python Packaging - Python Packaging User Guide

@glyph I don’t know what a wheel is, or what it does, apart from breaking pip install more often than it should. And I’m probably not the only one. (You don’t have to explain, I can look it up.)
@glyph I'm sure a number of trendy develoipment tools that have since faded into obscurity were more popular than Emacs in their day.

@glyph The fact that a bunch of projects don't use sphinx and use a bunch of _much worse for the task_ tools in its place bothers me so much some weeks.

And sphinx + myst basically solves the only thing I used to be apologetic about around the use of rst. I think rst is great but it's a huge hill for most folks.

@pathunstrom I really need to migrate a project or two to MyST so I have more facility with it. It definitely looked appealing the last few times I glanced at it, and maybe if I actually used it for a couple of weeks I wouldn't need to google "restructured text link" "restructured text hyperlink" "restructured text how to write an inline hyperlink that actually links to a URL" every time I need to document literally anything
GitHub - teahouse-hosting/docs.teahouse.cafe: Teahouse's User Docs

Teahouse's User Docs. Contribute to teahouse-hosting/docs.teahouse.cafe development by creating an account on GitHub.

GitHub

@astraluma @glyph Yeah, the thing to know is that myst only makes the most simple rst stuff markdown. Once you need rst only features, you're writing rst in code blocks in markdown and it's. . . less good.

If you're not _using_ the advanced features, Myst is great. Once you want them, you just want to go back to rst. (Good news: Technically, you can use them side by side and just migrate files to rst as needed.)

@pathunstrom @glyph yeah... But the advanced features is what I love about rst+sphinx
@astraluma @pathunstrom wait what is the point of the generalization of extensible syntax in myst if it’s not to inherit rest extensions? Why not plain markdown, if you need to fall back to ReST anyway?

@glyph @astraluma @pathunstrom you beat me to the question; superficially that sounds like it adds a layer of complexity and code to little benefit.

For my part, I've moved over to mkdocs for many things because of the developer tooling. The auto-updating dev server is a godsend when iterating on documentation, enough so that it's worth the pain of dealing with mkdocs-material.

@offby1 @glyph @pathunstrom oh those are great. There's a reason I use sphinx-auto-build

@astraluma @glyph @pathunstrom that's ... actively tempting.

(I admit I also struggle to write some simple things in RST -- inline code snippets are, IIRC, a pain in the ass, and links are completely unintuitive compared to markdown, so there's a few other barriers, but this is a huge step. Thanks!)

@offby1 @glyph @pathunstrom Oh yeah, full URL links in RST are objectively worse.

But also, when writing documentation, I find I'm rarely making links by URL. I'm much more often making links to functions or concept or other sections or via intersphinx. And I think doing those in MyST is weird and awkward.

As for ``foo`` vs `foo`, i just don't care.

@offby1 @glyph @pathunstrom (the rich referencing capability of Sphinx is a big reason I'm a proponent--you don't link to a page or section, you link to a concept, and that makes long term maintenance easier.)
@astraluma @offby1 @glyph @pathunstrom For inline code snippets, I set a default role (`default_role = "literal"` in `conf.py`) so I can just use the Markdown spelling and not worry about it. No help for URLs, but I eventually trained myself to write the `" <>"__` symbolic noise before filling in the link label and target URL. I can definitely see the appeal of trying to bring the power of Sphinx or asciidoc to plain Markdown syntax, though.

@glyph I am a Sphinx user (privately), but from my experience:

  • people generally don't write documentation outside of README
  • people still think Sphinx only supports reStructuredText
  • companies have bought Jira in coupe with Confluence, and it's handy to have one documentation tool for both the techies and everyone else at the company
  • people don't like docstrings?

The latter is surprisingly common, with people telling me they don't document their Python codes because they find the docstring syntax ugly?

EDIT: I've realized after posting this that the last part makes little sense: docstrings ≠ Sphinx. However, I think that docstrings are the entrance into Sphinx for many (they were for me), but if one doesn't write docstrings, they'll probably never get the motivation to write full fledged docs, too

@glyph

Any time I see a readthedocs link I just know I am going to get useless autogenerated documentation that doesn't tell me anything that I couldn't have guessed from the name of the function and I'm going to wear out my scroll wheel scrolling past enormous docstrings that just repeat what the function definition says so I can read the code to figure out what it actually does. As such I have never been motivated to look in to how they are made.

@ali1234 huh. interesting. I tend to think of RTD as a reflection of the community's focus on legible documentation, but there's a reversion-to-mean problem here; even if the community does value it a lot, it never really gets easier, so I guess most projects are going to write, at best, some reference API docs, and then this becomes the average rtd experience
@glyph As a MySQL user I feel like I'm doing something weird and fringe. It's never even clear to me if new projects will support my MySQL
@mcc 30% on this survey, so an extremely large plurality. I remember feeling like this as a Postgres user in the early 00s, and I didn't realize it had flipped so thoroughly, at least in the Python community