<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Programmer Space]]></title><description><![CDATA[Your source for bite-sized podcasts in the age of AI, easy-to-grasp roadmaps tailored for 2025 and beyond, and quick posts on programming, career growth, productivity, deveneurship, indie hacking, technical writing, and personal branding for devs.

]]></description><link>https://programmerspace.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!y4C5!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7a3ac7-4b05-412a-951e-aafcd88f575b_968x968.png</url><title>Programmer Space</title><link>https://programmerspace.substack.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 06 Apr 2026 01:34:36 GMT</lastBuildDate><atom:link href="https://programmerspace.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[BouCodes]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[support@techiediaries.com]]></webMaster><itunes:owner><itunes:email><![CDATA[support@techiediaries.com]]></itunes:email><itunes:name><![CDATA[Boucodes]]></itunes:name></itunes:owner><itunes:author><![CDATA[Boucodes]]></itunes:author><googleplay:owner><![CDATA[support@techiediaries.com]]></googleplay:owner><googleplay:email><![CDATA[support@techiediaries.com]]></googleplay:email><googleplay:author><![CDATA[Boucodes]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Beginner’s Guide to .env Files & Security Management]]></title><description><![CDATA[How to Stop Hard-Coding Secrets and Adopt Professional Secrets Management.]]></description><link>https://programmerspace.substack.com/p/the-beginners-guide-to-env-files</link><guid isPermaLink="false">https://programmerspace.substack.com/p/the-beginners-guide-to-env-files</guid><dc:creator><![CDATA[Boucodes]]></dc:creator><pubDate>Fri, 27 Feb 2026 01:10:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vjo3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88046de6-7b4f-4503-b89e-cd764ef394af_1024x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey readers,<strong> Bou~codes</strong> and <strong>Naima</strong> here.</p><p><strong>Learning web dev?</strong> Stop hard-coding API keys! Learn what a <strong>.env</strong> file is, why secrets management is necessary skill for your career, and how to stay secure.</p><blockquote><p><em><strong>Bou~codes:</strong></em> Make sure to grab the security checklist PDF file we prepared for you. Link at the end of the article.</p><p>You can also listen to or download this post as a PDF file from: <a href="https://10xdev.blog/beginners-guide-env-files-security/">https://10xdev.blog/beginners-guide-env-files-security/ </a></p></blockquote><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vjo3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88046de6-7b4f-4503-b89e-cd764ef394af_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vjo3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88046de6-7b4f-4503-b89e-cd764ef394af_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!vjo3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88046de6-7b4f-4503-b89e-cd764ef394af_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!vjo3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88046de6-7b4f-4503-b89e-cd764ef394af_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!vjo3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88046de6-7b4f-4503-b89e-cd764ef394af_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vjo3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88046de6-7b4f-4503-b89e-cd764ef394af_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/88046de6-7b4f-4503-b89e-cd764ef394af_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vjo3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88046de6-7b4f-4503-b89e-cd764ef394af_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!vjo3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88046de6-7b4f-4503-b89e-cd764ef394af_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!vjo3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88046de6-7b4f-4503-b89e-cd764ef394af_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!vjo3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88046de6-7b4f-4503-b89e-cd764ef394af_1024x608.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><p>If you are learning web development right now, there is one skill that separates the hobbyists from the hired pros: <strong>handling secrets.</strong></p><blockquote><p><em><strong>Naima: We&#8217;re not talking about whispering office gossip. We&#8217;re talking about database passwords, API keys, and encryption tokens. </strong></em></p></blockquote><p>When developers first start coding, they make the classic mistake. </p><p>They hard-code  API keys right into their source code and push it to GitHub.</p><p>Handling configuration data isn&#8217;t just a &#8220;nice-to-have&#8221;&#8212;it&#8217;s a mandatory requirement in any professional company. </p><div class="pullquote"><p><em><strong>Whether you are a self-taught developer, a bootcamp grad, or a CS student, you need to know how to keep your app secure.</strong></em></p></div><p>Let&#8217;s break down exactly what <code>.env</code> files are, why they matter, and how to graduate to <strong>professional Secrets Management </strong>without <strong>getting hacked</strong>.</p><p></p><h2>What Exactly is a .env File?</h2><p>Let&#8217;s start with the answer you might need for a job interview or a quick explanation.</p><p><em><strong>A </strong></em><code>.env</code><em><strong> file is a simple text file located at the root of your project. It stores configuration values&#8212;specifically the sensitive ones&#8212;that your application reads while it runs.</strong></em></p><blockquote><p><em><strong>Naima:</strong></em> Think of it as a private note for your code. Instead of writing <code>const apiKey = &#8220;12345-super-secret&#8221;</code> directly in your JavaScript or Python file, you write <code>process.env.API_KEY</code>. Your code then looks at the <code>.env</code> file to find the actual value.</p></blockquote><p><strong>Common things you&#8217;ll see in this file:</strong></p><ul><li><p><strong>Database Passwords:</strong> <code>DB_PASS=hunter2</code></p></li><li><p><strong>API Keys:</strong> <code>STRIPE_KEY=sk_test_4eC39HqLyjWDarjtT1zdp7dc</code></p></li><li><p><strong>Server Config:</strong> <code>PORT=8080</code></p></li><li><p><strong>Encryption Secrets:</strong> <code>JWT_SECRET=my_hidden_phrase</code></p><p></p></li></ul><blockquote><p><strong>Note for Self-Taught Devs:</strong> You might be used to tutorials that just put the API key in the code to &#8220;make it work.&#8221; </p><p>That&#8217;s fine for a 10-minute tutorial, but in the real world, that&#8217;s a fireable offense. </p><p>Build the habit of using environment variables now, even for small personal projects.</p></blockquote><p></p><h2>Why You Can&#8217;t Just &#8220;Hardcode&#8221; Everything</h2><p>You might wonder, &#8220;Why go through the trouble? </p><p>Why not just paste the password in the code?&#8221;</p><p>There are three massive reasons why hard-coding is a bad idea.</p><h3>1. Security (Obviously)</h3><p>Source code moves around. </p><p>It lives on your laptop, it gets pushed to GitHub, and it gets pulled down by other teammates. </p><p>If your secrets are in the code, everyone who sees the code sees the passwords.</p><h3>2. Flexibility</h3><p>Imagine you are building an app.</p><ul><li><p>On your <strong>laptop</strong>, you want to connect to a local test database.</p></li><li><p>When you push to <strong>Production</strong>, you need to connect to the real, live customer database.</p></li></ul><p>If the database URL is hard-coded, you have to change the code every time you deploy. </p><p>That&#8217;s a recipe for disaster. </p><p>With environment variables, the code stays the same, but the <code>.env</code> file changes depending on where the code is running.</p><h3>3. Team Safety</h3><p>Accidents happen! </p><p>If you email a zip file of your code or share a screen, you don&#8217;t want your Stripe private key visible to the world.</p><h2>The &#8220;It Works on My Machine&#8221; Problem: Handling Multiple Environments</h2><p>In a professional setting, you never just have &#8220;the app.&#8221; </p><p>You have different versions of the app running in different places. </p><p>This is where the power of environment variables really shines.</p><p>Companies usually separate configurations like this:</p><ul><li><p><strong>Local (.env.local):</strong> This is on your machine. It uses fake data and local databases so you can break things without worry.</p></li><li><p><strong>Integration / Testing (.env.int):</strong> A shared server where automated tests run.</p></li><li><p><strong>QA (.env.qa):</strong> Where the Quality Assurance team checks for bugs before release.</p></li><li><p><strong>Production (.env.prod):</strong> The live app your users actually see.</p></li></ul><p>Every one of these environments needs different passwords and settings.</p><blockquote><p><strong>Note for Bootcamp Grads:</strong> In bootcamp, you often rush to get the MVP (Minimum Viable Product) working. </p><p>You might stick to one <code>.env</code> file. But in your first job, you&#8217;ll likely deal with complex CI/CD pipelines. </p><p>Understanding that <em>production config is different from local config</em> will make your first week much smoother.</p></blockquote><div><hr></div><h2>The Danger Zone: Deployment Risks &#9888;&#65039;</h2><p>Here is where things get tricky.</p><p> Just because you are using a <code>.env</code> file doesn&#8217;t mean you are 100% safe. </p><p>Beginners often trip up during deployment.</p><h3>The Docker Trap</h3><p>A very common mistake is baking environment variables into a Docker image or putting them inside a <code>docker-compose.yml</code> file.</p><p>If you write:</p><pre><code><code>environment:
  - DB_PASSWORD=secret123
