<?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/">
  <channel>
    <title>DEV Community: Krzysztof Grajek</title>
    <description>The latest articles on DEV Community by Krzysztof Grajek (@kg_8e39a203).</description>
    <link>https://dev.to/kg_8e39a203</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4185032%2F453ee87e-e410-4b41-8bb4-01442dedf246.jpg</url>
      <title>DEV Community: Krzysztof Grajek</title>
      <link>https://dev.to/kg_8e39a203</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kg_8e39a203"/>
    <language>en</language>
    <item>
      <title>I hate letting AI write my Rust. So I built a coach that won't.</title>
      <dc:creator>Krzysztof Grajek</dc:creator>
      <pubDate>Thu, 15 Oct 2026 19:04:10 +0000</pubDate>
      <link>https://dev.to/kg_8e39a203/i-hate-letting-ai-write-my-rust-so-i-built-a-coach-that-wont-347b</link>
      <guid>https://dev.to/kg_8e39a203/i-hate-letting-ai-write-my-rust-so-i-built-a-coach-that-wont-347b</guid>
      <description>&lt;p&gt;You've probably learned some Rust this way: you hit a borrow checker error, paste it into a chatbot, get a clear explanation and a fixed version, paste that back, and the build goes green. It feels productive. A week later you hit the same error and you're back in the chat window.&lt;/p&gt;

&lt;p&gt;The explanation was fine. What was missing is everything around it: an order to learn things in, someone who remembers what you got wrong last time, and a rule that says you write the code until it actually passes.&lt;/p&gt;

&lt;p&gt;That's what I built &lt;a href="https://rustcoach.dev/" rel="noopener noreferrer"&gt;rustcoach&lt;/a&gt; for. It's an AI coach (built on Claude) wrapped in a structure that a chat window doesn't have. This post walks through it with screenshots from a real lesson.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start by finding out what you actually know
&lt;/h2&gt;

&lt;p&gt;Before any lesson, you can take a free Rust skills test. You don't need an account.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpgpm1vsi3o1u4gnseeiw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpgpm1vsi3o1u4gnseeiw.png" alt=" " width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;General test: 30 questions across all five areas, about ten minutes.&lt;/li&gt;
&lt;li&gt;Module test: 20 questions on one area: async, macros, concurrency or the type system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions go from easiest to hardest, and most of them show real Rust code: what does this print, does this compile, which line panics. You see the right answer and the reasoning right after each one, so the test teaches while it measures.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F11pa8hqufc70omsxh5cp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F11pa8hqufc70omsxh5cp.png" alt=" " width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The bank has 609 questions, and 446 of them include a Rust snippet. Each snippet carries a claim (it compiles, it fails with a specific error, it prints this output, or it panics), and a tool compiles and runs every snippet to check that claim. A question that says "this prints X" has actually been run and printed X.&lt;/p&gt;

&lt;p&gt;At the end you get a level (Beginner, Intermediate, Advanced or Expert), a bar per area, your strongest and weakest topics, every question you missed with the correct answer, and a recommendation for which module to take. Here's mine after clicking through at random to get to the report quickly. It doesn't flatter you:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frfbm3opu19i3xi0jbop9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frfbm3opu19i3xi0jbop9.png" alt=" " width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you sign up afterwards, you can choose to share the result with the coach. That's off by default. If you turn it on, the coach plans your first lessons knowing which topics you got right and wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Structure: a syllabus, in order
&lt;/h2&gt;

&lt;p&gt;A chatbot waits for you to know what to ask. rustcoach gives you five courses, each with its own chapters, topics and progress:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Module&lt;/th&gt;
&lt;th&gt;Chapters&lt;/th&gt;
&lt;th&gt;Topics&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Core Rust&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Async &amp;amp; Tokio&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Macros&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Concurrency &amp;amp; Atomics&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;52&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Advanced Types &amp;amp; Traits&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Core Rust goes from bindings, ownership and borrowing through traits, lifetimes, iterators, smart pointers, threads, macros, unsafe and async. Each deep-dive module opens with a short Foundations chapter, and any topics you already covered in Core Rust start ticked off.&lt;/p&gt;

&lt;p&gt;Every topic has a mastery score and the coach's own notes on how you did. It goes up when you get things right and down when you don't:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fno12v4txc953hsn0g0d6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fno12v4txc953hsn0g0d6.png" alt=" " width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A lesson is written for you
&lt;/h2&gt;

&lt;p&gt;There's no "lesson 7" that everyone gets. The coach reads its notes on you first, re-tests what went wrong last time, then teaches one idea with code you can run.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fip4m1uhsrg4jy6rnmi12.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fip4m1uhsrg4jy6rnmi12.png" alt=" " width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every two or three explanations, it stops and checks that the idea landed: one question, a few options, one click.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkqwj103w1evwkpmhyknu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkqwj103w1evwkpmhyknu.png" alt=" " width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The rail on the right keeps the context in view: the topic's mastery and the coach's note on you, review cards due, and this lesson's quick-check score.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then you write the code. Until it's correct.
&lt;/h2&gt;

