<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Samaresh Das</title>
    <description>The latest articles on DEV Community by Samaresh Das (@samareshdas).</description>
    <link>https://dev.to/samareshdas</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F861109%2Fa58806a1-8657-4bcf-b3b4-545c37bbbc10.png</url>
      <title>DEV Community: Samaresh Das</title>
      <link>https://dev.to/samareshdas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/samareshdas"/>
    <language>en</language>
    <item>
      <title>Why full-stack devs get more interview callbacks</title>
      <dc:creator>Samaresh Das</dc:creator>
      <pubDate>Fri, 01 May 2026 09:01:00 +0000</pubDate>
      <link>https://dev.to/samareshdas/why-full-stack-devs-get-more-interview-callbacks-764</link>
      <guid>https://dev.to/samareshdas/why-full-stack-devs-get-more-interview-callbacks-764</guid>
      <description>&lt;p&gt;Hiring managers are secretly biased towards full-stack developers.&lt;/p&gt;

&lt;p&gt;It's not a conspiracy, but a cold, hard reality of the job market. If you're a specialist, you might be missing out on interview opportunities. Here's why being a jack-of-all-trades can land you more calls.&lt;/p&gt;

&lt;p&gt;Think about it from the perspective of a small to medium-sized business, or even a startup. They often don't have the luxury of hiring a dedicated front-end dev, a back-end dev, a database admin, and a DevOps engineer. They need someone who can wear multiple hats and keep the wheels turning. A full-stack developer fits that bill perfectly. They can build the user interface, connect it to the server, manage the database, and even deploy the application.&lt;/p&gt;

&lt;p&gt;This versatility translates directly into fewer hiring headaches. Instead of coordinating multiple hires, they can often find one person to tackle a significant chunk of the development work. This makes full-stack candidates incredibly attractive. They can hit the ground running on a wider range of tasks.&lt;/p&gt;

&lt;p&gt;Consider a typical job description. A front-end specialist might be asked for deep knowledge in React, Redux, and complex CSS animations. A back-end specialist might need mastery of Node.js, SQL databases, and API security. A full-stack developer, however, might be listed as needing proficiency in React, Node.js, PostgreSQL, and maybe even a bit of Docker.&lt;/p&gt;

&lt;p&gt;Here’s a snippet of what that might look like in a job ad:&lt;/p&gt;

&lt;p&gt;"We're looking for a Full-Stack Engineer to join our dynamic team. You'll be responsible for developing and maintaining both our client-facing web application and our server-side API. Experience with React and Node.js is essential. Familiarity with cloud deployment (AWS/Azure) is a plus."&lt;/p&gt;

&lt;p&gt;This signals that they're seeking someone who can bridge the gap between the user experience and the underlying infrastructure. They aren't looking for someone to optimize a single, obscure caching layer; they're looking for someone who can build a functional product from end to end.&lt;/p&gt;

&lt;p&gt;As a freelancer who builds websites, I've seen this firsthand. Clients often come to me with projects that require a bit of everything, and being able to handle both the visual design and the data logic is a huge advantage. If you're interested in seeing some of my work, you can check out my freelance portfolio at &lt;a href="https://hire-sam.vercel.app/" rel="noopener noreferrer"&gt;https://hire-sam.vercel.app/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So, while specializing can be great for deep expertise, a broader skillset often opens more doors. Don't underestimate the power of being a generalist in the development world.&lt;/p&gt;

&lt;p&gt;Save this if useful.&lt;/p&gt;

&lt;h1&gt;
  
  
  fullstack #webdevelopment #career #devjobs
&lt;/h1&gt;

</description>
      <category>fullstack</category>
      <category>webdev</category>
      <category>career</category>
      <category>devjobs</category>
    </item>
    <item>
      <title>Using AI as backend training wheels</title>
      <dc:creator>Samaresh Das</dc:creator>
      <pubDate>Thu, 30 Apr 2026 09:00:48 +0000</pubDate>
      <link>https://dev.to/samareshdas/using-ai-as-backend-training-wheels-3ef2</link>
      <guid>https://dev.to/samareshdas/using-ai-as-backend-training-wheels-3ef2</guid>
      <description>&lt;p&gt;AI isn't here to steal your job, it's here to hold your hand.&lt;/p&gt;

&lt;p&gt;As a freelance web developer, I'm constantly exploring new tools to boost my productivity. Lately, I've been leaning into AI not as a replacement for my skills, but as a powerful set of "training wheels" for my backend development. Think of it as a super-smart junior dev you can bounce ideas off, get boilerplate code from, and even debug with.&lt;/p&gt;

&lt;p&gt;The idea is to leverage AI for the repetitive, the mundane, and the slightly intimidating parts of backend work. This frees up my brain for the truly creative and problem-solving aspects, which is where the real value lies. Plus, who has time to manually write every single CRUD operation when an AI can whip it up in seconds?&lt;/p&gt;

&lt;p&gt;For example, generating a basic Express.js API structure can be a breeze. Let's say I need a simple user management API. I can ask an AI to generate the initial setup with routes, controllers, and basic schema definitions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Example: Prompt for AI&lt;/span&gt;
&lt;span class="c1"&gt;// "Generate an Express.js API for user management with endpoints for GET, POST, PUT, DELETE. Include basic validation and a placeholder for database integration."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This often results in something like this, giving me a solid starting point:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// server.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="c1"&gt;// Placeholder for routes&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./routes/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Server running at http://localhost:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Beyond scaffolding, AI is fantastic for understanding unfamiliar libraries or frameworks. Instead of sifting through dense documentation, I can ask direct questions like, "How do I handle authentication with Passport.js in this context?" or "Show me an example of using Mongoose with a nested schema." It's like having a patient, always-available mentor.&lt;/p&gt;