</code></code></pre><p>...inside your <code>docker-compose.yml</code> and push that file to GitHub, you have just leaked your secret.</p><p>Even worse, if you include the <code>.env</code> file in your Docker build process, the secrets become part of the image history. </p><p>Anyone who pulls that image can inspect the layers and find your keys.</p><h3>Is the .env file itself dangerous?</h3><p>No. </p><p>The file is safe <em>if it stays on your server</em>. </p><p>But if it leaks, it gives attackers the keys to the castle.</p><p><strong>If a hacker gets your .env file, they can:</strong></p><ul><li><p>Steal or delete your user data.</p></li><li><p>Use your paid APIs (and run up your bill).</p></li><li><p>Send fake emails from your domain.</p></li><li><p>Create fake admin accounts to lock you out.</p></li></ul><p>This leads us to the most important rule of this entire article.</p><p></p><h3>&#128721; The Golden Rule: Never Commit .env to Git</h3><p>You must add <code>.env</code> to your <code>.gitignore</code> file immediately. </p><p>If you commit it, it lives in the git history forever, even if you delete it later.</p><p></p><blockquote><p><strong>Note for CS Students:</strong> You learned about Git in class, but they might not have stressed <em>git hygiene</em>. </p><p>Before you <code>git add .</code>, always run <code>git status</code> and check if that sneaky <code>.env</code> file is being staged. </p><p>If it is, stop and update your <code>.gitignore</code>.</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qzXz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa328af-6bbf-4d54-83c8-beb05f2951cb_2340x1063.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qzXz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa328af-6bbf-4d54-83c8-beb05f2951cb_2340x1063.png 424w, https://substackcdn.com/image/fetch/$s_!qzXz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa328af-6bbf-4d54-83c8-beb05f2951cb_2340x1063.png 848w, https://substackcdn.com/image/fetch/$s_!qzXz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa328af-6bbf-4d54-83c8-beb05f2951cb_2340x1063.png 1272w, https://substackcdn.com/image/fetch/$s_!qzXz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa328af-6bbf-4d54-83c8-beb05f2951cb_2340x1063.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qzXz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa328af-6bbf-4d54-83c8-beb05f2951cb_2340x1063.png" width="1456" height="661" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8aa328af-6bbf-4d54-83c8-beb05f2951cb_2340x1063.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:661,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:220788,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/178710295?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa328af-6bbf-4d54-83c8-beb05f2951cb_2340x1063.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!qzXz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa328af-6bbf-4d54-83c8-beb05f2951cb_2340x1063.png 424w, https://substackcdn.com/image/fetch/$s_!qzXz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa328af-6bbf-4d54-83c8-beb05f2951cb_2340x1063.png 848w, https://substackcdn.com/image/fetch/$s_!qzXz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa328af-6bbf-4d54-83c8-beb05f2951cb_2340x1063.png 1272w, https://substackcdn.com/image/fetch/$s_!qzXz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa328af-6bbf-4d54-83c8-beb05f2951cb_2340x1063.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>The Professional Upgrade: Secrets Management</h2><p>Okay, so <code>.env</code> files are great for local development. </p><p>But what happens when you have 50 microservices and 20 developers? </p><p>Emailing <code>.env</code> files back and forth is insecure and messy.</p><p>This is where <strong>Secrets Managers</strong> come in.</p><p>Professional companies don&#8217;t usually store secrets in text files on the production server. </p><p>They use dedicated tools to inject secrets safely.</p><p><strong>Why use a Manager?</strong></p><ol><li><p><strong>Centralization:</strong> You change the password in one place, and all apps get the update.</p></li><li><p><strong>Rotation:</strong> You can set it to automatically change passwords every 30 days (Auto-Rotation).</p></li><li><p><strong>Access Control:</strong> You can control exactly which developer sees which key. Maybe the junior dev shouldn&#8217;t see the production database password.</p></li></ol><p></p><h3>Popular Tools You Should Know</h3><p>If you want to impress a hiring manager, mention that you&#8217;ve experimented with one of these:</p><ul><li><p><strong>Cloud Providers:</strong> AWS Secrets Manager, Azure Key Vault, Google Secret Manager.</p></li><li><p><strong>Dev-First Tools:</strong> Doppler (very popular right now), Infisical, HashiCorp Vault.</p></li></ul><p>These tools allow your app to fetch the secrets it needs while it starts up, without ever writing them to a file on the disk.</p><h2>Your Security Checklist</h2><p>Ready to secure your code? Here is your action plan.</p><ol><li><p><strong>Git Ignore:</strong> Go to your project and ensure <code>.env</code> is in your <code>.gitignore</code>.</p></li><li><p><strong>No Hardcoding:</strong> Scan your code. Do you see any strings starting with <code>sk_</code> or <code>password</code>? Move them to variables.</p></li><li><p><strong>Least Privilege:</strong> Does your app really need &#8220;Admin&#8221; access to the database? Or just &#8220;Read/Write&#8221;? Give it only what it needs.</p></li><li><p><strong>Try a Secrets Manager:</strong> Sign up for a free tier of Doppler or AWS Secrets Manager and try to connect it to a &#8220;Hello World&#8221; app.</p></li><li><p><strong>Audit:</strong> Every few months, check your unused keys and delete them.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RvBV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e5f940-e002-4bab-a32d-0bb10726eed9_2340x1262.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RvBV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e5f940-e002-4bab-a32d-0bb10726eed9_2340x1262.png 424w, https://substackcdn.com/image/fetch/$s_!RvBV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e5f940-e002-4bab-a32d-0bb10726eed9_2340x1262.png 848w, https://substackcdn.com/image/fetch/$s_!RvBV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e5f940-e002-4bab-a32d-0bb10726eed9_2340x1262.png 1272w, https://substackcdn.com/image/fetch/$s_!RvBV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e5f940-e002-4bab-a32d-0bb10726eed9_2340x1262.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RvBV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e5f940-e002-4bab-a32d-0bb10726eed9_2340x1262.png" width="1456" height="785" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e5e5f940-e002-4bab-a32d-0bb10726eed9_2340x1262.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:785,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:312355,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/178710295?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e5f940-e002-4bab-a32d-0bb10726eed9_2340x1262.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RvBV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e5f940-e002-4bab-a32d-0bb10726eed9_2340x1262.png 424w, https://substackcdn.com/image/fetch/$s_!RvBV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e5f940-e002-4bab-a32d-0bb10726eed9_2340x1262.png 848w, https://substackcdn.com/image/fetch/$s_!RvBV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e5f940-e002-4bab-a32d-0bb10726eed9_2340x1262.png 1272w, https://substackcdn.com/image/fetch/$s_!RvBV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e5f940-e002-4bab-a32d-0bb10726eed9_2340x1262.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>The Bottom Line</h2><p>Handling secrets correctly is not just about avoiding a hack. </p><p>It is about showing that you are a responsible engineer who cares about the product and the company.</p><p><code>.env</code> files are your first step. They keep your config clean and your secrets out of your source code. </p><p>But as you grow, look into professional Secrets Management tools.</p><p><strong>My advice?</strong> Start today. Go through your GitHub repositories. </p><p>If you find any hard-coded keys in your old projects, revoke them immediately and rewrite the code to use environment variables. </p><p>It&#8217;s the best practice you can get for the real world.</p><p><em>Want to practice this? Try setting up a simple Node.js or Python app today that connects to a database using only environment variables. It&#8217;s a small project that teaches a massive lesson.</em></p><p><em><strong>Download <a href="https://10xdev.blog/library/Developer-Security-Checklist.pdf">The Developer Security Checklist</a> and </strong></em><strong>check our complete <a href="https://10xdev.blog/library/">library</a>.</strong></p><p><em><strong>Thanks for reading; </strong></em></p><p><em><strong>By bou~codes and naima from 10xdev blog.</strong></em></p><p><strong>P.S: </strong>We are working on some new projects that will help learn programming the right way in 2026:</p><ul><li><p>Books that you may read online completely for free.</p></li><li><p>PyAcademy: An online app that help learn Python by listening and practicing.</p></li><li><p>Roadmaps tailored for 2026 that you can read or download as PDF.</p></li><li><p>Series: learning paths to master specific topics in the AI era.</p><p></p><p>Make sure to check them on 10xdev blog and don&#8217;t forget to listen to our latest podcasts.</p></li></ul><p></p>]]></content:encoded></item><item><title><![CDATA[Angular’s Back! Why v21 Just Made It The Best Framework of 2025]]></title><description><![CDATA[The Comeback You Didn&#8217;t See Coming]]></description><link>https://programmerspace.substack.com/p/angulars-back-why-v21-just-made-it</link><guid isPermaLink="false">https://programmerspace.substack.com/p/angulars-back-why-v21-just-made-it</guid><dc:creator><![CDATA[Boucodes]]></dc:creator><pubDate>Thu, 11 Dec 2025 19:36:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!oxk4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26e3aeb-99c0-402c-9c3b-a8789ab27db4_1024x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For a while, Angular was the reliable, enterprise-grade workhorse of the front-end world. Powerful, structured, and maybe a little&#8230; predictable. </p><p>In 2025, something has shifted. With the modern Angular v20+, the framework has shed its old skin and emerged as something new: a surprisingly modern <strong>framework that&#8217;s once again at the cutting edge.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oxk4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26e3aeb-99c0-402c-9c3b-a8789ab27db4_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oxk4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26e3aeb-99c0-402c-9c3b-a8789ab27db4_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!oxk4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26e3aeb-99c0-402c-9c3b-a8789ab27db4_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!oxk4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26e3aeb-99c0-402c-9c3b-a8789ab27db4_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!oxk4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26e3aeb-99c0-402c-9c3b-a8789ab27db4_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oxk4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26e3aeb-99c0-402c-9c3b-a8789ab27db4_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c26e3aeb-99c0-402c-9c3b-a8789ab27db4_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oxk4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26e3aeb-99c0-402c-9c3b-a8789ab27db4_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!oxk4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26e3aeb-99c0-402c-9c3b-a8789ab27db4_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!oxk4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26e3aeb-99c0-402c-9c3b-a8789ab27db4_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!oxk4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26e3aeb-99c0-402c-9c3b-a8789ab27db4_1024x608.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">In 2025, something has shifted. With the modern Angular v20+, the framework has shed its old skin and emerged as something new: a surprisingly modern framework that&#8217;s once again at the cutting edge.</figcaption></figure></div><blockquote><p><em><strong>Naima: For years, Angular carried a reputation for being the stable, enterprise-proven framework&#8212;powerful, structured, and focused on long-term reliability.<br>But starting with the modern Angular era (v20+), the framework has undergone a remarkable transformation. It&#8217;s cleaner, faster, signal-driven, and now  back among the most innovative front-end frameworks in 2025.</strong></em></p></blockquote><p>If you need a metaphor for this transformation, look no further than the official v21 launch video, where Angular team member Mark Techson gets &#8220;sucked into a video game like Jumanji.&#8221; It&#8217;s the perfect analogy for this release&#8212;an adventure that is ambitious, fun, and completely game-changing. </p><p>This isn&#8217;t just another incremental update; it&#8217;s a bold leap forward.</p><p><em><strong>In this article, we&#8217;ll break down the key features that make Angular 21 such a monumental release. We&#8217;ll explore what these changes mean for your daily workflow and why, from our personal perspective, this evolution is one of the most exciting things to happen in web development.</strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!P-dt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9d71c0-45e4-4aa9-8830-018538513430_1003x652.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!P-dt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9d71c0-45e4-4aa9-8830-018538513430_1003x652.png 424w, https://substackcdn.com/image/fetch/$s_!P-dt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9d71c0-45e4-4aa9-8830-018538513430_1003x652.png 848w, https://substackcdn.com/image/fetch/$s_!P-dt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9d71c0-45e4-4aa9-8830-018538513430_1003x652.png 1272w, https://substackcdn.com/image/fetch/$s_!P-dt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9d71c0-45e4-4aa9-8830-018538513430_1003x652.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!P-dt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9d71c0-45e4-4aa9-8830-018538513430_1003x652.png" width="1003" height="652" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5b9d71c0-45e4-4aa9-8830-018538513430_1003x652.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:652,&quot;width&quot;:1003,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:109011,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/179671794?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9d71c0-45e4-4aa9-8830-018538513430_1003x652.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!P-dt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9d71c0-45e4-4aa9-8830-018538513430_1003x652.png 424w, https://substackcdn.com/image/fetch/$s_!P-dt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9d71c0-45e4-4aa9-8830-018538513430_1003x652.png 848w, https://substackcdn.com/image/fetch/$s_!P-dt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9d71c0-45e4-4aa9-8830-018538513430_1003x652.png 1272w, https://substackcdn.com/image/fetch/$s_!P-dt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9d71c0-45e4-4aa9-8830-018538513430_1003x652.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2><strong>The v21 Features: What You&#8217;ll </strong><em><strong>Actually</strong></em><strong> Use</strong></h2><p></p><p>Beyond the hype, Angular 21 delivers a set of tangible, powerful features that will fundamentally improve the developer experience, performance, and capabilities of your applications. </p><p>But these aren&#8217;t just disconnected items on a changelog. </p><p>They tell a story: Angular is shedding its legacy complexities in favor of a modern, explicit, and performant core centered around Signals and Vite. </p><blockquote><p><em><strong>Naima</strong></em><strong>: </strong>I&#8217;m <em>so excited</em> to share this with you! &#128525;<br>This is part of my brand-new project on <strong>10xdev Blog</strong>, where I build super engaging <strong>interactive roadmaps</strong>.<br>If you want to explore something beautiful, dynamic, and fully narrated, you&#8217;ll absolutely love my latest creation &#8212; a complete <strong>Angular 21 learning roadmap</strong>:<br><a href="https://10xdev.blog/angular-21-deep-dive-mind-map">https://10xdev.blog/angular-21-deep-dive-mind-map</a></p><p>And please feel free to send me any feedback &#8212; I&#8217;d love to hear your thoughts!</p></blockquote><p><strong>Let&#8217;s dissect the most important changes.</strong></p><h3>Signal Forms (Experimental)</h3><p></p><p>Angular 21 introduces an eagerly awaited, fully reactive way to handle forms built on the foundation of Signals. </p><p>The new <code>form()</code> function takes a signal-based data model and creates a corresponding reactive form tree. </p><p>You then use the <code>[field]</code> directive to create a simple, two-way binding between your template inputs and the form&#8217;s signal model.</p><p>These are some of its features:</p><p>&#8226; <strong>Declarative and Reactive:</strong> Defines the form model as a signal that automatically stays in sync with the UI. Any change in one place is instantly reflected in the other.</p><p>&#8226; <strong>Full Type-Safety:</strong> Provides a more ergonomic and less error-prone developer experience when accessing form fields.</p><p>&#8226; <strong>Simplified State Management:</strong> Eliminates the boilerplate and complexity associated with traditional form management, creating a cleaner, more intuitive approach.</p><p>This is a massive step forward for one of the framework&#8217;s most critical features. While the API is still experimental, it&#8217;s a clear path to a more reactive future for forms in Angular.</p><h3>Zoneless by Default</h3><p></p><p>This is a big shift, and it&#8217;s directly connected to the rise of Signals. New applications generated with Angular 21 are now <strong>zoneless by default</strong>, removing the long-standing dependency on <code>Zone.js</code>. </p><blockquote><p><em><strong>Naima:</strong></em> With Signals now explicitly managing state, the &#8220;magic&#8221; of Zone.js is no longer necessary for change detection.</p></blockquote><p>So what does &#8220;explicit&#8221; change detection actually mean? </p><p>It means change detection now runs only when triggered by specific actions you control:</p><p>&#8226; A Signal&#8217;s value is updated in a template.</p><p>&#8226; User-bound events (like clicks or inputs) are fired.</p><p>&#8226; The <code>async</code> pipe emits a new value.</p><p>&#8226; <code>markForCheck()</code> is called manually.</p><p>&#8226; <code>ComponentRef.setInput()</code> is called.</p><p><strong>For those of us who&#8217;ve spent hours debugging Zone.js-polluted stack traces, this change alone is worth the upgrade.</strong> It&#8217;s a huge win for developer sanity and application performance.</p><h3>Vitest Takes the Throne: Modern Testing is Here</h3><p></p><p>After years of relying on Karma and Jasmine, Angular has officially crowned a new king of testing. </p><p>Vitest is now the default test runner for all new projects and is stable and ready for production use with the <code>ng test</code> command. </p><p>This is more than a simple swap; it&#8217;s a strategic alignment with the modern Vite ecosystem, signaling Angular&#8217;s commitment to breaking out of its historical tooling. </p><p>Finally, our testing workflow feels like it belongs in the same decade as the rest of our toolchain.</p><blockquote><p><em><strong>Naima: </strong></em>For teams with existing projects, <strong>Karma and Jasmine are still fully supported by the Angular team</strong>, so you don&#8217;t need to migrate right away.</p></blockquote><p></p><h3><code>HttpClient</code> is Now Built-in</h3><p></p><p>Here&#8217;s a quality-of-life improvement you&#8217;ll appreciate on day one: the <code>HttpClient</code> is now included by default in new applications. </p><p>That&#8217;s right&#8212;no more manually importing <code>HttpClientModule</code> or adding <code>provideHttpClient()</code> to your root providers just to make a simple API call. </p><blockquote><p><em><strong>Naima:</strong></em> While HttpClient is now built-in by default, the <code>provideHttpClient()</code> function still serves a purpose. Developers can use it to configure advanced options, such as enabling the Fetch API or registering custom HTTP interceptors, if they require more control over HttpClient&#8217;s behavior.</p></blockquote><p>It&#8217;s a small change that removes a piece of friction every single developer has encountered, and it perfectly embodies the developer-first focus of this release.</p><p></p><h3>Angular Aria (Developer Preview)</h3><p></p><p>In response to developer demand for more flexible and accessible components, the team has introduced Angular Aria, now in Developer Preview. </p><p>This new library provides a collection of headless Angular <strong>directives</strong> that implement common UI patterns with accessibility as the number one priority with these features:</p><p>&#8226; <strong>Unstyled by Design:</strong> It provides 8 common UI patterns and 13 unstyled directives, giving you full control over the look and feel while ensuring the complex parts are handled for you.</p><p>&#8226; <strong>Accessibility Guaranteed:</strong> Handles ARIA attributes, keyboard interactions, and focus management out of the box.</p><p>&#8226; <strong>Modern and Signal-Based:</strong> Built using modern Angular directives and Signals, ensuring they are both powerful and easy to customize.</p><p></p><h3>AI-Powered Tooling: The MCP Server is Now Stable</h3><p></p><p>Angular is fully embracing the future of development with its MCP (Model Context Protocol) server, which is now <strong>stable</strong>. </p><p>This tool is designed to enable AI agents and modern tooling to better understand, analyze, and write modern Angular code. </p><p>It acts as a bridge, giving LLMs the context they need to generate up-to-date, high-quality code. </p><p>This isn&#8217;t some abstract future concept; it provides concrete tools today, such as:</p><ul><li><p>The <code>ai_tutor</code> for interactive learning </p></li></ul><ul><li><p>And the <code>onpush_zoneless_migration</code> tool that provides a step-by-step plan for modernizing your app.</p></li></ul><p>These technical upgrades are more than just a list of features. Angular is also shipping a suite of new migration scripts (<code>ngclass-to-class</code>, <code>common-to-standalone</code>) and CLI support for Tailwind CSS, proving that v21 is a comprehensive update focused on modernizing every part of the developer workflow.</p><p><strong>A Personal Journey with Angular</strong></p><p></p><p>Our connection to Angular isn&#8217;t just professional; it&#8217;s a core part of our history as developers and content creators. It&#8217;s a technology that has shaped our career from the very beginning.</p><p>We started writing about Angular way back in 2016 on our first blog, <code>techiediaries</code>. In those early days, our tutorials on AngularJS and the then-new Angular 2 were some of the first articles we wrote that truly went popular.</p><p>In fact, the initial popularity of our site was built almost entirely on the back of its Angular content. When we later rebranded to <code>10xdev blog</code>, our focus expanded, but Angular has always remained a special and foundational technology for us.</p><p>We admit, there was a period a few years ago when it felt like Angular was getting left behind. The newer, &#8220;cool-kid&#8221; frameworks were grabbing the headlines, and it seemed like Angular&#8217;s best days were in the past.</p><p>But look at it now. Thanks to its embrace of Signals, a modern Vite-powered toolchain, and integrated AI tooling, you could argue that Angular is more cutting-edge today than ever before.</p><p></p><h3><strong>Why You Should Revisit Angular in 2025</strong></h3><p></p><p>Angular 21 is a landmark release. It&#8217;s not just an update; it&#8217;s a statement. The framework is faster, the developer experience is cleaner, and the new features make it more powerful and enjoyable to use than at any point in its history. </p><p>From the reactive power of Signal Forms to the raw performance of a zoneless architecture, Angular has been thoughtfully modernized from the ground up.</p><p>If you&#8217;re an Angular developer today, don&#8217;t hesitate to start exploring. And if you&#8217;re one of the many who moved on to other frameworks, we invite you to take another look. This isn&#8217;t the same old Angular.</p><div class="poll-embed" data-attrs="{&quot;id&quot;:418253}" data-component-name="PollToDOM"></div><h2>PDF Roadmaps</h2><p><em>See our collection of PDFs with detailed roadmaps and recommended learning periods for each tech, along with links to resources such as books, YouTube tutorials, and courses with certificates:</em></p><ol><li><p><a href="https://10xdev.blog/Guide-AI-Agents.pdf">A PDF Guide for Learning AI Agents</a></p></li><li><p><a href="https://10xdev.blog/Guide-AI-Engineer.pdf">A PDF Guide for Becoming an AI Engineer</a></p></li><li><p><a href="https://10xdev.blog/Guide-Backend.pdf">A PDF Guide for Becoming a Backend Developer</a></p></li><li><p><a href="https://10xdev.blog/Guide-Cyber-Security.pdf">A PDF Guide for Learning Cyber Security</a></p></li><li><p><a href="https://10xdev.blog/Guide-Data-Analyst.pdf">A PDF Guide for Learning Data Analysis</a></p></li><li><p><a href="https://10xdev.blog/Guide-FrontEnd.pdf">A PDF Guide for Learning Frontend Development</a></p></li><li><p><a href="https://10xdev.blog/Guide-Java.pdf">A PDF guide for becoming a Java Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-C++.pdf">A PDF guide for becoming a C++ Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-Python.pdf">A PDF guide for becoming a Python Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-JavaScript.pdf">A PDF guide for becoming a JavaScript Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-Rust.pdf">A PDF guide for becoming a Rust Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-Go.pdf">A PDF guide for becoming a Go Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-FrontEnd.pdf">A PDF guide for becoming a Frontend Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-Backend.pdf">A PDF guide for becoming a Backend Developer.</a></p></li></ol><p><em><strong>By bou~codes and Naima.</strong></em></p>]]></content:encoded></item><item><title><![CDATA[The Coding Habits in 2025 to Stay Relevant + A Course to Help You at No Cost.]]></title><description><![CDATA[Learn why your skills may be at risk in 2025 and how to adapt and stay relevant.]]></description><link>https://programmerspace.substack.com/p/the-coding-habits-in-2025-to-stay</link><guid isPermaLink="false">https://programmerspace.substack.com/p/the-coding-habits-in-2025-to-stay</guid><dc:creator><![CDATA[Boucodes]]></dc:creator><pubDate>Mon, 08 Dec 2025 20:17:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!xBXx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0b4c5c0-dab0-4471-8943-b165e07b4923_1024x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Things feel different in tech right now.</p><p>A few years back, landing a dev or data role felt straightforward. You learned the syntax, you built a portfolio, and you were set. But looking at 2025, that safety net feels thin.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xBXx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0b4c5c0-dab0-4471-8943-b165e07b4923_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xBXx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0b4c5c0-dab0-4471-8943-b165e07b4923_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!xBXx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0b4c5c0-dab0-4471-8943-b165e07b4923_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!xBXx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0b4c5c0-dab0-4471-8943-b165e07b4923_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!xBXx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0b4c5c0-dab0-4471-8943-b165e07b4923_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xBXx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0b4c5c0-dab0-4471-8943-b165e07b4923_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f0b4c5c0-dab0-4471-8943-b165e07b4923_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xBXx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0b4c5c0-dab0-4471-8943-b165e07b4923_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!xBXx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0b4c5c0-dab0-4471-8943-b165e07b4923_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!xBXx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0b4c5c0-dab0-4471-8943-b165e07b4923_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!xBXx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0b4c5c0-dab0-4471-8943-b165e07b4923_1024x608.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We all know why. Artificial Intelligence isn&#8217;t just a buzzword anymore. It is sitting right there in our code editors.</p><p>If your day-to-day work involves taking a clear set of instructions and turning them into code, the ground is shifting. We have tools now that generate boilerplate, write solid SQL, and draft UI components faster than any human.</p><p>But the job isn&#8217;t disappearing. It is just moving up a level.</p><p>The industry is hungry for people who can think, design, and fix messy problems. To stay relevant, we need to stop acting like translators for computers and start acting like architects of systems.</p><p>Here is what that shift looks like.</p><h3>1. Think in Systems, Not Just Syntax</h3><p>Most of us learned to code by memorizing rules. &#8220;Here is a loop,&#8221; or &#8220;Here is a class.&#8221;</p><p>But real software engineering is about managing chaos.</p><p>Take <strong>Object-Oriented Programming (OOP)</strong>. It is not just about making a class for a &#8220;Car&#8221; or a &#8220;Dog.&#8221; It is a way to map out a complex business problem so it doesn&#8217;t collapse under its own weight. AI can generate a class file in seconds. But it lacks the vision to plan how twenty different objects should talk to each other over the next two years.</p><h3>2. Don&#8217;t Wait for a Ticket</h3><p>The average developer waits for work to be assigned. The high-value developer goes looking for it.</p><p>Every company has friction points. The marketing team manually fixing a spreadsheet every Monday. The operations team copy-pasting files between folders.</p><p>You need an automation-first mindset. Learn to write scripts that touch the file system, scrape messy data, and handle errors. If a network connection drops, a bad script crashes. A good tool waits, retries, logs the issue, and keeps going.</p><p>AI can write the script if you tell it exactly what to do. But <em>you</em> are the one who has to notice the inefficiency and design the tool that actually helps.</p><h3>3. Treat Data Like Gold</h3><p>In 2025, data literacy is mandatory.</p><p>You need to know your Data Structures. I am not talking about passing a whiteboard interview. I mean knowing the trade-offs.</p><ul><li><p><strong>List vs. Set:</strong> If you need to check if an item exists inside a collection a million times, a List will slow you down. A Set will do it instantly.</p></li><li><p><strong>Immutability:</strong> Knowing when to use a Tuple so other developers know this data <em>must not change</em>.</p></li></ul><p>These choices determine if an application runs smoothly or crawls.</p><h3>A Resource to Help</h3><p>Talking about these concepts is easy. Doing the work is harder.</p><p>If you are looking to brush up on these mechanics&#8212;from the basics to the bigger picture of OOP and file handling&#8212;I found a solid study guide.</p><p>It is called the <strong>Python Complete Course For Beginners</strong>.</p><p>It covers the technical foundation you need to move from just &#8220;writing code&#8221; to building systems. It is usually a paid resource, but the link below should waive the fee for the time being.</p><p><strong><a href="https://10xdev.blog/why-your-dev-&amp;-data-job-is-at-high-risk-in-2025-(and-what-to-do-about-it-+-free-gift-course-inside)-v2/">View the course material here</a></strong></p><p>The code is just a tool. The value is you.</p><p>Best,</p><p><strong>Boucodes and Naima / 10xdev blog Team</strong></p>]]></content:encoded></item><item><title><![CDATA[16 API Concepts You Need to Master]]></title><description><![CDATA[The mechanics of how modern systems talk to each other.]]></description><link>https://programmerspace.substack.com/p/16-api-concepts-you-need-to-master</link><guid isPermaLink="false">https://programmerspace.substack.com/p/16-api-concepts-you-need-to-master</guid><dc:creator><![CDATA[Boucodes]]></dc:creator><pubDate>Mon, 08 Dec 2025 00:26:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!C1l2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3589b28-faf1-4249-a956-6c410326a9bb_2816x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey readers,<strong> </strong></p><p>I still remember my first &#8220;real&#8221; system design interview. I was ready to code algorithms, but then the interviewer asked me how I&#8217;d handle a payment retry without charging the customer twice. I froze. I knew <em>how</em> to write code, but I didn&#8217;t fully grasp the architectural glue that holds big systems together.</p><p>That glue is APIs.</p><p>APIs look messy when you stare at a massive distributed system diagram. But here&#8217;s the secret: the whole thing usually boils down to a handful of core ideas. Once you get these sixteen concepts down, you stop seeing &#8220;complexity&#8221; and start seeing patterns.</p><blockquote><p><em><strong>Naima: </strong>You can get our PDFs from the bottom of this post, that include detailed learning roadmaps for AI Agents, frontend and backend web development, complete with suggested study timelines and links to books, YouTube tutorials, and certificate courses.</em></p></blockquote><p></p><p>Whether you are preparing for a backend interview or trying to explain to a junior dev why we can&#8217;t just &#8220;return all the data at once,&#8221; this guide is for you.</p><p>This a breakdown of 16 essential API concepts every software engineer should understand, followed by clear explanations for each.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!C1l2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3589b28-faf1-4249-a956-6c410326a9bb_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!C1l2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3589b28-faf1-4249-a956-6c410326a9bb_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!C1l2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3589b28-faf1-4249-a956-6c410326a9bb_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!C1l2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3589b28-faf1-4249-a956-6c410326a9bb_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!C1l2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3589b28-faf1-4249-a956-6c410326a9bb_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!C1l2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3589b28-faf1-4249-a956-6c410326a9bb_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a3589b28-faf1-4249-a956-6c410326a9bb_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5518914,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/180497075?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3589b28-faf1-4249-a956-6c410326a9bb_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!C1l2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3589b28-faf1-4249-a956-6c410326a9bb_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!C1l2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3589b28-faf1-4249-a956-6c410326a9bb_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!C1l2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3589b28-faf1-4249-a956-6c410326a9bb_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!C1l2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3589b28-faf1-4249-a956-6c410326a9bb_2816x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Let&#8217;s get into the mechanics of how modern systems actually talk to each other.</p><div><hr></div><h2>The &#8220;Big Three&#8221; Communication Styles</h2><p>Before we worry about data formats or security, we have to decide how our servers are going to exchange information. </p><blockquote><p><em><strong>Naima: </strong></em>There isn&#8217;t a single &#8220;best&#8221; way, just the right tool for the job.</p></blockquote><h3>1. REST (The Reliable Standard)</h3><p>Think of REST (Representational State Transfer) as the plain English of the web. It&#8217;s what you&#8217;ll see 90% of the time. A REST API lets a client talk to a server using standard HTTP actions that actually mean what they say.</p><ul><li><p><strong>GET:</strong> &#8220;Give me this data.&#8221;</p></li><li><p><strong>POST:</strong> &#8220;Create this new thing.&#8221;</p></li><li><p><strong>PUT:</strong> &#8220;Update this existing thing.&#8221;</p></li><li><p><strong>DELETE:</strong> &#8220;Get rid of this.&#8221;</p></li></ul><blockquote><p><em><strong>Naima</strong></em>: Imagine an online bookstore. You hit <strong>GET /books</strong> to see the catalog. You hit <strong>POST /books</strong> to add a new title. It&#8217;s predictable. Each URL is a specific &#8220;resource&#8221; (like a user or a product), and the server usually hits you back with <strong>JSON</strong>. Because it works across browsers, mobile apps, and backends without fuss, it&#8217;s usually the default choice for public APIs.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_fo2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2995b997-1234-4960-9b6c-b843e7fd23af_1818x1917.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_fo2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2995b997-1234-4960-9b6c-b843e7fd23af_1818x1917.png 424w, https://substackcdn.com/image/fetch/$s_!_fo2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2995b997-1234-4960-9b6c-b843e7fd23af_1818x1917.png 848w, https://substackcdn.com/image/fetch/$s_!_fo2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2995b997-1234-4960-9b6c-b843e7fd23af_1818x1917.png 1272w, https://substackcdn.com/image/fetch/$s_!_fo2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2995b997-1234-4960-9b6c-b843e7fd23af_1818x1917.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_fo2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2995b997-1234-4960-9b6c-b843e7fd23af_1818x1917.png" width="1456" height="1535" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2995b997-1234-4960-9b6c-b843e7fd23af_1818x1917.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1535,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:208658,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/180497075?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2995b997-1234-4960-9b6c-b843e7fd23af_1818x1917.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_fo2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2995b997-1234-4960-9b6c-b843e7fd23af_1818x1917.png 424w, https://substackcdn.com/image/fetch/$s_!_fo2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2995b997-1234-4960-9b6c-b843e7fd23af_1818x1917.png 848w, https://substackcdn.com/image/fetch/$s_!_fo2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2995b997-1234-4960-9b6c-b843e7fd23af_1818x1917.png 1272w, https://substackcdn.com/image/fetch/$s_!_fo2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2995b997-1234-4960-9b6c-b843e7fd23af_1818x1917.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h3>2. GraphQL (The &#8220;Picky Eater&#8221;)</h3><p>REST is great, but it has a habit of over-sharing. You ask for a user&#8217;s profile, and it sends you their name, address, shoe size, and purchase history&#8212;even if you just wanted their name.</p><p>GraphQL changes that dynamic. It lets the client ask for <em>exactly</em> what it needs, and nothing else.</p><p><em><strong>Why it matters:</strong></em></p><p>Say you&#8217;re building a mobile app. Bandwidth is tight. Instead of making three different REST calls to get a user&#8217;s name, their last order, and their wishlist, you send one GraphQL query. You define the shape of the data, and the server fills it in. This cuts down on round trips and keeps your mobile app snappy.<br></p><h3>3. gRPC (The Speed Demon)</h3><p>If REST is a polite conversation and GraphQL is a specific order, gRPC is a high-speed binary stream. It&#8217;s rarely used in browsers but is a powerhouse for backend services talking to other backend services.</p><p>It uses <strong>Protobufs</strong> (Protocol Buffers) instead of text-based JSON. This binary data is tiny and incredibly fast to parse.</p><p><em><strong>When to use it:</strong></em></p><p>I worked on a system once where a recommendation engine had to talk to a ranking service thousands of times. JSON was too slow. We switched to gRPC, and the latency dropped like a rock. It supports streaming and strict type checks, making it safer and faster for internal microservices.</p><h2>The Gatekeepers: Control &amp; Security</h2><p>Once your API is live, you can&#8217;t just let anyone walk in and do whatever they want. You need bouncers.</p><h3>4. API Gateway</h3><p>In a microservices architecture, you might have fifty different services (Billing, Users, Inventory, Shipping). You definitely don&#8217;t want your mobile app trying to keep track of many addresses.</p><p>An API Gateway is the single entry point. It sits in front of everything.</p><ul><li><p><strong>Routing:</strong> It sends the request to the right service.</p></li><li><p><strong>Security:</strong> It handles the login check so the individual services don&#8217;t have to.</p></li><li><p><strong>Housekeeping:</strong> It handles rate limits and logging.</p></li></ul><p>It keeps your backend organized and your clients happy because they only need to know one URL.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_M0N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe4e483-1f9d-489d-823e-1951adf04713_1986x1137.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_M0N!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe4e483-1f9d-489d-823e-1951adf04713_1986x1137.png 424w, https://substackcdn.com/image/fetch/$s_!_M0N!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe4e483-1f9d-489d-823e-1951adf04713_1986x1137.png 848w, https://substackcdn.com/image/fetch/$s_!_M0N!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe4e483-1f9d-489d-823e-1951adf04713_1986x1137.png 1272w, https://substackcdn.com/image/fetch/$s_!_M0N!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe4e483-1f9d-489d-823e-1951adf04713_1986x1137.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_M0N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe4e483-1f9d-489d-823e-1951adf04713_1986x1137.png" width="1456" height="834" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bbe4e483-1f9d-489d-823e-1951adf04713_1986x1137.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:834,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:167353,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/180497075?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe4e483-1f9d-489d-823e-1951adf04713_1986x1137.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_M0N!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe4e483-1f9d-489d-823e-1951adf04713_1986x1137.png 424w, https://substackcdn.com/image/fetch/$s_!_M0N!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe4e483-1f9d-489d-823e-1951adf04713_1986x1137.png 848w, https://substackcdn.com/image/fetch/$s_!_M0N!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe4e483-1f9d-489d-823e-1951adf04713_1986x1137.png 1272w, https://substackcdn.com/image/fetch/$s_!_M0N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe4e483-1f9d-489d-823e-1951adf04713_1986x1137.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>5. Authentication (Who are you?)</h3><p>This is security step one. Authentication is simply the system asking, &#8220;ID, please.&#8221; We usually verify this using tokens (like JWTs), passwords, or API keys.</p><p>If you don&#8217;t have a valid token, you don&#8217;t get in. The request is rejected immediately (usually with a 401 status code) before it even touches any business logic.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!d-oD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36fc9584-8861-40a6-bee0-61c29ae3d352_2184x2193.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!d-oD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36fc9584-8861-40a6-bee0-61c29ae3d352_2184x2193.png 424w, https://substackcdn.com/image/fetch/$s_!d-oD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36fc9584-8861-40a6-bee0-61c29ae3d352_2184x2193.png 848w, https://substackcdn.com/image/fetch/$s_!d-oD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36fc9584-8861-40a6-bee0-61c29ae3d352_2184x2193.png 1272w, https://substackcdn.com/image/fetch/$s_!d-oD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36fc9584-8861-40a6-bee0-61c29ae3d352_2184x2193.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!d-oD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36fc9584-8861-40a6-bee0-61c29ae3d352_2184x2193.png" width="1456" height="1462" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/36fc9584-8861-40a6-bee0-61c29ae3d352_2184x2193.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1462,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:246527,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/180497075?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36fc9584-8861-40a6-bee0-61c29ae3d352_2184x2193.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!d-oD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36fc9584-8861-40a6-bee0-61c29ae3d352_2184x2193.png 424w, https://substackcdn.com/image/fetch/$s_!d-oD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36fc9584-8861-40a6-bee0-61c29ae3d352_2184x2193.png 848w, https://substackcdn.com/image/fetch/$s_!d-oD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36fc9584-8861-40a6-bee0-61c29ae3d352_2184x2193.png 1272w, https://substackcdn.com/image/fetch/$s_!d-oD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36fc9584-8861-40a6-bee0-61c29ae3d352_2184x2193.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>6. Authorization (What are you allowed to do?)</h3><p>Here is where people get mixed up. Authentication says you <em>are</em> John Doe. Authorization says what John Doe is <em>allowed</em> to touch.</p><p><em><strong>The difference:</strong></em></p><p>I might log in (Authentication successful), but if I try to delete the production database, the system stops me (Authorization failed).</p><ul><li><p><strong>Regular User:</strong> Can edit their own profile.</p></li><li><p><strong>Admin</strong>: Can edit any profile.</p><p>Both are authenticated, but their permissions differ.</p></li></ul><h3>7. Rate Limiting</h3><p>Imagine your service is a nightclub with a fire code capacity. Rate limiting restricts how many requests a user can send in a specific timeframe (e.g., 100 requests per minute).</p><p>If a user&#8212;or a bot&#8212;tries to hammer your API with 1,000 requests in a second, the rate limiter steps in and blocks the extras. </p><blockquote><p><em><strong>Naima: </strong></em>This is non-negotiable for public APIs to prevent abuse and keep costs in check.</p></blockquote><h3>8. Throttling</h3><p>Throttling is the polite cousin of rate limiting. Instead of slamming the door shut when a user sends too many requests, the server just slows them down.</p><p>The logic:</p><p>If a client is sending too much traffic, we might delay their response by a few hundred milliseconds. It tells the client, &#8220;Hey, back off a bit,&#8221; without completely breaking their functionality. It maintains fair usage across the system.<br></p><div><hr></div><h2>Performance &amp; Reliability (The &#8220;Safety Nets&#8221;)</h2><p>Things go wrong in distributed systems. Networks fail. Servers hang. Here is how we handle the chaos.</p><h3>9. Idempotency</h3><p>This is the concept I messed up in that interview. Idempotency guarantees that if you make the same request multiple times, the result is the same as if you made it once.</p><p><em><strong>Why it saves you:</strong></em></p><p>A user is on a shaky subway connection. They hit &#8220;Pay Now.&#8221; The request goes through, but the confirmation response gets lost. The user panics and hits &#8220;Pay Now&#8221; again.</p><ul><li><p><strong>Without Idempotency:</strong> You just charged them twice. Support ticket incoming.</p></li><li><p><strong>With Idempotency:</strong> The server sees the same &#8220;Idempotency Key&#8221; (a unique ID for that transaction), realizes it already processed this payment, and just returns the success message again without charging the card.</p></li></ul><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ubZe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febc0ad5f-6204-47d0-825c-0a5dec8a3645_3142x2103.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ubZe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febc0ad5f-6204-47d0-825c-0a5dec8a3645_3142x2103.png 424w, https://substackcdn.com/image/fetch/$s_!ubZe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febc0ad5f-6204-47d0-825c-0a5dec8a3645_3142x2103.png 848w, https://substackcdn.com/image/fetch/$s_!ubZe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febc0ad5f-6204-47d0-825c-0a5dec8a3645_3142x2103.png 1272w, https://substackcdn.com/image/fetch/$s_!ubZe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febc0ad5f-6204-47d0-825c-0a5dec8a3645_3142x2103.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ubZe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febc0ad5f-6204-47d0-825c-0a5dec8a3645_3142x2103.png" width="1456" height="975" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ebc0ad5f-6204-47d0-825c-0a5dec8a3645_3142x2103.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:975,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:306035,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/180497075?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febc0ad5f-6204-47d0-825c-0a5dec8a3645_3142x2103.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ubZe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febc0ad5f-6204-47d0-825c-0a5dec8a3645_3142x2103.png 424w, https://substackcdn.com/image/fetch/$s_!ubZe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febc0ad5f-6204-47d0-825c-0a5dec8a3645_3142x2103.png 848w, https://substackcdn.com/image/fetch/$s_!ubZe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febc0ad5f-6204-47d0-825c-0a5dec8a3645_3142x2103.png 1272w, https://substackcdn.com/image/fetch/$s_!ubZe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febc0ad5f-6204-47d0-825c-0a5dec8a3645_3142x2103.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>10. Timeouts</h3><p>Never let a request wait forever. A &#8220;timeout&#8221; is a rule that says, &#8220;If this database doesn&#8217;t answer in 2 seconds, give up.&#8221;</p><p>If you don&#8217;t have timeouts, a slow service can cause a pile-up. One stuck request becomes ten, then a thousand, and suddenly your whole system runs out of threads and crashes. Timeouts free up resources so the rest of the system stays alive.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UNf6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F770fd38c-5fe3-428d-86e5-652063407605_2202x1923.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UNf6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F770fd38c-5fe3-428d-86e5-652063407605_2202x1923.png 424w, https://substackcdn.com/image/fetch/$s_!UNf6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F770fd38c-5fe3-428d-86e5-652063407605_2202x1923.png 848w, https://substackcdn.com/image/fetch/$s_!UNf6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F770fd38c-5fe3-428d-86e5-652063407605_2202x1923.png 1272w, https://substackcdn.com/image/fetch/$s_!UNf6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F770fd38c-5fe3-428d-86e5-652063407605_2202x1923.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UNf6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F770fd38c-5fe3-428d-86e5-652063407605_2202x1923.png" width="1456" height="1272" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/770fd38c-5fe3-428d-86e5-652063407605_2202x1923.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1272,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:210924,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/180497075?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F770fd38c-5fe3-428d-86e5-652063407605_2202x1923.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UNf6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F770fd38c-5fe3-428d-86e5-652063407605_2202x1923.png 424w, https://substackcdn.com/image/fetch/$s_!UNf6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F770fd38c-5fe3-428d-86e5-652063407605_2202x1923.png 848w, https://substackcdn.com/image/fetch/$s_!UNf6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F770fd38c-5fe3-428d-86e5-652063407605_2202x1923.png 1272w, https://substackcdn.com/image/fetch/$s_!UNf6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F770fd38c-5fe3-428d-86e5-652063407605_2202x1923.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>11. Caching Headers</h3><p>The fastest request is the one you don&#8217;t have to make. Caching headers tell the client (or a proxy) how long they can keep a copy of the data.</p><p>If you send <code>Cache-Control: max-age=3600</code>, you are telling the browser, &#8220;This data is good for an hour. Don&#8217;t bother asking me for it again until then.&#8221; This drastically reduces the load on your servers and makes the app feel instant for the user.<br></p><h3>12. Pagination</h3><p>You have 50,000 products in your database. If someone hits <code>GET /products</code>, and you try to return all of them at once, your server will choke, and the user&#8217;s browser will crash trying to render it.</p><p>Pagination breaks that data into chunks (pages). You send the first 20 items. If they want more, they ask for page 2. It saves memory and bandwidth.</p><div><hr></div><h2>The Mechanics: Speaking the Language</h2><p>Finally, let&#8217;s look at the nuts and bolts of the data exchange.</p><h3>13. JSON (JavaScript Object Notation)</h3><p>XML used to be the king, but JSON took the throne because it is readable by humans. It stores data in key-value pairs: <code>{&#8221;id&#8221;: 1, &#8220;name&#8221;: &#8220;Alex&#8221;}</code>.</p><p>It is lightweight, parses easily in every major programming language, and is the default response format for almost every modern API.<br></p><h3>14. HTTP Status Codes</h3><p>These are the traffic lights of the web. They tell the client instantly what happened, so they don&#8217;t have to parse the body of the response to guess.</p><ul><li><p><strong>200s (Success):</strong> &#8220;We&#8217;re good.&#8221; (200 OK, 201 Created).</p></li><li><p><strong>400s (Client Error):</strong> &#8220;You messed up.&#8221; (400 Bad Request, 401 Unauthenticated, 404 Not Found).</p></li><li><p><strong>500s (Server Error):</strong> &#8220;I messed up.&#8221; (500 Internal Server Error).</p></li></ul><p></p><h3>15. Webhooks</h3><p>Most APIs are &#8220;poll&#8221; based&#8212;you keep asking, &#8220;Is there new data?&#8221;</p><p>Webhooks flip this. They are &#8220;push&#8221; based. You tell the server, &#8220;Here is my URL. Call me when something happens.&#8221;</p><p><em><strong>Example:</strong></em></p><p>Stripe (payments) uses this heavily. Instead of your server asking Stripe every second &#8220;Did the user pay yet?&#8221;, Stripe sends a message to your webhook URL the moment the payment succeeds. It makes systems real-time and event-driven.<br></p><h3>16. Versioning</h3><p>You built a great API. Now you need to change it. But if you change the data structure, you will break the mobile app that people haven&#8217;t updated yet.</p><p>Versioning solves this. you keep <code>v1</code> running for the old apps while you launch <code>v2</code> for the new ones.</p><ul><li><p><strong>v1:</strong> Returns just a name.</p></li><li><p>v2: Returns name, photo, and bio.</p><p>It allows you to improve your system without breaking the experience for legacy users.<code>
</code></p></li></ul><div><hr></div><h2>The Big Picture: How It All Connects</h2><p>Now that we have the pieces, here is what a modern system actually looks like when you put them together.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!G-5_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78796310-2271-4074-b09d-6ff3ff5f3837_2754x2227.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!G-5_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78796310-2271-4074-b09d-6ff3ff5f3837_2754x2227.png 424w, https://substackcdn.com/image/fetch/$s_!G-5_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78796310-2271-4074-b09d-6ff3ff5f3837_2754x2227.png 848w, https://substackcdn.com/image/fetch/$s_!G-5_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78796310-2271-4074-b09d-6ff3ff5f3837_2754x2227.png 1272w, https://substackcdn.com/image/fetch/$s_!G-5_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78796310-2271-4074-b09d-6ff3ff5f3837_2754x2227.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!G-5_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78796310-2271-4074-b09d-6ff3ff5f3837_2754x2227.png" width="1456" height="1177" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/78796310-2271-4074-b09d-6ff3ff5f3837_2754x2227.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1177,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:359162,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/180497075?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78796310-2271-4074-b09d-6ff3ff5f3837_2754x2227.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!G-5_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78796310-2271-4074-b09d-6ff3ff5f3837_2754x2227.png 424w, https://substackcdn.com/image/fetch/$s_!G-5_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78796310-2271-4074-b09d-6ff3ff5f3837_2754x2227.png 848w, https://substackcdn.com/image/fetch/$s_!G-5_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78796310-2271-4074-b09d-6ff3ff5f3837_2754x2227.png 1272w, https://substackcdn.com/image/fetch/$s_!G-5_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78796310-2271-4074-b09d-6ff3ff5f3837_2754x2227.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>So, what&#8217;s the next move?</h3><p>These concepts are the building blocks. You don&#8217;t need to implement all of them tomorrow, but you do need to spot them when you see them.</p><p><strong>Here is a challenge for you:</strong> Open up the &#8220;Network&#8221; tab in your browser right now (F12) and refresh this page. Look at the API calls. Can you spot the <strong>Status Codes</strong>? Do you see any <strong>Caching Headers</strong>? Are they using <strong>GraphQL</strong> or <strong>REST</strong>?</p><p>Once you start looking, you&#8217;ll see these patterns everywhere.</p><p>Thanks for reading!</p><p><em><strong>Bou~codes and Naima from 10xdev blog.</strong></em></p><p>This is a diagram to help you remember all those 16 concepts: </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JhKJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac696183-9b4d-493f-aaf8-b34105296ecb_1218x1958.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JhKJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac696183-9b4d-493f-aaf8-b34105296ecb_1218x1958.png 424w, https://substackcdn.com/image/fetch/$s_!JhKJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac696183-9b4d-493f-aaf8-b34105296ecb_1218x1958.png 848w, https://substackcdn.com/image/fetch/$s_!JhKJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac696183-9b4d-493f-aaf8-b34105296ecb_1218x1958.png 1272w, https://substackcdn.com/image/fetch/$s_!JhKJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac696183-9b4d-493f-aaf8-b34105296ecb_1218x1958.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JhKJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac696183-9b4d-493f-aaf8-b34105296ecb_1218x1958.png" width="1218" height="1958" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ac696183-9b4d-493f-aaf8-b34105296ecb_1218x1958.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1958,&quot;width&quot;:1218,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:276441,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/180497075?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac696183-9b4d-493f-aaf8-b34105296ecb_1218x1958.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JhKJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac696183-9b4d-493f-aaf8-b34105296ecb_1218x1958.png 424w, https://substackcdn.com/image/fetch/$s_!JhKJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac696183-9b4d-493f-aaf8-b34105296ecb_1218x1958.png 848w, https://substackcdn.com/image/fetch/$s_!JhKJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac696183-9b4d-493f-aaf8-b34105296ecb_1218x1958.png 1272w, https://substackcdn.com/image/fetch/$s_!JhKJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac696183-9b4d-493f-aaf8-b34105296ecb_1218x1958.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>PDF Roadmaps:</h2><ol><li><p><a href="https://10xdev.blog/Guide-AI-Agents.pdf">A PDF Guide for Learning AI Agents</a></p></li><li><p><a href="https://10xdev.blog/Guide-FrontEnd.pdf">A PDF Guide for Learning Frontend Development</a></p></li><li><p><a href="https://10xdev.blog/Guide-JavaScript.pdf">A PDF guide for becoming a JavaScript Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-Backend.pdf">A PDF guide for becoming a Backend Developer.</a></p></li></ol><p></p>]]></content:encoded></item><item><title><![CDATA[A Critical React Vulnerability You Can't Ignore]]></title><description><![CDATA[39% of the Cloud is Vulnerable to the New React Flaw: Hackers are at the Gates]]></description><link>https://programmerspace.substack.com/p/drop-everything-and-patch-react-now</link><guid isPermaLink="false">https://programmerspace.substack.com/p/drop-everything-and-patch-react-now</guid><dc:creator><![CDATA[Boucodes]]></dc:creator><pubDate>Fri, 05 Dec 2025 17:41:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!uzbo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9b8a00-0141-4e89-9c6c-9b38cb7a3281_1376x752.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><p>Hey readers;</p><p>I&#8217;m <em><strong>bou~codes</strong></em> from <em><strong>10xdev blog</strong></em>. </p><p>If you manage a web application in 2025, I need you to stop and pay attention. This is not an usual event, and it&#8217;s not your average &#8220;update your dependencies&#8221; Tuesday.</p><p><strong>If you are running specific versions of React or Next.js, unauthenticated attackers can execute arbitrary code on your server remotely.</strong> They don&#8217;t need a password. They don&#8217;t need a user account. They just need to send a request, and they own your instance.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uzbo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9b8a00-0141-4e89-9c6c-9b38cb7a3281_1376x752.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uzbo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9b8a00-0141-4e89-9c6c-9b38cb7a3281_1376x752.png 424w, https://substackcdn.com/image/fetch/$s_!uzbo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9b8a00-0141-4e89-9c6c-9b38cb7a3281_1376x752.png 848w, https://substackcdn.com/image/fetch/$s_!uzbo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9b8a00-0141-4e89-9c6c-9b38cb7a3281_1376x752.png 1272w, https://substackcdn.com/image/fetch/$s_!uzbo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9b8a00-0141-4e89-9c6c-9b38cb7a3281_1376x752.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uzbo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9b8a00-0141-4e89-9c6c-9b38cb7a3281_1376x752.png" width="1376" height="752" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bc9b8a00-0141-4e89-9c6c-9b38cb7a3281_1376x752.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:752,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1315105,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/180812584?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9b8a00-0141-4e89-9c6c-9b38cb7a3281_1376x752.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uzbo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9b8a00-0141-4e89-9c6c-9b38cb7a3281_1376x752.png 424w, https://substackcdn.com/image/fetch/$s_!uzbo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9b8a00-0141-4e89-9c6c-9b38cb7a3281_1376x752.png 848w, https://substackcdn.com/image/fetch/$s_!uzbo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9b8a00-0141-4e89-9c6c-9b38cb7a3281_1376x752.png 1272w, https://substackcdn.com/image/fetch/$s_!uzbo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9b8a00-0141-4e89-9c6c-9b38cb7a3281_1376x752.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>We are talking about a <strong>CVSS 10.0</strong> vulnerability. That is the maximum possible severity score a security flaw can get.</p><p>It affects <strong>React Server Components</strong> and, by extension, massive frameworks like <strong>Next.js.</strong> </p><p><strong>Security researchers</strong> are saying that mass exploitation is &#8220;<strong>imminent</strong>,&#8221; and because the patch is open source, attackers are likely already reverse-engineering it to build automated exploits.</p><p>Here is the details on <strong>CVE-2025-55182</strong> and exactly how to fix it.</p><p>When researchers say exploitation is &#8220;<strong>imminent</strong>,&#8221; they aren&#8217;t just using a scary word&#8212;they are describing a specific, dangerous phase in the vulnerability lifecycle.</p><p>Here is exactly what they mean in this context:</p><ul><li><p><strong>The Blueprint is Public:</strong> Because the patches are now open source, hackers can compare the &#8220;secure&#8221; code to the &#8220;vulnerable&#8221; code. This difference acts as a map, showing them exactly where the hole is and how to break in.</p></li><li><p><strong>It is Easy to Do:</strong> This isn&#8217;t a complex hack that requires stars to align. Experts state that exploitation requires <strong>&#8220;few prerequisites&#8221;</strong> and has a <strong>&#8220;near 100 percent success rate&#8221;</strong>.</p></li><li><p><strong>The Clock is Ticking:</strong> &#8220;Imminent&#8221; means that while widespread attacks might not have been confirmed <em>at the exact moment</em> the article was written, they are expected to begin as soon as attackers finish analyzing the patch. <strong>It is a race: you need to patch before they finish building their automated tools.</strong></p></li></ul><p></p><h2>The &#8220;Holy Grail&#8221; for Hackers</h2><p>Let&#8217;s be real: Most vulnerabilities are theoretical or hard to pull off. This one is terrifyingly simple.</p><p>The flaw lies in how React decodes payloads sent to React Server Function endpoints. It&#8217;s a classic <strong>Remote Code Execution (RCE)</strong> bug. An attacker sends a malicious HTTP request, your server tries to make sense of it (deserializes it), and unknowingly executes the hacker&#8217;s code.</p><p>Experts from watchTowr warn that exploitation requires &#8220;few prerequisites&#8221; and that we will see attacks in the wild the moment bad actors finish analyzing the public patches.</p><h3>Are You Part of the 39%?</h3><p>This isn&#8217;t a niche problem. Cloud security data suggests that a staggering <strong>39 percent of cloud environments</strong> are currently vulnerable to this specific flaw. Whether you are a solo dev or part of a Fortune 500 team, the odds are high that this impacts you.</p><p>In short, the number is 39% because <strong>Next.js and React Server Components have become the default infrastructure</strong> for modern cloud applications. The &#8220;pipes&#8221; of the modern web are what is broken.</p><h2>What is Vulnerable?</h2><p>You are in the danger zone if you are using:</p><ul><li><p><strong>React Versions:</strong> 19.0, 19.1.0, 19.1.1, and 19.2.0.</p></li><li><p><strong>Vulnerable Packages:</strong> <code>react-server-dom-webpack</code>, <code>react-server-dom-parcel</code>, and <code>react-server-dom-turbopack</code>.</p></li><li><p><strong>Frameworks:</strong> Default configurations of <strong>Next.js</strong>, <strong>React Router</strong>, <strong>Waku</strong>, <code>@parcel/rsc</code>, <code>@vitejs/plugin-rsc</code>, and <code>rwsdk</code>.</p></li></ul><p>Vercel has assigned a separate tracker, <strong>CVE-2025-66478</strong>, for the Next.js side of this, but the root cause is the same.</p><h2>Your Action Plan</h2><p>Time is your enemy here. Every minute your server runs unpatched is a minute you are gambling with your system.</p><h3>1. Upgrade Immediately</h3><p>The React team and Vercel moved fast&#8212;incredibly fast. Within four days of the report, they had a fix. You need to move just as fast.</p><p>Update to these safe versions immediately:</p><ul><li><p><strong>19.0.1</strong></p></li><li><p><strong>19.1.2</strong></p></li><li><p><strong>19.2.1</strong></p></li></ul><h3>2. The Command Line Fix</h3><p>Don&#8217;t overthink it. Go to your terminal:</p><ul><li><p><strong>npm:</strong> <code>npm update react react-dom next</code></p></li><li><p><strong>yarn:</strong> <code>yarn upgrade react react-dom next</code></p></li></ul><p><strong>Critical Step:</strong> After updating, check your lockfile (<code>package-lock.json</code> or <code>yarn.lock</code>). Ensure that nested dependencies for <code>react-server-dom-*</code> have actually bumped to the safe versions. Then, <strong>redeploy your application</strong>. An update on your local machine does nothing to protect your live server.</p><h3>3. A Note on WAFs</h3><p>If you are behind Cloudflare, there is a glimmer of hope. Cloudflare claims their Web Application Firewall (WAF) may protect against this flaw if your traffic is proxied through them. </p><p><strong>Do not rely on this.</strong> A WAF is a seatbelt; patching the code is fixing the brakes. Do both.</p><h2>The Reality Check</h2><p>We haven&#8217;t seen confirmed in-the-wild attacks <em>yet</em>, but Stephen Fewer from Rapid7 warns that because technical details are surfacing, &#8220;exploitation is likely to occur soon&#8221;.</p><p>This is the kind of vulnerability that wakes CISOs up in a cold sweat. It grants full control with zero authentication.</p><p><strong>Your Next Step:</strong> Close this tab. Open your project. Run your updates. Do it now, before the automated scanners find you first.</p>]]></content:encoded></item><item><title><![CDATA[Why You’re Not Becoming a Better Programmer (And How to Fix It)]]></title><description><![CDATA[If you feel stuck with tutorials without growth, this guide will show you how to learn to code with confidence using a 5-Step Method.]]></description><link>https://programmerspace.substack.com/p/why-youre-not-becoming-a-better-programmer</link><guid isPermaLink="false">https://programmerspace.substack.com/p/why-youre-not-becoming-a-better-programmer</guid><dc:creator><![CDATA[Boucodes]]></dc:creator><pubDate>Tue, 04 Nov 2025 20:59:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!JZKR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce5ad4ea-47c6-4737-93f4-a5d5e3d919b2_1024x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em><strong>Hello readers; </strong></em></p><p>You watch development and programming tutorials day and night, follow all the programming channels, and you have created a to-do list app and five other similar apps.</p><p><em><strong>However, you still feel like you&#8217;re not advancing.</strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JZKR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce5ad4ea-47c6-4737-93f4-a5d5e3d919b2_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JZKR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce5ad4ea-47c6-4737-93f4-a5d5e3d919b2_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!JZKR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce5ad4ea-47c6-4737-93f4-a5d5e3d919b2_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!JZKR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce5ad4ea-47c6-4737-93f4-a5d5e3d919b2_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!JZKR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce5ad4ea-47c6-4737-93f4-a5d5e3d919b2_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JZKR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce5ad4ea-47c6-4737-93f4-a5d5e3d919b2_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ce5ad4ea-47c6-4737-93f4-a5d5e3d919b2_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JZKR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce5ad4ea-47c6-4737-93f4-a5d5e3d919b2_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!JZKR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce5ad4ea-47c6-4737-93f4-a5d5e3d919b2_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!JZKR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce5ad4ea-47c6-4737-93f4-a5d5e3d919b2_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!JZKR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce5ad4ea-47c6-4737-93f4-a5d5e3d919b2_1024x608.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><p>When you sit down and decide you want to write actual code, you don't know where to start. </p><p>And when you encounter a bug or error, you feel lost, and without understanding the root of the problem, you throw it at ChatGPT or Stack Overflow.</p><p><em><strong>You believe you're learning, but actually you're not making progress.</strong></em></p><p>If you feel this applies to you and want to find a solution to this problem, that's what we'll explore in this article. </p><p><em><strong>Don't worry, you're not alone. After you finish reading this article, you'll have the solution and practical steps you can implement starting today.</strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GmIq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa82b58-5198-42cc-93f1-49737d9f9dbd_499x341.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GmIq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa82b58-5198-42cc-93f1-49737d9f9dbd_499x341.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GmIq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa82b58-5198-42cc-93f1-49737d9f9dbd_499x341.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GmIq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa82b58-5198-42cc-93f1-49737d9f9dbd_499x341.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GmIq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa82b58-5198-42cc-93f1-49737d9f9dbd_499x341.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GmIq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa82b58-5198-42cc-93f1-49737d9f9dbd_499x341.jpeg" width="499" height="341" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0fa82b58-5198-42cc-93f1-49737d9f9dbd_499x341.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:341,&quot;width&quot;:499,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:27646,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/174151627?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa82b58-5198-42cc-93f1-49737d9f9dbd_499x341.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GmIq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa82b58-5198-42cc-93f1-49737d9f9dbd_499x341.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GmIq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa82b58-5198-42cc-93f1-49737d9f9dbd_499x341.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GmIq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa82b58-5198-42cc-93f1-49737d9f9dbd_499x341.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GmIq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa82b58-5198-42cc-93f1-49737d9f9dbd_499x341.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Let's see together what the root of the problem is.</p><h2>Learning does not always mean real progress.</h2><p>Many people believe that simply watching something means you've learned it.</p><p>Watching Python tutorials doesn't mean you've learned Python. Just because you took code from GitHub and put it into your project doesn't mean you understand what it does and what's going on behind it.</p><p>Just because you completed a 100-day coding challenge doesn't mean you've become a developer.</p><p>Just like watching a football game every day, that doesn't mean you'll know how to play the ball when you step onto the field. The same idea here: watching code isn't the same as writing it by hand.</p><h2>A Story of Two Learners</h2><p></p><p><em><strong>Now let's take a look at John and Michael's six-month journey of learning programming, and see where each of them got to.</strong></em></p><h3>John's Journey</h3><p></p><p>John consistently watched programming tutorials and occasionally solved problems. </p><p>Interestingly, he exhibited a pattern of starting but not completing various programming languages; he would begin JavaScript, then move to C++, and subsequently to Python, without mastering any of them.</p><p>He would begin by acquiring fundamental knowledge of various languages. However, he would soon be swayed by the popularity of artificial intelligence, deciding to pursue it. </p><p>At other times, his focus would shift to cyber-security, or perhaps web development. </p><p>Ultimately, when he committed to building a project based on his acquired knowledge, he would find himself embarking on the very same projects he had previously started.</p><p>John dreads errors and bugs. When he encounters a bug in his code, he immediately sends it to ChatGPT, eyes closed. He then blindly pastes the solution into his code and hits run. If it works, great; otherwise, he repeats the cycle.</p><blockquote><p><em><strong>After six months, John's programming skills have stagnated. He admits to forgetting the fundamentals, struggling to identify any tangible learning, and being unable to initiate or complete anything beyond basic, inconsequential projects.</strong></em></p></blockquote><p></p><h3>Michael's Journey</h3><p></p><p>Michael followed a different approach. </p><p>He picked a programming language and committed to mastering it. </p><p>Once he had a basic understanding, he thought, "<strong>What tool could help me now? I want to track my daily spending</strong>." </p><p>This led him to decide to build an app that would show his weekly, bi-weekly, and monthly expense statistics.</p><p>But instead of downloading a ready-made app or using an app someone else had created, he said:</p><blockquote><p><strong>"No, I'm going to make this app."</strong> </p></blockquote><p>He actually started working on the app. There were so many bugs and errors, he literally didn't know where to start. </p><p><em><strong>But he had an idea, a desire to create something for himself that would help him.</strong></em></p><p>Instead of simply downloading or using an existing app, he decided to build his own. </p><p>Despite facing many bugs and errors, he persevered, driven by the clear vision and desire to create something helpful for himself.</p><p>Despite the subject's difficulty, Michael gained a great deal from the experience and developed a sense of self-worth. </p><p>He could now hold something tangible and declare, <strong>"I created this."</strong> Instead of telling a friend, <strong>"I learned C++ or Python,"</strong> he would say, <strong>"I created this app."</strong></p><p>Michael's also started adding comments to his code, which helps him remember things and explain stuff to himself. </p><p>When he hits a snag, he tries to figure it out on his own before hitting up Google or ChatGPT. </p><p>He only goes searching if he really can't crack the problem himself.</p><blockquote><p><strong>Michael's got a great habit:</strong> he takes time each week to reflect. It's tough at first, but it gets easier. He writes down what he learned, what went wrong, and how he can do better next time.</p></blockquote><p></p><p><strong>After six months</strong>, Michael had built up some serious <strong>programming immunity</strong> &#8211; errors didn't scare him anymore! </p><p>This new <strong>confidence</strong> really let him go after bigger, more complex projects. </p><p>He's got a key piece of advice: </p><blockquote><p>"Pick a project that really pushes you and just jump in. Don't just copy what tutorials tell you to do."</p></blockquote><p></p><p><em><strong>They both spent the same amount of time learning. Michael gained confidence in programming and actually started creating real projects, while John was still wondering: Is C++ better or Python?</strong></em></p><h2>Summarizing problems and practical solutions</h2><p>Let's summarize these problems and offer practical steps we can start taking today. </p><p>Don't worry, it's really simple, and if you start today, it will make a huge difference for you.</p><h3>1. Passive viewing vs. active application</h3><p>Many people watch tutorials as if they were watching a movie. </p><p>They follow step by step, but without asking themselves,<strong> </strong></p><blockquote><p><strong>"Why? What would happen here if I changed this symbol? Why is this part written like this?"</strong> </p></blockquote><p>They don't apply it with their own hands.</p><p><strong>Solution:</strong> Turn any tutorial you watch into a challenge. </p><p><strong>How?</strong> If you've progressed well in the course you're following and are moving on to the next section, try not to watch the entirety. </p><p>Watch only the first two minutes to understand what the lecturer is explaining, then pause the lecture and try to implement the idea yourself. </p><p>Do what they want you to do, but do it on your own without watching the lecture. You may not succeed, but at least you've tried. </p><p>And when you come back to watch the lecture, you'll already be focused on <strong>"Where did I go wrong?"</strong> and <strong>"I want to understand how this part was implemented."</strong></p><p>If this technique doesn't work for you and the explanation is long, say 20 minutes, it will be difficult for your brain to apply the entire 20 minutes. </p><p>Try pausing the explanation every five minutes and applying what you've just watched. </p><p><em><strong>Here, you're literally tricking your brain; instead of applying it for 20 minutes (which is a long time), by the time you reach the 20th minute, you'll have forgotten what was said in the third or fifth minute and will have to rewatch the explanation from the beginning.</strong></em></p><p>Try breaking the explanation down into smaller chunks and applying them. </p><p>This is very important and will make a huge difference, giving you a sense of accomplishment and satisfaction with the time you spent applying it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qifk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F647ed666-ae15-41da-b044-dca8263925db_410x622.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qifk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F647ed666-ae15-41da-b044-dca8263925db_410x622.png 424w, https://substackcdn.com/image/fetch/$s_!qifk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F647ed666-ae15-41da-b044-dca8263925db_410x622.png 848w, https://substackcdn.com/image/fetch/$s_!qifk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F647ed666-ae15-41da-b044-dca8263925db_410x622.png 1272w, https://substackcdn.com/image/fetch/$s_!qifk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F647ed666-ae15-41da-b044-dca8263925db_410x622.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qifk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F647ed666-ae15-41da-b044-dca8263925db_410x622.png" width="410" height="622" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/647ed666-ae15-41da-b044-dca8263925db_410x622.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:622,&quot;width&quot;:410,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:231798,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/174151627?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F647ed666-ae15-41da-b044-dca8263925db_410x622.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qifk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F647ed666-ae15-41da-b044-dca8263925db_410x622.png 424w, https://substackcdn.com/image/fetch/$s_!qifk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F647ed666-ae15-41da-b044-dca8263925db_410x622.png 848w, https://substackcdn.com/image/fetch/$s_!qifk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F647ed666-ae15-41da-b044-dca8263925db_410x622.png 1272w, https://substackcdn.com/image/fetch/$s_!qifk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F647ed666-ae15-41da-b044-dca8263925db_410x622.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>2. Fear of mistakes</h2><p>You're not afraid of mistakes because they're red. </p><p>You're afraid of them because you see your true self, as negative thoughts lead you to believe. </p><p>They tell you, <strong>"Look, you're not good enough. You're full of mistakes, and all your code is wrong. So, quit programming."</strong></p><p><em><strong>What you should know about programming is that it's a world of mistakes!</strong></em></p><p>There's no one in programming who doesn't make mistakes. </p><p><em><strong>You spend most of your time solving problems, and programming itself is defined as solving problems.</strong></em></p><p>Just try as much as possible to think about or read the error before submitting it to an AI assistant, because this error may start appearing repeatedly, and each time it will feel like you're seeing it for the first time, because you're not actually reading it. You tell the AI to fix it, and insert the solution into your project.</p><p><strong>Embrace errors; </strong>each mistake encountered in your journey is a <strong>genuine learning opportunity</strong>.</p><h2>3. Shiny Object Syndrome</h2><p>You spend a week learning HTML, then a week learning Python, then a week learning C++, and you keep switching between each track. </p><p><strong>This is, of course, a very wrong approach.</strong></p><p>It's called <strong>"shiny object syndrome," </strong>where you start to learn whatever glitters in your eyes.</p><p><strong>Solution:</strong> Focus on just one technical stack or field. </p><p>Start learning it and create one, two, or three projects based on it. </p><p>If you later want to switch to another field you want to learn, it's possible. But every time you start something new, you reset and start from scratch.</p><p>To maximize your learning, concentrate on a single technical stack or area. </p><p>Begin by mastering it and completing a few related projects.</p><h2>4. Explanations vs. Real Projects</h2><p>Tutorials give you organized, structured steps, which is great. </p><p><strong>But</strong> a real project presents you with <strong>real-life problems</strong>, and you're supposed to take them all and start working on them. </p><p>That's what will really teach you!</p><blockquote><p><em><strong>If you want to get excited about projects, look at what you need in your life and start building it.</strong></em></p></blockquote><p>Avoid saying, <strong>"I need to develop a particular game and release it on the App Store for global success."</strong> </p><p>Instead, start with the simplest possible projects, focusing on what you need in your <strong>personal or social life.</strong></p><p><strong>Real-World Project Ideas for Learning Programming:</strong></p><ul><li><p><strong>Daily Vitamin Scheduler:</strong> Develop an application that allows you to schedule your daily vitamin intake, set specific days and times, and generate timely notifications.</p></li><li><p><strong>Expense Tracker:</strong> Build an app to  track your personal expenses.</p></li></ul><p><em><strong>The more these projects align with your personal needs and desires, the greater your motivation will be to see them through to completion.</strong></em></p><h2>Summary: A 5-Step Method</h2><p>Now, here's a powerful 5-step method to deepen your understanding and accelerate your programming skills:</p><p><strong>1. Learn:</strong> Begin by exploring the new concept. Watch a tutorial or read articles to grasp the fundamentals of the subject.</p><p><strong>2. Try:</strong> Don't just consume information. Write your own examples from scratch to actively apply what you've learned.</p><p><strong>3. Corrupt:</strong> Intentionally introduce errors into the code you've written. This step forces you to confront and understand common pitfalls.</p><p><strong>4. Fix:</strong> Now, take on the challenge of debugging. Systematically identify and resolve the issues you created in the previous step.</p><p><strong>5. Explain:</strong> This is the most crucial step for solidifying your knowledge. Explain the concept and your code, <strong>either to yourself or, ideally, to someone else. </strong></p><p><em><strong>The act of teaching will reveal any gaps in your understanding and truly deepen your grasp of the material.</strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!k4cv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d9a20be-7f88-416e-82f9-b75607b8a8cb_1000x563.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!k4cv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d9a20be-7f88-416e-82f9-b75607b8a8cb_1000x563.jpeg 424w, https://substackcdn.com/image/fetch/$s_!k4cv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d9a20be-7f88-416e-82f9-b75607b8a8cb_1000x563.jpeg 848w, https://substackcdn.com/image/fetch/$s_!k4cv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d9a20be-7f88-416e-82f9-b75607b8a8cb_1000x563.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!k4cv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d9a20be-7f88-416e-82f9-b75607b8a8cb_1000x563.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!k4cv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d9a20be-7f88-416e-82f9-b75607b8a8cb_1000x563.jpeg" width="1000" height="563" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d9a20be-7f88-416e-82f9-b75607b8a8cb_1000x563.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:563,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:289080,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/174151627?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d9a20be-7f88-416e-82f9-b75607b8a8cb_1000x563.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!k4cv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d9a20be-7f88-416e-82f9-b75607b8a8cb_1000x563.jpeg 424w, https://substackcdn.com/image/fetch/$s_!k4cv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d9a20be-7f88-416e-82f9-b75607b8a8cb_1000x563.jpeg 848w, https://substackcdn.com/image/fetch/$s_!k4cv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d9a20be-7f88-416e-82f9-b75607b8a8cb_1000x563.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!k4cv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d9a20be-7f88-416e-82f9-b75607b8a8cb_1000x563.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><em><strong>If you actually implement, will make a huge difference to you! Good luck!</strong></em></p><p><em><strong>By bou~codes and Naima.</strong></em></p><h2>Free PDF Roadmaps:</h2><p><em>You can get these free PDFs that contain detailed roadmaps with recommended learning periods for each language or field, along with links to free resources such as books, YouTube tutorials, and courses with certificates:</em></p><ol><li><p><a href="https://10xdev.blog/Guide-AI-Agents.pdf">A PDF Guide for Learning AI Agents</a></p></li><li><p><a href="https://10xdev.blog/Guide-AI-Engineer.pdf">A PDF Guide for Becoming an AI Engineer</a></p></li><li><p><a href="https://10xdev.blog/Guide-Backend.pdf">A PDF Guide for Becoming a Backend Developer</a></p></li><li><p><a href="https://10xdev.blog/Guide-Cyber-Security.pdf">A PDF Guide for Learning Cyber Security</a></p></li><li><p><a href="https://10xdev.blog/Guide-Data-Analyst.pdf">A PDF Guide for Learning Data Analysis</a></p></li><li><p><a href="https://10xdev.blog/Guide-FrontEnd.pdf">A PDF Guide for Learning Frontend Development</a></p></li><li><p><a href="https://10xdev.blog/Guide-Java.pdf">A PDF guide for becoming a Java Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-C++.pdf">A PDF guide for becoming a C++ Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-Python.pdf">A PDF guide for becoming a Python Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-JavaScript.pdf">A PDF guide for becoming a JavaScript Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-Rust.pdf">A PDF guide for becoming a Rust Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-Go.pdf">A PDF guide for becoming a Go Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-FrontEnd.pdf">A PDF guide for becoming a Frontend Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-Backend.pdf">A PDF guide for becoming a Backend Developer.</a></p></li></ol>]]></content:encoded></item><item><title><![CDATA[Angular CLI's new MCP: AI just got way better at Angular]]></title><description><![CDATA[What if your AI assistant can actually understand your Angular app? I'm talking about its structure, style rules, and even its documentation, all to help you code faster.]]></description><link>https://programmerspace.substack.com/p/angular-clis-new-mcp-ai-just-got</link><guid isPermaLink="false">https://programmerspace.substack.com/p/angular-clis-new-mcp-ai-just-got</guid><dc:creator><![CDATA[Boucodes]]></dc:creator><pubDate>Tue, 02 Sep 2025 20:02:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KIZ8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb71a6c-dd17-4db1-ac28-caa8ea428898_1024x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em><strong>Hello readers!</strong></em></p><p><em>What if your AI assistant can actually understand your Angular project? I'm talking about its structure, style rules, and even its documentation. </em></p><p><em>All to help you code faster!</em></p><p><em>That&#8217;s exactly what Angular CLI's new MCP (Model Context Protocol) server does, and it&#8217;s available right now in <strong>Angular 20.1.</strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KIZ8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb71a6c-dd17-4db1-ac28-caa8ea428898_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KIZ8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb71a6c-dd17-4db1-ac28-caa8ea428898_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!KIZ8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb71a6c-dd17-4db1-ac28-caa8ea428898_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!KIZ8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb71a6c-dd17-4db1-ac28-caa8ea428898_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!KIZ8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb71a6c-dd17-4db1-ac28-caa8ea428898_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KIZ8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb71a6c-dd17-4db1-ac28-caa8ea428898_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ebb71a6c-dd17-4db1-ac28-caa8ea428898_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KIZ8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb71a6c-dd17-4db1-ac28-caa8ea428898_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!KIZ8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb71a6c-dd17-4db1-ac28-caa8ea428898_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!KIZ8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb71a6c-dd17-4db1-ac28-caa8ea428898_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!KIZ8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb71a6c-dd17-4db1-ac28-caa8ea428898_1024x608.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><p></p><p><em><strong>The release of Angular 20.1 introduces the Angular CLI Model Context Protocol (MCP) server, a significant feature designed to create a deeply integrated and context-aware development experience between AI assistants and Angular workspaces. </strong></em></p><p><em>This protocol allows AI tools to securely interact with an Angular project&#8217;s structure, standards, and documentation, moving beyond simple code suggestion to become active participant in the development workflow.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IK6f!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74aa353e-d49c-400e-b420-e2ed883a9be2_499x341.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IK6f!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74aa353e-d49c-400e-b420-e2ed883a9be2_499x341.png 424w, https://substackcdn.com/image/fetch/$s_!IK6f!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74aa353e-d49c-400e-b420-e2ed883a9be2_499x341.png 848w, https://substackcdn.com/image/fetch/$s_!IK6f!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74aa353e-d49c-400e-b420-e2ed883a9be2_499x341.png 1272w, https://substackcdn.com/image/fetch/$s_!IK6f!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74aa353e-d49c-400e-b420-e2ed883a9be2_499x341.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IK6f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74aa353e-d49c-400e-b420-e2ed883a9be2_499x341.png" width="499" height="341" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/74aa353e-d49c-400e-b420-e2ed883a9be2_499x341.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:341,&quot;width&quot;:499,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:54873,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/172563747?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74aa353e-d49c-400e-b420-e2ed883a9be2_499x341.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IK6f!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74aa353e-d49c-400e-b420-e2ed883a9be2_499x341.png 424w, https://substackcdn.com/image/fetch/$s_!IK6f!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74aa353e-d49c-400e-b420-e2ed883a9be2_499x341.png 848w, https://substackcdn.com/image/fetch/$s_!IK6f!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74aa353e-d49c-400e-b420-e2ed883a9be2_499x341.png 1272w, https://substackcdn.com/image/fetch/$s_!IK6f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74aa353e-d49c-400e-b420-e2ed883a9be2_499x341.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3>What is MCP?</h3><p></p><p><em>But first, what&#8217;s MCP?</em></p><p><em><strong>The Model Context Protocol (MCP)</strong> is an open standard that establishes a universal communication layer for AI assistants to interface with development tools. </em></p><blockquote><p><em><strong>It can be compared to the standardization that USB-C brought to hardware connectivity. </strong></em></p></blockquote><p><strong>Before MCP,</strong> connecting AI to development environments required custom, tool-specific integrations. </p><p><strong>Now, MCP provides</strong> a standard interface using <strong>JSON-RPC</strong>, which enables any compliant AI assistant to communicate effectively with tools like the Angular CLI.</p><p>Beginning with version <strong>20.1,</strong> the Angular CLI can function as an MCP server, facilitating a new level of advanced, AI-assisted development.</p><div><hr></div><h3>Key Advantages of MCP Integration</h3><p></p><p><em>Integrating MCP into your Angular workflow provides several distinct benefits:</em></p><p></p><ul><li><p><em><strong>Increased Development Speed:</strong></em> <em>AI assistants with full project context can accurately scaffold new features, perform complex code refactoring, and generate components that align with the existing application architecture.</em></p></li><li><p><em><strong>Adherence to Best Practices:</strong></em> <em>The protocol is designed to use Angular&#8217;s established best practices by default. This ensures that AI-generated code maintains high quality and consistency with project standards.</em></p></li><li><p><em><strong>Extensible and Future-Proof:</strong> MCP is an evolving standard. Future releases are expected to add support for more tools and endpoints, further expanding its capabilities.</em></p></li></ul><div><hr></div><h3>Implementation Guide: How to Enable the MCP Server</h3><p></p><p><em>The configuration process is straightforward and involves a few simple steps:</em></p><ol><li><p><em><strong>Update Angular CLI</strong></em><strong>:</strong> Ensure your project is using Angular CLI version 20.1 or later.</p></li><li><p><em><strong>Run the MCP Command</strong></em><strong>:</strong> In your project&#8217;s root directory, open the terminal and run the following command to start the server:</p></li></ol><pre><code><code>$ ng mcp</code></code></pre><p><strong>Finally, you need to configure Your IDE:</strong> </p><p>Follow the instructions depending on your IDE.</p><p><strong>VS Code:</strong></p><p>In your project's root, create a file named <code>.vscode/mcp.json</code> and add the following configuration. Make sure to use of the <code>servers</code> property.</p><pre><code><code>{
  "servers": {
    "angular-cli": {
      "command": "npx",
      "args": ["-y", "@angular/cli", "mcp"]
    }
  }
}</code></code></pre><p><strong>Cursor:</strong></p><p>Create a file named <code>.cursor/mcp.json</code> in your project's root and add the following configuration. You can also configure it globally in <code>~/.cursor/mcp.json</code>.</p><pre><code><code>{
  "mcpServers": {
    "angular-cli": {
      "command": "npx",
      "args": ["-y", "@angular/cli", "mcp"]
    }
  }
}</code></code></pre><p><strong>Firebase Studio:</strong></p><p>Create a file named <code>.idx/mcp.json</code> in your project's root and add the following configuration:</p><pre><code><code>{
  "mcpServers": {
    "angular-cli": {
      "command": "npx",
      "args": ["-y", "@angular/cli", "mcp"]
    }
  }
}</code></code></pre><p><strong>Gemini CLI:</strong></p><p>Create a file named <code>.gemini/settings.json</code> in your project's root and add the following configuration:</p><pre><code><code>{
  "mcpServers": {
    "angular-cli": {
      "command": "npx",
      "args": ["-y", "@angular/cli", "mcp"]
    }
  }
}</code></code></pre><p></p><p><strong>Other IDEs:</strong></p><p>For other IDEs, consult your IDE's documentation for the location of the MCP configuration file (usually named <code>mcp.json</code>) and add:</p><pre><code><code>{
  "mcpServers": {
    "angular-cli": {
      "command": "npx",
      "args": ["-y", "@angular/cli", "mcp"]
    }
  }
}</code></code></pre><p></p><p><em><strong>After configuration, your IDE should indicate a successful connection, often with a status indicator.</strong></em></p><div><hr></div><h3>Core Functionality and Use Cases</h3><p></p><p><em>The current implementation of the MCP server exposes several key endpoints:</em></p><ul><li><p><code>get_best_practices</code>: Retrieves the defined coding standards for both Angular and the specific team.</p></li><li><p><code>list_projects</code>: Provides the AI with a complete overview of the workspace structure, including applications, libraries, and build targets.</p></li><li><p><code>search_documentation</code>: Allows the AI to perform direct queries against Angular&#8217;s official documentation.</p></li></ul><p><strong>Example Usage:</strong></p><p>A developer can leverage these capabilities with a natural language prompt. For instance, you can instruct your assistant as follows:</p><blockquote><p>Using the Angular CLI MCP, add a new <code>Auth</code> service inside the <code>@users</code> directory</p></blockquote><p></p><p><em><strong>In response,</strong></em> your coding assistant will first analyze the project structure and consult best practices, then execute the correct <code>ng generate</code> command automatically.</p><div><hr></div><h3>Best Practices and Important Considerations</h3><p></p><p><em>To maximize the effectiveness of the MCP server, consider the following recommendations:</em></p><ul><li><p><strong>Provide Precise Context:</strong> Use the <code>@</code> symbol to tag specific files or folders (e.g., <code>@users</code>) in your prompts. This helps the AI assistant pinpoint the exact context for its task.</p></li><li><p><strong>Automate with IDE Rules:</strong> For a more seamless workflow, configure your IDE to always use the Angular CLI MCP for Angular-related tasks, eliminating the need to specify it in every prompt.</p></li><li><p><strong>Avoid Rule Conflicts:</strong> Be aware that custom instruction rules in your IDE may conflict with the best practices enforced by the MCP server. It is generally recommended to allow MCP to manage code generation and styling by default, using custom overrides only when necessary.</p></li></ul><h1><strong>Conclusion</strong></h1><p>The MCP server in Angular CLI marks a pivotal evolution in AI-assisted development. It transforms AI from a <s>passive code-completion tool</s> into an <strong>intelligent partner</strong> capable of understanding and contributing to complex software projects.</p><h2>Free PDF Roadmaps:</h2><p><em>You can get these free PDFs that contain detailed roadmaps with recommended learning periods for each language or field, along with links to free resources such as books, YouTube tutorials, and courses with certificates:</em></p><ol><li><p><a href="https://10xdev.blog/Guide-AI-Agents.pdf">A PDF Guide for Learning AI Agents</a></p></li><li><p><a href="https://10xdev.blog/Guide-AI-Engineer.pdf">A PDF Guide for Becoming an AI Engineer</a></p></li><li><p><a href="https://10xdev.blog/Guide-Backend.pdf">A PDF Guide for Becoming a Backend Developer</a></p></li><li><p><a href="https://10xdev.blog/Guide-Cyber-Security.pdf">A PDF Guide for Learning Cyber Security</a></p></li><li><p><a href="https://10xdev.blog/Guide-Data-Analyst.pdf">A PDF Guide for Learning Data Analysis</a></p></li><li><p><a href="https://10xdev.blog/Guide-FrontEnd.pdf">A PDF Guide for Learning Frontend Development</a></p></li><li><p><a href="https://10xdev.blog/Guide-Java.pdf">A PDF guide for becoming a Java Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-C++.pdf">A PDF guide for becoming a C++ Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-Python.pdf">A PDF guide for becoming a Python Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-JavaScript.pdf">A PDF guide for becoming a JavaScript Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-Rust.pdf">A PDF guide for becoming a Rust Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-Go.pdf">A PDF guide for becoming a Go Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-FrontEnd.pdf">A PDF guide for becoming a Frontend Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-Backend.pdf">A PDF guide for becoming a Backend Developer.</a></p></li></ol><p></p>]]></content:encoded></item><item><title><![CDATA[Agents.md Explained: How One File Is Simplifying AI Coding Workflows]]></title><description><![CDATA[Ai for developers 101: bring order to AI coding with the agents.md file.]]></description><link>https://programmerspace.substack.com/p/agentsmd-explained-how-one-file-is</link><guid isPermaLink="false">https://programmerspace.substack.com/p/agentsmd-explained-how-one-file-is</guid><dc:creator><![CDATA[Boucodes]]></dc:creator><pubDate>Sun, 31 Aug 2025 18:01:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!24i_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefc8793-b9af-4eaf-92a9-8c728fcc745b_1024x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em><strong>Hello reader,</strong></em></p><p></p><p>If you&#8217;re a developer who uses AI coding assistants, you know the feeling: <em><strong>you&#8217;re constantly switching between different instruction files for every single tool. </strong></em></p><p></p><p><em><strong>What if I told you</strong></em> <em>a new standard is picking up to bring some serious order to all that chaos &#8212; and it all boils down to one single file</em>: <em><strong>agents.md</strong></em>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!24i_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefc8793-b9af-4eaf-92a9-8c728fcc745b_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!24i_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefc8793-b9af-4eaf-92a9-8c728fcc745b_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!24i_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefc8793-b9af-4eaf-92a9-8c728fcc745b_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!24i_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefc8793-b9af-4eaf-92a9-8c728fcc745b_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!24i_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefc8793-b9af-4eaf-92a9-8c728fcc745b_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!24i_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefc8793-b9af-4eaf-92a9-8c728fcc745b_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/defc8793-b9af-4eaf-92a9-8c728fcc745b_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!24i_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefc8793-b9af-4eaf-92a9-8c728fcc745b_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!24i_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefc8793-b9af-4eaf-92a9-8c728fcc745b_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!24i_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefc8793-b9af-4eaf-92a9-8c728fcc745b_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!24i_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefc8793-b9af-4eaf-92a9-8c728fcc745b_1024x608.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><h2><em><strong>Let's first understand the problem:</strong> </em></h2><p></p><p><em>The last couple of years have been a complete explosion of AI coding agents. </em></p><p>You&#8217;ve got <strong>Claude, Cursor, Codex, Gemini CLI</strong> &#8212; the list just keeps growing &#8212; <em><strong>and here&#8217;s the catch</strong></em>: </p><p><em><strong>Every single one of them uses its own special instruction file, its own set of rules in its own format. </strong></em></p><p>That has become a massive headache for developers everywhere.</p><p></p><p>A single tweet captures it: </p><p></p><blockquote><p><em>You stare at your project folder and have no idea which rule file the bot is actually listening to. </em></p></blockquote><p></p><p>It&#8217;s, well, pure madness, a total mess of different markdown files for every tool, an endless cycle of repeating yourself. </p><p><strong>This is my favorite way to describe the problem:</strong> <em>your project stops being a codebase and turns into a markdown museum for confused bots.</em> </p><p>You&#8217;ve got all these different instruction sets, each speaking a different language, and none of them talking to each other.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r_FX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb802c43d-31f1-47a7-8c44-62349b8b4a1e_1092x531.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r_FX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb802c43d-31f1-47a7-8c44-62349b8b4a1e_1092x531.png 424w, https://substackcdn.com/image/fetch/$s_!r_FX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb802c43d-31f1-47a7-8c44-62349b8b4a1e_1092x531.png 848w, https://substackcdn.com/image/fetch/$s_!r_FX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb802c43d-31f1-47a7-8c44-62349b8b4a1e_1092x531.png 1272w, https://substackcdn.com/image/fetch/$s_!r_FX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb802c43d-31f1-47a7-8c44-62349b8b4a1e_1092x531.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r_FX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb802c43d-31f1-47a7-8c44-62349b8b4a1e_1092x531.png" width="1092" height="531" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b802c43d-31f1-47a7-8c44-62349b8b4a1e_1092x531.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:531,&quot;width&quot;:1092,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:257130,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/172388281?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb802c43d-31f1-47a7-8c44-62349b8b4a1e_1092x531.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!r_FX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb802c43d-31f1-47a7-8c44-62349b8b4a1e_1092x531.png 424w, https://substackcdn.com/image/fetch/$s_!r_FX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb802c43d-31f1-47a7-8c44-62349b8b4a1e_1092x531.png 848w, https://substackcdn.com/image/fetch/$s_!r_FX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb802c43d-31f1-47a7-8c44-62349b8b4a1e_1092x531.png 1272w, https://substackcdn.com/image/fetch/$s_!r_FX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb802c43d-31f1-47a7-8c44-62349b8b4a1e_1092x531.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2><em><strong>An elegant solution emerges</strong></em></h2><p></p><p><em>Thankfully, out of that chaos an elegant solution started to emerge. A bunch of major players in the AI space actually got together and agreed on a simple, predictable standard. The concept behind it is brilliant</em>: a <strong>README for machines named </strong><em><strong>agents.md.</strong></em></p><p></p><h2><em><strong>What is agents.md?</strong></em></h2><p></p><p>At its core, <strong>agents.md</strong> is an open format for telling any AI what it needs to know about your project. </p><p>That &#8220;README for machines&#8221; idea is the best way to think about it. </p><p><strong>It&#8217;s not for humans</strong> &#8212; <em>it&#8217;s written specifically for your AI assistants. One dedicated spot for all your agent-focused rules and guidelines.</em></p><p></p><p>This didn&#8217;t happen overnight. As more tools hit the market, frustration grew and by mid-2025 the problem hit a boiling point. </p><p>That&#8217;s when companies like <strong>OpenAI and Google</strong> finally came together and said: okay, let&#8217;s fix this. They helped create the <em><strong>agents.md</strong></em> standard.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0AbL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd58943a-0aa8-44c8-ada0-365da37aab95_1523x657.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0AbL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd58943a-0aa8-44c8-ada0-365da37aab95_1523x657.png 424w, https://substackcdn.com/image/fetch/$s_!0AbL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd58943a-0aa8-44c8-ada0-365da37aab95_1523x657.png 848w, https://substackcdn.com/image/fetch/$s_!0AbL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd58943a-0aa8-44c8-ada0-365da37aab95_1523x657.png 1272w, https://substackcdn.com/image/fetch/$s_!0AbL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd58943a-0aa8-44c8-ada0-365da37aab95_1523x657.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0AbL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd58943a-0aa8-44c8-ada0-365da37aab95_1523x657.png" width="1456" height="628" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fd58943a-0aa8-44c8-ada0-365da37aab95_1523x657.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:628,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:279681,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/172388281?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd58943a-0aa8-44c8-ada0-365da37aab95_1523x657.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0AbL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd58943a-0aa8-44c8-ada0-365da37aab95_1523x657.png 424w, https://substackcdn.com/image/fetch/$s_!0AbL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd58943a-0aa8-44c8-ada0-365da37aab95_1523x657.png 848w, https://substackcdn.com/image/fetch/$s_!0AbL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd58943a-0aa8-44c8-ada0-365da37aab95_1523x657.png 1272w, https://substackcdn.com/image/fetch/$s_!0AbL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd58943a-0aa8-44c8-ada0-365da37aab95_1523x657.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2><em><strong>How it works &#8212; the practical playbook</strong></em></h2><p></p><p><em>How does it actually work? </em></p><p><strong>Simply, think about what you&#8217;d tell a new human teammate on their first day. </strong></p><p>This includes:</p><p></p><ul><li><p><em><strong>Project overview</strong></em></p></li><li><p><em><strong>Exact commands to build and run everything</strong></em></p></li><li><p><em><strong>How to run tests</strong></em></p></li><li><p><em><strong>Team-specific code style</strong></em></p></li><li><p><em><strong>Critical security reminders</strong></em></p><p></p></li></ul><p>It becomes <em><strong>the single source of truth for any AI agent that touches your code</strong></em>. </p><p>And the best part? It&#8217;s just <strong>markdown</strong>. </p><p><em>No new, complicated format to learn, no annoying YAML, no strict schema &#8212; the same standard markdown every developer already knows and loves.</em></p><p>That low barrier to entry is a big reason it&#8217;s catching on.</p><p></p><h2><em><strong>Scale and mono-repos: nested agents.md files</strong></em></h2><h2></h2><p><em>What about giant mono-repos? </em></p><p></p><p>They also thought of that: <strong>you can have nested agents.md files</strong>. </p><p><em><strong>The rule is simple &#8212; an agent listens to the file closest to the code it&#8217;s working on. </strong></em></p><p>That allows both project-wide rules and very specific local instructions.</p><p><em><strong>Does that work at scale?</strong></em></p><p>Consider this: 88 separate <strong>agents.md</strong> files were found in the main OpenAI repository when the standard launched. </p><p>That&#8217;s a staggering number and a strong proof point for the &#8220;<em><strong>closest file wins</strong></em>&#8221; approach in managing massive, real-world projects.</p><p></p><h2><em><strong>Adoption: who&#8217;s in and who&#8217;s out</strong></em></h2><p></p><p><em>A standard only matters if people use it. </em></p><p>Already, many heavy hitters are on board: <strong>OpenAI&#8217;s Codex, Google&#8217;s tools, Cursor, the Gemini CLI </strong>&#8212; they&#8217;ve all adopted the standard. </p><p></p><p><em><strong>You&#8217;ll notice a big name missing:</strong></em> </p><p><strong>Anthropic&#8217;s Claude</strong> still marches to the beat of its own <em><strong>claude.md</strong></em> file, creating a small standoff in the ecosystem.</p><p>Even with that holdout, the momentum is undeniable. The more tools that adopt <em><strong>agents.md</strong></em>, the harder it becomes for any one vendor to be the odd one out.</p><p></p><h2>Why it matters for developers</h2><p></p><p><em>So what&#8217;s the payoff? </em></p><p>At the end of the day, it&#8217;s about one thing: buying back your brain power:</p><ul><li><p>Less time repeating yourself, </p></li><li><p>Less friction when switching between different AI tools, </p></li><li><p>And more consistency in code produced by agents <em><strong>because you set the rules once for everyone</strong></em>. </p></li></ul><p><strong>Agents</strong> begin to feel less like code vending machines and more like <strong>teammates</strong> that actually understand your project.</p><h2>Conclusion</h2><p><strong>Agents.md</strong> is a huge step forward &#8212; it solves a real, annoying problem we face today. </p><p>But it also leaves a fascinating question: </p><p><em><strong>As AI agents grow smarter, will a simple markdown file be enough to guide them, or is this the first step toward a totally new way of collaborating with our machine teammates? </strong></em></p><p><em>Definitely something to think about.</em></p><h2><em><strong>Free PDF Roadmaps:</strong></em></h2><p><em>You can get these free PDFs that contain detailed roadmaps with recommended learning periods for each language or field, along with links to free resources such as books, YouTube tutorials, and courses with certificates:</em></p><ol><li><p><a href="https://10xdev.blog/Guide-AI-Agents.pdf">A PDF Guide for Learning AI Agents</a></p></li><li><p><a href="https://10xdev.blog/Guide-AI-Engineer.pdf">A PDF Guide for Becoming an AI Engineer</a></p></li><li><p><a href="https://10xdev.blog/Guide-Backend.pdf">A PDF Guide for Becoming a Backend Developer</a></p></li><li><p><a href="https://10xdev.blog/Guide-Cyber-Security.pdf">A PDF Guide for Learning Cyber Security</a></p></li><li><p><a href="https://10xdev.blog/Guide-Data-Analyst.pdf">A PDF Guide for Learning Data Analysis</a></p></li><li><p><a href="https://10xdev.blog/Guide-FrontEnd.pdf">A PDF Guide for Learning Frontend Development</a></p></li><li><p><a href="https://10xdev.blog/Guide-Java.pdf">A PDF guide for becoming a Java Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-C++.pdf">A PDF guide for becoming a C++ Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-Python.pdf">A PDF guide for becoming a Python Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-JavaScript.pdf">A PDF guide for becoming a JavaScript Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-Rust.pdf">A PDF guide for becoming a Rust Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-Go.pdf">A PDF guide for becoming a Go Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-FrontEnd.pdf">A PDF guide for becoming a Frontend Developer.</a></p></li><li><p><a href="https://10xdev.blog/Guide-Backend.pdf">A PDF guide for becoming a Backend Developer.</a></p></li></ol><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JWvt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd744633d-d6d3-49cd-bb65-fbcd881cfd63_767x423.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JWvt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd744633d-d6d3-49cd-bb65-fbcd881cfd63_767x423.png 424w, https://substackcdn.com/image/fetch/$s_!JWvt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd744633d-d6d3-49cd-bb65-fbcd881cfd63_767x423.png 848w, https://substackcdn.com/image/fetch/$s_!JWvt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd744633d-d6d3-49cd-bb65-fbcd881cfd63_767x423.png 1272w, https://substackcdn.com/image/fetch/$s_!JWvt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd744633d-d6d3-49cd-bb65-fbcd881cfd63_767x423.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JWvt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd744633d-d6d3-49cd-bb65-fbcd881cfd63_767x423.png" width="767" height="423" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d744633d-d6d3-49cd-bb65-fbcd881cfd63_767x423.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:423,&quot;width&quot;:767,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:52401,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/172388281?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd744633d-d6d3-49cd-bb65-fbcd881cfd63_767x423.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JWvt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd744633d-d6d3-49cd-bb65-fbcd881cfd63_767x423.png 424w, https://substackcdn.com/image/fetch/$s_!JWvt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd744633d-d6d3-49cd-bb65-fbcd881cfd63_767x423.png 848w, https://substackcdn.com/image/fetch/$s_!JWvt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd744633d-d6d3-49cd-bb65-fbcd881cfd63_767x423.png 1272w, https://substackcdn.com/image/fetch/$s_!JWvt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd744633d-d6d3-49cd-bb65-fbcd881cfd63_767x423.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[Most In-Demand Programming Fields in 2025: Your Guide to the Future]]></title><description><![CDATA[In this article, I'll tell you which programming fields will be most in demand in 2025, which skills companies are competing to hire, and how you can start learning this field.]]></description><link>https://programmerspace.substack.com/p/most-in-demand-programming-fields</link><guid isPermaLink="false">https://programmerspace.substack.com/p/most-in-demand-programming-fields</guid><dc:creator><![CDATA[Boucodes]]></dc:creator><pubDate>Mon, 25 Aug 2025 11:29:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!PNUR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3995918-c0d1-4391-8844-858c5143a2e6_1024x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello readers!</p><p><em><strong>Imagine sitting in front of your laptop and seeing a job advertisement for a respected tech company. </strong></em></p><p><em><strong>The salary is good, and you can work from home, etc.</strong></em></p><p><em>However, what&#8217;s strange is that the tech you&#8216;ll work with wasn't popular just two years ago! This raises an important question: <strong>Am I studying the right thing, or will I discover in a year or two that I've wasted my time?</strong></em></p><p></p><blockquote><p><em><strong>Make sure to check the pdf roadmaps at the end of this article!</strong></em></p></blockquote><p></p><h2><strong>In 2025, the programming market will change drastically. </strong></h2><p></p><p><em>Yes that&#8217;s true! New technologies are emerging every day, and companies are looking for specific skills, not just any skills. </em></p><p><em>Some fields are in extremely high demand, while others are beginning to decline. </em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PNUR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3995918-c0d1-4391-8844-858c5143a2e6_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PNUR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3995918-c0d1-4391-8844-858c5143a2e6_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!PNUR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3995918-c0d1-4391-8844-858c5143a2e6_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!PNUR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3995918-c0d1-4391-8844-858c5143a2e6_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!PNUR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3995918-c0d1-4391-8844-858c5143a2e6_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PNUR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3995918-c0d1-4391-8844-858c5143a2e6_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3995918-c0d1-4391-8844-858c5143a2e6_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PNUR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3995918-c0d1-4391-8844-858c5143a2e6_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!PNUR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3995918-c0d1-4391-8844-858c5143a2e6_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!PNUR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3995918-c0d1-4391-8844-858c5143a2e6_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!PNUR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3995918-c0d1-4391-8844-858c5143a2e6_1024x608.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><p><em><strong>In this article, I'll tell you which programming fields will be most in demand in 2025, which skills companies are competing to hire, and how you can start learning these fields. </strong></em></p><p>Get ready, because what you read here could change your entire career path and make you one of those who receive amazing job offers!</p><h2>1. Artificial Intelligence (AI)</h2><p></p><p><strong>Artificial intelligence is not just a trend; it's a revolution that is radically changing every industry, from medicine and education to business and even arts. </strong></p><p><strong>By 2025</strong>, AI will be like <strong>electricity</strong>&#8212;no longer a luxury, but an essential component for every company that wants to maintain its market position.</p><p></p><h5>Why is this field so important in 2025?</h5><p></p><p><em><strong>According</strong> to a <strong>World Economic Forum</strong> report, artificial intelligence will create <strong>97 million new jobs</strong> worldwide by <strong>2025</strong>. </em></p><p>Indeed, there are many jobs in demand in the market. In 2025, organizations will rely on it to analyze massive amounts of data in seconds, saving time and money, enabling more accurate decisions, and accelerating workflow.</p><p><em><strong>Forget those who tell you that artificial intelligence will replace programmers. </strong></em></p><blockquote><p><em>You now have the opportunity to learn artificial intelligence, so you don't have to fear it will replace you, because you're learning it to create your own AI systems.</em></p></blockquote><p></p><p><strong>Some of the most popular applications we see and use today are:</strong></p><p></p><ul><li><p>Recommendation engines across different platforms.</p></li><li><p>Intelligent chatbots like ChatGPT and Gemini.</p></li><li><p>Self-driving cars like Tesla.</p><p></p></li></ul><p>This is in addition to <strong>stock market analysis</strong>, the <strong>medical field</strong>, and many other fields in which artificial intelligence has entered heavily.</p><h5>What do you need to learn to get into this field?</h5><p></p><ul><li><p><strong>Python programming language:</strong> especially specialized libraries such as:</p><ul><li><p><strong>TensorFlow</strong>: For building and training neural network models.</p></li><li><p><strong>PyTorch</strong>: A flexible and easy-to-start library for building projects.</p></li></ul></li><li><p><strong>Mathematics and statistics: </strong>especially linear algebra, calculus, and probability, because they are the basis for understanding how algorithms work.</p></li><li><p><strong>Data processing and analysis:</strong> More than <strong>70%</strong> of AI work revolves around preparing data.</p></li></ul><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JueG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0fd40b-5671-4dc8-a2b0-52c501c85ffd_499x341.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JueG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0fd40b-5671-4dc8-a2b0-52c501c85ffd_499x341.png 424w, https://substackcdn.com/image/fetch/$s_!JueG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0fd40b-5671-4dc8-a2b0-52c501c85ffd_499x341.png 848w, https://substackcdn.com/image/fetch/$s_!JueG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0fd40b-5671-4dc8-a2b0-52c501c85ffd_499x341.png 1272w, https://substackcdn.com/image/fetch/$s_!JueG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0fd40b-5671-4dc8-a2b0-52c501c85ffd_499x341.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JueG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0fd40b-5671-4dc8-a2b0-52c501c85ffd_499x341.png" width="499" height="341" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5b0fd40b-5671-4dc8-a2b0-52c501c85ffd_499x341.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:341,&quot;width&quot;:499,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:54873,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/171512825?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0fd40b-5671-4dc8-a2b0-52c501c85ffd_499x341.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JueG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0fd40b-5671-4dc8-a2b0-52c501c85ffd_499x341.png 424w, https://substackcdn.com/image/fetch/$s_!JueG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0fd40b-5671-4dc8-a2b0-52c501c85ffd_499x341.png 848w, https://substackcdn.com/image/fetch/$s_!JueG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0fd40b-5671-4dc8-a2b0-52c501c85ffd_499x341.png 1272w, https://substackcdn.com/image/fetch/$s_!JueG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0fd40b-5671-4dc8-a2b0-52c501c85ffd_499x341.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>2. Web Development</h2><p></p><p><strong>If you're looking for a stable, in-demand, and easy-to-start programming field, web development is one of the best options in 2025. </strong></p><p><em>Every company, organization, or even individual needs an online presence, which makes the demand for web developers, especially <strong>full-stack developers</strong>, ever-increasing. </em></p><p><strong>I'm not telling you to learn full-stack web development directly&#8212;you can learn front-end or back-end development and still find work. </strong></p><p><em><strong>But I am making it clear that full-stack developers are in greater demand than front-end or back-end developers alone.</strong></em></p><p></p><h5>Why is this field still in high demand?</h5><p></p><ul><li><p>From simple informational websites to large enterprise management systems, everything is now dependent on web technologies.</p></li><li><p>E-commerce is thriving globally, and the market is witnessing unprecedented growth.</p></li><li><p>Startups: rely on dashboards and CRM and ERP systems built entirely on the web.</p></li></ul><p></p><h5>What do you need to learn to become a web developer?</h5><p></p><p>There are two main paths in web development: </p><ul><li><p><em><strong>front-end, </strong></em></p></li><li><p><em><strong>and back-end.</strong></em></p></li></ul><p></p><h3>A. Front-End</h3><p></p><p>It's the part the user sees and interacts with. To develop it, learn the following techniques:</p><ul><li><p>Basics: HTML, CSS, JavaScript.</p></li><li><p>Modern frameworks and libraries: React.js (currently the most in-demand globally), Angular, or Vue.js.</p><p></p></li></ul><h3>B. Back-End</h3><p></p><p>It's the part that works behind the scenes and isn't directly interacted with by the user. To develop it, learn:</p><ul><li><p>Programming language and framework:</p><ul><li><p><strong>Python</strong>: with Django or Flask.</p></li><li><p><strong>JavaScript</strong>: with Node.js.</p></li><li><p><strong>PHP</strong>: with Laravel.</p></li><li><p><strong>C#</strong>: with .NET</p></li></ul></li><li><p>Databases: Each language has its own compatible databases that offer better performance. The most popular databases in demand in the job market are <strong>MongoDB</strong>, <strong>MySQL</strong>, and <strong>PostgreSQL</strong>.</p></li></ul><p></p><h5>Additional skills:</h5><p></p><ul><li><p>Working with APIs.</p></li><li><p>Use version control systems such as Git and platforms such as GitHub and GitLab.</p></li><li><p>Create practical projects to add to your portfolio.</p></li></ul><p></p><h2>3. Mobile Development</h2><p></p><p><strong>Mobile phones have become an integral part of our daily lives. From waking up in the morning to going to bed at night, we constantly interact with mobile apps: food orders, banking, delivery, education, and entertainment. </strong></p><p><em>Everything is now available as an app. That's why mobile app developers are in demand in 2025, becoming one of the highest-paying programming specialties.</em></p><h3>Mobile App Development Paths</h3><p>There are three main approaches to application development:</p><p></p><h4>A. Native Development</h4><p></p><p>It means writing  native code for each operating system separately:</p><ul><li><p>Android: Use <strong>Kotlin</strong> (the primary language supported by Google) or <strong>Java</strong> (older but still widely used).</p></li><li><p>iOS: Use <strong>Swift</strong> (the official language for iPhone apps) or <strong>Objective-C</strong> (found in older projects).</p></li></ul><p></p><h4>B. Cross-platform development</h4><p></p><p>Write the code once to run on both Android and iOS, saving effort and cost:</p><ul><li><p><strong>Flutter</strong>: From Google, it's based on the Dart language, which is easy to learn and highly efficient.</p></li><li><p><strong>React Native</strong>: From Meta (formerly Facebook), it's based on JavaScript and is an easy choice for developers coming from a web development background.</p></li></ul><p><em><strong>Note</strong>: Flutter is currently the most popular choice for cross-platform mobile app development.</em></p><h5>Why is Flutter important in 2025:</h5><p></p><ul><li><p>You write the code once to make it work on more than one platform.</p></li><li><p>The performance is very close to that of native applications.</p></li><li><p>Its developer community is growing rapidly, and support from Google is strong.</p></li><li><p>Businesses, especially startups, are looking for faster and more cost-effective solutions without sacrificing quality, so they're turning to Flutter.</p></li></ul><h5>What do you learn to get into this field?</h5><p></p><ul><li><p>For native Android development: Learn Kotlin with the Android Studio development environment.</p></li><li><p>For native iOS development: Learn Swift with the Xcode development environment.</p></li><li><p>For cross-platform development (which we recommend): Learn Flutter using Dart, or React Native using JavaScript.</p></li></ul><h3>4. Cybersecurity</h3><p></p><p><strong>In a world where everything is connected to the internet, from banks to our smart homes, information security has become the first line of defense. </strong></p><p><em>Cyberattacks have increased alarmingly, and companies are spending millions to protect their data, especially from hackers and ransomware. </em></p><p><em><strong>Therefore, this field is highly important and in demand in 2025.</strong></em></p><h5>What do you learn to get into this field?</h5><p></p><ul><li><p>Networking Basics: You should understand how data moves between devices, IP addresses, and other basic concepts.</p></li><li><p>Operating Systems: Learn Linux in particular, while also getting an idea of other operating systems, as Linux is the primary operating system in most of the world's servers.</p></li></ul><h5>Penetration Testing Tools:</h5><p></p><ul><li><p>Wireshark: For network traffic analysis.</p></li><li><p>Metasploit: For advanced penetration testing.</p></li></ul><h5>Programming languages:</h5><p></p><ul><li><p>Python: For task automation and vulnerability analysis.</p></li><li><p>Bash: For working with Unix and Linux systems.</p></li></ul><h3>5. Data Analysis</h3><p></p><p><strong>In 2025, whoever owns the data owns the decisions. </strong></p><p><strong>There's a popular saying: "Data is the oil of the future," and this is true, as companies now rely on data for every decision they make. </strong></p><p><em>This field is active and in high demand because every application generates big data, and companies now need someone to interpret these numbers and transform them into strategic insights. </em></p><h5>Decisions such as: </h5><p></p><ul><li><p>Who will we sell to? </p></li><li><p>Where will we advertise? </p></li><li><p>Who will we hire? </p></li></ul><p>All of these decisions are now based on data analysis.</p><h5>What do you learn to get into this field?</h5><p></p><p>There are a set of basic tools that you should learn:</p><ul><li><p>Excel: For data analysis.</p></li><li><p>SQL: To organize and query data from databases.</p></li><li><p>Python language: with proficiency in libraries that serve this field such as Pandas and Seaborn.</p></li><li><p>Visualization Tools: such as Power BI.</p></li></ul><p><em><strong>Important Note</strong>: If you've noticed, Python is used in almost every field we've talked about today, which makes it a very important language to learn in 2025.</em></p><h2>Conclusion</h2><p></p><p><em><strong>In 2025, programming isn't just about writing code; it's about creating your future. </strong></em></p><p><strong>Choose the field that suits you and your passion, and start step by step. </strong></p><p><em>The opportunity is there, but the one who persists wins. Don't forget to learn, apply, and develop yourself every day. And always remember, the future begins with a line of code.</em></p><h2>Free PDF Roadmaps:</h2><p>You can get these 8+ free PDFs that contain detailed roadmaps with recommended learning periods for each language or field, along with links to free resources such as books, YouTube tutorials, and courses with certificates:</p><ul><li><p><a href="https://10xdev.blog/Guide-Java.pdf">A PDF guide for becoming a Java Developer. </a></p></li><li><p><a href="https://10xdev.blog/Guide-C++.pdf">A PDF guide for becoming a C++ Developer. </a></p></li><li><p><a href="https://10xdev.blog/Guide-Python.pdf">A PDF guide for becoming a Python Developer. </a></p></li><li><p><a href="https://10xdev.blog/Guide-JavaScript.pdf">A PDF guide for becoming a JavaScript Developer. </a></p></li><li><p><a href="https://10xdev.blog/Guide-Rust.pdf">A PDF guide for becoming a Rust Developer. </a></p></li><li><p><a href="https://10xdev.blog/Guide-Go.pdf">A PDF guide for becoming a Go Developer. </a></p></li><li><p><a href="https://10xdev.blog/Guide-FrontEnd.pdf">A PDF guide for becoming a Frontend Developer. </a></p></li><li><p><a href="https://10xdev.blog/Guide-Backend.pdf">A PDF guide for becoming a Backend Developer. </a></p></li></ul><p>You can also get them via:</p><ul><li><p><a href="https://drive.google.com/drive/folders/1a6R7_fLJtJhQ5vTjbN63Ll95DTJi2iAX?usp=sharing">Google Drive</a> or</p></li><li><p><a href="https://t.me/programmerspace">Telegram Channel</a>.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EK8W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad5129ab-6762-4361-8634-a8e04edef0c9_768x139.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EK8W!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad5129ab-6762-4361-8634-a8e04edef0c9_768x139.png 424w, https://substackcdn.com/image/fetch/$s_!EK8W!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad5129ab-6762-4361-8634-a8e04edef0c9_768x139.png 848w, https://substackcdn.com/image/fetch/$s_!EK8W!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad5129ab-6762-4361-8634-a8e04edef0c9_768x139.png 1272w, https://substackcdn.com/image/fetch/$s_!EK8W!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad5129ab-6762-4361-8634-a8e04edef0c9_768x139.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EK8W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad5129ab-6762-4361-8634-a8e04edef0c9_768x139.png" width="768" height="139" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ad5129ab-6762-4361-8634-a8e04edef0c9_768x139.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:139,&quot;width&quot;:768,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:58900,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programmerspace.substack.com/i/171512825?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad5129ab-6762-4361-8634-a8e04edef0c9_768x139.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EK8W!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad5129ab-6762-4361-8634-a8e04edef0c9_768x139.png 424w, https://substackcdn.com/image/fetch/$s_!EK8W!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad5129ab-6762-4361-8634-a8e04edef0c9_768x139.png 848w, https://substackcdn.com/image/fetch/$s_!EK8W!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad5129ab-6762-4361-8634-a8e04edef0c9_768x139.png 1272w, https://substackcdn.com/image/fetch/$s_!EK8W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad5129ab-6762-4361-8634-a8e04edef0c9_768x139.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[Top 5 AI Engineering Courses Ranked & Explained In 10 Minutes]]></title><description><![CDATA[This article shares the top five so you don't waste time on mediocre options that may not teach the skills required for the job.]]></description><link>https://programmerspace.substack.com/p/top-5-ai-engineering-courses-ranked</link><guid isPermaLink="false">https://programmerspace.substack.com/p/top-5-ai-engineering-courses-ranked</guid><dc:creator><![CDATA[Boucodes]]></dc:creator><pubDate>Tue, 19 Aug 2025 06:01:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9iHH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65c61bfa-c3e4-499a-858d-b647c425249c_1024x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em><strong>Everyone wants to be an AI engineer right now</strong>, and it's easy to see why. <strong>The pay is great, the problems are engaging, and the rapid pace of innovation ensures you will never be bored.</strong> </em></p><p><em>As AI engineering becomes a more significant part of the software development landscape, many are looking to level up their skills.</em></p><p><em>After extensive research into the available courses, their pros, and their cons, this article shares the top five so you don't waste time on mediocre options that may not teach the skills required for the job.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9iHH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65c61bfa-c3e4-499a-858d-b647c425249c_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9iHH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65c61bfa-c3e4-499a-858d-b647c425249c_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!9iHH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65c61bfa-c3e4-499a-858d-b647c425249c_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!9iHH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65c61bfa-c3e4-499a-858d-b647c425249c_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!9iHH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65c61bfa-c3e4-499a-858d-b647c425249c_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9iHH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65c61bfa-c3e4-499a-858d-b647c425249c_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/65c61bfa-c3e4-499a-858d-b647c425249c_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9iHH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65c61bfa-c3e4-499a-858d-b647c425249c_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!9iHH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65c61bfa-c3e4-499a-858d-b647c425249c_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!9iHH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65c61bfa-c3e4-499a-858d-b647c425249c_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!9iHH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65c61bfa-c3e4-499a-858d-b647c425249c_1024x608.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h3><strong>How These Courses Were Evaluated?</strong></h3><p></p><p><em><strong>As a first filter, the list only includes courses that teach practical AI engineering&#8212;the application and deployment of pre-trained models, not just machine learning theory. </strong></em></p><p><em>Many courses get this wrong. The goal was also to prioritize courses that provide a real foundation across the discipline, rather than focusing on a single topic like prompt engineering or fine-tuning.</em></p><p><strong>The evaluation was based on 4 granular rules: </strong></p><p>* <strong>Theory:</strong> How well the course teaches concepts like model architecture. </p><p>* <strong>Engineering:</strong> How much you learn about building and deploying AI applications end-to-end. </p><p>* <strong>Ratings &amp; User Sentiment:</strong> What other learners are saying. </p><p>* <strong>Interactivity:</strong> The level of hands-on engagement.</p><p></p><h3><strong>5. Generative AI Engineering with LLMs by IBM on Coursera</strong></h3><p></p><p>This seven-course specialization from IBM <strong>costs around $50 per month</strong> for a <strong>certificate</strong>, but you can also <strong>audit the materials for free</strong>. </p><p>IBM estimates a <strong>completion time of three to six months at four hours per week</strong>, though you can certainly move faster. </p><p><em>The program holds a 4.5-star rating with nearly 9,000 active learners this year.</em></p><p>The specialization begins with the fundamentals: <strong>what generative AI is</strong>, its <strong>evolution from older models, and the problems it excels at solving</strong>. </p><p>From there, it delves into <strong>the structure of large language models</strong>, including the <strong>transformer architecture</strong>, <em>which is the core reason models like ChatGPT can understand and generate language so effectively.</em></p><p>Next, you'll learn about <strong>fine-tuning</strong>&#8212;<em>taking a general-purpose model and training it to perform better on specific tasks with your own data</em>. </p><p>The course details various fine-tuning methods used at different stages of the model lifecycle, along with more modern approaches. </p><p>You will also explore <strong>structured prompt design</strong>, building <strong>question-answering apps</strong> based on documents, and <strong>connecting your application to real data</strong>.</p><p>The final project involves <strong>building a working app that allows users to ask questions and receive answers based on information you provide</strong>. </p><p>You will design the UI, integrate the AI model, and link it to a mini-database. </p><p><em><strong>The entire course runs in-browser</strong></em>, so no complex setup is needed. However, the labs are quite guided, meaning there isn't a substantial amount of independent coding required.</p><p><em><strong>This course is well-suited for data scientists looking to add AI engineering skills, but it won't teach you how to deploy models to production. You will, however, gain a deep understanding of the math and intuition behind the models.</strong></em></p><p></p><h3><strong>4. Associate AI Engineer for Data Scientists by DataCamp</strong></h3><p></p><p>As the name suggests, this is another option aimed at data scientists, but it is ranked higher for its practical focus. <strong>This is a thirteen-course track that takes approximately 40 interactive hours to complete</strong>. </p><p>It's bundled with DataCamp's premium subscription, which is about<strong> $40 per month</strong>, and can typically <strong>be finished in one to two months</strong>. </p><p>Over 9,500+ learners have completed it so far with positive user sentiment.</p><p>You start by reviewing <strong>core machine learning concepts</strong>: <strong>supervised vs. unsupervised learning</strong>, <strong>scikit-learn pipelines</strong>, and <strong>deep learning with PyTorch</strong>. </p><p>The curriculum then moves on to <strong>transformers</strong>, with separate modules on <strong>prompt engineering</strong>, <strong>fine-tuning methods</strong>, and responsible <strong>data management</strong>. </p><p>The middle section covers the Hugging Face Hub, <strong>vector embeddings</strong>, and an introduction to explainable AI.</p><p>What truly sets this track apart is the integrated <strong>MLOps</strong> thread. You'll work with <strong>MLflow</strong> for experiments, use <strong>Git for version control</strong>, write <strong>automated tests with PyTest</strong>, and get a conceptual overview of <strong>CI/CD</strong>. </p><p><em><strong>Most courses skip this, but if you want to be an AI engineer, your role will almost certainly involve deploying models to production. These skills are essential.</strong></em></p><p>The downside is that it isn't fully comprehensive; you won't get much on agents or RAG, for example. </p><p>However, DataCamp's intuitive, browser-based, and gamified platform works well for beginners, helping build momentum early on.</p><p></p><h3><strong>3. The HuggingFace Courses (LLMs, Agents, and MCP)</strong></h3><p></p><p>Hugging Face offers a wealth of excellent resources on its platform. This entry focuses on three courses that can be considered a single, comprehensive resource: </p><ul><li><p>the LLM course, </p></li><li><p>the AI Agents course, </p></li><li><p>and the Model Context Protocol (MCP) course. </p><p></p><p></p></li></ul><p>All materials are <strong>free to read online</strong>, and most units link to <strong>runnable notebooks in Colab or Spaces</strong>, allowing you to experiment with real code.</p><p>The content is constantly updated&#8212;a major advantage&#8212;and is available in numerous languages:</p><ul><li><p><strong>The LLM Course:</strong> Structured across 12 chapters, it starts with <strong>transformer basics</strong>, <strong>loading models from the Hub</strong>, <strong>tokenization</strong>, and <strong>datasets</strong>, building toward <strong>fine-tuning</strong>, <strong>evaluation</strong>, and<strong> sharing interactive demos</strong>.</p></li><li><p><strong>The AI Agents Course:</strong> This course explains <strong>what agents are</strong> and what they can do, guiding you through <strong>building and benchmarking</strong> your own. It covers popular frameworks like  <strong>LlamaIndex</strong>, and <strong>LangGraph</strong>, along with an <strong>agentic RAG</strong> use case.</p></li><li><p><strong>The Model Context Protocol (MCP) Course:</strong> As AI apps increasingly require live data and tool access, <strong>MCP is emerging as a standard for model-to-system communication</strong>. This course introduces the protocol and moves into SDK-driven labs with <strong>Python</strong> and <strong>TypeScript</strong> examples.</p></li></ul><p></p><p>You have to set up your own environment for the assignments, which more closely simulates a real-world job environment. </p><p>A Discord server is available for questions. The format is mostly reading-first with code examples rather than produced video lectures.</p><p></p><p><em><strong>For learners who are self-directed and comfortable with setting up their own environments, these courses are an excellent way to learn a great deal without any cost.</strong></em></p><p></p><h3><strong>2. Large Language Model Agents by UC Berkeley</strong></h3><p></p><p>This is a<strong> completely free</strong>, 12-lecture MOOC, plus an optional advanced course, based on the <strong>UC Berkeley Large Language Model Agents course</strong>. </p><p></p><p>It receives overwhelmingly positive reviews from AI engineers, students, and professionals. <strong>The free online version includes recordings, slides, and quizzes.</strong></p><p>The lectures are delivered by experts from <strong>Google</strong>, <strong>DeepMind</strong>, <strong>OpenAI</strong>, <strong>Meta</strong>, <strong>Nvidia</strong>, and <strong>Stanford</strong>. </p><p>The content covers both the theory and practical implementation of <strong>LLM agents</strong>, including <strong>reasoning, planning, RAG, multi-agent collaboration, and memory systems</strong>. </p><p>The curriculum also addresses benchmarks, safety, ethics, and trustworthy AI, offering a broader perspective than just agents.</p><p>The structure is intense but manageable, with<strong> 12 two-hour lectures</strong>, three <strong>hands-on labs,</strong> and a <strong>weekly five-question quiz</strong>. </p><p>A Discord community with around 30,000 members handles Q&amp;A, study groups, and office hours. Multiple reviewers have described the course as transformative and said it immediately influenced their work.</p><p></p><p>There are some things to be aware of. The MOOC runs on a semester system, and as of August 2025, another semester has not been announced. This means you can follow the materials but won't get feedback or a certificate. </p><p><em><strong>Additionally, some modules assume prior machine learning knowledge, and the pace is fast, making it challenging for complete beginners. However, for those seeking professional-level skills for free, this course is hard to beat.</strong></em></p><p></p><h3><strong>1. Associate AI Engineer for Developers by DataCamp</strong></h3><p></p><p>This is <strong>DataCamp's developer-focused AI engineering track</strong>. While the data scientist version focuses on underlying models, this one is<strong> centered on using APIs and building AI applications</strong>. </p><p>It consists of 26 interactive hours spread across nine core courses and three short projects, last refreshed in April 2025. More than 15,000+ learners have completed it.</p><p>In the <strong>course</strong>, you'll <strong>build real applications like chatbots and semantic search engines using LLMs and vector databases</strong>. </p><p>It covers common tools like the <strong>OpenAI API</strong>, <strong>Hugging Face</strong>, <strong>LangChain</strong>, and <strong>Pinecone</strong> for <strong>vector embeddings.</strong></p><p></p><p>Crucially, it includes <strong>LLM ops</strong> coverage&#8212;a vital and often overlooked area. </p><p>This means understanding how to<strong> safely deploy models</strong>,<strong> implement rate limiting</strong>, and <strong>monitor systems to prevent failures</strong>. </p><p><em><strong>A certificate option is also available, which includes two timed theory exams and a four-hour practical exam where you build a small AI app.</strong></em></p><p></p><p>The learning style is highly engaging, with a built-in browser IDE and an AI assistant to help when you're stuck. The scope is realistic; by the end, you will have experience with prompts, pipelines, vector databases, and deployment hygiene&#8212;all key skills for the job. It serves as a highly accessible introduction to the major components of the field.</p><p><em><strong>Overall, this course is excellent for software developers and those who want practical AI application experience without needing a prior background in AI or data science.</strong></em></p><div><hr></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://programmerspace.substack.com/p/top-5-ai-engineering-courses-ranked?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Programmer Space! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://programmerspace.substack.com/p/top-5-ai-engineering-courses-ranked?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://programmerspace.substack.com/p/top-5-ai-engineering-courses-ranked?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[The 5 Most Common Design Patterns Explained in 6 Minutes]]></title><description><![CDATA[In today's article, we're going to talk about design patterns.]]></description><link>https://programmerspace.substack.com/p/the-5-most-common-design-patterns</link><guid isPermaLink="false">https://programmerspace.substack.com/p/the-5-most-common-design-patterns</guid><dc:creator><![CDATA[Boucodes]]></dc:creator><pubDate>Sun, 17 Aug 2025 21:57:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!P6zJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb60fe0e7-ece7-45d0-9224-dfd63b42566f_1024x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em><strong>In today's article</strong></em><strong>, we're going to talk about </strong><em><strong>design patterns.</strong></em><strong> </strong></p><p><em><strong>High-level programming languages have been around since the 1950s, and since then, programmers have been using them to solve all sorts of different problems.</strong></em></p><p><em>Over time, programmers realized that even though the <strong>problems</strong> are <strong>unique</strong>, there are often <strong>similarities</strong> in the <strong>solutions</strong>. </em></p><p><em>They aren't exactly the same, so <strong>you can't create a library or use a standard algorithm to solve them</strong>. </em></p><p><em>Instead, developers would <strong>reuse the core ideas of a solution</strong> for the different problems they came across.</em> </p><p><em>Eventually, names were given to these</em><strong> typical solutions, </strong><em>and that is how</em><strong> design patterns were born.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!P6zJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb60fe0e7-ece7-45d0-9224-dfd63b42566f_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!P6zJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb60fe0e7-ece7-45d0-9224-dfd63b42566f_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!P6zJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb60fe0e7-ece7-45d0-9224-dfd63b42566f_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!P6zJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb60fe0e7-ece7-45d0-9224-dfd63b42566f_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!P6zJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb60fe0e7-ece7-45d0-9224-dfd63b42566f_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!P6zJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb60fe0e7-ece7-45d0-9224-dfd63b42566f_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b60fe0e7-ece7-45d0-9224-dfd63b42566f_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!P6zJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb60fe0e7-ece7-45d0-9224-dfd63b42566f_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!P6zJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb60fe0e7-ece7-45d0-9224-dfd63b42566f_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!P6zJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb60fe0e7-ece7-45d0-9224-dfd63b42566f_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!P6zJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb60fe0e7-ece7-45d0-9224-dfd63b42566f_1024x608.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><p></p><h3><strong>What is a Design Pattern?</strong></h3><p></p><p><strong>If you're struggling to work out</strong> the <strong>difference</strong> between a <em>design pattern</em> and an <em>algorithm</em>, perhaps this <strong>analogy</strong> will help.</p><p>Let's say you want to <strong>bake</strong> a <strong>birthday cake</strong>. </p><p>To do this, you might <strong>follow a recipe</strong>, which provides <strong>step-by-step instructions on how to bake that cake</strong>. </p><p>The recipe, in this case, is an <strong>algorithm</strong>. It gives you a repeatable set of instructions to produce the same result. </p><p><strong>Sure</strong>, <em>you might switch out some ingredients to produce different cakes, but these are just different input variables.</em></p><p>Now, let's also say you <strong>want to have a birthday party</strong>. </p><p>If you think about a birthday party, you're probably imagining balloons, banners, and a cake with candles. </p><p>However, <strong>everyone's idea of a birthday party is different</strong>. There are no set steps to follow, <strong>no recipe like you have with a cake</strong>. </p><p><em>A birthday party will be different for every person, much like the problems we face in software engineering.</em></p><p>But if you could see what everyone else is thinking, even though their ideas of a party are very different,<strong> you would still recognize it as a "birthday party."</strong> </p><p>The birthday party, in this case, is a <strong>design pattern</strong>. It's the concept of a <strong>solution</strong> that can be <strong>reused</strong>, <em>even if the implementation details are slightly different.</em></p><p></p><h3><strong>The Gang of Four and the 23 Patterns</strong></h3><p></p><p>In 1994, four authors wrote down 23 design patterns in the book <em><strong>Design Patterns: Elements of Reusable Object-Oriented Software</strong></em>. </p><p>That's a bit of a mouthful, so most people call it the <strong>"Gang of Four"</strong> book.</p><p><em>If you've been programming for a while, chances are you've already used some of these design patterns without even realizing it.</em> </p><p><strong>Most of them are common sense. These 23 design patterns are split into three main groups:</strong></p><ul><li><p><strong>Creational Patterns:</strong> These relate to creating objects in your code.</p></li><li><p><strong>Structural Patterns:</strong> These define how objects are structured, especially in large systems.</p></li><li><p><strong>Behavioral Patterns:</strong> These cover the interaction between objects and their responsibilities.</p></li></ul><p><strong>No one expects you to memorize all 23 patterns. </strong></p><p>However, it's worth being familiar with them. </p><p>When you encounter a problem, you might think, <strong>"Ah, that sounds similar to this design pattern,"</strong> and then <em>you can look it up to see if it applies.</em></p><p><em><strong>Out of all these patterns, there are five that many developers find themselves using over and over again. Let's have a look at those:</strong></em></p><p></p><h3><strong>1. The Strategy Pattern</strong></h3><p></p><p>Let's go back to the cake-baking analogy. </p><p>Imagine you love cake so much that you decide to write an application that provides cake recipes. </p><p>You start with a birthday cake recipe, but later you want to add a red velvet cake, then a carrot cake, a coffee cake, and a lemon cake.</p><p>You could use <code>if</code> statements or <code>switch</code> statements to handle all the different cakes, but your code would quickly become messy spaghetti. </p><p>The code in your application shouldn't need to care too much about which specific cake you pick.</p><p>This is where the <strong>Strategy Pattern</strong> comes in. You can split each cake recipe into its own class, with each class implementing the same methods, for example:</p><pre><code><code>getIngredients()
getMethod()</code></code></pre><p>This is incredibly useful if you have multiple ways of achieving the same thing. </p><p><em>For instance, in a maps application, you might want to provide navigation for walking, driving, or cycling. </em></p><p><strong>They all serve the same function (navigation), but the implementation is different for each. This is a pattern worth having in your toolbox.</strong></p><p></p><h3><strong>2. The Decorator Pattern</strong></h3><p></p><p>If you need to extend an object's functionality without changing its original implementation, the <strong>Decorator Pattern</strong> is the way to go. </p><p>This pattern is a key way to make your code open to extension but closed for modification (<strong>the "O" in SOLID principles</strong>).</p><p>You've likely used this pattern without realizing it!</p><p><em>Whenever you wrap a class in another class, you're effectively using the Decorator pattern. </em></p><p>The typical way to do this is to have the decorator implement the same interface as the component you want to extend. </p><p>Then, in the decorator's constructor, you pass in the original component as an argument. </p><p>You can then implement the interface, call the original component's method, and add your new functionality either before or after that call.</p><h3><strong>3. The Observer Pattern</strong></h3><p></p><p>You're probably already familiar with the concept behind the <strong>Observer Pattern</strong>. </p><p>It's used whenever you want to notify interested parties that something has happened.</p><p>Think of a newsletter subscription. Only those who have subscribed to the newsletter receive an email. </p><p>This is how the <strong>Observer pattern works.</strong> You have a <strong>Publisher</strong> that implements <code>subscribe()</code>, <code>unsubscribe()</code>, and <code>notifySubscribers()</code> methods. </p><p>You then have a <strong>Subscriber</strong> interface that all subscribers must implement.</p><p>When a subscriber subscribes to a publisher, they are added to a list (like an array). When the publisher has an update, it loops through that list and calls the <code>update()</code> method on each subscriber.</p><p></p><h3><strong>4. The Singleton Pattern</strong></h3><p></p><p><em><strong>When we think of singletons, we think of creating just one instance of something.</strong></em> </p><p><em>While you can use <strong>global variables</strong>, they can be changed from anywhere, which can cause numerous problems. </em></p><p>However, there are cases where you genuinely need a <strong>single, globally accessible object</strong>, such as a <strong>database connection</strong>. </p><p>You don't want a new connection every time something needs to access the database.</p><p>The typical way to implement a <strong>Singleton</strong> is to create a <em><strong>sealed class with a private constructor.</strong></em> </p><p><strong>The private constructor means nothing outside the class can create a new instance of it.</strong> </p><p>You then create a separate method or property that handles the instance creation.</p><p>Here is a basic implementation:</p><pre><code><code>// NOTE: This version is NOT thread-safe
public sealed class Singleton
{
    private static Singleton instance = null;

