<?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>Forem: Gold roger</title>
    <description>The latest articles on Forem by Gold roger (@gold_roger).</description>
    <link>https://forem.com/gold_roger</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2653752%2Ff6c1c68e-0fc9-4330-a4fb-ca4531572acb.png</url>
      <title>Forem: Gold roger</title>
      <link>https://forem.com/gold_roger</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/gold_roger"/>
    <language>en</language>
    <item>
      <title>I'm Getting Lazy, and AI Is Letting Me</title>
      <dc:creator>Gold roger</dc:creator>
      <pubDate>Thu, 26 Mar 2026 19:48:38 +0000</pubDate>
      <link>https://forem.com/gold_roger/im-getting-lazy-and-ai-is-letting-me-3ha6</link>
      <guid>https://forem.com/gold_roger/im-getting-lazy-and-ai-is-letting-me-3ha6</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Okay, so I need to be real with myself about something.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I've been building a lot lately with AI in the tab next to my editor. And somewhere along the way, something shifted. I don't think it's good.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it starts:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'll begin a project feeling confident. I write some code. Actually understand what I'm doing. Then I hit a bug or need the next feature, and instead of sitting with the problem for five minutes, I just... describe it to Claude. Tab-tab-tab. Copy. Paste. Next.&lt;/p&gt;

&lt;p&gt;It feels efficient. Except I'm not actually coding anymore. I'm describing what I want and waiting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then it gets worse.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After a few features, I realize I don't actually know what my own app does anymore. Not really. I can describe the vision, sure. But the &lt;em&gt;logic&lt;/em&gt;? The way the pieces fit together? I'm fuzzy on it. And that's when I catch myself asking the AI "what should I do next?" instead of thinking.&lt;/p&gt;

&lt;p&gt;That moment sucks. It's like my brain just... checked out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here's what I think is happening:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There's something people call "LLM brain poisoning." Sounds dramatic, but hear me out. Every time you skip the struggle — the debugging, the thinking, the &lt;em&gt;figuring it out&lt;/em&gt; — your brain doesn't build that understanding. You're outsourcing the hard part. And the hard part is where learning lives.&lt;/p&gt;

&lt;p&gt;Your problem-solving atrophies. Your memory gets worse. Critical thinking becomes... optional.&lt;/p&gt;

&lt;p&gt;And the wild part? You &lt;em&gt;feel&lt;/em&gt; more productive. You shipped three features today. But did you understand them? Or did the AI understand them and you just watched?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So what am I doing about it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'm forcing myself to code first. Sit with the problem. Get frustrated. Figure it out. &lt;em&gt;Then&lt;/em&gt; if I want, I'll let AI review or clean it up.&lt;/p&gt;

&lt;p&gt;Because the code I write myself — even the messy, inefficient code — that's &lt;em&gt;my&lt;/em&gt; code. I know it. I own it. And next time I see that pattern, I won't need to ask.&lt;/p&gt;

&lt;p&gt;That's the difference between using AI and letting AI use you.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>development</category>
      <category>devjournal</category>
      <category>newbie</category>
    </item>
    <item>
      <title>Git Explained: From Mental Models to Production Workflows</title>
      <dc:creator>Gold roger</dc:creator>
      <pubDate>Mon, 09 Mar 2026 23:44:21 +0000</pubDate>
      <link>https://forem.com/gold_roger/git-explained-from-mental-models-to-production-workflows-1nkc</link>
      <guid>https://forem.com/gold_roger/git-explained-from-mental-models-to-production-workflows-1nkc</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;If you're like me, you started using Git because someone told you to. You learned the magic words—&lt;code&gt;git add&lt;/code&gt;, &lt;code&gt;git commit&lt;/code&gt;, &lt;code&gt;git push&lt;/code&gt;—and they kinda worked. But you didn't really &lt;em&gt;understand&lt;/em&gt; what was happening underneath. &lt;/p&gt;

&lt;p&gt;This article is for you. I'm going to walk you through Git the way it finally clicked for me: starting with a mental model that actually makes sense, then building up to real-world workflows that professionals use every day.&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 1: The Mental Model
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Commits: Snapshots in Time
&lt;/h3&gt;