&lt;p&gt;Debugging becomes less of a soul-crushing ordeal too. When I'm stuck on a cryptic error message, I can paste the relevant code and the error into an AI and ask for explanations or potential solutions. It doesn't always get it right, but it often points me in the right direction or explains the error in a way I hadn't considered.&lt;/p&gt;

&lt;p&gt;My focus as a freelance website builder has always been on delivering efficient and robust solutions. Tools that speed up the process without sacrificing quality are invaluable. If you're looking for someone to build your next website, feel free to check out my services at &lt;a href="https://hire-sam.vercel.app/" rel="noopener noreferrer"&gt;https://hire-sam.vercel.app/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The key takeaway is to see AI as an accelerator and assistant, not a replacement. Use it to overcome initial inertia, understand complex topics faster, and catch those annoying bugs. It’s about working smarter, not just harder.&lt;/p&gt;

&lt;p&gt;Save this if you're looking to up your backend game.&lt;/p&gt;

&lt;h1&gt;
  
  
  ai #backend #webdevelopment #freelance
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>backend</category>
      <category>webdev</category>
      <category>freelance</category>
    </item>
    <item>
      <title>Backend is not scary — it is just logic with endpoints</title>
      <dc:creator>Samaresh Das</dc:creator>
      <pubDate>Wed, 29 Apr 2026 09:01:00 +0000</pubDate>
      <link>https://dev.to/samareshdas/backend-is-not-scary-it-is-just-logic-with-endpoints-4h77</link>
      <guid>https://dev.to/samareshdas/backend-is-not-scary-it-is-just-logic-with-endpoints-4h77</guid>
      <description>&lt;p&gt;Forget the dragons guarding the treasure chest; backend development is just a bunch of friendly goblins playing with rules.&lt;/p&gt;

&lt;p&gt;Many developers, especially those comfortable on the frontend, get this weird, wide-eyed look when "backend" is mentioned. It’s often painted as this arcane, impenetrable fortress of databases, servers, and arcane configurations. But what if I told you it’s really just about organizing information and making it available when someone asks nicely?&lt;/p&gt;

&lt;p&gt;At its core, backend development is about two main things: &lt;strong&gt;logic&lt;/strong&gt; and &lt;strong&gt;endpoints&lt;/strong&gt;. The logic is the brain, deciding what to do with data. The endpoints are the mouths and ears, allowing other parts of the application (like your slick frontend) to talk to the brain.&lt;/p&gt;

&lt;p&gt;Think of an endpoint like a specific question you can ask a smart assistant. For example, you might have an endpoint like &lt;code&gt;/api/users/:id&lt;/code&gt; that, when called with a specific user ID, fetches that user's information. This is usually done with HTTP methods like GET (to fetch data), POST (to create data), PUT (to update data), and DELETE (to remove data).&lt;/p&gt;

&lt;p&gt;Here’s a super simplified example using Node.js and Express.js, a popular framework for building backends:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Sample data (imagine this coming from a database)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bob&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="c1"&gt;// Endpoint to get all users&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Sends the users array as JSON&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Endpoint to get a specific user by ID&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/users/:id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User not found&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Send a 404 error&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Server listening at http://localhost:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;See? It’s just code that says, "If someone asks for &lt;code&gt;/api/users&lt;/code&gt;, give them this list. If they ask for &lt;code&gt;/api/users/1&lt;/code&gt;, find user with ID 1 and give them that." The "scary" stuff like databases are just more organized ways to store that &lt;code&gt;users&lt;/code&gt; array and retrieve it efficiently.&lt;/p&gt;

&lt;p&gt;The fear often comes from the sheer &lt;em&gt;variety&lt;/em&gt; of tools and technologies. You've got databases (SQL, NoSQL), programming languages (Python, Java, Go, Node.js), cloud providers (AWS, Azure, GCP), and so on. But each tool serves a purpose, and learning them is a gradual process. It's like learning different types of tools for woodworking; you don't need to be a master carpenter overnight.&lt;/p&gt;

&lt;p&gt;The most important takeaway is that backend development is about solving problems by defining rules and creating communication channels. It’s less about magic spells and more about structured thinking.&lt;/p&gt;

&lt;p&gt;Building robust and user-friendly websites is what I do as a freelancer, and I find that demystifying the backend makes the whole process so much smoother for clients and fellow developers alike. If you're looking for someone to help with your next web project, you can check out my services here: &lt;a href="https://hire-sam.vercel.app/" rel="noopener noreferrer"&gt;https://hire-sam.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow for more dev content.&lt;/p&gt;

&lt;h1&gt;
  
  
  backend #webdevelopment #programming
&lt;/h1&gt;

</description>
      <category>node</category>
      <category>backend</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Comfort is not progress — the uncomfortable truth</title>
      <dc:creator>Samaresh Das</dc:creator>
      <pubDate>Tue, 28 Apr 2026 09:01:06 +0000</pubDate>
      <link>https://dev.to/samareshdas/comfort-is-not-progress-the-uncomfortable-truth-4fai</link>
      <guid>https://dev.to/samareshdas/comfort-is-not-progress-the-uncomfortable-truth-4fai</guid>
      <description>&lt;p&gt;Comfort is the silent killer of growth, and as developers, we fall prey to it more often than we'd like to admit.&lt;/p&gt;

&lt;p&gt;This isn't about slacking off; it's about recognizing when our familiar tools, workflows, or even our comfort zone with certain technologies become a barrier to becoming a better developer. Sticking with what's easy might feel good, but it rarely leads to significant improvement.&lt;/p&gt;

&lt;p&gt;Think about your go-to framework. Maybe it's React, Vue, or even good old jQuery for some legacy projects. While mastery is great, are you occasionally tempted to stick with it even when a newer, potentially more performant or feature-rich option might be a better fit for a specific problem?&lt;/p&gt;