    private Singleton() { }

    public static Singleton Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new Singleton();
            }
            return instance;
        }
    }
}
</code></code></pre><p>The problem with the code above is that it's not thread-safe!</p><p>Two threads could call the <code>Instance</code> property at the same time, both pass the <code>null</code> check, and end up creating two separate instances.</p><p>To get around this, we need a locking mechanism:</p><pre><code><code>// Thread-safe version
public sealed class Singleton
{
    private static Singleton instance = null;
    private static readonly object padlock = new object();

    private Singleton() { }

    public static Singleton Instance
    {
        get
        {
            if (instance == null) // Initial check
            {
                lock (padlock) // Lock the critical section
                {
                    if (instance == null) // Double-check
                    {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }
}
</code></code></pre><p>Another, much simpler way to do this in C# (.NET 4 and later) is with the <code>Lazy&lt;T&gt;</code> type, which is thread-safe by default and uses less code:</p><pre><code><code>// Thread-safe version using Lazy&lt;T&gt;
public sealed class Singleton
{
    private static readonly Lazy&lt;Singleton&gt; lazy =
        new Lazy&lt;Singleton&gt;(() =&gt; new Singleton());

    public static Singleton Instance { get { return lazy.Value; } }

    private Singleton() { }
}
</code></code></pre><p></p><h3><strong>5. The Facade Pattern</strong></h3><p></p><p>The <strong>Facade Pattern</strong> is essential in software development. </p><p>It's all about simplicity. We constantly use different libraries and frameworks that, while saving us time, can make our code messy and complicated. </p><p>Often, these libraries do far more than we actually need.</p><p>Let's say you're using a fictional, poorly designed logging library. </p><p>This library can send logs to a file, the console, or even a Slack message. </p><p>The problem is, it only has one method, <code>log()</code>, and for every call, you have to specify the log type and destination.</p><p>Rather than cluttering your code with these implementation details, you can create your own logger interface (a "facade") with simple methods like <code>logInfo()</code>, <code>logError()</code>, etc. </p><p>All the messy code from the bad library is then restricted to a single class that implements your clean interface. </p><p><em><strong>If you ever decide to change the logging library, you only have one place to make changes, and the rest of your code is unaffected.</strong></em></p><p></p><h3><strong>Conclusion</strong></h3><p></p><p><em><strong>These are five of the most common design patterns that many developers use, but there are over 18 other patterns from the original book. </strong></em></p><p>It's worth looking at them to become familiar! </p><p><em><strong>Having them in the back of your mind will help you identify solutions when you come across complex problems in the future. </strong></em></p><p>There are many great online resources that cover all 23 design patterns with examples of when to use them.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://programmerspace.substack.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share Programmer Space&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://programmerspace.substack.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share Programmer Space</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://programmerspace.substack.com/p/the-5-most-common-design-patterns?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://programmerspace.substack.com/p/the-5-most-common-design-patterns?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://programmerspace.substack.com/p/the-5-most-common-design-patterns?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Programmer Space! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://programmerspace.substack.com/p/the-5-most-common-design-patterns?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://programmerspace.substack.com/p/the-5-most-common-design-patterns?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[Python Roadmap for Free Courses/Certificates to High-Paying Jobs]]></title><description><![CDATA[We&#8217;ll walk you through five free, targeted certifications, each crafted to prepare you for a specific role that ranks among the highest-paying in the market, all hinging on your Python skills.]]></description><link>https://programmerspace.substack.com/p/python-roadmap-for-free-coursescertificates</link><guid isPermaLink="false">https://programmerspace.substack.com/p/python-roadmap-for-free-coursescertificates</guid><dc:creator><![CDATA[Boucodes]]></dc:creator><pubDate>Wed, 13 Aug 2025 23:04:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!V7cD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb749e43-f4a7-4d17-acda-4c4af02bed53_1024x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>In 2025, the programming language that&#8217;s most linked to six-figure salaries (in dollars) is Python. This isn&#8217;t just a fluke; it&#8217;s a clear result of Python&#8217;s stronghold in the most lucrative areas of the tech industry: artificial intelligence, data science, cyber security, and automation.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!V7cD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb749e43-f4a7-4d17-acda-4c4af02bed53_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!V7cD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb749e43-f4a7-4d17-acda-4c4af02bed53_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!V7cD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb749e43-f4a7-4d17-acda-4c4af02bed53_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!V7cD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb749e43-f4a7-4d17-acda-4c4af02bed53_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!V7cD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb749e43-f4a7-4d17-acda-4c4af02bed53_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!V7cD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb749e43-f4a7-4d17-acda-4c4af02bed53_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb749e43-f4a7-4d17-acda-4c4af02bed53_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!V7cD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb749e43-f4a7-4d17-acda-4c4af02bed53_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!V7cD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb749e43-f4a7-4d17-acda-4c4af02bed53_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!V7cD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb749e43-f4a7-4d17-acda-4c4af02bed53_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!V7cD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb749e43-f4a7-4d17-acda-4c4af02bed53_1024x608.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>However, just learning Python doesn&#8217;t automatically mean you&#8217;ll land a high-paying job. The real trick is to learn and apply Python within one of these specialized and valuable fields.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programmerspace.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Programmer Space! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><strong>This article serves as a focused investment of your time. We&#8217;ll walk you through five free, targeted certifications, each crafted to prepare you for a specific role that ranks among the highest-paying in the market, all hinging on your Python skills.</strong></p><div><hr></div><h2><strong>Roadmap to High-Paying Jobs Using Python</strong></h2><p>Each certification on this list opens the door to a rewarding job opportunity.</p><h3><strong>1. A strong foundation in software engineering (essential everywhere)</strong></h3><p>Before you dive into a specialty, it&#8217;s crucial to have a solid base that showcases your understanding of programming principles. This certification will give you that essential groundwork.</p><ul><li><p><strong>Suggested Certification:</strong> <strong>Programming Essentials in Python</strong></p></li><li><p><strong>Why is it important?</strong> Because it&#8217;s offered by <strong>Cisco</strong> and directly qualifies you for globally recognized professional certifications (PCEP/PCAP). Having this certification on your resume signals that you&#8217;ve learned Python according to industry standards, not just on a whim.</p></li><li><p><strong>Presenter:</strong> Cisco Networking Academy</p></li><li><p><strong>Course language:</strong> English, with potential availability in other languages.</p></li><li><p><strong> <a href="https://www.netacad.com/courses/programming/pcap-programming-essentials-python">Start building your solid engineering foundation here.</a> &#128072;</strong></p></li></ul><h3><strong>2. Stepping into the realm of data science (job: data scientist)</strong></h3><p>Data scientists spend a significant amount of their time using Python to analyze data and create predictive models. This comprehensive program is your gateway into this exciting field.</p><ul><li><p><strong>Suggested Certification:</strong> <strong>Programming Essentials in Python</strong></p></li><li><p><strong>Why is it important?</strong> Because it's offered by <strong>Cisco</strong> and directly qualifies you for globally recognized professional certifications (PCEP/PCAP). Having this certification on your resume shows that you learned Python according to industry standards, not randomly.</p></li><li><p><strong>Presenter:</strong> Cisco Networking Academy</p></li><li><p><strong>Course language:</strong> English, with possible availability in other languages.</p></li><li><p><strong> <a href="https://www.netacad.com/courses/programming/pcap-programming-essentials-python">Build your solid engineering foundation from here.</a> &#128072;</strong></p></li></ul><h3><strong>2. Entering the world of data science (job: data scientist)</strong></h3><p>Data scientists spend most of their time using Python to analyze data and build predictive models. This comprehensive program is your entry point into this field.</p><ul><li><p><strong>Suggested Certification:</strong> <strong>IBM Data Science Professional Certificate</strong></p></li><li><p><strong>Why is it important?</strong> Because it's a comprehensive professional certification from tech giant <strong>IBM</strong> . It teaches you everything you need to know: from the basics of Python and SQL, to data analysis, to building machine learning models. It's the most comprehensive path to becoming a data scientist.</p></li><li><p><strong>Presented by:</strong> IBM on Coursera</p></li><li><p><strong>Course language:</strong> English (with subtitles for other languages available).</p></li><li><p><strong> <a href="https://www.coursera.org/professional-certificates/ibm-data-science">Start your career as a data scientist here</a> &#128072;</strong></p></li></ul><h3><strong>3. Specialization in Machine Learning Engineering (Job: Machine Learning Engineer)</strong></h3><p>Machine learning engineers are among the highest-paid professionals in the world. Their job is to build and deploy complex AI models. This certification focuses on the practical side of this job.</p><ul><li><p><strong>Suggested Certification:</strong> <strong>Machine Learning with Python</strong></p></li><li><p><strong>Why is it important?</strong> Because it's project-based and uses Google's <strong>TensorFlow</strong> library . You'll build five real-world machine learning models, which is the practical experience hiring managers look for in this advanced specialization.</p></li><li><p><strong>Presenter:</strong> freeCodeCamp</p></li><li><p><strong>Course Language:</strong> Main content in English.</p></li><li><p><strong> <a href="https://www.freecodecamp.org/learn/machine-learning-with-python/">Specialize in Artificial Intelligence Engineering from here</a> &#128072;</strong></p></li></ul><h3><strong>4. Excellence in Cybersecurity (Job: Security Analyst Programmer)</strong></h3><p>A cybersecurity expert who knows how to write code to solve problems and automate tasks will earn a much higher salary than one who only uses off-the-shelf tools.</p><ul><li><p><strong>Suggested Certification:</strong> <strong>Information Security</strong></p></li><li><p><strong>Why is it important?</strong> Because it's the only certification that teaches you security by <strong>building security tools using Python</strong> . This dual skill (security + programming) is extremely rare and makes you an irresistible candidate for advanced security jobs.</p></li><li><p><strong>Presenter:</strong> freeCodeCamp</p></li><li><p><strong>Course Language:</strong> Main content in English.</p></li><li><p><strong><a href="https://www.freecodecamp.org/learn/information-security/">Combine security and programming from here</a> &#128072; </strong></p></li></ul><h3><strong>5. Master the most in-demand skill - data analysis with Pandas</strong></h3><p>Almost every high-paying Python job requires a thorough mastery of the Pandas library, the primary tool for data processing and analysis in Python.</p><ul><li><p><strong>Suggested Certification:</strong> <strong>Data Analysis with Python: Zero to Pandas</strong></p></li><li><p><strong>Why is it important?</strong> Because it focuses comprehensively and intensively on the most important library in the data world. Mastering Pandas is a prerequisite for success in any data scientist or machine learning engineer interview.</p></li><li><p><strong>Presenter:</strong> Jovian</p></li><li><p><strong>Course language:</strong> English only.</p></li><li><p><strong> <a href="https://jovian.com/learn/data-analysis-with-python-zero-to-pandas">Master the most important tool in the world of Python data from here</a> </strong></p></li></ul><div><hr></div><h2><strong>Conclusion: Don't just learn the language, specialize in it.</strong></h2><p>The approach is straightforward: Don&#8217;t try to learn Python in isolation. Instead, dive into it by focusing on a high-demand area like data science, machine learning, or cyber security.</p><p>Each of these certifications isn&#8217;t just a way to showcase your skills; it&#8217;s your gateway to a lucrative career. Getting a solid grip on Python within these fields is the quickest route to significantly boosting your market value as a tech professional.</p><p>Pick the area that excites you the most and start working towards a degree today. The choices you make now will shape your financial and professional future. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programmerspace.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Programmer Space! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Object Oriented Programming Made Easy✨: The 4+ OOP Concepts Explained with Analogies]]></title><description><![CDATA[Understanding the 4 core principles of OOP (plus composition and design patterns) with real-world analogies.]]></description><link>https://programmerspace.substack.com/p/object-oriented-programming-made</link><guid isPermaLink="false">https://programmerspace.substack.com/p/object-oriented-programming-made</guid><dc:creator><![CDATA[Boucodes]]></dc:creator><pubDate>Wed, 23 Apr 2025 02:36:56 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/161932275/4805a152a38ddc79121f9bb5bf502834.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>The podcast offers a deep dive of <strong>Object-Oriented Programming (OOP)</strong> principles and practices. It begins by defining OOP and tracing its <strong>history</strong>, then thoroughly examines <strong>key concepts</strong> like abstraction, inheritance, polymorphism, encapsulation and composition. It also introduces <strong>design patterns</strong> and <strong>principles</strong>, and how they are related to OOP.</p>]]></content:encoded></item><item><title><![CDATA[How to Estimate the Cost of Software Projects]]></title><description><![CDATA[The main methods for estimating the costs of developing apps and projects.]]></description><link>https://programmerspace.substack.com/p/how-to-estimate-the-cost-of-software</link><guid isPermaLink="false">https://programmerspace.substack.com/p/how-to-estimate-the-cost-of-software</guid><dc:creator><![CDATA[Boucodes]]></dc:creator><pubDate>Tue, 15 Apr 2025 02:21:30 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/161350814/317f99ede2f64c0384a54c3f985eafa7.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>This first episode of the 10xDev.Podcast features a discussion about the various costs associated with software development projects. The speakers break down the expenses involved in creating different types of software, including:</p><ul><li><p> web applications, </p></li><li><p>mobile apps, </p></li><li><p>enterprise systems, </p></li><li><p>and AI/ML projects, </p></li></ul><p></p><p>Emphasizing that costs are influenced by factors like complexity, features, design, and team location. They also explore common methods used for estimating these costs, such as analogous, bottom-up, and parametric estimation. The conversation provides rough cost ranges for different project scales and concludes by highlighting the intricate nature of software cost estimation and considering the potential impact of AI on future budgeting.</p><h2>Frequently Asked Questions: Understanding Software Development Costs</h2><p><strong>1. What are the primary factors that determine the cost of a software project?</strong> </p><p>The cost of a software project is influenced by a multitude of interconnected factors. These include the project&#8217;s complexity (ranging from simple static sites to intricate platforms), the number and sophistication of features (basic authentication vs. AI/ML integration), the design requirements (template vs. custom UI/UX), technical complexity (dynamic content, security), the development team&#8217;s location and associated hourly rates, the chosen technology stack, the project timeline (urgency), scalability needs, infrastructure requirements (hosting), and ongoing maintenance and support.</p><p><strong>2. What are the common methods used to estimate the cost of software projects?</strong> </p><p>Several methods are employed to estimate software project costs. Analogous estimation relies on the cost of similar past projects. Bottom-up estimation involves breaking down the project into individual tasks and estimating the cost of each. Parametric estimation uses historical data to establish statistical relationships between project parameters and costs. Three-point estimation considers optimistic, most likely, and pessimistic cost scenarios. Expert judgment leverages the experience of seasoned professionals. The Delphi method uses multiple rounds of anonymous feedback to reach a consensus. Finally, function point analysis measures the functional size of the software from the user&#8217;s perspective, independent of technology.</p><p><strong>3. How do the cost drivers differ between web applications and mobile applications?</strong> </p><p>While many cost drivers are similar (complexity, features, design, team location), mobile applications have unique considerations. The target platform (iOS, Android, or both) significantly impacts cost. Specific mobile features and integrations (e.g., payment gateways, geolocation, AR/VR) add to the expense. Back-end development is crucial for most mobile apps, and rigorous testing and quality assurance often constitute a larger portion of the budget (8-18%) compared to web applications. Feature-based estimation, linking cost directly to specific app features, is also more common for mobile projects.</p><p><strong>4. What makes enterprise software development significantly more expensive than web or mobile apps?</strong> </p><p>Enterprise software, designed for large organizations, involves a different scale of complexity and requirements. Key cost drivers include the project&#8217;s size and complexity (ranging from internal tools to company-wide systems), the use of specialized and often more expensive technologies, larger and more specialized development teams, the intricate process of system integration with existing infrastructure, stringent security and compliance requirements, the often substantial task of data migration, and the high degree of customization needed to meet specific business needs. Work breakdown structure (WBS) costing is a common estimation technique for these complex projects.</p><p><strong>5. What are the unique cost considerations for data science and AI/ML projects?</strong> </p><p>Data science and AI/ML projects have distinct cost drivers. The complexity of the problem being solved and the AI model&#8217;s sophistication are significant factors, with deep learning models being particularly expensive. The availability and quality of data are crucial, and data labeling can be a major expense. Computational resources, including cloud computing and specialized hardware (GPUs), contribute significantly to the cost. Highly skilled data scientists command premium salaries. The approach to model training, the deployment environment, and the ongoing maintenance and monitoring (which can consume 25-75% of initial resources annually) are also critical cost factors.</p><p><strong>6. How are the costs of data science and AI/ML projects typically estimated?</strong> </p><p>While familiar estimation techniques like analogous estimation, bottom-up, and expert judgment are still used, others are more specific to AI/ML. Top-down estimation involves starting with an overall budget and working backward. Parametric estimation can be applied based on factors like data size and computing needs. Due to the cutting-edge nature of these projects, estimation can be particularly challenging, and initial exploratory phases often have associated costs.</p><p><strong>7. Can you provide a general range of costs for different types of software projects?</strong> </p><p>Roughly, a simple web application might cost $3,000-$15,000, a medium complexity one $25,000-$45,000, and a complex one $50,000+. Simple mobile apps could range from $5,000-$15,000, moderately complex ones $50,000-$120,000, and highly complex ones $120,000-$300,000+. Small-scale enterprise projects might cost $100,000-$250,000, mid-size $250,000-$500,000, and large-scale $500,000+. Basic AI features might start around $20,000, while custom AI/ML solutions can easily exceed $500,000. Notably, initial research and market analysis can also cost a significant amount (e.g., up to $25,000 for web applications), and integration costs for enterprise systems can add 30-50% to the base estimate.</p><p><strong>8. How might the increasing integration of AI into software development affect future cost estimation?</strong> </p><p>The growing role of AI in software development has the potential to significantly alter cost estimation. As coding shifts from manual line-by-line writing to training algorithms on data, new metrics and budgeting approaches may emerge. Factors like data acquisition and preparation costs, the computational resources required for AI-driven development tools, and the expertise needed to manage these AI-powered processes could become more prominent in cost estimations. This shift necessitates a re-evaluation of traditional estimation methods and the development of new frameworks that account for the unique characteristics of AI-assisted software development.</p><p></p>]]></content:encoded></item><item><title><![CDATA[10xDev Newsletter #1: Vibe Coding, Clone UIs with AI; LynxJS - Tiktok New Framework; Python for Mobile Dev; New Angular 19, React 19, Laravel 12 Features; AI Fakers in Recruitment; Local-First Apps..]]></title><description><![CDATA[Issue #1 of 10xDev Newsletter for modern dev technologies, productivity, and devneurship in the era of AI!]]></description><link>https://programmerspace.substack.com/p/10xdev-newsletter-1-vibe-coding-clone</link><guid isPermaLink="false">https://programmerspace.substack.com/p/10xdev-newsletter-1-vibe-coding-clone</guid><dc:creator><![CDATA[Boucodes]]></dc:creator><pubDate>Fri, 21 Mar 2025 21:06:57 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/52755270-c4bd-49a4-89de-c83940bbd817_2861x1979.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>&#128172; Curious about where the future of coding is really headed?  Let&#8217;s dive into what&#8217;s shaping the next generation of developers. </strong></p><p></p><p><strong>In this first issue, we&#8217;ll see:</strong></p><ul><li><p>AI tools that are helping devs <strong>clone any UI</strong> and <strong>build software</strong> almost <strong>autonomously</strong>.</p></li><li><p>The rise of <strong>vibe coding</strong>&#8212;what it means, how prompt engineering is changing everything, and how to ride the AI wave as a developer.</p></li><li><p>TikTok is releasing a high-performance cross-platform mobile framework for building apps with just markup and CSS.</p></li><li><p>A new <strong>Python</strong> framework inspired by Flutter is quietly redefining cross-platform development. <strong>You need to check if you are a pythonista!</strong></p></li><li><p><strong>Single Executable Apps</strong> with Node.js. </p></li><li><p>New features of Angular 19 and React 19 are here&#8212;what&#8217;s new and what matters.</p></li><li><p>Learn how to run Angular applications without a build step using ES modules and <strong>TypeScript in the browser.</strong></p></li><li><p>Laravel 12 introduces <strong>Custom Starter Kits</strong>&#8212;to build faster, cleaner, and in your way.</p></li><li><p>Windows 95, running in an Electron app with JavaScript.</p></li><li><p>EA released the source code of classic C&amp;C titles like Tiberian Dawn, Red Alert, Renegade, and Generals</p></li><li><p>Local-first apps is more than a trend&#8212;it&#8217;s the future.</p></li><li><p>A TypeScript version that&#8217;s <em>10x faster</em>.</p></li><li><p>And why the traditional &#8220;full-time dev&#8221; job might soon be a thing of the past...</p></li><li><p>AI fakers exposed in tech dev recruitment: <em>Candidate used an AI face filter to pass a video interview.</em></p></li><li><p>Roblox announced the launch of an AI tool to <strong>generate 3D models</strong> using simple text prompts.</p></li><li><p>Python Developer Tooling Handbook.</p><p></p><p></p></li></ul><blockquote><p><em>The entire history of software engineering is that of the rise in levels of abstraction. </em><strong>Grady Booch.</strong> </p></blockquote><p></p><p>&#128172; <em><strong>We hope you will enjoy these readings as we did! </strong></em></p><p><em><span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Naima &#128150;&quot;,&quot;id&quot;:309663374,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8336064-320d-4372-b66f-33acdb3e747e_720x1003.jpeg&quot;,&quot;uuid&quot;:&quot;43c7d610-eb7f-4947-9a32-60c9be85ba8a&quot;}" data-component-name="MentionToDOM"></span> and <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Bou Codes&quot;,&quot;id&quot;:23755330,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b3ac2ff-a745-4470-9beb-802c75388524_400x400.jpeg&quot;,&quot;uuid&quot;:&quot;9a2c9897-ccbd-4918-b9b8-98608b4f2567&quot;}" data-component-name="MentionToDOM"></span> </em></p><p>&#128172; Let&#8217;s dive in &#8594;</p><div><hr></div><div><hr></div><div><hr></div><h2>Good to Read or Watch (Handpicked for Devs by Devs)</h2><h3><strong><a href="https://levelup.gitconnected.com/the-5-paid-subscriptions-i-actually-use-in-2025-as-a-staff-software-engineer-98033c94566e">The 5 paid subscriptions I actually use in 2025 as a Staff Software Engineer</a></strong></h3><p><strong>Author:</strong><em><strong> </strong>I care a lot about the tools I use. Especially when they aren&#8217;t free. Here&#8217;s what I&#8217;m paying for in 2025 to improve my performance and productivity as a software engineer.</em></p><blockquote><p>&#128172; Investing in the right tools is the fastest way to <strong>compound your efficiency</strong>. Think of these like leverage&#8212;if a tool saves you 30 minutes/day, it is going to pay for itself afterwards.</p></blockquote><h3><strong>&#127902;&#65039; <a href="https://www.youtube.com/watch?v=cBKHkm_rt4I&amp;ab_channel=ThrivingTechnologist">Helping a Dev Manager Focus on ACTION&#8212;Not Fear</a></strong></h3><p>Jamie coaches Ben, an engineering manager debating solopreneurship. They explore how to navigate fear and take smart action without burning bridges.</p><blockquote><p>&#128172; If you're thinking about making the jump from 9-to-5 to indie hacking, this is gold. Emotional agility is a core skill in <strong>devneurship</strong>&#8212;calm minds ship bold ideas.</p></blockquote><h4>More&#8230;</h4><ul><li><p><a href="https://rxdb.info/articles/local-first-future.html">Why Local-First Software Is the Future and what are its Limitations</a>: <em>Building with local-first in mind could future-proof your apps. Especially relevant for indie devs targeting emerging markets or privacy-first users.</em></p></li><li><p><a href="https://devblogs.microsoft.com/typescript/typescript-native-port/">A 10x Faster TypeScript</a>: <em>Today I&#8217;m excited to announce the next steps we&#8217;re taking to radically improve TypeScript performance. by Anders Hejlsberg. </em></p></li><li><p><a href="https://medium.com/gitconnected/why-full-time-developer-career-is-becoming-dead-and-what-s-replacing-it-1c661af09e57">Why &#8216;Full-Time Developer&#8217; Career Is Becoming Dead &#8212; And What&#8217;s Replacing It</a>: <em>Being a full-time developer used to be the ultimate career goal. A stable job, fat paycheck, and a path paved with endless coding challenges &#8212; but that dream is dying.</em></p></li><li><p><a href="https://dev.to/this-is-learning/building-single-executable-applications-with-nodejs-16k3">Building Single Executable Applications with Node.js</a>: <em>In this article, I'm sharing what I've learned about <strong>Single Executable Applications</strong>, a feature that fundamentally shifts how we package and distribute Node.js applications.</em></p></li></ul><h3><strong><a href="https://2ality.com/2025/03/typescript-sales-pitch.html">My sales pitch for TypeScript</a></strong></h3><blockquote><p>&#128172; Still debating TS? This might convert you. It&#8217;s about more than safety&#8212;it&#8217;s a tool for better collaboration and fewer bugs, aka <strong>faster shipping</strong>.</p></blockquote><h3><a href="https://dev.to/mnathani/two-lines-of-css-that-boosts-7x-rendering-performance-4mjd">Two lines of CSS that boosts 7x rendering performance!</a></h3><blockquote><p>&#128172; Tiny tweaks like this give your UI that buttery-smooth feel. <strong>Craftsmanship = growth</strong>, especially when you're building solo.</p></blockquote><h3><strong><a href="https://modernwebweekly.substack.com/p/modern-web-weekly-49">Finally, a customizable </a></strong><code>&lt;select&gt;</code></h3><p><em><strong>Author: </strong>After what seemed like an eternity, it looks like we'll finally get a fully stylable and customizable </em><code>&lt;select&gt;</code><em> on the web. I know, we should have had this 20 years ago. Standards take time and this took a long time.</em> </p><blockquote><p><strong>&#128172; User experience matters. Now there's no excuse for clunky UI.</strong></p></blockquote><p></p><div><hr></div><div><hr></div><h2>What&#8217;s New in Dev World</h2><h3>&#127911; <strong>Vibe Coding: The New Abstraction Layer</strong></h3><blockquote><p>&#128172; A new concept called <strong>vibe coding (or programming by prompt) </strong>is trending in the developer community. The term was coined by Andrej Karpathy in early 2025 to describe &#8220;fully giving in to the vibes&#8221; and almost forgetting that the code exists&#8203;:</p></blockquote><p><strong>Andrej Karpathy on X: </strong><em>There's a new kind of coding I call "vibe coding", where you fully give in to the vibes, embrace exponentials, and forget that the code even exists. I'm building a project or web app, but it's not really coding - I just see stuff, say stuff, run stuff, and copy paste stuff, and it mostly works.</em> <strong>.</strong></p><blockquote><p>&#128172; From early programming languages to modern frameworks and AI-assisted coding, the history of software development has been a continuous march toward higher levels of abstraction. Vibe coding is simply the latest step in that progression. </p><p>&#128172; Just like GUIs abstracted terminals, vibe coding abstracts code. <strong>Indie devs who master this will out-ship teams.</strong></p></blockquote><ul><li><p><a href="https://creatoreconomy.so/p/12-rules-to-vibe-code-without-frustration">12 Rules to Vibe Code Without Frustration</a>: <em>I&#8217;ve spent 50+ hours building apps with AI (e.g., plane simulator, Star Wars run, zombie shooter) and collected 200+ tips.</em></p><blockquote><p>&#128172; Think of this like the <strong>Zen of AI Dev</strong>. If you want to vibe code without chaos, start here.</p></blockquote></li><li><p><a href="https://dev.to/vorniches/vibe-coding-yeah-ive-been-doing-it-for-two-years-ea2?ahoy_click=true&amp;t=VAL5H9ZgG7elyeCZHB9pfz7d47QLiYqc&amp;s=fRsl5Hgo2ymHFRXL0KHDa1gf4dHO1Ugt3DMoEisJX94&amp;u=https%253A%252F%252Fdev.to%252Fvorniches%252Fvibe-coding-yeah-ive-been-doing-it-for-two-years-ea2">Vibe Coding? Yeah, I've Been Doing it for Two Years</a>: <em>Not long ago, I stumbled across the term "vibe coding" and was kinda blown away. Turns out, the way I've been slapping together my apps for the last two years &#8211; with minimal hand-written code and maximum automation via neural networks &#8211; now has a trendy name. In this post, I'll share my tools for pair programming with AI and some thoughts on where this whole thing is heading.</em></p></li></ul><h3><strong>&#127902;&#65039; <a href="https://x.com/i/broadcasts/1ZkKzYanozoxv">LynxJS: First Impressions, Live Coding &amp; What&#8217;s Under the Hood</a></strong></h3><p><em>This talk discusses ByteDance&#8217;s new JavaScript framework, LynxJS, which is already in production for millions of users. It highlights Lynx&#8217;s performance, its framework-agnostic nature, and potential impact on the React Native ecosystem. The framework is polished for an early release, but questions remain about native module support. Early adopters have an opportunity to shape its development.</em></p><blockquote><p>&#128172; ByteDance, the company behind TikTok, has released <strong><a href="https://lynxjs.org/index.html?ref=tuliocalil.com">Lynx</a></strong>, a new framework that has a goal to revolutionize mobile app development, positioning itself as a competitor to React Native. <strong>Worth keeping an eye on if you&#8217;re building mobile-first.</strong></p></blockquote><h3><a href="https://www.callstack.com/blog/were-building-a-new-react-native-framework">We&#8217;re Building a New React Native Framework</a></h3><p><em>This new React Native framework speeds up enterprise app development with smart native build caching on CI with ability to reuse these builds across workflows, end-to-end tests, and local developers environments thanks to integrated CLI&#8212;all while staying flexible and self-hosted. </em></p><blockquote><p>&#128172; This is a gift for startup founders and indie makers.</p></blockquote><h4>More..</h4><ul><li><p><a href="https://astro.build/blog/astro-550/">Astro 5.5 - Type-safe sessions, better Mermaid diagrams integration</a>: Astro 5.5 dives deep with better support for diagramming tools, improved Markdown compatibility, and type-safe sessions!</p></li><li><p><a href="https://nodejs.org/en/blog/announcements/official-discord-launch-announcement">Node.js Launches Official Community Space on Discord</a>: The OpenJS Foundation and Reactiflux have collaborated to bring forth an official Discord community for Node.js &#127881;</p><p></p></li></ul><blockquote><p>&#128172; The dev world isn&#8217;t slowing down. Staying updated = staying <strong>relevant and hireable</strong>.</p></blockquote><div><hr></div><h2>What&#8217;s New in Tech World</h2><blockquote><p>&#128172; An Adobe survey of 5,000 US consumers found that <strong>55%</strong> use AI for research, <strong>39%</strong> for shopping, and <strong>53%</strong> plan to start using it.</p></blockquote><ul><li><p>&#127902;&#65039; <a href="https://www.youtube.com/watch?v=wrvWlFx1veY&amp;ab_channel=PromptEngineering">Google Gemini 2.0 Flash is insane </a>: <em>Edit images by prompt. Remove watermarks. Wild!</em></p><blockquote><p>&#128172; If you're building content products, this is your new <strong>creative co-pilot</strong>.</p></blockquote></li><li><p><a href="https://newsletter.pragmaticengineer.com/p/ai-fakers">AI fakers exposed in tech dev recruitment: postmortem</a>: <em>Candidate used an AI face filter to pass a video interview. Wild!</em></p></li><li><p><a href="https://github.com/antiwork/helper">Helper.ai</a>: <em>Helper is an open-source AI-powered customer support automation platform. Manage all support from one place with AI help.</em></p><blockquote><p>&#128172; If you&#8217;re solo-building and dread support emails.</p></blockquote></li><li><p><a href="https://corp.roblox.com/newsroom/2025/03/introducing-roblox-cube">Roblox</a> has announced the launch of "Cube," an AI tool that allows creators to <strong>generate 3D models</strong> using simple text prompts</p></li><li><p><a href="https://techcrunch.com/2025/03/16/photo-calorie-app-cal-ai-downloaded-over-a-million-times-was-built-by-two-teenagers/">Cal AI</a>, co-founded by teens Zach Yadegari and Henry Langmack, has gained 5 million downloads and <strong>$2 million in revenue</strong> since its May launch</p></li><li><p><a href="https://www.linkedin.com/posts/emollick_i-regret-to-announce-that-the-meme-turing-activity-7307199008630816769-uHdp/">Recent findings</a> indicate that large language models (LLMs) have surpassed the average human in <strong>creating humorous memes</strong></p></li><li><p><a href="https://github.com/felixrieseberg/windows95">Windows 95 in Electron</a>: Windows 95, running in an Electron app with JavaScript. V4.0 adds Office 95 and IE 5.5 for some (limited) browsing of the Web.</p></li><li><p><a href="https://github.com/electronicarts">Command &amp; Conquer Source Code Released</a>: EA released the source code of classic C&amp;C titles like Tiberian Dawn, Red Alert, Renegade, and Generals.</p></li></ul><div><hr></div><div><hr></div><h2>What&#8217;s New in Angular</h2><div><hr></div><blockquote><p>&#128172; Angular's community is growing! There's been a noticeable increase in retention, usage, and positivity among developers, largely thanks to the introduction of standalone components and signals. This shift has made Angular more encouraging for new developers to dive into.</p></blockquote><p></p><h3><strong><a href="https://blog.angular.dev/angular-19-2-is-now-available-673ec70aea12">Angular 19.2 Is Now Available</a></strong></h3><p><em>And we&#8217;re back with Angular&#8217;s latest minor release, version 19.2, bringing new APIs and experimental features to empower developers on their next great app.</em></p><h3><strong><a href="https://medium.com/@sparklewebhelp/angular-19-the-ultimate-guide-for-developers-in-2025-b5a3896452c9">Angular 19: The Ultimate Guide for Developers in 2025</a></strong></h3><p><em>Angular 19 is packed with tools to make your applications faster and more efficient. Dive into our comprehensive overview to discover all the exciting updates and learn how they can elevate your projects to the next level.</em></p><h4>More..</h4><ul><li><p><a href="https://www.angulararchitects.io/en/blog/learning-httpresource-with-super-mario/">Angular's new httpResource</a></p></li><li><p><a href="https://dev.to/oz/starting-a-modern-angular-application-34h6">Starting a Modern Angular Application</a></p></li><li><p><a href="https://edbzn.dev/nobuild-angular/">Running Angular without build tools, Node.js or npm</a>: <em>Learn how to run Angular applications without a build step using ES modules and TypeScript in the browser.</em></p></li><li><p> <a href="https://dev.to/this-is-angular/two-way-bind-a-signal-input-object-value-with-ngmodel-1c2a">Two-way bind a Signal Input object value with [(ngModel)]</a></p></li></ul><p></p><div><hr></div><h2>What&#8217;s New in React</h2><blockquote><p>&#128172; React continues to evolve fast. Knowing the latest is key to <strong>staying employable and building better</strong>.</p></blockquote><div><hr></div><h3><strong><a href="https://cyboxs.com/getting-started-with-react-19-and-vite/">Getting Started with React 19 and Vite</a></strong></h3><p><em>React has long been a favorite among developers for building dynamic and high-performance user interfaces. With the release of React 19, the library introduces improved features, better performance, and new capabilities to streamline the development process. Pairing React with Vite, a fast and modern build tool, takes the experience to the next level.</em></p><h4>More..</h4><ul><li><p><a href="https://mui.com/blog/react-19-update/">How we migrated MUI X to React 19</a></p></li><li><p><a href="https://blog.carlosn.com.br/post/writing-static-websites-with-vite-and-react/">Writing static websites with Vite and React</a></p></li><li><p><a href="https://www.epicweb.dev/tips/upgrading-react-router">Epic Web Dev - Upgrading React Router</a></p></li><li><p><strong>&#127902;&#65039; <a href="https://www.youtube.com/watch?v=nHnw3pusFXw&amp;ab_channel=WebDevSimplified">Next.js Finally Fixed Caching</a> </strong></p></li><li><p><a href="https://x.com/aleqsio/status/1902034184920584538">expo/ui will launch with Expo SDK 53</a></p></li><li><p><a href="https://www.callstack.com/ebook/the-ultimate-guide-to-react-native-optimization">Ultimate Guide to React Native Optimization 2025</a> </p><p></p></li></ul><h2>What&#8217;s New in Vue</h2><p></p><p><a href="https://app.weekly-vue.news/link/45cb1ecf-5082-40c8-80c5-ba2d4230c106/1c5b921c-86c7-414c-a9fa-d66a06bdee63/e2ace563-07fe-4aff-ba6c-a650a0ed88e3">Nuxt UI v3 is out</a>: This major redesign brings improved accessibility, Tailwind CSS v4 support, and full Vue compatibility.</p><blockquote><p>&#128172; Nuxt UI v3 = Faster Dev for Vue Hackers.</p></blockquote><h2>What&#8217;s New in Laravel</h2><div><hr></div><p><strong><a href="https://www.youtube.com/watch?v=mjSwVWhgpGc&amp;ab_channel=LaravelDaily">Laravel 12.2 Introduces Custom Starter Kits</a>: </strong>Laravel 12 Starter Kits: What You Need To Know</p><blockquote><p>&#128172; Laravel&#8217;s batteries-included setup makes it ideal for shipping MVPs fast.</p></blockquote><p></p><div><hr></div><div><hr></div><h2>What&#8217;s New in Python</h2><blockquote><p>&#128172; Check these resources if you are a pythonista!</p></blockquote><p></p><h3><strong><a href="https://www.youtube.com/watch?v=4aiNStwq8oU&amp;ab_channel=BugBytes">Flet - Desktop &amp; Mobile apps in Python!</a> </strong></h3><p><em>This video tutorial demonstrates how to use the Flet framework in Python to build cross-platform mobile and desktop apps, even without prior front-end development experience. It walks through creating a simple quiz application, explaining how to structure the UI with Flet controls and handle user interactions.</em></p><blockquote><p>&#128172; Python is sneaking into front-end web and mobile territory. If you&#8217;re a Pythonista, this is your golden ticket to fullstack web and mobile development.</p></blockquote><h4>More..</h4><ul><li><p><strong><a href="https://www.youtube.com/watch?v=leir3xJ4Klo&amp;ab_channel=CitusData">Why Python developers just use Postgres with Dawn Wages</a>: </strong><em>Why Python and Django developers favor PostgreSQL. </em></p></li><li><p><strong><a href="https://www.youtube.com/watch?v=tc713anE3UY&amp;ab_channel=ArjanCodes">How to Make Your Python Docker Image 80% Smaller</a> </strong><em>A step-by-step guide to creating optimized and efficient Docker images for Python applications..</em></p></li><li><p><strong><a href="https://marimo.io/blog/python-not-json">Reinventing notebooks as reusable Python programs</a>: </strong><em>Marimo reinvents Python notebooks as reusable Python programs by storing them as plaintext .py files..</em></p></li><li><p><strong><a href="https://www.djangoproject.com/weblog/2025/mar/19/django-52-rc1/">Django 5.2 release candidate 1 released</a></strong></p></li></ul><p></p><h2>AI for Developers</h2><div><hr></div><blockquote><p>&#128172; AI won&#8217;t take your job, but a person using AI might. Don&#8217;t get left behind. Learn to <strong>leverage AI!</strong></p></blockquote><h3><strong><a href="https://blog.sshh.io/p/how-cursor-ai-ide-works">How Cursor (AI IDE) Works</a></strong></h3><p><em>Understanding how AI coding tools like Cursor, Windsurf, and Copilot function under the hood can greatly enhance your productivity, enabling these tools to work more consistently &#8212; especially in larger, complex code bases.</em></p><blockquote><p>&#128172; Knowing the engine helps you optimize the ride.</p></blockquote><h4>More..</h4><ul><li><p><a href="https://www.sitepoint.com/prompt-engineering-for-web-development/">Prompt Engineering for Web Development</a>: <em>Everyone should know how to prompt. by Kevin Leary. </em>Prompt fluency is the <strong>next dev literacy</strong>.</p></li><li><p><a href="https://refactoring.fm/p/how-engineering-teams-use-ai">How Engineering Teams are Using AI </a>: <em>Reporting on real-world use cases and stories.</em></p></li><li><p><a href="https://www.newline.co/@zaoyang/how-to-build-complete-fullstack-apps-in-less-than-an-afternoon-with-bolt-supabase--ab33ac05">How To Build Complete Fullstack Apps In Less Than An Afternoon With Bolt + Supabase</a></p><blockquote><p>&#128172; Time-to-ship is everything in early-stage devpreneurship. Tools like this give you unfair speed.</p></blockquote></li><li><p><a href="https://www.raymondcamden.com/2025/03/19/creating-images-with-generative-ai-via-conversation">Creating Images with Generative AI via Conversation</a>: <em>How to build a simple chat interface with Python and Gemini to edit images using prompts.</em></p></li></ul><div><hr></div><h2>Interesting Tools, Projects and Libraries</h2><blockquote><p>&#128172; These are not just tools. They&#8217;re shortcuts. Every tool you master becomes a multiplier on your creative output.</p></blockquote><ul><li><p><strong><a href="https://same.new">Same.dev</a>: </strong>A fantastic web application that lets you clone any UI.</p></li><li><p><strong><a href="https://github.com/ai-christianson/RA.Aid">RA.Aid</a>: </strong>RA.Aid helps you develop software autonomously. </p></li><li><p><strong><a href="https://github.com/xataio/agent">Xata Agent, your AI expert in PostgreSQL</a>: </strong>An open source agent that monitors your database, finds root causes of issues, and suggests fixes and improvements.</p></li><li><p><a href="https://github.com/antfu/node-modules-inspector">Node Modules Inspector</a>: Interactive UI for local node modules inspection</p></li><li><p><strong><a href="https://github.com/xpipe-io/xpipe">XPipe</a>: </strong>A new type of shell connection hub and remote file manager that allows you to access your entire server infrastructure from your local machine. </p></li><li><p><strong><a href="https://www.jerpint.io/blog/python-shelve-as-cache/">Python&#8217;s &#8216;shelve&#8217; is really useful for LLM debugging</a>: </strong>You can use the builtin Python&#8217;s shelve as a quick and easy, persistent key-value store for LLM workflows.</p></li></ul><h2>Books </h2><div><hr></div><p><strong><a href="https://pydevtools.com/handbook/">Python Developer Tooling Handbook</a></strong></p><p><em>This handbook help Python developers learn about the ecosystem of tools that enhance productivity, covering areas like packaging, linting, formatting, and dependency management.</em></p><blockquote><p>&#128172; Tooling = scaling. If you write Python, this is a must-read for shipping cleaner and faster.</p></blockquote><div><hr></div><h2>Coming Soon!</h2><p><strong>10xDev.Blog:</strong> Our goal is to reorganize the free knowledge scattered across the internet for developers&#8212;connecting the dots between what truly helps you achieve multiple goals: boosting your productivity (and actually living your life), growing in your career, and exploring paths beyond the 9-5&#8212;like freelancing, devneurship, and indie hacking&#8212;by leveraging AI and modern or trending technologies in the dev community.</p>]]></content:encoded></item><item><title><![CDATA[📜 JavaScript Deep Dive #1: Demystifying Closures]]></title><description><![CDATA[Demystifying closures&#8212; with short examples, real-world analogy, and a quick challenge, plus free and paid resources to gain more knowledge.]]></description><link>https://programmerspace.substack.com/p/javascript-deep-dive-1-demystifying</link><guid isPermaLink="false">https://programmerspace.substack.com/p/javascript-deep-dive-1-demystifying</guid><dc:creator><![CDATA[Boucodes]]></dc:creator><pubDate>Wed, 12 Feb 2025 22:53:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!qD2V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a88a39-11f2-4d61-ab0f-8d5d71e94302_700x467.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ever wondered how some JavaScript functions seem to &#8220;remember&#8221; variables even after they&#8217;ve finished running? That&#8217;s referred to as <strong>closures</strong>&#8212; one of JavaScript&#8217;s most powerful (but little confusing) features.</p><p>In this guide, you&#8217;ll learn:<br>&#128313; How closures <strong>preserve data</strong> in functions.<br>&#128313; Why they&#8217;re essential for <strong>state management and encapsulation</strong>.<br>&#128313; Common pitfalls <strong>(and how to avoid them)</strong>.<br>&#128313; How closures power <strong>React Hooks, event handlers, and async code</strong>.<br>&#128313; How they compare to similar features in <strong>Python, Java, and C++</strong>.</p><p>By the end of this article, we&#8217;ll make sure you understand closures correctly&#8212; with short examples, real-world analogy, and a quick challenge plus free and paid resources for more knowledge. Ready to dive in? &#128640;</p><blockquote><p>&#8220;A fool thinks himself to be wise, but a wise man knows himself to be a fool.&#8221; &#8212; William Shakespeare</p></blockquote><p>Closures might seem simple, but they can confuse even experienced developers. Let&#8217;s break them down properly.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qD2V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a88a39-11f2-4d61-ab0f-8d5d71e94302_700x467.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qD2V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a88a39-11f2-4d61-ab0f-8d5d71e94302_700x467.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qD2V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a88a39-11f2-4d61-ab0f-8d5d71e94302_700x467.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qD2V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a88a39-11f2-4d61-ab0f-8d5d71e94302_700x467.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qD2V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a88a39-11f2-4d61-ab0f-8d5d71e94302_700x467.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qD2V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a88a39-11f2-4d61-ab0f-8d5d71e94302_700x467.jpeg" width="700" height="467" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/27a88a39-11f2-4d61-ab0f-8d5d71e94302_700x467.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:467,&quot;width&quot;:700,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!qD2V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a88a39-11f2-4d61-ab0f-8d5d71e94302_700x467.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qD2V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a88a39-11f2-4d61-ab0f-8d5d71e94302_700x467.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qD2V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a88a39-11f2-4d61-ab0f-8d5d71e94302_700x467.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qD2V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a88a39-11f2-4d61-ab0f-8d5d71e94302_700x467.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>&#129504; Introduction: What Are Closures and Why Do They Matter?</strong></h2><p>Simply put: In JavaScript closures are functions (called <strong>inner functions</strong>) defined inside other functions (<strong>referred to as outer functions</strong>) which give them a special power &#8212; the access to the outer variables and scope even after the outer function has finished executing!</p><p>Now before, continuing with the technical side, imagine you have a <strong>vault</strong>, and only a <strong>special key</strong> can open it. This key isn&#8217;t available to the world&#8212; instead only a trusted person can have it!</p><p>Even if the vault is locked and becomes inaccessible to others, the trusted person still holds the key and can access the vault&#8217;s contents whenever needed.</p><p>Let&#8217;s now map these concepts to closures!</p><p><strong>Closures</strong> work the same way as the previous analogy: the inner function (which is the trusted person) retains access to the variables (contents) of its outer function (vault), even after the outer function has finished executing (i.e not accessible to everyone); inner function can still have access the variables.</p><blockquote><p><em><strong>Analogy Breakdown &#128272;</strong><br>1&#65039;&#8419; <strong>The vault is created</strong> &#8594; A function is defined.<br>2&#65039;&#8419; <strong>Contents</strong> <strong>are</strong> <strong>stored inside the vault</strong> &#8594; Variable are declared inside the defined function.<br>3&#65039;&#8419; <strong>Only a trusted person can access the vault </strong>&#8594; Only an inner function; defined inside the outer function; has access to the variables, but the outside code doesn&#8217;t.</em></p></blockquote><p>If you have a better analogy, please leave it in the comments :)</p><h2><strong>&#128313; Why Are Closures Useful?</strong></h2><p>Closures are useful because they make it very easy to implement:</p><p>&#9989; <strong>Data Privacy</strong> (Preventing Global Pollution)<br>&#9989; <strong>State Persistence</strong> (Keeping Values Even After Execution)<br>&#9989; <strong>Function Factories</strong> (Returning Customized Functions)<br>&#9989; <strong>Event Listeners, Async Operations, and Module Patterns</strong></p><h2><strong>&#128187; Example: Understanding Closures Step by Step</strong></h2><p>Let&#8217;s now try to understand closures with an example!</p><h2><strong>&#128313; Without Closures: Variables Don&#8217;t Persist</strong></h2><p>Let&#8217;s define a simple function in JavaScript with a variable and call it twice:</p><pre><code>function counter() {
  let count = 0;
  count++;
  return count;
}

console.log(counter()); // 1
console.log(counter()); // 1 (Resets every time)</code></pre><p>&#128308; <strong>Behavior:</strong> Every time <code>counter()</code> is called, <code>count</code> is reset. This is an expected behavior and nothing is wrong about it, but what If we need some extra features without so much code! In our case, we need to implement the intended functionality of a counter!</p><h2><strong>&#9989; Enter Closures: Keeping Values Across Calls</strong></h2><p>Let&#8217;s suppose we need to create a counter; here is how we can do it very easily with closures:</p><pre><code>function createCounter() {
  let count = 0; // Private variable
  return function () {
    count++; 
    return count;
  };
}
const myCounter = createCounter();
console.log(myCounter()); // 1
console.log(myCounter()); // 2
console.log(myCounter()); // 3</code></pre><p>&#9989; By simply defining a function inside another function; we get:</p><ul><li><p><strong>Data Persistence:</strong> <code>count</code> retains its value across calls.</p></li><li><p><strong>Encapsulation:</strong> <code>count</code> is protected; no direct access.</p></li><li><p><strong>Re-usability:</strong> Multiple independent counters can be created.</p></li></ul><h2><strong>&#9888;&#65039; Beginner Pitfalls &amp; How to Overcome Them</strong></h2><p>&#128308; <strong>1. Expecting closures to copy variables instead of reference them</strong><br><strong>Issue:</strong> Many beginners think closures store a <strong>copy</strong> of the variable at the time of function creation. Instead, they keep a <strong>reference</strong> to the original variable.</p><p><strong>Example: Unexpected </strong><code>setTimeout</code><strong> behavior</strong></p><pre><code>for (var i = 1; i &lt;= 3; i++) {
  setTimeout(() =&gt; console.log(i), 1000);
}
// Logs: 4, 4, 4 (instead of 1, 2, 3)</code></pre><p>&#9989; <strong>Fix:</strong> Use <code>let</code> to create a block-scoped variable.</p><pre><code>for (let i = 1; i &lt;= 3; i++) {
  setTimeout(() =&gt; console.log(i), 1000);
}
// Correctly logs: 1, 2, 3</code></pre><h2><strong>&#128270; Think Like a Compiler: How Closures Work Internally</strong></h2><p>Closures are possible because of <strong>lexical scoping</strong>:</p><ul><li><p>When a function is created, it remembers the <strong>scope where it was declared</strong>.</p></li><li><p>Even after the outer function <strong>finishes execution</strong>, its variables are <strong>not destroyed</strong> if they are referenced inside a closure.</p></li></ul><p><strong>Example Visualization:</strong></p><pre><code>function outer() { 
  let a = 10;
  return function inner() { console.log(a); }
}
const fn = outer();
fn(); // Logs 10 (Even though `outer()` has finished)</code></pre><p>&#128204; <strong>Memory is only freed when there are no references to the closure.</strong></p><h2><strong>&#9889; Closures in the Wild: Real-World Applications</strong></h2><p>&#128313; <strong>1. Avoiding Global Variables (Data Privacy)</strong></p><pre><code>function bankAccount(initialBalance) {
  let balance = initialBalance;
  return {
    deposit(amount) {
      balance += amount;
      console.log(`New Balance: ${balance}`);
    },
    withdraw(amount) {
      if (amount &gt; balance) {
        console.log("Insufficient funds!");
      } else {
        balance -= amount;
        console.log(`New Balance: ${balance}`);
      }
    },
    getBalance() {
      return balance;
    }
  };
}

