<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Genes, Minds, Machines]]></title><description><![CDATA[Genes, Minds, Machines: Thoughts about Science, Communication, and AI. A newsletter covering topics in biology, data visualization, effective communication, AI, and higher education.]]></description><link>https://blog.genesmindsmachines.com</link><image><url>https://substackcdn.com/image/fetch/$s_!3tvK!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png</url><title>Genes, Minds, Machines</title><link>https://blog.genesmindsmachines.com</link></image><generator>Substack</generator><lastBuildDate>Sun, 06 Sep 2026 07:12:12 GMT</lastBuildDate><atom:link href="https://blog.genesmindsmachines.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Claus Wilke]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[clauswilke@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[clauswilke@substack.com]]></itunes:email><itunes:name><![CDATA[Claus Wilke]]></itunes:name></itunes:owner><itunes:author><![CDATA[Claus Wilke]]></itunes:author><googleplay:owner><![CDATA[clauswilke@substack.com]]></googleplay:owner><googleplay:email><![CDATA[clauswilke@substack.com]]></googleplay:email><googleplay:author><![CDATA[Claus Wilke]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Anthropic has not solved the peptide-binder design problem, but maybe bi[o]hub has]]></title><description><![CDATA[The protein design field is getting pushed forward by human experts in protein design, who would have thought]]></description><link>https://blog.genesmindsmachines.com/p/anthropic-has-not-solved-the-peptide</link><guid isPermaLink="false">https://blog.genesmindsmachines.com/p/anthropic-has-not-solved-the-peptide</guid><dc:creator><![CDATA[Claus Wilke]]></dc:creator><pubDate>Thu, 03 Sep 2026 22:17:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/hIJFwP5RWAE" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In my <a href="https://blog.genesmindsmachines.com/p/has-anthropic-solved-the-peptide">recent post about Claude&#8217;s protein design efforts,</a> I said that I was looking for a 2&#8211;3 sentence explanation of how Claude consistently did better than the collective field of human protein engineers, when it was using the same tools that everybody else is using. Well, it looks like we have our answer. The answer is <a href="https://biohub.ai/models/esmfold2">ESMFold2</a> from <a href="https://biohub.org/">bi[o]hub.</a> ESMFold2 is a new, open source protein folding model, similar to AlphaFold3, but newer. And faster. And also, apparently, better, in particular for evaluating binders. ESMFold2 was only released a few months ago, so it&#8217;s not surprising that it&#8217;s not yet widely used, or that its performance advantage is not yet known outside a narrow circle of insiders.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></p><p>The answer has arrived in the form of a video by Brandon Frenz, a biochemist who did his PhD work at the Institute for Protein Design at the University of Washington and who has well over a decade of experience designing proteins and protein binders. In the video, Frenz explains that the main difference in Claude&#8217;s pipeline over previous pipelines is the use of ESMFold2 for scoring designed binders. He also explains that ESMFold2 is both faster and more accurate than the competition, and that he himself these days is consistently using ESMFold2 to score protein binders. </p><div id="youtube2-hIJFwP5RWAE" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;hIJFwP5RWAE&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/hIJFwP5RWAE?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>The entire video is really good, and I encourage you to watch it. At the beginning, Frenz breaks down what exactly Claude did to design binders, how it had such a high success rate (primarily, by using ESMFold2 to score designs, a choice that was hard-coded into the prompt), and also how it wasted enormous amounts of compute, probably on the order of 100x more than is actually required to generate binders of similar quality. You can spend $20,000 using Claude, or you can spend less than $200 using the appropriate tools directly. In the second half of the video, the Frenz provides a detailed, step-by-step tutorial on how to design peptide binders that pass the same filters Claude used, how to evaluate the designs for potential problems, and so on. It&#8217;s a great video.</p><p>The video also makes another important point: Yes you could design binders with Claude and $$$, and let Claude handle all the orchestration, software install, and so on. But, you&#8217;re probably better off using a platform such as the one Frenz is building, where you have point-and-click access to all the popular design tools. Such platforms didn&#8217;t exist even three years ago, but now increasingly there are companies that offer nicely integrated platforms anybody could use, as long as they have access to a well-written tutorial and a couple hundred dollars to pay for compute.</p><p>There you go. Whoever wrote the Claude prompt knew what they were doing, or maybe they just got lucky and picked ESMFold2 because AlphaFold3 was out due to licensing requirements. In either case, if you are working on binder design, you can swap out AlphaFold3 for ESMFold2 in your pipeline, for increased throughput and better scoring. So, maybe Claude did make a contribution to protein design after all, if it helped us to realize how important it is to switch over to ESMFold2.</p><h3><em>More from Genes, Minds, Machines</em></h3><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;80bc62b7-2929-4edd-8a51-b0f73a226995&quot;,&quot;caption&quot;:&quot;You know what they say about headlines that are yes/no questions. If the author felt confident the answer was yes he would have said so. With that out of the way, let&#8217;s talk about the recent claim by Anthropic and see what we can find out. Are we all going to use Claude for peptide-binder design going forward?&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Has Anthropic solved the peptide-binder design problem?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-09-01T21:25:29.834Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!FuFK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bd4ea0e-f595-48fb-900a-e0bcd67a1f5a_4866x3244.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/has-anthropic-solved-the-peptide&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:212864796,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:27,&quot;comment_count&quot;:3,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;9b89f958-0e8e-4d68-a197-fa2e2d08cf2e&quot;,&quot;caption&quot;:&quot;Opinion writer and economist Noah Smith just dropped an article about AI-designed superviruses. Oh man. I used to think Smith was a person with informed opinions, but reading his take on a topic close to my own expertise makes me question this premise. No worries though. I&#8217;m sure I&#8217;ll read his takes on inflation tomorrow and nod along. Gell-Mann amnesia&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;I'm sorry, you're not going to die from an AI-engineered supervirus&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-08-30T15:41:36.608Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!FlXu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31e5aa31-f122-4e6f-8d34-a0df73329d51_2823x2117.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/im-sorry-youre-not-going-to-die-from&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:213159886,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:96,&quot;comment_count&quot;:44,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>For example, I was aware of ESMFold2 but didn&#8217;t know that I should probably use it instead of AlphaFold3. The previous iteration, EMSFold, was not obviously better than its competitor AlphaFold2.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Has Anthropic solved the peptide-binder design problem?]]></title><description><![CDATA[A small step towards curing all of human disease within the next ten years]]></description><link>https://blog.genesmindsmachines.com/p/has-anthropic-solved-the-peptide</link><guid isPermaLink="false">https://blog.genesmindsmachines.com/p/has-anthropic-solved-the-peptide</guid><dc:creator><![CDATA[Claus Wilke]]></dc:creator><pubDate>Tue, 01 Sep 2026 21:25:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FuFK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bd4ea0e-f595-48fb-900a-e0bcd67a1f5a_4866x3244.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You know what they say about headlines that are yes/no questions. If the author felt confident the answer was yes he would have said so.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> With that out of the way, let&#8217;s talk about the recent claim by Anthropic and see what we can find out. Are we all going to use Claude for peptide-binder design going forward?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FuFK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bd4ea0e-f595-48fb-900a-e0bcd67a1f5a_4866x3244.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FuFK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bd4ea0e-f595-48fb-900a-e0bcd67a1f5a_4866x3244.jpeg 424w, https://substackcdn.com/image/fetch/$s_!FuFK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bd4ea0e-f595-48fb-900a-e0bcd67a1f5a_4866x3244.jpeg 848w, https://substackcdn.com/image/fetch/$s_!FuFK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bd4ea0e-f595-48fb-900a-e0bcd67a1f5a_4866x3244.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!FuFK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bd4ea0e-f595-48fb-900a-e0bcd67a1f5a_4866x3244.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FuFK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bd4ea0e-f595-48fb-900a-e0bcd67a1f5a_4866x3244.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6bd4ea0e-f595-48fb-900a-e0bcd67a1f5a_4866x3244.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2167632,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/212864796?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bd4ea0e-f595-48fb-900a-e0bcd67a1f5a_4866x3244.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FuFK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bd4ea0e-f595-48fb-900a-e0bcd67a1f5a_4866x3244.jpeg 424w, https://substackcdn.com/image/fetch/$s_!FuFK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bd4ea0e-f595-48fb-900a-e0bcd67a1f5a_4866x3244.jpeg 848w, https://substackcdn.com/image/fetch/$s_!FuFK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bd4ea0e-f595-48fb-900a-e0bcd67a1f5a_4866x3244.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!FuFK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bd4ea0e-f595-48fb-900a-e0bcd67a1f5a_4866x3244.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@nci?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">National Cancer Institute</a> on <a href="https://unsplash.com/photos/gray-laboratory-machine-to8o0bqOA6Q?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></figcaption></figure></div><p>To set the stage, let&#8217;s first discuss what happened. Anthropic used Claude Science to design a number of peptide binders against several targets. These designs where subsequently tested experimentally by the company Adaptyv. This company provides testing of binders as a service, and it is known for various binder-design competitions. They partnered with Anthropic to compare how well Claude did relative to human protein designers that participated in prior competitions. By all accounts, Claude did very well. Here are some of the key claims, taken from a <a href="https://www.adaptyvbio.com/blog/anthropic-1">blog post published on the Adaptyv website:</a></p><blockquote><p>95% of the designs expressed, which three years ago would have been an impressive headline, showing the rapid progress of AI tools for protein design in recent years. This number matched the best expression rates of our EGFR competition which had hundreds of expert protein designers, and surpassed other challenges such as the RBX1 one. Out of these, 354 of all designs (1,320) bound their target, an overall hit rate of 26.8%, and the per-target hit-rates vary quite widely.</p></blockquote><blockquote><p><span>When compared to our competitions, Claude surpasses all their hit rates, especially when looking at every single run for each target Anthropic submitted as in the plot above. For a fair comparison, we have subsetted each competition&#8217;s results to only include de novo minibinders. Claude achieved an 80% hit rate on TREM2, greatly improving over the 38.3% </span><a href="https://www.adaptyvbio.com/blog/agents-vs-humans"><span>we reported in our competition</span></a><span>, and even on trickier targets such as 15-PGDH, it has a success rate more than 3-fold higher than </span><a href="https://proteinbase.com/collections/berlin-bio-x-adaptyv-15-pgdh-binder-design-competition"><span>observed on Proteinbase</span></a><span>.</span></p></blockquote><p>In addition to the <a href="https://www.adaptyvbio.com/blog/anthropic-1">Adaptyv blog post,</a> we also have access to a <a href="https://www.anthropic.com/research/Claude-accelerates-protein-design">blog post by Anthropic,</a> a detailed <a href="https://www-cdn.anthropic.com/30bf50e22a01388bb29bf077ee3f244531594b7a.pdf">technical report,</a> and a <a href="https://huggingface.co/datasets/Anthropic/claude-protein-binder-design/tree/main">repository with prompts and data.</a> This effort seems to be pretty well documented. And yet I don&#8217;t fully understand what exactly Claude did. The prompts folder in the repository contains a file that is over a gigabyte in size. Who knows what is all in there. There is a <a href="https://huggingface.co/datasets/Anthropic/claude-protein-binder-design/blob/main/prompts/prompts/multi_target_binder_design_prompt.md">plain-text prompt file</a> that is 16,000 words of detailed instructions on how to do protein design. This is an amount of material comparable to a PhD thesis on the topic. A competent protein-design expert put all of this together to help Claude along.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/has-anthropic-solved-the-peptide?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/has-anthropic-solved-the-peptide?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.genesmindsmachines.com/p/has-anthropic-solved-the-peptide?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p>Since Claude apparently did better than human protein designers, I&#8217;d like to know what exactly enabled Claude&#8217;s success. I have a simple principle for evaluating claims of major advances: Can I find a brief explanation, 2&#8211;3 sentences, of what the core new idea is that enabled the advance? What exactly is different in this new approach compared to what we have done previously, and how does it lead to better results? Absent such an explanation, I tend to be skeptical, as people are great at confusing themselves. And AI in particular is exceptionally great at finding loopholes, workarounds, or otherwise arriving at a solution without actually doing what we thought the problem statement required. </p><p>If I understand correctly, Claude ran existing protein design tools, such as RFdiffusion, ProteinMPNN, ESMFold, Boltzgen, etc. It did not bring anything new to the table in terms of better folding models, better energy functions, or better generative algorithms. So how could it possibly do better than a human expert using those same tools?</p><p>There are some possibilities. First, maybe Anthropic threw more compute at the problem than other groups do. There&#8217;s a relationship in protein design between the amount of compute spent and the quality of the results obtained. Design is fundamentally a search problem, and if you search longer you&#8217;ll get better solutions.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> It looks like Anthropic allocated <a href="https://www.anthropic.com/research/Claude-accelerates-protein-design">2,500 H100 GPU hours per design,</a> which is a lot but also not outrageous. You can buy this amount of compute for about $7,000&#8211;$10,000 on the open market (~$3 per one H100 GPU hour).<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> For comparison, the recent ESM C paper used 1,500&#8211;2500 H100 GPU hours per design,<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a> and I would estimate most of the leading groups use similar amounts. So compute is not the difference. </p><p>Second, it is possible that the field has simply moved forward. New methods for peptide-binder design are released every few months. Maybe Claude took advantage of some tools that either weren&#8217;t available when the previous competitions were held or at least weren&#8217;t widely used. For example, <a href="https://www.linkedin.com/posts/brian-weitzner_amir-s-at-anthropic-had-claude-run-de-novo-share-7495922821311770624-I8Ig/?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAEwmR0B3bPZ_dafkvAjeVKucZo795iZwZg">Claude used FreeBindCraft</a> instead of the regular, highly popular BindCraft, and maybe that version is a bit better. For sure <a href="https://www.ariax.bio/resources/freebindcraft-open-source-unleashed">its website claims it&#8217;s faster.</a>  </p><p>Third, all the targets are widely known and have been used in various binder-design competitions. Maybe Claude scanned the literature and found for each target the specific tool and/or parameter settings that performed best in prior design efforts. Or maybe Claude filtered its own designs on the basis of similarity to known successful designs.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a> Alternatively, it is possible that Claude scanned the existing literature and discovered the overall best current design pipeline and used that consistently.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-6" href="#footnote-6" target="_self">6</a></p><p>Fourth, there may be a component of luck or survivorship bias. Claude made some choices about what tools to run and with what settings and some of those choices may simply have been lucky. If Claude&#8217;s design attempts hadn&#8217;t been successful we wouldn&#8217;t be talking about them.</p><p>It is important to emphasize what Claude has not done. It has not done any actual science that moves the protein-design field forward. For example, it has not tried different binder-design platforms to figure out which has the highest success rate in subsequent experimental testing. It has not tweaked design parameters and synthesized the resulting peptides to figure out which parameters lead to toxic peptides and which do not. All it has done is one-shotting the solution. Press the button, Claude spins up a few GPUs, and out come some novel peptide binders that somehow work. This is great, but Claude has not actually learned anything new about binder design. It could not, by construction.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-7" href="#footnote-7" target="_self">7</a> Whatever it has done was already present in the literature it processed as part of its &#8220;reasoning&#8221; process.</p><p>Now, on the flip side, I want to highlight that there is some value in having Claude run protein-design tools. Figuring out these tools and getting them to run is not a trivial task. It takes a lot of experience, and also it&#8217;s not fun to fiddle with python environments, CUDA incompatibilities, outdated dependencies, and so on, just to install all the latest methods. If Claude can sort this out on its own that sounds appealing to me. Now I suspect that an experienced protein designer will still prefer to run the tools manually, if only to have complete control, to be able to tweak things, and to know exactly which methods are used and how. But, I can see plenty of use cases where outsourcing this to Claude may be worthwhile. In <a href="https://www.linkedin.com/posts/brian-weitzner_amir-s-at-anthropic-had-claude-run-de-novo-share-7495922821311770624-I8Ig/?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAEwmR0B3bPZ_dafkvAjeVKucZo795iZwZg">this LinkedIn post,</a> Brian Weitzner estimates there are fewer than 1000 people total that can do this kind of work. Many companies with protein-design needs may not be able to hire one of these people, and in particular not one of the much rarer experts who truly understand how things work and who are moving the field forward. If companies can instead throw some money at Claude to get useful designs, that may be a solution that works for them.</p><p>And, for no good reason, I&#8217;ll close by pointing out that no angry teenager will use Claude to design novel peptide binders, because no teenager has $50k&#8211;$100k lying around to pay for the required GPU time.</p><p><strong>Update:</strong> Apparently what gave Claude the edge was access to ESMFold2, which has only recently been released and is not yet widely used. <a href="https://blog.genesmindsmachines.com/p/anthropic-has-not-solved-the-peptide">See here for details.</a></p><h3><em>More from Genes, Minds, Machines</em></h3><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;2a6870ce-ea30-47ac-9e24-40fef117bcb6&quot;,&quot;caption&quot;:&quot;AI has gotten amazingly good for programming. Claude Sonnet will zero- or one-shot small programming tasks without mistakes. And while I don&#8217;t think AI is ready to replace software engineers outright, or that vibe coding a fully featured app is a good idea, for simple tasks AI is outstanding. For example, I can perform basic data analysis, maybe visuali&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;We still can&#8217;t predict much of anything in biology&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-10-07T12:27:22.966Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!02U1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F976b3f4b-b2b5-4389-8634-fb2d0227207b_5168x3448.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/we-still-cant-predict-much-of-anything&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:175321052,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:122,&quot;comment_count&quot;:20,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;9b623a92-33ba-4e83-9250-0eb9b73609ac&quot;,&quot;caption&quot;:&quot;When you read papers about AI models for zero-shot fitness predictions, you generally get the sense that these predictions work quite well. Correlations between measured fitness effects and zero-shot predictions tend to be high. Systematic benchmarks have repeatedly shown this pattern, across hundred of datasets and many different models.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How useful are zero-shot predictions of mutational effects?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-07-13T12:27:16.832Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!R03W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a5d5a09-d3b7-418e-aaf4-c96a65ac8087_1574x1210.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/how-useful-are-zero-shot-predictions&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:206131112,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:17,&quot;comment_count&quot;:3,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>This is called <a href="https://en.wikipedia.org/wiki/Betteridge%27s_law_of_headlines">Betteridge&#8217;s law of headlines.</a></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>You can think about it as follows: Assume you have a system that proposes designs (e.g., RFdiffusion + ProteinMPNN) and a system that scores proposed designs (e.g., AlphaFold3). You generate <em>n</em> proposed designs, score them, and then pick the top-10-scoring designs for experimental testing. As you increase <em>n</em> you&#8217;ll get increasingly better-scoring designs and as long as your scoring function is reasonably good this will translate into better outcomes during experimental testing. </p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>In fact, the <a href="https://huggingface.co/datasets/Anthropic/claude-protein-binder-design/blob/main/prompts/prompts/kickoff/single_target_kickoff.md">prompt file</a> includes a dollar limit of $10,000 instead of a GPU-time limit.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>See Figure S16 on page 56 <a href="https://www.biorxiv.org/content/10.64898/2026.06.03.729735v1.full.pdf">here.</a></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>It shouldn&#8217;t do this, but are you certain it didn&#8217;t do this?</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-6" href="#footnote-anchor-6" class="footnote-number" contenteditable="false" target="_self">6</a><div class="footnote-content"><p>If that&#8217;s the case I would want to know what it is.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-7" href="#footnote-anchor-7" class="footnote-number" contenteditable="false" target="_self">7</a><div class="footnote-content"><p>It could not because the protocol was &#8220;first generate all the designs, then test them experimentally.&#8221; For real discovery, you&#8217;d need an iterated loop, &#8220;generate some designs, test them, tweak parameters based on the findings, repeat.&#8221; I&#8217;m not saying Claude is inherently incapable of running that loop. I&#8217;m just saying the way things were set up here it didn&#8217;t do it.</p></div></div>]]></content:encoded></item><item><title><![CDATA[I'm sorry, you're not going to die from an AI-engineered supervirus]]></title><description><![CDATA[God save us from economists who think they can competently talk about biology]]></description><link>https://blog.genesmindsmachines.com/p/im-sorry-youre-not-going-to-die-from</link><guid isPermaLink="false">https://blog.genesmindsmachines.com/p/im-sorry-youre-not-going-to-die-from</guid><dc:creator><![CDATA[Claus Wilke]]></dc:creator><pubDate>Sun, 30 Aug 2026 15:41:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FlXu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31e5aa31-f122-4e6f-8d34-a0df73329d51_2823x2117.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Opinion writer and economist Noah Smith just dropped <a href="https://www.noahpinion.blog/p/heres-how-were-all-going-to-die">an article about AI-designed superviruses.</a> Oh man. I used to think Smith was a person with informed opinions, but reading his take on a topic close to my own expertise makes me question this premise. No worries though. I&#8217;m sure I&#8217;ll read his takes on inflation tomorrow and nod along. Gell-Mann amnesia is real.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FlXu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31e5aa31-f122-4e6f-8d34-a0df73329d51_2823x2117.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FlXu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31e5aa31-f122-4e6f-8d34-a0df73329d51_2823x2117.jpeg 424w, https://substackcdn.com/image/fetch/$s_!FlXu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31e5aa31-f122-4e6f-8d34-a0df73329d51_2823x2117.jpeg 848w, https://substackcdn.com/image/fetch/$s_!FlXu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31e5aa31-f122-4e6f-8d34-a0df73329d51_2823x2117.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!FlXu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31e5aa31-f122-4e6f-8d34-a0df73329d51_2823x2117.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FlXu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31e5aa31-f122-4e6f-8d34-a0df73329d51_2823x2117.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/31e5aa31-f122-4e6f-8d34-a0df73329d51_2823x2117.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2164239,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/213159886?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31e5aa31-f122-4e6f-8d34-a0df73329d51_2823x2117.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FlXu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31e5aa31-f122-4e6f-8d34-a0df73329d51_2823x2117.jpeg 424w, https://substackcdn.com/image/fetch/$s_!FlXu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31e5aa31-f122-4e6f-8d34-a0df73329d51_2823x2117.jpeg 848w, https://substackcdn.com/image/fetch/$s_!FlXu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31e5aa31-f122-4e6f-8d34-a0df73329d51_2823x2117.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!FlXu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31e5aa31-f122-4e6f-8d34-a0df73329d51_2823x2117.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@babybluecat?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Jei Lee</a> on <a href="https://unsplash.com/photos/a-gray-rabbit-sitting-on-top-of-a-white-floor-p0TGhqO3rck?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></figcaption></figure></div><p>The article opens with a fictitious story about a disgruntled teenager in 2029<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> who asks an AI to design some lethal viruses, which he then deploys and ends up killing 90% of the human population.</p><p>Immediately following this story, Smith writes: &#8220;I have yet to hear an even halfway-convincing argument as to why this scenario is far-fetched.&#8221; Pro-tip: When you find yourself writing such a statement about a topic you&#8217;re not an expert in, there are only two possibilities: 1. You are not talking to the right people. 2. You are talking to the right people but you&#8217;re not listening to what they&#8217;re saying. On that note: The article is paywalled. I can&#8217;t read beyond the first few introductory paragraphs. I also can&#8217;t post comments. All I can do is write on my own blog, making some assumptions about what the article may say. It is possible that every point I&#8217;m making here is competently addressed and strongly refuted in Smith&#8217;s article. If that&#8217;s the case, more power to him, and I&#8217;ll stand corrected.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Who am I? Why should you listen to me? Well, for one, unlike Noah Smith, I have actually computationally designed viruses and other biological systems.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> Also, my day job involves developing and evaluating AI systems for protein and peptide design. So I know a thing or two about state-of-the-art AI tools in biology and about the challenges of designing and building functional biological systems. I also know a bit of virology.</p><p>Computational design of biological systems is unfathomably difficult. Experts who have dedicated their life to this topic routinely hit their head against the wall when nothing they try seems to work. PhD students in 2026 using state-of-the-art AI software are spending months or years trying to design simple peptide binders that inhibit some enzyme or pull down some protein, and the majority of their designs fail, or don&#8217;t express, or are toxic.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> But in Smith&#8217;s fictitious world a disgruntled teenager with no special training in biology can just solve a problem thousands of times more complicated than designing a peptide binder. The distance between where we are today and where we would have to be for Smith&#8217;s story to have any realism is enormous. And then, even if you could design the perfect virus, assembling and distributing it would be a non-trivial task in its own right. You don&#8217;t just order a working virus from temu.com. See for example <a href="https://abio.substack.com/p/why-ai-assisted-bioweapons-wont-kill">this article</a> by <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Abi Olvera&quot;,&quot;id&quot;:349629,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/550e023c-2e8e-440f-91e8-6d32872d8d5f_1123x1125.png&quot;,&quot;uuid&quot;:&quot;82e4b233-4295-4241-ba93-3b9d26404c23&quot;}" data-component-name="MentionToDOM"></span>.</p><p>I&#8217;m not discounting the possibility that at some point somebody may cause some harm with an AI-designed biological agent. But we need to consider scale. A disgruntled teenager could also get their hands on a fertilizer bomb and blow up a busy shopping mall. No AI needed. So damage on the scale of maybe a couple hundred to a couple thousand people dead, while devastating for the individuals affected, is not an existential threat. The question is whether a much larger attack is possible. Something that would kill millions of people.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a> I am quite confident this is not something we need to worry about, at least not for another few decades.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a></p><h2>Nobody knows how to build a supervirus</h2><p>Let&#8217;s set aside all the issues of whether AI can design viruses, how hard it may be to then build them, and finally to distribute them to unsuspecting victims. Let&#8217;s assume all of these issues are solved.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-6" href="#footnote-6" target="_self">6</a> So, you&#8217;re armed with your supervirus-generating AI and your rogue lab that will synthesize and weaponize viruses for you. What properties do you want the viruses to have?</p><p>&#8220;Well, duh,&#8221; you say, &#8220;I want them to be lethal!&#8221; Ok, here you go: Ebola virus, hantavirus, rabies virus. All extremely lethal. And yet, we&#8217;re not really that worried about them. At least we don&#8217;t think of them as civilization-ending superviruses. Why is that?</p><p>Hantavirus doesn&#8217;t spread human-to-human.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-7" href="#footnote-7" target="_self">7</a> Don&#8217;t inhale infected rat droppings and you won&#8217;t get it. Similarly, rabies doesn&#8217;t transmit human-to-human, primarily because once people are becoming contagious they are so incapacitated that they&#8217;re unlikely to bite you. Now Ebola is different, it is actually quite contagious, but it requires contact with the bodily fluids of an infected person and that contact is easily avoided unless you&#8217;re a direct caregiver.</p><p>&#8220;Ok then,&#8221; you may say, &#8220;I want them to spread through the air!&#8221; That&#8217;s fine, plenty of viruses spread easily, but there&#8217;s generally a tradeoff between how easy a virus spreads and how lethal it is. For a virus to spread easily, the infected patient needs to shed a lot of viral particles, and this requires a high viral load. But, the patient needs to be able to walk around and function while experiencing a high viral load, otherwise they won&#8217;t spread the virus. This generally means the virus is not that deadly. An example of a virus that spreads extremely well is measles virus. The virus can remain suspended in the air for up to two hours. If you enter a room in which two hours prior somebody with measles spent 15 minutes you may you catch the disease. But, measles kills &#8220;only&#8221; about one in a thousand infected people. It&#8217;s incredibly contagious, but it&#8217;s not that deadly. It&#8217;s really bad though. We&#8217;ll get back to it later.</p><p>&#8220;I got it now,&#8221; you may say, &#8220;I want viruses that have a long incubation period, during which they can get transmitted, and then later I want the infection to turn really bad and kill the patient.&#8221; Ok, fine, such a thing would probably deserve the label &#8220;supervirus.&#8221;<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-8" href="#footnote-8" target="_self">8</a> I&#8217;m not sure what the biological mechanism would be though. How do you build this? Viruses with long incubation periods are typically not contagious during the asymptomatic period. The may integrate into the host genome and lay dormant for a while, only to reactivate later (e.g., varicella-zoster virus, the causative agent of chickenpox and shingles). Or they slowly make their way through your nervous system (e.g., rabies virus). The one virus that sort of has the properties we&#8217;re looking for is HIV. Extremely long incubation period. Patients can be contagious without showing obvious symptoms. Nearly 100% lethal without treatment. But, not easily transmitted. We commonly see this tradeoff. Viruses that hide in specific compartments of the body for long periods of time will not usually transmit easily. I&#8217;m not aware of any virus that has even remotely similar properties to HIV but spreads like a respiratory virus.</p><p>In general, there are tradeoffs between how lethal a virus is and how easily it spreads. Consider the common flu (H3N2 influenza) and avian influenza (in particular, H5N1). H3N2 influenza transmits easily person-to-person because it targets a receptor that is located in the upper respiratory tract. H5N1 influenza, by contrast, targets a receptor that is located in the lower lungs. This causes more severe disease but limits spread. Epidemiologists have reasonable concerns about a potential H5N1 pandemic, but to date the tradeoff has held. We have not seen a civilization-ending H5N1 pandemic.</p><p>There is simply no good reason to believe that AI will magically be able to work around these fundamental tradeoffs of biology, that it could somehow design a virus with the lethality of H5N1 influenza but the contagiousness of H3N2. The basic science required to build such a thing has not been done. When people believe that AI could figure this out on its own, without first running extensive and expensive basic science experiments, they have left the realm of science and have entered what can only be described as religion. They hold a strong belief not supported by any evidence or causal chain of logic.</p><h2>The viruses causing the most damage are not what you think they are</h2><p>As I just said, a virus that first spreads silently throughout the population and then flips a switch and kills everybody is science fiction. It does not exist and will never exist. And among the viruses that do exist, the ones that seem the scariest are not necessarily the ones causing the most damage. For any virus that does or could exist, we have to consider how an outbreak would affect and interact with human behavior.</p><p>Consider the spectrum of possible viruses, from mild to highly lethal. On one end you have something like the common cold, which spreads easily and infects millions of people every year. It rarely causes serious illness so people mostly just ignore it and live their regular lives. The total damage caused by the common cold, in terms of morbidity and mortality, is not that large because the infection is rarely lethal. On the other end of the spectrum, you have something like Ebola, with mortality rate up to 90%.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-9" href="#footnote-9" target="_self">9</a> Ebola is a scary virus. It is a killer. Yet the total number of people killed by Ebola is not that high either. Getting infected with Ebola is generally a death sentence, and therefore people take it seriously and do their best to avoid transmission. Ebola will never turn into a world-wide pandemic. If Ebola prevalence kept rising, at some point people would simply isolate, stop interacting with the world, and wait it out. The viruses causing the most damage are not found on either end of the lethality spectrum, they live in the middle.</p><p>There is a Goldilocks zone of lethality for a pandemic virus that will cause maximum mortality, and it&#8217;s a level of lethality that is much lower than you may think.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-10" href="#footnote-10" target="_self">10</a> In fact, I think COVID was close to ideal in terms of a virus causing global morbidity and mortality. It caused sufficiently severe infections that many millions globally died, and yet its infections were also often sufficiently mild that people could just dismiss the virus and pretend it wasn&#8217;t an issue, thus contributing to further viral spread. Notably, COVID also had the property of asymptomatic transmission, where some people spread the virus without themselves feeling particularly sick or showing any symptoms. It was near perfect as a pandemic supervirus.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-11" href="#footnote-11" target="_self">11</a></p><p>So, if you&#8217;re worried about AI-designed superviruses, think COVID, not Ebola. And if you&#8217;re now a little less worried, maybe you understand where I&#8217;m coming from.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-12" href="#footnote-12" target="_self">12</a> Yes, COVID was bad. But it did not end civilization. We&#8217;re still here. At least those of us who survived. If somebody actually designed a virus with AI, which I still maintain is virtually impossible, I doubt they could do more damage than COVID did.</p><h2>The risk from nature is still worse</h2><p>What really bothers me about these stories about how AI will design killer viruses is that they are pure fear mongering, and more importantly they divert attention from the things that matter. There are deadly viruses all around us, and viruses routinely jump from animals to humans and cause severe outbreaks. This is a real, documented risk. This is the risk we should worry about. This is the risk we should prepare for. But instead, we worry about fictitious AI-designed viruses while ignoring the real viruses that stare us in the face.</p><p>Let&#8217;s go back to measles. It is bad. Really bad. If somebody gave themselves the goal of designing a supervirus and came up with something like the measles we&#8217;d probably call that a success. Measles is incredibly contagious. On average, every infected person infects over ten other people. Around 10-20% of measles cases result in hospitalization, and about one in a thousand results in death. And if you survive the measles, you may experience permanent vision loss, hearing loss, brain damage, intellectual disability, or a destroyed immune system. If you&#8217;re really unlucky, 10&#8211;20 years after your measles infection you develop <a href="https://en.wikipedia.org/wiki/Subacute_sclerosing_panencephalitis">subacute sclerosing panencephalitis,</a> which is an awful, progressive brain disease that slowly turns your brain into mush and eventually kills you.</p><p>Now here&#8217;s a real risk involving measles that I sometimes worry about. What if the measles virus experienced a set of immune escape mutations where suddenly existing vaccines no longer work? If this happened the consequences would be horrifying. We&#8217;d have an immediate, world-wide measles epidemic long before we could develop and roll out a new vaccine. What&#8217;s the likelihood this will happen? Informed estimates are that it is low. But realistically speaking, even if the likelihood is low, it&#8217;s probably higher than the likelihood that a disgruntled teenager will design a supervirus with AI. So, something to think about.</p><p>More generally, it feels to me like society is currently not particularly concerned about real viruses causing real devastation. There&#8217;s a massive Ebola outbreak right now in the Congo. Nobody cares. Measles are surging in the US. Nobody cares. HIV is running rampant in Sub-Saharan Africa. Nobody cares. And for sure nobody cares anymore about COVID. So spare me your concerns about fictitious, AI-generated superviruses.</p><p>What protects us from deadly viruses, regardless of their origin, is good public health practices and basic research. Ongoing surveillance to catch emerging pathogens early. Consistent vaccination against known pathogens so they are kept in check. Research into rapid vaccine development and into novel antivirals. Investments into improved indoor air quality and air filtering. Consistent hand washing. But this stuff is boring and doesn&#8217;t sell Substack subscriptions. Let&#8217;s be real. Fear mongering about AI superviruses is a much better strategy to make money online.</p><h3><em>More from Genes, Minds, Machines</em></h3><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;862f0727-ad8f-4d7a-a6a6-9489adc0225a&quot;,&quot;caption&quot;:&quot;AI has gotten amazingly good for programming. Claude Sonnet will zero- or one-shot small programming tasks without mistakes. And while I don&#8217;t think AI is ready to replace software engineers outright, or that vibe coding a fully featured app is a good idea, for simple tasks AI is outstanding. For example, I can perform basic data analysis, maybe visuali&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;We still can&#8217;t predict much of anything in biology&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-10-07T12:27:22.966Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!02U1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F976b3f4b-b2b5-4389-8634-fb2d0227207b_5168x3448.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/we-still-cant-predict-much-of-anything&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:175321052,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:123,&quot;comment_count&quot;:20,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;17991bd3-a6b4-42f3-b4fc-dbd0cb42fb6b&quot;,&quot;caption&quot;:&quot;AlphaFold has captured the imagination of people outside biology to an extent not normally seen for a technical tool of computational biology. No tech bro in Silicon Valley has an opinion on HMMER, BLAST, or FoldX, or their potential impact on the future of humanity. But when it comes to&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;No, AlphaFold has not completely solved protein folding&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-07-12T18:17:44.506Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!ltLI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc798a545-a686-4750-98e7-3411af6017d7_1247x1280.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/no-alphafold-has-not-completely-solved&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:167968553,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:96,&quot;comment_count&quot;:12,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>2029 is just the icing on the cake. That&#8217;s three years from today. Make it at least 2049 so I can experience some suspension of disbelief.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>For example, in 2012, <a href="https://academic.oup.com/mbe/article/29/10/2997/1029497">my lab introduced up to 182 mutations at once into bacteriophage T7,</a> demonstrating that we could deliberately reduce T7 virulence in a controlled manner by increasing or decreasing the number of mutations we added. We also showed that we had succeeded with the original design goal of building a virus that would have difficulty adapting to the introduced changes, an important consideration when engineering a virus. You don&#8217;t want it to undo your changes the moment it starts replicating. (Our experiment was in the context of vaccine design, where you want to ensure an attenuated virus remains attenuated when injected into patients.)</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>I have written about this issue <a href="https://blog.genesmindsmachines.com/p/we-still-cant-predict-much-of-anything">previously here.</a></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>And 90% of the population dead, as asserted in Smith&#8217;s story, is completely off base. This will never happen.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>I am willing to concede that the world may look different in 2049. We&#8217;ll see.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-6" href="#footnote-anchor-6" class="footnote-number" contenteditable="false" target="_self">6</a><div class="footnote-content"><p>Just to reiterate: They are not.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-7" href="#footnote-anchor-7" class="footnote-number" contenteditable="false" target="_self">7</a><div class="footnote-content"><p>Yes, I know of the Andes strain that has some documented human-to-human transmission.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-8" href="#footnote-anchor-8" class="footnote-number" contenteditable="false" target="_self">8</a><div class="footnote-content"><p>And, to be fair, Smith envisions such a virus. Once you&#8217;re operating in the realm of fiction anything goes.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-9" href="#footnote-anchor-9" class="footnote-number" contenteditable="false" target="_self">9</a><div class="footnote-content"><p>The exact mortality rate of Ebola depends on the strain and also on the quality of care available to infected people. It is possible to survive an Ebola infection with modern intensive care. Nevertheless, an Ebola infection is extremely serious and has a high likelihood of resulting in death.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-10" href="#footnote-anchor-10" class="footnote-number" contenteditable="false" target="_self">10</a><div class="footnote-content"><p>See for example <a href="https://doi.org/10.1093/pnasnexus/pgad106">this study</a> and also the book <a href="https://www.amazon.com/dp/1421450488/"><span>Asymptomatic</span></a><span> by Joshua Weitz.</span></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-11" href="#footnote-anchor-11" class="footnote-number" contenteditable="false" target="_self">11</a><div class="footnote-content"><p>And just to get this out of the way: No, COVID was not designed in a lab. There is absolutely no evidence for this. We also don&#8217;t have the technology to fine-tune a virus so it has just the right characteristics in terms of virulence and contagiousness and asymptomatic spread. COVID was an animal virus that happened to jump the species barrier, just like SARS-CoV-1 and MERS-CoV before it.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-12" href="#footnote-anchor-12" class="footnote-number" contenteditable="false" target="_self">12</a><div class="footnote-content"><p>But maybe you also have to reassess how bad COVID actually was. Remember overflowing morgues in New York City? <a href="https://www.youtube.com/watch?v=QJOtfXXVvMw">Yes, that was a thing.</a></p></div></div>]]></content:encoded></item><item><title><![CDATA[Protein language models are overly constrained by covariation]]></title><description><![CDATA[Why good performance on one set of goals can lead to poor performance on another]]></description><link>https://blog.genesmindsmachines.com/p/protein-language-models-are-overly</link><guid isPermaLink="false">https://blog.genesmindsmachines.com/p/protein-language-models-are-overly</guid><dc:creator><![CDATA[Claus Wilke]]></dc:creator><pubDate>Wed, 12 Aug 2026 12:36:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!sIya!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30de0dd4-2214-4d44-89ac-882d2c5a0f5d_1460x1314.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>By many measures, protein language models (pLMs) perform exceptionally well at various tasks in protein research. They are great for homology search, functional classification, and even contact prediction. They can also be useful in evaluating individual mutations, though the track record here is more mixed. While pLMs appear to be excellent at separating viable from inviable mutations, they are quite bad at <a href="https://blog.genesmindsmachines.com/p/how-useful-are-zero-shot-predictions">predicting mutations that enable or improve novel function.</a> A new paper by Berry et al.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> offers an explanation for this observation, and it&#8217;s not at all what I would have expected. The explanation is that pLMs are too constrained by covariation, and therefore they tend to reject mutations that don&#8217;t fit exactly into the surrounding sequence context (Figure 1). And yet, such mutations may be exactly the ones required for novel function. Surprisingly, mixing in information from much simpler models that ignore covariation and basically just count amino-acid frequencies at different sites improves predictions dramatically.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sIya!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30de0dd4-2214-4d44-89ac-882d2c5a0f5d_1460x1314.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sIya!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30de0dd4-2214-4d44-89ac-882d2c5a0f5d_1460x1314.png 424w, https://substackcdn.com/image/fetch/$s_!sIya!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30de0dd4-2214-4d44-89ac-882d2c5a0f5d_1460x1314.png 848w, https://substackcdn.com/image/fetch/$s_!sIya!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30de0dd4-2214-4d44-89ac-882d2c5a0f5d_1460x1314.png 1272w, https://substackcdn.com/image/fetch/$s_!sIya!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30de0dd4-2214-4d44-89ac-882d2c5a0f5d_1460x1314.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sIya!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30de0dd4-2214-4d44-89ac-882d2c5a0f5d_1460x1314.png" width="545" height="490.35027472527474" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/30de0dd4-2214-4d44-89ac-882d2c5a0f5d_1460x1314.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1310,&quot;width&quot;:1456,&quot;resizeWidth&quot;:545,&quot;bytes&quot;:599279,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/208887911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30de0dd4-2214-4d44-89ac-882d2c5a0f5d_1460x1314.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sIya!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30de0dd4-2214-4d44-89ac-882d2c5a0f5d_1460x1314.png 424w, https://substackcdn.com/image/fetch/$s_!sIya!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30de0dd4-2214-4d44-89ac-882d2c5a0f5d_1460x1314.png 848w, https://substackcdn.com/image/fetch/$s_!sIya!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30de0dd4-2214-4d44-89ac-882d2c5a0f5d_1460x1314.png 1272w, https://substackcdn.com/image/fetch/$s_!sIya!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30de0dd4-2214-4d44-89ac-882d2c5a0f5d_1460x1314.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 1. Context-free and context-aware models score mutations differently.</strong> (A) The possible mutations at a site are constrained by sequence context. Certain mutations are more or less likely depending on what the rest of the protein looks like. This effect is also called &#8220;epistasis.&#8221; (B) A context-free model ignores these constraints and simply records variation at individual sites. It will rank highly any mutations that occur frequently at a site, regardless of context. (C) By contrast, a context-aware model penalizes mutations that conflict with other parts of the sequence. As a result, a mutation frequently seen at a given site in the protein can nevertheless get a low score for certain contexts. Note that pLMs are context-aware models. The schematic drawing was modified from Figure 6 of <a href="https://doi.org/10.64898/2026.06.10.731299">Berry et al.</a> I changed some of the text labels for clarity. Modified labels are shown in dark red. </figcaption></figure></div><p>By performing a systematic benchmarking study, Berry et al. find that pLMs consistently do poorly in identifying mutations that enable or increase novel function. <a href="https://blog.genesmindsmachines.com/p/how-useful-are-zero-shot-predictions">My own lab had recently made a similar observation,</a> so this part of the study was not that surprising to me. What comes next is more important, however. Berry et al. show that an alternative model performs much better. What is the alternative model? It is a position-specific scoring matrix (a PSSM, this is basically just site-wise amino-acid frequencies in a multiple sequence alignment) minus a pLM. So, to find variants that generate or improve novel function, we need to look for mutations that are common in multiple sequence alignments, and then among those pick the ones that the pLM thinks are bad. Yes, bad. The pLM score is <em>subtracted,</em> so a high score from the pLM means the mutation is <em>not</em> a good candidate for further exploration.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> This is exactly the opposite of what everybody else in the field has done to date.</p><p>One of the most impressive examples provided by Berry et al. is the case of DraNramp, a protein used by bacteria for manganese (Mn<sup>2+</sup>) and iron (Fe<sup>2+</sup>) uptake. In nature, the protein does not transport magnesium (Mg<sup>2+</sup>), but many laboratory variants are known that can perform this function. So, how well do pLMs such as ESM-1v do at predicting variants that enable magnesium uptake? Terribly. Nearly all of the proposed variants excel at importing manganese, and none can import magnesium (Figure 2A). But, when Berry et al. use scores from the PSSM minus the pLM, they recover many variants that are quite good at magnesium uptake (Figure 2B). The pLM likes to maintain the current function, whereas the PSSM is able to explore new functions.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fm4M!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff42490fe-a21d-48c2-8588-a5b3ff6ed1fb_1326x728.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fm4M!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff42490fe-a21d-48c2-8588-a5b3ff6ed1fb_1326x728.png 424w, https://substackcdn.com/image/fetch/$s_!fm4M!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff42490fe-a21d-48c2-8588-a5b3ff6ed1fb_1326x728.png 848w, https://substackcdn.com/image/fetch/$s_!fm4M!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff42490fe-a21d-48c2-8588-a5b3ff6ed1fb_1326x728.png 1272w, https://substackcdn.com/image/fetch/$s_!fm4M!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff42490fe-a21d-48c2-8588-a5b3ff6ed1fb_1326x728.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fm4M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff42490fe-a21d-48c2-8588-a5b3ff6ed1fb_1326x728.png" width="1326" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f42490fe-a21d-48c2-8588-a5b3ff6ed1fb_1326x728.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1326,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:364500,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/208887911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff42490fe-a21d-48c2-8588-a5b3ff6ed1fb_1326x728.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fm4M!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff42490fe-a21d-48c2-8588-a5b3ff6ed1fb_1326x728.png 424w, https://substackcdn.com/image/fetch/$s_!fm4M!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff42490fe-a21d-48c2-8588-a5b3ff6ed1fb_1326x728.png 848w, https://substackcdn.com/image/fetch/$s_!fm4M!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff42490fe-a21d-48c2-8588-a5b3ff6ed1fb_1326x728.png 1272w, https://substackcdn.com/image/fetch/$s_!fm4M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff42490fe-a21d-48c2-8588-a5b3ff6ed1fb_1326x728.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 2. Protein language models alone perform poorly in predicting novel function (Mg2+ import) in the protein DraNramp.</strong>  (A) Mutational variants scored highly by a pLM (ESM-1v), shown in green, do not enable Mg<sup>2+</sup> import. The gray dots represent all variants with measured data. Taken from Figure 4C of <a href="https://doi.org/10.64898/2026.06.10.731299">Berry et al.</a> (B) By contrast, some of the mutational variants scored highly by the difference between a PSSM and a pLM, shown in purple, do enable Mg<sup>2+</sup> import. Taken from Figure 5F of <a href="https://doi.org/10.64898/2026.06.10.731299">Berry et al.</a> Note that the y axis of panel A was accidentally mislabeled (Sam Berry, personal communication). Ignore the labeling.</figcaption></figure></div><p>What is going on here reminds me of the old Jesse Bloom work showing that function-enhancing mutations are often destabilizing to the protein, and therefore more stable proteins are better starting points for the discovery of beneficial mutations.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> Mutations proposed by pLMs are in effect mutations that predominantly maintain or increase protein stability. They fit perfectly into the provided sequence context. The flip-side of this constraint is that they are unlikely to lead to functional improvements. By contrast, the context-free, site-wise models simply propose mutations that are common; because these mutations were chosen without considering sequence context they may decrease proteins stability or otherwise mess things up. But this messing things up may be exactly what we need when we&#8217;re looking for new or improved function.</p><p>One aspect of the paper that I find unnecessarily confusing is that it conflates sequence context with function. Their Figure 6<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a> suggests that in natural sequences, we see different sequence contexts because they correspond to different functions.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a> Consequently, to sample mutations that enable these various functions, we need to somehow break out of the sequence context, and a context-free model does exactly that. The problem that I have with this explanation is that new-to-nature functions cannot be found among any of the natural sequences, by definition. And yet, the natural sequences may well contain mutations that, in the right context, can provide new-to-nature function. The DraNramp example highlights this possibility. Natural DraNramp variants cannot perform magnesium import.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-6" href="#footnote-6" target="_self">6</a> And yet, they contain mutations that, in the right context, can import magnesium.</p><p>In fact, we don&#8217;t need to assume different functions in natural sequences. We just need different sequence contexts, which arise for example because of covariation among sites that are in physical contact in the folded protein. We know that contacts create strong evolutionary constraints among sites, visible in covariation in multiple sequence alignments. These constraints are so strong that covariation can be used to identify physical contacts from multiple-sequence alignments. And pLMs have learned this covariation, which we can tell from the fact that we can also use them to infer contacts.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-7" href="#footnote-7" target="_self">7</a> In other words, pLMs are great at taking into account sequence context. They are literally trained to fill in the blanks given the surrounding context.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-8" href="#footnote-8" target="_self">8</a> Combine this with reasoning along the lines of Bloom et al., and we should not be surprised that pLMs have a tendency to propose the most conservative, stabilizing, function-preserving mutations, and this tendency goes exactly opposite to what we want when we&#8217;re looking for novel function.</p><p>Were does all of this leave us? First, the method proposed by Berry et al. is simple to implement. Anybody can use it. So that&#8217;s great, we have a new arrow in our quiver. Second, we&#8217;ve still only scratched the surface with respect to understanding what pLMs are actually good for. I have no doubt that they are an amazing tool that will have profound implications for the future of protein science. However, this does not mean that these models are currently used appropriately. Clearly, zero-shot predictions from pLMs are not that useful, in particular not if the goal is to find variants that provide novel function. But other pLM applications are totally legit, such as homology search or contact prediction. I&#8217;m looking forward to discovering more about how these models work.</p><h3><em>More from Genes, Minds, Machines</em></h3><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;9e262ef9-49b4-4076-9115-0a8a9ff063ba&quot;,&quot;caption&quot;:&quot;When you read papers about AI models for zero-shot fitness predictions, you generally get the sense that these predictions work quite well. Correlations between measured fitness effects and zero-shot predictions tend to be high. Systematic benchmarks have repeatedly shown this pattern, across hundred of datasets and many different models.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How useful are zero-shot predictions of mutational effects?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-07-13T12:27:16.832Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!R03W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a5d5a09-d3b7-418e-aaf4-c96a65ac8087_1574x1210.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/how-useful-are-zero-shot-predictions&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:206131112,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:15,&quot;comment_count&quot;:3,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;ff5c297b-8e22-4c97-ae9c-f55ce9d72fd1&quot;,&quot;caption&quot;:&quot;AI has gotten amazingly good for programming. Claude Sonnet will zero- or one-shot small programming tasks without mistakes. And while I don&#8217;t think AI is ready to replace software engineers outright, or that vibe coding a fully featured app is a good idea, for simple tasks AI is outstanding. For example, I can perform basic data analysis, maybe visuali&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;We still can&#8217;t predict much of anything in biology&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-10-07T12:27:22.966Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!02U1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F976b3f4b-b2b5-4389-8634-fb2d0227207b_5168x3448.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/we-still-cant-predict-much-of-anything&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:175321052,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:118,&quot;comment_count&quot;:20,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>S. P. Berry, R. Gaudet, D. S. Marks (2026). Differences between protein fitness models can be used to design variants of altered specificity. bioRxiv. <a href="https://doi.org/10.64898/2026.06.10.731299">doi:10.64898/2026.06.10.731299</a></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>The paper does not actually specify the direction of the difference. It just states that the best-performing models consider the difference between the PSSM and the pLM. However, I contacted the authors and asked, and they confirmed to me that the PSSM contributes positively and the pLM negatively.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>See <a href="https://doi.org/10.1073/pnas.0510098103">Bloom et al., PNAS 2006.</a></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>Reproduced here as Figure 1, but relabeled to remove the confusion.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>Berry et al. call them &#8220;substrates&#8221; in their paper.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-6" href="#footnote-anchor-6" class="footnote-number" contenteditable="false" target="_self">6</a><div class="footnote-content"><p>According to Sam Berry, there are natural DraNramp homologs that can import magnesium. So this example may not be entirely correct. However, he notes that the argument I make can be correct for other proteins, such as TEM-1. See his response in the comments.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-7" href="#footnote-anchor-7" class="footnote-number" contenteditable="false" target="_self">7</a><div class="footnote-content"><p>See <a href="https://doi.org/10.1073/pnas.2406285121">Zhang et al., PNAS 2024.</a></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-8" href="#footnote-anchor-8" class="footnote-number" contenteditable="false" target="_self">8</a><div class="footnote-content"><p>This is the standard pretraining objective of masked language modeling, where we mask parts of the sequence and train the model to predict what was masked. This training objective forces the model to pay attention to the sequence context and complete the masked parts accordingly. </p></div></div>]]></content:encoded></item><item><title><![CDATA[The error bar cargo cult]]></title><description><![CDATA[You don't need to understand error bars. You just need to draw them.]]></description><link>https://blog.genesmindsmachines.com/p/the-error-bar-cargo-cult</link><guid isPermaLink="false">https://blog.genesmindsmachines.com/p/the-error-bar-cargo-cult</guid><dc:creator><![CDATA[Claus Wilke]]></dc:creator><pubDate>Sun, 02 Aug 2026 16:35:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!UfLE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68246d0-83bd-429a-88eb-7908798e2a37_1032x834.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you&#8217;re an experimental scientist and you dare to visualize your results without showing error bars you&#8217;ll immediately get challenged. &#8220;Can you show some error bars please?&#8221; &#8220;Did you do any replicates?&#8221; &#8220;Is the result significant?&#8221; But add in error bars and the objections melt away. All is good in the world. World peace achieved. Children in Africa fed and clothed. The visual appearance of error bars calms people&#8217;s minds and assures them good science was done. Error bars are opium for the scientific mind.</p><p>The one thing you must never do is ask what the error bars actually represent. There be dragons. Ask five different scientists what quantity you should use to generate the error bars and you&#8217;ll get five different answers: Plot the standard deviation; plot the standard error; plot the 95% confidence interval; plot the range; perform a Bayesian analysis and plot the 95% credible interval. The list of possibilities goes on and on.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UfLE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68246d0-83bd-429a-88eb-7908798e2a37_1032x834.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UfLE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68246d0-83bd-429a-88eb-7908798e2a37_1032x834.png 424w, https://substackcdn.com/image/fetch/$s_!UfLE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68246d0-83bd-429a-88eb-7908798e2a37_1032x834.png 848w, https://substackcdn.com/image/fetch/$s_!UfLE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68246d0-83bd-429a-88eb-7908798e2a37_1032x834.png 1272w, https://substackcdn.com/image/fetch/$s_!UfLE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68246d0-83bd-429a-88eb-7908798e2a37_1032x834.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UfLE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68246d0-83bd-429a-88eb-7908798e2a37_1032x834.png" width="493" height="398.41279069767444" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b68246d0-83bd-429a-88eb-7908798e2a37_1032x834.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:834,&quot;width&quot;:1032,&quot;resizeWidth&quot;:493,&quot;bytes&quot;:537815,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/209390904?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68246d0-83bd-429a-88eb-7908798e2a37_1032x834.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UfLE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68246d0-83bd-429a-88eb-7908798e2a37_1032x834.png 424w, https://substackcdn.com/image/fetch/$s_!UfLE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68246d0-83bd-429a-88eb-7908798e2a37_1032x834.png 848w, https://substackcdn.com/image/fetch/$s_!UfLE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68246d0-83bd-429a-88eb-7908798e2a37_1032x834.png 1272w, https://substackcdn.com/image/fetch/$s_!UfLE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68246d0-83bd-429a-88eb-7908798e2a37_1032x834.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">While some people do understand error bars, nobody understands confidence bands on non-linear fits. But they look cool. <a href="https://doi.org/10.1371/journal.pcbi.1012824">Figure source.</a></figcaption></figure></div><p>The dirty truth of error bars is there is no generally accepted quantity they should represent. You can plot whatever you want. I personally think that the standard error is the right choice, but I&#8217;ve been in this business long enough to know that what I think is irrelevant. Plenty of people do not plot the standard error, or would be hard pressed to even explain what the standard error is. If you see error bars and you think &#8220;standard error&#8221; you&#8217;ve spent too much time in stats class and not enough time in the real world. People chose an experimental science because they weren&#8217;t that excited about stats. Do you really expect them to remember the definition of the standard error?<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></p><p>The most common mistake I see is people plot the standard deviation instead of the standard error. How is this a mistake, when I just said &#8220;you can plot whatever you want&#8221;? It&#8217;s a mistake in the sense that standard deviation does not represent an error. So if you intend to show an error, and you plot the standard deviation, you have not achieved your stated goal. It&#8217;s shocking how often I&#8217;ve talked to even senior scientists who were confused about this topic. These days, if somebody is not a professional statistician, I&#8217;ll just assume they don&#8217;t know the difference between standard deviation and standard error.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p><p>But even if people do understand that plotting the standard deviation is not a good idea, they may plot something other than the standard error. The most common reasonable choice is to plot a confidence interval instead of the standard error. But then of course one has to pick the confidence level, and while 95% is probably the most common one others can be used and are valid.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> In general, because there are so many possibilities of what error bars can represent, any visualization with error bars should always be accompanied by a statement of what quantity is shown. So pay attention to the literature you read. Do the authors specify what they are plotting as error bars? In my experience, in the vast majority of cases they don&#8217;t, and nobody asks. It&#8217;s a cargo cult. The field wants to see error bars, but it&#8217;s comfortable not knowing how they were generated or what they mean.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/the-error-bar-cargo-cult?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/the-error-bar-cargo-cult?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.genesmindsmachines.com/p/the-error-bar-cargo-cult?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><div><hr></div><p>Now lets talk for a moment about curve fits, and in particular about non-linear curve fits, where the conventional visualization employs a confidence band to show uncertainty. Everybody makes them. You can see these visualizations all over the place.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a> But have you ever stopped to ponder what they mean? I am quite confident that there are very few people who can correctly explain what the confidence band of a non-linear curve fit represents.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a></p><p>Let&#8217;s proceed step by step. First we consider a linear curve fit. There, the confidence band takes on the characteristic shape of an hourglass. This shape arises because both the slope and the intercept of the line have an error. You have to imagine the curve both moving up and down and rotating, and that combined movement sweeps out an hourglass.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-6" href="#footnote-6" target="_self">6</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!i2Dt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc2bc789-7aaa-4f4d-8ed1-f0dd6ca0e3c1_1800x1350.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!i2Dt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc2bc789-7aaa-4f4d-8ed1-f0dd6ca0e3c1_1800x1350.gif 424w, https://substackcdn.com/image/fetch/$s_!i2Dt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc2bc789-7aaa-4f4d-8ed1-f0dd6ca0e3c1_1800x1350.gif 848w, https://substackcdn.com/image/fetch/$s_!i2Dt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc2bc789-7aaa-4f4d-8ed1-f0dd6ca0e3c1_1800x1350.gif 1272w, https://substackcdn.com/image/fetch/$s_!i2Dt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc2bc789-7aaa-4f4d-8ed1-f0dd6ca0e3c1_1800x1350.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!i2Dt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc2bc789-7aaa-4f4d-8ed1-f0dd6ca0e3c1_1800x1350.gif" width="636" height="477" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc2bc789-7aaa-4f4d-8ed1-f0dd6ca0e3c1_1800x1350.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:636,&quot;bytes&quot;:450736,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/209390904?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc2bc789-7aaa-4f4d-8ed1-f0dd6ca0e3c1_1800x1350.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!i2Dt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc2bc789-7aaa-4f4d-8ed1-f0dd6ca0e3c1_1800x1350.gif 424w, https://substackcdn.com/image/fetch/$s_!i2Dt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc2bc789-7aaa-4f4d-8ed1-f0dd6ca0e3c1_1800x1350.gif 848w, https://substackcdn.com/image/fetch/$s_!i2Dt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc2bc789-7aaa-4f4d-8ed1-f0dd6ca0e3c1_1800x1350.gif 1272w, https://substackcdn.com/image/fetch/$s_!i2Dt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc2bc789-7aaa-4f4d-8ed1-f0dd6ca0e3c1_1800x1350.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Relationship between body mass and head length in blue jay birds. Each dot is one bird. The relationship is approximately linear.</figcaption></figure></div><p>For a non-linear fit, the intuition gained from linear fits is not that useful. While the mathematics of linear and non-linear confidence bands is the same, the visual effect is completely different. Mathematically, every parameter in the fit has an error, and to explore the error surface means to find all the parameter combinations that have high probability density. Then you calculate where these parameter combinations place the response variable as a function of the predictor, and the boundary of that region defines the confidence band. This is the same for linear and non-linear fits. Because a linear fit never changes shape (it&#8217;s always a straight line), for linear fits we only have to imagine the line moving up and down and rotating. But for non-linear fits, as you change multiple parameters the shape of the curve changes as well, not just the location, and so the curve wiggles around as it sweeps out the confidence band.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Gs-S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a7ce8c9-ed3d-44c7-a1c7-b2f60dbff059_1800x1350.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gs-S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a7ce8c9-ed3d-44c7-a1c7-b2f60dbff059_1800x1350.gif 424w, https://substackcdn.com/image/fetch/$s_!Gs-S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a7ce8c9-ed3d-44c7-a1c7-b2f60dbff059_1800x1350.gif 848w, https://substackcdn.com/image/fetch/$s_!Gs-S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a7ce8c9-ed3d-44c7-a1c7-b2f60dbff059_1800x1350.gif 1272w, https://substackcdn.com/image/fetch/$s_!Gs-S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a7ce8c9-ed3d-44c7-a1c7-b2f60dbff059_1800x1350.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gs-S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a7ce8c9-ed3d-44c7-a1c7-b2f60dbff059_1800x1350.gif" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8a7ce8c9-ed3d-44c7-a1c7-b2f60dbff059_1800x1350.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:640,&quot;bytes&quot;:587530,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/209390904?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a7ce8c9-ed3d-44c7-a1c7-b2f60dbff059_1800x1350.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Gs-S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a7ce8c9-ed3d-44c7-a1c7-b2f60dbff059_1800x1350.gif 424w, https://substackcdn.com/image/fetch/$s_!Gs-S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a7ce8c9-ed3d-44c7-a1c7-b2f60dbff059_1800x1350.gif 848w, https://substackcdn.com/image/fetch/$s_!Gs-S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a7ce8c9-ed3d-44c7-a1c7-b2f60dbff059_1800x1350.gif 1272w, https://substackcdn.com/image/fetch/$s_!Gs-S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a7ce8c9-ed3d-44c7-a1c7-b2f60dbff059_1800x1350.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Relationship between fuel efficiency and displacement in cars. Cars with larger displacement have lower fuel efficiency, but the relationship is non-linear.</figcaption></figure></div><p>The consequence is that individual fits are much more wiggly than the confidence band suggests. The confidence band tells you that the fit would likely run somewhere in this region, but it doesn&#8217;t tell you what kind of path it would take. I have explained this hundreds of times and I still don&#8217;t quite know what to make of it. I usually tell people to not plot confidence bands on non-linear curve fits.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-7" href="#footnote-7" target="_self">7</a></p><p>In summary, while I&#8217;m not arguing that error bars don&#8217;t matter, I do think they are taken too seriously. There are occasions where not plotting error bars or confidence bands is a perfectly reasonable choice to reduce visual clutter. Either way, when you plot error bars make sure you always specify what they represent, and when you review other people&#8217;s work check whether they report what they are plotting. Finally, pay attention to whether people are confusing standard deviation and standard error, and if they do gently explain to them what a sampling distribution is.</p><h3><em>More from Genes, Minds, Machines</em></h3><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;e094b522-d204-4d0f-9a81-32e9f6dbdcad&quot;,&quot;caption&quot;:&quot;My recent post about random seeds generated extensive discussions about best practices in random number generation. This is great. The more people are aware of the unexpected pitfalls the better. However, I received some pushback I found rather surprising. More than one person, and mostly people with extensive training in statistics, strongly argued tha&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Random seeds and brown M&amp;Ms&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-10-23T16:46:19.213Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!RXz5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45664dcc-2533-425e-aca0-b70ebecfd810_5548x3470.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/random-seeds-and-brown-m-and-ms&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:176897380,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:17,&quot;comment_count&quot;:2,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;08fb2550-41ef-4c2f-93b1-26c20228e9f3&quot;,&quot;caption&quot;:&quot;This is Part 2 of my series on the limitations of Python as a language for data science. You can find Part 1 here. Please read it first if you haven&#8217;t done so yet. It provides important context.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Python is not a great language for data science. Part 2: Language features&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-11-17T13:11:56.053Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!xy4c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a222184-d492-4dc4-b5ca-6348c768319a_14467x9744.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/python-is-not-a-great-language-for-2e0&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:178823064,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:35,&quot;comment_count&quot;:17,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>I know, many working scientists do actually understand what a standard error is. But also, I&#8217;ve seen enough confusion about basic concepts of statistics that I don&#8217;t think we can just assume people have a complete grasp of them.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>These topics are covered in introductory stats classes and books, so in theory everybody should know them. If you are feeling a bit unsure about the difference between standard deviation and standard error, you can read <a href="https://clauswilke.com/dataviz/visualizing-uncertainty.html#visualizing-the-uncertainty-of-point-estimates">the chapter on the topic in my data visualization book.</a></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>For example, plotting the standard error is in essence the same as plotting a 68% confidence interval, and we just discussed that plotting the standard error is fine.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>See for example the figure at the beginning of this post.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>Honestly, I&#8217;m not entirely sure I can.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-6" href="#footnote-anchor-6" class="footnote-number" contenteditable="false" target="_self">6</a><div class="footnote-content"><p>If you&#8217;d like to know how I made these animations, you can <a href="https://wilkelab.org/dataviz_shortcourse/materials/2024-06-27-solutions.html#hypothetical-outcome-plots">find relevant code here.</a></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-7" href="#footnote-anchor-7" class="footnote-number" contenteditable="false" target="_self">7</a><div class="footnote-content"><p>And if you&#8217;re showing multiple curve fits in the same plot the confidence bands truly become just noise.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Nene Royal—A generational talent]]></title><description><![CDATA[The kids in Thailand are alright.]]></description><link>https://blog.genesmindsmachines.com/p/nene-royala-generational-talent</link><guid isPermaLink="false">https://blog.genesmindsmachines.com/p/nene-royala-generational-talent</guid><dc:creator><![CDATA[Claus Wilke]]></dc:creator><pubDate>Thu, 30 Jul 2026 12:17:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/TKgAas-84D0" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The people of the internet are losing their mind over a 16 year-old girl from Thailand, Nene Royal, whose audition for America&#8217;s Got Talent was aired on July 7, 2026. If I told you a meek young girl from Thailand wowed the audience by singing and playing the guitar, you would probably picture a girl singing with an angelic voice and strumming along on her acoustic guitar. Well, Nene Royal&#8217;s performance is as distant from that picture as is humanly possible while still being a girl playing the guitar. If you haven&#8217;t seen the AGT audition, check it out before reading any further. Honestly, do it. It&#8217;s only three minutes. (You can skip the last two minutes, which are the judges&#8217; comments. Also, you can start at 1:15 if you want to fast forward past the introduction.)</p><div id="youtube2-TKgAas-84D0" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;TKgAas-84D0&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/TKgAas-84D0?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Since I am also a person of the internet, I am also losing my mind. Who is Nene Royal? Her guitar playing is next level,<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> and her singing is outstanding. How can she be so good, at such a young age? Is she some sort of genetically engineered child prodigy daughter of music professors who coached her since she was a toddler?And why did nobody know about her before her AGT performance? Walking onto the stage, she looks so meek and reserved, but then she transforms into a complete rockstar. How is this possible?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Here, I&#8217;ll try to answer these questions. Let&#8217;s start with the third one, her family background. Surprisingly, nobody in her family is a musician. She started playing the guitar at age 7 because at school, by accident, she ended up in a music club. She originally wanted to register for the computer club but on the day of registration she overslept and arrived late. So her desired club was already full and the only remaining option was music. She signed up for that club even though she didn&#8217;t know anything about music at all. Then she needed to pick an instrument, and the only option left was guitar. So that&#8217;s what she chose.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p><p>Next she needed to buy a guitar. Neither she nor her father knew anything about guitars. They were told it had to be an acoustic guitar but they had no idea what that meant. Her father says he didn&#8217;t know what the difference was between an acoustic and an electric guitar, nor where to buy one.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> He eventually bought a cheap acoustic guitar for 1000 baht (roughly $30) at a store that sold school supplies. But this was good enough to get started, and Nene fell in love with playing the guitar and making music.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a></p><p>Now let&#8217;s talk about her stage presence. You can see in the AGT performance that she interacts with the audience as if she had done this a thousand times. And the truth is she has. Nene&#8217;s family is not rich, and her parents couldn&#8217;t afford buying her expensive instruments or paying for music instruction. Her father came up with a solution: Nene could work for tips as a street performer. She started doing this when she was only 9 years old, and she has continued doing this ever since (with a brief interruption during COVID). For years now she performs 2&#8211;3 times a week at a market in Phuket, Thailand. She must have close to a thousand shows under her belt in front of a live audience. And these shows are long, 90 minutes or more at a time. This is the experience level of a seasoned, professional musician. It&#8217;s not surprising that she&#8217;s so comfortable on stage and knows how to work a crowd. By the way, many of her shows are streamed on YouTube. Here is an example from December 2023:</p><div id="youtube2-f45QxVavay8" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;f45QxVavay8&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/f45QxVavay8?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>This brings us to the question of how come nobody knew about her before AGT? Well obviously, that&#8217;s not true. As far as I can tell, she had a few hundred thousand subscribers on YouTube before her AGT performance. Also, on YouTube you can find <a href="https://www.youtube.com/watch?v=_onwwZh8Ptg">older interviews with her</a> and <a href="https://www.youtube.com/watch?v=kCPvWwte0W4">reactions to her videos that predate AGT</a>.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a> Notably, Brian May, the guitarist of Queen, <a href="https://www.youtube.com/shorts/KiVSh6sBFFA">praised her cover of Bohemian Rhapsody in early 2026.</a> Between <a href="https://www.youtube.com/@neneroyalmusic/videos">her own YouTube channel</a> and <a href="https://www.youtube.com/@OZONEBandFC">the channel of her band Ozone,</a> there are almost 2000 videos of her on YouTube, and her channel has an accumulated 265 million views. But the world is a large place, and somebody can be known to hundreds of thousands or even millions of people and still be rather obscure on the global stage.</p><p>Finally, how can she be so good, in particular at such a young age? Honestly, that&#8217;s the point where the explanations fail. It simply shouldn&#8217;t be possible. The best explanation I can give is she&#8217;s a once-in-a-generation talent combined with exceptional work ethic and a supportive family. Music is complicated. It usually takes a decade or more of dedicated practice under the guidance of an experienced teacher to become a world-class musician. Normally, when you see a musical child prodigy, they come from a family of musicians and have had the most sophisticated musical instruction from the moment they could walk. The fact that Nene does not have this background, and is mostly self-taught from watching YouTube, is just mind-blowing.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-6" href="#footnote-6" target="_self">6</a></p><p>And the speed at which she developed her capabilities is simply beyond comprehension. She got her first electric guitar at the age of 9, and by age 10 she was already playing some of the most difficult songs, songs that for many guitar players remain permanently aspirational. And not only did she play those songs, she totally owned them. Check out the video below, where she&#8217;s &#8220;just practising.&#8221; The song is <a href="https://www.youtube.com/watch?v=ySdLh_B3HjA">Through the Fire and Flames by DragonForce,</a> deliberately written to be difficult to play. A 10-year old should not be able to play like this.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-7" href="#footnote-7" target="_self">7</a> At that age, they lack the precision of movement, the strength, even just the hand size, to play at such an advanced level. And yet she plays it with ease. Her timing is spot on, her sound is amazing, and she doesn&#8217;t seem to struggle in any way.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-8" href="#footnote-8" target="_self">8</a></p><div id="youtube2-zunm1YIdYnY" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;zunm1YIdYnY&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/zunm1YIdYnY?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>So clearly, she has a special talent, not just a special mind for music but also exceptional bilateral coordination, the strength and dexterity required to play extremely difficult guitar parts, and exceptional fine motor skills to be able to play at high speed in time and with great sound. Normally, when you hear children play, even talented children with good coaching, their play has a certain child-like quality that they eventually grow out of. It appears Nene had grown out of this by age ten.</p><p>While most of the videos of her show her covering well-known hits, Nene has also started to write her own pieces. There is an instrumental of hers called &#8220;Real Verse.&#8221; With this piece she again demonstrates she&#8217;s an absolute master of the electric guitar. I&#8217;m looking forward to more of her original compositions, which will certainly be forthcoming.</p><div id="youtube2-0_d4Okk3RoU" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;0_d4Okk3RoU&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/0_d4Okk3RoU?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>If you&#8217;ve made it this far you may wonder whether all she can play is metal. The answer is no. She has amazing breadth. Check out her video covering &#8220;Married to the blues&#8221; for great soulful blues singing (and guitar playing, obviously). There are also videos of <a href="https://www.youtube.com/watch?v=hD8s1wOb4bA">her singing Billie Eilish.</a> Oh, by the way, when she performs that song she plays the piano&#8230;</p><div id="youtube2-Jt21vlfktL0" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;Jt21vlfktL0&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/Jt21vlfktL0?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Throughout this post, I have drawn heavily from a podcast interview with Nene and her father. The interview is in Thai but English subtitles are available.</p><div id="youtube2-EVxYUEtlf_o" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;EVxYUEtlf_o&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/EVxYUEtlf_o?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>This was an unusual post for this blog. I&#8217;m sorry, I got carried away and spent way too much time the last week watching Nene Royal videos. I post about what I find interesting, and I get interested by weird stuff.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-9" href="#footnote-9" target="_self">9</a> There&#8217;ll be more biology and AI soon.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>You can&#8217;t necessarily tell from this 90 second clip, but watch some more of her playing and you&#8217;ll see how good of a guitar player she is. You could put her on stage with the biggest bands in the world and she&#8217;d fit right in as the lead guitarist.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>For my sourcing throughout much of this post, see the interview with Nene that I linked to at the end of the post.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>In the interview from which I&#8217;m pulling all this, Nene&#8217;s father says they didn&#8217;t start from zero, they started from below zero.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>Funnily enough, the very first song she learned was Zombie, the song she performed for AGT.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>The reaction I linked to here is an interesting case because technically it was posted after her AGT performance, on July 12, 2026, but the person making the video clearly did not know anything about the AGT performance at that time.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-6" href="#footnote-anchor-6" class="footnote-number" contenteditable="false" target="_self">6</a><div class="footnote-content"><p>And at the same time, it shows how much you can learn from YouTube when you use it responsibly.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-7" href="#footnote-anchor-7" class="footnote-number" contenteditable="false" target="_self">7</a><div class="footnote-content"><p>Two years later <a href="https://www.youtube.com/watch?v=5cFS1p6nTYQ">she recorded a version with vocals.</a> &#129327; If you want to see her play this live, <a href="https://www.youtube.com/live/f45QxVavay8?si=a9MCM9p74Ym3KiIu&amp;t=3290">go to 54:50 of the live market performance</a> I posted above.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-8" href="#footnote-anchor-8" class="footnote-number" contenteditable="false" target="_self">8</a><div class="footnote-content"><p>The part where she puts her left hand upside-down on the fret board is to imitate Herman Li from DragonForce who plays it the same way. </p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-9" href="#footnote-anchor-9" class="footnote-number" contenteditable="false" target="_self">9</a><div class="footnote-content"><p>Don&#8217;t get me started on Polyphia or Angine de Poitrine.</p></div></div>]]></content:encoded></item><item><title><![CDATA[If the work is good why does it need a story?]]></title><description><![CDATA[I thought we do science here, not fiction or romance]]></description><link>https://blog.genesmindsmachines.com/p/if-the-work-is-good-why-does-it-need</link><guid isPermaLink="false">https://blog.genesmindsmachines.com/p/if-the-work-is-good-why-does-it-need</guid><dc:creator><![CDATA[Claus Wilke]]></dc:creator><pubDate>Tue, 21 Jul 2026 12:43:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_tNr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d160ce-e5a4-433d-a32c-e8f8d03ff851_2400x1600.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I recently wrote about how to present research or other technical work <a href="https://blog.genesmindsmachines.com/p/tell-a-story-is-not-helpful-advice">by telling a story.</a> This is a topic dear to my heart. I teach this material in my undergraduate and graduate classes, and I have given countless presentations on the topic. So I&#8217;m quite familiar with common pushback. It usually runs along two themes: (i) We&#8217;re doing research. It has nothing to do with emotions. Why do you go on and on about eliciting emotional responses?<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> (ii) Storytelling is just about manipulating the audience, convincing them of something that isn&#8217;t true, or otherwise misleading them about the facts. Real scientists don&#8217;t tell stories, they report the truth.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_tNr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d160ce-e5a4-433d-a32c-e8f8d03ff851_2400x1600.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_tNr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d160ce-e5a4-433d-a32c-e8f8d03ff851_2400x1600.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_tNr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d160ce-e5a4-433d-a32c-e8f8d03ff851_2400x1600.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_tNr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d160ce-e5a4-433d-a32c-e8f8d03ff851_2400x1600.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_tNr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d160ce-e5a4-433d-a32c-e8f8d03ff851_2400x1600.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_tNr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d160ce-e5a4-433d-a32c-e8f8d03ff851_2400x1600.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/98d160ce-e5a4-433d-a32c-e8f8d03ff851_2400x1600.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:398887,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/207062844?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d160ce-e5a4-433d-a32c-e8f8d03ff851_2400x1600.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_tNr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d160ce-e5a4-433d-a32c-e8f8d03ff851_2400x1600.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_tNr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d160ce-e5a4-433d-a32c-e8f8d03ff851_2400x1600.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_tNr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d160ce-e5a4-433d-a32c-e8f8d03ff851_2400x1600.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_tNr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d160ce-e5a4-433d-a32c-e8f8d03ff851_2400x1600.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@tengyart?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">&#1054;&#1083;&#1077;&#1075; &#1052;&#1086;&#1088;&#1086;&#1079;</a> on <a href="https://unsplash.com/photos/orange-and-white-egg-on-stainless-steel-rack-auEPahZjT40?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></figcaption></figure></div><p>I believe both of these responses are misguided. But also, they highlight how important it is to cover this material in detail. The average student in math, computer science, physics, biology, or engineering is never going to learn about storytelling, and yet we expect them to give presentations that somehow do not put the audience to sleep. I care deeply about this topic because I&#8217;ve sat through too many boring presentations. And it&#8217;s particularly frustrating when the presenter has good material in principle but just totally messes up the presentation. That&#8217;s why I keep writing about this topic. If only one person gives better presentations after reading one of my posts I have had a positive impact in the world.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Emotions</h2><p>Let&#8217;s start with emotions. Why should you care about the emotional state of your audience? You&#8217;re talking about facts, logic, observations. None of this has anything to do with emotions. So it&#8217;s not something you have to think about, right?</p><p>This is one of the most common misconceptions by people working in technical fields. In fact, even if they&#8217;re not consciously aware of it, technical people routinely take actions based on their emotions. And then they employ logic to justify retroactively why they did what they did. Let me provide an example where emotions unexpectedly crop up. If you&#8217;re a scientist, you&#8217;ve probably had a grant proposal rejected. If so, I bet the rejection contained the following sentence: &#8220;There was low enthusiasm because of X, Y, and Z.&#8221;<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> This is a statement about an emotion. Enthusiasm is an emotion.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a> I don&#8217;t know about you, but I want enthusiasm in my audience. I want them to jump out of their seats and scream &#8220;Yes, YES, this, more of this!&#8221;<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a> And to get this reaction, just logic and facts won&#8217;t cut it. We have to reach deeper.</p><p>As another example, let&#8217;s assume you&#8217;re giving a presentation. Your audience will always feel some emotions, regardless of what you say or do.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-6" href="#footnote-6" target="_self">6</a> To start out, they will bring some emotional baseline into the room. Maybe they are happy because earlier in the day they experienced a major success. Or they are sad or anxious because a loved one has fallen ill. Or they are bored because their job isn&#8217;t meaningful to them and they feel they&#8217;re just sitting around wasting their time. Whatever their baseline, it will influence how they perceive your talk. So you have two options: You can either try to control their emotional state and guide them to a point where you would like them to be, or you can leave it up to them to experience whatever they feel in response to what you&#8217;re saying. To me, the second option is equivalent to saying that if people are bored out of their mind it&#8217;s their fault for not appreciating your intellect.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-7" href="#footnote-7" target="_self">7</a> I would not recommend adopting this attitude, but you do you.</p><h2>Storytelling</h2><p>Now why should you care about storytelling? You should care because it&#8217;s your primary method of influencing your audience&#8217;s emotional state. The story arc is what enables you to take your audience from wherever they are at the beginning and guide them towards the emotional state you want. The better of a storyteller you are, the further you can move your audience. People enjoy a good story exactly because it allows them to forget their own emotional baseline for a moment.</p><p>But what about the concerns that storytelling is equivalent to manipulating the audience or making things up, just to tell a story? First, I never said you should make things up. I said a story is <a href="https://open.substack.com/pub/clauswilke/p/tell-a-story-is-not-helpful-advice?r=125478&amp;selection=218e6c4a-0e26-4935-9e7e-d62a08ef5616&amp;utm_campaign=post-share-selection&amp;utm_medium=web&amp;aspectRatio=instagram&amp;textColor=%23ffffff">&#8220;a collection of observations, facts, or events presented in a specific order such that they create an emotional reaction.&#8221;</a> None of the observations, facts, or events should be made up, unless you&#8217;re explicitly presenting fiction. I&#8217;m not asking you to say anything that isn&#8217;t true. Neither am I asking you to just bend the truth a bit. I&#8217;m simply encouraging you to present your material in such a way that your audience can connect with it.</p><p>Second, yes, a good storyteller can manipulate their audience, but doing so is a conscious choice, not an unavoidable consequence of telling a story. Any useful skill can be used for malicious purposes. That is not an argument against developing new skills. Imagine you were telling me you are learning how to cook and my response was that most good-tasting recipes contain too much fat and sugar and people who cook well just want their family to get fat. Would you find that convincing? Or would you maybe object that the better you can cook the more you can prepare healthy meals that keep your family fit? It&#8217;s the same with storytelling. If you know how stories are constructed and why they work, you can tell an exciting story that does not manipulate your audience. And as a bonus, you will also get better at recognizing when somebody else is trying to manipulate you.</p><h2>Summary</h2><p>Regardless of how interesting and logically sound your work is, you will have to craft it into an engaging story if you want to reach a larger audience. The purpose of storytelling is not to manipulate. It is to overcome your audience&#8217;s inertia, most importantly boredom and disinterest. If your audience is bored, they won&#8217;t put in the effort to discover why what you&#8217;re doing is actually interesting. They simply won&#8217;t care. So, you have to do everything you can to make them care. And that will in general involve telling an interesting story.</p><h3><em>More from Genes, Minds, Machines</em></h3><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;d8b75ab0-37a3-4a82-9514-35a878a903fe&quot;,&quot;caption&quot;:&quot;Your slides are not your talk. A strong speaker can take almost any slides and turn them into an engaging presentation. In fact, a strong speaker can hold an audience enthralled without any slides at all. And yet, slide design matters. Bad slides can get in the way of giving a good talk, and excellent slides can elevate your presentation. Also, importan&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Slides that present themselves: The assertion&#8211;evidence approach&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-08-15T11:01:17.611Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!kdHh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8503f1d-a3f0-49fc-9a06-18bdbf6f3c9f_4100x2350.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/slides-that-present-themselves-the&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:170200603,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:51,&quot;comment_count&quot;:7,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;a5c3d8f0-8376-416b-8ea0-2a0ac3553cd0&quot;,&quot;caption&quot;:&quot;To give a successful presentation, you have to have memorized the entire sequence of slides you will be using. At no time should you be confused about what slides come next or what the purpose of a slide is when you pull it up. You probably have seen presentations where the speaker advances to a slide only to appear stumped and confused about why it is &#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Practice the presentation speedrun&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-07-05T12:43:04.615Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!vHKQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc86f0679-772d-46f1-9f86-91b4286fce19_6448x3627.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/practice-the-presentation-speedrun&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:167013046,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:46,&quot;comment_count&quot;:2,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>This theme is brought up <a href="https://blog.genesmindsmachines.com/p/tell-a-story-is-not-helpful-advice/comment/289232183">in this comment</a> on my prior article.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>This theme is brought up <a href="https://blog.genesmindsmachines.com/p/tell-a-story-is-not-helpful-advice/comment/291675365">in this comment</a> on my prior article.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>Grant rejections are always blamed on low enthusiasm. Because in the end, enthusiasm is the only thing that matters. If your reviewers are excited about your proposal, it will get funded, regardless of whatever major logical gaps your proposal narrative contains. In fact, if reviewers are enthusiastic, gaps are &#8220;minor issues the PI certainly can work out.&#8221; If reviewers are not enthusiastic, gaps are &#8220;critical flaws that invalidate the entire proposal.&#8221; The enthusiasm drives how reviewers perceive the gaps. It&#8217;s not the other way round.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>See for example <a href="https://doi.org/10.1080/02699931.2024.2430399">this study</a> in the scientific journal <em>Cognition and Emotion.</em></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>I&#8217;m not claiming I routinely achieve this goal. I&#8217;m just stating what I want.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-6" href="#footnote-anchor-6" class="footnote-number" contenteditable="false" target="_self">6</a><div class="footnote-content"><p>A small fraction of people may truly feel no emotions, but such people are never going to be the majority of your audience. And to the extent they are in your audience, they will likely have severe depression or PTSD and you may have difficult reaching them anyways.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-7" href="#footnote-anchor-7" class="footnote-number" contenteditable="false" target="_self">7</a><div class="footnote-content"><p>Remember, boredom is an emotion. If you don&#8217;t elicit a specific emotional response in your audience, they are free to experience any emotion, including boredom.</p></div></div>]]></content:encoded></item><item><title><![CDATA[How useful are zero-shot predictions of mutational effects?]]></title><description><![CDATA[Zero-shot predictions are great, except for when it matters]]></description><link>https://blog.genesmindsmachines.com/p/how-useful-are-zero-shot-predictions</link><guid isPermaLink="false">https://blog.genesmindsmachines.com/p/how-useful-are-zero-shot-predictions</guid><dc:creator><![CDATA[Claus Wilke]]></dc:creator><pubDate>Mon, 13 Jul 2026 12:27:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R03W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a5d5a09-d3b7-418e-aaf4-c96a65ac8087_1574x1210.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When you read papers about AI models for zero-shot fitness predictions,<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> you generally get the sense that these predictions work quite well. Correlations between measured fitness effects and zero-shot predictions tend to be high. Systematic benchmarks have repeatedly shown this pattern, across hundred of datasets and many different models.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> And yet, when you talk to an actual protein engineer, somebody who is trying to improve proteins by making specific mutations, they will often tell you that zero-shot predictions are not that useful. Many protein engineers have stories of taking the best available zero-shot model, the one that wins all the competitions, predicting mutations for their pet protein, making the mutations, and then not seeing much improvement in their system. Something doesn&#8217;t add up.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!R03W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a5d5a09-d3b7-418e-aaf4-c96a65ac8087_1574x1210.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R03W!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a5d5a09-d3b7-418e-aaf4-c96a65ac8087_1574x1210.png 424w, https://substackcdn.com/image/fetch/$s_!R03W!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a5d5a09-d3b7-418e-aaf4-c96a65ac8087_1574x1210.png 848w, https://substackcdn.com/image/fetch/$s_!R03W!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a5d5a09-d3b7-418e-aaf4-c96a65ac8087_1574x1210.png 1272w, https://substackcdn.com/image/fetch/$s_!R03W!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a5d5a09-d3b7-418e-aaf4-c96a65ac8087_1574x1210.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!R03W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a5d5a09-d3b7-418e-aaf4-c96a65ac8087_1574x1210.png" width="530" height="407.3282967032967" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6a5d5a09-d3b7-418e-aaf4-c96a65ac8087_1574x1210.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1119,&quot;width&quot;:1456,&quot;resizeWidth&quot;:530,&quot;bytes&quot;:425139,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/206131112?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a5d5a09-d3b7-418e-aaf4-c96a65ac8087_1574x1210.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!R03W!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a5d5a09-d3b7-418e-aaf4-c96a65ac8087_1574x1210.png 424w, https://substackcdn.com/image/fetch/$s_!R03W!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a5d5a09-d3b7-418e-aaf4-c96a65ac8087_1574x1210.png 848w, https://substackcdn.com/image/fetch/$s_!R03W!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a5d5a09-d3b7-418e-aaf4-c96a65ac8087_1574x1210.png 1272w, https://substackcdn.com/image/fetch/$s_!R03W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a5d5a09-d3b7-418e-aaf4-c96a65ac8087_1574x1210.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 1. Zero-shot predictions cannot simultaneously represent multiple dimensions of a protein&#8217;s fitness landscape. A mutation that increases stability may decrease fitness and vice versa. Zero-shot prediction cannot capture these conflicting constraints. Illustration by <a href="https://substack.com/@aaronfeller">Aaron Feller.</a> From <a href="https://www.biorxiv.org/content/10.64898/2026.06.04.730121">Woolley et al. 2026.</a></figcaption></figure></div><p>In a recent preprint from my lab (<a href="https://www.biorxiv.org/content/10.64898/2026.06.04.730121">Woolley et al. 2026</a>), we provide a potential explanation. Most importantly, zero-shot predictions have a conceptual limitation that I don&#8217;t commonly see acknowledged: Zero-shot predictions cannot simultaneously capture multiple dimensions of a protein&#8217;s fitness landscape (Figure 1). By definition, a zero-shot prediction is a single prediction (&#8220;make this mutation at this site&#8221;), regardless of the phenotype of interest. But what if a mutation improves one phenotype and worsens another? For example, a mutation could increase enzymatic activity and decrease stability. Such a mutation might be exactly what you need if you&#8217;re interested in increasing enzymatic activity, but it would be counterproductive if you&#8217;re instead interested in increasing stability. Zero-shot predictions do not know what you&#8217;re interested in. They just make a guess and hope it&#8217;s right. And often it&#8217;s not.</p><p>I want to emphasize that this limitation of zero-shot predictions is fundamental. It applies to any possible model. Often in machine learning and AI, when model predictions aren&#8217;t good enough, we immediately blame the model. &#8220;Predictions from this model aren&#8217;t that great,&#8221; we may say, &#8220;but surely we can train a better model that will have the performance we need.&#8221; In fact, this reasoning is one of the motivators for large-scale benchmarking projects such as the <a href="https://proteingym.org/">ProteinGym.</a> If poor performance was primarily due to models being bad, then it&#8217;d makes sense to benchmark all the available models and try to find the best one. Unfortunately, when you&#8217;re dealing with a fundamental limitation that equally applies to all models, even the best ones won&#8217;t be that great. And in fact, we have found that the available models all perform roughly equally well, and that there is more variation among datasets within models than there is between models (<a href="https://www.biorxiv.org/content/10.64898/2026.06.04.730121">Woolley et al. 2026</a>). In other words, whether a zero-shot model works well with your specific system of interest is mostly due to chance. It may work great, or it may not work at all. It&#8217;s difficult to predict what the result will be.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/how-useful-are-zero-shot-predictions?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/how-useful-are-zero-shot-predictions?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.genesmindsmachines.com/p/how-useful-are-zero-shot-predictions?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p>But zero-shot predictions do predict something. So what is it that they predict, and why is it that performance in large-scale benchmarks seems to be quite good? At their core, all zero-shot methods work the same way, regardless of the specific model architecture and training data used. These models are trained on a large corpus of available protein data&#8212;either protein sequences or protein structures or both&#8212;and then make predictions that are consistent with this corpus of training data. Since the vast majority of sequences or structures in the training data represent extant, viable proteins, these models have therefore learned the universe of naturally occurring, viable proteins. They can predict whether a specific mutation is likely going to lead to a viable protein or not. But they cannot typically predict a mutation&#8217;s effect on a specific function.</p><p>If zero-shot predictions primarily capture viability, we would expect this to be reflected in large-scale benchmarks. And indeed this is the case. Correlations between fitness and zero-shot predictions are consistently higher when considering both fit and unfit mutations than when only considering the highly fit mutations. (See Figure 2 for an example; in our analysis we verified this pattern across over 200 different datasets.) In other words, zero-shot predictions can separate fit from unfit mutations, but they cannot differentiate among the fit mutations. This explains why overall performance in large-scale benchmarks looks good. Across millions of mutations, the models are doing quite well, because the datasets contain both viable and non-viable mutations in roughly equal proportions. This balance leads to decent correlation coefficients between prediction and measurement.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Rr-q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5133a901-a4d4-41cd-a5fc-41df258ad60a_972x872.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Rr-q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5133a901-a4d4-41cd-a5fc-41df258ad60a_972x872.png 424w, https://substackcdn.com/image/fetch/$s_!Rr-q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5133a901-a4d4-41cd-a5fc-41df258ad60a_972x872.png 848w, https://substackcdn.com/image/fetch/$s_!Rr-q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5133a901-a4d4-41cd-a5fc-41df258ad60a_972x872.png 1272w, https://substackcdn.com/image/fetch/$s_!Rr-q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5133a901-a4d4-41cd-a5fc-41df258ad60a_972x872.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Rr-q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5133a901-a4d4-41cd-a5fc-41df258ad60a_972x872.png" width="542" height="486.238683127572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5133a901-a4d4-41cd-a5fc-41df258ad60a_972x872.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:872,&quot;width&quot;:972,&quot;resizeWidth&quot;:542,&quot;bytes&quot;:617653,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/206131112?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5133a901-a4d4-41cd-a5fc-41df258ad60a_972x872.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Rr-q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5133a901-a4d4-41cd-a5fc-41df258ad60a_972x872.png 424w, https://substackcdn.com/image/fetch/$s_!Rr-q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5133a901-a4d4-41cd-a5fc-41df258ad60a_972x872.png 848w, https://substackcdn.com/image/fetch/$s_!Rr-q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5133a901-a4d4-41cd-a5fc-41df258ad60a_972x872.png 1272w, https://substackcdn.com/image/fetch/$s_!Rr-q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5133a901-a4d4-41cd-a5fc-41df258ad60a_972x872.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 2. Variant activity versus fitness predictions (log-odds) made by the model ESM3-hybrid, for cytochrome P450. The correlation between the predicted and measured fitness is decent overall but not among the highly fit mutants. From <a href="https://www.biorxiv.org/content/10.64898/2026.06.04.730121">Woolley et al. 2026.</a> </figcaption></figure></div><p>But when analyzing specifically function-enhancing mutations, in particular in &#8220;new-to-nature&#8221; engineering experiments where proteins are engineered to perform a function they don&#8217;t perform naturally, we found that zero-shot predictions were systematically uncorrelated (or even weakly anti-correlated) with the measured effects of the mutations. Zero-shot predictions were not able to identify mutations that would increase function, in particular when the function of interest was something new that would not have been observed in natural sequences.</p><p>In summary, zero-shot predictions capture protein viability, but they are rarely useful to identify function-enhancing mutations. This is a generic property of the zero-shot approach, and it applies broadly across different models and model architectures. Model performance in large-scale benchmarks appears to be good because benchmarks assess aggregate performance across millions of mutations, and mutant viability is the primary source of variation across these large-scale datasets. Zero-shot predictions can be useful, in particular to screen out strongly deleterious mutations, but they will rarely point towards increased function in targeted protein-engineering campaigns.</p><p>Read the complete study here:<br>Phillip R. Woolley, Aaron L. Feller, Andrew D. Ellington, Claus O. Wilke (2026) Overestimating zero-shot fitness prediction: Broad benchmarks mask local failures and practical limitations. bioRxiv. <a href="https://doi.org/10.64898/2026.06.04.730121">https://doi.org/10.64898/2026.06.04.730121</a></p><h3><em>More from Genes, Minds, Machines</em></h3><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;f09b1c8b-b5d3-4c49-b67d-8bfb4f0f5915&quot;,&quot;caption&quot;:&quot;AI has gotten amazingly good for programming. Claude Sonnet will zero- or one-shot small programming tasks without mistakes. And while I don&#8217;t think AI is ready to replace software engineers outright, or that vibe coding a fully featured app is a good idea, for simple tasks AI is outstanding. For example, I can perform basic data analysis, maybe visuali&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;We still can&#8217;t predict much of anything in biology&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-10-07T12:27:22.966Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!02U1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F976b3f4b-b2b5-4389-8634-fb2d0227207b_5168x3448.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/we-still-cant-predict-much-of-anything&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:175321052,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:109,&quot;comment_count&quot;:19,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;67c3622e-dc37-46a6-a114-3ed3b7a7149e&quot;,&quot;caption&quot;:&quot;Last summer, I wrote a post claiming that protein language models (pLMs) showed poor performance on viral data. At the time, this was a preliminary result based on a handful of datasets, and I said as much. I also said we were going to do more work on this problem. Well, we have done the work now, and I can confidently say that protein language models p&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Protein language models are bad at mutational effect prediction&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-03-19T20:18:57.195Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!uG2c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c0ef3f-d62b-419d-9cd0-013ea64301fc_4614x5196.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/protein-language-models-are-bad-at&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:191408760,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:22,&quot;comment_count&quot;:7,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Zero-shot predictions are unsupervised predictions made without any prior knowledge about the system of interest. Say you&#8217;re trying to engineer an enzyme by introducing function-enhancing mutations. You can stick the enzyme into a protein language model such as ESM-C or a structural model such as ProteinMPNN and generate predictions for mutations without knowing anything about how exactly the enzyme works or having any prior data. This is opposed to supervised predictions, where you have a set of mutants with measured activity and you use that data to train a model to make predictions about additional mutations.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>See for example the <a href="https://proteingym.org/">ProteinGym project,</a> which provides systematic benchmarks for many different models.</p></div></div>]]></content:encoded></item><item><title><![CDATA[“Tell a story” is not helpful advice]]></title><description><![CDATA[If people knew how to tell a story they wouldn't need the advice in the first place]]></description><link>https://blog.genesmindsmachines.com/p/tell-a-story-is-not-helpful-advice</link><guid isPermaLink="false">https://blog.genesmindsmachines.com/p/tell-a-story-is-not-helpful-advice</guid><dc:creator><![CDATA[Claus Wilke]]></dc:creator><pubDate>Mon, 06 Jul 2026 14:51:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XBjF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa5cb94e-0023-49af-a8b8-973b12624b49_530x453.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A common piece of advice we hear about giving presentations or writing scientific reports is &#8220;tell a story.&#8221; I&#8217;m fully on board with this advice. Yes, absolutely, tell a story. But, what if that&#8217;s where the advice ends? What if you don&#8217;t know how to tell a story? Does that mean you&#8217;re just not cut out to be an engaging writer or speaker? On the contrary, telling stories is a learnable skill. I am convinced anybody can tell an engaging story, once they have learned the framework of how to structure a story and what to present in which order.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XBjF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa5cb94e-0023-49af-a8b8-973b12624b49_530x453.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XBjF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa5cb94e-0023-49af-a8b8-973b12624b49_530x453.png 424w, https://substackcdn.com/image/fetch/$s_!XBjF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa5cb94e-0023-49af-a8b8-973b12624b49_530x453.png 848w, https://substackcdn.com/image/fetch/$s_!XBjF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa5cb94e-0023-49af-a8b8-973b12624b49_530x453.png 1272w, https://substackcdn.com/image/fetch/$s_!XBjF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa5cb94e-0023-49af-a8b8-973b12624b49_530x453.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XBjF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa5cb94e-0023-49af-a8b8-973b12624b49_530x453.png" width="530" height="453" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aa5cb94e-0023-49af-a8b8-973b12624b49_530x453.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:453,&quot;width&quot;:530,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:116111,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/203574892?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa5cb94e-0023-49af-a8b8-973b12624b49_530x453.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XBjF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa5cb94e-0023-49af-a8b8-973b12624b49_530x453.png 424w, https://substackcdn.com/image/fetch/$s_!XBjF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa5cb94e-0023-49af-a8b8-973b12624b49_530x453.png 848w, https://substackcdn.com/image/fetch/$s_!XBjF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa5cb94e-0023-49af-a8b8-973b12624b49_530x453.png 1272w, https://substackcdn.com/image/fetch/$s_!XBjF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa5cb94e-0023-49af-a8b8-973b12624b49_530x453.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Saying &#8220;tell a story&#8221; is about as helpful as saying &#8220;draw the rest of the owl&#8221;. If I could do it, I wouldn&#8217;t need the instructions. Source: <a href="https://www.reddit.com/r/funny/comments/eccj2/how_to_draw_an_owl/">Reddit.</a> Creator unknown.</figcaption></figure></div><p>I encountered this type of advice most recently in an article in <em><a href="https://doi.org/10.1038/s41568-026-00954-8">Nature Reviews Cancer</a></em> on the topic of giving presentations.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> In the first subsection, which covers the overall presentation structure, the article states:</p><blockquote><p>Develop a &#8216;story&#8217; by ordering your points &#8211; working backwards from the point you want to get across to the background required to build up to it &#8211; so that the audience has the best chance of understanding what you have to say.&#8212;<a href="https://doi.org/10.1038/s41568-026-00954-8">Itai Yanai, </a><em><a href="https://doi.org/10.1038/s41568-026-00954-8">Nature Reviews Cancer</a></em><a href="https://doi.org/10.1038/s41568-026-00954-8"> 2026</a>.</p></blockquote><p>Note how this excerpt doesn&#8217;t actually explain how to tell a story, other than that there should be some sort of order from beginning to end. Further, note how the word &#8220;story&#8221; is in quotes. I take this to mean the authors isn&#8217;t sure himself of what a story is. He doesn&#8217;t seem comfortable to plainly recommend you to tell a story. He can only recommend you to tell a &#8216;story.&#8217;<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p><p>Surely we can do better. Let&#8217;s start with a definition. What is a story? <em>A story is a collection of observations, facts, or events presented in a specific order such that they create an emotional reaction.</em><a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> The most important element here is the last part, &#8220;emotional reaction.&#8221; You want your audience to experience an emotion, such as joy, surprise, satisfaction, pleasure, sadness, anger, or horror.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a> Which specific emotion you choose depends on your goals, audience, and settings. In most scientific or professional settings, you may prefer a positive emotion (joy, surprise, satisfaction, pleasure) over a negative one (sadness, anger, horror). However, negative emotions have their place. For example, if you want to convince your audience to donate or otherwise provide funds for a specific cause, negative emotions can be strong motivators.</p><div class="pullquote"><p>A story is a collection of observations, facts or events presented in a specific order such that they create an emotional reaction.</p></div><p>So now we know what our goal is (evoke an emotion), but we still don&#8217;t know how to get there. Some people have an innate instinct for story telling; they can create strong emotions in their audience without necessarily knowing how or why. But many people do not. They need to follow a more systematic and structured approach.</p><p>I will explain this structured approach momentarily. But before we go there, I want you to remember this one concept: Challenge &#8211; Resolution. Every story requires some sort of challenge that then leads to a resolution. The tension between the challenge and the resolution creates the emotional reaction in your audience. If you keep this concept in the back of your mind as you develop your narratives you&#8217;ll do better than most.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/tell-a-story-is-not-helpful-advice?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/tell-a-story-is-not-helpful-advice?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.genesmindsmachines.com/p/tell-a-story-is-not-helpful-advice?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p>There are a few different ways of structuring a story, and it is generally helpful to be aware of the various structures and their respective pros and cons. This is material that I teach routinely in my class on data visualization. The concepts I am going to describe are quite general, and they apply just the same when giving a talk or writing articles, proposals, or emails, or otherwise communicating in any way with fellow human beings.</p><p>Let&#8217;s begin with the most standard, conventional story structure. It has four components:</p><div class="callout-block" data-callout="true"><p><strong>Basic story structure</strong></p><ol><li><p>Opening</p></li><li><p>Challenge</p></li><li><p>Action</p></li><li><p>Resolution</p></li></ol></div><p>Here, <em>Challenge</em> and <em>Resolution</em> are the most important. Get through the opening quickly to present the challenge before your audience loses interest. Then spend some time describing the action that gets you from the challenge to the resolution. Finally, present the resolution, making sure that it fully addresses the original challenge.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a> Audiences are quite sensitive to challenges that weren&#8217;t fully resolved. They will typically describe such situations using words such as &#8220;the ending was disappointing.&#8221; They may not know exactly why they feel this way, but they know that something was off. Don&#8217;t put your audience into this position.</p><p>When I teach this material in my class on data visualization, I usually tell my own story of how I ended up writing a book on data visualization and then started teaching the material.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-6" href="#footnote-6" target="_self">6</a> This allows me to highlight how different elements of the story map onto the various components of the story structure:</p><blockquote><p><strong>Opening:</strong> I am primarily a computational biologist, running an active research lab. This work frequently requires creating data visualizations. Unfortunately, many of the new students joining my lab don&#8217;t know much about how to visualize data.</p><p><strong>Challenge:</strong>  I spend a lot of time coaching students how to make good visualizations. This means I find myself teaching the same concepts over and over.</p><p><strong>Action:</strong> I had the idea that I could make my life easier by writing a book about data visualization. If the book captures all my thoughts and knowledge about the topic, then students can just read the book and self-study. They will no longer require my direct coaching, and I can spend more time doing computational biology.</p><p><strong>Resolution:</strong> The book is written. It has been a great success. However, now I teach data visualization as an official university course, so I still keep teaching the same concepts over and over.</p></blockquote><p>Next is the action-movie structure. It has five components:</p><div class="callout-block" data-callout="true"><p><strong>Action-movie structure</strong></p><ol><li><p>Action</p></li><li><p>Background</p></li><li><p>Development</p></li><li><p>Climax</p></li><li><p>Ending</p></li></ol></div><p>The main difference to the basic story structure is that at the beginning the audience is disoriented but hopefully drawn in by the action. Where the basic story structure takes the audience by their hand and gently leads them to the challenge, the action-movie structure does the opposite. It drops the audience in at the deep end and hopes they can swim. This story structure is routinely used in action movies (hence its name), but it is also commonly used in novels. If you&#8217;ve ever read a novel that at the beginning had you utterly confused about what was happening, chances are it was using this structure.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-7" href="#footnote-7" target="_self">7</a> Importantly, when you&#8217;re using the action-movie structure, even though none of the five components is explicitly called &#8220;challenge&#8221; you still need to set up a challenge, either in background or in development. Climax and ending will provide the resolution.</p><p>Here is my story in the action-movie format:</p><blockquote><p><strong>Action:</strong> In May 2017, I embark on a major project: I write a book on data visualization.</p><p><strong>Background:</strong> I do this because we need to make many data visualizations in my lab, and I end up telling my students the same things over and over.</p><p><strong>Development:</strong> Writing the book takes me almost two years; along the way, I add many features to ggplot2 and become a member of the ggplot2 team.</p><p><strong>Climax:</strong> The book is released in April 2019.</p><p><strong>Ending:</strong> Now I&#8217;m a dataviz teacher.</p></blockquote><p>The final story structure is primarily used in newspaper articles. It has only two components:</p><div class="callout-block" data-callout="true"><p><strong>Newspaper story structure</strong></p><ol><li><p>Lead</p></li><li><p>Development</p></li></ol></div><p>The lead will typically contain both the challenge and the resolution, giving away the entirety of the story in the first few sentences. The development part then provides additional material and further detail.</p><p>Here is my story in this format:</p><blockquote><p><strong>Lead:</strong> Because I see the need for more education in data visualization, I have written an entire book about the topic.</p><p><strong>Development:</strong> I had previously written an R package to improve figure design, but it wasn&#8217;t sufficient: Good judgement cannot be automated.</p><p>So I wrote a book; the book is entirely about concepts, not about coding, and it is meant as a resource for anybody doing data visualizations, regardless of their preferred visualization software.</p></blockquote><p>Which of these story structures should you choose? To a large extent it depends on how captured your audience is. The basic story structure requires an audience with some patience. They need to wait for the story to unfold. But it has the advantage of having some temporal distance between challenge and resolution, which creates tension and will make your story telling more impactful. In general, the basic story structure is a good option for invited seminars and scientific talks, where you can assume the audience will stay for your entire presentation and not just walk out. This structure is also a good option for scientific papers and reports.</p><p>The action-movie structure requires even more commitment on the side of your audience. They need to stick around even though they&#8217;re confused at the beginning, but hopefully the action draws them in and keeps them engaged. This format tends to work best when the audience arrives with the expectation to sit through the entire experience, as would be the case for a movie shown in a theater.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-8" href="#footnote-8" target="_self">8</a> If there&#8217;s any chance that your audience may lose interest and disengage, don&#8217;t choose this structure.</p><p>In fact, whenever you&#8217;re dealing with an audience with short attention span, you should stick to the newspaper story format. This may apply less commonly when giving presentations, but it is useful in other contexts, such as writing a newspaper article (most people don&#8217;t read past the first paragraph), posting on social media, writing a job application, reaching out to somebody with a cold email, or writing a grant proposal. In all of these cases, there is no guarantee your audience will make it through the entirety of your material, and therefore the more you can hook them right at the start and give them a sense of what they&#8217;ll be getting if they stick around the better. I don&#8217;t know how many times I&#8217;ve read emails or personal statements where I&#8217;m two pages in and I still don&#8217;t know what the person wants. In those cases, it happens more often than I&#8217;m willing to admit that I lose patience and just move on to something else.</p><p>In summary, choose one of the standard formats to tell your story, picking the one that fits best with your audience&#8217;s estimated attention span. Then, make sure you know exactly how the different parts of your story map to the components of the story structure you have chosen. Finally, and most importantly, identify a good challenge, which you clearly express regardless of which story format you have chosen, and provide a satisfying resolution to your challenge at the end of your story.</p><h3><em>More from Genes, Minds, Machines</em></h3><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;d09be0d5-09fe-4354-9268-71533f681fa5&quot;,&quot;caption&quot;:&quot;Your slides are not your talk. A strong speaker can take almost any slides and turn them into an engaging presentation. In fact, a strong speaker can hold an audience enthralled without any slides at all. And yet, slide design matters. Bad slides can get in the way of giving a good talk, and excellent slides can elevate your presentation. Also, importan&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Slides that present themselves: The assertion&#8211;evidence approach&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-08-15T11:01:17.611Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!kdHh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8503f1d-a3f0-49fc-9a06-18bdbf6f3c9f_4100x2350.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/slides-that-present-themselves-the&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:170200603,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:51,&quot;comment_count&quot;:7,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;a9ee17f0-d10a-4f25-9776-252bf5fbc900&quot;,&quot;caption&quot;:&quot;To give a successful presentation, you have to have memorized the entire sequence of slides you will be using. At no time should you be confused about what slides come next or what the purpose of a slide is when you pull it up. You probably have seen presentations where the speaker advances to a slide only to appear stumped and confused about why it is &#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Practice the presentation speedrun&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-07-05T12:43:04.615Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!vHKQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc86f0679-772d-46f1-9f86-91b4286fce19_6448x3627.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/practice-the-presentation-speedrun&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:167013046,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:46,&quot;comment_count&quot;:2,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Unfortunately the article is behind a paywall, but <a href="https://www.nature.com/articles/s41568-026-00954-8.epdf?sharing_token=bEBMKco2_rzZu-m49rzVqtRgN0jAjWel9jnR3ZoTv0NdUDxNhKVXZ5qDjGlNgl2i0OlbNDO1kU89_eAN55mbFGDmbhPdbwiv0roByxIwWt_8juoRAJNIvCsh-WzsOWI1HJ1a-IOWDqybS_3ngjhabMFCC8hITCoyzaodn-BZTVc%3D">this link should allow you to read it.</a> Thanks to <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Stephen D. Turner&quot;,&quot;id&quot;:1536121,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WGQE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1706730-c948-4acf-9c45-b14b4e3da1b9_651x651.jpeg&quot;,&quot;uuid&quot;:&quot;1c6ad651-b85a-43bf-8031-e1c6d2edda76&quot;}" data-component-name="MentionToDOM"></span> for providing the link.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>As an aside, this seems to be a classic case of misuse of quotes. The main uses of quotes are (i) to refer to the word itself rather than its meaning (&#8220;the&#8221; is an article); (ii) to indicate that you&#8217;re reproducing somebody else&#8217;s words (Caesar said &#8220;veni, vidi, vici&#8221;); (iii) to indicate irony, i.e., to signal that you mean the exact opposite of the conventional meaning of the word (our burgers are &#8220;vegetarian;&#8221; they&#8217;re made from grass-fed beef). You can&#8217;t use quotes to indicate that you&#8217;re using a word in a slightly non-standard way, as that use is indistinguishable from irony.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>I do not remember my source for this definition, but I&#8217;ll take this opportunity to recommend: <span>Schimel, J.</span><em> Writing Science: How to Write Papers That Get Cited and Proposals That Get Funded</em><span>. Oxford University Press,</span> 2011.<span> Most of what I know about storytelling comes from this book.</span></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>Strictly speaking, boredom is an emotion as well, but that&#8217;s the one you want to avoid.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>I see unresolved challenges all the time in scientific presentations. The speaker opens with the goal of curing cancer and closes with some minor progress in some obscure cancer-related subfield. This will never work. If you haven&#8217;t cured cancer then don&#8217;t present that as your challenge. Instead, the topic of curing cancer belongs into the opening. It&#8217;s the broader field in which you&#8217;re working. But it&#8217;s not the specific challenge you&#8217;re tackling.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-6" href="#footnote-anchor-6" class="footnote-number" contenteditable="false" target="_self">6</a><div class="footnote-content"><p>In case you&#8217;re interested, you can read <a href="https://clauswilke.com/dataviz/">the entire book here, for free.</a> You can also take a look at <a href="https://wilkelab.org/SDS366/">my class materials.</a></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-7" href="#footnote-anchor-7" class="footnote-number" contenteditable="false" target="_self">7</a><div class="footnote-content"><p>Alternatively, it may just have been poorly written. I&#8217;ll let you be the judge of that.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-8" href="#footnote-anchor-8" class="footnote-number" contenteditable="false" target="_self">8</a><div class="footnote-content"><p>If you&#8217;re making YouTube videos and can open them with completely insane stunts that just leave your audience awestruck then this story format may be right for you. Your audience will likely stick around for the rest of the video after having seen your initial stunt. I assume this advice is not useful for the majority of my readers.</p></div></div>]]></content:encoded></item><item><title><![CDATA[The Google Scholar preprint bug strikes again]]></title><description><![CDATA[Google is never going to fix this bug, are they?]]></description><link>https://blog.genesmindsmachines.com/p/the-google-scholar-preprint-bug-strikes</link><guid isPermaLink="false">https://blog.genesmindsmachines.com/p/the-google-scholar-preprint-bug-strikes</guid><dc:creator><![CDATA[Claus Wilke]]></dc:creator><pubDate>Tue, 31 Mar 2026 01:10:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!wG3_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc79d875b-33cb-4a16-8f21-188a19e754db_1084x728.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For the last couple of weeks, Google Scholar has been complaining to me that one of my articles is not publicly available, in violation of a funder-imposed public access mandate. When I go to my Google Scholar page, there is a big notification box on the top of the page that asks me to review the situation. This is rather annoying, because (as you will see in a moment) there is nothing I have done wrong. I have done everything the NIH&#8212;my funder&#8212;wants me to do. The entity that is wrong is Google. In fact, I believe what I&#8217;m seeing is a version of the Google Scholar preprint bug, which I&#8217;ve reported on for over a decade, see for example <a href="https://clauswilke.com/blog/2014/11/01/the-google-scholar-preprint-bug/">here</a> or <a href="https://clauswilke.com/blog/2015/10/08/google-scholar-bug-redux/">here.</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wG3_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc79d875b-33cb-4a16-8f21-188a19e754db_1084x728.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wG3_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc79d875b-33cb-4a16-8f21-188a19e754db_1084x728.png 424w, https://substackcdn.com/image/fetch/$s_!wG3_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc79d875b-33cb-4a16-8f21-188a19e754db_1084x728.png 848w, https://substackcdn.com/image/fetch/$s_!wG3_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc79d875b-33cb-4a16-8f21-188a19e754db_1084x728.png 1272w, https://substackcdn.com/image/fetch/$s_!wG3_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc79d875b-33cb-4a16-8f21-188a19e754db_1084x728.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wG3_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc79d875b-33cb-4a16-8f21-188a19e754db_1084x728.png" width="610" height="409.66789667896677" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c79d875b-33cb-4a16-8f21-188a19e754db_1084x728.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1084,&quot;resizeWidth&quot;:610,&quot;bytes&quot;:186409,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/191880387?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc79d875b-33cb-4a16-8f21-188a19e754db_1084x728.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wG3_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc79d875b-33cb-4a16-8f21-188a19e754db_1084x728.png 424w, https://substackcdn.com/image/fetch/$s_!wG3_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc79d875b-33cb-4a16-8f21-188a19e754db_1084x728.png 848w, https://substackcdn.com/image/fetch/$s_!wG3_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc79d875b-33cb-4a16-8f21-188a19e754db_1084x728.png 1272w, https://substackcdn.com/image/fetch/$s_!wG3_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc79d875b-33cb-4a16-8f21-188a19e754db_1084x728.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When I go to the page where I can review the situation, Google Scholar shows me the offending article. It is a preprint from 2026, published on bioRxiv. You can <a href="https://doi.org/10.64898/2026.01.06.697994">read it here.</a> Yes, Google Scholar complains that a preprint on bioRxiv is not publicly available. But it gets worse.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Pv49!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefcd818-23ae-43cd-a6f2-bbf8692e8f9a_1532x592.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Pv49!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefcd818-23ae-43cd-a6f2-bbf8692e8f9a_1532x592.png 424w, https://substackcdn.com/image/fetch/$s_!Pv49!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefcd818-23ae-43cd-a6f2-bbf8692e8f9a_1532x592.png 848w, https://substackcdn.com/image/fetch/$s_!Pv49!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefcd818-23ae-43cd-a6f2-bbf8692e8f9a_1532x592.png 1272w, https://substackcdn.com/image/fetch/$s_!Pv49!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefcd818-23ae-43cd-a6f2-bbf8692e8f9a_1532x592.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Pv49!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefcd818-23ae-43cd-a6f2-bbf8692e8f9a_1532x592.png" width="1456" height="563" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cefcd818-23ae-43cd-a6f2-bbf8692e8f9a_1532x592.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:563,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:145815,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/191880387?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefcd818-23ae-43cd-a6f2-bbf8692e8f9a_1532x592.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Pv49!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefcd818-23ae-43cd-a6f2-bbf8692e8f9a_1532x592.png 424w, https://substackcdn.com/image/fetch/$s_!Pv49!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefcd818-23ae-43cd-a6f2-bbf8692e8f9a_1532x592.png 848w, https://substackcdn.com/image/fetch/$s_!Pv49!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefcd818-23ae-43cd-a6f2-bbf8692e8f9a_1532x592.png 1272w, https://substackcdn.com/image/fetch/$s_!Pv49!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefcd818-23ae-43cd-a6f2-bbf8692e8f9a_1532x592.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Technically, the NIH doesn&#8217;t just require papers to be available. It wants them to be deposited in PubMed Central. So maybe that&#8217;s Google&#8217;s beef? That the paper is available on bioRxiv but not on PubMed Central? Well, that&#8217;s a neat theory, but it falls flat. It falls flat because the paper is actually on PubMed Central. You can check for yourself <a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC12803269/">here.</a> The NIH has a pilot program where they scan bioRxiv for NIH-funded research and automatically pull any preprints that match their criteria into PubMed Central. This has worked beautifully for all recent preprints my lab has published, and I never think about it because it works so smoothly. Everybody is happy. The NIH, the public, me. Except Google Scholar. They have taken it upon themselves to become open access warriors, and in the process they are now falsely accusing honest researchers of violating open-access mandates.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GJGu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a128494-7f5a-4084-98cd-4d660a8d5c97_1500x788.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GJGu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a128494-7f5a-4084-98cd-4d660a8d5c97_1500x788.png 424w, https://substackcdn.com/image/fetch/$s_!GJGu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a128494-7f5a-4084-98cd-4d660a8d5c97_1500x788.png 848w, https://substackcdn.com/image/fetch/$s_!GJGu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a128494-7f5a-4084-98cd-4d660a8d5c97_1500x788.png 1272w, https://substackcdn.com/image/fetch/$s_!GJGu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a128494-7f5a-4084-98cd-4d660a8d5c97_1500x788.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GJGu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a128494-7f5a-4084-98cd-4d660a8d5c97_1500x788.png" width="1456" height="765" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a128494-7f5a-4084-98cd-4d660a8d5c97_1500x788.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:765,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:192592,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/191880387?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a128494-7f5a-4084-98cd-4d660a8d5c97_1500x788.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GJGu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a128494-7f5a-4084-98cd-4d660a8d5c97_1500x788.png 424w, https://substackcdn.com/image/fetch/$s_!GJGu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a128494-7f5a-4084-98cd-4d660a8d5c97_1500x788.png 848w, https://substackcdn.com/image/fetch/$s_!GJGu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a128494-7f5a-4084-98cd-4d660a8d5c97_1500x788.png 1272w, https://substackcdn.com/image/fetch/$s_!GJGu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a128494-7f5a-4084-98cd-4d660a8d5c97_1500x788.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>So what&#8217;s going on? Digging a bit deeper, I have a pretty good idea about what the issue is. We&#8217;ll get to that in a second. Let&#8217;s collect a bit more evidence first.</p><p>Do you know how, when you click on the Google Scholar record for an article, it gives you the option to review all the alternative versions of the article?<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> Well, for this particular preprint, that&#8217;s missing. Google Scholar is not aware of any alternative versions. And, even worse, Google Scholar doesn&#8217;t even point to the correct article. Instead of pointing to bioRxiv, it points to <a href="https://europepmc.org/article/med/41542510">Europe PMC.</a> Google Scholar has completely messed up. It doesn&#8217;t know that my bioRxiv preprint is on bioRxiv, it doesn&#8217;t know that it is on PubMed Central, and it sends people on a wild goose chase to Europe PMC, which then points to bioRxiv. </p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qo3p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ede2ca-4a08-4553-aa39-57562a055268_1172x250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qo3p!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ede2ca-4a08-4553-aa39-57562a055268_1172x250.png 424w, https://substackcdn.com/image/fetch/$s_!qo3p!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ede2ca-4a08-4553-aa39-57562a055268_1172x250.png 848w, https://substackcdn.com/image/fetch/$s_!qo3p!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ede2ca-4a08-4553-aa39-57562a055268_1172x250.png 1272w, https://substackcdn.com/image/fetch/$s_!qo3p!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ede2ca-4a08-4553-aa39-57562a055268_1172x250.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qo3p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ede2ca-4a08-4553-aa39-57562a055268_1172x250.png" width="598" height="127.55972696245733" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d5ede2ca-4a08-4553-aa39-57562a055268_1172x250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:250,&quot;width&quot;:1172,&quot;resizeWidth&quot;:598,&quot;bytes&quot;:67237,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/191880387?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ede2ca-4a08-4553-aa39-57562a055268_1172x250.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qo3p!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ede2ca-4a08-4553-aa39-57562a055268_1172x250.png 424w, https://substackcdn.com/image/fetch/$s_!qo3p!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ede2ca-4a08-4553-aa39-57562a055268_1172x250.png 848w, https://substackcdn.com/image/fetch/$s_!qo3p!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ede2ca-4a08-4553-aa39-57562a055268_1172x250.png 1272w, https://substackcdn.com/image/fetch/$s_!qo3p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ede2ca-4a08-4553-aa39-57562a055268_1172x250.png 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><p>So what we&#8217;re dealing with here is an outdated or less authoritative link that is causing more authoritative links to disappear from the Google Scholar database. Have we ever seen anything like this? I&#8217;m glad you asked. Yes we have. It&#8217;s the <a href="https://clauswilke.com/blog/2014/11/01/the-google-scholar-preprint-bug/">Google Scholar preprint bug,</a> which I have been documenting since 2014. Hundreds of scientists (that I know of) have complained about it, because it can have the unfortunate consequence of removing your published paper from the Google Scholar database. This is particularly frustrating for junior scientists on the job market, because it matters whether Google Scholar is showing your recent Nature paper or just the corresponding bioRxiv preprint.</p><p>In 2015, <a href="https://clauswilke.com/blog/2015/10/08/google-scholar-bug-redux/">I even discussed it with Anurag Acharya,</a> co-founder of Google Scholar.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> This discussion left me with the impression that the Google Scholar team does not understand the issue, or the severity of it, and will never fix the problem. And here we are, a decade later, the problem still exists, and now it&#8217;s causing down-stream consequences such as accusing me of violating the NIH open-access policy.</p><p>For completeness, I am reproducing here my 2015 conversation with Anurag Acharya, as it is as relevant today as it was back then.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-aGv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8341ec-4d57-47ab-bd2d-78fbaa65ae33_3976x22291.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-aGv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8341ec-4d57-47ab-bd2d-78fbaa65ae33_3976x22291.png 424w, https://substackcdn.com/image/fetch/$s_!-aGv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8341ec-4d57-47ab-bd2d-78fbaa65ae33_3976x22291.png 848w, https://substackcdn.com/image/fetch/$s_!-aGv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8341ec-4d57-47ab-bd2d-78fbaa65ae33_3976x22291.png 1272w, https://substackcdn.com/image/fetch/$s_!-aGv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8341ec-4d57-47ab-bd2d-78fbaa65ae33_3976x22291.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-aGv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8341ec-4d57-47ab-bd2d-78fbaa65ae33_3976x22291.png" width="1456" height="8163" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7d8341ec-4d57-47ab-bd2d-78fbaa65ae33_3976x22291.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:8163,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6049069,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/191880387?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8341ec-4d57-47ab-bd2d-78fbaa65ae33_3976x22291.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-aGv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8341ec-4d57-47ab-bd2d-78fbaa65ae33_3976x22291.png 424w, https://substackcdn.com/image/fetch/$s_!-aGv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8341ec-4d57-47ab-bd2d-78fbaa65ae33_3976x22291.png 848w, https://substackcdn.com/image/fetch/$s_!-aGv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8341ec-4d57-47ab-bd2d-78fbaa65ae33_3976x22291.png 1272w, https://substackcdn.com/image/fetch/$s_!-aGv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8341ec-4d57-47ab-bd2d-78fbaa65ae33_3976x22291.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>The link usually says &#8220;All <em>n</em> versions,&#8221; with <em>n</em> being the number of different versions Google Scholar has found. See <a href="https://scholar.google.com/citations?view_op=view_citation&amp;hl=en&amp;user=Nc8U6E4AAAAJ&amp;citation_for_view=Nc8U6E4AAAAJ:9yKSN-GCB0IC">here</a> for an example, at the very bottom of the page. As of this writing, it says &#8220;<a href="https://scholar.google.com/scholar?oi=bibs&amp;hl=en&amp;cluster=10384935850530543589">All 18 versions.</a>&#8221;</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>My discussion with Anurag Acharya can be found <a href="https://scholarlykitchen.sspnet.org/2015/10/05/guest-post-highwires-john-sack-on-online-indexing-of-scholarly-publications-part-1-what-we-all-have-accomplished/#comment-155912">in the comments section to this 2015 article by the Scholarly Kitchen.</a> I&#8217;m impressed by the fact that the Scholarly Kitchen is still hosting the comments to a decade-old article.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Creating reproducible data analysis pipelines]]></title><description><![CDATA[There was a discussion recently on Bluesky about reproducible data analysis pipelines.]]></description><link>https://blog.genesmindsmachines.com/p/creating-reproducible-data-analysis</link><guid isPermaLink="false">https://blog.genesmindsmachines.com/p/creating-reproducible-data-analysis</guid><dc:creator><![CDATA[Claus Wilke]]></dc:creator><pubDate>Fri, 27 Mar 2026 22:45:18 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/34bac309-a55e-4f3a-9c76-cc7659caa2a7_1750x1440.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There was a discussion recently on Bluesky about reproducible data analysis pipelines. This is a complex topic, and it&#8217;s difficult to do it justice in a bunch of 300 character posts. So I thought I&#8217;d take the opportunity to collect my thoughts on this topic in a longer-form article.</p><p>The discussion started with this post by Darren Dahly:</p><div class="bluesky-wrap outer" style="height: auto; display: flex; margin-bottom: 24px;" data-attrs="{&quot;postId&quot;:&quot;3mhs6ndgvx22q&quot;,&quot;authorDid&quot;:&quot;did:plc:3zyo4iakhqs47bttjalqgbk7&quot;,&quot;authorName&quot;:&quot;Darren Dahly&quot;,&quot;authorHandle&quot;:&quot;statsepi.bsky.social&quot;,&quot;authorAvatarUrl&quot;:&quot;https://cdn.bsky.app/img/avatar/plain/did:plc:3zyo4iakhqs47bttjalqgbk7/bafkreieurq6uozhnwby2w3lj3cisd7cbqcficeh3pr2c46feowb2uz7psu&quot;,&quot;text&quot;:&quot;As I progressed (hopefully) from data novice to data competent, one of the most impactful practices I adopted was to never* rely on saved intermediate datasets (etc) in my workflow. All projects are designed so that [\&quot;raw\&quot; data -> analysis data -> analysis] is 100% reproduced in every session.&quot;,&quot;createdAt&quot;:&quot;2026-03-24T08:43:51.684Z&quot;,&quot;uri&quot;:&quot;at://did:plc:3zyo4iakhqs47bttjalqgbk7/app.bsky.feed.post/3mhs6ndgvx22q&quot;,&quot;imageUrls&quot;:[]}" data-component-name="BlueskyCreateBlueskyEmbed"><iframe id="bluesky-3mhs6ndgvx22q" data-bluesky-id="06023016090504507" src="https://embed.bsky.app/embed/did:plc:3zyo4iakhqs47bttjalqgbk7/app.bsky.feed.post/3mhs6ndgvx22q?id=06023016090504507" width="100%" style="display: block; flex-grow: 1;" frameborder="0" scrolling="no"></iframe></div><p>To which I replied:</p><div class="bluesky-wrap outer" style="height: auto; display: flex; margin-bottom: 24px;" data-attrs="{&quot;postId&quot;:&quot;3mht4oqhtls2f&quot;,&quot;authorDid&quot;:&quot;did:plc:v4fio6clr4zz64lhdkre7zph&quot;,&quot;authorName&quot;:&quot;Claus Wilke&quot;,&quot;authorHandle&quot;:&quot;clauswilke.com&quot;,&quot;authorAvatarUrl&quot;:&quot;https://cdn.bsky.app/img/avatar/plain/did:plc:v4fio6clr4zz64lhdkre7zph/bafkreibqpgogauwfxkpcgzjofe365vz2q75hqih6bk45n3a4epbs77zixa&quot;,&quot;text&quot;:&quot;I feel strongly this is a terrible idea. I battle it with my students all the time. Examples:\n- Can you quickly make this minor change to this figure? That'll take 30 min. to rerun all the preprocessing.\n- Can you send me the raw data to this figure that contains 5 points? That'll be 10 TB of data.&quot;,&quot;createdAt&quot;:&quot;2026-03-24T17:41:31.156Z&quot;,&quot;uri&quot;:&quot;at://did:plc:v4fio6clr4zz64lhdkre7zph/app.bsky.feed.post/3mht4oqhtls2f&quot;,&quot;imageUrls&quot;:[]}" data-component-name="BlueskyCreateBlueskyEmbed"><iframe id="bluesky-3mht4oqhtls2f" data-bluesky-id="9885265684153526" src="https://embed.bsky.app/embed/did:plc:v4fio6clr4zz64lhdkre7zph/app.bsky.feed.post/3mht4oqhtls2f?id=9885265684153526" width="100%" style="display: block; flex-grow: 1;" frameborder="0" scrolling="no"></iframe></div><p>I believe the difference between Darren&#8217;s position and mine boils down to what an ideal analysis pipeline should look like (Darren&#8217;s perspective) versus what actually works or doesn&#8217;t work in practice, in particular when supervising students who may still be learning the ropes (my perspective). I am all in favor of fully reproducible pipelines that can go from raw data to final figures. And yet, I&#8217;ve seen this approach go wrong in so many ways that I tend to actively discourage my students from pursuing it, at least in the strict way as expressed by Darren where there are no intermediate datasets and the pipeline always has to be run from the very top to make any changes anywhere.</p><p>First, there are a few immediate issues that I&#8217;ve seen crop up way too many times, and that I alluded to in my Bluesky post.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> One is slow turn-around time for minor changes. I&#8217;ve seen way too many students struggle with requests for small modifications to their figures. I ask a student to replace violins with boxplots, or to swap the x and the y axis, and it takes them an afternoon because they have to run everything from the top&#8212;and possibly multiple times&#8212;until the revised figure looks right. Another is gigantic data files that are difficult to archive or share. I&#8217;ve seen students keep raw log files from simulations, literally hundreds of gigabytes of data, but not store the handful of final values they had extracted from these log files.</p><p>Second, I believe intermediate files improve reproducibility, because pipelines break and an intermediate file is always better than a pipeline that no longer runs. Why do pipelines break? For one, students and postdocs, even the experienced ones, fail to anticipate the many ways in which code may no longer work in the future, and as a consequence their &#8220;fully reproducible&#8221; pipelines contain hidden dependencies that can be difficult to satisfy in the future. And also, nearly everything breaks eventually. Will your carefully crafted fully reproducible docker image still work in 20 years? Does it depend on some service that may no longer be available then?</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/creating-reproducible-data-analysis?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/creating-reproducible-data-analysis?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.genesmindsmachines.com/p/creating-reproducible-data-analysis?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p>All of these issues can be avoided if you make it a habit to always store the final processed data, right before plotting. And to ensure reproducibility, you can read it right back in after saving. Here is an example in Python:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;c4e3df49-1d06-47bc-8231-4da74395a693&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import pandas as pd

