<?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: Aqsa Zafar</title>
    <description>The latest articles on DEV Community by Aqsa Zafar (@aqsa_zafar_e47324954dca66).</description>
    <link>https://dev.to/aqsa_zafar_e47324954dca66</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%2F3691117%2F0058fcae-3078-452d-a205-834bd009a152.png</url>
      <title>DEV Community: Aqsa Zafar</title>
      <link>https://dev.to/aqsa_zafar_e47324954dca66</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aqsa_zafar_e47324954dca66"/>
    <language>en</language>
    <item>
      <title>I Took the Udacity AWS Machine Learning Engineer Nanodegree. Here's What It Actually Teaches (2026)</title>
      <dc:creator>Aqsa Zafar</dc:creator>
      <pubDate>Thu, 25 Jun 2026 06:03:09 +0000</pubDate>
      <link>https://dev.to/aqsa_zafar_e47324954dca66/i-took-the-udacity-aws-machine-learning-engineer-nanodegree-heres-what-it-actually-teaches-2026-45al</link>
      <guid>https://dev.to/aqsa_zafar_e47324954dca66/i-took-the-udacity-aws-machine-learning-engineer-nanodegree-heres-what-it-actually-teaches-2026-45al</guid>
      <description>&lt;p&gt;If you already know Python and the basics of machine learning, this Nanodegree teaches you something specific and valuable: how to deploy and operationalize ML models on AWS SageMaker. Not ML theory. Deployment. That's the part most self-taught ML people are missing, and it's the part employers pay a premium for in 2026.&lt;/p&gt;

&lt;p&gt;If you're a complete beginner, this is not your starting point. It assumes Python, ML fundamentals, and some AWS familiarity coming in.&lt;/p&gt;

&lt;p&gt;Let me break down what you actually build.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack you learn
&lt;/h2&gt;

&lt;p&gt;The whole program runs through Amazon SageMaker. By the end you've worked hands-on with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SageMaker Studio&lt;/strong&gt; for the full ML workflow&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AutoGluon and XGBoost&lt;/strong&gt; for tabular models&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lambda and Step Functions&lt;/strong&gt; for automated ML workflows&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SageMaker profiling, debugging, and hyperparameter tuning&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Distributed training&lt;/strong&gt; on large datasets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production deployment&lt;/strong&gt; with cost optimization, security, and high-throughput pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last cluster is the important one. MLOps and deployment skills are what separate someone who can train a model in a notebook from someone who can ship it. The 2026 salary data backs this up: MLOps and SageMaker fluency are repeatedly named as premium-pay skills for ML engineers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The projects (this is where the real learning happens)
&lt;/h2&gt;

&lt;p&gt;The program is built around six hands-on projects, each reviewed by a human who reads your actual code:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Predict Bike Sharing Demand with AutoGluon&lt;/strong&gt; — train a model, submit it for a public Kaggle rank, write up your findings. A gentle start.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Build an ML Workflow for Scones Unlimited&lt;/strong&gt; — build and ship an image classification model, then wire it together with Lambda and Step Functions into an end-to-end workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Image Classification using SageMaker&lt;/strong&gt; — finetune a pretrained model with profiling, debugging, and hyperparameter tuning. This one made me resubmit twice before it passed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Operationalizing an AWS ML Project&lt;/strong&gt; — take a model and prepare it for production-grade deployment: cost minimization, security, redeployment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Capstone&lt;/strong&gt; — solve a real problem end to end. I built an inventory-monitoring model on the Amazon Bin Image Dataset to count objects in bins.&lt;/p&gt;

&lt;p&gt;A tip from my own painful experience on the capstone: double-check you're uploading your dataset to the correct S3 bucket using the CLI or the S3 UI. I uploaded to the wrong bucket and lost time untangling it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this is genuinely for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;ML practitioners who can build models but have never deployed one&lt;/li&gt;
&lt;li&gt;Software engineers moving into ML who want the AWS side&lt;/li&gt;
&lt;li&gt;Data scientists who want to ship models, not just train them in notebooks&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who should skip it (for now)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Complete beginners with no Python or ML background&lt;/li&gt;
&lt;li&gt;Anyone who wants cloud-agnostic ML theory (this is firmly AWS-specific)&lt;/li&gt;
&lt;li&gt;Anyone expecting a certificate alone to land a job, it won't, here or anywhere&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The honest catch
&lt;/h2&gt;

&lt;p&gt;Two things to be real about. First, at full price it's expensive, so wait for one of Udacity's frequent discounts. Second, no Nanodegree gets you hired on its own. It gives you the skills and a starting portfolio. The job comes from continuing to build after, open-source contributions and your own projects matter more than the certificate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Want the full breakdown?
&lt;/h2&gt;

&lt;p&gt;I wrote up the complete review on my blog, including the current cost, how to get the discount, the full 7-course curriculum, the prerequisites in detail, and my honest pros and cons after finishing it:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://www.mltut.com/udacity-machine-learning-engineer-nanodegree-review/" rel="noopener noreferrer"&gt;Udacity AWS Machine Learning Engineer Nanodegree Review 2026: Is It Worth It?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you've taken it too, I'd genuinely like to hear how your experience compared. Drop a comment.&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>aws</category>
      <category>career</category>
      <category>beginners</category>
    </item>
    <item>
      <title>I’ve been using Claude Code hooks with jq and a small Python script to log bash commands and clean tool output automatically.