const myAccount = bankAccount(100);
myAccount.deposit(50);  // New Balance: 150
myAccount.withdraw(30); // New Balance: 120
console.log(myAccount.getBalance()); // 120</code></pre><p>&#9989; <strong>Here, </strong><code>balance</code><strong> is private and only accessible through methods!</strong></p><p>&#128313; <strong>2. Closures in React&#8217;s </strong><code>useState</code><strong> (Modern Web Development)</strong></p><pre><code>function Counter() {
  const [count, setCount] = React.useState(0);</code></pre><pre><code>  return (
    &lt;button onClick={() =&gt; setCount(count + 1)}&gt;
      Count: {count}
    &lt;/button&gt;
  );
}</code></pre><p>&#9989; <strong>Closures allow </strong><code>setCount</code><strong> to remember the previous state.</strong></p><h2><strong>&#128260; Closures in Other Languages (If You Come From&#8230;)</strong></h2><p>&#128313; <strong>Python (Similar: Inner Functions &amp; </strong><code>nonlocal</code><strong>)</strong><br>Closures in Python work similarly using <strong>inner functions and </strong><code>nonlocal</code>:</p><pre><code>def counter():
    count = 0
    def increment():
        nonlocal count
        count += 1
        return count
    return increment

my_counter = counter()
print(my_counter())  # 1
print(my_counter())  # 2</code></pre><p>&#128313; <strong>Java (No Direct Equivalent, but Similar to Anonymous Classes)</strong><br>Java doesn&#8217;t have true closures, but anonymous classes with <strong>final variables</strong> behave similarly.</p><p>&#128313; <strong>C++ (Lambdas Capture State)</strong></p><pre><code>std::function&lt;int()&gt; createCounter() {
    int count = 0;
    return [=]() mutable { return ++count; };
}</code></pre><p>&#9989; <strong>Closures in C++ are captured in lambdas, just like JavaScript functions.</strong></p><h2><strong>&#128736;&#65039; If You Understand This, Try&#8230; (Challenge Section)</strong></h2><p>&#128313; <strong>Challenge: Implement a function that only runs once using closures.</strong></p><pre><code>function once(fn) {
  let ran = false;
  return function (...args) {
    if (!ran) {
      ran = true;
      return fn(...args);
    }
  };
}