&lt;p&gt;Consider a scenario where you're building a highly interactive UI. You &lt;em&gt;could&lt;/em&gt; whip up some complex component logic in your familiar framework. Or, you could explore a library designed specifically for that kind of dynamic behavior.&lt;/p&gt;

&lt;p&gt;For example, instead of fighting with state management for a real-time chart update in vanilla JS or a general-purpose framework:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// A simplified (and likely inefficient) approach in a generic framework&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;updateChart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ... a lot of DOM manipulation and state updates ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You might find a dedicated charting library like Chart.js or D3.js offers a more elegant and performant solution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Using a charting library for smoother updates&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myChart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Chart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ... chart configuration ...&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;updateChartData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;myChart&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;datasets&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;newData&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;myChart&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The learning curve for a new tool or paradigm can be steep, and that discomfort is precisely where the growth happens. It forces you to think differently, solve problems with new perspectives, and expand your skillset.&lt;/p&gt;

&lt;p&gt;It’s the same when learning a new programming language. You might find yourself wrestling with syntax or unfamiliar concepts. This temporary frustration is a sign you’re pushing your boundaries.&lt;/p&gt;

&lt;p&gt;As a freelancer who builds websites, I've learned that staying comfortable with my existing toolkit can be tempting, but it’s crucial to push myself. I recently took on a project that required diving into WebAssembly. It was initially daunting, but the insights gained were invaluable, and it opened up new possibilities for performance-critical features. If you're looking for someone to tackle those challenging web projects, you can find my services at &lt;a href="https://hire-sam.vercel.app/" rel="noopener noreferrer"&gt;https://hire-sam.vercel.app/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The next time you feel that urge to stick to the easy path, embrace the slight discomfort. It's the fertile ground where real development happens.&lt;/p&gt;

&lt;p&gt;Follow for more dev content&lt;/p&gt;

</description>
      <category>productivity</category>
    </item>
    <item>
      <title>The project-first learning roadmap that actually works</title>
      <dc:creator>Samaresh Das</dc:creator>
      <pubDate>Mon, 27 Apr 2026 09:01:09 +0000</pubDate>
      <link>https://dev.to/samareshdas/the-project-first-learning-roadmap-that-actually-works-292j</link>
      <guid>https://dev.to/samareshdas/the-project-first-learning-roadmap-that-actually-works-292j</guid>
      <description>&lt;p&gt;Forget staring at endless tutorial docs; the real learning happens when you're neck-deep in a project.&lt;/p&gt;

&lt;p&gt;This isn't about passively watching videos or skimming articles. It's a laser-focused, project-driven roadmap that cuts through the noise and gets you building tangible things. We're talking about actual websites, not just abstract concepts.&lt;/p&gt;

&lt;p&gt;The core idea is simple: pick a project, then learn &lt;em&gt;just enough&lt;/em&gt; to build it. Think of it like this: you want to bake a cake? You don't first learn the chemical composition of flour. You find a recipe and buy the ingredients.&lt;/p&gt;

&lt;p&gt;Here’s how to break it down:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The "What Do I Want to Build?" Phase&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is crucial. Don't aim for the next Facebook on day one. Start small and relatable. A personal blog, a simple to-do app, a portfolio site, or even a weather checker. The key is a goal that excites you.&lt;/p&gt;

&lt;p&gt;For example, let's say you want to build a simple calculator. Your initial goal isn't to master every JavaScript operator. It's to display numbers and perform basic arithmetic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The "Just-In-Time" Learning Sprint&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once you have your project idea, you'll encounter roadblocks. This is where learning kicks in.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Need to display output?&lt;/strong&gt; You'll learn about DOM manipulation.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;display&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;calculator-display&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;display&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Need to handle button clicks?&lt;/strong&gt; Event listeners are your friend.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;clearButton&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;clear&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;clearButton&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ... clear logic ...&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Need to store values?&lt;/strong&gt; Variables become your best buddies.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;currentValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;operator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You're not learning &lt;em&gt;all&lt;/em&gt; of JavaScript; you're learning the specific pieces that solve your immediate problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Iterate and Refactor&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your first version will likely be… a bit messy. That’s okay! The beauty of this approach is that it naturally leads to refactoring. You'll look at your code and think, "There &lt;em&gt;has&lt;/em&gt; to be a cleaner way." This is when you start exploring more advanced concepts.&lt;/p&gt;

&lt;p&gt;Maybe you realize your calculator logic is getting repetitive. That’s your cue to dive into functions or even object-oriented programming.&lt;/p&gt;

&lt;p&gt;This iterative process builds confidence and deepens understanding far more effectively than passive learning. I build websites and help clients as a freelancer, and this is precisely the mindset that gets projects done. If you're looking for someone to bring your web ideas to life, you can find more info here: &lt;a href="https://hire-sam.vercel.app/" rel="noopener noreferrer"&gt;https://hire-sam.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The ultimate takeaway? Projects are your teachers. Embrace the struggle, and you’ll learn exponentially.&lt;/p&gt;

&lt;p&gt;Save this if useful.&lt;/p&gt;

&lt;h1&gt;
  
  
  webdevelopment #learntocode #javascript #freelancer
&lt;/h1&gt;

</description>
      <category>beginners</category>
      <category>webdev</category>
      <category>learntocode</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Why recruiters don't care about your courses</title>
      <dc:creator>Samaresh Das</dc:creator>
      <pubDate>Sun, 26 Apr 2026 09:01:06 +0000</pubDate>
      <link>https://dev.to/samareshdas/why-recruiters-dont-care-about-your-courses-22lm</link>
      <guid>https://dev.to/samareshdas/why-recruiters-dont-care-about-your-courses-22lm</guid>
      <description>&lt;p&gt;Your impressive certificate from that 'Advanced JavaScript Mastery' course? Recruiters are probably just scrolling past it.&lt;/p&gt;