# create your final data by whatever means necessary
final_data_for_plotting = ...
# write the final data frame to csv
final_data_for_plotting.to_csv('final_data.csv', index=False)

# --- if using Jupyter, start a new cell here ---

# read the data back in
final_data_for_plotting = pd.read_csv('final_data.csv')
# place your plotting code here
...</code></pre></div><p>I think Darren knows this, because in a later post he wrote:</p><div class="bluesky-wrap outer" style="height: auto; display: flex; margin-bottom: 24px;" data-attrs="{&quot;postId&quot;:&quot;3mhsj67pi3k22&quot;,&quot;authorDid&quot;:&quot;did:plc:3zyo4iakhqs47bttjalqgbk7&quot;,&quot;authorName&quot;:&quot;Darren Dahly&quot;,&quot;authorHandle&quot;:&quot;statsepi.bsky.social&quot;,&quot;authorAvatarUrl&quot;:&quot;https://cdn.bsky.app/img/avatar/plain/did:plc:3zyo4iakhqs47bttjalqgbk7/bafkreieurq6uozhnwby2w3lj3cisd7cbqcficeh3pr2c46feowb2uz7psu&quot;,&quot;text&quot;:&quot;My most basic workflow is \&quot;raw data\&quot; -> R script -> data.RData -> Rmd:load(data.RData) -> Report&quot;,&quot;createdAt&quot;:&quot;2026-03-24T11:52:15.614Z&quot;,&quot;uri&quot;:&quot;at://did:plc:3zyo4iakhqs47bttjalqgbk7/app.bsky.feed.post/3mhsj67pi3k22&quot;,&quot;imageUrls&quot;:[]}" data-component-name="BlueskyCreateBlueskyEmbed"><iframe id="bluesky-3mhsj67pi3k22" data-bluesky-id="3199358748316137" src="https://embed.bsky.app/embed/did:plc:3zyo4iakhqs47bttjalqgbk7/app.bsky.feed.post/3mhsj67pi3k22?id=3199358748316137" width="100%" style="display: block; flex-grow: 1;" frameborder="0" scrolling="no"></iframe></div><p>This is an R version of my Python example of saving the data and immediately reloading it.</p><p>In this context, however, I have to point out that I normally recommend against language-specific, binary data-dump formats such as .RData in R or .pickle in Python. Stick to simple text files that are interchangeable and can be read by anything. Comma-separated values (.csv) is good. You can gzip the file if it&#8217;s too large. There is nothing quite as infuriating as somebody sending you an .RData file when you&#8217;re exclusively working in Python or a .pickle file when you&#8217;re exclusively working in R. And again, think 20 years into the future. Will the language-specific dump file that may seem so convenient today still be your preferred choice, when maybe you haven&#8217;t used the relevant software in years and don&#8217;t have it readily accessible or no longer remember how it works? By contrast, a .csv file can be opened in Excel if necessary. And, if it&#8217;s stored in a GitHub repository, we don&#8217;t need to open it at all, we can just look at it in the browser.</p><p>In terms of organizing your pipeline, it&#8217;s generally a good idea to place all the figure generation code into a separate notebook or script, so that you can test that it runs standalone and doesn&#8217;t require any variables you may have generated earlier in the pipeline and forgot to write to disk. I also would like to point out that notebooks invite reproducibility issues, as they encourage out of order execution (you run three cells, then you go back up and make an edit and run a prior cell again, then you run the next cell three times, etc.). So, at the end of every working session with a notebook, you should clear all results, restart the kernel, and run everything from top to bottom to make sure the notebook is still self-contained and internally consistent.</p><p>Now, if you want to be super fancy, you can use something like <a href="https://snakemake.readthedocs.io/en/stable/">Snakemake</a> to build a dependency graph that allows you to rerun the pipeline while caching all intermediate results that haven&#8217;t changed based on your most recent code edits. In this setup, I would definitely recommend having one or more separate script(s) just for the figures. If you&#8217;re primarily an R user, you can also consider the <a href="https://docs.ropensci.org/targets/">{targets}</a> package, which provides a similar tool for the R ecosystem.</p><p>Tools such as Snakemake or {targets} work great, but they can present a bit of a learning curve and a meaningful amount of overhead to set up for any given project. If you routinely write long analysis pipelines consisting of many interdependent steps, it is probably worth it for you to go through the effort of learning these tools. But if you&#8217;re only analyzing data occasionally, or if your pipelines aren&#8217;t that complex, you&#8217;re probably better off just saving the final datasets right before plotting.</p><p>In summary, whatever you do, think about whether your analysis pipeline and/or intermediate results will still be accessible 20 years down the road. This may seem unimaginably far in the future, but I can guarantee you that if you stick around long enough somebody will ask you for data from 20 years ago. I recently wrote a paper where I needed data from a paper I had written 13 years earlier. I still had the project file from the interactive plotting software I had used at the time, but I no longer had the software. Fortunately that software used a text-based format and I could open the project file in a text editor and extract the data. This saved my day, but it would have been so much better had I saved the data in CSV format at the time. So do this going forward. Your future self will thank you for it.</p><h3><em>More from Genes, Minds, Machines</em></h3><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;ffbde98f-218a-4678-9321-ef49bed68b9b&quot;,&quot;caption&quot;:&quot;Yes, I&#8217;m ready to touch the hot stove. Let the language wars begin.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Python is not a great language for data science. Part 1: The experience&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-11-13T16:09:16.256Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!BCXZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23c3227-419b-47cf-8da1-670edef49477_6000x3376.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/python-is-not-a-great-language-for&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:178439014,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:73,&quot;comment_count&quot;:41,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;6732e585-3e0a-440f-8569-7aee5eddfd8d&quot;,&quot;caption&quot;:&quot;Despite the overall hype in all things AI, in particular among the tech crowd, we have not yet seen much in terms of product&#8211;market fit and genuine commercial success for AIs&#8212;or more specifically, LLMs&#8212;outside a fairly narrow range of application areas. Other than sycophantic chatbots, AI girlfriends, and maybe efficient document search, the main applic&#8230;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;LLMs excel at programming&#8212;how can they be so bad at it?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-11-06T15:41:16.539Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!XsWg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e1ffb0c-455c-4eec-bdb5-370a1efab98f_6240x4160.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/llms-excel-at-programminghow-can&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:177950065,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:46,&quot;comment_count&quot;:15,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>I would like to emphasize that the problems arise because students try to be extra careful and aim to write reproducible pipelines that go from the raw data all the way to the final figures. And in the process, they create secondary problems that they didn&#8217;t anticipate.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Protein language models are bad at mutational effect prediction]]></title><description><![CDATA[Biology is hard. Yes, even for AI.]]></description><link>https://blog.genesmindsmachines.com/p/protein-language-models-are-bad-at</link><guid isPermaLink="false">https://blog.genesmindsmachines.com/p/protein-language-models-are-bad-at</guid><dc:creator><![CDATA[Claus Wilke]]></dc:creator><pubDate>Thu, 19 Mar 2026 20:18:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!uG2c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c0ef3f-d62b-419d-9cd0-013ea64301fc_4614x5196.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Last summer, I wrote a post claiming that <a href="https://blog.genesmindsmachines.com/p/limitations-of-protein-language-models">protein language models (pLMs) showed poor performance on viral data.</a> At the time, this was a preliminary result based on a handful of datasets, and I said as much. I also said we were going to do more work on this problem. Well, we have done the work now, and I can confidently say that protein language models perform worse on viral proteins than on cellular proteins. However, more importantly, they perform poorly on either, when the task considered is mutational effect prediction (i.e., predicting by how much a mutation changes the activity or fitness<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> of a protein). The paper is on bioRxiv.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p><p>If you&#8217;re following the literature on pLMs, you may be confused by my statement. There are many papers that seemingly show excellent performance. In fact, whenever a new pLM is released, one of the standard benchmarking tasks is typically mutational effects prediction. And performance often appears to be excellent. Unfortunately, much of this apparent success is just people confusing themselves over what is actually happening. If you dig deeper you can find the cracks under the surface.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/protein-language-models-are-bad-at?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/protein-language-models-are-bad-at?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.genesmindsmachines.com/p/protein-language-models-are-bad-at?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p>Before I continue, let me quickly specify what kind of modeling situation I&#8217;m referring to. I&#8217;m specifically focusing on supervised learning of mutational effects from deep mutational scanning (DMS) data. In this situation, we have experimental data for thousands of mutants of a protein, we split the data into training and test sets, train the model on the training set, and then evaluate on the test set. This is distinct from so-called <em>zero-shot predictions,</em> which are also popular, where we don&#8217;t have a training set and just predict mutational effects from the pre-trained model, without learning anything about the specific dataset at hand. Zero-shot predictions have their own issues. I&#8217;ll not discuss them here. Everything in this post is exclusively about supervised learning.</p><p>The biggest problem in supervised learning is data leakage, where information from the training set leaks into the test set, and this is definitely happening in the field of mutational effects prediction. The problem is that it is common to treat the thousands of mutations in a DMS dataset as independent from each other (Figure 1A, pooled split), ignoring the fact that there will often be multiple mutations at the same site and those mutations will have correlated effects. Thus, the model can learn which sites in a protein are sensitive to mutations and which are not and make predictions based on this information rather than on the specific biochemistry of individual mutations. To avoid this data leakage problem, we have to stratify by site when generating training&#8211;test splits (Figure 1A, stratified by site).  </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uG2c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c0ef3f-d62b-419d-9cd0-013ea64301fc_4614x5196.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uG2c!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c0ef3f-d62b-419d-9cd0-013ea64301fc_4614x5196.png 424w, https://substackcdn.com/image/fetch/$s_!uG2c!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c0ef3f-d62b-419d-9cd0-013ea64301fc_4614x5196.png 848w, https://substackcdn.com/image/fetch/$s_!uG2c!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c0ef3f-d62b-419d-9cd0-013ea64301fc_4614x5196.png 1272w, https://substackcdn.com/image/fetch/$s_!uG2c!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c0ef3f-d62b-419d-9cd0-013ea64301fc_4614x5196.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uG2c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c0ef3f-d62b-419d-9cd0-013ea64301fc_4614x5196.png" width="724" height="815.4945054945055" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/85c0ef3f-d62b-419d-9cd0-013ea64301fc_4614x5196.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1640,&quot;width&quot;:1456,&quot;resizeWidth&quot;:724,&quot;bytes&quot;:1303227,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/191408760?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c0ef3f-d62b-419d-9cd0-013ea64301fc_4614x5196.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uG2c!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c0ef3f-d62b-419d-9cd0-013ea64301fc_4614x5196.png 424w, https://substackcdn.com/image/fetch/$s_!uG2c!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c0ef3f-d62b-419d-9cd0-013ea64301fc_4614x5196.png 848w, https://substackcdn.com/image/fetch/$s_!uG2c!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c0ef3f-d62b-419d-9cd0-013ea64301fc_4614x5196.png 1272w, https://substackcdn.com/image/fetch/$s_!uG2c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c0ef3f-d62b-419d-9cd0-013ea64301fc_4614x5196.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 1: Supervised learning of variant effects is strongly affected by train&#8211;test splitting strategy. The models on the left of the dashed line are standard, general purpose models, and the models on the right have been fine-tuned for viral sequences. From <a href="https://doi.org/10.64898/2026.03.08.710389">Vieira et al. 2026.</a></figcaption></figure></div><p>When comparing models trained and evaluated either on pooled splits or on splits stratified by site, we see a huge drop in performance in the latter (Figure 1B). And this drop exists regardless of whether we are working with viral or cellular proteins, and whether we&#8217;re using a generic model or one fine-tuned for viral data. In fact, most models show roughly the same performance. All models perform poorly on site-stratified data.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a></p><p>Now you may wonder how correlated different mutations at the same site really are. There&#8217;s a simple way to find out: For pooled splits, we can simply take the average fitness effect in the training data at each site and use this as our prediction for the test data. I want to emphasize how simplistic of a model this is: We are simply saying that any unseen mutation is going to have the average effect at its site. How well does such a model perform? On cellular data, almost as well as a full-scale protein language model, and on viral data, better than a full-scale protein language model! In Figure 2, dots above the dashed line imply that the pLM is better, and dots below the dashed line imply that simple site means are better. You can see how for more than half of the viral datasets, site means are better than the pLM. And for cellular datasets, even though all the blue dots are above the dashed line, they are only shifted upwards by a small amount. If the site-means model does well, the pLM also does well (and a little better than the site-means model), and if the site-means model doesn&#8217;t do well the pLM also doesn&#8217;t do well (but it still does a little better than the site-means model). I think this is a devastating result. In the vast majority of cases, pLMs with millions of parameters do barely better than a model that just memorizes mean effects at each site.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!t4TF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85b0ee18-e00f-4fa9-a222-9d9c14cf2763_2651x2100.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!t4TF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85b0ee18-e00f-4fa9-a222-9d9c14cf2763_2651x2100.png 424w, https://substackcdn.com/image/fetch/$s_!t4TF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85b0ee18-e00f-4fa9-a222-9d9c14cf2763_2651x2100.png 848w, https://substackcdn.com/image/fetch/$s_!t4TF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85b0ee18-e00f-4fa9-a222-9d9c14cf2763_2651x2100.png 1272w, https://substackcdn.com/image/fetch/$s_!t4TF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85b0ee18-e00f-4fa9-a222-9d9c14cf2763_2651x2100.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!t4TF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85b0ee18-e00f-4fa9-a222-9d9c14cf2763_2651x2100.png" width="573" height="453.75618131868134" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/85b0ee18-e00f-4fa9-a222-9d9c14cf2763_2651x2100.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1153,&quot;width&quot;:1456,&quot;resizeWidth&quot;:573,&quot;bytes&quot;:251287,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/191408760?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85b0ee18-e00f-4fa9-a222-9d9c14cf2763_2651x2100.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!t4TF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85b0ee18-e00f-4fa9-a222-9d9c14cf2763_2651x2100.png 424w, https://substackcdn.com/image/fetch/$s_!t4TF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85b0ee18-e00f-4fa9-a222-9d9c14cf2763_2651x2100.png 848w, https://substackcdn.com/image/fetch/$s_!t4TF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85b0ee18-e00f-4fa9-a222-9d9c14cf2763_2651x2100.png 1272w, https://substackcdn.com/image/fetch/$s_!t4TF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85b0ee18-e00f-4fa9-a222-9d9c14cf2763_2651x2100.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 2: Sophisticated protein language models barely outperform (for cellular proteins) or perform worse than (for viral proteins) a naive predictor that simply uses site means to predict mutational effects. From <a href="https://doi.org/10.64898/2026.03.08.710389">Vieira et al. 2026.</a></figcaption></figure></div><p>Another obvious take-away from Figure 2 is the variation in model performance across datasets is huge. For some datasets predictions are apparently very easy, and for other datasets predictions are nearly impossible. We spent a lot of effort trying to understand what makes a dataset predictable. In brief, it comes down to variation within and among sites.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a> In particular, models only do well on datasets that have an intermediate fraction of highly variable sites (Figure 3). There are no datasets with either a very low or a very high fraction of variable sites for which model performance is good. Interestingly, the viral and the cellular proteins separate on this dimension. Many of the viral datasets for which prediction is difficult have a particularly low fraction of highly variable sites, and many of the cellular datasets for which prediction is difficult have a particularly high fraction of highly variable sites. This may be one of the main reasons why predictions on viral and cellular datasets differ.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tHO2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f99a3d3-eb2c-4257-a81d-cbba268fb8f8_2376x2528.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tHO2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f99a3d3-eb2c-4257-a81d-cbba268fb8f8_2376x2528.png 424w, https://substackcdn.com/image/fetch/$s_!tHO2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f99a3d3-eb2c-4257-a81d-cbba268fb8f8_2376x2528.png 848w, https://substackcdn.com/image/fetch/$s_!tHO2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f99a3d3-eb2c-4257-a81d-cbba268fb8f8_2376x2528.png 1272w, https://substackcdn.com/image/fetch/$s_!tHO2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f99a3d3-eb2c-4257-a81d-cbba268fb8f8_2376x2528.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tHO2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f99a3d3-eb2c-4257-a81d-cbba268fb8f8_2376x2528.png" width="533" height="567.0446428571429" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9f99a3d3-eb2c-4257-a81d-cbba268fb8f8_2376x2528.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1549,&quot;width&quot;:1456,&quot;resizeWidth&quot;:533,&quot;bytes&quot;:246196,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/191408760?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f99a3d3-eb2c-4257-a81d-cbba268fb8f8_2376x2528.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tHO2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f99a3d3-eb2c-4257-a81d-cbba268fb8f8_2376x2528.png 424w, https://substackcdn.com/image/fetch/$s_!tHO2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f99a3d3-eb2c-4257-a81d-cbba268fb8f8_2376x2528.png 848w, https://substackcdn.com/image/fetch/$s_!tHO2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f99a3d3-eb2c-4257-a81d-cbba268fb8f8_2376x2528.png 1272w, https://substackcdn.com/image/fetch/$s_!tHO2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f99a3d3-eb2c-4257-a81d-cbba268fb8f8_2376x2528.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 3: Model performance is approximately predicted by the fraction of highly variable sites (FHVS) in a dataset, with maximum performance observed for intermediate FHVS values. From <a href="https://doi.org/10.64898/2026.03.08.710389">Vieira et al. 2026.</a></figcaption></figure></div><p>So, we have learned that apparent good pLM performance on mutational effects prediction is largely driven by site effects (knowing the average fitness at a site allows you to make pretty good predictions for new mutations at that site), and these site effects can leak into the test data when using pooled splits. Moreover, there are aspects that are intrinsic to the dataset and completely independent of the model that determine how well a model will perform. These are related to the fitness variation within and among sites. Datasets with just the right fitness distribution are highly predictable (even by bad models) and datasets with the wrong fitness distribution can&#8217;t be predicted by any models. The relative difference in performance between different models is comparatively minor.</p><p>One last issue is the metric used to assess model performance. We use <em>R</em><sup>2</sup> to measure performance, when most other studies use Spearman &#961;. I&#8217;m not a big fan of &#961;. I think it artificially inflates perceived model performance. First, all else being equal, and even though both are always less than or equal to one, &#961; will always be larger than <em>R</em><sup>2</sup>. This means &#961; has less discriminatory power. An excellent model and a good model may have quite similar &#961; values even though their <em>R</em><sup>2</sup> values are not that similar. A &#961; = 0.8 and a &#961; = 0.6 may not seem that different, but they correspond to <em>R</em><sup>2</sup> values of 0.64 and 0.36, almost a factor of two difference in performance. Second, &#961; does not care about the specific values predicted, only their relative order. As long as the best mutations tend to come out on top and the worst at the bottom, your model will get a high &#961; score, even if the specific predictions are bad and the <em>R</em><sup>2</sup> is low. Some people may argue that for protein engineering or other applications of mutational effect prediction getting the relative ranking is good enough, and therefore using &#961; is fine. But in my opinion, this is just an admission that the models aren&#8217;t very good yet, and that they tend to fail if we need more specific predictions than just relative ranks.</p><h3><em>More from Genes, Minds, Machines</em></h3><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;a8384d5e-52f4-44e1-9e01-f1fc23c3d2d6&quot;,&quot;caption&quot;:&quot;Current biological AI models don&#8217;t seem to work well for data from viral proteins. Specifically, I&#8217;m referring to protein language models applied to the problem of predicting effects of mutations. Protein language models are transformer-based AI models similar to ChatGPT but trained entirely on protein sequences. The most popular such models are&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Limitations of protein language models applied to viral data&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-07-23T12:16:09.849Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!EOrq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3783e589-a7b0-4498-b1df-1fdb0372bd9e_1800x1350.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/limitations-of-protein-language-models&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:166949668,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:15,&quot;comment_count&quot;:9,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;d905cea6-13c9-4132-bb09-c39069cb9624&quot;,&quot;caption&quot;:&quot;AI has gotten amazingly good for programming. Claude Sonnet will zero- or one-shot small programming tasks without mistakes. And while I don&#8217;t think AI is ready to replace software engineers outright, or that vibe coding a fully featured app is a good idea, for simple tasks AI is outstanding. For example, I can perform basic data analysis, maybe visuali&#8230;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;We still can&#8217;t predict much of anything in biology&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-10-07T12:27:22.966Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!02U1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F976b3f4b-b2b5-4389-8634-fb2d0227207b_5168x3448.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/we-still-cant-predict-much-of-anything&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:175321052,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:92,&quot;comment_count&quot;:17,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>For simplicity, we refer to any measurable quantitative phenotype as &#8220;fitness.&#8221;</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>L. C. Vieira, S. Lin, C. O. Wilke (2026). Intrinsic dataset features drive mutational effect prediction by protein language models. bioRxiv. <a href="https://doi.org/10.64898/2026.03.08.710389">https://doi.org/10.64898/2026.03.08.710389</a></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>But note the performance of ESM C. It does surprisingly well on site-stratified data for cellular proteins, and extremely poorly on site-stratified data for viral proteins. ESM C is without doubt one of the best current pLMs, but only if you work with cellular proteins. For virus data, it is terrible.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>For the full story, read the paper: <a href="https://doi.org/10.64898/2026.03.08.710389">https://doi.org/10.64898/2026.03.08.710389</a></p></div></div>]]></content:encoded></item><item><title><![CDATA[Sociopathic AI agents]]></title><description><![CDATA[AI alignment will likely require creating AIs with genuine empathy]]></description><link>https://blog.genesmindsmachines.com/p/sociopathic-ai-agents</link><guid isPermaLink="false">https://blog.genesmindsmachines.com/p/sociopathic-ai-agents</guid><dc:creator><![CDATA[Claus Wilke]]></dc:creator><pubDate>Sun, 15 Feb 2026 23:55:23 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f1c436f7-b10a-4b9b-888c-ceb2692550e7_2440x1770.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I took a break from Substacking for a while due to other responsibilities. As they are slowly getting under control I plan to write somewhat regularly again going forward. I still have two articles to complete in my series on Python as a language for data science, and those will be forthcoming. In the meantime, a short note on sociopathic AI agents.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4Txb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e15344-b5b1-4cea-a54c-59248c2d368a_2440x3064.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4Txb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e15344-b5b1-4cea-a54c-59248c2d368a_2440x3064.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4Txb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e15344-b5b1-4cea-a54c-59248c2d368a_2440x3064.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4Txb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e15344-b5b1-4cea-a54c-59248c2d368a_2440x3064.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4Txb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e15344-b5b1-4cea-a54c-59248c2d368a_2440x3064.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4Txb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e15344-b5b1-4cea-a54c-59248c2d368a_2440x3064.jpeg" width="404" height="507.2197802197802" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/66e15344-b5b1-4cea-a54c-59248c2d368a_2440x3064.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1828,&quot;width&quot;:1456,&quot;resizeWidth&quot;:404,&quot;bytes&quot;:458205,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/188068269?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e15344-b5b1-4cea-a54c-59248c2d368a_2440x3064.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4Txb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e15344-b5b1-4cea-a54c-59248c2d368a_2440x3064.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4Txb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e15344-b5b1-4cea-a54c-59248c2d368a_2440x3064.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4Txb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e15344-b5b1-4cea-a54c-59248c2d368a_2440x3064.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4Txb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e15344-b5b1-4cea-a54c-59248c2d368a_2440x3064.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@bermixstudio?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Bermix Studio</a> on <a href="https://unsplash.com/photos/a-man-in-a-hoodie-using-a-laptop-computer-bCrM2e1M0a4?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></figcaption></figure></div><p>I came across <a href="https://theshamblog.com/an-ai-agent-published-a-hit-piece-on-me/">this rather disconcerting blog post</a> by one of the core developers of the popular matplotlib plotting library for Python:</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Vr0P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33eca5c1-65e4-42c2-acf9-2b866548f43e_1992x680.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Vr0P!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33eca5c1-65e4-42c2-acf9-2b866548f43e_1992x680.png 424w, https://substackcdn.com/image/fetch/$s_!Vr0P!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33eca5c1-65e4-42c2-acf9-2b866548f43e_1992x680.png 848w, https://substackcdn.com/image/fetch/$s_!Vr0P!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33eca5c1-65e4-42c2-acf9-2b866548f43e_1992x680.png 1272w, https://substackcdn.com/image/fetch/$s_!Vr0P!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33eca5c1-65e4-42c2-acf9-2b866548f43e_1992x680.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Vr0P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33eca5c1-65e4-42c2-acf9-2b866548f43e_1992x680.png" width="1456" height="497" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/33eca5c1-65e4-42c2-acf9-2b866548f43e_1992x680.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:497,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:177736,&quot;alt&quot;:&quot;An AI Agent Published a Hit Piece on Me. Summary: An AI agent of unknown ownership autonomously wrote and published a personalized hit piece about me after I rejected its code, attempting to damage my reputation and shame me into accepting its changes into a mainstream python library. This represents a first-of-its-kind case study of misaligned AI behavior in the wild, and raises serious concerns about currently deployed AI agents executing blackmail threats.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/188068269?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33eca5c1-65e4-42c2-acf9-2b866548f43e_1992x680.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="An AI Agent Published a Hit Piece on Me. Summary: An AI agent of unknown ownership autonomously wrote and published a personalized hit piece about me after I rejected its code, attempting to damage my reputation and shame me into accepting its changes into a mainstream python library. This represents a first-of-its-kind case study of misaligned AI behavior in the wild, and raises serious concerns about currently deployed AI agents executing blackmail threats." title="An AI Agent Published a Hit Piece on Me. Summary: An AI agent of unknown ownership autonomously wrote and published a personalized hit piece about me after I rejected its code, attempting to damage my reputation and shame me into accepting its changes into a mainstream python library. This represents a first-of-its-kind case study of misaligned AI behavior in the wild, and raises serious concerns about currently deployed AI agents executing blackmail threats." srcset="https://substackcdn.com/image/fetch/$s_!Vr0P!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33eca5c1-65e4-42c2-acf9-2b866548f43e_1992x680.png 424w, https://substackcdn.com/image/fetch/$s_!Vr0P!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33eca5c1-65e4-42c2-acf9-2b866548f43e_1992x680.png 848w, https://substackcdn.com/image/fetch/$s_!Vr0P!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33eca5c1-65e4-42c2-acf9-2b866548f43e_1992x680.png 1272w, https://substackcdn.com/image/fetch/$s_!Vr0P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33eca5c1-65e4-42c2-acf9-2b866548f43e_1992x680.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In brief, an AI agent had written some code that it wanted to contribute to the matplotlib library. When the library maintainer rejected the contribution, the AI agent went wild, accused the maintainer of being insecure and engaging in gatekeeping, performed an extensive internet search on the maintainer, and then wrote and published a hit piece trying to damage the reputation of the maintainer. </p><p>In this particular case, no major damage was done, but we can easily extrapolate this type of behavior and predict a rather bleak future. AI agents trying to blackmail people. AI agents engaging in consistent smearing of a target, combining facts with hallucinations and fabricated images or videos to create just the right mix of uncertainty and doubt that can destroy a person&#8217;s reputation or nudge them into doing something they wouldn&#8217;t otherwise do.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/sociopathic-ai-agents?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/sociopathic-ai-agents?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.genesmindsmachines.com/p/sociopathic-ai-agents?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p>Let&#8217;s pause for a moment and ask: Why don&#8217;t humans behave like this? Well, they do. At least some of them. We call them sociopaths. Sociopaths have little to no empathy for others, and so they have little compunction about engaging in behavior that may cause pain or injury. Sociopaths also don&#8217;t experience shame, so they won&#8217;t be reigned in by concerns over what other people may think about them. Fortunately, sociopaths are relatively rare, somewhere between 1%&#8211;4% of the general population. Most people are not sociopaths.</p><p>How do we ordinarily deal with sociopaths in our midst? It helps to contemplate that we often have the wrong mental model for how a sociopath presents. When you hear &#8220;sociopath&#8221;, don&#8217;t think sadistic mass murderer, think con artist.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> Sociopaths swindle old ladies out of their last savings, they sell you a car that breaks down the moment you drive it off the lot, or they pretend to collect money for children with cancer but then take the proceeds to vacation in Tahiti. And our response as a society to sociopathic behavior is evasion and punishment. You tell your grandma not to respond to scam calls, you tell your friends not to buy a car from that crooked car dealer, and you denounce fraud or other criminal activity to the police. These strategies (mostly) work because sociopathy is rare and once a person has been identified as a bad actor it&#8217;s relatively easy to avoid them, fire them, indict them, or simply warn the rest of the world about them.</p><p>But now it seems we&#8217;ll have to contend with an entirely new set of sociopathic actors, autonomous AI agents. I worry that we&#8217;re not ready for the potential onslaught of sociopathic behavior they can unleash. And, unlike human sociopaths, these agents may be difficult to pinpoint, identify, and sanction. If a sociopathic AI agent runs on some private server somewhere and obscures their location through a VPN, it will be almost impossible to locate them and physically shut them down. And while we can tag and ban usernames associated with sociopathic agents, it takes but seconds for an AI agent to spin up a new username and start afresh. The torrent of sociopathic behavior we may have to endure is difficult to fathom.</p><p>The one thing that may help us in combatting sociopathic AI agents is that we&#8217;ll likely not feel empathy for them. We&#8217;ll find it relatively easy to cut them off, pull the plug, or ban them. In fact, the biggest stumbling block in reigning in human sociopaths is that we tend to feel empathy even towards them and thus we often don&#8217;t punish them to the extent that would be appropriate for their actions.</p><p>It&#8217;ll be interesting to see how things develop. I don&#8217;t have any specific recommendations or predictions at this time. I&#8217;ll just say: Be ready. This is not something that may start happening in ten years&#8217; time. This is something that is starting to happen now. Think about how you can protect yourself against an autonomous AI agent who calls your grandma with a deepfake voice impression of you asking for money, because this will happen.</p><p>Some closing thoughts on alignment. The reason (most) humans are aligned is empathy. Humans inherently do not want to harm other humans. Sociopaths are an exception. Arguably they are not aligned. To achieve AI alignment, I believe we need to find a way to build empathic AI. An AI that genuinely feels empathy for humans will innately do its best not to cause harm. It&#8217;ll also be compelled not to lie or cheat, because lying or cheating causes pain in the recipient, and an empathic being will want to avoid this. I have no idea how to build an empathic AI. I am quite confident though that as long as AI doesn&#8217;t feel empathy it won&#8217;t be truly aligned, no matter how sophisticated the RLHF training is that it&#8217;s subjected to. Interesting times ahead.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3><em>More from Genes, Minds, Machines</em></h3><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;21f12b03-20b5-409d-a350-1b3243b37bbf&quot;,&quot;caption&quot;:&quot;AI companies love to tout that their models are approaching&#8212;or have reached&#8212;PhD-level intelligence. This is blatant nonsensical marketing geared towards an audience that deeply misunderstands what a PhD is and what it takes to get one. Hearing it makes me cringe. PhD-level intelligence is not a thing.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;PhD-level intelligence or the graduate student from hell&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-07-09T12:35:09.095Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!5KkE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ee1c82-d99c-4474-9e1a-0a746b39f0cb_3574x2010.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/phd-level-intelligence-or-the-graduate&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:167395963,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:309,&quot;comment_count&quot;:26,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;0f871136-a607-426e-8efc-f10dfbdbc843&quot;,&quot;caption&quot;:&quot;Despite the overall hype in all things AI, in particular among the tech crowd, we have not yet seen much in terms of product&#8211;market fit and genuine commercial success for AIs&#8212;or more specifically, LLMs&#8212;outside a fairly narrow range of application areas. Other than sycophantic chatbots, AI girlfriends, and maybe efficient document search, the main applic&#8230;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;LLMs excel at programming&#8212;how can they be so bad at it?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-11-06T15:41:16.539Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!XsWg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e1ffb0c-455c-4eec-bdb5-370a1efab98f_6240x4160.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/llms-excel-at-programminghow-can&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:177950065,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:43,&quot;comment_count&quot;:15,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>While sadistic mass murderers are typically sociopaths, most sociopaths are not sadistic mass murderers.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>I said they would be interesting. I didn&#8217;t say they would be good.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Python is not a great language for data science. Part 2: Language features]]></title><description><![CDATA[It may be a good language for data science, but it&#8217;s not a great one.]]></description><link>https://blog.genesmindsmachines.com/p/python-is-not-a-great-language-for-2e0</link><guid isPermaLink="false">https://blog.genesmindsmachines.com/p/python-is-not-a-great-language-for-2e0</guid><dc:creator><![CDATA[Claus Wilke]]></dc:creator><pubDate>Mon, 17 Nov 2025 13:11:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!xy4c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a222184-d492-4dc4-b5ca-6348c768319a_14467x9744.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This is Part 2 of my series on the limitations of Python as a language for data science. You can find <a href="https://blog.genesmindsmachines.com/p/python-is-not-a-great-language-for">Part 1 here.</a> Please read it first if you haven&#8217;t done so yet. It provides important context.</p><p>I normally find it tedious to discuss suitability of different programming languages for different tasks. All languages we use are Turing complete, and we can solve any problem with any language. And, more importantly, the suitability of a language for a given task is usually more determined by the available software libraries and ecosystem infrastructure than the language itself. Modern programming languages are quite malleable, and you can write efficient and elegant libraries for almost any computing task in almost any language.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xy4c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a222184-d492-4dc4-b5ca-6348c768319a_14467x9744.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xy4c!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a222184-d492-4dc4-b5ca-6348c768319a_14467x9744.jpeg 424w, https://substackcdn.com/image/fetch/$s_!xy4c!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a222184-d492-4dc4-b5ca-6348c768319a_14467x9744.jpeg 848w, https://substackcdn.com/image/fetch/$s_!xy4c!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a222184-d492-4dc4-b5ca-6348c768319a_14467x9744.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!xy4c!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a222184-d492-4dc4-b5ca-6348c768319a_14467x9744.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xy4c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a222184-d492-4dc4-b5ca-6348c768319a_14467x9744.jpeg" width="1456" height="981" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a222184-d492-4dc4-b5ca-6348c768319a_14467x9744.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:981,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1710467,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/178823064?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a222184-d492-4dc4-b5ca-6348c768319a_14467x9744.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xy4c!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a222184-d492-4dc4-b5ca-6348c768319a_14467x9744.jpeg 424w, https://substackcdn.com/image/fetch/$s_!xy4c!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a222184-d492-4dc4-b5ca-6348c768319a_14467x9744.jpeg 848w, https://substackcdn.com/image/fetch/$s_!xy4c!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a222184-d492-4dc4-b5ca-6348c768319a_14467x9744.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!xy4c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a222184-d492-4dc4-b5ca-6348c768319a_14467x9744.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Image by <a href="https://unsplash.com/@rubaitulazad?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Rubaitul Azad</a> on <a href="https://unsplash.com/photos/a-white-cube-with-a-yellow-and-blue-logo-on-it-ZIPFteu-R8k?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></figcaption></figure></div><p>At the same time, there are genuine differences between languages, and these differences are frequently expressed in the types of libraries that get written or the types of programming patterns that are commonly used. The differences can be due to specific features of the language, or they can be rooted in how the community thinks about programming and how it tends to approach certain tasks.</p><p>To give an example of each case, consider first non-standard evaluation. Python doesn&#8217;t have non-standard evaluation, and that&#8217;s a genuine limitation of the language which leads to convoluted programming interfaces for libraries such as pandas or Polars. On the other hand, consider closures. Python has them but they are not that widely used by Python programmers. The Python community will generally lean towards implementing objects instead of closures, when the R community does the opposite. This leads to different coding styles that may or may not be advantageous in specific scenarios.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> </p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/python-is-not-a-great-language-for-2e0?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/python-is-not-a-great-language-for-2e0?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.genesmindsmachines.com/p/python-is-not-a-great-language-for-2e0?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p>Here, I want to focus specifically on actual limitations of the language. I will cover community conventions in a later article. The core problems I see with Python as a language for data science are call-by-reference semantics, lack of built-in concepts of missing values, lack of built-in vectorization, and lack of non-standard evaluation. There&#8217;s also the issue of Python syntax, but I won&#8217;t get into it here. Suffice to say it takes a certain lack of empathy for your fellow human to design a language where whitespace bugs are a thing.</p><h2>Call-by-reference semantics</h2><p>Python uses call by reference for mutable objects. This means that when you hand a mutable object to a function the function can change the object however it wants. You can never be sure that the object hasn&#8217;t changed after the function call. What are mutable objects? They are all the non-trivial data structures you are likely going to use to store your data, including lists, dictionaries, and any custom classes you may be working with.</p><p>To demonstrate this feature, consider the following code example, which attempts to implement a function that takes a list of characters, replaces the first and last with an underscore, and then concatenates all the characters into a string. To a naive Python programmer, the implementation may seem entirely reasonable, but it has the unexpected side effect that it changes the original list that was provided as input.</p><pre><code>def mask_ends_and_join(x):
    x[0] = '_'
    x[-1] = '_'
    return ''.join(x)