&lt;p&gt;Forget thinking of commits as "saves." Think of them as &lt;strong&gt;photographs of your entire codebase at a moment in time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you make a commit, Git takes a picture of all your files—exactly as they exist right now. That photo is stored in Git's database forever. You can always go back and look at it, or restore your code to exactly how it was in that moment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key insight:&lt;/strong&gt; Every commit is complete. If you want to see what your code looked like 5 commits ago, Git can show you the entire state—all files, all changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Commit Train: Building History
&lt;/h3&gt;

&lt;p&gt;Now imagine linking these commits together in a chain. The first commit has no parent. The second commit points back to the first. The third points to the second. And so on.&lt;/p&gt;

&lt;p&gt;This chain is your &lt;strong&gt;history&lt;/strong&gt;. It's a train of commits, each one building on the last. This is why Git is powerful—you can see the entire journey of how your code evolved.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Commit 1 → Commit 2 → Commit 3 → Commit 4
(Initial)  (Feature)  (Bug fix)  (Refactor)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can move back along this train whenever you want. Go back to Commit 2? Your code looks exactly as it did then.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Staging Area: Selective Commits
&lt;/h3&gt;

&lt;p&gt;Here's where most people get confused. Why does Git have &lt;em&gt;two&lt;/em&gt; steps—&lt;code&gt;git add&lt;/code&gt; and &lt;code&gt;git commit&lt;/code&gt;—instead of just one?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Answer: Control.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine your project has 4 files, but you only want to commit 3 of them right now. The staging area lets you do this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;git add file1.py file2.py file3.py&lt;/code&gt;&lt;/strong&gt; — Add the 3 files you want&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;git commit -m "your message"&lt;/code&gt;&lt;/strong&gt; — Commit only those 3 files&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The fourth file stays out of the commit. It's still changed on your computer, but it's not part of this snapshot.&lt;/p&gt;

&lt;p&gt;This matters because it lets you &lt;strong&gt;organize your commits logically&lt;/strong&gt;. One commit = one logical piece of work. Not a jumble of unrelated changes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 2: Branches—Parallel Universes of Code
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Problem with One Timeline
&lt;/h3&gt;

&lt;p&gt;Imagine you're building a repair shop app. You're working on Feature A (booking system). Then your boss says "we need Feature B (payment processing) shipped tomorrow."&lt;/p&gt;

&lt;p&gt;If you just keep committing to the same line, you'll have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Commits for Feature A (incomplete)&lt;/li&gt;
&lt;li&gt;Commits for Feature B (complete)&lt;/li&gt;
&lt;li&gt;All mixed together on the same branch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Now you can't deploy just Feature B without Feature A.&lt;/strong&gt; You're stuck.&lt;/p&gt;

&lt;h3&gt;
  
  
  Branches: Separate Timelines
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;branch is a pointer to a commit.&lt;/strong&gt; It's a separate line of development that doesn't interfere with other branches.&lt;/p&gt;

&lt;p&gt;Here's how it works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;        Feature A (commits 2, 3, 4)
       /
Main (commit 1) → Feature B (commits 2, 3) → Merged back
       \
        Hotfix (commit 2)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Feature A can develop independently&lt;/li&gt;
&lt;li&gt;Feature B can develop independently&lt;/li&gt;
&lt;li&gt;Main stays stable and production-ready&lt;/li&gt;
&lt;li&gt;When Feature B is done, merge it into main and ship it&lt;/li&gt;
&lt;li&gt;Feature A keeps developing without blocking anything&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Main Branch: Your Safety Net
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Main branch = production code.&lt;/strong&gt; It's the code you trust. It's tested, it's stable, it's live in the world.&lt;/p&gt;

&lt;p&gt;You &lt;em&gt;never&lt;/em&gt; build directly on main. You build on feature branches, and only merge into main when the code is ready for production.&lt;/p&gt;

&lt;p&gt;This is how teams prevent disasters. Main is always deployable. Always.&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 3: Real-World Workflows
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Standard Feature Branch Workflow
&lt;/h3&gt;