&lt;p&gt;This isn't about shaming your learning efforts; it's about understanding the recruiter's mindset. They're scanning for specific signals, and a course completion certificate often isn't one of them, especially for junior roles. Let's dig into why your course list might be a dead end on your resume.&lt;/p&gt;

&lt;p&gt;Recruiters have a mountain of resumes to sift through, often just a few seconds per application. They're looking for tangible evidence of your skills, not just theoretical knowledge. A course tells them you &lt;em&gt;finished&lt;/em&gt; something, not necessarily that you &lt;em&gt;mastered&lt;/em&gt; it or, more importantly, &lt;em&gt;applied&lt;/em&gt; it to solve real problems.&lt;/p&gt;

&lt;p&gt;Think about it: A "JavaScript Masterclass" certificate might mean you watched a bunch of videos and passed some quizzes. But it doesn't tell a recruiter if you can debug a tricky async function, architect a scalable frontend, or even just build a simple interactive form. They don't have time to verify every single course curriculum. Seriously, who has time for that? Not busy recruiters, that's for sure! 😂&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// This is what a course "completes" – often just a status update.&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OnlineCourse&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;student&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;student&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;student&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;progress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;completeSection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;percentage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;progress&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;percentage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;progress&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;student&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; completed "&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"!`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;samCourse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OnlineCourse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Advanced React Patterns&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Sam&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;samCourse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;completeSection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Output: Sam completed "Advanced React Patterns"!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This snippet shows completion, but it reveals zero about Sam's actual React skills. The core issue isn't the learning itself; it's the lack of demonstrable application. What truly stands out is showing you can &lt;em&gt;do&lt;/em&gt; the job.&lt;/p&gt;

&lt;p&gt;So, what &lt;em&gt;do&lt;/em&gt; they look for instead?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Real-world projects:&lt;/strong&gt; This is your golden ticket. Whether it's a personal project, an open-source contribution, or even a robust course project that you expanded, personalized, and deployed on your own. Show, don't just tell.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- A recruiter cares more about seeing this deployed and functional: --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://your-awesome-project.netlify.app"&lt;/span&gt; &lt;span class="na"&gt;target=&lt;/span&gt;&lt;span class="s"&gt;"_blank"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Check out my deployed e-commerce site!
&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;They want to click that link and see your code in action, not just a static "certificate of completion" PDF.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Work experience:&lt;/strong&gt; Even non-dev jobs can highlight valuable transferable skills like problem-solving, communication, and project management. Don't underestimate these!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Contributions &amp;amp; Community Engagement:&lt;/strong&gt; Did you fix a bug in a popular library? Help build a website for a local non-profit? Participate actively in dev communities? These show initiative and collaboration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Actual skills in action:&lt;/strong&gt; Recruiters and hiring managers want to see that you can debug a live issue, explain your thought process during a technical challenge, or effectively communicate design decisions. These are the real tests that matter in an interview.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A course is a fantastic starting point, a tool to gather knowledge. But it's not the final product. It's like buying a set of woodworking tools. A recruiter doesn't care if you own the tools; they care if you've built a sturdy, beautiful table with them. So, stop just collecting tools, and start building your "table"! 🚀&lt;/p&gt;

&lt;p&gt;Focus on building and showcasing actual projects that demonstrate your skills, rather than just listing courses you've completed.&lt;/p&gt;

&lt;p&gt;Speaking of building, that's what I live for. I spend my days crafting custom websites and web applications for clients as a freelancer. If you're ever looking for someone to help bring your ideas to life or just want to see some real-world projects, feel free to check out my portfolio: &lt;a href="https://hire-sam.vercel.app/" rel="noopener noreferrer"&gt;https://hire-sam.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow for more dev content!&lt;/p&gt;

&lt;h1&gt;
  
  
  careeradvice #webdevelopment #jobsearch #codingtips #devlife
&lt;/h1&gt;

</description>
      <category>career</category>
      <category>careeradvice</category>
      <category>webdev</category>
      <category>jobsearch</category>
    </item>
    <item>
      <title>AI actually made my tutorial addiction worse</title>
      <dc:creator>Samaresh Das</dc:creator>
      <pubDate>Sat, 25 Apr 2026 09:00:52 +0000</pubDate>
      <link>https://dev.to/samareshdas/ai-actually-made-my-tutorial-addiction-worse-5ei7</link>
      <guid>https://dev.to/samareshdas/ai-actually-made-my-tutorial-addiction-worse-5ei7</guid>
      <description>&lt;p&gt;AI didn't just fail to cure my tutorial addiction; it became its most enthusiastic enabler. What I thought would be a shortcut to understanding quickly morphed into an endless rabbit hole of half-baked knowledge and a constant craving for &lt;em&gt;just one more&lt;/em&gt; explanation.&lt;/p&gt;

&lt;p&gt;Like many developers, I often find myself falling into the tutorial trap: watching, reading, and copying code without fully internalizing the underlying concepts. When AI assistants like ChatGPT exploded onto the scene, my immediate thought was, "Finally, an instant answer machine!" I envisioned swift solutions, bypassing the need to sift through countless articles. Boy, was I wrong.&lt;/p&gt;

&lt;p&gt;My initial approach was to ask AI how to build specific features or integrate complex libraries. It would dutifully spit out boilerplate code, often quite impressive for a first pass. I'd copy it, get it "working" (sometimes), and feel a fleeting sense of accomplishment.&lt;/p&gt;

&lt;p&gt;Here’s the catch: the moment something went slightly off, or I needed to customize beyond the generated snippet, I was utterly lost. The AI had given me the &lt;em&gt;what&lt;/em&gt;, but never the &lt;em&gt;why&lt;/em&gt;. It was like being given a perfectly assembled IKEA cabinet without the instructions or the tools to fix it if a screw came loose. My "understanding" was superficial at best.&lt;/p&gt;

