Back to blog listing

What AI Practitioners Actually Do With Their Time


In On motivation and meaning I wrote about wanting to point my career at real science instead of the next frontend framework. The honest follow-up question is uncomfortable: if I want to become one of the people who builds AI for science, what do those people actually do all day? Not the LinkedIn version. The real version. What do they build, what do they care about, what do they spend their nights and weekends on, and how much of it is even visible?

So I did the obvious thing for someone with a GitHub token and a free evening. I pulled the data.

The idea was simple. Find the people who actually carry these projects, look at everything reasonable on their public profiles, and see what falls out. Not to rank anyone, and not to build a creepy dossier, but to answer a question I think a lot of people quietly have when they are trying to break into a field: who do I want to emulate, and what does that actually look like in practice?

What I pulled, and what I didn’t

Let me be upfront about the method, because the conclusions are only as good as the sample.

I picked around 42 of the major repositories across four buckets: AI for science and structural biology (OpenFold, AlphaFold, ESM, Boltz, Chai, RDKit, OpenMM, scanpy, and friends), the broader physical-science stack (Astropy, PyMC, MNE, pymatgen, and others), core ML and AI infrastructure (PyTorch, Transformers, vLLM, JAX, scikit-learn, llama.cpp), and the scientific-computing foundations everything else sits on (NumPy, SciPy, pandas, matplotlib, SymPy). For each repo I took the top contributors by commit count, deduplicated across projects, and kept the top 1,600 people by total contributions. Then I pulled each person’s profile and their owned, non-fork repositories from the GitHub API.

I originally wanted ten thousand people. I scoped it down to a number I could pull cleanly and honestly in one sitting rather than a bigger number full of holes. Every figure in this post is real, computed from that pull, and I would rather show you sixteen hundred real people than ten thousand half-fetched ones.

A few honest caveats before we start:

  • This is a survivorship sample. These are the people who stuck around long enough to land near the top of a contributor list. That is exactly the population I care about (“who do I want to be”), but it is not a random sample of all ML engineers.
  • The “personal interest” numbers later on come from keyword matching over repo names, descriptions, and topics. A music project called fretwork with no description and no topics will not get counted. So treat those numbers as floors, not ceilings.
  • For the clustering I started with plain TF-IDF text vectors and k-means, because it is transparent and reproducible. Then I re-ran the whole thing with a real sentence-embedding model as a cross-check. Comparing the two turned out to be one of the more interesting parts of this, as you will see.

With that out of the way.

Who are these people?

1,600 Contributors analyzed
12 yrs Median account age
38 Median public repos
61 Median followers
44.1% List a blog / site
46.8% Bother with a bio

A snapshot of 1,600 of the most active contributors across ~42 major AI, ML, AI-for-science and scientific-computing repositories. Pulled live from the GitHub API.

The first thing that jumped out: these are not kids. The median account is about twelve years old. The median person has on the order of sixty followers, while the most-followed single person in the set has nearly twenty thousand. That is a brutal power law. A small number of these contributors are genuinely famous in the field, and the long tail is made of people you have never heard of who quietly keep the libraries you depend on from falling over.

The other thing that surprised me: fewer than half of them bother to write a bio, and only about 44% link out to any kind of blog or personal site. Only around one in six has the “available for hire” flag set. The mental image of the AI researcher as a self-promoting personal brand with a Substack and a pinned thread is just not what the data looks like. Most of these people present almost nothing about themselves. The work is the resume.

Who signs the paychecks

About 54% of people fill in the free-text “company” field, so this is a rough cut, but the shape is clear and a little surprising.

Who signs the paychecks

Of the 54.4% who list an employer at all (n=870), where they say they work.

Big tech
26.1%
Academia / research institute
23.6%
AI labs / AI companies
9.4%
Cloud / infra / data startups
7.2%
Pharma / biotech
1.7%
Finance / quant
0.9%
Other / unclassified
31%

Percentages are of the 870 people who filled in the field. Company is free text, so this is a rough cut, and "Other" is a long tail of smaller firms plus people who list an open-source org as their employer.