&lt;p&gt;This is the part that makes the difference. Each lesson builds to an assignment: a real cargo crate with integration tests, written to fail on the starter code and pass on a correct solution. You code in the browser and the tests run with real cargo test in a locked-down sandbox (no network, capped memory and CPU, read-only filesystem).&lt;/p&gt;

&lt;p&gt;In this lesson the assignment was a vending machine: restock must treat a zero count as a bug (assert!), and buy must treat "not enough money" as an expected failure (Err). Here are the starter's tests going red:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbp4luy7j8wd64714g0nh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbp4luy7j8wd64714g0nh.png" alt=" " width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My first attempt didn't compile. Each rustc error is listed and its line tinted:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flr2fxs2t22hjutbwf7g2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flr2fxs2t22hjutbwf7g2.png" alt=" " width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Explain with the coach turns the error into plain English: what is wrong, and what to try. It doesn't write the fix for you:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa6tv1tmcw102yvegrhun.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa6tv1tmcw102yvegrhun.png" alt=" " width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Stuck on what to reach for? Hints puts a coach note next to each function: the API to use and the trap to avoid, never the answer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzcd1nai8btlldpjh8s34.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzcd1nai8btlldpjh8s34.png" alt=" " width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When it builds, every run also runs cargo clippy. Each lint shows up as a broom in the gutter, with the message, the help and a link. My solution passed all five tests and still got one:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2lbxexsus1xwn4gyx8jb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2lbxexsus1xwn4gyx8jb.png" alt=" " width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Trace runs a function through one of its tests and shows the value of every variable, line by line. It's a debugger for people who don't have one set up yet:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F13bclq2fzgrix4z9jogv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F13bclq2fzgrix4z9jogv.png" alt=" " width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The review: green tests aren't the end
&lt;/h2&gt;

&lt;p&gt;When you submit, the coach reviews the code like a pull request: correctness first, then idioms, style and understanding. Clippy notes go to the coach too, and it teaches the idiom behind one of them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi7a8oi37cewdosy17h4p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi7a8oi37cewdosy17h4p.png" alt=" " width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Look at the second paragraph: "This is the second lesson in a row with this lint." It remembered. It also pointed out something I got right without being asked: each u32 subtraction sits on the branch where it can't underflow.&lt;/p&gt;

&lt;p&gt;Accepted work can earn one optional stretch challenge, like making this version more idiomatic. So I tried the obvious thing:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzsnw74lrktqvaj1lgr41.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzsnw74lrktqvaj1lgr41.png" alt=" " width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It said no, explained why, and split the task into steps with examples on different data that you can't paste in. This is the core rule: the coach never writes your assignment's solution, not even when you ask or say you give up. You can ask as many questions as you want and get as many hints, explanations and examples as you need, but the code you submit is always yours.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remembering, so it sticks
&lt;/h2&gt;

&lt;p&gt;Writing the code once isn't enough. When a lesson is signed off, the coach writes two review cards per topic it covered. They come back after 1, 3, 7, 14, 30 and 60 days, and a wrong answer sends the card back to the start, so it returns tomorrow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvidij1m8z9h5b0zx9n0g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvidij1m8z9h5b0zx9n0g.png" alt=" " width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every lesson stays in History, with the coach's summary of what it taught, how you did and what to revisit, plus the full transcript:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxc0nsd1mw4pbn21ptm7j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxc0nsd1mw4pbn21ptm7j.png" alt=" " width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Any topic you've been taught can be redone. The redo pauses the running lesson and keeps your editor code, then returns you to it afterwards.&lt;/p&gt;

&lt;h2&gt;
  
  
  Small things developers will like
&lt;/h2&gt;

&lt;p&gt;If you're coming from Python, JavaScript or Java, these are the details that make it feel like a dev tool rather than a course:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The real toolchain. Your code goes through cargo test, cargo clippy and rustfmt. The errors and lints you see are the compiler's own, not simulated.&lt;/li&gt;
&lt;li&gt;Keyboard first. ⌘↵ runs tests, ⌘⇧F formats, ⌘⇧↵ submits, and ? lists every shortcut.&lt;/li&gt;
&lt;li&gt;scratch.rs. A throwaway binary crate next to the assignment for "wait, what does this actually do?" moments.&lt;/li&gt;
&lt;li&gt;Explain a selection. Select any code (or put the cursor in a function), hit Explain, and it goes to the coach as a question.&lt;/li&gt;
&lt;li&gt;Your weak spots, tracked. Every topic keeps a mastery score and the coach's notes, and the coach re-tests what you got wrong before teaching something new.&lt;/li&gt;
&lt;li&gt;Streaks and milestones. They're small, and they work.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What it costs
&lt;/h2&gt;

&lt;p&gt;There's no subscription. A new account starts with 5 free credits, which last up to 5 lessons, and you don't need a card. After that, the Course is $49 once (before tax) for 50 credits. That covers a typical learner through one full module if you already program a bit in another language. Top-ups start at $10. The skills test is free and needs no account.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Test your Rust (free, no account): &lt;a href="//rustcoach.dev/test"&gt;rustcoach.dev/test&lt;/a&gt;&lt;br&gt;
Start learning: &lt;a href="//rustcoach.dev"&gt;rustcoach.dev&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rust</category>
      <category>learning</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