&lt;p&gt;Take, for instance, trying to implement a complex authentication flow with a lesser-known framework. I'd prompt the AI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Prompt: "How to set up JWT auth with Node.js and Passport.js, storing tokens in localStorage?"&lt;/span&gt;

&lt;span class="c1"&gt;// AI might give you something like this for a route:&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/login&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;passport&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;authenticate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;local&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;session&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;jwt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toJSON&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your_jwt_secret&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// But then you'd be left wondering:&lt;/span&gt;
&lt;span class="c1"&gt;// - How does `passport.authenticate` actually work under the hood?&lt;/span&gt;
&lt;span class="c1"&gt;// - What are 'local' strategies? How do I write one?&lt;/span&gt;
&lt;span class="c1"&gt;// - How do I secure the 'your_jwt_secret' in a real app?&lt;/span&gt;
&lt;span class="c1"&gt;// - What about refresh tokens, token expiration, blacklisting?&lt;/span&gt;
&lt;span class="c1"&gt;// - Is storing in localStorage even secure? (Spoiler: usually not for JWTs!)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This led to a new cycle: I'd take the AI's code, hit a roadblock, and then have to find &lt;em&gt;another&lt;/em&gt; tutorial to explain the specific part I didn't grasp. It wasn't replacing tutorials; it was multiplying the need for them, albeit for more granular issues. My "instant answer machine" became a tutorial-request-generator.&lt;/p&gt;

&lt;p&gt;The core issue is that AI excels at synthesis and retrieval, not genuine understanding. It stitches together patterns from its training data. For a developer, truly learning means building a mental model of how systems interact, understanding trade-offs, and debugging complex errors – skills that copying AI-generated code snippets simply doesn't develop. It creates an illusion of productivity while stifling deeper learning.&lt;/p&gt;

&lt;p&gt;The clear takeaway here is that foundational understanding is irreplaceable. AI is a fantastic tool for brainstorming, boilerplate generation, or even debugging hints, but it's not a substitute for rolling up your sleeves and genuinely learning the concepts.&lt;/p&gt;

&lt;p&gt;As someone who builds websites and freelances, I've learned that truly delivering value means understanding the foundations, not just patching things together with AI-generated snippets. If you're looking for a dev who digs deep, check out my work at &lt;a href="https://hire-sam.vercel.app/" rel="noopener noreferrer"&gt;https://hire-sam.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Share this with your dev friends if you've felt the same way!&lt;/p&gt;

&lt;h1&gt;
  
  
  AI #WebDev #DeveloperLife #TutorialHell #LearningToCode
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>developerlife</category>
      <category>tutorialhell</category>
    </item>
    <item>
      <title>Why tutorials don't make you a developer</title>
      <dc:creator>Samaresh Das</dc:creator>
      <pubDate>Fri, 24 Apr 2026 09:00:56 +0000</pubDate>
      <link>https://dev.to/samareshdas/why-tutorials-dont-make-you-a-developer-23dl</link>
      <guid>https://dev.to/samareshdas/why-tutorials-dont-make-you-a-developer-23dl</guid>
      <description>&lt;p&gt;You just finished a 10-hour coding tutorial, so why can't you build a website?&lt;/p&gt;

&lt;p&gt;That feeling of accomplishment after ticking off every step in a tutorial is addictive, isn't it? You followed along, copied the code, and lo and behold, a functional app appeared! But then, the moment you try to build something &lt;em&gt;different&lt;/em&gt;, from scratch, your brain goes blank. This isn't a sign you're not cut out for development; it's a sign you've been treating tutorials like a recipe book instead of a cookbook.&lt;/p&gt;

&lt;p&gt;Tutorials are fantastic for introducing concepts and showing you &lt;em&gt;how&lt;/em&gt; something works in a specific context. They spoon-feed you the exact syntax and the precise sequence of steps. Think of it like learning to cook by following a recipe for chocolate chip cookies. You learn where the flour goes, how much sugar to add, and the baking time.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// A typical tutorial example:&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;greetUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Hello, &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;greetUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Output: Hello, Alice!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is great for learning the &lt;code&gt;console.log&lt;/code&gt; function and basic function definition. But what happens when you want to make oatmeal raisin cookies? Or a savory stew? The cookie recipe doesn't tell you how to sauté onions or toast oats.&lt;/p&gt;

&lt;p&gt;Real development is about problem-solving. It's about understanding the underlying principles and being able to adapt them to new, often messy, situations. When you only follow tutorials, you learn to execute, not to &lt;em&gt;think&lt;/em&gt;. You become an excellent copier, but not necessarily a builder.&lt;/p&gt;

&lt;p&gt;To truly become a developer, you need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Experiment:&lt;/strong&gt; After a tutorial, change things! What happens if you alter a variable? If you add a new feature? Break it, then fix it.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Build from scratch:&lt;/strong&gt; Start small. A simple to-do list, a basic calculator. Don't aim for the next Facebook; aim for something you can complete independently.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Debug:&lt;/strong&gt; Errors are your best friends. Learning to read error messages and trace the source of a problem is a core skill tutorials often gloss over.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s this constant cycle of building, breaking, and fixing that solidifies knowledge and develops your problem-solving muscles. I build websites and help clients bring their ideas to life as a freelancer, and I can tell you that the ability to figure things out, even when the documentation is vague or nonexistent, is what really matters. If you need help with a project, you can check out my services at &lt;a href="https://hire-sam.vercel.app/" rel="noopener noreferrer"&gt;https://hire-sam.vercel.app/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So, the next time you finish a tutorial, resist the urge to immediately find another. Instead, open up your editor and try to build something, anything, without a step-by-step guide. That's where the real learning begins.&lt;/p&gt;