Big tech and academia dominate, roughly neck and neck, together accounting for about half of everyone who lists an employer. After that it drops off fast: the AI labs (OpenAI, Hugging Face, Anthropic, Mistral, and the rest) are a distant third, then the small infrastructure and data startups.

The part I did not expect, given the subject matter, is how nearly invisible pharma and biotech are. Fifteen people. Less than two percent. This is the same world where, as I wrote about OpenFold, the consortium is bankrolled by Bristol Myers Squibb, Bayer, Novo Nordisk, and Biogen. So the money flows from pharma, but the hands on the keyboard belong overwhelmingly to big-tech engineers and academics. Pharma funds the commons. It mostly does not build it in public.

That big “Other” bar is not just noise, and it is worth a peek. Part of it is people who list the open-source project itself as their employer (matplotlib, @pytorch, @vllm-project, @ray-project, ONNX, Enthought, PyMC Labs), which is its own quiet identity statement. The rest is a long tail of places you would absolutely recognize that my keyword matching simply missed: Georgia Tech, Memorial Sloan Kettering, Boehringer Ingelheim, Germany’s Forschungszentrum Jülich, France’s CEA, Canva, DataRobot. Several of those should really be sitting in the academia or pharma bars above (Boehringer Ingelheim is pharma, which means even my embarrassing fifteen is an undercount), and that is a small preview of a problem I want to come back to.

I want to be careful here, though, because this particular number is exactly where my method bites back. Big tech being on top is partly real and partly an artifact of how I chose the sample, and it is worth pulling that thread on its own.

The shared toolbox

The shared toolbox

Primary language across every owned, non-fork repo in the sample.

Python
9,140
Jupyter Notebook
3,115
JavaScript
1,336
HTML
1,236
C++
1,123
C
755
Shell
692
Rust
613
Java
527
TeX
495
TypeScript
415
CSS
320
Go
317
R
161

No surprise on the headline: it is a Python world, by a margin that is almost comical. But the interesting signal is not Python, it is the stuff underneath it.

Look at the long tail. TeX shows up nearly 500 times. That is people writing papers, and it is one of the clearest tells that this population lives partly in academia. C++ and C and CUDA are the people working close to the metal, on the kernels and the inference paths. Rust is the modern tooling crowd. And then there are the quiet little tells of obsession: Lua (Neovim configs), Emacs Lisp (Emacs configs), Shell everywhere. These are not the languages of their day jobs. They are the languages of people who enjoy sharpening their own tools.

Jupyter Notebook sitting at number two is its own story. Notebooks are how almost everyone in this world thinks out loud. But notice that the actual maintainers, the people whose repos are libraries and test suites rather than notebooks, are a different group. More on that in a second, because it turns out to be one of the clearest dividing lines in the whole dataset.

The map of who shows up

Here is the part I had the most fun with. I built a text profile for each person out of their bio, their repo descriptions, and their topics, turned that into vectors, and clustered them. Seven groups fell out cleanly enough to name. Hover around, and try the toggle to recolor the same people by their field instead of their archetype.

The map of who shows up

1,600 contributors, each placed by a 2D projection of the text on their profile and repos. Closer together means more similar public footprints.

Click a group to isolate it on the map.

The biggest island is the unglamorous one: people whose public repos are mostly scripts, analyses and tests, with little self-presentation. Personality, on GitHub, is the exception.

The single most important fact on that map is the size of the biggest blob. Out of 1,492 people with public repos, more than 900 of them land in one cluster, and the defining words of that cluster are not “machine learning” or “protein” or “transformer.” They are analysis, scripts, files, testing, research. I came to think of these people as the quiet workhorses. Their public footprint is a pile of utilitarian repos with no real self-presentation. They are not building a brand. They are getting things done and the repos are just the exhaust.