It made my terminal workflow far more predictable. Sharing the full breakdown here in case it helps others.</title>
      <dc:creator>Aqsa Zafar</dc:creator>
      <pubDate>Wed, 11 Feb 2026 05:04:55 +0000</pubDate>
      <link>https://dev.to/aqsa_zafar_e47324954dca66/ive-been-using-claude-code-hooks-with-jq-and-a-small-python-script-to-log-bash-commands-and-clean-1cl</link>
      <guid>https://dev.to/aqsa_zafar_e47324954dca66/ive-been-using-claude-code-hooks-with-jq-and-a-small-python-script-to-log-bash-commands-and-clean-1cl</guid>
      <description>&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/aqsa_zafar_e47324954dca66/building-a-terminal-based-ai-automation-pipeline-with-claude-code-hooks-jq-3bef" class="crayons-story__hidden-navigation-link"&gt;Building a Terminal-Based AI Automation Pipeline with Claude Code Hooks + jq&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/aqsa_zafar_e47324954dca66" class="crayons-avatar  crayons-avatar--l  "&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3691117%2F0058fcae-3078-452d-a205-834bd009a152.png" alt="aqsa_zafar_e47324954dca66 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/aqsa_zafar_e47324954dca66" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Aqsa Zafar
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Aqsa Zafar
                
              
              &lt;div id="story-author-preview-content-3247786" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/aqsa_zafar_e47324954dca66" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3691117%2F0058fcae-3078-452d-a205-834bd009a152.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Aqsa Zafar&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/aqsa_zafar_e47324954dca66/building-a-terminal-based-ai-automation-pipeline-with-claude-code-hooks-jq-3bef" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Feb 11&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/aqsa_zafar_e47324954dca66/building-a-terminal-based-ai-automation-pipeline-with-claude-code-hooks-jq-3bef" id="article-link-3247786"&gt;
          Building a Terminal-Based AI Automation Pipeline with Claude Code Hooks + jq
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/vibecoding"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;vibecoding&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/automation"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;automation&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cli"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cli&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/aqsa_zafar_e47324954dca66/building-a-terminal-based-ai-automation-pipeline-with-claude-code-hooks-jq-3bef" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt;&amp;nbsp;reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/aqsa_zafar_e47324954dca66/building-a-terminal-based-ai-automation-pipeline-with-claude-code-hooks-jq-3bef#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




</description>
      <category>vibecoding</category>
      <category>automation</category>
      <category>cli</category>
      <category>ai</category>
    </item>
    <item>
      <title>Building a Terminal-Based AI Automation Pipeline with Claude Code Hooks + jq</title>
      <dc:creator>Aqsa Zafar</dc:creator>
      <pubDate>Wed, 11 Feb 2026 05:01:53 +0000</pubDate>
      <link>https://dev.to/aqsa_zafar_e47324954dca66/building-a-terminal-based-ai-automation-pipeline-with-claude-code-hooks-jq-3bef</link>
      <guid>https://dev.to/aqsa_zafar_e47324954dca66/building-a-terminal-based-ai-automation-pipeline-with-claude-code-hooks-jq-3bef</guid>
      <description>&lt;p&gt;When I started using Claude Code inside the terminal, I noticed something important.&lt;/p&gt;

&lt;p&gt;Prompts are flexible. But flexibility also means variability.&lt;/p&gt;

&lt;p&gt;If you want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Predictable formatting&lt;/li&gt;
&lt;li&gt;Structured logging&lt;/li&gt;
&lt;li&gt;Validation before execution&lt;/li&gt;
&lt;li&gt;Cleaned terminal output&lt;/li&gt;
&lt;li&gt;Error detection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Prompts alone are not enough.&lt;/p&gt;

&lt;p&gt;Hooks give you control.&lt;/p&gt;

&lt;p&gt;In this post, I’ll show you how I combine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;post-tool-use&lt;/code&gt; hooks&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;jq&lt;/code&gt; for JSON parsing&lt;/li&gt;
&lt;li&gt;A small Python script for output cleaning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is simple: turn Claude Code into a predictable automation layer inside the terminal.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. How Hooks Actually Work
&lt;/h2&gt;

&lt;p&gt;Claude Code triggers lifecycle events such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pre-tool-use&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;post-tool-use&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;session-start&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;session-end&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;user-prompt-submit&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When a hook is registered for one of these events, Claude passes a structured JSON payload to the hook &lt;strong&gt;via standard input (stdin)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That detail matters.&lt;/p&gt;

&lt;p&gt;Your hook script reads the event JSON from stdin, processes it, and optionally prints modified output.&lt;/p&gt;

&lt;p&gt;So every example below assumes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Claude pipes event JSON into your hook command via stdin.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  2. Inspecting the Hook Payload with jq
&lt;/h2&gt;

&lt;p&gt;Every hook receives JSON like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tool_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bash"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tool_input"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ls -a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"List all files including hidden ones"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tool_response"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"stdout"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"file1&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;file2&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;..."&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You rarely need the entire payload. You usually need specific fields.&lt;/p&gt;

&lt;p&gt;Install &lt;code&gt;jq&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;macOS&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;brew &lt;span class="nb"&gt;install &lt;/span&gt;jq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Ubuntu&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="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;jq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jq &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Extract Specific Fields
&lt;/h2&gt;