&lt;p&gt;Here's how a professional team uses Git:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Start a new feature&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout main          &lt;span class="c"&gt;# Make sure you're on main&lt;/span&gt;
git pull origin main       &lt;span class="c"&gt;# Get the latest code&lt;/span&gt;
git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; feature/booking-system  &lt;span class="c"&gt;# Create and switch to feature branch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2: Build the feature&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Edit files, test, repeat&lt;/span&gt;
git add file1.py file2.py
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"feat: add booking form validation"&lt;/span&gt;

git add database.py
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"feat: connect booking form to database"&lt;/span&gt;

git add tests.py
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"test: add booking system tests"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice: Multiple commits, each representing one logical piece of work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Feature is done and tested&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push origin feature/booking-system  &lt;span class="c"&gt;# Push to GitHub&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then create a Pull Request (PR) on GitHub. Your team reviews the code. If it looks good, merge it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Merge into main&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout main
git pull origin main
git merge feature/booking-system
git push origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your feature is now live. Delete the feature branch (you don't need it anymore):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git branch &lt;span class="nt"&gt;-d&lt;/span&gt; feature/booking-system
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Hotfix: Emergency Bug Fixes
&lt;/h3&gt;

&lt;p&gt;Production is live. Users find a bug. You need to fix it NOW.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important: You fix it on a hotfix branch, not directly on main.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout main
git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; hotfix/email-double-send

&lt;span class="c"&gt;# Fix the bug&lt;/span&gt;
git add email.py
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"fix: prevent double email sends"&lt;/span&gt;

&lt;span class="c"&gt;# Merge back to main immediately&lt;/span&gt;
git checkout main
git merge hotfix/email-double-send

&lt;span class="c"&gt;# Push to production&lt;/span&gt;
git push origin main

&lt;span class="c"&gt;# Delete the hotfix branch&lt;/span&gt;
git branch &lt;span class="nt"&gt;-d&lt;/span&gt; hotfix/email-double-send
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now main is fixed and deployable. Production is patched. Crisis averted.&lt;/p&gt;

&lt;h3&gt;
  
  
  Merge Conflicts: When Humans Decide
&lt;/h3&gt;

&lt;p&gt;Say two people changed the same line of code in different branches. When you try to merge them, Git can't automatically decide which version is correct.&lt;/p&gt;

&lt;p&gt;Git will show you something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; HEAD (main branch)
&lt;/span&gt;&lt;span class="p"&gt;version of code from main
&lt;/span&gt;&lt;span class="gh"&gt;=======
&lt;/span&gt;&lt;span class="p"&gt;version of code from feature branch
&lt;/span&gt;&lt;span class="gi"&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;You manually edit the file, pick the version you want, and commit.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Git is asking you: "Which version is right?" Because only a human knows the answer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 4: Commit Message Best Practices
&lt;/h2&gt;

&lt;p&gt;Your commit messages tell a story. Future you (and your teammates) will read them to understand &lt;em&gt;why&lt;/em&gt; a change was made.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad commit messages:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"stuff"&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"fixed things"&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"changes"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Good commit messages:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"feat: add booking form validation"&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"fix: prevent double email sends in confirmation"&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"refactor: simplify database query logic"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Pattern
&lt;/h3&gt;

&lt;p&gt;Start with a type:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;feat:&lt;/strong&gt; A new feature&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;fix:&lt;/strong&gt; A bug fix&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;refactor:&lt;/strong&gt; Code cleanup (no feature change)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;test:&lt;/strong&gt; Adding tests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;docs:&lt;/strong&gt; Documentation changes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;style:&lt;/strong&gt; Formatting (no logic change)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then describe what you did in present tense: "add", "fix", "simplify", not "added", "fixed", "simplified".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; Because when you read the git log, it reads like a series of actions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;feat: add booking form
fix: validate email in form
refactor: clean up form code
test: add form validation tests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Part 5: When to Commit
&lt;/h2&gt;

&lt;p&gt;This is the question that trips people up: &lt;strong&gt;When should you actually make a commit?&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Rule
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Commit when you've completed one logical unit of work that is testable and works.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not "perfect"—just complete and functional. One reason to commit.&lt;/p&gt;

&lt;h3&gt;
  
  
  Examples
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Good commits:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ "Add email validation to booking form" — One feature, complete&lt;/li&gt;
&lt;li&gt;✅ "Fix typo in error message" — One bug, fixed&lt;/li&gt;
&lt;li&gt;✅ "Refactor database queries" — One improvement, done&lt;/li&gt;
&lt;li&gt;✅ "Add tests for booking system" — One logical piece&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bad commits:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ "Add email validation + refactor database + fix typo + update tests" — Too many things&lt;/li&gt;
&lt;li&gt;❌ "Work in progress" — Not complete&lt;/li&gt;
&lt;li&gt;❌ "Stuff" — Not clear what you did&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Test
&lt;/h3&gt;

&lt;p&gt;Ask yourself: &lt;strong&gt;If I had to revert this commit, would it break something?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If yes, you've bundled too much together. Split it into multiple commits.&lt;/p&gt;

&lt;p&gt;If no, it's a good commit.&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 6: The Complete Workflow (From Start to Finish)
&lt;/h2&gt;

&lt;p&gt;Here's a real-world scenario: You're building a repair shop app with a teammate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Initial Setup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &amp;lt;repository-url&amp;gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;repair-shop-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  You: Building the Booking System
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create a feature branch&lt;/span&gt;
git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; feature/booking-system

&lt;span class="c"&gt;# Work and commit logically&lt;/span&gt;
git add booking_form.py
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"feat: create booking form component"&lt;/span&gt;

git add database.py
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"feat: add booking to database"&lt;/span&gt;

git add tests.py
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"test: add booking system tests"&lt;/span&gt;

&lt;span class="c"&gt;# Push to GitHub&lt;/span&gt;
git push origin feature/booking-system
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Your Teammate: Building Payment Processing
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; feature/payment-processing

git add payment.py
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"feat: integrate Stripe payment"&lt;/span&gt;

git add error_handling.py
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"feat: handle payment errors"&lt;/span&gt;

git push origin feature/payment-processing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both of you are working independently. No interference.&lt;/p&gt;

&lt;h3&gt;
  
  
  Feature B (Payment) is Done First
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Your teammate creates a Pull Request on GitHub&lt;/span&gt;
&lt;span class="c"&gt;# Team reviews it&lt;/span&gt;
&lt;span class="c"&gt;# Looks good, merge it&lt;/span&gt;

git checkout main
git pull origin main
git merge feature/payment-processing
git push origin main
git branch &lt;span class="nt"&gt;-d&lt;/span&gt; feature/payment-processing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Payment processing is live. Feature A is still developing independently.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bug in Production
&lt;/h3&gt;

&lt;p&gt;Users report that confirmation emails send twice.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout main
git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; hotfix/email-double-send

git add email.py
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"fix: prevent double email sends"&lt;/span&gt;

git checkout main
git merge hotfix/email-double-send
git push origin main
git branch &lt;span class="nt"&gt;-d&lt;/span&gt; hotfix/email-double-send
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bug is fixed. Production is patched.&lt;/p&gt;

&lt;h3&gt;
  
  
  Feature A is Done
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout feature/booking-system

&lt;span class="c"&gt;# Feature A has been developing this whole time&lt;/span&gt;
&lt;span class="c"&gt;# Now it's done and tested&lt;/span&gt;

git push origin feature/booking-system

&lt;span class="c"&gt;# Create Pull Request, team reviews&lt;/span&gt;
&lt;span class="c"&gt;# Merge it&lt;/span&gt;

git checkout main
git pull origin main
git merge feature/booking-system
git push origin main
git branch &lt;span class="nt"&gt;-d&lt;/span&gt; feature/booking-system
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both features are now live. All commits are in history. All branches are cleaned up.&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 7: The Commands You Actually Need
&lt;/h2&gt;

&lt;p&gt;Here are the essential Git commands for this entire workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone a repository&lt;/span&gt;
git clone &amp;lt;url&amp;gt;

&lt;span class="c"&gt;# Create and switch to a new branch&lt;/span&gt;
git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; feature/name

&lt;span class="c"&gt;# Switch to an existing branch&lt;/span&gt;
git checkout branch-name

&lt;span class="c"&gt;# Check what branch you're on&lt;/span&gt;
git status

&lt;span class="c"&gt;# Stage files for commit&lt;/span&gt;
git add filename
git add &lt;span class="nb"&gt;.&lt;/span&gt;  &lt;span class="c"&gt;# Add all changed files&lt;/span&gt;

&lt;span class="c"&gt;# Commit&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"type: description"&lt;/span&gt;

&lt;span class="c"&gt;# Push to remote (GitHub)&lt;/span&gt;
git push origin branch-name

&lt;span class="c"&gt;# Pull latest from remote&lt;/span&gt;
git pull origin branch-name

&lt;span class="c"&gt;# Merge another branch into current branch&lt;/span&gt;
git merge branch-name

&lt;span class="c"&gt;# Delete a branch&lt;/span&gt;
git branch &lt;span class="nt"&gt;-d&lt;/span&gt; branch-name

&lt;span class="c"&gt;# View commit history&lt;/span&gt;
git log

&lt;span class="c"&gt;# See what changed in a commit&lt;/span&gt;
git show commit-hash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Those 12 commands cover 95% of what you'll do.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Git isn't magic. It's a system for:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Taking snapshots of your code (commits)&lt;/li&gt;
&lt;li&gt;Building a history of those snapshots (the commit train)&lt;/li&gt;
&lt;li&gt;Working on multiple features in parallel (branches)&lt;/li&gt;
&lt;li&gt;Merging them back together safely (merges)&lt;/li&gt;
&lt;li&gt;Keeping production stable (main branch as safety net)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The mental model is simple. The commands are simple. The power comes from using them consistently.&lt;/p&gt;

&lt;p&gt;Start with small commits. One logical piece of work per commit. Keep main stable. Work on branches. Review before merging. Keep history clean.&lt;/p&gt;

&lt;p&gt;Do that, and you'll be ahead of most developers.&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; Create a test repository. Make some branches, commit some stuff, merge them back. Get comfortable with the commands.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Read the docs:&lt;/strong&gt; GitHub has great guides on branching strategies and workflows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Work with a team:&lt;/strong&gt; The real value of Git shows up when you're collaborating. Push your branches, create Pull Requests, review each other's code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Keep learning:&lt;/strong&gt; Once you're solid on basics, look into rebasing, squashing commits, and more advanced workflows.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Happy coding. 🎯&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>devops</category>
    </item>
    <item>
      <title>My Thoughts on AI Code Agents &amp; Assistance</title>
      <dc:creator>Gold roger</dc:creator>
      <pubDate>Mon, 09 Mar 2026 23:40:11 +0000</pubDate>
      <link>https://forem.com/gold_roger/my-thoughts-on-ai-code-agents-assistance-33cl</link>
      <guid>https://forem.com/gold_roger/my-thoughts-on-ai-code-agents-assistance-33cl</guid>
      <description>&lt;p&gt;Let's begain... &lt;/p&gt;

&lt;p&gt;AI is powerful no doubt. But here’s something I believe:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Write the code yourself first. Then allow AI to review.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When you write your own logic, you understand your boundaries, your creativity, and your solutions better than anyone else. That’s how you grow. That’s how you build confidence for your next project.&lt;/p&gt;

&lt;p&gt;If you rely too early on AI, you might get working code…&lt;br&gt;
but will you understand it?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Quick Reality Check…&lt;/strong&gt;&lt;br&gt;
Let’s be real, have developers (you and me) ever coded without help?&lt;/p&gt;

&lt;p&gt;Even before AI, we had:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Google&lt;/li&gt;
&lt;li&gt;Stack Overflow&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;Books&lt;/li&gt;
&lt;li&gt;Personal notes and templates&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Personally Google fits my vibe 😁. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every generation of developers had tools to assist them. AI is just the next evolution.&lt;/p&gt;

&lt;p&gt;So yes, AI is here to stay, but that doesn’t mean it should replace our minds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your AI Sidekick&lt;/strong&gt;&lt;br&gt;
The best way to use AI is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You lead&lt;/li&gt;
&lt;li&gt;AI assists&lt;/li&gt;
&lt;li&gt;You learn&lt;/li&gt;
&lt;li&gt;You improve&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;AI accelerates&lt;/strong&gt;&lt;br&gt;
Let AI reflect your thinking, your style, your creativity, not the other way around!! &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You’re the captain. AI is just your loyal sidekick — not your dad. 😂&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;My Final Advice?&lt;/strong&gt;&lt;br&gt;
Just write the code!!&lt;/p&gt;

&lt;p&gt;Don’t wait for permission.&lt;br&gt;
Don’t overthink the perfect solution.&lt;br&gt;
Start, then refine with AI.&lt;/p&gt;

&lt;p&gt;Because the more you create, the sharper you become.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>learning</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Why Computer Vision Isn’t the Best Choice for Control Systems</title>
      <dc:creator>Gold roger</dc:creator>
      <pubDate>Wed, 19 Nov 2025 21:10:22 +0000</pubDate>
      <link>https://forem.com/gold_roger/why-computer-vision-isnt-the-best-choice-for-control-systems-33da</link>
      <guid>https://forem.com/gold_roger/why-computer-vision-isnt-the-best-choice-for-control-systems-33da</guid>
      <description>&lt;h1&gt;
  
  
  &lt;strong&gt;I truly believe computer-vision powered control systems are inefficient.&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Listen to me…&lt;/p&gt;

&lt;p&gt;Computer vision takes more compute power than necessary in the sense that it does &lt;em&gt;more work&lt;/em&gt; just to get something simple done. Like imagine I just want to “click” a button. It sounds futuristic and cool, but the world of engineering is not about “cool”, it’s about &lt;em&gt;efficiency&lt;/em&gt;. It’s about the cleanest, most reliable, most deterministic way to get something done.&lt;/p&gt;

&lt;p&gt;But CV?&lt;br&gt;
You need a camera, a processor running at a constant frame rate, and then a full CV model sitting on top. And these models are heavy — even the optimized ones take more resources than something like a simple switch, an IR sensor, or a muscle-signal reader. That’s the truth. Research literally shows vision models often burn &lt;strong&gt;orders of magnitude&lt;/strong&gt; more energy than basic sensors, even when compressed or run on microcontrollers.&lt;/p&gt;

&lt;p&gt;And then we want to make this whole stack the “OS” of the system?&lt;br&gt;
As in… the &lt;em&gt;foundation&lt;/em&gt; we’re supposed to trust?&lt;/p&gt;

&lt;p&gt;The moment you make CV dynamic, you’re telling the model to deal with &lt;em&gt;noise&lt;/em&gt; — light changes, shadows, random movement in the background, mistakes where the model thinks your hand is a command you didn’t mean, etc. Even industry papers emphasize how camera-based gesture systems get false positives in messy environments. And a control layer that triggers stuff you didn’t intend is the fastest way to create a very unreliable system.&lt;/p&gt;

&lt;p&gt;An OS should be accurate &lt;em&gt;more often than not&lt;/em&gt;.&lt;br&gt;
You should feel safe that the base system gives the same output every time under the same input. Deterministic. Repeatable. Zero surprises. That’s how engineers design systems that people can build experiments on top of.&lt;/p&gt;

&lt;p&gt;CV doesn’t give you that consistency unless you freeze the environment — fixed lighting, fixed angle, fixed setup — and that’s not how normal people use computers.&lt;/p&gt;

&lt;p&gt;So for me, CV fits more into &lt;strong&gt;monitoring roles&lt;/strong&gt;, not &lt;strong&gt;control roles&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Monitoring = “watch the scene, tell me what’s happening.”&lt;br&gt;
Control = “do something based on my action, immediately and reliably.”&lt;/p&gt;

&lt;p&gt;CV excels at monitoring. That’s where it shines. Surveillance, object detection, anomaly spotting, robotics feedback loops — the research literally shows CV thrives when it’s observing and reporting.&lt;/p&gt;

&lt;p&gt;But controlling an OS?&lt;br&gt;
Triggering actions like a click or command?&lt;br&gt;
That’s when you really want low-latency, low-noise, low-power sensors that give clean signals.&lt;/p&gt;

&lt;p&gt;You might ask: “What about VR?”&lt;br&gt;
Well VR actually proves my point — those systems don’t rely on heavy vision models for basic inputs. They use IMUs, IR markers, muscle sensors (EMG), flex sensors, etc. Even the fancy VR gloves combine &lt;strong&gt;simple sensors first&lt;/strong&gt; and then sprinkle in CV only for extra precision. Because those basic sensors are faster, cleaner, and more reliable for moment-to-moment control.&lt;/p&gt;

&lt;p&gt;In simple terms:&lt;br&gt;
Computer vision is amazing… just not for everything.&lt;br&gt;
And trying to make it the &lt;em&gt;primary way&lt;/em&gt; we control systems just feels like the wrong engineering choice right now.&lt;/p&gt;

</description>
      <category>systemdesign</category>
      <category>computervision</category>
      <category>programming</category>
      <category>ai</category>
    </item>
    <item>
      <title>Developing and AI</title>
      <dc:creator>Gold roger</dc:creator>
      <pubDate>Fri, 07 Nov 2025 14:06:04 +0000</pubDate>
      <link>https://forem.com/gold_roger/developing-and-ai-1ca2</link>
      <guid>https://forem.com/gold_roger/developing-and-ai-1ca2</guid>
      <description>&lt;p&gt;&lt;strong&gt;My Thoughts on AI Code Agents &amp;amp; Assistance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Artificial intelligence has evolved quickly, especially in the world of software development. Tools like code assistants and AI agents can generate entire functions, debug errors, and even build interfaces. It’s impressive. It’s helpful. It’s accelerating the way we work.&lt;/p&gt;

&lt;p&gt;But I believe the best approach is this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Write the code yourself first. Then allow AI to review, improve, and enhance it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When you start by writing your own logic, you build understanding. You strengthen problem-solving. You define your creativity and boundaries as a developer. That foundation is what sets you up for success on future projects.&lt;/p&gt;

&lt;p&gt;If you rely on AI too early, there’s a risk:&lt;br&gt;
You might get working code, but you may not understand it — and that slows down growth.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Development Has Always Used Assistance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Some people ask: “Is it still real programming if AI helps?”&lt;/p&gt;

&lt;p&gt;Let’s think back. Did developers ever code without any form of assistance?&lt;/p&gt;

&lt;p&gt;Even long before AI, we relied on:&lt;/p&gt;

&lt;p&gt;Books and manuals&lt;/p&gt;

&lt;p&gt;Google searches&lt;/p&gt;

&lt;p&gt;Stack Overflow answers&lt;/p&gt;

&lt;p&gt;Documentation and cheatsheets&lt;/p&gt;

&lt;p&gt;Personal notes and snippets&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The truth is&lt;/em&gt;: no developer has ever built in isolation.&lt;/p&gt;

&lt;p&gt;Tools have always existed to help us learn, recall, and move faster. AI is just the next step in that evolution — more advanced, more accessible, and far more powerful.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The Right Balance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI should not replace your thinking. It should strengthen it.&lt;/p&gt;

&lt;p&gt;The ideal workflow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;You attempt the solution&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You think through the logic&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You write the code&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then AI reviews, corrects, and optimizes&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This balance gives you:&lt;/p&gt;

&lt;p&gt;Ownership over your knowledge&lt;/p&gt;

&lt;p&gt;Confidence in debugging your own work&lt;/p&gt;

&lt;p&gt;A deeper understanding of what’s happening inside your code&lt;/p&gt;

&lt;p&gt;Creativity that isn’t limited by templates or patterns generated by AI&lt;/p&gt;

&lt;p&gt;You are the one building your career. AI is a tool to help you build faster — not a shortcut to skip learning.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The Developer’s Role Hasn’t Changed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Code assistants don’t eliminate the need for developers.&lt;br&gt;
They just shift our responsibilities:&lt;/p&gt;

&lt;p&gt;From memorizing everything&lt;/p&gt;

&lt;p&gt;To understanding concepts&lt;/p&gt;

&lt;p&gt;From writing boilerplate&lt;/p&gt;

&lt;p&gt;To focusing on architecture and innovation&lt;/p&gt;

&lt;p&gt;We gain the freedom to explore, to test ideas, to push boundaries — without getting slowed down by repetitive tasks.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Final Thought&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI can accelerate your productivity, guide your learning, and help you discover stronger solutions. But the true power still lies in your willingness to experiment, to write, and to learn through doing.&lt;/p&gt;

&lt;p&gt;So, the advice is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Just write the code!!.&lt;/strong&gt;&lt;br&gt;
Start with your own logic.&lt;br&gt;
Then let AI become the trusted assistant that sharpens the edges of your craft.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>developer</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Writing Clean Code Without Losing Your Mind</title>
      <dc:creator>Gold roger</dc:creator>
      <pubDate>Sun, 19 Oct 2025 00:36:28 +0000</pubDate>
      <link>https://forem.com/gold_roger/writing-clean-code-without-losing-your-mind-136e</link>
      <guid>https://forem.com/gold_roger/writing-clean-code-without-losing-your-mind-136e</guid>
      <description>&lt;h2&gt;
  
  
  Writing Clean Code with a Strict Mindset to the Rules
&lt;/h2&gt;

&lt;p&gt;When you’re just starting out as a programmer, it’s easy to get caught up in the hype of &lt;em&gt;writing clean code&lt;/em&gt;. Every tutorial, blog, or YouTube video seems to emphasize naming conventions, indentation, comments, and all the other “good practices.”&lt;/p&gt;

&lt;p&gt;But here’s the thing — when you’re still learning, &lt;strong&gt;that shouldn’t be your main focus&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Focus on Getting the Logic Right First
&lt;/h3&gt;

&lt;p&gt;When I first started writing code, I read tons of articles about how to write clean, maintainable, and scalable code. To be honest, that was one of my early mistakes. I thought writing clean code was the same as writing scalable or optimized code — but it’s not.&lt;/p&gt;

&lt;p&gt;I found myself fussing over the little things that didn’t matter at that stage, instead of focusing on solving the problem. Writing clean code is important — it helps you read and fix bugs easily — but &lt;strong&gt;your priority as a beginner should be getting the logic down and making your program work first&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you skip that and just follow every “rule” you read online, you’re not really developing your own style or creativity. You’re just memorizing and repeating — or as I like to call it, &lt;em&gt;“chew and pour.”&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Don’t Worry About “Code to Scale” Yet
&lt;/h3&gt;

&lt;p&gt;Another common trap beginners fall into is coding “for scale.” You’ll often hear about software patterns, best practices, or how to design code that can handle thousands of users. But ask yourself — &lt;em&gt;how many people are actually going to use the small project you’re building right now?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When you overthink scalability at the beginner stage, you take away the fun of learning. Bugs can be fun. They teach you how to think, debug, and improve. You can’t learn those lessons if you’re constantly trying to code like a senior engineer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reading Optimized Code Isn’t Easy
&lt;/h3&gt;

&lt;p&gt;Optimized code is often hard to read — even for experienced developers. You can have a perfectly working program with solid logic and no bugs, but rewriting it to be optimized is a whole different challenge. It doesn’t just require understanding your own logic — you need to deeply understand the programming language itself.&lt;/p&gt;

&lt;p&gt;Optimized code isn’t just &lt;em&gt;better-written&lt;/em&gt; code; it’s usually the best out of many possible ways to solve the same problem. That takes experience — and you’ll get there, but only after you’ve built the foundation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;So here’s my advice to all beginners:&lt;br&gt;
Stick to one programming language. Focus on how you solve problems. Turn your thoughts into algorithms and build your logic first — &lt;em&gt;then&lt;/em&gt; worry about making it cleaner or faster later.&lt;/p&gt;

&lt;p&gt;In the long run, this mindset not only makes you a better coder but also helps you truly understand what clean and optimized code means — because you’ve earned that understanding through experience.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>learning</category>
      <category>cleancode</category>
      <category>devlife</category>
    </item>
  </channel>
</rss>