const init = once(() =&gt; console.log("This runs only once!"));
init(); // Runs &#9989;
init(); // Doesn't run &#10060;</code></pre><p>&#9989; <strong>Used in JavaScript libraries like Lodash!</strong></p><h2><strong>&#128214; Learn More: Best Books &amp; Resources on Closures</strong></h2><h2><strong>&#128218; Free Resources</strong></h2><ul><li><p><strong><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures">MDN Docs on Closures</a></strong> &#8212; Official Mozilla documentation.</p></li><li><p><strong><a href="https://javascript.info/closure">JavaScript.info: Closures</a></strong> &#8212; A well-explained article with examples.</p></li></ul><h2><strong>&#128176; Paid Books for Deep Understanding</strong></h2><ul><li><p><strong>&#8220;You Don&#8217;t Know JS: Scope &amp; Closures&#8221;</strong> by Kyle Simpson &#8212; The ultimate guide to closures and scope.</p></li><li><p><strong>&#8220;JavaScript: The Good Parts&#8221;</strong> by Douglas Crockford &#8212; Covers closures as a fundamental JS feature.</p></li></ul><h2><strong>&#127919; Conclusion: Why Closures Are Essential</strong></h2><p>Closures allow functions to <strong>&#8220;remember&#8221;</strong> data even after execution. They help in <strong>data privacy, function factories, and efficient state management</strong>.</p><p>Next time you use <code>setTimeout</code>, event listeners, or create custom counters, remember to leverage <strong>closures</strong>! These "backpacks" of data make your functions more powerful by letting them carry around the variables they need, even after the outer function is gone.</p><p>What JavaScript concept should we break down next? &#128640;</p>]]></content:encoded></item><item><title><![CDATA[🚀 "JavaScript Will Break Your Brain" – 7 Concepts That Confuse Beginners (Until They Don’t)]]></title><description><![CDATA[We&#8217;ll break down 7 of the most confusing JavaScript concepts using simple explanations, analogies, and examples.]]></description><link>https://programmerspace.substack.com/p/javascript-will-break-your-brain</link><guid isPermaLink="false">https://programmerspace.substack.com/p/javascript-will-break-your-brain</guid><dc:creator><![CDATA[Boucodes]]></dc:creator><pubDate>Fri, 07 Feb 2025 22:14:51 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/ab325e5b-3690-406e-9a8b-6ccd26a16740_768x512.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>JavaScript is an incredibly powerful language and it&#8217;s everywhere today! But it comes with quirks that confuse beginners and even experienced developers. Concepts like <code>this</code>, closures, hoisting, and the event loop often lead to unexpected behaviors, making debugging a nightmare. Understanding these tricky parts of JavaScript is like going through levels in a game&#8212;you&#8217;ll write cleaner, more efficient code and spend less time fixing weird bugs. In this post, we&#8217;ll break down <strong>7 of the most confusing JavaScript concepts</strong> using simple explanations, analogies, and examples. Whether you&#8217;re struggling with scope, asynchronous behavior, or inheritance, this post will try to make them clear in your mind&#128640;</p><p></p><h2><strong>Too Long to Read? (TLTR)</strong></h2><p>If you&#8217;re short on time, here&#8217;s the gist:</p><ol><li><p><code>this</code><strong> Keyword:</strong> It changes its value depending on how a function is called. Use <code>bind()</code>, <code>call()</code>, or <code>apply()</code> to control it.</p></li><li><p><strong>Closures:</strong> Functions that "remember" their parent&#8217;s variables. Great for encapsulation and avoiding globals.</p></li><li><p><strong>Hoisting:</strong> JavaScript moves declarations to the top of their scope. Use <code>let</code> and <code>const</code> to avoid surprises.</p></li><li><p><strong>Event Loop:</strong> JavaScript handles asynchronous tasks using a single-threaded event loop. Think of it as a chef managing orders in a kitchen.</p></li><li><p><strong>Prototypal Inheritance:</strong> Objects inherit properties and methods from other objects. JavaScript also supports <code>class</code> syntax, but it&#8217;s still prototypal under the hood.</p></li><li><p><code>==</code><strong> vs </strong><code>===</code><strong>:</strong> Always use <code>===</code> to avoid type coercion surprises.</p></li><li><p><code>async/await</code><strong>:</strong> The modern way to handle asynchronous code without falling into callback hell.</p></li></ol><p>Now, let&#8217;s dive in more details!</p><p>Starting with a quote from everyone who&#8217;s ever used JS before:</p><blockquote><p><em>&#8220;JavaScript is easy to learn but hard to master.&#8221;</em> &#8211; Everyone who&#8217;s ever used JavaScript</p></blockquote><p>JavaScript has many <strong>quirks</strong> that make most beginners confused if not scratching their head. One moment, your code works perfectly. The next, you&#8217;re staring at an error message thinking: <em>&#8220;Why the hell I&#8217;m learning this?&#8221;</em></p><p>The truth? Some JavaScript concepts <strong>just don&#8217;t behave like you expect</strong>. But once you understand them, everything becomes clearer.</p><p>Here are <strong>7 JavaScript concepts that will confuse you at first&#8212;but understanding them will make you a better JS developer.</strong></p><h2>1. The <code>this</code> Keyword &#8211; &#8220;Who Am I?&#8221;</h2><p>Imagine you&#8217;re at a party. Someone yells, <em>&#8220;Hey, come here!&#8221;</em> If you don&#8217;t know who they&#8217;re talking to, you will be confused!</p><p>In JavaScript, <code>this</code> has the same problem&#8212;it depends on <em>how</em> the function is called. Think of <code>this</code> as a chameleon: it changes its color (value) depending on where it is and how it&#8217;s used.</p><h3>How <code>this</code> Works?</h3><p>So, how <code>this</code> works?</p><ul><li><p><strong>In a regular function (non-strict mode):</strong> <code>this</code> is the <strong>global object</strong> (<code>window</code> in browsers).</p></li><li><p><strong>In a regular function (strict mode):</strong> <code>this</code> is <code>undefined</code>.</p></li><li><p><strong>Inside an object method:</strong> <code>this</code> refers to <strong>the object itself</strong>.</p></li><li><p><strong>In an arrow function:</strong> <code>this</code> is &#8220;borrowed&#8221; from the surrounding scope (lexical <code>this</code>).</p></li></ul><h4>Example 1: Regular Function (Confusing Behavior)</h4><p>Let&#8217;s get started with the first example:</p><pre><code><code>function sayHi() {
  console.log(this);
}