&lt;p&gt;Since Claude pipes JSON into stdin, your hook command can read directly from it.&lt;/p&gt;

&lt;p&gt;Extract command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.tool_input.code'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Extract description: ""&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.tool_input.description'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Combine both:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'"\(.tool_input.code) - \(.tool_input.description)"'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;-r&lt;/code&gt; flag prints raw output (no quotes).&lt;/p&gt;

&lt;p&gt;This is the foundation for logging and enforcement.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Logging Every Bash Command (post-tool-use Hook)
&lt;/h2&gt;

&lt;p&gt;Now let’s make it real.&lt;/p&gt;

&lt;p&gt;Goal: log every Bash command Claude executes.&lt;/p&gt;

&lt;p&gt;Why &lt;code&gt;post-tool-use&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;Because I want to log what actually ran, not what was proposed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Minimal Hook Configuration Example
&lt;/h2&gt;

&lt;p&gt;Inside your Claude settings (user-level or project-level), the hook entry looks like this conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"event"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"post-tool-use"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"matcher"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bash"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"jq -r '&lt;/span&gt;&lt;span class="se"&gt;\"\\&lt;/span&gt;&lt;span class="s2"&gt;(.tool_input.code) - &lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;(.tool_input.description)&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;' &amp;gt;&amp;gt; ~/.claude/bash-command-log.txt"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What happens:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Bash tool runs&lt;/li&gt;
&lt;li&gt;Claude triggers &lt;code&gt;post-tool-use&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;JSON payload is piped into &lt;code&gt;jq&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Extracted values are appended to log file&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now your terminal activity becomes traceable.&lt;/p&gt;

&lt;p&gt;This is useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Debugging&lt;/li&gt;
&lt;li&gt;Workflow auditing&lt;/li&gt;
&lt;li&gt;Understanding automation patterns&lt;/li&gt;
&lt;li&gt;Reviewing repeated commands&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Cleaning Tool Output with Python (Post-Processing Layer)
&lt;/h2&gt;

&lt;p&gt;Now let’s improve readability.&lt;/p&gt;

&lt;p&gt;Large outputs like:&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="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;can flood the interface.&lt;/p&gt;

&lt;p&gt;Instead of manually scanning it, intercept and clean it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Hook Command (Conceptual)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"event"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"post-tool-use"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"python3 ~/.claude/hooks/clean_validate_hook.py"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude pipes JSON into that script via stdin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python Script: clean_validate_hook.py
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;