The other six are more characterful:

  • Scientific-Python maintainers. The NumPy / SciPy / matplotlib stewards. The smallest group, and arguably the most load-bearing for everyone else.
  • Big-tech research engineers. Bios that say senior engineer at Google or AMD or Intel. The professional core.
  • Applied deep-learning builders. PyTorch, Keras, Hugging Face, NLP, computer vision. The largest of the “characterful” clusters, and the one most people picture when they think “ML.”
  • Bloggers and GSoC tinkerers. This is the cluster with the personal websites, the blogs, the Rust and JAX side projects, the Google Summer of Code history. The most self-presenting group by far.
  • Grad students. Bios that literally say “PhD student,” speech and signal repos, and a suspicious amount of dotfiles.
  • Academic scientists. Professors and lab folks. Materials, physics, quantum, plus talks and workshops.

If you are trying to break in, that map is weirdly reassuring. The dominant archetype is not a genius with a huge following. It is someone who shows up and does unglamorous, useful work in public. That is an achievable thing to become.

The same people, through real embeddings

That map is honest, but the method is crude. TF-IDF only knows which exact words co-occur, so anyone whose repos are thin on text gets swept into that giant “quiet workhorse” blob. So I did the obvious upgrade: I re-embedded every contributor’s bio and repos with a real sentence-embedding model (bge-base, run locally on my GPU), and clustered those vectors instead. Same people, same inputs, a method that reads meaning rather than matching tokens.

The same 1,600 people, clustered by embeddings

Bios and repo text re-embedded with a neural model, then projected with UMAP. Compare the shape to the TF-IDF map above.

Click a group to isolate it on the map.

Same data as the previous map. The only thing that changed is how the text was turned into numbers.

The blob mostly dissolves. Where TF-IDF saw one undifferentiated mass of more than 900 people, the embeddings find seven balanced, legible groups: a scientific-Python and data-analysis crowd, generalist builders, deep-learning practitioners, engineers with a web presence, speech and NLP researchers, dotfiles-and-infra tinkerers, and a small eclectic remainder. Nobody is “the quiet workhorse” anymore. They were just people whose interests TF-IDF could not read.

Sit with that for a second, because it is a small, clean demonstration of something worth remembering: the headline from the first map (most contributors are faceless workhorses) was substantially an artifact of the method, not a fact about the people. Both maps are built from the exact same bytes. Keep that in your pocket; I come back to it.

The work versus the tinkering

I split every owned repo into “professional / scientific / technical” and “personal” using keyword heuristics, then asked: what share of these people keep at least one repo of each kind?

What they keep in public

Share of contributors with at least one owned, non-fork repo of each kind.

The work
Research / papers / tutorials
45.9%
ML & deep learning
34.5%
Data & infra / systems
30.6%
Science / bio / chemistry
24.7%
The tinkering
Personal site / portfolio
20%
Dotfiles / editor config
18.5%
Games & game dev
14.5%
Music & audio
12.5%
Life & hobbies
10.3%
Home automation / IoT
4.5%
Generative art / creative coding
2.3%
Note-taking / writing
1.7%
Trading / crypto
0.9%

The median contributor's public repos are only 2.5% personal by this classification. These profiles are overwhelmingly about the work. But a real minority still keep a corner for games, a synth, or an over-engineered set of dotfiles.

This is the chart that reset my expectations the most. The professional side is exactly what you would guess: research and tutorials, ML and deep learning, data and infra, science and bio. But the personal side is thin. The median person’s public repos are about 2.5% personal. These profiles are nearly all work.

And yet a real minority keeps a corner for themselves, and the ranking of that corner is lovely. The most common personal thing is a personal website or portfolio, followed immediately by dotfiles, which is to say the most common “hobby” among these people is configuring their own environment. After that comes games (roughly one in seven has a game or game-dev repo), and then music and audio (about one in eight). Home automation, generative art, note-taking systems, and trading bots trail off after that.

So the stereotype is half right. The people who build AI mostly do not show a lot of outside-of-work life on GitHub. But the slice that does skews toward exactly the nerdy joys you would expect: building games, messing with synths, and lovingly over-engineering their text editor.

The most common hobby among the people who build AI is configuring the computer they use to build AI.

Three fields, three temperaments

Now the part most relevant to me, because I am specifically trying to move into AI for science rather than core ML. I split the population by where each person’s top contributions land and asked the same questions of each field. The differences are sharper than I expected.