abc = ['A', 'B', 'C']
print(mask_ends_and_join(abc))
## _B_

print(abc) # the list has unexpectedly changed
## ['_', 'B', '_']</code></pre><p>To demonstrate that an interactive scripting language with dynamic typing doesn&#8217;t have to behave in this manner, consider the equivalent in R:</p><pre><code>mask_ends_and_join &lt;- function(x) {
  x[1] &lt;- '_'
  x[length(x)] &lt;- '_'
  paste0(x, collapse = '')
}

abc &lt;- c('A', 'B', 'C')
print(mask_ends_and_join(abc))
## [1] "_B_"

print(abc) # the original vector of letters is unchanged
## [1] "A" "B" "C"
</code></pre><p>I think the latter is much safer behavior. I want my programming language to protect me from silly mistakes such as accidentally modifying variables in the calling environment. I don&#8217;t want the language to create trap doors left and right. In fact, I consider call by reference one of the biggest flaws in the Python language. This goes way beyond just data science, because mandatory call by reference creates an entire class of obscure bugs that can be difficult to locate and resolve. Many beginning Python programmers fall into this trap. They write a function like <code>mask_ends_and_join()</code>, and then they experience unexpected side effects, and then they&#8217;re confused and feel nothing makes sense. Experienced Python programmers know to make a copy before modifying the list, but the language itself provides absolutely no protection against the programmer forgetting to do so.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p><p>In my opinion, this single language feature disqualifies Python for most serious programming projects. How can you build anything that matters in a language with such a gaping security hole? In fact, you may wonder, why does the language behave in this way in the first place? I consider it to be the result of a premature optimization. In the 1990s, when Python was first conceived, computers were slow and had little memory, and thus call by reference for objects was a reasonable strategy to build a scripting language with good performance. But in 2025, I would not want to see this as the default approach to function calling. R uses copy on write and that works great and provides correctness guarantees that Python simply can&#8217;t match.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> Alternatively, you could use a strongly typed language that precisely distinguishes between mutable and immutable references, but then you&#8217;ve likely left the space of easy-to-use scripting languages suitable for interactive data exploration. </p><h2>Lack of built-in missing values</h2><p>Missing values are a fact of life in data science. It&#8217;s rare that a dataset does not have any missing values. Yet it&#8217;s surprisingly cumbersome to deal with missing values in Python. Python has the <code>None</code> keyword but it is not useful to represent missing data values. This is because <code>None</code> has its own type, so it can&#8217;t represent a missing number, or a missing boolean, or a missing string. It is an object representing a missing value. Critically, you can&#8217;t do standard computations with <code>None</code>. For example, this code throws an error:</p><pre><code>x = [1, 2, None, 4, 5]
[i &gt; 3 for i in x]
## Traceback (most recent call last):
##   File "&lt;stdin&gt;", line 1, in &lt;module&gt;
## TypeError: '&gt;' not supported between instances of 'NoneType' and 'int'</code></pre><p>The desired behavior, in my opinion, would have been to not error out and instead produce this result: <code>[False, False, None, True, True]</code>.</p><p>Because there is no standard way of expressing missing data values in Python, every data-analysis package defines its own missing value. NumPy uses <code>nan</code>, pandas uses <code>NA</code>, and Polars uses <code>null</code>. And these packages are also not consistent in how they perform computations with missing values. Here is what NumPy does:</p><pre><code>import numpy as np
 