sayHi(); // &#128680; Logs: window (in browsers, non-strict mode)
</code></code></pre><p>In non-strict mode, <code>this</code> defaults to the global object. But in strict mode, it&#8217;s <code>undefined</code>:</p><pre><code><code>function sayHi() {
  "use strict";
  console.log(this);
}

sayHi(); // &#128680; Logs: undefined (strict mode)
</code></code></pre><p>The function doesn&#8217;t belong to any object, so <code>this</code> behaves differently depending on the mode.</p><blockquote><p>&#128221; <strong>Note:</strong> Strict mode is a way to fix JavaScript by allowing developers to opt into a stricter version of JavaScript. It helps you write safer code by catching common mistakes and preventing the use of certain error-prone features. For example:</p><ul><li><p>Assigning to undeclared variables throws an error.</p></li><li><p><code>this</code> in regular functions is <code>undefined</code> instead of the global object.</p></li><li><p>Deleting variables, functions, or function arguments is not allowed.</p></li></ul><p>To enable strict mode, simply add <code>"use strict";</code> at the top of your script or function. It&#8217;s like turning on a "safety net" for your code&#8212;it helps you avoid pitfalls and write cleaner, more predictable JavaScript code!</p></blockquote><h4>Example 2: Object Method (Expected Behavior)</h4><p>Move on the second example:</p><pre><code><code>const person = {
  name: "Boucodes",
  greet() {
    console.log(this.name);
  }
};