&lt;p&gt;Save this if useful&lt;/p&gt;

&lt;h1&gt;
  
  
  webdevelopment #coding #javascript #learntocode
&lt;/h1&gt;

</description>
      <category>webdev</category>
      <category>coding</category>
      <category>javascript</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Samaresh Das</dc:creator>
      <pubDate>Thu, 23 Apr 2026 17:12:29 +0000</pubDate>
      <link>https://dev.to/samareshdas/-32f3</link>
      <guid>https://dev.to/samareshdas/-32f3</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/samareshdas/i-built-a-bot-that-posts-to-linkedin-every-day-and-it-cost-me-nothing-3n76" class="crayons-story__hidden-navigation-link"&gt;I Built a Bot That Posts to LinkedIn Every Day — And It Cost Me Nothing&lt;/a&gt;


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

          &lt;a href="/samareshdas" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F861109%2Fa58806a1-8657-4bcf-b3b4-545c37bbbc10.png" alt="samareshdas profile" class="crayons-avatar__image" width="800" height="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/samareshdas" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Samaresh Das
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Samaresh Das
                
              
              &lt;div id="story-author-preview-content-3542412" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/samareshdas" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F861109%2Fa58806a1-8657-4bcf-b3b4-545c37bbbc10.png" class="crayons-avatar__image" alt="" width="800" height="800"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Samaresh Das&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/samareshdas/i-built-a-bot-that-posts-to-linkedin-every-day-and-it-cost-me-nothing-3n76" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 23&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/samareshdas/i-built-a-bot-that-posts-to-linkedin-every-day-and-it-cost-me-nothing-3n76" id="article-link-3542412"&gt;
          I Built a Bot That Posts to LinkedIn Every Day — And It Cost Me Nothing
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/agents"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;agents&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/software"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;software&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/samareshdas/i-built-a-bot-that-posts-to-linkedin-every-day-and-it-cost-me-nothing-3n76" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt; reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/samareshdas/i-built-a-bot-that-posts-to-linkedin-every-day-and-it-cost-me-nothing-3n76#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


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

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

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

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>I Built a Bot That Posts to LinkedIn Every Day — And It Cost Me Nothing</title>
      <dc:creator>Samaresh Das</dc:creator>
      <pubDate>Thu, 23 Apr 2026 17:01:42 +0000</pubDate>
      <link>https://dev.to/samareshdas/i-built-a-bot-that-posts-to-linkedin-every-day-and-it-cost-me-nothing-3n76</link>
      <guid>https://dev.to/samareshdas/i-built-a-bot-that-posts-to-linkedin-every-day-and-it-cost-me-nothing-3n76</guid>
      <description>&lt;p&gt;Somewhere between debugging OAuth errors at midnight and watching a bot post better LinkedIn content than most humans I know, I realized I'd accidentally built something genuinely useful.&lt;/p&gt;

&lt;p&gt;This is the story of how I built a fully automated LinkedIn posting agent from scratch — zero dollars spent, zero manual effort after setup, running daily on its own. It finds real trending topics, writes a human-sounding post, generates a banner image, and publishes it to LinkedIn while I sleep. No subscription. No paid APIs. Just free-tier tools duct-taped together in the best way possible.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem With "Just Post Consistently"
&lt;/h2&gt;

&lt;p&gt;Everyone tells you to post consistently on LinkedIn. Nobody tells you how exhausting that actually is. Coming up with a topic, writing something that doesn't sound like a press release, finding an image, posting at the right time — it's a part-time job on top of your actual job.&lt;/p&gt;

&lt;p&gt;I wanted to automate the whole thing. Not with some $50/month SaaS tool. From scratch, with code, for free.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  The Stack (All Free, No Credit Card Required)
&lt;/h2&gt;

&lt;p&gt;Before getting into the how, here's what the whole thing runs on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemini 2.5 Flash&lt;/strong&gt; via Google AI Studio — the brain of the operation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NewsAPI&lt;/strong&gt; — pulls real trending headlines in my niche every day&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stability AI&lt;/strong&gt; — generates the banner image (25 free credits/day)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LinkedIn API&lt;/strong&gt; — publishes the actual post&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Actions&lt;/strong&gt; — runs the whole thing on a cron schedule daily&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Total cost: genuinely zero. The kind of zero that doesn't secretly become $20 next month.&lt;/p&gt;




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

&lt;h2&gt;
  
  
  How It Actually Works
&lt;/h2&gt;

&lt;p&gt;The pipeline is straightforward once you see it laid out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Actions wakes up every morning at 10 AM&lt;/li&gt;
&lt;li&gt;The script hits NewsAPI for the top 5 headlines in my niche from the last 24 hours&lt;/li&gt;
&lt;li&gt;Gemini reads those headlines and picks the single most interesting topic&lt;/li&gt;
&lt;li&gt;Gemini then writes a full LinkedIn post about that topic — hook, insights, hashtags, CTA&lt;/li&gt;
&lt;li&gt;A second Gemini call writes a detailed image generation prompt (this part matters a lot — more on that in a second)&lt;/li&gt;
&lt;li&gt;Stability AI takes that prompt and generates a 16:9 banner&lt;/li&gt;
&lt;li&gt;The image uploads to LinkedIn, the post goes live&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The whole thing runs in under 90 seconds. No human involved.&lt;/p&gt;




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

&lt;h2&gt;
  
  
  The Part That Actually Took Time: LinkedIn OAuth
&lt;/h2&gt;

&lt;p&gt;I want to be honest — the hardest part of this entire build was not the AI stuff. It was LinkedIn's OAuth flow.&lt;/p&gt;