Three fields, three temperaments

Same questions, asked of each field. Each row is scaled to its own largest value.

AI for science n=554
Core ML / AI n=653
Scientific computing n=393
Median followers
48
81
48
Keep a blog / site
51.4%
38.4%
43%
Write LaTeX (papers)
18.4%
11.2%
17%
Activity on weekends
17.9%
17.2%
29.1%
A music / audio repo
14.3%
12.1%
7.1%
A game / game-dev repo
11.2%
15%
14.5%
Public dotfiles
19.3%
14.1%
19.6%

A few things worth saying out loud:

  • The AI-for-science crowd writes. They are the most likely to keep a blog or site and, along with the scientific-computing folks, the most likely to write LaTeX. That makes sense. In science, the paper and the explanation are part of the deliverable. If you want this lane, writing is not optional self-promotion, it is the job. (Which, conveniently, is part of why I keep this blog at all.)
  • The core-ML crowd is more famous and more private. They have the highest median follower count by a good margin and the lowest rate of keeping a blog. They are also the most likely to have a game in their repos, which I find charming. More visibility, less explaining, more play.
  • The scientific-computing maintainers are the hobbyist-est. Highest rate of public dotfiles, lowest rate of music repos, and as we will see in a second, the only group that really keeps working on weekends.

If I am honest, the AI-for-science profile (writes things, keeps a site, slightly more likely to have a music repo than the average, deeply Python plus a bit of C and TeX) describes the person I am actively trying to become. It is nice to see the target drawn from data instead of vibes.

The weekend question

I had one stereotype I really wanted to test: the obsessive who codes every weekend. So I took a subsample of people, pulled their recent public activity, and measured how much of it lands on Saturday and Sunday. Weekends are robust to timezone in a way that “what hour do they commit” is not, so this is the one rhythm signal I trust.

If activity were spread evenly across the week, weekends would be about 28.6% of it (two days out of seven). Across the 382 people with enough recent activity to measure, the real number is 20.8%. These people are, on average, less active on weekends than an even split would predict.

That genuinely surprised me. The dominant pattern is not the burnout grindset. It is people who treat this as serious weekday work and then, mostly, log off. The exception proves the rule: the scientific-computing maintainers sit at 29.1%, right at the even-week line, while the AI-for-science and core-ML folks are down around 17%. The volunteer maintainers of the foundational libraries are the ones still committing on a Saturday, probably because for many of them it genuinely is the side project. The people doing AI at companies and labs are clocking out.

The lesson I am taking from this is not “work less,” exactly. It is that you do not have to torch your weekends to belong here. Consistency over a decade beats heroics over a weekend, and the twelve-year median account age backs that up.

What they actually write about

Everything so far comes from GitHub: profiles, repos, commit timing. But remember the ~44% who linked a personal site? I got curious what is actually on those sites, so I went and got it. I crawled every linked site that still resolved, found its feeds and sitemaps, and pulled the full text of every post, stripped down to clean markdown. That is 4,946 posts from 250 sites, roughly 28 MB of writing.

Then I embedded all of it with the same local model and clustered, capping each site at 50 posts so a few prolific bloggers could not dominate, which leaves about 3,400 posts across ~230 sites. I also dropped my own 31 posts into the same space to see where I land.

What 230+ practitioner blogs are about

Embedding topics over the scraped posts. The ★ count is how many of Ty's own posts fall in each topic.

Infra & research notes
432
Python packaging & projects
331 ·★4
Linux, FOSS & sysadmin
316 ·★1
Code, math & how-tos
292 ·★3
Deep-learning training & perf
288 ·★1
Open source & community
242 ·★17
Computational chem / materials
238
Math, stats & probability
217
GSoC & SymPy dev diaries
214
Personal life & cooking
207
Academic portfolio pages
184
AI agents & automation
171 ·★5
Solar & space physics
139
Speech & voice synthesis
95
Audio production
51
Cancer genomics
45

Topics are k-means over neural embeddings; labels are the distinctive terms per cluster. A couple of clusters are essentially one prolific blogger's beat.