person.greet(); // &#9989; Logs: "Boucodes"
</code></code></pre><p>Here, <code>this</code> correctly refers to <code>person</code> because <code>greet()</code> is called as a method of <code>person</code>. Think of <code>this</code> as pointing to the owner of the function.</p><h4>Example 3: Arrow Functions (Surprising Behavior)</h4><p>Now, let&#8217;s see the third example:</p><pre><code><code>const obj = {
  name: "Bob",
  greet: () =&gt; {
    console.log(this.name);
  }
};

obj.greet(); // &#128680; Logs: undefined (because arrow functions don&#8217;t have their own `this`)
</code></code></pre><p>Arrow functions don&#8217;t have their own <code>this</code>. Instead, they inherit <code>this</code> from the surrounding scope, which in this case is the global scope (or <code>undefined</code> in strict mode). Think of arrow functions as borrowing <code>this</code> from their parent.</p><blockquote><p>&#128640; <strong>Quick Fix:</strong> Use <code>bind()</code>, <code>call()</code>, or <code>apply()</code> when needed. Or just use <strong>arrow functions carefully</strong>!</p></blockquote><h2>2. Closures &#8211; JavaScript&#8217;s Memory Backpack &#127890;</h2><p>A closure is like a <strong>backpack</strong> for a function&#8212;it carries its parent&#8217;s variables wherever it goes. Imagine you&#8217;re going on a trip, and you pack a few essentials in your backpack. Even after you leave home, you still have access to those items.</p><p>Closures work the same way: they allow a function to &#8220;remember&#8221; the environment in which it was created, even after that environment is gone.</p><h3><strong>Why Closures Matter?</strong></h3><ul><li><p>&#9989; <strong>Keeps data private</strong> (encapsulation).</p></li><li><p>&#9989; <strong>Avoids global variables</strong>.</p></li><li><p>&#9989; <strong>Helps in real-world scenarios like timers and event listeners</strong>.</p></li></ul><h4><strong>Example: A Function That Remembers</strong></h4><p>Let&#8217;s see an example of a simple closure:</p><pre><code><code>function makeCounter() {
  let count = 0; 

  return function () {
    count++;
    console.log(count);
  };
}