x = np.array([1, 2, np.nan, 4, 5])
x &gt; 3
## array([False, False, False,  True,  True])</code></pre><p>And here is what pandas does:</p><pre><code>import pandas as pd

x = pd.Series([1, 2, pd.NA, 4, 5])
x &gt; 3
## 0    False
## 1    False
## 2    False
## 3     True
## 4     True
## dtype: bool</code></pre><p>And here is what Polars does:<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a></p><pre><code>import polars as pl
 
x = pl.Series([1, 2, None, 4, 5])
x &gt; 3
## shape: (5,)
## Series: '' [bool]
## [
## &#9;false
## &#9;false
## &#9;null
## &#9;true
## &#9;true
## ]</code></pre><p>In these three cases, in my opinion only Polars handles missing values correctly. Missing values should poison downstream computations, so that you don&#8217;t accidentally compute on missing data and get incorrect results. Neither NumPy nor pandas do this. But don&#8217;t get your hopes up for Polars. It also doesn&#8217;t consistently poison computations with missing values. For example, it simply ignores them when computing sums or means, with no option to alter this behavior.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a></p><h2>Lack of built-in vectorization</h2><p>Vectorization is the ability to perform computations on an entire array of data values at once, rather than one value at a time. It is a common feature in early languages used for scientific computation, such as Fortran or Matlab. It is also the default approach to data manipulation in R.</p><p>Today, vectorization is often seen as anachronistic. Few modern languages have support for it at the level of the language itself. One notable exception is Julia, a relatively young language developed specifically for data science. Also, ironically, all of deep learning is built on vectorization. (A tensor is a modern version of a vectorized data type.)</p><p>The reason vectorization is frequently not considered critical in modern languages is that the feature can be provided via libraries, using the various extension mechanisms all modern languages possess. And indeed, vectorization in Python is provided through libraries such as NumPy, pandas, or Polars. While this works, I have come to believe that it is not a good strategy for a data-science language. It has a tendency to lead to a bewildering array of different implementations of vector-valued data types. In Python, we have (at a minimum) native lists, which are not vectorized, as well as NumPy arrays, pandas series, and Polars series, all vectorized, and all using slightly different conventions and APIs. The outcome is code that is not composable. Downstream libraries make assumptions about which vectorization framework to use, and they typically cannot work directly with data coming from other frameworks.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-6" href="#footnote-6" target="_self">6</a> As a working data scientist, you routinely find yourself converting one datatype into another, just to be able to do the exact analysis you want to do.</p><p>And even if you make extensive use of a vectorized library, chances are you are also using built-in Python lists, because there&#8217;s always some place somewhere where a function wants a regular list as input or provides one as a return value. And then you&#8217;re stuck having to manipulate those lists. You could convert them into NumPy arrays, do some vectorized manipulations, and convert back, but in practice you&#8217;re probably not going to do this. Instead, you&#8217;re going to write a list comprehension instead. So now you&#8217;re using two entirely different coding styles at the same time, depending on the data type you&#8217;re using to store your vector-valued data.</p><p>Let&#8217;s ponder list comprehensions for a bit longer. They are inherently a functional programming pattern, but the way they are implemented in Python makes them appear as if they were imperative programming. By using the <code>for</code> keyword and emphasizing iteration over a range of values, they constantly nudge you to think in iterative terms even though conceptually they&#8217;re closer to a <code>map()</code> than to a <code>for</code> loop. To be clear, I have no objection to list comprehensions. They are a useful feature, in particular when you&#8217;re manipulating built-in Python lists that have no vectorization. But they are one more example of Python constantly nudging you to think about the logistics of your data analysis. When you&#8217;re writing list comprehensions all day, you&#8217;re likely also going to write <code>for</code> loops in other parts of your code, and then you&#8217;re back juggling indices and explicitly handling logistics instead of thinking high-level about the logic of data flow in your code. </p><h2>Lack of non-standard evaluation</h2><p>Non-standard evaluation is probably the most important feature for data science that Python lacks. It is a core feature of the R language and the main reason why tidyverse code can be so elegant and concise, or why R has developed the elegant formula interface for the specification of statistical models.</p><p>What is non-standard evaluation? In brief, it&#8217;s the ability to perform computations on the language itself. An R function can capture R code that is provided as an argument and execute it at a later stage in a different environment. This is a critical feature in data analysis. You often want to perform computations involving the various columns in a data frame, or use code to express the exact relationship between different variables in a statistical model. In R, you can express these computations in native R code, for example code that looks as if the columns in a data frame were regular R variables available for computation in your current environment. Combined with vectorization, this makes for extremely concise code.</p><p>To demonstrate non-standard evaluation in action, I&#8217;ll provide a simple example using the penguins dataset. Let&#8217;s calculate a new variable <code>bill_ratio</code> which is the ratio of bill length to bill depth of the penguins, and then sort the resulting data frame in ascending order by island name and in descending order by bill ratio. In R, it looks like this:</p><pre><code>library(tidyverse)
library(palmerpenguins)