The themes echo the GitHub side, now in prose: Python packaging and tooling, deep-learning training and performance, math and statistics, open source and community, GSoC dev diaries, computational chemistry and materials, AI agents and automation, and then genuinely personal corners, including a solid “personal life and cooking” cluster and a surprisingly large solar-physics one. A couple of clusters are basically one person’s beat: the cancer-genomics cluster is largely a single lab, the Linux and FOSS cluster largely a single blogger. That concentration is part of the story. A small number of people do most of the public writing.

The writing, mapped

Each dot is one blog post, placed by its embedding. Black stars are Ty's own posts.

Click a group to isolate it on the map.

Same model and projection as the contributor map. Stars cluster where Ty actually writes.

The stars are my posts, and they clump hard in “open source and community” (17 of 31), with a few in Python tooling and AI agents. A little too on-the-nose for what this blog mostly is.

Embeddings unlock something keyword counting never could: real nearest neighbors. I can ask “whose writing is closest to mine” and get an actual answer. My System76 hardware review sits at 0.90 cosine similarity to John Leeman’s “Think Different: Upgrading a Sad iMac.” My “Essential Resources for AI Engineers” lands right next to Eric Ma’s “Two years of weekly blogging.” My “I just failed a coding exercise” pairs with Ahmed Hossam’s “Why I Quit Competitive Programming.” None of those share many exact words. They share a subject and a register, which is exactly what TF-IDF is blind to.

The lens keeps making the finding

I want to pull together a thread that has now shown up three separate times, because it is the most important methodological point in this whole post: the angle you measure from tends to manufacture the conclusion.

  • TF-IDF said most contributors were faceless workhorses. Embeddings said they were not. Same 1,600 people, same bios and repos. One method produced a 900-person undifferentiated blob and a tidy story about quiet, brand-less workers. The other split that blob into seven ordinary topical groups. If I had only run the first, I would have written a confident, wrong paragraph about the personality of the field.
  • GitHub said these people show almost nothing personal. Their blogs said otherwise. From profiles alone the personal footprint looked tiny, about 2.5% of repos. Then I read their actual writing and found cooking, hardware teardowns, career reflections, burnout essays, and competitive-programming retirements. The personal life was always there. It just does not live in repo descriptions.
  • Choosing big repos put big tech on top, and choosing English-language GitHub hid whole communities. The sample frame decided the demographics before I computed a single statistic.

None of these are mistakes I can fully scrub out. They are the cost of having to pick a method and a dataset at all. The honest move is not to pretend the lens is neutral, it is to look through more than one lens and watch where they disagree. Where two methods agree (Python everywhere, a long-game cadence, writing as part of the science job), I trust it. Where they disagree, like how much “personality” these people seem to have, the disagreement is the finding.

Where this is biased, and it is

I put the short caveats up top, but the conclusions are interesting enough that they deserve a fuller accounting of how this could be wrong. Most of these biases push in directions you can reason about, which is the only reason I trust the broad strokes at all.

Choosing big repos skews the whole thing toward big tech. This is the big one, and it is structural. The major projects I sampled are exactly the kind of thing companies pay people to maintain. A Meta or NVIDIA or Google engineer can spend their salaried Tuesday landing PRs on PyTorch or JAX, while a pharma scientist doing equivalent work is almost certainly doing it inside a private repo that will never show up on a contributor graph. So “big tech is on top” is partly a real signal and partly a measurement artifact: I selected for the venues where corporate, in-the-open work happens. The pharma number especially should be read as “pharma does not build in public on these repos,” not “pharma does not do this work.”

Commit count is a lossy proxy for contribution. I ranked people by commits, which quietly favors a particular style: lots of small commits, maintenance, and merge-heavy workflows. It undercounts the researcher who lands two enormous, important changes a year, the prolific code reviewer who barely commits, and anyone whose project squash-merges everything into one commit per PR. The top of a contributor list is a specific kind of person, not simply “the most valuable” one.

