<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Programming Digest</title>
    <atom:link href="https://programmingdigest.net/newsletters.rss" rel="self" type="application/rss+xml"/>
    <description>Newsletters from Programming Digest</description>
    <link>https://programmingdigest.net/</link>
    <language>en</language>
    <lastBuildDate>Fri, 06 Nov 2026 17:02:35 +0100</lastBuildDate>
    <image>
      <url>https://programmingdigest.net/assets/favicons/programming/favicon-dcaa6d55.png</url>
      <title>Programming Digest</title>
      <link>https://programmingdigest.net/</link>
    </image>
    <item>
      <title>How I use AI</title>
      <author>jakub@programmingdigest.net (Jakub Chodounsky)</author>
      <pubDate>Sun, 08 Nov 2026 20:15:00 +0100</pubDate>
      <link>https://programmingdigest.net/newsletters/2404-how-i-use-ai</link>
      <guid>https://programmingdigest.net/newsletters/2404-how-i-use-ai</guid>
      <description>coding agents now write over 90% of the code while humans focus on architecture and quality</description>
      <content:encoded>
        <![CDATA[<p><a href="https://programmingdigest.net/links/23659/rss">How I use AI</a><br><em>23 minutes</em> by Ben Stolovitz</p>
<p>AI tools have changed dramatically in just 12 months. Coding agents now write over 90% of the code, handling features and bug fixes while humans focus on architecture and quality. AI search, tutoring, and transcription work well, though writing assistance remains mediocre and AI art feels like a net negative when used commercially. The technology is powerful, but how we choose to use it still matters most.</p>
<p><a href="https://programmingdigest.net/links/23660/rss">New Extract API and 100+ Search Engine APIs</a><br><em>sponsored by SerpApi</em></p>
<p>Access real-time search data with SerpApi’s 100+ specialized search engine APIs, then use the new Extract API to retrieve structured content from web pages.</p>
<p><a href="https://programmingdigest.net/links/23661/rss">Updating a vector database is no simple thing</a><br><em>8 minutes</em> by Doug Turnbull</p>
<p>Doug explains the challenges of updating vector databases in production. He explores how HNSW handles inserts, updates, and deletes, highlighting the trade-offs between search speed and write performance. He also compares different database approaches and recommends testing with real production traffic rather than relying on simple benchmarks when choosing a vector database.</p>
<p><a href="https://programmingdigest.net/links/23662/rss">Message queues</a><br><em>13 minutes</em> by Alex Ewerlöf</p>
<p>Message queues sit between services that produce work and services that do the work, letting each side run at its own pace. When traffic spikes, the queue absorbs the load instead of crashing the system. If a worker fails mid-task, the message is redelivered rather than lost. Choose a queue for async tasks, bursty traffic, or when reliability matters, but avoid them when you need fast, synchronous responses.</p>
<p><a href="https://programmingdigest.net/links/23663/rss">Little things</a><br><em>6 minutes</em> by Paul W. Homer</p>
<p>Good coding habits matter more than most people think. Paul suggests setting up your environment and foundations before writing core logic, and always answering open questions early rather than assuming. Use lots of small, well-named functions instead of comments, keep loops minimal, and never sacrifice readability for cleverness. When something feels wrong or repetitive, stop and find a smarter approach.</p>
<p><a href="https://programmingdigest.net/links/23664/rss">We replaced Redis with MySQL for inventory reservations—and it scaled</a><br><em>11 minutes</em> by Emilie Noel</p>
<p>Shopify replaced Redis with MySQL for inventory reservations during checkout, using MySQL 8's SKIP LOCKED feature to handle concurrent purchases without overselling. The key design stores one row per inventory unit instead of one row per item, reducing lock contention at scale. The biggest surprise was that the real bottleneck was database connection usage from unrelated checkout code, not the reservation queries themselves. Fixing that, plus a configuration update, cut primary database reads by 50% and kept CPU well under 50% during peak traffic.</p>
<p>And the most popular article from the last issue was:</p>
<ul>
<li><a href="https://programmingdigest.net/links/23665/rss">Getting good at AI takes time and practice</a></li>
</ul>]]>
      </content:encoded>
    </item>
    <item>
      <title>Why I am a programmer</title>
      <author>jakub@programmingdigest.net (Jakub Chodounsky)</author>
      <pubDate>Sun, 01 Nov 2026 20:15:00 +0100</pubDate>
      <link>https://programmingdigest.net/newsletters/2399-why-i-am-a-programmer</link>
      <guid>https://programmingdigest.net/newsletters/2399-why-i-am-a-programmer</guid>
      <description>a kid discovers the underground world of BBSs, pirated games, and the mesmerizing digital art</description>
      <content:encoded>
        <![CDATA[<p><a href="https://programmingdigest.net/links/23599/rss">Why I am a programmer</a><br><em>5 minutes</em> by Alfie John</p>
<p>Growing up before the internet, a kid discovers the underground world of BBSs, pirated games, and the mesmerizing digital art that played before them, called demos. Stumbling onto a tutorial series about how to create these effects sparks a deep desire to go from spectator to creator. It is a story about how exposure to something mind blowing at a young age can set the course of a life.</p>
<p><a href="https://programmingdigest.net/links/23600/rss">Vector search can't tell which memory is current</a><br><em>sponsored by Oracle</em></p>
<p>When user preferences change, a flat memory store keeps both versions, and ranking alone doesn’t say which one is current. Using graph retrieval, link the new memory to the one it replaced and mark the old one as history instead of deleting it. The agent gives the right answer and can still explain what changed. See the code &amp; companion notebook.</p>
<p><a href="https://programmingdigest.net/links/23601/rss">Getting good at AI takes time and practice</a><br><em>3 minutes</em> by Sean Goedecke</p>
<p>It shouldn’t be surprising that working with AI involves actual skills. It’s like working with a really weird person: a savant with mad skills in some areas and huge gaps in others, a prolific but inexpert communicator, a workaholic with no long-term memory, and so on. If you were a manager and had someone like that as your employee, you could likely get a lot of value out of them, but it would take time to figure out how.</p>
<p><a href="https://programmingdigest.net/links/23602/rss">The compiler was supposed to end programming too</a><br><em>14 minutes</em> by Hatim Rih</p>
<p>AI tools are changing software development fast, but not ending it. Agents now handle routine coding tasks overnight, yet they still stop when a decision requires human judgment. Adoption is high but satisfaction is mixed, and teams are drowning in code faster than they can review it. The hardest parts of the job, deciding what to build and verifying it works correctly, remain stubbornly human.</p>
<p><a href="https://programmingdigest.net/links/23603/rss">Backups aren't simple</a><br><em>10 minutes</em> by Aleksandar Filipovski</p>
<p>Data loss is more common than most people expect, and simple backups are not enough. A good backup system needs multiple copies across different storage types, with one kept offsite. It also needs point-in-time snapshots so you can recover from mistakes, not just hardware failure. Rather than building this yourself, mature tools like Borg or Restic handle the hard parts, but you must regularly test restoring your data or none of it matters.</p>
<p><a href="https://programmingdigest.net/links/23604/rss">Node at scale, rebalanced: How Booking cut cost by 38%</a><br><em>19 minutes</em> by Ilya Malyavin</p>
<p>Switching from pm2 to wattpm for process management, combined with smarter nginx load balancing and tuned garbage collection settings, cut compute costs by 38% on Booking's largest Node service. The team ran 30% fewer pods, reduced memory use by 20%, and cut tail latency by up to 10%. No application code changes were needed, and other teams could adopt the improvement by changing a single config flag.</p>
<p>And the most popular article from the last issue was:</p>
<ul>
<li><a href="https://programmingdigest.net/links/23605/rss">I'm sorry, but you still have to think</a></li>
</ul>]]>
      </content:encoded>
    </item>
    <item>
      <title>I'm sorry, but you still have to think</title>
      <author>jakub@programmingdigest.net (Jakub Chodounsky)</author>
      <pubDate>Sun, 25 Oct 2026 20:15:00 +0100</pubDate>
      <link>https://programmingdigest.net/newsletters/2394-i-m-sorry-but-you-still-have-to-think</link>
      <guid>https://programmingdigest.net/newsletters/2394-i-m-sorry-but-you-still-have-to-think</guid>
      <description>you still need to understand their systems, evaluate trade-offs, and test carefully to build reliable software</description>
      <content:encoded>
        <![CDATA[<p><a href="https://programmingdigest.net/links/23530/rss">I'm sorry, but you still have to think</a><br><em>8 minutes</em> by Piotr Sarnacki</p>
<p>Piotr argues that AI-generated code is not automatically reliable. Comparing Rust and Elixir rewrites of a chat application reveals important differences in performance, message delivery, and resource usage. He highlights the limits of benchmarks and shows how design choices affect real-world behavior. Developers still need to understand their systems, evaluate trade-offs, and test carefully to build reliable software, even when AI does most of the coding.</p>
<p><a href="https://programmingdigest.net/links/23531/rss">100+ Search Engines. One Simple API.</a><br><em>sponsored by SerpApi</em></p>
<p>Build with real-time search data from Google, YouTube, Amazon, and more. SerpApi delivers structured results in JSON and Markdown for AI agents and your next app. Skip scraping headaches. Start building with a simple API. </p>
<p><a href="https://programmingdigest.net/links/23532/rss">Let's build a compressor from scratch</a><br><em>5 minutes</em> by Adolfo Ochagavía</p>
<p>Compression shrinks files by rewriting data more efficiently without losing any information. A common method called Huffman coding works by giving shorter codes to bytes that appear often and longer codes to rare ones. Building a basic compressor with this approach takes only a few hundred lines of code and can cut a book's file size nearly in half.</p>
<p><a href="https://programmingdigest.net/links/23533/rss">Good interfaces make good neighbors</a><br><em>2 minutes</em> by Andrew Bosworth</p>
<p>Andrew points out that clashing teams often have an interface problem, not a relationship problem. Good collaboration needs three things: clear ownership so anyone can find who is accountable, an honest priority list that includes what was left out, and a defined process for handling new requests. With those in place, disagreements stay manageable and escalation becomes rare.</p>
<p><a href="https://programmingdigest.net/links/23534/rss">The lightbulb computer</a><br><em>7 minutes</em> by Guillaume Ardaud</p>
<p>Projecting information onto surfaces around your home could be a better future for computing than smart glasses or small screens. A lightbulb-shaped device combining a projector with computer vision could let you view recipes, maps, and photos on any surface, control smart home devices by pointing, and get answers to questions hands-free. Unlike eyewear, it works socially, requires no face-mounted hardware, and blends naturally into everyday spaces.</p>
<p><a href="https://programmingdigest.net/links/23535/rss">I love software rendering</a><br><em>4 minutes</em> by James Mackenzie</p>
<p>Software rendering in old DOS games means the CPU draws every pixel, with no graphics card involved. This produces sharp, gritty visuals that many prefer over the smoothed look of early 3D card acceleration. Running these games on fast modern hardware lets you push resolutions that were impossible in the 1990s, and doing it on real hardware rather than emulation keeps performance solid.</p>
<p>And the most popular article from the last issue was:</p>
<ul>
<li><a href="https://programmingdigest.net/links/23536/rss">How to effectively debug when you no longer understand the code</a></li>
</ul>]]>
      </content:encoded>
    </item>
    <item>
      <title>How to debug when you no longer understand the code</title>
      <author>jakub@programmingdigest.net (Jakub Chodounsky)</author>
      <pubDate>Sun, 18 Oct 2026 20:15:00 +0200</pubDate>
      <link>https://programmingdigest.net/newsletters/2388-how-to-debug-when-you-no-longer-understand-the-code</link>
      <guid>https://programmingdigest.net/newsletters/2388-how-to-debug-when-you-no-longer-understand-the-code</guid>
      <description>debugging with agents works best when treated as a constraint satisfaction problem</description>
      <content:encoded>
        <![CDATA[<p><a href="https://programmingdigest.net/links/23476/rss">How to effectively debug when you no longer understand the code</a><br><em>about 1 hour</em> by Cindy Sridharan</p>
<p>Debugging with AI agents works best when treated as a constraint satisfaction problem, not a code reading exercise. Collect hard facts first from logs, telemetry, DNS, kernel data, and packet captures, then use a control case to separate real signals from noise. Only then should an agent form hypotheses, and each one must satisfy every known fact or get discarded. Cindy argues that understanding systems matters more than understanding code, and that better tooling and processes will do more to improve agentic debugging than individual prompting skill.</p>
<p><a href="https://programmingdigest.net/links/23477/rss">Build a sustainable foundation with an AI Operating Layer</a><br><em>sponsored by Coder</em></p>
<p>AI has changed the rules of the industry, but without governance, it’s one unending headache. You need an environment that meets specific requirements for sustainable security. Check out Coder’s white paper “The AI Operating Layer” and learn how to build effective governance into your tech stack, with a clear checklist of requirements. <a href="https://programmingdigest.net/links/23478/rss" target="_blank" rel="noopener" data-saferedirecturl="https://www.google.com/url?q=https://fandf.co/4c60tvE&amp;source=gmail&amp;ust=1792226785368000&amp;usg=AOvVaw1RkMtgbfIa4i7GE1Esg8f7">Read more</a>.</p>
<p><a href="https://programmingdigest.net/links/23479/rss">How did Apple Silicon get 50% faster in three years?</a><br><em>3 minutes</em> by Daniel Lemire</p>
<p>Apple's M-series chips got about 50% faster on single-core tasks from 2022 to 2025, with multicore speed nearly doubling. Much of the gain comes from higher clock speeds, rising from 3.5 GHz to 4.6 GHz on performance cores, plus wider instruction decoding and more memory bandwidth. The new M6 adds two extra cores and more bandwidth, promising further gains.</p>
<p><a href="https://programmingdigest.net/links/23480/rss">The bedrock of software design</a><br><em>11 minutes</em> by Alex Fedoseev</p>
<p>Algebraic data types let you encode domain rules directly into your types, so invalid states simply cannot exist. Sum types in particular force you to represent every possible outcome explicitly, whether that is success, failure, or absence of a value. Pattern matching then ensures you handle every case, and the compiler flags anything you miss. Together, they turn many runtime surprises into compile-time errors.</p>
<p><a href="https://programmingdigest.net/links/23481/rss">State of devs survey results 2026</a><br><em>4 minutes</em> by Miranda Heath</p>
<p>Many developers are facing job insecurity, burnout, and uncertainty about their futures, with a quarter having been laid off at some point. AI is a major source of division, with nearly equal numbers feeling positive and negative about it, and many saying it harms their mental state and makes work less rewarding. Discrimination against women and pressure on LGBT+ and neurodivergent developers to hide their identities remain persistent problems.</p>
<p><a href="https://programmingdigest.net/links/23482/rss">How to achieve pruning when querying by non-partitioned columns</a><br><em>17 minutes</em> by Haki Benita</p>
<p>Partition pruning normally only works when querying by the partition key, making that choice difficult. But if your data has predictable patterns, like sequential IDs that correlate strongly with time, you can add check constraints to communicate data ranges to the query planner. This lets the database skip irrelevant partitions even when filtering by non-key columns. For datasets with outliers, using multiple ranges in a single constraint keeps pruning effective without losing accuracy.</p>
<p>And the most popular article from the last issue was:</p>
<ul>
<li><a href="https://programmingdigest.net/links/23483/rss">How to read code</a></li>
</ul>]]>
      </content:encoded>
    </item>
    <item>
      <title>How to read code</title>
      <author>jakub@programmingdigest.net (Jakub Chodounsky)</author>
      <pubDate>Sun, 11 Oct 2026 20:15:00 +0200</pubDate>
      <link>https://programmingdigest.net/newsletters/2384-how-to-read-code</link>
      <guid>https://programmingdigest.net/newsletters/2384-how-to-read-code</guid>
      <description>most people struggle by reading code front to back, losing track of the flow</description>
      <content:encoded>
        <![CDATA[<p><a href="https://programmingdigest.net/links/23439/rss">How to read code</a><br><em>7 minutes</em> by Sean Goedecke</p>
<p>Reading code differs from reading books because code order is set by the computer, not for human understanding, and engineers usually read changes to existing code rather than fresh programs. Most people struggle by reading code front to back, losing track of the flow. A better approach is making several passes, first tracing the overall structure and execution path, then diving into details. AI tools don't remove the need to read code, since their output often conflicts with a team's values and standards.</p>
<p><a href="https://programmingdigest.net/links/23440/rss">100+ Search Engines. One Simple API.</a><br><em>sponsored by SerpApi</em></p>
<p>Build with real-time search data from Google, YouTube, Amazon, and more. SerpApi delivers structured results in JSON and Markdown for AI agents and your next app. Skip scraping headaches. Start building with a simple API.</p>
<p><a href="https://programmingdigest.net/links/23441/rss">The system around the code</a><br><em>about 1 hour</em> by Zarar Siddiqi</p>
<p>AI tools have mostly solved writing code. The real challenge now is the system around the code: the pipeline, review process, team structure, and culture. Most AI strategies stall because they treat AI as a purchase rather than a reason to redesign how work flows. The bottleneck has simply moved from writing code to reviewing and shipping it, and throwing more AI at the problem makes that worse, not better.</p>
<p><a href="https://programmingdigest.net/links/23442/rss">Packing binary is fun</a><br><em>25 minutes</em> by Pranav Desai</p>
<p>Storing data as JSON wastes space, so Pranav's project explores building a custom binary format instead. It works by encoding field types and lengths into compact headers using variable-length integers, then using a schema file to avoid repeating type information for every value. A full compiler pipeline handles the schema language, including a lexer, parser, and code generator. The result cuts a typical JSON payload down by around 80%.</p>
<p><a href="https://programmingdigest.net/links/23443/rss">English: A vs an</a><br><em>6 minutes</em> by Amit Patel</p>
<p>Choosing between "a" and "an" seems simple: use "an" before vowels. But the rule applies to sounds, not spelling. Words like "unicorn" start with a vowel letter yet take "a" because they begin with a consonant sound. Using a pronunciation dictionary to test this, most English words follow the first-letter rule, with only a small set of exceptions that can be handled with around 20 string-matching rules.</p>
<p><a href="https://programmingdigest.net/links/23444/rss">Aho-Corasick algorithm for simultaneous substring matching</a><br><em>8 minutes</em> by Colin James</p>
<p>The Aho-Corasick algorithm finds multiple patterns in a string at the same time. It starts by building a trie from the target patterns, then adds suffix links and output links to handle mismatches and overlapping matches. These links are computed in a breadth-first pass and let the automaton recover quickly when a match fails. The result is a fast, deterministic machine that scans input only once.</p>
<p>And the most popular article from the last issue was:</p>
<ul>
<li><a href="https://programmingdigest.net/links/23445/rss">Last time my family was replaced by technology</a></li>
</ul>]]>
      </content:encoded>
    </item>
  </channel>
</rss>