&lt;p&gt;LinkedIn's documentation is... generous in what it leaves out. A few things that burned me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;r_liteprofile&lt;/code&gt; scope is completely deprecated. Don't use it. Use &lt;code&gt;openid&lt;/code&gt;, &lt;code&gt;profile&lt;/code&gt;, &lt;code&gt;email&lt;/code&gt;, and &lt;code&gt;w_member_social&lt;/code&gt; instead.&lt;/li&gt;
&lt;li&gt;When exchanging your auth code for an access token, the request body &lt;strong&gt;must&lt;/strong&gt; be &lt;code&gt;x-www-form-urlencoded&lt;/code&gt;. If you use &lt;code&gt;form-data&lt;/code&gt; (the Postman default), you'll get a cryptic &lt;code&gt;invalid_client&lt;/code&gt; error and spend two hours questioning your life choices.&lt;/li&gt;
&lt;li&gt;Your app needs the "Share on LinkedIn" and "Sign In with LinkedIn using OpenID Connect" products enabled from the Products tab — not just the scopes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once those three things clicked, everything else was smooth.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Image Problem (And How Gemini Fixed It)
&lt;/h2&gt;

&lt;p&gt;Early versions of this used a generic prompt sent directly to Stability AI. The results were... creative. One image had a monitor displaying the text "Drawer Bortetdter Bomicks" in a very confident font. Not ideal for a professional post.&lt;/p&gt;

&lt;p&gt;The fix was adding a middle step: ask Gemini to write the image prompt first. Gemini gets the topic, understands the context, and writes a detailed prompt that explicitly says things like "NO text, NO words, NO letters, abstract geometric shapes, navy blue and teal palette." Stability AI follows a well-written prompt dramatically better than a vague one.&lt;/p&gt;

&lt;p&gt;That one change went from embarrassing to actually post-worthy. 🎨&lt;/p&gt;




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

&lt;h2&gt;
  
  
  What I Learned Building This
&lt;/h2&gt;

&lt;p&gt;A few things worth taking away from this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free-tier tools can compose into genuinely powerful systems. Gemini Flash, NewsAPI free tier, Stability AI's daily credits, and GitHub Actions together cover a surprisingly full automation stack.&lt;/li&gt;
&lt;li&gt;The AI part is often the easiest part. It's the plumbing — OAuth, API quirks, encoding formats — that eats your time.&lt;/li&gt;
&lt;li&gt;Prompting for image generation is a real skill. Vague prompts get weird results. Specific, negative-prompt-heavy prompts get professional results.&lt;/li&gt;
&lt;li&gt;Build dry-run modes early. Being able to preview the post and image before it goes live saved me from posting some genuinely terrible content during testing.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;h2&gt;
  
  
  The Takeaway
&lt;/h2&gt;

&lt;p&gt;If you've been meaning to build something with AI APIs but felt intimidated, this kind of project is the perfect starting point. It's real automation, real APIs, real results — and the hardest bugs are the boring ones, not the AI ones.&lt;/p&gt;

&lt;p&gt;I do freelance web development and build tools like this for clients too — if you're curious about what's possible, you can check out my work at &lt;a href="https://hire-sam.vercel.app" rel="noopener noreferrer"&gt;hire-sam.vercel.app&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Save this if it was useful — I'll be writing more about building practical AI tools without spending money.&lt;/p&gt;

&lt;h1&gt;
  
  
  buildinpublic #webdev #javascript #ai #devtools
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>productivity</category>
      <category>software</category>
    </item>
    <item>
      <title>Stop memorizing JS — think in execution context</title>
      <dc:creator>Samaresh Das</dc:creator>
      <pubDate>Thu, 23 Apr 2026 09:00:55 +0000</pubDate>
      <link>https://dev.to/samareshdas/stop-memorizing-js-think-in-execution-context-2ne4</link>
      <guid>https://dev.to/samareshdas/stop-memorizing-js-think-in-execution-context-2ne4</guid>
      <description>&lt;p&gt;Forget remembering JavaScript syntax; it's a crutch.&lt;/p&gt;

&lt;p&gt;What if I told you that the key to truly &lt;em&gt;understanding&lt;/em&gt; JavaScript isn't memorizing endless functions and methods, but grasping how the code actually runs? This article is about shifting your focus from rote learning to thinking about JavaScript's execution context.&lt;/p&gt;

&lt;p&gt;Every time your JavaScript code runs, the engine creates an "execution context." Think of it as a mini-environment where your code gets evaluated. There are two main types: the Global Execution Context (the default one for your entire script) and the Function Execution Context (created each time a function is called).&lt;/p&gt;

&lt;p&gt;Within each context, two crucial things happen: the creation phase and the execution phase. During creation, the engine sets up the &lt;code&gt;Variable Environment&lt;/code&gt; (where &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt;, &lt;code&gt;const&lt;/code&gt;, and function declarations are stored) and the &lt;code&gt;this&lt;/code&gt; binding. It also creates the &lt;code&gt;scope chain&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Then comes the execution phase, where the actual JavaScript code is run line by line. This is where &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt; declarations are put into a "temporal dead zone" until their declaration is reached, while &lt;code&gt;var&lt;/code&gt; variables are initialized with &lt;code&gt;undefined&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Let's look at a simple example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// undefined&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 10&lt;/span&gt;

&lt;span class="c1"&gt;// sayHello(); // This would throw an error&lt;/span&gt;
&lt;span class="c1"&gt;// let sayHello = () =&amp;gt; {&lt;/span&gt;
&lt;span class="c1"&gt;//   console.log("Hello!");&lt;/span&gt;
&lt;span class="c1"&gt;// };&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first &lt;code&gt;console.log(a)&lt;/code&gt; outputs &lt;code&gt;undefined&lt;/code&gt; because &lt;code&gt;var a&lt;/code&gt; is hoisted to the top of its scope and initialized with &lt;code&gt;undefined&lt;/code&gt; during the creation phase, &lt;em&gt;before&lt;/em&gt; the execution phase reaches &lt;code&gt;var a = 10;&lt;/code&gt;. If &lt;code&gt;a&lt;/code&gt; were declared with &lt;code&gt;let&lt;/code&gt; or &lt;code&gt;const&lt;/code&gt;, the first &lt;code&gt;console.log&lt;/code&gt; would actually throw a &lt;code&gt;ReferenceError&lt;/code&gt; because of the temporal dead zone.&lt;/p&gt;