It is all survivorship, and all self-presentation. These are the people who stuck around long enough to climb a contributor list, so newcomers and the people who tried and drifted away are invisible by construction. On top of that, a GitHub profile is an optional, curated surface. Half of these people do not write a bio. Personal projects might live in a private repo, on a second account, on GitLab, or nowhere at all. Every “personality” finding in this post is really a finding about what this kind of person chooses to show on GitHub, which is not the same as what they are actually into.

The repo list is my map of the field, not the field. I picked roughly 42 repositories, and that selection encodes my own biases: Python-heavy, English-language, structural-biology-flavored, and centered on the Western open-source ecosystem. A different person would pick a different 42 and surface different people. Whole communities are underweighted here, China’s ecosystem in particular, where a lot of activity lives on platforms like Gitee rather than GitHub.

The categories are mine, and the keywords are blunt. The work-versus-personal split, the field buckets, and the employer buckets are all heuristics I wrote. They impose tidy boundaries on messy free text, they miss anything not in English, and they undercount anything without a description or topics. The clustering had its own version of this, which is exactly why I re-ran it with embeddings. The gap between the two maps is the cleanest evidence in this whole post that the method, and not just the data, shapes what you “find.”

It is one snapshot. Profiles, employers, and especially the weekend activity (a rolling window of recent events) are a photograph taken in June 2026. People change jobs, and accounts go quiet.

None of this sinks the headline conclusions, which are mostly about orders of magnitude and not decimal points. But it does mean you should read this as “what the public, English, GitHub-centric, big-repo slice of this world looks like,” and hold the precise numbers loosely.

So what should you actually spend your time on?

This whole exercise was selfishly motivated, so let me make the payoff concrete. If you are trying to become one of these people, here is what the data actually says to do, as opposed to what Twitter says to do.

  1. Contribute to real, shared projects. This entire list was built from contributor graphs of major repositories. Membership in this world is defined by showing up to things other people depend on, not by the cleverness of your solo toy repo. This is the same conclusion I reached the hard way with OpenFold: pick something real and land small PRs.
  2. Get fluent in Python, then earn a second language by lane. Python is the price of entry. The differentiator is the language underneath it: C++ or CUDA if you want the systems and kernels lane, Rust for tooling, R or Julia or heavy TeX if you want the statistical and scientific lane.
  3. Graduate from notebooks to maintained code. Notebooks are how everyone thinks, but the maintainers are the ones who turned their thinking into libraries with tests. That transition is one of the clearest seniority tells in the dataset.
  4. If you want AI for science specifically, write. The science fields blog and publish more than anyone. The explanation is part of the work, not a distraction from it.
  5. Do not perform a personality you do not have. Most of these people present almost nothing personal, and they are doing fine. If you genuinely love building little games or making music or tuning your editor for the four hundredth time, by all means keep that corner. But you do not owe anyone a personal brand. The work is the resume.
  6. Play the long game and keep your weekends. A twelve-year median account age and a below-even weekend rate tell the same story. This is a marathon run by people who, mostly, go outside on Sundays.

The thing I keep coming back to is that the median person in this dataset is not intimidating. They are not a famous founder with a hundred thousand followers and a perfectly curated feed. They are someone who has been quietly useful, in public, for a long time, in a language I already know, while living a normal-ish life. That is the most encouraging possible answer to “who do I want to emulate,” because it is a person I can actually choose to become.


Method notes, for the curious: 1,600 top contributors across ~42 repositories, profiles and owned repos pulled from the GitHub REST API. Interest categories are keyword heuristics over repo metadata (and so undercount). The first contributor map is k-means over TF-IDF vectors of bios, repo descriptions, and topics, projected with t-SNE. The contrast map and the blog topics use real neural embeddings (BAAI/bge-base-en-v1.5, run locally on an RTX 3090), projected with UMAP. The weekend figure is from a 382-person subsample with at least ten recent public code events. The blog corpus is every post I could reach from the personal sites people linked: feeds and sitemaps discovered automatically, content extracted to markdown with trafilatura, 4,946 posts from 250 sites, capped at 50 per site for the topic model. Public data only, aggregated, with no individuals singled out beyond a few public figures named for their writing. The whole pipeline is reproducible and I am happy to run a particular cut.