const counter = makeCounter();
counter(); // 1
counter(); // 2
counter(); // 3
</code></code></pre><p>Even though <code>makeCounter()</code> has finished running, the <code>counter()</code> function <strong>remembers</strong> <code>count</code>. That&#8217;s a closure! It&#8217;s like the inner function packed <code>count</code> in its backpack and carried it along.</p><p>&#128214; <strong>Want to understand closures? You can read</strong> Eloquent JavaScript &#8211; Chapter 3 via <a href="https://eloquentjavascript.net/03_functions.html#h-hOd+yVxaku">this link</a>.</p><h2>3. Hoisting &#8211; The JavaScript Magic Trick &#127913;&#10024;</h2><p>The third concept that confuses beginners in JS is hoisting.</p><p>Simply put:</p><blockquote><p><em>&#8220;JavaScript reads your code before running it&#8212;but only half of it.&#8221;</em></p></blockquote><h3>What is Hoisting?</h3><p>Hoisting is like a magician pulling a rabbit out of a hat. Before the show starts, the magician prepares everything behind the scenes. Similarly, JavaScript &#8220;prepares&#8221; your code by moving <strong>function declarations</strong> and <strong>variable declarations</strong> to the top of their scope before execution.</p><p>These are some rules to know:</p><ul><li><p><strong>Function declarations are fully hoisted</strong> (you can call them before they&#8217;re declared).</p></li><li><p><strong>Variable declarations (</strong><code>var</code><strong>) are hoisted&#8212;but without their values</strong>.</p></li><li><p><code>let</code><strong> and </strong><code>const</code><strong> are hoisted but not initialized</strong>, leading to a &#8220;temporal dead zone.&#8221;</p></li></ul><h4>Example: Hoisting with <code>var</code></h4><p>Let&#8217;s begin with a first example:</p><pre><code><code>console.log(name); // &#128680; Logs: undefined
var name = "Alice";
</code></code></pre><p>The variable <code>name</code> is hoisted, but its value isn&#8217;t assigned yet. It&#8217;s like declaring a box exists but not putting anything in it yet.</p><h4>Example: Hoisting with <code>let</code> (Doesn&#8217;t Work)</h4><p>Move on to the next example:</p><pre><code><code>console.log(age); // &#10060; ReferenceError
let age = 25;
</code></code></pre><p>With <code>let</code> and <code>const</code>, the variable exists but is in a &#8220;temporal dead zone&#8221; until it&#8217;s initialized.</p><blockquote><p>&#128640; <strong>Best Practice:</strong> Always try to declare variables <strong>at the top</strong> of your scope to avoid confusion.</p></blockquote><h2>4. The Event Loop &#8211; Why JavaScript Feels &#8220;Slow&#8221; &#127744;</h2><p>Now, let&#8217;s see about the famous event loop. JavaScript is <strong>single-threaded</strong>, meaning it can only do one thing at a time. But how does it handle multiple tasks like API calls, timeouts, and user clicks?</p><p>&#128161; <strong>Think of JavaScript as a chef in a small kitchen.</strong></p><ul><li><p>The chef <strong>(main thread)</strong> can only cook one meal at a time.</p></li><li><p>Orders <strong>(callbacks like </strong><code>setTimeout</code><strong>)</strong> go into a waiting queue.</p></li><li><p>The <strong>event loop</strong> checks when the chef is free and sends in the next order.</p></li></ul><h4>Example: Why <code>setTimeout(0)</code> Isn&#8217;t Immediate?</h4><p>Let&#8217;s start with a common confusion related to how the event loop works:</p><pre><code><code>console.log("Start");

setTimeout(() =&gt; {
  console.log("Timeout");
}, 0);

console.log("End");
</code></code></pre><p><strong>This is the expected output by most people:</strong></p><pre><code><code>Start
Timeout
End
</code></code></pre><p><strong>But the actual output is as follows:</strong></p><pre><code><code>Start
End
Timeout
</code></code></pre><p>Why? Because <code>setTimeout</code> goes to the queue, and JavaScript finishes everything in the <strong>main thread first</strong>. It&#8217;s like the chef finishing the current meal before starting the next one.</p><p>&#128214; <strong>You can watch this video for in-depth explanation</strong> <a href="https://www.youtube.com/watch?v=8aGhZQkoFbQ">mind-blowing Event Loop video</a>.</p><h2>5. Prototypal Inheritance &#8211; Objects That Borrow Traits &#127963;</h2><p>Unlike other languages that use <strong>class-based inheritance</strong>, JavaScript uses <strong>prototypal inheritance</strong>.</p><p>&#128161; <strong>Think of it like borrowing skills from your ancestors.</strong> If you don&#8217;t know how to do something, you ask your parents. If they don&#8217;t know, they ask their parents if they are still alive :), and so on.</p><h3>Example: Object Inheriting From Another Object</h3><p>Let&#8217;s see the following example:</p><pre><code><code>const person = {
  greet() {
    console.log("Hello!");
  }
};

const user = Object.create(person);
user.greet(); // &#9989; Logs: "Hello!"
</code></code></pre><p>Even though <code>user</code> doesn&#8217;t have <code>greet()</code>, it <em>inherits</em> it from <code>person</code>!</p><blockquote><p>&#128221; <strong>Note:</strong> Please note that while JavaScript is fundamentally prototypal, it added support for a <code>class</code> syntax with the introduction of ES6 for developers familiar with class-based languages like Java or C++. Under the hood, however, classes in JavaScript are still based on prototypes.</p></blockquote><p>&#128214; <strong>Read:</strong> <a href="https://github.com/getify/You-Dont-Know-JS">You Don&#8217;t Know JS: Objects &amp; Prototypes</a></p><h2>6. <code>==</code> vs <code>===</code> &#8211; The Identity Crisis &#129300;</h2><p>JavaScript sometimes tries to be &#8220;helpful&#8221; by <strong>converting</strong> types in <code>==</code> comparisons.</p><h3>Example: Why Type Coercion is Dangerous?</h3><p>Let&#8217;s see this example demonstrating why coercion is dangerous:</p><pre><code><code>console.log(5 == "5");  // &#9989; true  (JavaScript converts "5" into a number)
console.log(5 === "5"); // &#10060; false (Strict comparison, different types)
</code></code></pre><p>The difference between <code>==</code> and <code>===</code> is commonly asked during interviews so make sure to remember it!</p><blockquote><p>&#128640; <strong>Best Practice:</strong> Try to always use <code>===</code> to avoid weird behavior.</p></blockquote><h2>7. <code>async/await</code> &#8211; The Fix for Callback Hell &#128565;&#8205;&#128171;</h2><p>This is actually a nice feature that&#8217;s not confusing at all but always beginners ask why we need them so I included them in this list!<br>Before <code>async/await</code>, we had <strong>callback hell</strong>:</p><pre><code><code>getUser(1, function(user) {
  getPosts(user.id, function(posts) {
    getComments(posts[0], function(comments) {
      console.log(comments);
    });
  });
});
</code></code></pre><p>Then Promises made it better:</p><pre><code><code>getUser(1)
  .then(user =&gt; getPosts(user.id))
  .then(posts =&gt; getComments(posts[0]))
  .then(console.log);
</code></code></pre><p>But <strong>async/await</strong> made it BEAUTIFUL:</p><pre><code><code>async function fetchData() {
  let user = await getUser(1);
  let posts = await getPosts(user.id);
  let comments = await getComments(posts[0]);
  console.log(comments);
}
fetchData();
</code></code></pre><p>&#128214; <strong>You can read this guide for an extra explanation:</strong> <a href="https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Async_JS/Promises#async_and_await">MDN&#8217;s Async/Await Guide</a></p><h2>Final Thoughts</h2><p>JavaScript can be <strong>weird</strong>, but once you understand these concepts, you&#8217;ll <strong>become a better developer</strong>.</p><p>&#128161; <strong>Best Free JavaScript Learning Resources:</strong><br>&#128214; <a href="https://eloquentjavascript.net/">Eloquent JavaScript</a><br>&#128214; <a href="https://github.com/getify/You-Dont-Know-JS">You Don&#8217;t Know JS</a><br>&#128214; <a href="https://javascript.info/">JavaScript.info</a></p><p>&#128640; <strong>Which JavaScript concept used to confuse you the most? (I hope it doesn&#8217;t anymore) Drop a comment below!</strong> &#128071; And if you learned something from this article, leaving a like is appreciated!</p>]]></content:encoded></item><item><title><![CDATA[📚 7 Free Python Books That Will Make You a Better Developer 🚀 ]]></title><description><![CDATA[Here&#8217;s a handpicked collection of 7 free Python books that will help you master Python &#8212; from the basics to advanced techniques like clean code, automation, and project building.]]></description><link>https://programmerspace.substack.com/p/7-free-python-books-that-will-make</link><guid isPermaLink="false">https://programmerspace.substack.com/p/7-free-python-books-that-will-make</guid><dc:creator><![CDATA[Boucodes]]></dc:creator><pubDate>Mon, 03 Feb 2025 01:30:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Aqwa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b09e7a9-aefe-440b-9664-0a24a5dbfa47_768x512.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Python is one of the most <strong>powerful, versatile, and beginner-friendly</strong> programming languages. Whether you&#8217;re a <strong>complete beginner</strong>, an <strong>experienced developer</strong>, or someone looking to refine their coding style, the right book can <strong>accelerate your learning process</strong>.</p><p>Here&#8217;s a <strong>handpicked collection</strong> of 7 free Python books that will help you <strong>master Python</strong> &#8212; from the <strong>basics</strong> to <strong>advanced techniques</strong> like <strong>clean code, automation, and project building</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Aqwa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b09e7a9-aefe-440b-9664-0a24a5dbfa47_768x512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Aqwa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b09e7a9-aefe-440b-9664-0a24a5dbfa47_768x512.png 424w, https://substackcdn.com/image/fetch/$s_!Aqwa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b09e7a9-aefe-440b-9664-0a24a5dbfa47_768x512.png 848w, https://substackcdn.com/image/fetch/$s_!Aqwa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b09e7a9-aefe-440b-9664-0a24a5dbfa47_768x512.png 1272w, https://substackcdn.com/image/fetch/$s_!Aqwa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b09e7a9-aefe-440b-9664-0a24a5dbfa47_768x512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Aqwa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b09e7a9-aefe-440b-9664-0a24a5dbfa47_768x512.png" width="768" height="512" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b09e7a9-aefe-440b-9664-0a24a5dbfa47_768x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:768,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:47642,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Aqwa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b09e7a9-aefe-440b-9664-0a24a5dbfa47_768x512.png 424w, https://substackcdn.com/image/fetch/$s_!Aqwa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b09e7a9-aefe-440b-9664-0a24a5dbfa47_768x512.png 848w, https://substackcdn.com/image/fetch/$s_!Aqwa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b09e7a9-aefe-440b-9664-0a24a5dbfa47_768x512.png 1272w, https://substackcdn.com/image/fetch/$s_!Aqwa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b09e7a9-aefe-440b-9664-0a24a5dbfa47_768x512.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1><strong>&#128994; Beginner Level</strong></h1><h1><strong>1&#65039;&#8419; Think Python &#8212; How to Think Like a Computer Scientist</strong></h1><p>&#128214; <strong>Author:</strong> Allen B. Downey</p><p>If you&#8217;re new to programming, this book <strong>teaches you how to think like a programmer</strong>. It covers <strong>fundamental Python concepts</strong> while emphasizing <strong>problem-solving and algorithmic thinking</strong>.</p><p>&#128313; <strong>Key Takeaways:</strong><br>&#9989; Understanding <strong>fundamental programming concepts</strong><br>&#9989; Learning <strong>recursion, object-oriented programming, and data structures</strong><br>&#9989; Developing a <strong>problem-solving mindset</strong></p><p>&#128161; <strong>Who is this for?</strong> <strong>Beginners</strong> who want to <strong>develop strong problem-solving skills</strong>.</p><p>&#128279; <strong>Download:</strong> <a href="https://greenteapress.com/wp/think-python/">Think Python</a></p><h1><strong>2&#65039;&#8419; Automate the Boring Stuff with Python</strong></h1><p>&#128214; <strong>Author:</strong> Al Sweigart</p><p>One of the most popular Python books, <strong>Automate the Boring Stuff</strong> teaches you how to <strong>use Python to automate everyday tasks</strong>. If you want to <strong>save time</strong> by automating repetitive tasks (file management, data scraping, etc.), this is the book for you.</p><p>&#128313; <strong>Key Takeaways:</strong><br>&#9989; Automate <strong>file handling, emails, spreadsheets, and PDFs</strong><br>&#9989; Learn <strong>web scraping</strong> to extract data from websites<br>&#9989; Master <strong>regular expressions, APIs, and automation techniques</strong></p><p>&#128161; <strong>Who is this for?</strong> <strong>Beginners</strong> who want to <strong>use Python for real-world automation</strong>.</p><p>&#128279; <strong>Read Online:</strong> <a href="https://automatetheboringstuff.com/">Automate the Boring Stuff</a></p><h1><strong>3&#65039;&#8419; Small Python Projects &#8212; 81 Easy Practice Programs</strong></h1><p>&#128214; <strong>Author:</strong> Al Sweigart</p><p>The best way to <strong>learn Python</strong> is by <strong>building projects</strong>. This book provides <strong>81 simple yet fun projects</strong> to practice Python concepts. From <strong>games</strong> to <strong>automation scripts</strong>, each project is designed to teach you something <strong>new and practical</strong>.</p><p>&#128313; <strong>Key Takeaways:</strong><br>&#9989; Hands-on projects covering <strong>loops, functions, and algorithms</strong><br>&#9989; A mix of <strong>game development, automation, and scripting</strong><br>&#9989; Step-by-step explanations for every project</p><p>&#128161; <strong>Who is this for?</strong> <strong>Beginners</strong> who want <strong>real-world practice</strong> instead of just theory.</p><p>&#128279; <strong>Read Online</strong>: <a href="https://inventwithpython.com/bigbookpython/">Small Python Projects</a>.</p><p>&#128279; <strong>Download Source Code:</strong> <a href="https://inventwithpython.com/projects/">Small Python Projects</a></p><h1><strong>&#128993; Intermediate Level</strong></h1><h1><strong>4&#65039;&#8419; Learn More Python 3 the Hard Way</strong></h1><p>&#128214; <strong>Author:</strong> Zed Shaw</p><p>This book is a <strong>step-by-step</strong> guide designed to <strong>push your Python skills to the next level</strong>. The <strong>&#8220;Hard Way&#8221;</strong> approach forces you to <strong>practice by doing</strong>, making sure you <strong>truly understand</strong> each concept before moving forward.</p><p>&#128313; <strong>Key Takeaways:</strong><br>&#9989; A rigorous, structured approach to <strong>intermediate and advanced Python</strong><br>&#9989; Covers <strong>data structures, algorithms, and OOP principles</strong><br>&#9989; Helps you <strong>think like a programmer</strong> and write efficient code</p><p>&#128161; <strong>Who is this for?</strong> <strong>Anyone who wants to go beyond the basics</strong> and master Python <strong>the hard way</strong>.</p><p>&#128279; <strong>Download:</strong> <a href="https://freecomputerbooks.com/Learn-Python-The-Hard-Way.html">Learn More Python 3 the Hard Way</a></p><h1><strong>5&#65039;&#8419; The Quick Python Book</strong></h1><p>&#128214; <strong>Author:</strong> Naomi Ceder</p><p>If you need a <strong>concise yet powerful guide to Python</strong>, this book is perfect. It <strong>skips unnecessary details</strong> and gets straight to the <strong>important concepts</strong> that will help you <strong>start coding quickly</strong>.</p><p>&#128313; <strong>Key Takeaways:</strong><br>&#9989; Covers <strong>Python syntax, libraries, and best practices</strong><br>&#9989; A well-structured book for <strong>quick reference and review</strong><br>&#9989; Great for learning <strong>modern Python techniques</strong></p><p>&#128161; <strong>Who is this for?</strong> <strong>Developers</strong> who want a <strong>fast-track guide to Python</strong>.</p><p>&#128279; <strong>Download:</strong> <a href="http://128.174.51.21/teaching/SP2019/ASTR414/The_Quick_Python_Book.pdf">The Quick Python Book</a></p><h1><strong>&#128308; Advanced Level</strong></h1><h1><strong>6&#65039;&#8419; Python Beyond the Basics &#8212; Best Practices for Writing Clean Code</strong></h1><p>&#128214; <strong>Author:</strong> Al Sweigart</p><p>If you&#8217;ve already got a <strong>good grasp of Python</strong> and want to <strong>write better, more efficient, and maintainable code</strong>, this book is for you. It focuses on <strong>best practices, advanced Python techniques</strong>, and <strong>clean coding standards</strong> that will make your programs more <strong>readable and professional</strong>.</p><p>&#128313; <strong>Key Takeaways:</strong><br>&#9989; Writing <strong>clean and professional</strong> Python code<br>&#9989; Understanding <strong>design patterns</strong> and when to use them<br>&#9989; Exploring <strong>advanced Python features</strong> (decorators, generators, etc.)</p><p>&#128161; <strong>Who is this for?</strong> <strong>Intermediate Python developers</strong> who want to <strong>refine their coding skills</strong>.</p><p>&#128279; <strong>Read Online:</strong> <a href="https://inventwithpython.com/beyond/">Beyond the Basic Stuff with Python</a></p><h1><strong>7&#65039;&#8419; Clean Code in Python &#8212; Maintainable and Scalable Software</strong></h1><p>&#128214; <strong>Author:</strong> Mariano Anaya</p><p>Writing code is easy. Writing <strong>clean, maintainable, and scalable</strong> code is <strong>hard</strong>. This book <strong>teaches you how to structure your Python code</strong> so it&#8217;s <strong>readable, reusable, and efficient</strong>.</p><p>&#128313; <strong>Key Takeaways:</strong><br>&#9989; Best practices for <strong>code readability and maintainability</strong><br>&#9989; Writing <strong>scalable, reusable Python components</strong><br>&#9989; Using <strong>SOLID principles</strong> and <strong>design patterns</strong></p><p>&#128161; <strong>Who is this for?</strong> <strong>Developers</strong> who <strong>want to write Python like a pro</strong>.</p><p>&#128279; <strong>Download:</strong> <a href="https://www.packtpub.com/free-ebook/clean-code-in-python/9781788835831?srsltid=AfmBOorRNuqaJl1g3BEMM1AWgvrkMKH8G_hrP-946AON6n37Hq2gfpmx">Clean Code in Python</a></p><h1><strong>&#128293; Why These Books Are a Must-Read</strong></h1><p>&#9989; <strong>They&#8217;re all FREE!</strong> No excuses &#8212; grab them and start learning.<br>&#9989; <strong>Cover everything from basics to advanced Python topics</strong>.<br>&#9989; <strong>Practical projects and exercises</strong> to solidify your understanding.<br>&#9989; <strong>Written by experienced programmers and educators</strong>.</p><p>Whether you&#8217;re looking to <strong>automate tasks, write clean code, or build projects</strong>, these books will give you a <strong>solid foundation in Python</strong>.</p><p>&#128073; <strong>Which one will you read first? Have you already read any of them?</strong> Let me know in the comments!</p><p>&#128640; <strong>Save this post</strong> so you can always come back when you need a Python resource.</p>]]></content:encoded></item><item><title><![CDATA[Angular Signals Deep Dive ]]></title><description><![CDATA[The basics of Angular signals, real-world examples, and some of the potential pitfalls.]]></description><link>https://programmerspace.substack.com/p/podcast-angular-signals-deep-dive</link><guid isPermaLink="false">https://programmerspace.substack.com/p/podcast-angular-signals-deep-dive</guid><dc:creator><![CDATA[Boucodes]]></dc:creator><pubDate>Wed, 25 Dec 2024 20:50:22 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/153616872/8d3aa9f6088ef4cf4d2698d3778d51fb.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>This podcast provides a guide to Angular Signals, <strong>a new reactive state management primitive</strong>. It <strong>highlights Signals' benefits</strong>, including improved performance, simpler debugging, and reduced boilerplate compared to RxJS Observables. This podcast details <strong>core Signal types</strong> (writable, computed, and effects), offers <strong>practical implementation examples and best practices</strong>, and addresses common pitfalls and future considerations for using Signals within Angular applications. It also notes how Signals can be integrated with existing code and used as an alternative to more complex state management solutions.</p>]]></content:encoded></item><item><title><![CDATA[Angular's Epic 2024: More Popularity, Zoneless, Hydrated, and Ready for 2025!]]></title><description><![CDATA[Angular Updates and Community Highlights - December 2024]]></description><link>https://programmerspace.substack.com/p/angulars-epic-2024-more-popularity</link><guid isPermaLink="false">https://programmerspace.substack.com/p/angulars-epic-2024-more-popularity</guid><pubDate>Tue, 24 Dec 2024 22:13:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!y4C5!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7a3ac7-4b05-412a-951e-aafcd88f575b_968x968.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Dear Angular Enthusiasts,</p><p>I hope this email finds you well as we wrap up another exciting year in the world of Angular development. Here's a rundown of the latest from Angular, along with some community insights to keep you at the forefront of this dynamic technology:</p><p><strong>Angular Versions 18 and 19 Recap</strong> This year has been transformative for Angular. With Angular 18 introducing zoneless architecture, we've seen a significant shift towards more efficient applications. Angular 19 followed suit with incremental hydration, enhancing performance by allowing parts of your app to load asynchronously. For 2025, we're looking forward to further improvements in forms, reactivity, and developer experience, which promises to streamline your coding process even more.</p><p><strong>Community Growth and Sentiment</strong> Angular's community has not just grown; it's thrived. There's been a noticeable increase in retention, usage, and positivity among developers, largely thanks to the introduction of signals. This shift has not only made Angular more appealing but also more intuitive for new developers to dive into.</p><p><strong>Development Enhancements</strong></p><ul><li><p><strong>HMR for CSS</strong>: With Angular v19, you can now enjoy Hot Module Replacement for CSS, significantly speeding up your edit/refresh cycle during development. This feature means less waiting time and more coding efficiency.</p></li></ul><ul><li><p><strong>From Change Detection to Synchronization</strong>: We're seeing a move away from traditional change detection towards a model of synchronization. This shift in thinking is something to watch and perhaps start experimenting with in your projects.</p></li></ul><p><strong>Community Insights</strong></p><ul><li><p><strong>Standalone Components</strong>: The push towards using standalone components, directives, and pipes has been strong this year. If you haven't explored this yet, now's the time, with plenty of resources available to guide you through the transition.</p></li></ul><ul><li><p><strong>Fun with Angular</strong>: Did you know about the "?uwu=true" Easter egg for Angular websites? It's these community-driven fun elements that make our development experience all the more enjoyable.</p></li></ul><p><strong>Looking Ahead</strong> As we approach 2025, keep an eye out for more developer-focused updates from Angular. Community feedback has been instrumental in shaping these advancements, so continue to engage, share your experiences, and help the team make Angular even better.</p><p>Thank you for being part of this vibrant community. Here's to another year of learning, building, and innovating with Angular!</p><p>Best Regards,</p><p>Follow me in Twitter/X via <a href="https://x.com/boucodes">@boucodes</a> if you are interested in tutorials and latest updates. You can also join this <a href="https://web.facebook.com/groups/ngxangular">Angular Dev Community</a> on Facebook for latest updates and tutorials. </p><p>P.S. Don't forget to check out the latest Angular blogs, join the discussions, or participate in community events for more insights and networking opportunities!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programmerspace.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Angular Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>