&lt;p&gt;Understanding execution context helps untangle confusing behavior, especially with asynchronous operations and closures. It's the "why" behind what your code is doing.&lt;/p&gt;

&lt;p&gt;For me, this mindset shift was a game-changer. It's what allows me to build complex websites and apps as a freelancer. If you're ever looking for someone to build your next web project, you can check out my portfolio here: &lt;a href="https://hire-sam.vercel.app/" rel="noopener noreferrer"&gt;https://hire-sam.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The real superpower in JavaScript isn't memorization, it's understanding the runtime.&lt;/p&gt;

&lt;p&gt;Follow for more dev content&lt;/p&gt;

</description>
      <category>javascript</category>
    </item>
    <item>
      <title>JS concepts I understood only after building real things</title>
      <dc:creator>Samaresh Das</dc:creator>
      <pubDate>Wed, 22 Apr 2026 09:00:53 +0000</pubDate>
      <link>https://dev.to/samareshdas/js-concepts-i-understood-only-after-building-real-things-a6f</link>
      <guid>https://dev.to/samareshdas/js-concepts-i-understood-only-after-building-real-things-a6f</guid>
      <description>&lt;p&gt;The tutorials never told you the &lt;em&gt;real&lt;/em&gt; story about these JavaScript concepts.&lt;/p&gt;

&lt;p&gt;We've all been there, right? You've read the docs, watched countless videos, and felt like you &lt;em&gt;got&lt;/em&gt; a JavaScript concept. Then, you try to apply it to a real-world project, and suddenly, it's like learning it for the first time all over again. That's been my journey as a freelancer building websites, and these are the JS concepts that really clicked only after getting my hands dirty with actual client work.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;this&lt;/code&gt; Keyword: The Elusive Chameleon
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;this&lt;/code&gt; keyword is probably the biggest culprit. In tutorials, it often seems straightforward, tied neatly to the object it's called upon. But in the wild, &lt;code&gt;this&lt;/code&gt; is a shape-shifter. Its value depends &lt;em&gt;entirely&lt;/em&gt; on how a function is invoked. Strict mode, arrow functions, &lt;code&gt;bind&lt;/code&gt;, &lt;code&gt;call&lt;/code&gt;, &lt;code&gt;apply&lt;/code&gt; – these all change its behavior in ways that will make your head spin until you've debugged a few messy callbacks or event handlers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Tutorial version: "See? it's the object!"&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;MyObject&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Hello from &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// "Hello from MyObject"&lt;/span&gt;

&lt;span class="c1"&gt;// Real-world chaos:&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Person&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sayHi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// 'this' here is often window or undefined in strict mode!&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Hi, I'm &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Person&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sam&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sayHi&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Might not work as expected!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Asynchronous JavaScript: Beyond &lt;code&gt;async/await&lt;/code&gt; Syntax
&lt;/h3&gt;

&lt;p&gt;Sure, &lt;code&gt;async/await&lt;/code&gt; makes asynchronous code &lt;em&gt;look&lt;/em&gt; synchronous, which is a huge win. But understanding &lt;em&gt;what's happening under the hood&lt;/em&gt; with the event loop, the microtask queue, and the macrotask queue is crucial for performance optimization and preventing dreaded race conditions. It’s not just about writing clean code; it's about writing &lt;em&gt;predictable&lt;/em&gt; code.&lt;/p&gt;

&lt;p&gt;Think about handling multiple API requests where the order matters, or dealing with user input that triggers background operations. Without a grasp of the event loop, debugging those situations feels like trying to catch smoke.&lt;/p&gt;

&lt;h3&gt;
  
  
  Closures: More Than Just Scope Holding
&lt;/h3&gt;

&lt;p&gt;Closures are often explained as functions remembering their parent scope. That's technically true, but the real power and utility become apparent when you build things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Data encapsulation:&lt;/strong&gt; Creating private variables that can't be directly accessed or modified from outside.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Currying and partial application:&lt;/strong&gt; Creating specialized versions of functions.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Event handlers that maintain state:&lt;/strong&gt; Imagine clicking a button multiple times and having it remember how many times it's been clicked without needing a global variable.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;createCounter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// This variable is "closed over" by the returned function&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;counter1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createCounter&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nf"&gt;counter1&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// 1&lt;/span&gt;
&lt;span class="nf"&gt;counter1&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// 2&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;counter2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createCounter&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nf"&gt;counter2&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// 1 (independent count)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Building real features, whether for a small business website or a complex web application, forces you to confront these concepts not as academic exercises, but as fundamental tools for problem-solving. If you’re looking for someone to help bring your web projects to life, you can check out what I do at &lt;a href="https://hire-sam.vercel.app/" rel="noopener noreferrer"&gt;https://hire-sam.vercel.app/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The takeaway? Don't just learn the syntax; understand the &lt;em&gt;behavior&lt;/em&gt; and the &lt;em&gt;implications&lt;/em&gt; in a live application. That's where true mastery lies.&lt;/p&gt;

&lt;p&gt;Follow for more dev content.&lt;/p&gt;

&lt;h1&gt;
  
  
  javascript #webdevelopment #programming #freelancer
&lt;/h1&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
      <category>freelancer</category>
    </item>
  </channel>
</rss>