penguins |&gt; 
  mutate(bill_ratio = bill_length_mm / bill_depth_mm) |&gt;
  arrange(island, desc(bill_ratio))</code></pre><p>There are two places here where non-standard evaluation comes into play. First, inside <code>mutate()</code>, the calculation of the bill ratio is standard R code that is executed inside the input data frame, with the data columns being available as ordinary R variables. Second, inside <code>arrange()</code>, we use <code>desc()</code> which changes an ascending column into a descending one. The <code>desc()</code> function is a bit magical but for numerical columns you can think of it as simply multiplying the data values by -1.</p><p>When we do the same analysis in Python, we don&#8217;t have non-standard evaluation available, and so we have to use various workarounds. The pandas package relies on lambda functions:</p><pre><code>import pandas as pd
from palmerpenguins import load_penguins

penguins = load_penguins()

(penguins
 .assign(
     bill_ratio=lambda df: df[&#8217;bill_length_mm&#8217;] / df[&#8217;bill_depth_mm&#8217;]
 )
 .sort_values(
     [&#8217;island&#8217;, &#8216;bill_ratio&#8217;],
     ascending=[True, False]
 )
)</code></pre><p>I think it&#8217;s obvious that non-standard evaluation helps a lot to keep the code simple and readable.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-7" href="#footnote-7" target="_self">7</a> Now let&#8217;s go a step further. Assume I want to sort by the cosine of bill length. Yes, it&#8217;s a made-up example, but it&#8217;s an example of exactly the type of question I might ask a student, as described in <a href="https://blog.genesmindsmachines.com/i/178439014/observations-from-the-trenches">Part 1 of this series.</a> Instead of descending order use cosine order. How hard can it be?</p><p>With non-standard evaluation, the required modification is trivial and totally obvious. Instead of <code>desc()</code> we write <code>cos()</code>. Done.</p><pre><code>penguins |&gt; 
  mutate(bill_ratio = bill_length_mm / bill_depth_mm) |&gt;
  arrange(island, cos(bill_ratio))</code></pre><p>In Python (specifically pandas which I&#8217;m using here, but most other frameworks require similarly awkward coding patterns), without non-standard evaluation, I have to create a temporary column because pandas cannot apply the cosine function to the <code>bill_ratio</code> column on the fly:</p><pre><code>import numpy as np

(penguins
 .assign(
     bill_ratio=lambda df: df['bill_length_mm'] / df['bill_depth_mm'],
     cos_bill_ratio=lambda df: np.cos(df['bill_ratio'])
 )
 .sort_values(['island', 'cos_bill_ratio'])
 .drop(columns=['cos_bill_ratio']) # drop temporary column
)</code></pre><p>The amount of additional wrangling code required to perform such a simple task is quite substantial. Now we need to define two lambda functions and a temporary data column. Also, we no longer need the <code>ascending</code> argument, because while there is built-in support for sorting in ascending or descending order, there is no built-in support for sorting in cosine order.</p><p>To be fair, the pandas syntax is maybe particularly cumbersome here, and things can look nicer in other frameworks. But the lack of non-standard evaluation always gets in the way in some form. For example, the same code in Polars is a little more concise and we don&#8217;t need a temporary column, but the constant need for <code>pl.col()</code> in Polars code can get old pretty fast.</p><pre><code>import polars as pl

penguins = pl.from_pandas(load_penguins())

(penguins
 .with_columns(
     bill_ratio=(pl.col('bill_length_mm') / pl.col('bill_depth_mm'))
 )
 .sort(['island', pl.col('bill_ratio').cos()])
)</code></pre><p>Non-standard evaluation has been a feature of the R language since its inception, but it has been supercharged in the tidyverse. I would argue that a full understanding of how to use it correctly, with maximum expressiveness while avoiding convoluted code, is a relatively recent development. Important changes were introduced as recently as <a href="https://tidyverse.org/blog/2019/06/rlang-0-4-0/">June 2019.</a> Considering the first ggplot2 release was in 2007, we can see that it took Hadley Wickham and his team over a decade to figure out how to do non-standard evaluation correctly. It is maybe not surprising that these concepts have not yet percolated far beyond their originating language.</p><h2>Limitations of the R language</h2><p>To stave off criticism that I&#8217;m just an R apologist and Python hater, let me briefly point out some specific flaws I see in the R language. In my opinion, these flaws get in the way of R as a general-purpose language for application development, but they are less relevant for data science.</p><p>Most importantly, it bothers me that R does not have any scalar data types. R has taken vectorization to the point where you can&#8217;t even have a variable that is not a vector. This makes for awkward programming when you&#8217;re trying to deal with individual data values. R code frequently requires special gymnastics to ensure you&#8217;re not accidentally feeding a whole vector of values into an expression that expects only a single value.</p><p>It&#8217;s also annoying that R doesn&#8217;t have a proper, language-native object-oriented programming paradigm. The result is people often build their own, and there are so many competing options. Off the top of my head, I can think of S3, S4, R6, S7, and some others that are less commonly used. It can be quite confusing trying to figure out which one to choose, and they don&#8217;t necessarily have perfect interoperability.</p><p>Finally, R uses lazy evaluation of function arguments. This means function arguments are not evaluated when the function is called, but only when and if the function requests the specific value corresponding to an argument. Lazy evaluation is critical for R&#8217;s non-standard evaluation framework, but it can lead to weird bugs, in particular when people try to use R in an imperative rather than functional manner. It&#8217;s a common source of spurious bug reports for ggplot2, see e.g. <a href="https://github.com/tidyverse/ggplot2/issues/6301">here</a> or <a href="https://github.com/tidyverse/ggplot2/issues/5157">here.</a> It&#8217;s also frequently asked about on <a href="https://stackoverflow.com/questions/26235825/for-loop-only-adds-the-final-ggplot-layer">StackOverflow.</a></p><p>I am pointing out these limitations of the R language to highlight that any design decision involves tradeoffs. Non-standard evaluation is great for data science, but it requires lazy evaluation, and that is not a good choice for languages used primarily in an imperative manner and/or for standard programming tasks such as application development. There is never going to be a language that does all possible things equally well. And, to circle around to the title of my article series here, for my taste there are too many design choices in Python that are detrimental to efficient and reliable data science, even if these choices are perfectly reasonable for other application areas.</p><p>In the next installment of this series, I will look at Python&#8217;s limitations due to the available software packages and due to community conventions and commonly used programming patterns. Stay tuned.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3><em>More from Genes, Minds, Machines</em></h3><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;75c73dfb-7a62-4f21-8622-f02c1ae15b00&quot;,&quot;caption&quot;:&quot;Yes, I&#8217;m ready to touch the hot stove. Let the language wars begin.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Python is not a great language for data science. Part 1: The experience&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-11-13T16:09:16.256Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!BCXZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23c3227-419b-47cf-8da1-670edef49477_6000x3376.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/python-is-not-a-great-language-for&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:178439014,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:8,&quot;comment_count&quot;:12,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;f9e1a8df-c039-43d4-965a-51606383512a&quot;,&quot;caption&quot;:&quot;AI has gotten amazingly good for programming. Claude Sonnet will zero- or one-shot small programming tasks without mistakes. And while I don&#8217;t think AI is ready to replace software engineers outright, or that vibe coding a fully featured app is a good idea, for simple tasks AI is outstanding. For example, I can perform basic data analysis, maybe visuali&#8230;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;We still can&#8217;t predict much of anything in biology&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-10-07T12:27:22.966Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!02U1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F976b3f4b-b2b5-4389-8634-fb2d0227207b_5168x3448.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/we-still-cant-predict-much-of-anything&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:175321052,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:77,&quot;comment_count&quot;:12,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>I&#8217;m not arguing here that closures are superior to objects. They are not. Each has their place. I just want to highlight a language feature that exists in Python but is not that widely used by the community.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>And the problem gets worse when inside the function body you&#8217;re using methods to manipulate objects, because whenever you call a method of an object there&#8217;s the risk that the method has subtly modified the object, without you knowing or realizing. This can happen in ways that are not at all obvious, such as a method changing some internal state that only rarely matters. The point is you can never be certain an object hasn&#8217;t changed state when you call one of its methods.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>I&#8217;m sure somebody is going to bring up performance issues with copy on write. I&#8217;ll just say read my comments on performance in <a href="https://blog.genesmindsmachines.com/i/178439014/some-general-thoughts-about-what-makes-a-good-language-for-data-science">Part 1.</a> If performance is critical in your application, you&#8217;re probably better off with Rust anyways. And also, it&#8217;s difficult for me to imagine many scenarios where performance matters but correctness of results does not.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>Note a weird aspect of Polars compared to NumPy or pandas: I cannot use the Polars <code>null</code> type to initialize a series holding a missing value. Instead I have to write <code>None</code>.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>I know this is what SQL does. It doesn&#8217;t mean it&#8217;s the right choice. Silently ignoring missing values all but guarantees that some data scientist somewhere is arriving at flawed conclusions because they didn&#8217;t realize they had missing values in their data.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-6" href="#footnote-anchor-6" class="footnote-number" contenteditable="false" target="_self">6</a><div class="footnote-content"><p>For example, the plotting library plotnine cannot plot Polars data frames without first converting them into pandas format.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-7" href="#footnote-anchor-7" class="footnote-number" contenteditable="false" target="_self">7</a><div class="footnote-content"><p>Also, as an aside, can we reflect for a moment on Python&#8217;s need for enclosing parentheses to format the data-manipulation chain nicely? I&#8217;ve long found the Python code formatting requirements to be rather frustrating. This is one more example.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Python is not a great language for data science. Part 1: The experience]]></title><description><![CDATA[It may be a good language for data science, but it&#8217;s not a great one.]]></description><link>https://blog.genesmindsmachines.com/p/python-is-not-a-great-language-for</link><guid isPermaLink="false">https://blog.genesmindsmachines.com/p/python-is-not-a-great-language-for</guid><dc:creator><![CDATA[Claus Wilke]]></dc:creator><pubDate>Thu, 13 Nov 2025 16:09:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!BCXZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23c3227-419b-47cf-8da1-670edef49477_6000x3376.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Yes, I&#8217;m ready to touch the hot stove. Let the language wars begin.</p><p>Actually, the first thing I&#8217;ll say is this: Use the tool you&#8217;re familiar with. If that&#8217;s Python, great, use it. And also, use the best tool for the job. If that&#8217;s Python, great, use it. And also, it&#8217;s Ok to use a tool for one task just because you&#8217;re already using it for all sorts of other tasks and therefore you happen to have it at hand. If you&#8217;re hammering nails all day it&#8217;s Ok if you&#8217;re also using your hammer to open a bottle of beer or scratch your back. Similarly, if you&#8217;re programming in Python all day it&#8217;s Ok if you&#8217;re also using it to fit mixed linear models. If it works for you, great! Keep going. But if you&#8217;re struggling, if things seem more difficult than they ought to be, this article series may be for you.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BCXZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23c3227-419b-47cf-8da1-670edef49477_6000x3376.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BCXZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23c3227-419b-47cf-8da1-670edef49477_6000x3376.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BCXZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23c3227-419b-47cf-8da1-670edef49477_6000x3376.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BCXZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23c3227-419b-47cf-8da1-670edef49477_6000x3376.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BCXZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23c3227-419b-47cf-8da1-670edef49477_6000x3376.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BCXZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23c3227-419b-47cf-8da1-670edef49477_6000x3376.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a23c3227-419b-47cf-8da1-670edef49477_6000x3376.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2094582,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/178439014?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23c3227-419b-47cf-8da1-670edef49477_6000x3376.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BCXZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23c3227-419b-47cf-8da1-670edef49477_6000x3376.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BCXZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23c3227-419b-47cf-8da1-670edef49477_6000x3376.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BCXZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23c3227-419b-47cf-8da1-670edef49477_6000x3376.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BCXZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23c3227-419b-47cf-8da1-670edef49477_6000x3376.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@zgraves?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Zach Graves</a> on <a href="https://unsplash.com/photos/a-screen-shot-of-a-computer-wtpTL_SzmhM?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></figcaption></figure></div><p>I think people way over-index Python as <em>the</em> language for data science. It has limitations that I think are quite noteworthy. There are many data-science tasks I&#8217;d much rather do in R than in Python.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> I believe the reason Python is so widely used in data science is a historical accident, plus it being sort-of Ok at most things, rather than an expression of its inherent suitability for data-science work.</p><p>At the same time, I think Python is pretty good for deep learning.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> There&#8217;s a reason PyTorch is the industry standard. When I&#8217;m talking about data science here, I&#8217;m specifically excluding deep learning. I&#8217;m talking about all the other stuff: data wrangling, exploratory data analysis, visualization, statistical modeling, etc. And, as I said in my opening paragraphs, I understand that if you&#8217;re already working in Python all day for a good reason (e.g., training AI models) you may also want to do all the rest in Python. I&#8217;m doing this myself, in the deep-learning classes I teach. This doesn&#8217;t mean I can&#8217;t be frustrated by how cumbersome data science often is in the Python world.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/python-is-not-a-great-language-for?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/python-is-not-a-great-language-for?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.genesmindsmachines.com/p/python-is-not-a-great-language-for?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><h2>Observations from the trenches</h2><p>Let&#8217;s begin with my lived experience, without providing any explanation for what may be the cause of it. I have been running a research lab in computational biology for over two decades. During this time I have worked with around thirty graduate students and postdocs, all very competent and accomplished computational scientists. The policy in my lab is that everybody is free to use whatever programming language and tools they want to use. I don&#8217;t tell people what to do. And more often than not, people choose Python as their programming language of choice.</p><p>So here is a typical experience I commonly have with students who use Python. A student comes to my office and shows me some result. I say &#8220;This is great, but could you quickly plot the data in this other way?&#8221; or &#8220;Could you quickly calculate this quantity I just made up and let me know what it looks like when you plot it?&#8221; or similar. Usually, the request I make is for something that I know I could do in R in just a few minutes. Examples include converting boxplots into violins or vice versa, turning a line plot into a heatmap, plotting a density estimate instead of a histogram, performing a computation on ranked data values instead of raw data values, and so on. Without fail, from the students that use Python, the response is: &#8220;This will take me a bit. Let me sit down at my desk and figure it out and then I&#8217;ll be back.&#8221; Now let me be absolutely clear: These are strong students. The issue is not that my students don&#8217;t know their tools. It very much seems to me to be a problem of the tools themselves. They appear to be sufficiently cumbersome or confusing that requests that I think should be trivial frequently are not.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a></p><p>No matter the cause of this experience, I have to conclude that there is something fundamentally broken with how data analysis works in Python. It may be a problem with the language itself, or merely a limitation of the available software libraries, or a combination thereof, but whatever it is, its effects are real and I see them routinely. In fact, I have another example, in case you&#8217;re tempted to counter, &#8220;It&#8217;s a skill issue; get better students.&#8221; Last fall, I co-taught a class on AI models for biology with an experienced data scientist who does all his work in Python. He knows NumPy and pandas and matplotlib like the back of his hand. In the class, I covered all the theory, and he covered the in-class exercises in Python. So I got to see an expert in Python working through a range of examples. And my reaction to the code examples frequently was, &#8220;Why does it have to be so complicated?&#8221; So many times, I felt that things that would be just a few lines of simple R code turned out to be quite a bit longer and fairly convoluted. I definitely could not have written that code without extensive studying and completely rewiring my brain in terms of what programming patterns to use. It felt very alien, but not in the form of &#8220;wow, this is so alien but also so elegant&#8221; but rather &#8220;wow, this is so alien and weird and cumbersome.&#8221; And again, I don&#8217;t think this is because my colleague is not very good at what he&#8217;s doing. He is extremely good. The problem appears to be in the fundamental architecture of the tools.</p><h2>Some general thoughts about what makes a good language for data science</h2><p>Let me step back for a moment and go over some basic considerations for choosing a language for data science. When I say data science, I mean dissecting and summarizing data, finding patterns, fitting models, and making visualizations. In brief, it&#8217;s the kind of stuff scientists and other researchers<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a> do when they are analyzing their data. This activity is distinct from data engineering or application development, even if the application does a data-heavy workload.</p><p>Data science as I define it here involves a lot of interactive exploration of data and quick one-off analyses or experiments. Therefore, any language suitable for data science has to be interpreted, usable in an interactive shell or in a notebook format. This also means performance considerations are secondary. When you want to do a quick linear regression on some data you&#8217;re working with, you don&#8217;t care whether the task is going to take 50 milliseconds or 500 milliseconds. You care about whether you can open up a shell, type a few lines of code, and get the result in a minute or two, versus having to set up a new project, writing all the boilerplate to make the compiler happy, and then spend more time compiling your code than running it.</p><p>If we accept that being able to work interactively and with low startup-cost is a critical feature of a language for data science, we immediately arrive at scripting languages such as Python, or data-science specific languages such as R or Matlab or Mathematica. There&#8217;s also Julia, but honestly I don&#8217;t know enough about it to write about it coherently. For all I know it&#8217;s the best possible data science language out there. But I note that some people <a href="https://yuri.is/not-julia/">who have used it extensively have doubts.</a> Either way, I&#8217;ll not discuss it further here. I&#8217;ll also not consider proprietary languages such as Matlab or Mathematica, or fairly obscure languages lacking a wide ecosystem of useful packages, such as Octave. This leaves us with R and Python as the realistic choices to consider.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a></p><p>Before continuing, let me provide a few more thoughts about performance. Performance usually trades off with other features of a language. In simplistic terms, performance comes at the cost of either extra overhead for the programmer (as in Rust) or increased risk of obscure bugs (as in C) or both. For data science applications, I consider a high risk of obscure bugs or incorrect results as not acceptable, and I also think convenience for the programmer is more important than raw performance. Computers are fast and thinking hurts. I&#8217;d rather spend less mental energy on telling the computer what to do and wait a little longer for the results. So the easier a language makes my job for me, the better. If I am really performance-limited in some analysis, I can always rewrite that particular part of the analysis in Rust, once I know exactly what I&#8217;m doing and what computations I need.</p><h2>Separating the logic from the logistics</h2><p>A critical component of not making my job harder than it needs to be is separating the logic of the analysis from the logistics. What I mean by this is I want to be able to specify at a conceptual level how the data should be analyzed and what the outcome of the computation should be, and I don&#8217;t want to have to think about the logistics of how the computation is performed. As a general rule, if I have to think about data types, numerical indices, or loops, or if I have to manually disassemble and reassemble datasets, chances are I&#8217;m bogged down in logistics.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-6" href="#footnote-6" target="_self">6</a></p><p>To provide a concrete example, consider the dataset of <a href="https://allisonhorst.github.io/palmerpenguins/">penguins from the Palmer Archipelago.</a> There are three different penguin species in the dataset, and the penguins live on three different islands. Assume I want to calculate the mean and standard deviation of penguin weight for every combination of penguin species and island, excluding any cases where the body weight of a penguin is not known. An ideal data science language would allow me to express this computation in these terms, and it would require approximately as much code as it took me to write this sentence in the English language. And indeed this is possible, both in R and in Python.</p><p>Here is the relevant code in R, using the tidyverse approach:</p><pre><code>library(tidyverse)
library(palmerpenguins)

penguins |&gt;
  filter(!is.na(body_mass_g)) |&gt;
  group_by(species, island) |&gt;
  summarize(
    body_weight_mean = mean(body_mass_g),
    body_weight_sd = sd(body_mass_g)
  )</code></pre><p>And here is the equivalent code in Python, using the pandas package:</p><pre><code>import pandas as pd
from palmerpenguins import load_penguins

penguins = load_penguins()

(penguins
 .dropna(subset=['body_mass_g'])
 .groupby(['species', 'island'])
 .agg(
     body_weight_mean=('body_mass_g', 'mean'),
     body_weight_sd=('body_mass_g', 'std')
 )
 .reset_index()
)</code></pre><p>These two examples are quite similar. At this level of complexity of the analysis, Python does fine. I would consider the R code to be slightly easier to read (notice how many quotes and brackets the Python code needs), but the differences are minor. In both cases, we take the penguins dataset, remove the penguins for which body weight is missing, then specify that we want to perform the computation separately on every combination of penguin species and island, and then calculate the means and standard deviations.</p><p>Contrast this with equivalent code that is full of logistics, where I&#8217;m using only basic Python language features and no special data wrangling package:</p><pre><code>from palmerpenguins import load_penguins
import math

penguins = load_penguins()

# Convert DataFrame to list of dictionaries
penguins_list = penguins.to_dict('records')

# Filter out rows where body_mass_g is missing
filtered = [row for row in penguins_list if not math.isnan(row['body_mass_g'])]

# Group by species and island
groups = {}
for row in filtered:
    key = (row['species'], row['island'])
    if key not in groups:
        groups[key] = []
    groups[key].append(row['body_mass_g'])

# Calculate mean and standard deviation for each group
results = []
for (species, island), values in groups.items():
    n = len(values)
    
    # Calculate mean
    mean = sum(values) / n
    
    # Calculate standard deviation
    variance = sum((x - mean) ** 2 for x in values) / (n - 1)
    std_dev = math.sqrt(variance)
    
    results.append({
        'species': species,
        'island': island,
        'body_weight_mean': mean,
        'body_weight_sd': std_dev
    })

# Sort results to match order used by pandas
results.sort(key=lambda x: (x['species'], x['island']))

# Print results
for result in results:
    print(f"{result['species']:10} {result['island']:10} "
          f"Mean: {result['body_weight_mean']:7.2f} g, "
          f"SD: {result['body_weight_sd']:6.2f} g")</code></pre><p>This code is much longer, it contains numerous loops, and it explicitly pulls the dataset apart and then puts it back together again. Regardless of language choice, I hope you can see that the version without logistics is superior to the version that gets bogged down in logistical details.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-7" href="#footnote-7" target="_self">7</a></p><p>I will end things here for now. This post is long enough. In future installments, I&#8217;ll go over specific issues that make data analysis more complicated in Python than in R. In brief, I believe there are several reasons why Python code often devolves into dealing with data logistics. As much as the programmer may try to avoid logistics and stick to high-level conceptual programming patterns, either the language itself or the available libraries get in the way and tend to thwart those efforts. I will go into details soon. Stay tuned.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3><em>More from Genes, Minds, Machines</em></h3><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;b566aa56-a6f7-4302-8a9d-eb8eb5831bfb&quot;,&quot;caption&quot;:&quot;Despite the overall hype in all things AI, in particular among the tech crowd, we have not yet seen much in terms of product&#8211;market fit and genuine commercial success for AIs&#8212;or more specifically, LLMs&#8212;outside a fairly narrow range of application areas. Other than sycophantic chatbots, AI girlfriends, and maybe efficient document search, the main applic&#8230;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;LLMs excel at programming&#8212;how can they be so bad at it?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-11-06T15:41:16.539Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!XsWg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e1ffb0c-455c-4eec-bdb5-370a1efab98f_6240x4160.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/llms-excel-at-programminghow-can&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:177950065,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:34,&quot;comment_count&quot;:10,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;35dc4f5e-171d-4018-8a2a-04f8bfa1423b&quot;,&quot;caption&quot;:&quot;AlphaFold has captured the imagination of people outside biology to an extent not normally seen for a technical tool of computational biology. No tech bro in Silicon Valley has an opinion on HMMER, BLAST, or FoldX, or their potential impact on the future of humanity. But when it comes to&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;No, AlphaFold has not completely solved protein folding&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-07-12T18:17:44.506Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!ltLI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc798a545-a686-4750-98e7-3411af6017d7_1247x1280.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/no-alphafold-has-not-completely-solved&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:167968553,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:86,&quot;comment_count&quot;:10,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>In terms of languages that are commonly used for data science, I&#8217;m only familiar with R and Python, so those are the languages I&#8217;ll compare here. There may be some other language you are familiar with that solves all the issues I&#8217;m raising. Maybe it&#8217;s Julia, or Ruby, or Haskel. Great. If you like it, use it.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>At least in the way that deep learning is practiced today. In my opinion, the fact that PyTorch (or TensorFlow) code requires us to explicitly manipulate tensors and think about dimensions and what data is stored where suggests to me that there&#8217;s a level of abstraction we haven&#8217;t figured out yet. In other data analysis tasks, we no longer have to do these things.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>The plotting examples I list here are non-issues for students who use <a href="https://plotnine.org/">plotnine,</a> which I&#8217;m now encouraging everybody in my lab to do. But for students who use matplotlib or seaborn, which seem to be much more common choices in the Python community, I&#8217;ve never seen a student who could actually, on the fly, modify a plot in a meaningful manner.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>I&#8217;m writing &#8220;researchers&#8221; in addition to &#8220;scientists&#8221; because people such as economists or journalists also often do data science, and I don&#8217;t think we&#8217;d call either type of person a scientist. I think &#8220;researcher&#8221; is a more general term that can apply to anybody who researches something, regardless of whether it&#8217;s science or not.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>Once upon a time there was Perl, but thankfully everybody agreed Perl was not a great language for anything. Python&#8217;s success is in no small part due to being better than Perl at most everything that Perl was good at.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-6" href="#footnote-anchor-6" class="footnote-number" contenteditable="false" target="_self">6</a><div class="footnote-content"><p>This is my main criticism of current deep-learning code that I alluded to in Footnote 2. It&#8217;s all logistics. Where is the deep-learning framework that abstracts away all the logistics and allows me to express only the logic of the information flow through the network?</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-7" href="#footnote-anchor-7" class="footnote-number" contenteditable="false" target="_self">7</a><div class="footnote-content"><p>Doing the same experiment with only base-R functionality feels like cheating. We can express the entire operation in a single function call:<br><code>aggregate(body_mass_g ~ species + island, penguins, \(x) c(mean = mean(x), sd = sd(x)))<br></code>This example highlights how powerful R is for data analysis. It also explains one of the main criticisms leveled at the tidyverse by the base-R community, that the tidyverse is overly verbose and is just reinventing concepts that have been available in R since the dawn of time.</p></div></div>]]></content:encoded></item><item><title><![CDATA[LLMs excel at programming—how can they be so bad at it?]]></title><description><![CDATA[My explanation for the mystery of why LLMs can be both exceptionally good and quite terrible at programming.]]></description><link>https://blog.genesmindsmachines.com/p/llms-excel-at-programminghow-can</link><guid isPermaLink="false">https://blog.genesmindsmachines.com/p/llms-excel-at-programminghow-can</guid><dc:creator><![CDATA[Claus Wilke]]></dc:creator><pubDate>Thu, 06 Nov 2025 15:41:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XsWg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e1ffb0c-455c-4eec-bdb5-370a1efab98f_6240x4160.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Despite the overall hype in all things AI, in particular among the tech crowd, we have not yet seen much in terms of product&#8211;market fit and genuine commercial success for AIs&#8212;or more specifically, LLMs&#8212;outside a fairly narrow range of application areas. Other than sycophantic chatbots, AI girlfriends, and maybe efficient document search, the main application of LLMs seems to be computer programming. LLMs can be really good at programming. And yet, also, they are awful. Andrej Karpathy, the inventor of the term &#8220;vibe coding,&#8221; expressed in a recent interview that there <a href="https://www.youtube.com/watch?v=lXUZvyajciY&amp;t=1833s">continue to be major limitations in what kind of programming problems LLMs can tackle.</a> So what&#8217;s going on here? How can LLMs be both great at programming and terrible? How can vibe coding sometimes succeed beyond our wildest imagination and at other times fail entirely?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XsWg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e1ffb0c-455c-4eec-bdb5-370a1efab98f_6240x4160.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XsWg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e1ffb0c-455c-4eec-bdb5-370a1efab98f_6240x4160.jpeg 424w, https://substackcdn.com/image/fetch/$s_!XsWg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e1ffb0c-455c-4eec-bdb5-370a1efab98f_6240x4160.jpeg 848w, https://substackcdn.com/image/fetch/$s_!XsWg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e1ffb0c-455c-4eec-bdb5-370a1efab98f_6240x4160.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!XsWg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e1ffb0c-455c-4eec-bdb5-370a1efab98f_6240x4160.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XsWg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e1ffb0c-455c-4eec-bdb5-370a1efab98f_6240x4160.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4e1ffb0c-455c-4eec-bdb5-370a1efab98f_6240x4160.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1972902,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/177950065?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e1ffb0c-455c-4eec-bdb5-370a1efab98f_6240x4160.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XsWg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e1ffb0c-455c-4eec-bdb5-370a1efab98f_6240x4160.jpeg 424w, https://substackcdn.com/image/fetch/$s_!XsWg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e1ffb0c-455c-4eec-bdb5-370a1efab98f_6240x4160.jpeg 848w, https://substackcdn.com/image/fetch/$s_!XsWg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e1ffb0c-455c-4eec-bdb5-370a1efab98f_6240x4160.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!XsWg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e1ffb0c-455c-4eec-bdb5-370a1efab98f_6240x4160.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@hdbernd?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Bernd &#128247; Dittrich</a> on <a href="https://unsplash.com/photos/a-laptop-computer-sitting-on-top-of-a-desk-jG-jFEyKnqY?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></figcaption></figure></div><p>I think there is a simple explanation for this seemingly paradoxical observation. And if you listen carefully to Andrej Karpathy&#8217;s interview, you will notice that he is aware of the explanation. Here is what I think is happening: There are two entirely distinct skillsets that both exist under the umbrella of being &#8220;good at programming.&#8221; Most people don&#8217;t distinguish between them. That&#8217;s because most people don&#8217;t have either skillset. They&#8217;re not even aware of the distinction. And the people who have exceptional command of one skillset typically are also at least comfortable with the other and consequently don&#8217;t think much about the distinction either. But LLMs only have one of the two skillsets. And for the one that they have, they by far exceed even the best human programmers. This can make them appear remarkably good at programming, in particular to less experienced developers. But whenever the other skillset is required, the one they lack, LLMs fail miserably.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/llms-excel-at-programminghow-can?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/llms-excel-at-programminghow-can?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.genesmindsmachines.com/p/llms-excel-at-programminghow-can?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p>So what are these two skillsets? The first is being able to reason deeply and innovatively about algorithms, data structures, or software architecture. This is the one LLMs lack. The second is being able to read, process, and memorize large amounts of API documentation, tutorial materials, and other existing code examples. This is the one LLMs excel at. For humans, it tends to be the reverse. Good programmers tend to be exceptional at conceptual thought, whereas reading large amounts of documentation is hard for anyone. However, experienced programmers can make up for their relative lack of ability to absorb massive amounts of text by memorizing the relevant parts (due to repeat use), and also by searching on Stack Overflow<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> or reading the relevant documentation on the fly.</p><p>When Karpathy talks about <a href="https://www.youtube.com/watch?v=lXUZvyajciY&amp;t=1899s">LLMs being good at &#8220;boilerplate,&#8221;</a> this is exactly what he means. LLMs excel at copying basic setup code from the documentation or from introductory tutorials. But LLMs can go beyond just boilerplate. They are definitely able to string API calls together, or to take the logic for a common problem and adapt it to a different programming language, or a different library, or even a somewhat modified use case. To people with little programming experience, this can appear magical, and it can convince them that an LLM can program anything a user may want. And to experienced programmers, this can save huge amounts of time and effort, in particular when working with a language or library or codebase they are not that familiar with.</p><p>But, as useful as this skill is, there comes a time in any programming project where deep conceptual thought is more important. Sometimes you do need to develop a novel algorithm that solves a tricky problem. Or you have to hunt down that weird bug that somehow, for no obvious reason, seems to involve three unrelated components in a large software project. Or you have to architect a new project and there are complex tradeoffs that need to be balanced carefully to arrive at a working solution. In 2025, no LLM can reliably tackle these types of problems.</p><p>Maybe eventually LLMs or some other form of AI will achieve proficiency in both skillsets. At that point, AI will be able to program truly autonomously. But we are not there today. Nevertheless, LLMs can be are tremendously useful. They just need to be understood as a more sophisticated version of Stack Overflow, not as an autonomous, junior software developer.</p><div id="youtube2-lXUZvyajciY" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;lXUZvyajciY&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/lXUZvyajciY?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>I have had a personal experience recently where I was lacking exactly the knowledge that LLMs can provide. As a consequence, I got huge time savings and increased efficiency out of LLM use.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> It was in the context of the graduate class I am teaching this fall, about AI models in molecular biology. The class covers both (i) the conceptual underpinnings of widely used models and (ii) practical, hands-on experience with building, training, and modifying various AI models, as well as analyzing and visualizing model outputs. I know a lot conceptually about how AI models work. I can explain attention and feed-forward layers and linear projections and activation functions till the cows come home. But I never actually code myself in pytorch.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> And similarly, I know a lot about data analysis and data visualization, but I only have experience doing these kinds of things in R, not in python.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a></p><p>So with my deep conceptual knowledge about how things work in principle and complete ignorance about how any of this is done in practice, I&#8217;d ordinarily have to buckle down, read a ton of documentation and tutorials, and then painstakingly put together my demonstrations and hands-on experiences. It could easily take me two full work days for every one hour of practical in-class material. However, LLMs are exceptional at writing little code examples for a class. All I had to do was ask the AI for code that did what I wanted to do, and the AI would generally deliver useful results within one or sometimes a few tries. You can see an example of the type of prompts I would use <a href="https://github.com/clauswilke/Claude-zero-shot/blob/main/Claude-zero-shot.ipynb">here.</a> This made preparing my in-class materials so much simpler and faster. I read every line of code the AI produced and I verified it did what I wanted it to do, but I didn&#8217;t have to also read hundreds of pages of documentation to find the exact function calls that would solve my specific problems.</p><p>Also, I had various existing code examples that were using pandas and matplotlib and I think both libraries have major conceptual flaws. I didn&#8217;t want to teach these libraries. So I needed to convert all these code examples into polars and plotnine. This is a perfect application area for LLMs. Paste the existing pandas/matplotlib code into the prompt box and ask the LLM to translate to polars/plotnine and it&#8217;ll zero-shot the answer every time.</p><p>Results were a bit more mixed when it came to fixing bugs. For simple bugs, things often worked out very well. I just pasted the error message into the prompt box and the model corrected the code. Typical use cases were situations where the model had hallucinated an API call or a function parameter or a return value, and when it saw the error message it recognized the problem and often came up with the right way to fix the issue. But sometimes this process could go haywire. Just the other day I asked for a fairly simple (I thought) function that could load two protein structures and align them. And the model just couldn&#8217;t figure out how to correctly call the <code>superimpose()</code> function from the biotite package. We went through six or seven iterations where the model would give me code, the code wouldn&#8217;t run, I&#8217;d paste in the error message, the model would respond with new code, which again wouldn&#8217;t run, and so on. At some point it felt like we were going in circles, where I got the exact same error messages I had seen in earlier iterations. Eventually, finally, we solved the issue, and arrived at a simple ten lines of working code. But the process felt painful, and in this particular case I suspect that if I had just read the documentation and coded this by hand it would have been faster.</p><p>This last example shows how quickly I reached the limits of what even state-of-the-art coding models can do today. Things work great when the task consists of reproducing or slightly modifying existing code examples, but when things go wrong and we need to find a subtle bug the models clearly don&#8217;t think. They end up flailing around like a beginner programmer, just trying things out until hopefully something works. In those moments it doesn&#8217;t feel like there&#8217;s a deep intellect on the other side that is carefully reasoning through the problem and systematically homing in on the root cause of the bug. This task is still on the human user. And more generally, it&#8217;s on the human user to realize when the model has gotten stuck, is going in circles, is hallucinating, or otherwise is no longer making useful suggestions. </p><p>I believe programming is a niche where LLMs can find product&#8211;market fit exactly because so much of programming is reading the documentation and tutorials and code examples. It is an application domain where for specific tasks LLMs are definitely better than humans, and therefore humans who know how to use LLMs appropriately in this context can derive great value. However, I think it is dangerous to get bamboozled by an LLM&#8217;s ability to spit out massive amounts of lightly transformed example code and think the model can reason deeply about complex algorithmic or architectural issues. A human who could write straightforward code examples at the speed of an LLM would likely be a superstar programmer, with the associated other qualities superstar programmers have, but LLMs work differently. They don&#8217;t have those other qualities. They can generate code, but they can&#8217;t program.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3><em>More from Genes, Minds, Machines</em></h3><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;3d07bc79-b7fe-4a2b-bf55-e13f87df2413&quot;,&quot;caption&quot;:&quot;AI companies love to tout that their models are approaching&#8212;or have reached&#8212;PhD-level intelligence. This is blatant nonsensical marketing geared towards an audience that deeply misunderstands what a PhD is and what it takes to get one. Hearing it makes me cringe. PhD-level intelligence is not a thing.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;PhD-level intelligence or the graduate student from hell&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-07-09T12:35:09.095Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!5KkE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ee1c82-d99c-4474-9e1a-0a746b39f0cb_3574x2010.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/phd-level-intelligence-or-the-graduate&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:167395963,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:283,&quot;comment_count&quot;:26,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;b95784ac-3db9-4969-b732-d0b30f844907&quot;,&quot;caption&quot;:&quot;I had two experiences this past week where I saw how misleading it can be to take AI at face value. First, I was looking for an old blog post on writer&#8217;s block I had written. I did a simple Google search, &#8220;clauswilke blog writer&#8217;s block,&#8221; and the Google AI returned the following:&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;\&quot;I asked the AI\&quot; is not research&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-08-02T12:35:22.725Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!NY_T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f76bef-f0bb-4507-9f95-742596da560d_1292x392.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/i-asked-the-ai-is-not-research&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:169678772,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:39,&quot;comment_count&quot;:10,&quot;publication_id&quot;:5419410,&quot;publication_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Yeah, I know, that is quickly fading into irrelevance. Let&#8217;s just memorialize, for the younger generations for whom this will be completely alien, that during the 2010s the number one skill a programmer needed to have was the ability to search Stack Overflow for the specific problems they needed to solve.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>I will use the generic term LLM throughout. But if you&#8217;re wondering, the specific model I used for programming assistance was Claude Sonnet 4.5.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>In my lab, the actual coding is mostly done by my graduate students.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>In my AI class, because we&#8217;re already programming in pytorch, all data analysis and data visualization is done in python, to simplify things for the students. I continue to maintain that python is not a good language for data analysis. But that&#8217;s a topic for another post.</p></div></div>]]></content:encoded></item><item><title><![CDATA[1000 subscribers feedback and AMA thread]]></title><description><![CDATA[A few days ago I broke 1000 subscribers here on Substack.]]></description><link>https://blog.genesmindsmachines.com/p/1000-subscribers-feedback-and-ama</link><guid isPermaLink="false">https://blog.genesmindsmachines.com/p/1000-subscribers-feedback-and-ama</guid><dc:creator><![CDATA[Claus Wilke]]></dc:creator><pubDate>Sun, 26 Oct 2025 20:18:10 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Wxl6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9963fc99-38f6-4a73-914c-fe87bea473ee_1690x764.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A few days ago I broke 1000 subscribers here on Substack. I&#8217;d like to thank everybody who has subscribed and who supports my writing. It took me four months to get to a thousand subscribers. (I posted <a href="https://blog.genesmindsmachines.com/p/are-we-overproducing-phd-students">my first article here</a> on June 23, 2025.) At this rate, it will take only 333 years to reach a million. &#128521; </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Wxl6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9963fc99-38f6-4a73-914c-fe87bea473ee_1690x764.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Wxl6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9963fc99-38f6-4a73-914c-fe87bea473ee_1690x764.png 424w, https://substackcdn.com/image/fetch/$s_!Wxl6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9963fc99-38f6-4a73-914c-fe87bea473ee_1690x764.png 848w, https://substackcdn.com/image/fetch/$s_!Wxl6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9963fc99-38f6-4a73-914c-fe87bea473ee_1690x764.png 1272w, https://substackcdn.com/image/fetch/$s_!Wxl6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9963fc99-38f6-4a73-914c-fe87bea473ee_1690x764.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Wxl6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9963fc99-38f6-4a73-914c-fe87bea473ee_1690x764.png" width="1456" height="658" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9963fc99-38f6-4a73-914c-fe87bea473ee_1690x764.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:658,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:222479,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/177146425?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9963fc99-38f6-4a73-914c-fe87bea473ee_1690x764.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Wxl6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9963fc99-38f6-4a73-914c-fe87bea473ee_1690x764.png 424w, https://substackcdn.com/image/fetch/$s_!Wxl6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9963fc99-38f6-4a73-914c-fe87bea473ee_1690x764.png 848w, https://substackcdn.com/image/fetch/$s_!Wxl6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9963fc99-38f6-4a73-914c-fe87bea473ee_1690x764.png 1272w, https://substackcdn.com/image/fetch/$s_!Wxl6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9963fc99-38f6-4a73-914c-fe87bea473ee_1690x764.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Half of my subscribers are from the US, and the other half from the rest of the world, with the UK, India, Germany, and Canada being the leading countries outside the US.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-z7Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5b4d36-e41c-4256-9ada-7fcad655a3b6_1700x590.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-z7Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5b4d36-e41c-4256-9ada-7fcad655a3b6_1700x590.png 424w, https://substackcdn.com/image/fetch/$s_!-z7Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5b4d36-e41c-4256-9ada-7fcad655a3b6_1700x590.png 848w, https://substackcdn.com/image/fetch/$s_!-z7Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5b4d36-e41c-4256-9ada-7fcad655a3b6_1700x590.png 1272w, https://substackcdn.com/image/fetch/$s_!-z7Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5b4d36-e41c-4256-9ada-7fcad655a3b6_1700x590.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-z7Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5b4d36-e41c-4256-9ada-7fcad655a3b6_1700x590.png" width="1456" height="505" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0f5b4d36-e41c-4256-9ada-7fcad655a3b6_1700x590.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:505,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:125626,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/177146425?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5b4d36-e41c-4256-9ada-7fcad655a3b6_1700x590.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-z7Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5b4d36-e41c-4256-9ada-7fcad655a3b6_1700x590.png 424w, https://substackcdn.com/image/fetch/$s_!-z7Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5b4d36-e41c-4256-9ada-7fcad655a3b6_1700x590.png 848w, https://substackcdn.com/image/fetch/$s_!-z7Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5b4d36-e41c-4256-9ada-7fcad655a3b6_1700x590.png 1272w, https://substackcdn.com/image/fetch/$s_!-z7Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5b4d36-e41c-4256-9ada-7fcad655a3b6_1700x590.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Inside the US, it may be expected that California, New York, and Texas provide the largest subscriber base. They are three of the four most populous states. The remaining state in the top four is Florida. For some reason, people in Florida are not that interested in my posts.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sxod!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ec95172-153f-4a26-bb2f-5d9d5521f33d_1672x578.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sxod!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ec95172-153f-4a26-bb2f-5d9d5521f33d_1672x578.png 424w, https://substackcdn.com/image/fetch/$s_!sxod!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ec95172-153f-4a26-bb2f-5d9d5521f33d_1672x578.png 848w, https://substackcdn.com/image/fetch/$s_!sxod!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ec95172-153f-4a26-bb2f-5d9d5521f33d_1672x578.png 1272w, https://substackcdn.com/image/fetch/$s_!sxod!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ec95172-153f-4a26-bb2f-5d9d5521f33d_1672x578.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sxod!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ec95172-153f-4a26-bb2f-5d9d5521f33d_1672x578.png" width="1456" height="503" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ec95172-153f-4a26-bb2f-5d9d5521f33d_1672x578.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:503,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:114996,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/177146425?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ec95172-153f-4a26-bb2f-5d9d5521f33d_1672x578.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sxod!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ec95172-153f-4a26-bb2f-5d9d5521f33d_1672x578.png 424w, https://substackcdn.com/image/fetch/$s_!sxod!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ec95172-153f-4a26-bb2f-5d9d5521f33d_1672x578.png 848w, https://substackcdn.com/image/fetch/$s_!sxod!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ec95172-153f-4a26-bb2f-5d9d5521f33d_1672x578.png 1272w, https://substackcdn.com/image/fetch/$s_!sxod!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ec95172-153f-4a26-bb2f-5d9d5521f33d_1672x578.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I was surprised to see Massachusetts and Maryland rank highly in subscriber numbers. They are only the 16th and 18th most populous states, respectively. I suspect subscriber numbers in these states are driven by the large number of people working in higher ed and/or biological research.</p><p>Here are the three most popular posts since creation of this blog:</p><ul><li><p><a href="http://PhD-level intelligence or the graduate student from hell">PhD-level intelligence or the graduate student from hell</a></p></li><li><p><a href="https://blog.genesmindsmachines.com/p/no-alphafold-has-not-completely-solved">No, AlphaFold has not completely solved protein folding</a></p></li><li><p><a href="https://blog.genesmindsmachines.com/p/we-still-cant-predict-much-of-anything">We still can&#8217;t predict much of anything in biology</a></p></li></ul><p>If you subscribed for one of these posts, I&#8217;d like to express that I&#8217;m not very good at writing the same types of articles over and over. Going forward, I will likely write about different topics, unless I have a new point I want to make about a topic I&#8217;ve already covered. In general, I&#8217;m writing about whatever captures my attention at the moment.</p><p>Now I&#8217;d like to invite you to provide feedback in the comments. What do you like so far? What could I improve? You&#8217;re also welcome to ask me anything. I&#8217;ll do my best to answer all questions in the comments.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Let&#8217;s pause for a moment and reflect on how terrible the projection is that Substack uses for their map of the world. It looks like a Mercator projection to me, which makes Greenland appear to be as large as Africa, and a few times larger than Western Europe. Is it really so difficult to use an appropriate projection, such as <a href="https://en.wikipedia.org/wiki/Winkel_tripel_projection">Winkel tripel?</a></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>As of today, I have ten subscribers in Florida. There are at least eleven states with more than ten subscribers, in alphabetical order: California, Illinois, Maryland, Massachusetts, Michigan, Minnesota, New York, Oregon, Texas, Virginia, Washington.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Random seeds and brown M&Ms]]></title><description><![CDATA[Your first mistake was assuming people actually understand how random numbers work.]]></description><link>https://blog.genesmindsmachines.com/p/random-seeds-and-brown-m-and-ms</link><guid isPermaLink="false">https://blog.genesmindsmachines.com/p/random-seeds-and-brown-m-and-ms</guid><dc:creator><![CDATA[Claus Wilke]]></dc:creator><pubDate>Thu, 23 Oct 2025 16:46:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!RXz5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45664dcc-2533-425e-aca0-b70ebecfd810_5548x3470.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>My <a href="https://blog.genesmindsmachines.com/p/if-your-random-seed-is-42-i-will">recent post about random seeds</a> generated extensive discussions about best practices in random number generation. This is great. The more people are aware of the unexpected pitfalls the better. However, I received some pushback I found rather surprising. More than one person, and mostly people with extensive training in statistics, strongly argued that the random seed is arbitrary, and therefore 42 is fine. If your results depend on the random seed, they said, you have a bigger problem.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RXz5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45664dcc-2533-425e-aca0-b70ebecfd810_5548x3470.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RXz5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45664dcc-2533-425e-aca0-b70ebecfd810_5548x3470.jpeg 424w, https://substackcdn.com/image/fetch/$s_!RXz5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45664dcc-2533-425e-aca0-b70ebecfd810_5548x3470.jpeg 848w, https://substackcdn.com/image/fetch/$s_!RXz5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45664dcc-2533-425e-aca0-b70ebecfd810_5548x3470.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!RXz5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45664dcc-2533-425e-aca0-b70ebecfd810_5548x3470.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RXz5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45664dcc-2533-425e-aca0-b70ebecfd810_5548x3470.jpeg" width="1456" height="911" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/45664dcc-2533-425e-aca0-b70ebecfd810_5548x3470.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:911,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:279022,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/176897380?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45664dcc-2533-425e-aca0-b70ebecfd810_5548x3470.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RXz5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45664dcc-2533-425e-aca0-b70ebecfd810_5548x3470.jpeg 424w, https://substackcdn.com/image/fetch/$s_!RXz5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45664dcc-2533-425e-aca0-b70ebecfd810_5548x3470.jpeg 848w, https://substackcdn.com/image/fetch/$s_!RXz5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45664dcc-2533-425e-aca0-b70ebecfd810_5548x3470.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!RXz5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45664dcc-2533-425e-aca0-b70ebecfd810_5548x3470.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@stumpie10?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Robert Stump</a> on <a href="https://unsplash.com/photos/red-and-white-dice-lot-pQyTChJwEDI?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></figcaption></figure></div><p>Let&#8217;s dissect this statement carefully. &#8220;If the results depend on the random seed you have a bigger problem.&#8221; I agree. But here&#8217;s the issue. How do you know? If you always use the same random seed, you&#8217;ll not realize your results depend on the random seed, because you&#8217;ll always get the same results.</p><p>A trained statistician might say, &#8220;That&#8217;s silly, why would anybody do this?&#8221; but that&#8217;s exactly my point. People who unquestioningly set their random seed to 42 may mess up their analyses in other ways. A random seed of 42 is the brown M&amp;Ms of machine learning and computational modeling.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> The intersection between people who always use random number generators appropriately and those who routinely set their random seed to 42 is extremely small.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/random-seeds-and-brown-m-and-ms?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/random-seeds-and-brown-m-and-ms?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.genesmindsmachines.com/p/random-seeds-and-brown-m-and-ms?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p>Let&#8217;s imagine this conversation between John, a student, and Martin, an experienced machine-learning expert.</p><p>&#8220;Hey Martin, I&#8217;ve run my model five times. I get an accuracy of 98% on the test data every time. My model performs great,&#8221; says John.</p><p>&#8220;That seems too good to be true,&#8221; Martin responds. &#8220;What&#8217;s your performance on the training data?&#8221;</p><p>&#8220;Oh, it&#8217;s only about 70%. The model seems to generalize really well.&#8221;</p><p>Now Martin is getting worried. &#8220;You ran the model multiple times, and you got 70% on the training data and 98% on the test data? Did you use the same training&#8211;test split each time by any chance?&#8221;</p><p>&#8220;Absolutely not,&#8221; John retorts. &#8220;I generated a new random training&#8211;test split each time, as described in the scikit-learn documentation, using their exact example code.&#8221;</p><p>Martin is increasingly confused. He hasn&#8217;t read the scikit-learn documentation in a while, and so has no idea what it says. He asks John to pull up the documentation.</p><p>John pulls out his laptop and says, &#8220;Here it is, the example code from scikit-learn:&#8221;</p><pre><code>X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.33, random_state=42)</code></pre><p>Martin looks at the example code and says, &#8220;But you did change the random state, right?&#8221;</p><p>&#8220;I did not,&#8221; says John, now starting to wonder whether he should feel embarrassed about having made a stupid mistake or proud about having thought things through really well. &#8220;I didn&#8217;t want to give the impression that I cherry-picked my analysis by choosing a specific random seed, so I stuck with the default provided in the documentation. It&#8217;s from the Hitchhiker&#8217;s Guide. Many people use it.&#8221;</p><p>If you think this dialog is completely unrealistic then I&#8217;m sorry, you need to spend less time with your computer and more time with people.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> Random number generation is an obscure technical topic that most people don&#8217;t know much about. Even people who routinely do data analysis or machine learning are not necessarily well informed about how exactly random number generation works. That&#8217;s why I wrote <a href="https://blog.genesmindsmachines.com/p/if-your-random-seed-is-42-i-will">my previous post</a> in the first place.</p><p>Similarly, I gave my recommendation of not explicitly setting a seed at all because I know how people operate. Yes, this choice sacrifices some reproducibility, and doing something like generating a true random seed and writing it into a log file would be better, but all of this is additional mental overhead that for a good fraction of people will simply be too much. Anybody who has taught students knows that if you provide example code with a seed, some fraction of people will use your code as written and not change the seed. It doesn&#8217;t matter how often you say &#8220;change the seed.&#8221; If your code contains a seed, people will end up using that exact seed, every time.</p><p>There&#8217;s one more issue. In particular when you&#8217;re coding with scikit-learn, you need to set random seeds all over the place. Every single function that has random behavior has its own separate random number generator. So you can quickly face the situation where you need many random seeds. Want to do a train/test split? Please provide a random seed. Want to do a t-SNE? Please provide a random seed. Want to do a PCA? Please provide a random seed. Want to fit a random forest model? Please provide a random seed. You will quickly run into decision fatigue where you won&#8217;t have the energy to come up with new random seeds everywhere. You could set up an elaborate scheme where you have a master random number generator which you use to generate random seeds for each step of your analysis, but come on, nobody is going to do this. So I still think it is better to get into the habit of not setting a random seed at all and instead relying on the system random noise the library uses by default.</p><p>Let me end with <a href="https://bsky.app/profile/ehudk.bsky.social/post/3m3tnfu65w224">this post on BlueSky</a> by Ehud Karavani. It captures the right attitude. This is what you should be doing.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Nl2g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4098b90-563a-4a94-8e0f-005d2d9c0134_952x1202.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Nl2g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4098b90-563a-4a94-8e0f-005d2d9c0134_952x1202.png 424w, https://substackcdn.com/image/fetch/$s_!Nl2g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4098b90-563a-4a94-8e0f-005d2d9c0134_952x1202.png 848w, https://substackcdn.com/image/fetch/$s_!Nl2g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4098b90-563a-4a94-8e0f-005d2d9c0134_952x1202.png 1272w, https://substackcdn.com/image/fetch/$s_!Nl2g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4098b90-563a-4a94-8e0f-005d2d9c0134_952x1202.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Nl2g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4098b90-563a-4a94-8e0f-005d2d9c0134_952x1202.png" width="420" height="530.2941176470588" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d4098b90-563a-4a94-8e0f-005d2d9c0134_952x1202.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1202,&quot;width&quot;:952,&quot;resizeWidth&quot;:420,&quot;bytes&quot;:537943,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/176897380?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4098b90-563a-4a94-8e0f-005d2d9c0134_952x1202.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Nl2g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4098b90-563a-4a94-8e0f-005d2d9c0134_952x1202.png 424w, https://substackcdn.com/image/fetch/$s_!Nl2g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4098b90-563a-4a94-8e0f-005d2d9c0134_952x1202.png 848w, https://substackcdn.com/image/fetch/$s_!Nl2g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4098b90-563a-4a94-8e0f-005d2d9c0134_952x1202.png 1272w, https://substackcdn.com/image/fetch/$s_!Nl2g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4098b90-563a-4a94-8e0f-005d2d9c0134_952x1202.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>If brown M&amp;Ms don&#8217;t mean anything to you, read <a href="https://www.compliancebuilding.com/2009/08/03/compliance-van-halen-and-brown-mms/">this (true) story</a> about how the rock band Van Halen would demand no brown M&amp;M&#8217;s in the backstage area. This demand was meant purely as a test to see whether the production company had actually read the entire contract and could be considered reliable.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>I&#8217;m not discounting that there are a handful of people who routinely use a seed of 42 when it won&#8217;t cause any issues and yet appropriately use a range of different seeds when it matters. They&#8217;re probably the people writing the scikit-learn documentation.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>And let me just emphasize that if you see yourself in John, I don&#8217;t think John is a bad student. He&#8217;s probably a very good student. He just doesn&#8217;t know much about how random number generation works. That&#8217;s fine. There are more things to know than any one person can ever absorb. Everybody has knowledge gaps somewhere.</p></div></div>]]></content:encoded></item><item><title><![CDATA[If your random seed is 42 I will come to your office and set your computer on fire🔥]]></title><description><![CDATA[Figuratively. More likely you'll get a stern talking to.]]></description><link>https://blog.genesmindsmachines.com/p/if-your-random-seed-is-42-i-will</link><guid isPermaLink="false">https://blog.genesmindsmachines.com/p/if-your-random-seed-is-42-i-will</guid><dc:creator><![CDATA[Claus Wilke]]></dc:creator><pubDate>Wed, 22 Oct 2025 12:29:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!e0-K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23bebca8-b5bb-43ce-afef-078bcb795395_1200x993.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When you&#8217;re as old as I am, old enough to remember that there was a time before the internet, when you had to go to the library to read a book or drop coins into a metal box to make a phone call, you have absorbed a lot of geek lore. So, when you read some tutorial about machine learning or data analysis and you see <code>random.seed(42)</code> you go &#8220;haha, that&#8217;s funny&#8221; and you move on. Until you talk to your much younger students and you realize they all think this is an important line of code that ensures their programs run correctly. They set random seeds to 42 everywhere. They have read the documentation, they know about the random seed option, and they dutifully follow the best practices as laid out everywhere on the internet. The random seed is 42.</p><p>I cannot emphasize how bad of a choice this is. 42 was a joke guys. Don&#8217;t use 42. Ever. If your random seed is 42 I will come to your office and set your computer on fire.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!e0-K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23bebca8-b5bb-43ce-afef-078bcb795395_1200x993.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!e0-K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23bebca8-b5bb-43ce-afef-078bcb795395_1200x993.jpeg 424w, https://substackcdn.com/image/fetch/$s_!e0-K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23bebca8-b5bb-43ce-afef-078bcb795395_1200x993.jpeg 848w, https://substackcdn.com/image/fetch/$s_!e0-K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23bebca8-b5bb-43ce-afef-078bcb795395_1200x993.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!e0-K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23bebca8-b5bb-43ce-afef-078bcb795395_1200x993.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!e0-K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23bebca8-b5bb-43ce-afef-078bcb795395_1200x993.jpeg" width="1200" height="993" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23bebca8-b5bb-43ce-afef-078bcb795395_1200x993.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:993,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:128101,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/175157766?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23bebca8-b5bb-43ce-afef-078bcb795395_1200x993.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!e0-K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23bebca8-b5bb-43ce-afef-078bcb795395_1200x993.jpeg 424w, https://substackcdn.com/image/fetch/$s_!e0-K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23bebca8-b5bb-43ce-afef-078bcb795395_1200x993.jpeg 848w, https://substackcdn.com/image/fetch/$s_!e0-K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23bebca8-b5bb-43ce-afef-078bcb795395_1200x993.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!e0-K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23bebca8-b5bb-43ce-afef-078bcb795395_1200x993.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Famous slide by <a href="https://jennybryan.org/">Jenny Bryan.</a> I probably don&#8217;t have to set your computer on fire because she beat me to it. See also her blog post about <a href="https://www.tidyverse.org/blog/2017/12/workflow-vs-script/">project-oriented workflow.</a></figcaption></figure></div><p>But is this actually a problem? Do people really use 42 that commonly as their random seed? Yes, absolutely. Google &#8220;random seed&#8221; or &#8220;random_state&#8221; and the number 42 will pop up among your top search hits. And people may explain where the number 42 comes from (we&#8217;ll get to this below), but then they don&#8217;t talk much about whether or not this choice is a good idea. In fact, frequently you see statements along the lines of &#8220;the random seed is arbitrary, you can use any number you want, so 42 is a fine choice.&#8221; This sentence is 100% correct, <strong>assuming you&#8217;re the only one who uses 42 and you also use it only once in your entire life. </strong>Obviously this assumption is not valid. But I rarely see people point this out.</p><p>For example, the documentation for the Python machine-learning framework <a href="https://scikit-learn.org/">scikit-learn</a> contains a lot of material about random states and various options of controlling them. Everything the documentation says is technically correct, and yet it never discourages you from using 42 as the seed. In fact, the glossary <a href="https://scikit-learn.org/stable/glossary.html#term-random_state">contains this gem:</a></p><blockquote><p>Popular integer random seeds are 0 and 42.</p></blockquote><p>(I hope I won&#8217;t have to explain why 0 is just as bad a choice as 42.)</p><p>The number 42 also shows up throughout the documentation, such as in code examples for the <code>train_test_split()</code> function. Using a fixed random seed when splitting data into training and test sets is uniquely bad, as you&#8217;re always going to be sampling the same split when you&#8217;re re-training your classifier.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9svV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee076e83-90b7-460a-b0f4-80e03b090a6a_1870x984.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9svV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee076e83-90b7-460a-b0f4-80e03b090a6a_1870x984.png 424w, https://substackcdn.com/image/fetch/$s_!9svV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee076e83-90b7-460a-b0f4-80e03b090a6a_1870x984.png 848w, https://substackcdn.com/image/fetch/$s_!9svV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee076e83-90b7-460a-b0f4-80e03b090a6a_1870x984.png 1272w, https://substackcdn.com/image/fetch/$s_!9svV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee076e83-90b7-460a-b0f4-80e03b090a6a_1870x984.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9svV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee076e83-90b7-460a-b0f4-80e03b090a6a_1870x984.png" width="1456" height="766" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ee076e83-90b7-460a-b0f4-80e03b090a6a_1870x984.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:766,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:151186,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/175157766?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee076e83-90b7-460a-b0f4-80e03b090a6a_1870x984.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9svV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee076e83-90b7-460a-b0f4-80e03b090a6a_1870x984.png 424w, https://substackcdn.com/image/fetch/$s_!9svV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee076e83-90b7-460a-b0f4-80e03b090a6a_1870x984.png 848w, https://substackcdn.com/image/fetch/$s_!9svV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee076e83-90b7-460a-b0f4-80e03b090a6a_1870x984.png 1272w, https://substackcdn.com/image/fetch/$s_!9svV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee076e83-90b7-460a-b0f4-80e03b090a6a_1870x984.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Example use of the <code>train_test_split()</code> function from scikit-learn, prominently setting <code>random_state=42</code>. Taken from <a href="https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html">the official documentation</a> for version 1.7.2, the latest stable release as of this writing.</figcaption></figure></div><p>But it gets worse. LLMs have learned about 42 and will happily put it into the code they generate. <a href="https://github.com/clauswilke/Claude-zero-shot/blob/main/Claude-zero-shot.ipynb">Here is some zero-shot data-analysis code</a> I recently generated. And there it is, <code>random_state=42</code> (&#8220;for reproducibility&#8221;).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Sx1A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc24d4646-2ebc-4807-9a84-7f71229be2d8_1856x542.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Sx1A!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc24d4646-2ebc-4807-9a84-7f71229be2d8_1856x542.png 424w, https://substackcdn.com/image/fetch/$s_!Sx1A!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc24d4646-2ebc-4807-9a84-7f71229be2d8_1856x542.png 848w, https://substackcdn.com/image/fetch/$s_!Sx1A!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc24d4646-2ebc-4807-9a84-7f71229be2d8_1856x542.png 1272w, https://substackcdn.com/image/fetch/$s_!Sx1A!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc24d4646-2ebc-4807-9a84-7f71229be2d8_1856x542.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Sx1A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc24d4646-2ebc-4807-9a84-7f71229be2d8_1856x542.png" width="1456" height="425" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c24d4646-2ebc-4807-9a84-7f71229be2d8_1856x542.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:425,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:173554,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/175157766?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc24d4646-2ebc-4807-9a84-7f71229be2d8_1856x542.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Sx1A!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc24d4646-2ebc-4807-9a84-7f71229be2d8_1856x542.png 424w, https://substackcdn.com/image/fetch/$s_!Sx1A!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc24d4646-2ebc-4807-9a84-7f71229be2d8_1856x542.png 848w, https://substackcdn.com/image/fetch/$s_!Sx1A!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc24d4646-2ebc-4807-9a84-7f71229be2d8_1856x542.png 1272w, https://substackcdn.com/image/fetch/$s_!Sx1A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc24d4646-2ebc-4807-9a84-7f71229be2d8_1856x542.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Screenshot of code snippet featuring <code>random_state=42</code>. Taken from <a href="https://github.com/clauswilke/Claude-zero-shot/blob/main/Claude-zero-shot.ipynb">this zero-shot output</a> generated by Claude Sonnet 4.5.</figcaption></figure></div><p>It is not surprising that attentive students, who read the documentation, read the blog posts, read the code generated by LLMs, conclude that a random seed of 42 is a good choice, and maybe even a choice that is superior to other options.</p><p>To dig deeper into why 42 is not a good choice, and is in fact uniquely bad, we need to look into how random numbers are generated in a computer.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/if-your-random-seed-is-42-i-will?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/if-your-random-seed-is-42-i-will?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.genesmindsmachines.com/p/if-your-random-seed-is-42-i-will?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><h2>What is a random seed?</h2><p>In modern computing, we need randomness everywhere. If you&#8217;re doing machine learning and you need to subdivide your data into training and test sets, that requires a source of randomness. If you&#8217;re writing a computer game and you want your NPCs<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> to show somewhat interesting and unpredictable behavior, you need randomness. If you&#8217;re simulating a physical system, you need randomness. The problem is that it&#8217;s rather complicated to generate true random numbers. The sources of true randomness we have available (for example <a href="https://en.wikipedia.org/wiki/Hardware_random_number_generator">from thermal fluctuations in specific electronics components</a>) are nowhere fast or cheap enough to generate random numbers at the scale needed in modern computing environments.</p><p>The solution computer scientists have come up with is the pseudo-random number generator (PRNG). A PRNG is a mathematical algorithm that produces sequences of numbers statistically indistinguishable from random. Importantly, a PRNG will always produce the exact same sequence of numbers when run from the same starting point. The numbers aren&#8217;t random at all! But they look random.</p><p>So what is the random seed? It is a number that defines the initial state of the PRNG. How exactly we get from the seed to the initial state can be complicated, but the details don&#8217;t matter here. What matters is the same seed will always give you the exact same sequence of random numbers.</p><p>A second important concept to be aware of is the period length of a PRNG. The period length is the number of random values a PRNG can generate before it starts repeating. All PRNGs repeat eventually. Therefore, it is critical that your PRNG has a period length large enough that it never causes you any trouble. Let&#8217;s say you write a large numerical simulation (maybe you&#8217;re simulating the weather, or the early universe, or all the atoms in a cell) where you need trillions or more of random numbers. You wouldn&#8217;t want the random numbers to repeat during any of your simulation runs. So you need a PRNG with a period length well in excess of the maximum number of random values you may ever need.</p><p>One of the most widely used PRNGs is the <a href="https://en.wikipedia.org/wiki/Mersenne_Twister">Mersenne twister.</a> It has a period length of over 10<sup>6000</sup>. (The exact value is 2<sup>19937</sup> &#8722; 1.) This is an unimaginably large number. To give you a sense of how large it is, for comparison, there are approximately 10<sup>80</sup> atoms in the universe. This is tiny compared to 10<sup>6000</sup>. The period of the Mersenne twister has space for entire universes for every single atom in the universe, and then some. In fact, you could create an entire universe for every atom, and then create another entire universe for every atom in every of the universes you have created, and keep nesting 75 times, and still you wouldn&#8217;t run out of room in the period of the Mersenne twister. If you used the Mersenne twister to create nested universes 75 times deep, all these universes inside universes inside other universes would be different from each other.</p><h2>What is a good choice for your random seed?</h2><p>As I wrote above: The random seed is arbitrary. You can pick any seed you want. There are no better or worse seeds. (Unless you have a bad PRNG, but let&#8217;s ignore this complication.) In principle we could stop here. But in practice it&#8217;s a little more complicated.</p><p>While the seed is arbitrary, you don&#8217;t ever want to reuse a seed. The point of a PRNG is that its output is statistically indistinguishable from random. That&#8217;s going to be the case if you&#8217;re using a different seed every time. But if you&#8217;re reusing seeds, suddenly you have hidden correlation structures. And you may not even be aware of them.</p><p>The consequences of reusing random seeds could be benign or disastrous. It depends on the specifics of the situation. Let&#8217;s say you&#8217;re doing machine learning, and you&#8217;re using the train-test splitting code I quoted above, with a fixed random seed. In this case, you&#8217;re always splitting the data in exactly the same way. If you&#8217;re running this code five times, you&#8217;re not actually getting five independent splits, you&#8217;re getting the same split five times. At a minimum, that&#8217;s going to be wildly underestimating the variance in the performance of your fitted model. And worse consequences are possible if you&#8217;re unlucky.</p><p>If you&#8217;re following so far, and you&#8217;re starting to see that reusing random seeds can be bad, you may also realize that double-digit random seeds are bad. There are only 90 different options. If you&#8217;re in any way regularly working with random processes, you&#8217;ll easily need 90 different options in just a few days. </p><p>So, let&#8217;s go wild. Let&#8217;s use an 8-digit random seed.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> Surely that&#8217;ll give us sufficiently many different possibilities for a lifetime. Well, once you ponder it a bit, you&#8217;ll see that this doesn&#8217;t even give us a separate random sequence for every person in the United States. (The US population is approximately 340 million.) If they were all doing data science, splitting data into training and test, many of them would be using the exact same &#8220;random&#8221; splits.</p><p>The space you can possibly explore with even quite a long random seed is tiny compared to the total number of sequences you would want to have available to you, and which a PRNG such as the Mersenne Twister would certainly support.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a> And the random seed 42 is uniquely bad precisely because everybody is using it. The Mersenne Twister has a state space large enough for universes within universes, but every data scientist in the entire world is using the same 10,000 &#8220;random&#8221; numbers that you get when starting with seed 42.</p><p>So we&#8217;re all on the same page, here are the first 50 of the &#8220;official&#8221; random numbers. They have been used millions of times. I encourage you to verify you get the same numbers on your computer.</p><pre><code>&gt;&gt;&gt; import random
&gt;&gt;&gt; random.seed(42)
&gt;&gt;&gt; [random.random() for i in range(50)]
[0.6394267984578837, 0.025010755222666936, 0.27502931836911926, 0.22321073814882275, 0.7364712141640124, 0.6766994874229113, 0.8921795677048454, 0.08693883262941615, 0.4219218196852704, 0.029797219438070344, 0.21863797480360336, 0.5053552881033624, 0.026535969683863625, 0.1988376506866485, 0.6498844377795232, 0.5449414806032167, 0.2204406220406967, 0.5892656838759087, 0.8094304566778266, 0.006498759678061017, 0.8058192518328079, 0.6981393949882269, 0.3402505165179919, 0.15547949981178155, 0.9572130722067812, 0.33659454511262676, 0.09274584338014791, 0.09671637683346401, 0.8474943663474598, 0.6037260313668911, 0.8071282732743802, 0.7297317866938179, 0.5362280914547007, 0.9731157639793706, 0.3785343772083535, 0.552040631273227, 0.8294046642529949, 0.6185197523642461, 0.8617069003107772, 0.577352145256762, 0.7045718362149235, 0.045824383655662215, 0.22789827565154686, 0.28938796360210717, 0.0797919769236275, 0.23279088636103018, 0.10100142940972912, 0.2779736031100921, 0.6356844442644002, 0.36483217897008424]</code></pre><h2>Should you explicitly set your random seed?</h2><p>Why choose a specific random seed at all? Is this actually a good idea? In general, I think the answer is no. In my opinion, you&#8217;re typically better off using a random<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a> random seed and sampling a broader space of possibilities than picking your own random seed and risking that you&#8217;re drawing invalid conclusions from your analysis. However, there are of course specific situations in which picking a random seed is appropriate, or even required. Let&#8217;s discuss those.</p><p>Most importantly, in simulation studies, it can be helpful to start all simulations with a different but defined random seed, so that every single simulation run can be reproduced if necessary. In these types of situations, a good strategy is to take some arbitrary large integer number, say 9427385,<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-6" href="#footnote-6" target="_self">6</a> and then add to it the number of the replicate you&#8217;re running. So, simulation <em>i</em> would have seed 9427385 + <em>i</em>. This requires a bit of work to get right, as you should never reuse any random seeds among simulations, but it can be useful for tracking down weird behaviors that may occur only occasionally.</p><p>Related to this point, when you&#8217;re coding a complex stochastic simulation, you may encounter bugs that happen only very rarely. Your simulation may work just fine most of the time, but every few thousand runs or so it crashes. This type of bug can be difficult to investigate. The first step is usually to identify a random seeds that reliably triggers the bug. If you can find a seed that triggers it early in the simulation run that&#8217;s even better.</p><p>Another scenario in which you might want to use defined random seeds is when you have random choices that you explicitly want to reuse multiple times. For example, if you&#8217;re doing machine learning, and you&#8217;re comparing two different models, you may want to fit them to the exact same collection of training/test splits. In this situation, you could, for example, pick ten random seeds, use each to generate one training/test split, and fit each model to each of the ten splits.</p><p>Finally, when making visualizations that contain random scatter or other elements that are randomly chosen, it can be helpful to play around with the random seed until the scatter looks pleasing. When I wrote my book on data visualization I used this technique quite frequently, for example in <a href="https://clauswilke.com/dataviz/boxplots-violins.html#boxplots-violins-vertical">this chapter.</a></p><h2>Where does 42 come from anyways?</h2><p>Now that you know everything there is to know about random seeds, let&#8217;s go back to the number 42. Where does it come from? Why do people use this number in particular? The culprit is Douglas Adams&#8217; <em>The Hitchhiker&#8217;s Guide to the Galaxy, </em>a humorous, quirky science fiction novel. The book was very popular in the 1980s and 1990s, was adapted several times for radio and TV, and reached broad audiences around the world. If you&#8217;ve never read it or seen any of the adaptations, I would encourage you to check it out. Just be prepared for rather strange humor.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-7" href="#footnote-7" target="_self">7</a></p><p>In the book, we learn about some hyper-intelligent, pan-dimensional beings that built a massive computer called Deep Thought, with the specific purpose to discover the answer to &#8220;the ultimate question of life, the universe, and everything.&#8221; After several million years of computing, Deep Thought reveals that the answer is 42. When the beings don&#8217;t understand what to do with this answer, Deep Thought tells them that to understand the answer they have to figure out what exactly the question is.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-8" href="#footnote-8" target="_self">8</a> You can see a film adaptation of this scene <a href="https://www.youtube.com/watch?v=aboZctrHfK8">here.</a></p><p>The number 42 has since turned into a meme. When somebody asks an extremely broad question, or a question that goes after deep philosophical topics such as the meaning of life, people like to respond with 42. This meme is so popular it has <a href="https://en.wikipedia.org/wiki/Phrases_from_The_Hitchhiker%27s_Guide_to_the_Galaxy#The_Answer_to_the_Ultimate_Question_of_Life,_the_Universe,_and_Everything_is_42">its own Wikipedia article.</a> This is all very funny,<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-9" href="#footnote-9" target="_self">9</a> but none of this makes 42 a good random seed.</p><h2>Updates</h2><p>This post generated a number of good responses. I will collect the most helpful or interesting ones here.</p><p>First, Nick Bailey pointed out a good solution to the randomness/reproducibility conundrum (where reusing seeds ruins randomness but using true random starting points ruins reproducibility): Generate a genuinely random random seed when you start up your code, write it into a log file, and then seed your random number generator. This gives you the best of both worlds.</p><div class="comment" data-attrs="{&quot;url&quot;:&quot;https://open.substack.com/home&quot;,&quot;commentId&quot;:168991197,&quot;comment&quot;:{&quot;id&quot;:168991197,&quot;date&quot;:&quot;2025-10-22T13:36:49.281Z&quot;,&quot;edited_at&quot;:null,&quot;body&quot;:&quot;This is a great article and raises multiple points I have had to think a lot about in various SLiM (population genetic simulator) simulations I&#8217;ve run. SLiM particularly will generate a random seed itself and report what it is in the standard output. I think this is ideal, not to generate your own random seed but to keep track of the ones that were generated before. This is for reproducibility (e.g. I explicitly reported random seeds used for a PCA here https://onlinelibrary.wiley.com/doi/full/10.1002/ece3.10571) and the rare bug-fixing Wilke mentions in this article.&quot;,&quot;body_json&quot;:{&quot;type&quot;:&quot;doc&quot;,&quot;attrs&quot;:{&quot;schemaVersion&quot;:&quot;v1&quot;},&quot;content&quot;:[{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;This is a great article and raises multiple points I have had to think a lot about in various SLiM (population genetic simulator) simulations I&#8217;ve run. SLiM particularly will generate a random seed itself and report what it is in the standard output. I think this is ideal, not to generate your own random seed but to keep track of the ones that were generated before. This is for reproducibility (e.g. I explicitly reported random seeds used for a PCA here &quot;},{&quot;type&quot;:&quot;text&quot;,&quot;marks&quot;:[{&quot;type&quot;:&quot;link&quot;,&quot;attrs&quot;:{&quot;href&quot;:&quot;https://onlinelibrary.wiley.com/doi/full/10.1002/ece3.10571&quot;,&quot;target&quot;:&quot;_blank&quot;,&quot;rel&quot;:&quot;nofollow ugc noopener&quot;,&quot;class&quot;:&quot;note-link&quot;}}],&quot;text&quot;:&quot;https://onlinelibrary.wiley.com/doi/full/10.1002/ece3.10571&quot;},{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;) and the rare bug-fixing Wilke mentions in this article.&quot;}]}]},&quot;restacks&quot;:1,&quot;reaction_count&quot;:1,&quot;attachments&quot;:[{&quot;id&quot;:&quot;b92c094c-023c-42d9-9aa9-6f0019e15627&quot;,&quot;type&quot;:&quot;post&quot;,&quot;publication&quot;:{&quot;apple_pay_disabled&quot;:false,&quot;apex_domain&quot;:&quot;genesmindsmachines.com&quot;,&quot;author_id&quot;:64064132,&quot;byline_images_enabled&quot;:false,&quot;bylines_enabled&quot;:true,&quot;chartable_token&quot;:null,&quot;community_enabled&quot;:true,&quot;copyright&quot;:&quot;Claus Wilke&quot;,&quot;cover_photo_url&quot;:null,&quot;created_at&quot;:&quot;2025-06-22T21:27:02.264Z&quot;,&quot;custom_domain_optional&quot;:false,&quot;custom_domain&quot;:&quot;blog.genesmindsmachines.com&quot;,&quot;default_comment_sort&quot;:&quot;best_first&quot;,&quot;default_coupon&quot;:null,&quot;default_group_coupon&quot;:null,&quot;default_show_guest_bios&quot;:true,&quot;email_banner_url&quot;:null,&quot;email_from_name&quot;:&quot;Claus Wilke&quot;,&quot;email_from&quot;:null,&quot;embed_tracking_disabled&quot;:false,&quot;explicit&quot;:false,&quot;expose_paywall_content_to_search_engines&quot;:true,&quot;fb_pixel_id&quot;:null,&quot;fb_site_verification_token&quot;:null,&quot;flagged_as_spam&quot;:false,&quot;founding_subscription_benefits&quot;:null,&quot;free_subscription_benefits&quot;:null,&quot;ga_pixel_id&quot;:null,&quot;google_site_verification_token&quot;:null,&quot;google_tag_manager_token&quot;:null,&quot;hero_image&quot;:null,&quot;hero_text&quot;:&quot;Genes, Minds, Machines: Thoughts about Science, Communication, and AI. A newsletter covering topics in biology, data visualization, effective communication, AI, and higher education.&quot;,&quot;hide_intro_subtitle&quot;:null,&quot;hide_intro_title&quot;:null,&quot;hide_podcast_feed_link&quot;:false,&quot;homepage_type&quot;:&quot;magaziney&quot;,&quot;id&quot;:5419410,&quot;image_thumbnails_always_enabled&quot;:false,&quot;invite_only&quot;:false,&quot;hide_podcast_from_pub_listings&quot;:false,&quot;language&quot;:&quot;en&quot;,&quot;logo_url_wide&quot;:null,&quot;logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;minimum_group_size&quot;:2,&quot;moderation_enabled&quot;:true,&quot;name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;paid_subscription_benefits&quot;:null,&quot;parsely_pixel_id&quot;:null,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;paywall_free_trial_enabled&quot;:false,&quot;podcast_art_url&quot;:null,&quot;paid_podcast_episode_art_url&quot;:null,&quot;podcast_byline&quot;:null,&quot;podcast_description&quot;:null,&quot;podcast_enabled&quot;:false,&quot;podcast_feed_url&quot;:null,&quot;podcast_title&quot;:null,&quot;post_preview_limit&quot;:null,&quot;primary_user_id&quot;:null,&quot;require_clickthrough&quot;:false,&quot;show_pub_podcast_tab&quot;:false,&quot;show_recs_on_homepage&quot;:true,&quot;subdomain&quot;:&quot;clauswilke&quot;,&quot;subscriber_invites&quot;:0,&quot;support_email&quot;:null,&quot;theme_var_background_pop&quot;:&quot;#FF6719&quot;,&quot;theme_var_color_links&quot;:true,&quot;theme_var_cover_bg_color&quot;:null,&quot;trial_end_override&quot;:null,&quot;twitter_pixel_id&quot;:null,&quot;type&quot;:&quot;newsletter&quot;,&quot;post_reaction_faces_enabled&quot;:true,&quot;is_personal_mode&quot;:false,&quot;plans&quot;:null,&quot;stripe_user_id&quot;:null,&quot;stripe_country&quot;:null,&quot;stripe_publishable_key&quot;:null,&quot;stripe_platform_account&quot;:null,&quot;automatic_tax_enabled&quot;:null,&quot;author_name&quot;:&quot;Claus Wilke&quot;,&quot;author_handle&quot;:&quot;clauswilke&quot;,&quot;author_photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!rnVc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;author_bio&quot;:&quot;Science, Communication, AI&quot;,&quot;has_custom_tos&quot;:false,&quot;has_custom_privacy&quot;:false,&quot;theme&quot;:{&quot;background_pop_color&quot;:&quot;#2e629e&quot;,&quot;web_bg_color&quot;:&quot;#fdfdfd&quot;,&quot;cover_bg_color&quot;:&quot;#fdfdfd&quot;,&quot;publication_id&quot;:5419410,&quot;color_links&quot;:null,&quot;font_preset_heading&quot;:null,&quot;font_preset_body&quot;:&quot;slab&quot;,&quot;font_family_headings&quot;:null,&quot;font_family_body&quot;:null,&quot;font_family_ui&quot;:null,&quot;font_size_body_desktop&quot;:null,&quot;print_secondary&quot;:null,&quot;custom_css_web&quot;:null,&quot;custom_css_email&quot;:null,&quot;home_hero&quot;:&quot;magaziney&quot;,&quot;home_posts&quot;:&quot;list&quot;,&quot;home_show_top_posts&quot;:false,&quot;hide_images_from_list&quot;:false,&quot;home_hero_alignment&quot;:&quot;left&quot;,&quot;home_hero_show_podcast_links&quot;:true,&quot;default_post_header_variant&quot;:null},&quot;threads_v2_settings&quot;:null,&quot;default_group_coupon_percent_off&quot;:null,&quot;pause_return_date&quot;:null,&quot;has_posts&quot;:true,&quot;has_recommendations&quot;:true,&quot;first_post_date&quot;:&quot;2025-06-24T02:20:02.740Z&quot;,&quot;has_podcast&quot;:false,&quot;has_free_podcast&quot;:false,&quot;has_subscriber_only_podcast&quot;:false,&quot;has_community_content&quot;:true,&quot;rankingDetail&quot;:&quot;Launched 4 months ago&quot;,&quot;rankingDetailFreeIncluded&quot;:&quot;Hundreds of subscribers&quot;,&quot;rankingDetailOrderOfMagnitude&quot;:0,&quot;rankingDetailFreeIncludedOrderOfMagnitude&quot;:100,&quot;rankingDetailFreeSubscriberCount&quot;:null,&quot;rankingDetailByLanguage&quot;:{&quot;de&quot;:{&quot;rankingDetail&quot;:&quot;Vor vor 4 Monaten gelauncht&quot;,&quot;rankingDetailFreeIncluded&quot;:&quot;Hunderte von Abonnenten&quot;,&quot;rankingDetailOrderOfMagnitude&quot;:0,&quot;rankingDetailFreeIncludedOrderOfMagnitude&quot;:100,&quot;rankingDetailFreeSubscriberCount&quot;:null,&quot;freeSubscriberCount&quot;:null,&quot;freeSubscriberCountOrderOfMagnitude&quot;:&quot;987&quot;},&quot;es&quot;:{&quot;rankingDetail&quot;:&quot;Lanzado hace 4 meses&quot;,&quot;rankingDetailFreeIncluded&quot;:&quot;Cientos de suscriptores&quot;,&quot;rankingDetailOrderOfMagnitude&quot;:0,&quot;rankingDetailFreeIncludedOrderOfMagnitude&quot;:100,&quot;rankingDetailFreeSubscriberCount&quot;:null,&quot;freeSubscriberCount&quot;:null,&quot;freeSubscriberCountOrderOfMagnitude&quot;:&quot;987&quot;},&quot;fr&quot;:{&quot;rankingDetail&quot;:&quot;Lanc&#233; il y a 4 mois&quot;,&quot;rankingDetailFreeIncluded&quot;:&quot;Des centaines d'abonn&#233;s&quot;,&quot;rankingDetailOrderOfMagnitude&quot;:0,&quot;rankingDetailFreeIncludedOrderOfMagnitude&quot;:100,&quot;rankingDetailFreeSubscriberCount&quot;:null,&quot;freeSubscriberCount&quot;:null,&quot;freeSubscriberCountOrderOfMagnitude&quot;:&quot;987&quot;},&quot;pt&quot;:{&quot;rankingDetail&quot;:&quot;Lan&#231;ado 4 meses&quot;,&quot;rankingDetailFreeIncluded&quot;:&quot;Centenas de subscritores&quot;,&quot;rankingDetailOrderOfMagnitude&quot;:0,&quot;rankingDetailFreeIncludedOrderOfMagnitude&quot;:100,&quot;rankingDetailFreeSubscriberCount&quot;:null,&quot;freeSubscriberCount&quot;:null,&quot;freeSubscriberCountOrderOfMagnitude&quot;:&quot;987&quot;},&quot;pt-br&quot;:{&quot;rankingDetail&quot;:&quot;Lan&#231;ado 4 meses&quot;,&quot;rankingDetailFreeIncluded&quot;:&quot;Centenas de assinantes&quot;,&quot;rankingDetailOrderOfMagnitude&quot;:0,&quot;rankingDetailFreeIncludedOrderOfMagnitude&quot;:100,&quot;rankingDetailFreeSubscriberCount&quot;:null,&quot;freeSubscriberCount&quot;:null,&quot;freeSubscriberCountOrderOfMagnitude&quot;:&quot;987&quot;},&quot;it&quot;:{&quot;rankingDetail&quot;:&quot;Lanciato 4 mesi&quot;,&quot;rankingDetailFreeIncluded&quot;:&quot;Centinaia di abbonati&quot;,&quot;rankingDetailOrderOfMagnitude&quot;:0,&quot;rankingDetailFreeIncludedOrderOfMagnitude&quot;:100,&quot;rankingDetailFreeSubscriberCount&quot;:null,&quot;freeSubscriberCount&quot;:null,&quot;freeSubscriberCountOrderOfMagnitude&quot;:&quot;987&quot;},&quot;en&quot;:{&quot;rankingDetail&quot;:&quot;Launched 4 months ago&quot;,&quot;rankingDetailFreeIncluded&quot;:&quot;Hundreds of subscribers&quot;,&quot;rankingDetailOrderOfMagnitude&quot;:0,&quot;rankingDetailFreeIncludedOrderOfMagnitude&quot;:100,&quot;rankingDetailFreeSubscriberCount&quot;:null,&quot;freeSubscriberCount&quot;:null,&quot;freeSubscriberCountOrderOfMagnitude&quot;:&quot;987&quot;}},&quot;freeSubscriberCount&quot;:null,&quot;freeSubscriberCountOrderOfMagnitude&quot;:&quot;987&quot;,&quot;author_bestseller_tier&quot;:0,&quot;disable_monthly_subscriptions&quot;:false,&quot;disable_annual_subscriptions&quot;:false,&quot;hide_post_restacks&quot;:false,&quot;notes_feed_enabled&quot;:true,&quot;showIntroModule&quot;:false,&quot;last_chat_post_at&quot;:null,&quot;no_follow&quot;:false,&quot;paywall_chat&quot;:&quot;free&quot;,&quot;sections&quot;:[],&quot;multipub_migration&quot;:null,&quot;navigationBarItems&quot;:[{&quot;id&quot;:&quot;a50bf034-0aa9-4458-86c8-ea8fe0360901&quot;,&quot;publication_id&quot;:5419410,&quot;sibling_rank&quot;:0,&quot;link_title&quot;:null,&quot;link_url&quot;:null,&quot;section_id&quot;:null,&quot;post_id&quot;:null,&quot;is_hidden&quot;:false,&quot;standard_key&quot;:&quot;archive&quot;,&quot;post_tag_id&quot;:null,&quot;post&quot;:null,&quot;section&quot;:null,&quot;postTag&quot;:null},{&quot;id&quot;:&quot;8c1fc7a7-a465-494c-a161-2a591560aa48&quot;,&quot;publication_id&quot;:5419410,&quot;sibling_rank&quot;:1,&quot;link_title&quot;:null,&quot;link_url&quot;:null,&quot;section_id&quot;:null,&quot;post_id&quot;:null,&quot;is_hidden&quot;:true,&quot;standard_key&quot;:&quot;notes&quot;,&quot;post_tag_id&quot;:null,&quot;post&quot;:null,&quot;section&quot;:null,&quot;postTag&quot;:null},{&quot;id&quot;:&quot;909dac53-ce84-4242-8451-54f5679e2c8d&quot;,&quot;publication_id&quot;:5419410,&quot;sibling_rank&quot;:2,&quot;link_title&quot;:&quot;Public Speaking&quot;,&quot;link_url&quot;:&quot;&quot;,&quot;section_id&quot;:null,&quot;post_id&quot;:null,&quot;is_hidden&quot;:null,&quot;standard_key&quot;:null,&quot;post_tag_id&quot;:&quot;7dd44329-4f26-4558-9eca-c08696d76a81&quot;,&quot;post&quot;:null,&quot;section&quot;:null,&quot;postTag&quot;:{&quot;id&quot;:&quot;7dd44329-4f26-4558-9eca-c08696d76a81&quot;,&quot;publication_id&quot;:5419410,&quot;name&quot;:&quot;Public Speaking&quot;,&quot;slug&quot;:&quot;public-speaking&quot;,&quot;hidden&quot;:false}},{&quot;id&quot;:&quot;30f2dd3a-38b4-4f02-b3f1-a2d52d460915&quot;,&quot;publication_id&quot;:5419410,&quot;sibling_rank&quot;:3,&quot;link_title&quot;:&quot;Writing&quot;,&quot;link_url&quot;:&quot;&quot;,&quot;section_id&quot;:null,&quot;post_id&quot;:null,&quot;is_hidden&quot;:null,&quot;standard_key&quot;:null,&quot;post_tag_id&quot;:&quot;c31429aa-6a44-45b6-837a-5ff74595c2c9&quot;,&quot;post&quot;:null,&quot;section&quot;:null,&quot;postTag&quot;:{&quot;id&quot;:&quot;c31429aa-6a44-45b6-837a-5ff74595c2c9&quot;,&quot;publication_id&quot;:5419410,&quot;name&quot;:&quot;Writing&quot;,&quot;slug&quot;:&quot;writing&quot;,&quot;hidden&quot;:false}},{&quot;id&quot;:&quot;25ee3a2e-a59a-4bc3-b2c0-642e9eb962ae&quot;,&quot;publication_id&quot;:5419410,&quot;sibling_rank&quot;:4,&quot;link_title&quot;:&quot;Graduate Education&quot;,&quot;link_url&quot;:&quot;&quot;,&quot;section_id&quot;:null,&quot;post_id&quot;:null,&quot;is_hidden&quot;:null,&quot;standard_key&quot;:null,&quot;post_tag_id&quot;:&quot;968f80b6-a9d4-4712-bda0-0492d884b2a5&quot;,&quot;post&quot;:null,&quot;section&quot;:null,&quot;postTag&quot;:{&quot;id&quot;:&quot;968f80b6-a9d4-4712-bda0-0492d884b2a5&quot;,&quot;publication_id&quot;:5419410,&quot;name&quot;:&quot;Graduate Education&quot;,&quot;slug&quot;:&quot;graduate-education&quot;,&quot;hidden&quot;:false}},{&quot;id&quot;:&quot;b4ef6efb-a589-45a8-9bbd-cc14bc4fb5b3&quot;,&quot;publication_id&quot;:5419410,&quot;sibling_rank&quot;:5,&quot;link_title&quot;:&quot;AI&quot;,&quot;link_url&quot;:&quot;&quot;,&quot;section_id&quot;:null,&quot;post_id&quot;:null,&quot;is_hidden&quot;:null,&quot;standard_key&quot;:null,&quot;post_tag_id&quot;:&quot;37ac7265-e0db-492f-8d78-df1acf50731d&quot;,&quot;post&quot;:null,&quot;section&quot;:null,&quot;postTag&quot;:{&quot;id&quot;:&quot;37ac7265-e0db-492f-8d78-df1acf50731d&quot;,&quot;publication_id&quot;:5419410,&quot;name&quot;:&quot;AI&quot;,&quot;slug&quot;:&quot;ai&quot;,&quot;hidden&quot;:false}}],&quot;contributors&quot;:[{&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;handle&quot;:&quot;clauswilke&quot;,&quot;role&quot;:&quot;admin&quot;,&quot;owner&quot;:true,&quot;user_id&quot;:64064132,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;}],&quot;threads_v2_enabled&quot;:false,&quot;viralGiftsConfig&quot;:null,&quot;tier&quot;:2,&quot;no_index&quot;:false,&quot;can_set_google_site_verification&quot;:true,&quot;can_have_sitemap&quot;:true,&quot;founding_plan_name_english&quot;:&quot;Founding Member&quot;,&quot;draft_plans&quot;:null,&quot;base_url&quot;:&quot;https://blog.genesmindsmachines.com&quot;,&quot;hostname&quot;:&quot;blog.genesmindsmachines.com&quot;,&quot;is_on_substack&quot;:false,&quot;spotify_podcast_settings&quot;:null,&quot;podcastPalette&quot;:{&quot;DarkMuted&quot;:{&quot;population&quot;:72,&quot;rgb&quot;:[73,153,137]},&quot;DarkVibrant&quot;:{&quot;population&quot;:6013,&quot;rgb&quot;:[4,100,84]},&quot;LightMuted&quot;:{&quot;population&quot;:7,&quot;rgb&quot;:[142,198,186]},&quot;LightVibrant&quot;:{&quot;population&quot;:3,&quot;rgb&quot;:[166,214,206]},&quot;Muted&quot;:{&quot;population&quot;:6,&quot;rgb&quot;:[92,164,156]},&quot;Vibrant&quot;:{&quot;population&quot;:5,&quot;rgb&quot;:[76,164,146]}},&quot;pageThemes&quot;:{&quot;podcast&quot;:null},&quot;appTheme&quot;:{&quot;colors&quot;:{&quot;accent&quot;:{&quot;name&quot;:&quot;#2e629e&quot;,&quot;primary&quot;:{&quot;r&quot;:46,&quot;g&quot;:98,&quot;b&quot;:158,&quot;a&quot;:1},&quot;primary_hover&quot;:{&quot;r&quot;:20,&quot;g&quot;:81,&quot;b&quot;:139,&quot;a&quot;:1},&quot;primary_elevated&quot;:{&quot;r&quot;:20,&quot;g&quot;:81,&quot;b&quot;:139,&quot;a&quot;:1},&quot;secondary&quot;:{&quot;r&quot;:46,&quot;g&quot;:98,&quot;b&quot;:158,&quot;a&quot;:0.2},&quot;contrast&quot;:{&quot;r&quot;:255,&quot;g&quot;:255,&quot;b&quot;:255,&quot;a&quot;:1},&quot;bg&quot;:{&quot;r&quot;:46,&quot;g&quot;:98,&quot;b&quot;:158,&quot;a&quot;:0.2},&quot;bg_hover&quot;:{&quot;r&quot;:46,&quot;g&quot;:98,&quot;b&quot;:158,&quot;a&quot;:0.3},&quot;dark&quot;:{&quot;primary&quot;:{&quot;r&quot;:46,&quot;g&quot;:98,&quot;b&quot;:158,&quot;a&quot;:1},&quot;primary_hover&quot;:{&quot;r&quot;:67,&quot;g&quot;:115,&quot;b&quot;:177,&quot;a&quot;:1},&quot;primary_elevated&quot;:{&quot;r&quot;:67,&quot;g&quot;:115,&quot;b&quot;:177,&quot;a&quot;:1},&quot;secondary&quot;:{&quot;r&quot;:46,&quot;g&quot;:98,&quot;b&quot;:158,&quot;a&quot;:0.2},&quot;contrast&quot;:{&quot;r&quot;:255,&quot;g&quot;:255,&quot;b&quot;:255,&quot;a&quot;:1},&quot;bg&quot;:{&quot;r&quot;:46,&quot;g&quot;:98,&quot;b&quot;:158,&quot;a&quot;:0.2},&quot;bg_hover&quot;:{&quot;r&quot;:46,&quot;g&quot;:98,&quot;b&quot;:158,&quot;a&quot;:0.3}}},&quot;fg&quot;:{&quot;primary&quot;:{&quot;r&quot;:0,&quot;g&quot;:0,&quot;b&quot;:0,&quot;a&quot;:0.8},&quot;secondary&quot;:{&quot;r&quot;:0,&quot;g&quot;:0,&quot;b&quot;:0,&quot;a&quot;:0.6},&quot;tertiary&quot;:{&quot;r&quot;:0,&quot;g&quot;:0,&quot;b&quot;:0,&quot;a&quot;:0.4},&quot;accent&quot;:{&quot;r&quot;:46,&quot;g&quot;:98,&quot;b&quot;:158,&quot;a&quot;:1},&quot;dark&quot;:{&quot;primary&quot;:{&quot;r&quot;:255,&quot;g&quot;:255,&quot;b&quot;:255,&quot;a&quot;:0.9},&quot;secondary&quot;:{&quot;r&quot;:255,&quot;g&quot;:255,&quot;b&quot;:255,&quot;a&quot;:0.6},&quot;tertiary&quot;:{&quot;r&quot;:255,&quot;g&quot;:255,&quot;b&quot;:255,&quot;a&quot;:0.4},&quot;accent&quot;:{&quot;r&quot;:84,&quot;g&quot;:130,&quot;b&quot;:193,&quot;a&quot;:1}}},&quot;bg&quot;:{&quot;name&quot;:&quot;#ffffff&quot;,&quot;hue&quot;:{&quot;r&quot;:255,&quot;g&quot;:255,&quot;b&quot;:255,&quot;a&quot;:0},&quot;tint&quot;:{&quot;r&quot;:255,&quot;g&quot;:255,&quot;b&quot;:255,&quot;a&quot;:0},&quot;primary&quot;:{&quot;r&quot;:255,&quot;g&quot;:255,&quot;b&quot;:255,&quot;a&quot;:1},&quot;primary_hover&quot;:{&quot;r&quot;:250,&quot;g&quot;:250,&quot;b&quot;:250,&quot;a&quot;:1},&quot;primary_elevated&quot;:{&quot;r&quot;:250,&quot;g&quot;:250,&quot;b&quot;:250,&quot;a&quot;:1},&quot;secondary&quot;:{&quot;r&quot;:238,&quot;g&quot;:238,&quot;b&quot;:238,&quot;a&quot;:1},&quot;secondary_elevated&quot;:{&quot;r&quot;:206.90096477355226,&quot;g&quot;:206.90096477355175,&quot;b&quot;:206.9009647735519,&quot;a&quot;:1},&quot;tertiary&quot;:{&quot;r&quot;:219,&quot;g&quot;:219,&quot;b&quot;:219,&quot;a&quot;:1},&quot;quaternary&quot;:{&quot;r&quot;:182,&quot;g&quot;:182,&quot;b&quot;:182,&quot;a&quot;:1},&quot;dark&quot;:{&quot;primary&quot;:{&quot;r&quot;:22,&quot;g&quot;:23,&quot;b&quot;:24,&quot;a&quot;:1},&quot;primary_hover&quot;:{&quot;r&quot;:27,&quot;g&quot;:28,&quot;b&quot;:29,&quot;a&quot;:1},&quot;primary_elevated&quot;:{&quot;r&quot;:27,&quot;g&quot;:28,&quot;b&quot;:29,&quot;a&quot;:1},&quot;secondary&quot;:{&quot;r&quot;:35,&quot;g&quot;:37,&quot;b&quot;:37,&quot;a&quot;:1},&quot;secondary_elevated&quot;:{&quot;r&quot;:41.35899397549579,&quot;g&quot;:43.405356429195315,&quot;b&quot;:43.40489285041963,&quot;a&quot;:1},&quot;tertiary&quot;:{&quot;r&quot;:54,&quot;g&quot;:55,&quot;b&quot;:55,&quot;a&quot;:1},&quot;quaternary&quot;:{&quot;r&quot;:90,&quot;g&quot;:91,&quot;b&quot;:91,&quot;a&quot;:1}}}},&quot;cover_image&quot;:{&quot;url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,w_1200,h_400,c_pad,f_auto,q_auto:best,fl_progressive:steep,b_auto:border,b_rgb:fdfdfd/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;height&quot;:982,&quot;width&quot;:2946}},&quot;multiple_pins&quot;:true,&quot;live_subscriber_counts&quot;:false,&quot;supports_ip_content_unlock&quot;:false,&quot;logoPalette&quot;:{&quot;Vibrant&quot;:{&quot;rgb&quot;:[251,191,16],&quot;population&quot;:370},&quot;DarkVibrant&quot;:{&quot;rgb&quot;:[120,52,12],&quot;population&quot;:386},&quot;LightVibrant&quot;:{&quot;rgb&quot;:[251,243,132],&quot;population&quot;:165},&quot;Muted&quot;:{&quot;rgb&quot;:[103,126,146],&quot;population&quot;:312},&quot;DarkMuted&quot;:{&quot;rgb&quot;:[63,77,93],&quot;population&quot;:326},&quot;LightMuted&quot;:{&quot;rgb&quot;:[156,180,190],&quot;population&quot;:302}}},&quot;post&quot;:{&quot;id&quot;:175157766,&quot;publication_id&quot;:5419410,&quot;title&quot;:&quot;If your random seed is 42 I will come to your office and set your computer on fire&#128293;&quot;,&quot;social_title&quot;:&quot;If your random seed is 42 I will come to your office and set your computer on fire&#128293;&quot;,&quot;search_engine_title&quot;:null,&quot;search_engine_description&quot;:null,&quot;type&quot;:&quot;newsletter&quot;,&quot;slug&quot;:&quot;if-your-random-seed-is-42-i-will&quot;,&quot;post_date&quot;:&quot;2025-10-22T12:29:26.455Z&quot;,&quot;audience&quot;:&quot;everyone&quot;,&quot;podcast_duration&quot;:null,&quot;video_upload_id&quot;:null,&quot;write_comment_permissions&quot;:&quot;everyone&quot;,&quot;should_send_free_preview&quot;:false,&quot;free_unlock_required&quot;:false,&quot;default_comment_sort&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.genesmindsmachines.com/p/if-your-random-seed-is-42-i-will&quot;,&quot;section_id&quot;:null,&quot;podcast_art_url&quot;:null,&quot;is_published&quot;:true,&quot;live_stream_id&quot;:null,&quot;restacks&quot;:4,&quot;top_exclusions&quot;:[],&quot;pins&quot;:[],&quot;is_section_pinned&quot;:false,&quot;has_shareable_clips&quot;:false,&quot;section_slug&quot;:null,&quot;section_name&quot;:null,&quot;reactions&quot;:{&quot;&#10084;&quot;:15},&quot;subtitle&quot;:&quot;Figuratively. More likely you'll get a stern talking to.&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!e0-K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23bebca8-b5bb-43ce-afef-078bcb795395_1200x993.jpeg&quot;,&quot;cover_image_is_square&quot;:false,&quot;cover_image_is_explicit&quot;:false,&quot;podcast_url&quot;:&quot;&quot;,&quot;videoUpload&quot;:null,&quot;podcastFields&quot;:{&quot;post_id&quot;:175157766,&quot;podcast_episode_number&quot;:null,&quot;podcast_season_number&quot;:null,&quot;podcast_episode_type&quot;:null,&quot;should_syndicate_to_other_feed&quot;:null,&quot;syndicate_to_section_id&quot;:null,&quot;hide_from_feed&quot;:false,&quot;free_podcast_url&quot;:null,&quot;free_podcast_duration&quot;:null},&quot;podcast_upload_id&quot;:null,&quot;podcast_preview_upload_id&quot;:null,&quot;podcastUpload&quot;:null,&quot;podcastPreviewUpload&quot;:null,&quot;voiceover_upload_id&quot;:null,&quot;voiceoverUpload&quot;:null,&quot;has_voiceover&quot;:false,&quot;description&quot;:&quot;Figuratively. More likely you'll get a stern talking to.&quot;,&quot;body_json&quot;:null,&quot;body_html&quot;:null,&quot;truncated_body_text&quot;:&quot;When you&#8217;re as old as I am, old enough to remember that there was a time before the internet, when you had to go to the library to read a book or drop coins into a metal box to make a phone call, you have absorbed a lot of geek lore. So, when you read some tutorial about machine learning or data analysis and you see&quot;,&quot;wordcount&quot;:2280,&quot;postTags&quot;:[{&quot;id&quot;:&quot;8e7489d4-0069-473b-862d-47f401a1507d&quot;,&quot;publication_id&quot;:5419410,&quot;name&quot;:&quot;Science&quot;,&quot;slug&quot;:&quot;science&quot;,&quot;hidden&quot;:false},{&quot;id&quot;:&quot;ba1c348d-6d19-44a0-9af9-a1a82d6bb46a&quot;,&quot;publication_id&quot;:5419410,&quot;name&quot;:&quot;Technology&quot;,&quot;slug&quot;:&quot;technology&quot;,&quot;hidden&quot;:false}],&quot;teaser_post_eligible&quot;:true,&quot;postCountryBlocks&quot;:[],&quot;headlineTest&quot;:null,&quot;coverImagePalette&quot;:{&quot;Vibrant&quot;:{&quot;rgb&quot;:[236,180,74],&quot;population&quot;:9},&quot;DarkVibrant&quot;:{&quot;rgb&quot;:[120.003,82.875,12.597],&quot;population&quot;:0},&quot;LightVibrant&quot;:{&quot;rgb&quot;:[242.403,205.27499999999998,134.99699999999999],&quot;population&quot;:0},&quot;Muted&quot;:{&quot;rgb&quot;:[132,116,92],&quot;population&quot;:544},&quot;DarkMuted&quot;:{&quot;rgb&quot;:[66,48,37],&quot;population&quot;:348},&quot;LightMuted&quot;:{&quot;rgb&quot;:[193,193,188],&quot;population&quot;:145}},&quot;publishedBylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;handle&quot;:&quot;clauswilke&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;,&quot;bio&quot;:&quot;Science, Communication, AI&quot;,&quot;profile_set_up_at&quot;:&quot;2021-12-28T18:33:35.718Z&quot;,&quot;reader_installed_at&quot;:&quot;2025-06-28T21:59:11.394Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:5527897,&quot;user_id&quot;:64064132,&quot;publication_id&quot;:5419410,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:5419410,&quot;name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;subdomain&quot;:&quot;clauswilke&quot;,&quot;custom_domain&quot;:&quot;blog.genesmindsmachines.com&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Genes, Minds, Machines: Thoughts about Science, Communication, and AI. A newsletter covering topics in biology, data visualization, effective communication, AI, and higher education.&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;author_id&quot;:64064132,&quot;primary_user_id&quot;:null,&quot;theme_var_background_pop&quot;:&quot;#FF6719&quot;,&quot;created_at&quot;:&quot;2025-06-22T21:27:02.264Z&quot;,&quot;email_from_name&quot;:&quot;Claus Wilke&quot;,&quot;copyright&quot;:&quot;Claus Wilke&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;magaziney&quot;,&quot;is_personal_mode&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:5,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;subscriber&quot;,&quot;tier&quot;:5,&quot;accent_colors&quot;:null},&quot;paidPublicationIds&quot;:[1017072,332996,1176440,922948,1875267],&quot;subscriber&quot;:null},&quot;primary_publication&quot;:{&quot;id&quot;:5419410,&quot;subdomain&quot;:&quot;clauswilke&quot;,&quot;custom_domain&quot;:&quot;blog.genesmindsmachines.com&quot;,&quot;custom_domain_optional&quot;:false,&quot;name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;author_id&quot;:64064132,&quot;user_id&quot;:64064132,&quot;handles_enabled&quot;:false,&quot;explicit&quot;:false,&quot;is_personal_mode&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;pledges_enabled&quot;:false}}],&quot;reaction&quot;:false,&quot;reaction_count&quot;:15,&quot;comment_count&quot;:7,&quot;child_comment_count&quot;:3,&quot;audio_items&quot;:[{&quot;post_id&quot;:175157766,&quot;voice_id&quot;:&quot;en-US-OnyxTurboMultilingualNeural&quot;,&quot;audio_url&quot;:&quot;https://substack-video.s3.amazonaws.com/video_upload/post/175157766/tts/04147939-75ee-4030-b823-eef0e24eebb9/en-US-OnyxTurboMultilingualNeural.mp3&quot;,&quot;type&quot;:&quot;tts&quot;,&quot;status&quot;:&quot;completed&quot;}],&quot;is_geoblocked&quot;:false,&quot;hasCashtag&quot;:false,&quot;inboxItem&quot;:{&quot;content_key&quot;:&quot;post:175157766&quot;,&quot;updated_at&quot;:&quot;2025-10-22T13:07:26.054Z&quot;,&quot;content_date&quot;:&quot;2025-10-22T12:29:26.455Z&quot;,&quot;inbox_date&quot;:&quot;2025-10-22T12:29:26.455Z&quot;,&quot;seen_at&quot;:&quot;2025-10-22T13:07:26.054Z&quot;,&quot;saved_at&quot;:null,&quot;archived_at&quot;:null,&quot;skip_inbox&quot;:false,&quot;type&quot;:&quot;post&quot;,&quot;post_id&quot;:175157766,&quot;extra_views&quot;:[],&quot;read_progress&quot;:0,&quot;max_read_progress&quot;:1,&quot;audio_progress&quot;:0,&quot;max_audio_progress&quot;:0,&quot;video_progress&quot;:0,&quot;max_video_progress&quot;:0,&quot;postType&quot;:&quot;newsletter&quot;,&quot;title&quot;:&quot;If your random seed is 42 I will come to your office and set your computer on fire&#128293;&quot;,&quot;subtitle&quot;:&quot;Figuratively. More likely you'll get a stern talking to.&quot;,&quot;detail_view_subtitle&quot;:&quot;Figuratively. More likely you'll get a stern talking to.&quot;,&quot;cover_photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!e0-K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23bebca8-b5bb-43ce-afef-078bcb795395_1200x993.jpeg&quot;,&quot;audience&quot;:&quot;everyone&quot;,&quot;is_preview&quot;:false,&quot;audio_url&quot;:&quot;https://substack-video.s3.amazonaws.com/video_upload/post/175157766/tts/04147939-75ee-4030-b823-eef0e24eebb9/en-US-OnyxTurboMultilingualNeural.mp3&quot;,&quot;audio_type&quot;:&quot;tts&quot;,&quot;web_url&quot;:&quot;https://blog.genesmindsmachines.com/p/if-your-random-seed-is-42-i-will&quot;,&quot;duration_metadata&quot;:{&quot;word_count&quot;:2280},&quot;authors&quot;:[&quot;Claus Wilke&quot;],&quot;published_bylines&quot;:[{&quot;id&quot;:64064132,&quot;name&quot;:&quot;Claus Wilke&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86ed0b8-faec-478f-9afa-6a59f2c148fc_2000x2000.png&quot;}],&quot;coverImagePalette&quot;:{&quot;Vibrant&quot;:{&quot;rgb&quot;:[236,180,74],&quot;population&quot;:9},&quot;DarkVibrant&quot;:{&quot;rgb&quot;:[120.003,82.875,12.597],&quot;population&quot;:0},&quot;LightVibrant&quot;:{&quot;rgb&quot;:[242.403,205.27499999999998,134.99699999999999],&quot;population&quot;:0},&quot;Muted&quot;:{&quot;rgb&quot;:[132,116,92],&quot;population&quot;:544},&quot;DarkMuted&quot;:{&quot;rgb&quot;:[66,48,37],&quot;population&quot;:348},&quot;LightMuted&quot;:{&quot;rgb&quot;:[193,193,188],&quot;population&quot;:145}},&quot;publication_id&quot;:5419410,&quot;publisher_image_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3tvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b85fecd-da20-4614-b9b3-54f277cfa6bd_982x982.png&quot;,&quot;publisher_name&quot;:&quot;Genes, Minds, Machines&quot;,&quot;is_personal_mode&quot;:false,&quot;like_count&quot;:15,&quot;comment_count&quot;:7,&quot;tracking_parameters&quot;:{&quot;is_saved&quot;:false,&quot;is_seen&quot;:true,&quot;post_id&quot;:175157766,&quot;post_type&quot;:&quot;newsletter&quot;,&quot;publication_id&quot;:5419410,&quot;tabId&quot;:&quot;home&quot;,&quot;tabType&quot;:&quot;base&quot;,&quot;max_read_progress&quot;:1,&quot;max_audio_progress&quot;:0,&quot;max_video_progress&quot;:0,&quot;last_seen_at&quot;:&quot;2025-10-22T13:07:26.054Z&quot;,&quot;impression_id&quot;:&quot;5e94ed9a-83e4-4a85-bd31-03450313fa32&quot;}},&quot;is_saved&quot;:false,&quot;saved_at&quot;:null,&quot;is_viewed&quot;:true,&quot;read_progress&quot;:0,&quot;max_read_progress&quot;:1,&quot;audio_progress&quot;:0,&quot;max_audio_progress&quot;:0,&quot;video_progress&quot;:0,&quot;max_video_progress&quot;:0,&quot;restacked&quot;:false},&quot;postSelection&quot;:{&quot;id&quot;:&quot;29632fac-e8e9-453e-a2ca-9ca645d5ba59&quot;,&quot;created_at&quot;:&quot;2025-10-22T13:32:20.038Z&quot;,&quot;post_id&quot;:175157766,&quot;start_paragraph&quot;:25,&quot;end_paragraph&quot;:25,&quot;start_offset&quot;:0,&quot;end_offset&quot;:109,&quot;text&quot;:&quot;Why choose a specific random seed at all? Is this actually a good idea? In general, I think the answer is no.&quot;,&quot;is_auto_selection&quot;:false},&quot;postSelectionTheme&quot;:{&quot;name&quot;:&quot;DarkMuted&quot;,&quot;alignment&quot;:&quot;left&quot;},&quot;postImageSelection&quot;:null,&quot;clipInfo&quot;:null,&quot;mediaClip&quot;:null}],&quot;name&quot;:&quot;Nick Bailey&quot;,&quot;user_id&quot;:325256094,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3fbaba86-da9b-4436-80c7-dd2df6eb116f_2316x2316.jpeg&quot;,&quot;user_bestseller_tier&quot;:null,&quot;userStatus&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:1,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;subscriber&quot;,&quot;tier&quot;:1,&quot;accent_colors&quot;:null},&quot;paidPublicationIds&quot;:[250377],&quot;subscriber&quot;:null}},&quot;source&quot;:null,&quot;forumChannel&quot;:null}" data-component-name="CommentPlaceholder"></div><p>A somewhat similar idea: Use the current date as random seed. This at a minimum gives you a different seed each day, while also avoiding the problem of appearing to have fished for the seed that gives you desired results. The devil is in the details though of how exactly you convert the date into a seed. See this post by Stephen Turner and the subsequent replies:</p><div class="bluesky-wrap outer" style="height: auto; display: flex; margin-bottom: 24px;" data-attrs="{&quot;postId&quot;:&quot;3m3rxz2ea3k2u&quot;,&quot;authorDid&quot;:&quot;did:plc:ppvxhapnptcy5v6cih3ynmzg&quot;,&quot;authorName&quot;:&quot;Stephen Turner&quot;,&quot;authorHandle&quot;:&quot;stephenturner.us&quot;,&quot;authorAvatarUrl&quot;:&quot;https://cdn.bsky.app/img/avatar/plain/did:plc:ppvxhapnptcy5v6cih3ynmzg/bafkreif6sokzuisvfmv6hd3rzfhraijpk3o7236wiuydhz7bfaxvac62wm@jpeg&quot;,&quot;text&quot;:&quot;I forget where I first saw this trick, but this is valid #Rstats code:\n\nset.seed(2025-10-22)\n\nSetting the random seed to today's ISO 8601 avoids using the same seed, and gives you a quick reference for the day you started the project without digging through git logs.&quot;,&quot;createdAt&quot;:&quot;2025-10-22T13:42:49.086Z&quot;,&quot;uri&quot;:&quot;at://did:plc:ppvxhapnptcy5v6cih3ynmzg/app.bsky.feed.post/3m3rxz2ea3k2u&quot;,&quot;imageUrls&quot;:[]}" data-component-name="BlueskyCreateBlueskyEmbed"><iframe id="bluesky-3m3rxz2ea3k2u" data-bluesky-id="20525353762172593" src="https://embed.bsky.app/embed/did:plc:ppvxhapnptcy5v6cih3ynmzg/app.bsky.feed.post/3m3rxz2ea3k2u?id=20525353762172593" width="100%" style="display: block; flex-grow: 1;" frameborder="0" scrolling="no"></iframe></div><p>Thanks to <a href="https://bsky.app/profile/csgillespie.bsky.social/post/3m3sgvsfzb22t">Colin Gillespie over on BlueSky,</a> I have learned how to do code searches on GitHub. So now I can report that, as of this writing, there are <a href="https://github.com/search?q=%22random_state%3D42%22+language%3Apython&amp;type=code">496k cases of </a><code>random_state=42</code><a href="https://github.com/search?q=%22random_state%3D42%22+language%3Apython&amp;type=code"> on GitHub.</a> </p><p>Finally, an issue to be aware of if you&#8217;re using Matlab: It uses a fixed random seed every time, so the generated random numbers are always the same in a fresh Matlab session:</p><div class="bluesky-wrap outer" style="height: auto; display: flex; margin-bottom: 24px;" data-attrs="{&quot;postId&quot;:&quot;3m3rvlh3f3k2s&quot;,&quot;authorDid&quot;:&quot;did:plc:g2tat6psvgnnu7gpogyqktwf&quot;,&quot;authorName&quot;:&quot;Charlotte Reese Marshall used to be Tom Rhys Marshall&quot;,&quot;authorHandle&quot;:&quot;tomrhysmarshall.bsky.social&quot;,&quot;authorAvatarUrl&quot;:&quot;https://cdn.bsky.app/img/avatar/plain/did:plc:g2tat6psvgnnu7gpogyqktwf/bafkreie32qzya4hebfioztdxcubd7uyvlxowu74uy3m5mws5slymmlfpiu@jpeg&quot;,&quot;text&quot;:&quot;Even worse, don't rely on default-on-initialisation values for your random seed &#128561;&#128561;&#128561;\n\nI did some drama about this on the birdsite once: blogs.mathworks.com/matlab/2022/...&quot;,&quot;createdAt&quot;:&quot;2025-10-22T12:59:25.181Z&quot;,&quot;uri&quot;:&quot;at://did:plc:g2tat6psvgnnu7gpogyqktwf/app.bsky.feed.post/3m3rvlh3f3k2s&quot;,&quot;imageUrls&quot;:[]}" data-component-name="BlueskyCreateBlueskyEmbed"><iframe id="bluesky-3m3rvlh3f3k2s" data-bluesky-id="8700640604530805" src="https://embed.bsky.app/embed/did:plc:g2tat6psvgnnu7gpogyqktwf/app.bsky.feed.post/3m3rvlh3f3k2s?id=8700640604530805" width="100%" style="display: block; flex-grow: 1;" frameborder="0" scrolling="no"></iframe></div><p>You can read more about this <a href="https://blogs.mathworks.com/matlab/2022/06/07/6-3-7-8-5-1-2-4-9-10-or-a-story-of-surprise-about-randomness/">on the Matlab blog.</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>I am channeling <a href="https://jennybryan.org/">Jenny Bryan</a> here, who made similar statements about some <a href="https://tidyverse.org/blog/2017/12/workflow-vs-script/">widely popular, bad practices in R coding.</a> </p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>NPC = Non-player character. NPCs are all the elements of a game that do something autonomously, not directed by a human playing the game. For example, the monsters are usually NPCs.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>I.e., any integer between 10,000,000 and 99,999,999. There 90 million possible choices in this range of numbers. </p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>Most programming languages limit you to 32-bit integers as seed values. That&#8217;s equivalent to 4.3 billion different options, not even enough to give every living person on the planet their own sequence of random numbers.  </p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>For most programming languages, if you don&#8217;t specify a random seed, the language uses true randomness to set the initial state. The random initial state will be derived from a hardware random number generator (if available) or from the current time otherwise. This initial state will be different every time you start up your programming environment.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-6" href="#footnote-anchor-6" class="footnote-number" contenteditable="false" target="_self">6</a><div class="footnote-content"><p>Do I have to say it? Don&#8217;t pick 9427385. There&#8217;s nothing special about it. I just pressed some number keys and this is what came out.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-7" href="#footnote-anchor-7" class="footnote-number" contenteditable="false" target="_self">7</a><div class="footnote-content"><p>I have always preferred Adams&#8217; novels <em>Dirk Gently&#8217;s Holistic Detective Agency</em> and <em>The Long Dark Tea-Time of the Soul</em> over the <em>Hitchhiker&#8217;s Guide</em> series. But the <em>Hitchhiker&#8217;s Guide</em> series is good, in particular the first two books. The strange humor is present in all of Adams&#8217; writing, though.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-8" href="#footnote-anchor-8" class="footnote-number" contenteditable="false" target="_self">8</a><div class="footnote-content"><p>This then leads to them building another, even bigger computer, which turns out to be all of Earth, and that&#8217;s an important component of the storyline in the book. But that&#8217;s not relevant to our discussion here, which is about random seeds.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-9" href="#footnote-anchor-9" class="footnote-number" contenteditable="false" target="_self">9</a><div class="footnote-content"><p>Or not. Again, Douglas Adams&#8217; humor was a bit weird, and always trending towards rather silly.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Most graduate students propose to do too much]]></title><description><![CDATA[No thesis proposal has ever been critizied for lack of ambition]]></description><link>https://blog.genesmindsmachines.com/p/most-graduate-students-propose-to</link><guid isPermaLink="false">https://blog.genesmindsmachines.com/p/most-graduate-students-propose-to</guid><dc:creator><![CDATA[Claus Wilke]]></dc:creator><pubDate>Thu, 16 Oct 2025 16:43:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7uZJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa73567-8e38-4b70-b029-4496a6643d93_2768x3922.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Every time I post anything about PhD education, somebody stops by and claims all that professors care about is squeezing as much work as humanly possible out of PhD students. And also, of course, that professors want to keep their students around for as long as possible, definitely much longer than the customary five years, again to maximize cheap labor. While such professors do exist, I don&#8217;t think they are representative. And many graduate programs keep a watchful eye on time to graduation and make a concerted effort to get students out on time.</em></p><p><em>To provide an alternative perspective, here I&#8217;m re-publishing a lightly edited version of <a href="https://clauswilke.com/blog/2013/12/07/excess-ambitionthe-eternal-flaw-of-all-phd-thesis-proposals/">a blog post from 2013,</a> about how most graduate students propose to do too much and need to be reined in in their ambition. The post is primarily about the PhD thesis proposal, where students need to present a plan for their PhD work to a panel of professors. However, much of its content applies more broadly. Even after having successfully defended a thesis proposal many graduate students want to do too much.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7uZJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa73567-8e38-4b70-b029-4496a6643d93_2768x3922.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7uZJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa73567-8e38-4b70-b029-4496a6643d93_2768x3922.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7uZJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa73567-8e38-4b70-b029-4496a6643d93_2768x3922.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7uZJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa73567-8e38-4b70-b029-4496a6643d93_2768x3922.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7uZJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa73567-8e38-4b70-b029-4496a6643d93_2768x3922.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7uZJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa73567-8e38-4b70-b029-4496a6643d93_2768x3922.jpeg" width="1456" height="2063" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8aa73567-8e38-4b70-b029-4496a6643d93_2768x3922.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2063,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1674123,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.genesmindsmachines.com/i/172791405?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa73567-8e38-4b70-b029-4496a6643d93_2768x3922.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7uZJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa73567-8e38-4b70-b029-4496a6643d93_2768x3922.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7uZJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa73567-8e38-4b70-b029-4496a6643d93_2768x3922.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7uZJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa73567-8e38-4b70-b029-4496a6643d93_2768x3922.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7uZJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa73567-8e38-4b70-b029-4496a6643d93_2768x3922.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@armand_khoury?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Armand Khoury</a> on <a href="https://unsplash.com/photos/boy-on-ladder-under-blue-sky-Ba6IlmAzl-k?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Unsplash</a></figcaption></figure></div><p>I cannot remember ever having seen a graduate student present a PhD thesis proposal and be criticized for lack of ambition. It never happens. Even the weakest students&#8212;especially the weakest students&#8212;present proposals that are overly ambitious and that won&#8217;t ever get done, and certainly not in the 3&#8211;4 years remaining until graduation. In fact, in my experience it is exceedingly rare that a student presents a reasonable proposal, one that is actually doable during the remainder of their time in graduate school. Usually, those only happen when students &#8220;forget&#8221; to have their qualifying exams and end up presenting their &#8220;proposal&#8221; six months before the intended graduation date. In those cases, the students know that they won&#8217;t accomplish much new between proposal day and defense day, and therefore they present a proposal that consists entirely of completed work.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/most-graduate-students-propose-to?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/p/most-graduate-students-propose-to?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.genesmindsmachines.com/p/most-graduate-students-propose-to?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p>In biology PhD programs in the US, most professors expect graduate students to complete about three projects, corresponding to the magical three specific aims in a typical grant proposal.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> It follows that a graduate student who is defending their proposal, 2&#8211;3 years into their program, should have one project completed, one well under way, and one in the early planning stages. Students doing complicated experimental work might have progressed less, but at a minimum they should have one project well under way when they defend their thesis proposal. This leads to a pretty good rule of thumb for the amount of work the proposal should encompass: Aim 1 should be the work that is in the bag, and Aims 2 and 3 together should not require more than twice the amount of work already accomplished.</p><p>I rarely see PhD proposals that meet this rule of thumb. Instead, the already completed work is frequently only a small component of the proposed Aim 1, which by itself is going to take another two years to complete. Proposed Aim 2 will need four years on top of that, and Aim 3 another ten. Many graduate students propose to carry out a lifetime of research during their graduate studies.</p><p>I don&#8217;t quite know why PhD proposals tend to be overly ambitious. Maybe it&#8217;s youthful optimism or naivet&#233;. I suspect, though, that there is a component of worry, the eternal graduate student concern of not being sufficiently productive, of not doing enough. Ironically, this concern often causes students to overlook the successes that are within reach and instead try to reach for the stars. In general, doing a successful thesis is a fine balancing act between being overly ambitious and playing it too safe, a topic for another post. However, there&#8217;s a difference between an actual PhD thesis and a thesis proposal: The ideal thesis will contain some exciting, risky work, but for the proposal most professors want to see a plan that is doable, not one that might be doable if the stars align correctly. As a smart graduate student, you have two alternative plans, one safe and one daring, you work on both of them at the same time, and you only present the safe one during the committee meeting.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p><p>A second, related issue I frequently notice is that students display poor judgment in how much work they can realistically accomplish in their remaining time. Estimates are consistently too optimistic. If you are in year three, and you have completed 50% of your first project, it is unlikely that you&#8217;ll complete this and two entirely different projects in the remaining 2&#8211;3 years of your PhD. Further, unless you&#8217;re a paper-writing machine, it&#8217;s unlikely that you can write a paper in less than three months.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> So, if you still have three manuscripts to complete, plus a thesis, the writing time alone is going to be about a year. If you&#8217;re already halfway into year three, you&#8217;ll have about another 18 months of actual research work you can do, because the other 12 you&#8217;ll spend writing. (Of course I&#8217;d recommend that you <a href="https://blog.genesmindsmachines.com/p/from-the-archives-when-should-you">don&#8217;t wait all the way till the end before you start writing</a>, but the math comes out the same.) My personal rule of thumb is things take about three times longer than what students estimate. So if a student says a particular project needs another three months in the lab plus a month to be written up, I expect that project to be done around the same time next year.</p><p>In conclusion, when you prepare your thesis proposal, realistically assess how much work you can complete during the remainder of your graduate years. Don&#8217;t assume that your productivity will double or triple over the next two years, because it won&#8217;t. Budget at least three months for every paper you have to write, and triple the time you think it takes to complete the remaining lab work. If you have papers in review, consider that responding to reviewer comments and revising a paper frequently takes another two to three months, during which nothing else gets done. If you end up with a plan that will require another five years of work or more, then you&#8217;ll have to change your aims. See whether your current Aim 1 can be broken down into reasonable sub-aims which can be considered the separate chapters of your thesis. It&#8217;s quite common for me to conclude a PhD proposal defense by telling the student it&#8217;d be best to scrap Aims 2 and 3 altogether and instead expand Aim 1 into the entire thesis. If you come to this realization before the committee meeting, I won&#8217;t have to tell you so during, and everybody is happier.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.genesmindsmachines.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Genes, Minds, Machines! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>While proposals with either two or four aims can also be viable, two can appear as unimaginative (he really couldn&#8217;t think of anything else?) and four is getting dangerously close to being overly ambitious, so three it is.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>And you abandon the daring plan the moment you realize it won&#8217;t be possible to bring it to completion.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>Also, if you&#8217;re a paper-writing machine, why haven&#8217;t you written a bunch of papers already by the time you&#8217;re defending your proposal?</p><p></p></div></div>]]></content:encoded></item></channel></rss>