&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;JSONDecodeError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;tool_response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tool_response&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="n"&gt;stdout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tool_response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stdout&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Remove common ANSI color codes
&lt;/span&gt;&lt;span class="n"&gt;clean_output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;\x1b\[[0-9;]*m&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;lines&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;clean_output&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;splitlines&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Limit preview length
&lt;/span&gt;&lt;span class="n"&gt;preview_limit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;preview&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="n"&gt;preview_limit&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;preview&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What this does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reads event JSON from stdin&lt;/li&gt;
&lt;li&gt;Extracts &lt;code&gt;stdout&lt;/code&gt; safely&lt;/li&gt;
&lt;li&gt;Removes common ANSI color codes&lt;/li&gt;
&lt;li&gt;Limits output to first 10 lines&lt;/li&gt;
&lt;li&gt;Prints a clean preview&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can extend it to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detect errors&lt;/li&gt;
&lt;li&gt;Highlight warnings&lt;/li&gt;
&lt;li&gt;Add timestamps&lt;/li&gt;
&lt;li&gt;Save summaries to a log file&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. What This Pipeline Actually Gives You
&lt;/h2&gt;

&lt;p&gt;With just:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hooks&lt;/li&gt;
&lt;li&gt;jq&lt;/li&gt;
&lt;li&gt;A small Python script&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You now have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structured command logging&lt;/li&gt;
&lt;li&gt;Controlled output formatting&lt;/li&gt;
&lt;li&gt;Automatic enforcement layer&lt;/li&gt;
&lt;li&gt;Repeatable terminal behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Claude stops being just a prompt interface. It becomes programmable middleware inside your workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Security Considerations
&lt;/h2&gt;

&lt;p&gt;Hooks run with your environment’s permissions.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validate input&lt;/li&gt;
&lt;li&gt;Avoid exposing secrets&lt;/li&gt;
&lt;li&gt;Keep scripts under version control&lt;/li&gt;
&lt;li&gt;Review commands before registering them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Treat hooks like infrastructure, not shortcuts.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Where This Can Break
&lt;/h2&gt;

&lt;p&gt;Be realistic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If payload structure changes, jq filters must update&lt;/li&gt;
&lt;li&gt;If tool output changes format, parsing may fail&lt;/li&gt;
&lt;li&gt;Over-filtering can hide useful debugging data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep hooks small. Keep them explicit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Once you start intercepting tool events:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You stop reacting to output&lt;/li&gt;
&lt;li&gt;You start shaping it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s the difference between using a tool and engineering a workflow.&lt;/p&gt;

&lt;p&gt;If you want to see the full structured walkthrough, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hook setup inside Claude&lt;/li&gt;
&lt;li&gt;jq parsing patterns&lt;/li&gt;
&lt;li&gt;Advanced matchers&lt;/li&gt;
&lt;li&gt;Subagents&lt;/li&gt;
&lt;li&gt;MCP integrations&lt;/li&gt;
&lt;li&gt;GitHub Actions automation&lt;/li&gt;
&lt;li&gt;Plugin development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’ve documented everything step by step here:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://youtube.com/playlist?list=PL-F5kYFVRcIvZQ_LEbdLIZrohgbf-Vock&amp;amp;si=GycVGYKDNAgykfFt" rel="noopener noreferrer"&gt;Claude Code Course — Step-by-Step Guide from CLI to Real Workflows&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re already using Claude Code in the terminal, I’m curious:&lt;/p&gt;

&lt;p&gt;Are you still relying on prompts, or are you intercepting the pipeline?&lt;/p&gt;

&lt;p&gt;Because once you control lifecycle events, your terminal becomes predictable.&lt;/p&gt;

&lt;p&gt;Happy Learning!&lt;/p&gt;

</description>
      <category>vibecoding</category>
      <category>automation</category>
      <category>cli</category>
      <category>ai</category>
    </item>
    <item>
      <title>I was reading the docs, but still felt lost.

Things only started making sense when I learned Claude Code in the right order.

This post explains that order.</title>
      <dc:creator>Aqsa Zafar</dc:creator>
      <pubDate>Sun, 25 Jan 2026 05:29:57 +0000</pubDate>
      <link>https://dev.to/aqsa_zafar_e47324954dca66/i-was-reading-the-docs-but-still-felt-lost-things-only-started-making-sense-when-i-learned-1p50</link>
      <guid>https://dev.to/aqsa_zafar_e47324954dca66/i-was-reading-the-docs-but-still-felt-lost-things-only-started-making-sense-when-i-learned-1p50</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/aqsa_zafar_e47324954dca66" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3691117%2F0058fcae-3078-452d-a205-834bd009a152.png" alt="aqsa_zafar_e47324954dca66"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/aqsa_zafar_e47324954dca66/learning-claude-code-the-order-that-finally-made-sense-to-me-4mlj" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Learning Claude Code: the order that finally made sense to me&lt;/h2&gt;
      &lt;h3&gt;Aqsa Zafar ・ Jan 3&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#ai&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#automation&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#coding&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#developer&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>automation</category>
      <category>coding</category>
      <category>developer</category>
    </item>
    <item>
      <title>Learning Python Changed How I Approach Problems</title>
      <dc:creator>Aqsa Zafar</dc:creator>
      <pubDate>Sun, 25 Jan 2026 05:26:23 +0000</pubDate>
      <link>https://dev.to/aqsa_zafar_e47324954dca66/learning-python-changed-how-i-approach-problems-23jg</link>
      <guid>https://dev.to/aqsa_zafar_e47324954dca66/learning-python-changed-how-i-approach-problems-23jg</guid>
      <description>&lt;p&gt;I didn’t pick Python because it was trendy.&lt;/p&gt;

&lt;p&gt;I picked it because I wanted my code to make sense when I looked at it weeks later.&lt;/p&gt;

&lt;p&gt;That one decision changed how I work with software.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python Forces You to Think Clearly
&lt;/h2&gt;

&lt;p&gt;In the beginning, Python feels easy.&lt;/p&gt;

&lt;p&gt;That’s not the important part.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What matters is this:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You spend less time fighting syntax and more time thinking about logic.&lt;/p&gt;

&lt;p&gt;When the language stays out of your way, mistakes become obvious.&lt;/p&gt;

&lt;p&gt;You start asking better questions.&lt;/p&gt;

&lt;p&gt;That’s where learning actually happens.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Learning Python Really Looks Like
&lt;/h2&gt;

&lt;p&gt;Most people expect instant results.&lt;/p&gt;

&lt;p&gt;That’s not how it works.&lt;/p&gt;

&lt;h3&gt;
  
  
  First phase: Getting comfortable
&lt;/h3&gt;

&lt;p&gt;You learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;variables and data types&lt;/li&gt;
&lt;li&gt;conditions and loops&lt;/li&gt;
&lt;li&gt;functions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing fancy.&lt;/p&gt;

&lt;p&gt;But you start seeing patterns.&lt;/p&gt;

&lt;h3&gt;
  
  
  Second phase: Working with real input
&lt;/h3&gt;

&lt;p&gt;Now you deal with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;files that aren’t clean&lt;/li&gt;
&lt;li&gt;values that are missing or wrong&lt;/li&gt;
&lt;li&gt;code that breaks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where most learners quit.&lt;/p&gt;

&lt;p&gt;This is also where Python starts paying off.&lt;/p&gt;

&lt;p&gt;You realize:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;real problems are messy&lt;br&gt;
Python is built for that mess&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Third phase: Writing code you can trust
&lt;/h3&gt;

&lt;p&gt;You begin to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;separate logic into functions&lt;/li&gt;
&lt;li&gt;reuse code without copying&lt;/li&gt;
&lt;li&gt;read errors instead of fearing them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this point, Python stops feeling “easy”.&lt;/p&gt;

&lt;p&gt;It starts feeling reliable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Small Changes That Made a Big Difference
&lt;/h2&gt;

&lt;p&gt;Earlier, I wrote code like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It worked.&lt;/p&gt;

&lt;p&gt;Until it didn’t.&lt;/p&gt;

&lt;p&gt;Later, I wrote code like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;double&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;

&lt;span class="n"&gt;user_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;double&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_input&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same output.&lt;/p&gt;

&lt;p&gt;Very different mindset.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;is readable&lt;/li&gt;
&lt;li&gt;is reusable&lt;/li&gt;
&lt;li&gt;breaks less often&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This shift matters more than any framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python Helped Me Build, Not Just Learn
&lt;/h2&gt;

&lt;p&gt;Python didn’t just teach me syntax.&lt;/p&gt;

&lt;p&gt;It helped me build things that solved actual problems.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cleaning data&lt;/li&gt;
&lt;li&gt;automating repetitive tasks&lt;/li&gt;
&lt;li&gt;testing ideas quickly&lt;/li&gt;
&lt;li&gt;fixing bugs without panic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once that happens, confidence comes naturally.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Many People Struggle With Python
&lt;/h2&gt;

&lt;p&gt;Not because Python is hard.&lt;/p&gt;

&lt;p&gt;Because they jump too fast.&lt;/p&gt;

&lt;p&gt;They skip:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;strong basics&lt;/li&gt;
&lt;li&gt;functions&lt;/li&gt;
&lt;li&gt;real practice&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then they blame libraries.&lt;/p&gt;

&lt;p&gt;The foundation matters more than the tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  If You’re Learning Python Now
&lt;/h2&gt;

&lt;p&gt;Focus on this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;write small programs&lt;/li&gt;
&lt;li&gt;finish what you start&lt;/li&gt;
&lt;li&gt;revisit your own code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Progress comes from clarity, not speed.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Structured Python Path (Free)
&lt;/h2&gt;

&lt;p&gt;I’m currently building a Python for Data Science course.&lt;/p&gt;

&lt;p&gt;It’s not finished yet, and that’s intentional.&lt;/p&gt;

&lt;p&gt;I’m releasing it in parts.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;first 5 lessons are already live on YouTube&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;They start from the basics and move slowly into real usage, with examples you’ll actually see in data work.&lt;/p&gt;

&lt;p&gt;You can access them here:&lt;br&gt;
👉 &lt;a href="https://youtube.com/playlist?list=PL-F5kYFVRcIuzH3W5Kqm4eqUp9IJLLhp4&amp;amp;si=VJr1mU2bQHa-9Bks" rel="noopener noreferrer"&gt;Python for Data Science – Beginner to Practical Full Course&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’ll keep adding lessons as the course grows, keeping the foundation strong instead of rushing ahead.&lt;/p&gt;

</description>
      <category>python</category>
      <category>programming</category>
      <category>ai</category>
      <category>datascience</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Aqsa Zafar</dc:creator>
      <pubDate>Mon, 05 Jan 2026 12:45:35 +0000</pubDate>
      <link>https://dev.to/aqsa_zafar_e47324954dca66/-10pd</link>
      <guid>https://dev.to/aqsa_zafar_e47324954dca66/-10pd</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/aqsa_zafar_e47324954dca66" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3691117%2F0058fcae-3078-452d-a205-834bd009a152.png" alt="aqsa_zafar_e47324954dca66"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/aqsa_zafar_e47324954dca66/a-practical-roadmap-to-learn-generative-ai-without-wasting-months-396f" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;A Practical Roadmap to Learn Generative AI (Without Wasting Months)&lt;/h2&gt;
      &lt;h3&gt;Aqsa Zafar ・ Jan 5&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#ai&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#deeplearning&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#rag&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#mcp&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>deeplearning</category>
      <category>rag</category>
      <category>mcp</category>
    </item>
    <item>
      <title>A Practical Roadmap to Learn Generative AI (Without Wasting Months)</title>
      <dc:creator>Aqsa Zafar</dc:creator>
      <pubDate>Mon, 05 Jan 2026 12:44:40 +0000</pubDate>
      <link>https://dev.to/aqsa_zafar_e47324954dca66/a-practical-roadmap-to-learn-generative-ai-without-wasting-months-396f</link>
      <guid>https://dev.to/aqsa_zafar_e47324954dca66/a-practical-roadmap-to-learn-generative-ai-without-wasting-months-396f</guid>
      <description>&lt;p&gt;Most learning guides jump straight into tools. That’s why many people stall halfway through.&lt;/p&gt;

&lt;p&gt;Generative AI is not about tools first. It’s about &lt;strong&gt;foundations&lt;/strong&gt;, &lt;strong&gt;systems thinking&lt;/strong&gt;, and &lt;strong&gt;how things actually run&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If your goal is to build generative AI systems, not just try demos, the learning order matters.&lt;/p&gt;

&lt;p&gt;This article lays out that order. It also points to structured learning paths that match each stage. Those are optional. They exist to save time, not replace thinking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Order Matters
&lt;/h2&gt;

&lt;p&gt;Many learners start with “build GenAI apps” without understanding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how data is structured&lt;/li&gt;
&lt;li&gt;how models are trained and evaluated&lt;/li&gt;
&lt;li&gt;how systems fail in production&lt;/li&gt;
&lt;li&gt;how cost, latency, and reliability trade off&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Skipping basics doesn’t make learning faster. It pushes the confusion downstream.&lt;/p&gt;

&lt;p&gt;A roadmap isn’t about speed. It’s about avoiding rework.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 1 — Python &amp;amp; Programming Fundamentals
&lt;/h2&gt;

&lt;p&gt;Generative AI work is code-first.&lt;/p&gt;

&lt;p&gt;You should be comfortable writing Python that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reads and transforms data&lt;/li&gt;
&lt;li&gt;calls APIs&lt;/li&gt;
&lt;li&gt;implements basic algorithms&lt;/li&gt;
&lt;li&gt;runs locally and in the cloud&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If this layer is weak, everything above it feels fragile.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Decision lens&lt;/strong&gt;&lt;br&gt;
If reading Python that handles APIs or data still slows you down, start here. If you already write Python comfortably, move on.&lt;/p&gt;

&lt;h3&gt;
  
  
  What to focus on
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Python basics (variables, loops, functions)&lt;/li&gt;
&lt;li&gt;Data structures (lists, dictionaries, DataFrames)&lt;/li&gt;
&lt;li&gt;Debugging and testing&lt;/li&gt;
&lt;li&gt;Jupyter / Colab workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Optional structured paths
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://imp.i384100.net/xLeD31" rel="noopener noreferrer"&gt;AI Python for Beginners&lt;/a&gt; — Coursera&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://datacamp.pxf.io/POeN9e" rel="noopener noreferrer"&gt;Introduction to Python for Data Science&lt;/a&gt; — DataCamp&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://trk.udemy.com/qzQX9n" rel="noopener noreferrer"&gt;Python for AI and Machine Learning&lt;/a&gt; — Udemy&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://click.linksynergy.com/deeplink?id=Vrr1tRSwXGM&amp;amp;mid=53187&amp;amp;murl=https%3A%2F%2Fwww.udacity.com%2Fcourse%2Fai-programming-python-nanodegree--nd089" rel="noopener noreferrer"&gt;AI Programming with Python Nanodegree&lt;/a&gt; — Udacity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Skipping this stage usually costs more time later than it saves now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 2 — Data Handling &amp;amp; Machine Learning Basics
&lt;/h2&gt;

&lt;p&gt;Generative systems sit on top of machine learning.&lt;/p&gt;

&lt;p&gt;If you don’t understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;supervised vs unsupervised learning&lt;/li&gt;
&lt;li&gt;evaluation and validation&lt;/li&gt;
&lt;li&gt;feature engineering&lt;/li&gt;
&lt;li&gt;workflow automation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;then model behavior feels unpredictable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Decision lens&lt;/strong&gt;&lt;br&gt;
If accuracy metrics, overfitting, or evaluation still feel unclear, this stage matters more than any GenAI tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mental models to build
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;how models learn patterns&lt;/li&gt;
&lt;li&gt;where bias and leakage come from&lt;/li&gt;
&lt;li&gt;why generalization fails&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Optional structured paths
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://datacamp.pxf.io/POeN9e" rel="noopener noreferrer"&gt;Machine Learning Scientist with Python&lt;/a&gt; — DataCamp&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://datacamp.pxf.io/rQdLbQ[](url)" rel="noopener noreferrer"&gt;Data Scientist in Python&lt;/a&gt; — DataCamp&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://trk.udemy.com/2aNJDO" rel="noopener noreferrer"&gt;Machine Learning &amp;amp; AI Engineering with Python&lt;/a&gt; — Udemy&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://imp.i384100.net/9W1W9E" rel="noopener noreferrer"&gt;ML specializations on Coursera&lt;/a&gt; (regression, classification, evaluation)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This stage explains &lt;em&gt;why&lt;/em&gt; models behave the way they do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 3 — Deep Learning &amp;amp; Neural Networks
&lt;/h2&gt;

&lt;p&gt;Modern generative systems are neural-network based. Treating them as black boxes leads to shallow understanding.&lt;/p&gt;

&lt;p&gt;You should understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what neural networks actually learn&lt;/li&gt;
&lt;li&gt;how training works (loss, backpropagation)&lt;/li&gt;
&lt;li&gt;how representations form&lt;/li&gt;
&lt;li&gt;why attention and transformers matter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This stage is conceptual, not math-heavy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Decision lens&lt;/strong&gt;&lt;br&gt;
If transformers still feel like buzzwords instead of mechanisms, pause here before moving on.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optional structured paths
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://imp.i384100.net/3ej3BM" rel="noopener noreferrer"&gt;Deep learning paths on Coursera&lt;/a&gt; or Udemy (for example, &lt;a href="https://trk.udemy.com/RGA3q7" rel="noopener noreferrer"&gt;Deep Learning A–Z&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://imp.i384100.net/MAP3zP" rel="noopener noreferrer"&gt;Generative AI with Large Language Models&lt;/a&gt; — Coursera&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here, classic ML concepts start connecting to modern generation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 4 — Generative AI Systems
&lt;/h2&gt;

&lt;p&gt;Now foundations turn into systems.&lt;/p&gt;

&lt;p&gt;This stage connects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;transformer architecture&lt;/li&gt;
&lt;li&gt;prompt design fundamentals&lt;/li&gt;
&lt;li&gt;retrieval-augmented generation (RAG)&lt;/li&gt;
&lt;li&gt;embeddings and vector stores&lt;/li&gt;
&lt;li&gt;evaluation for generation (not accuracy scores)&lt;/li&gt;
&lt;li&gt;failure modes and responsible use&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where many people start and why many struggle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Decision lens&lt;/strong&gt;&lt;br&gt;
If you want systems that work beyond demos, this stage matters more than model size or tooling.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optional structured paths
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://imp.i384100.net/MAP3zP" rel="noopener noreferrer"&gt;Generative AI with Large Language Models&lt;/a&gt; — Coursera&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://trk.udemy.com/2aNJDO" rel="noopener noreferrer"&gt;Machine Learning, Data Science &amp;amp; AI Engineering with Python&lt;/a&gt; — Udemy&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://click.linksynergy.com/deeplink?id=Vrr1tRSwXGM&amp;amp;mid=53187&amp;amp;murl=https%3A%2F%2Fwww.udacity.com%2Fcourse%2Fgenerative-ai--nd608" rel="noopener noreferrer"&gt;Applied Generative AI Engineering&lt;/a&gt; — Udacity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here, you stop building toy examples and start thinking like a system designer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 5 — Projects &amp;amp; Real Workflows
&lt;/h2&gt;

&lt;p&gt;Courses build understanding. Projects expose gaps.&lt;/p&gt;

&lt;p&gt;Focus on workflows that include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;data ingestion and cleaning&lt;/li&gt;
&lt;li&gt;model selection and tuning&lt;/li&gt;
&lt;li&gt;batch and real-time inference&lt;/li&gt;
&lt;li&gt;logging, monitoring, and failure handling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RAG-based search assistant&lt;/li&gt;
&lt;li&gt;code assistant using LLM APIs&lt;/li&gt;
&lt;li&gt;multimodal pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this point, courses support learning. They no longer drive it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Should Not Jump to Advanced Courses Yet
&lt;/h2&gt;

&lt;p&gt;Pause if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python code still feels hard to read&lt;/li&gt;
&lt;li&gt;evaluation metrics are confusing&lt;/li&gt;
&lt;li&gt;you can’t explain how a model learns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Structured programs don’t fix missing fundamentals. Practice does.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Use This Roadmap
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Fix coding and data foundations&lt;/li&gt;
&lt;li&gt;Build core ML understanding&lt;/li&gt;
&lt;li&gt;Learn deep learning concepts&lt;/li&gt;
&lt;li&gt;Design generative systems&lt;/li&gt;
&lt;li&gt;Apply through real workflows&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Courses are tools. Order is what makes them useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources Referenced (by Gap)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;If you need Python structure&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://imp.i384100.net/xLeD31" rel="noopener noreferrer"&gt;AI Python for Beginners&lt;/a&gt; — Coursera&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://datacamp.pxf.io/POeN9e" rel="noopener noreferrer"&gt;Introduction to Python for Data Science&lt;/a&gt; — DataCamp&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://click.linksynergy.com/deeplink?id=Vrr1tRSwXGM&amp;amp;mid=53187&amp;amp;murl=https%3A%2F%2Fwww.udacity.com%2Fcourse%2Fai-programming-python-nanodegree--nd089" rel="noopener noreferrer"&gt;AI Programming with Python&lt;/a&gt; — Udacity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If you need ML depth&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://datacamp.pxf.io/POeN9e" rel="noopener noreferrer"&gt;Machine Learning Scientist with Python&lt;/a&gt; — DataCamp&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://datacamp.pxf.io/rQdLbQ" rel="noopener noreferrer"&gt;Data Scientist in Python&lt;/a&gt; — DataCamp&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://trk.udemy.com/2aNJDO" rel="noopener noreferrer"&gt;Machine Learning &amp;amp; AI Engineering with Python&lt;/a&gt; — Udemy&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://imp.i384100.net/9W1W9E" rel="noopener noreferrer"&gt;ML specializations&lt;/a&gt; on Coursera&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If you need GenAI system understanding&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://imp.i384100.net/MAP3zP" rel="noopener noreferrer"&gt;Generative AI with Large Language Models&lt;/a&gt; — Coursera&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://trk.udemy.com/2aNJDO" rel="noopener noreferrer"&gt;Machine Learning, Data Science &amp;amp; AI Engineering with Python&lt;/a&gt; — Udemy&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://click.linksynergy.com/deeplink?id=Vrr1tRSwXGM&amp;amp;mid=53187&amp;amp;murl=https%3A%2F%2Fwww.udacity.com%2Fcourse%2Fgenerative-ai--nd608" rel="noopener noreferrer"&gt;Applied Generative AI Engineering&lt;/a&gt; — Udacity&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Note
&lt;/h2&gt;

&lt;p&gt;If you already know your gaps, structured programs can save months.&lt;br&gt;
If you don’t, fix the order first. No course can compensate for that.&lt;/p&gt;

&lt;p&gt;Happy learning.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>deeplearning</category>
      <category>rag</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Learning Claude Code: the order that finally made sense to me</title>
      <dc:creator>Aqsa Zafar</dc:creator>
      <pubDate>Sat, 03 Jan 2026 10:17:41 +0000</pubDate>
      <link>https://dev.to/aqsa_zafar_e47324954dca66/learning-claude-code-the-order-that-finally-made-sense-to-me-4mlj</link>
      <guid>https://dev.to/aqsa_zafar_e47324954dca66/learning-claude-code-the-order-that-finally-made-sense-to-me-4mlj</guid>
      <description>&lt;p&gt;When I first started using Claude Code, the documentation helped explain features, but I still struggled to understand how everything fit together in real workflows.&lt;/p&gt;

&lt;p&gt;I knew what each piece did in isolation.&lt;br&gt;
I didn’t know &lt;strong&gt;when&lt;/strong&gt; or &lt;strong&gt;why&lt;/strong&gt; to use them.&lt;/p&gt;

&lt;p&gt;I kept getting stuck on questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What actually runs locally?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How do context, hooks, and subagents interact?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Where does MCP fit without overcomplicating things?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How is this different from a normal CLI or automation setup?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So instead of jumping between topics, I wrote down a &lt;strong&gt;learning order&lt;/strong&gt; that helped me build a clear mental model.&lt;/p&gt;

&lt;p&gt;This isn’t the only way to learn Claude Code.&lt;br&gt;
It’s just the sequence that reduced confusion for me.&lt;/p&gt;

&lt;h3&gt;
  
  
  The sequence that worked for me
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. What Claude Code is (and what it isn’t)
&lt;/h4&gt;

&lt;p&gt;Before touching setup, I needed clarity on scope:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This isn’t just “Claude in a terminal”&lt;/li&gt;
&lt;li&gt;It’s a structured system with context, tools, and automation hooks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That framing mattered.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Installation (CLI + VS Code)
&lt;/h4&gt;

&lt;p&gt;Getting both set up early helped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CLI for understanding how commands actually run&lt;/li&gt;
&lt;li&gt;VS Code for visibility and iteration&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3. Basic CLI usage
&lt;/h4&gt;

&lt;p&gt;Before abstractions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run commands&lt;/li&gt;
&lt;li&gt;See outputs&lt;/li&gt;
&lt;li&gt;Break things&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This grounded everything else.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Slash commands and context handling
&lt;/h4&gt;

&lt;p&gt;This is where Claude Code starts feeling different from chat:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Commands change behavior&lt;/li&gt;
&lt;li&gt;Context accumulation explains why responses differ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing advanced yet — just observing patterns.&lt;/p&gt;

&lt;h4&gt;
  
  
  5. Claude.md and behavior control
&lt;/h4&gt;

&lt;p&gt;Once context made sense, Claude.md finally clicked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Persistent instructions&lt;/li&gt;
&lt;li&gt;Predictable behavior&lt;/li&gt;
&lt;li&gt;Fewer “why did it respond like that?” moments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Teaching this earlier felt too abstract for me.&lt;/p&gt;

&lt;h4&gt;
  
  
  6. Output styles and skills
&lt;/h4&gt;

&lt;p&gt;This was the first point where behavior customization felt concrete:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Output styles show visible changes&lt;/li&gt;
&lt;li&gt;Skills make those changes reusable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Seeing results mattered more than theory here.&lt;/p&gt;

&lt;h4&gt;
  
  
  7. Hooks with practical examples
&lt;/h4&gt;

&lt;p&gt;Hooks only made sense once I had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stable commands&lt;/li&gt;
&lt;li&gt;Predictable output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using them for logging, cleanup, or small workflow tweaks made the idea stick.&lt;/p&gt;

&lt;h4&gt;
  
  
  8. Subagents and delegation
&lt;/h4&gt;

&lt;p&gt;At this stage, delegation felt natural instead of magical:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One agent, one responsibility&lt;/li&gt;
&lt;li&gt;Clear boundaries&lt;/li&gt;
&lt;li&gt;Less mental overload&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  9. MCP basics, then local tools
&lt;/h4&gt;

&lt;p&gt;I intentionally kept MCP late:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Early exposure just added confusion&lt;/li&gt;
&lt;li&gt;After hooks and subagents, MCP felt like an extension, not a leap&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Local tools were especially helpful for understanding real integrations.&lt;/p&gt;

&lt;h4&gt;
  
  
  10. Using it alongside GitHub Actions and YAML
&lt;/h4&gt;

&lt;p&gt;Only after everything above did automation make sense:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code as part of a system&lt;/li&gt;
&lt;li&gt;Not a replacement for CI/CD&lt;/li&gt;
&lt;li&gt;A collaborator inside workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Final thoughts
&lt;/h3&gt;

&lt;p&gt;Experienced users may find this obvious.&lt;br&gt;
But for me, learning Claude Code linearly — instead of feature-hopping — made the tool much easier to reason about.&lt;/p&gt;

&lt;p&gt;Other orders probably work too.&lt;br&gt;
This is simply what helped me move from “I’ve read the docs” to “I understand how this fits together.”&lt;/p&gt;

&lt;h3&gt;
  
  
  Resources
&lt;/h3&gt;

&lt;p&gt;I turned these notes into a short, step-by-step playlist so I could revisit concepts as I learned.&lt;/p&gt;

&lt;p&gt;Playlist: &lt;strong&gt;&lt;a href="https://youtube.com/playlist?list=PL-F5kYFVRcIvZQ_LEbdLIZrohgbf-Vock&amp;amp;si=XObAuRMlJT7T3yrY" rel="noopener noreferrer"&gt;Claude Code Tutorial Series&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>coding</category>
      <category>developer</category>
    </item>
  </channel>
</rss>
