<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Mathias Falci</title>
    <description>The latest articles on Forem by Mathias Falci (@mathiasfc).</description>
    <link>https://forem.com/mathiasfc</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%2F136280%2F315e20c3-d441-42df-8442-ddf765159dab.png</url>
      <title>Forem: Mathias Falci</title>
      <link>https://forem.com/mathiasfc</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/mathiasfc"/>
    <language>en</language>
    <item>
      <title>How Do You Actually Compare LLMs? (The Battle Nobody's Talking About)</title>
      <dc:creator>Mathias Falci</dc:creator>
      <pubDate>Thu, 25 Dec 2025 23:45:00 +0000</pubDate>
      <link>https://forem.com/mathiasfc/how-do-you-actually-compare-llms-the-battle-nobodys-talking-about-2ic7</link>
      <guid>https://forem.com/mathiasfc/how-do-you-actually-compare-llms-the-battle-nobodys-talking-about-2ic7</guid>
      <description>&lt;p&gt;Hey folks! 👋&lt;/p&gt;

&lt;p&gt;So... The end of 2025 was absolutely wild in the AI world. Within just two weeks, we got Claude Opus 4.5, Gemini 3 Pro, and GPT 5.1, all claiming to be the best coding model ever made. It felt like watching a Formula 1 race where everyone crosses the finish line at the same time.&lt;/p&gt;

&lt;p&gt;But here's the thing that's been bugging me: &lt;strong&gt;how do we actually know which one is better?&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I mean, sure, companies throw around impressive numbers like "80.9% on SWE bench!" or "91.9% on GPQA Diamond!" But what does that even mean for us developers who just want to ship code?&lt;/p&gt;

&lt;p&gt;After spending way too much time diving into benchmarks, testing different models, and trying to make sense of this AI arms race, I want to share what I've learned about actually comparing these models in a way that matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem With Benchmarks (Yeah, I Said It)
&lt;/h2&gt;

&lt;p&gt;Look, benchmarks are useful. They give us something to compare. But here's what nobody tells you: &lt;strong&gt;a model that scores 80% on SWE bench might actually perform worse for YOUR specific use case than one that scores 75%.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Why? Because benchmarks test specific skills in specific ways. It's like saying someone is a better developer because they can solve LeetCode problems faster. That might be true! But it doesn't mean they'll write better production code for your app.&lt;/p&gt;

&lt;p&gt;When Claude Opus 4.5 launched, Anthropic made a big deal about it scoring higher than any human on their internal engineering exam. That's genuinely impressive! But does that mean it's better at helping you debug a React component? Not necessarily.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Actually Matters When Comparing LLMs
&lt;/h2&gt;

&lt;p&gt;After testing these models for different tasks, I've realized there are really &lt;strong&gt;three dimensions&lt;/strong&gt; that matter way more than any single benchmark score:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. What Are You Actually Building?
&lt;/h3&gt;

&lt;p&gt;This sounds obvious, but it changes everything. The "best" model for writing a Python script is different from the best model for architecting a microservices system.&lt;/p&gt;

&lt;p&gt;For example, when comparing the big three models on coding tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Opus 4.5&lt;/strong&gt; dominates on complex, multi step workflows. It's like having a senior engineer who thinks through the entire architecture before writing code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini 3 Pro&lt;/strong&gt; crushes it on pure reasoning tasks and academic level problem solving. If you need to solve a really gnarly algorithmic problem, this might be your pick.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT 5.1&lt;/strong&gt; (especially Codex Max) is incredibly reliable for straightforward implementation tasks. It just works, and the code it produces tends to integrate cleanly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these is "better", they're optimized for different things.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Speed vs. Quality (the hidden trade off)
&lt;/h3&gt;

&lt;p&gt;Here's something that benchmark scores don't show: how long does the model take to respond?&lt;/p&gt;

&lt;p&gt;I noticed this when using different models for the same task. Gemini 3 Pro often gives you working code faster, but Claude Opus 4.5 might give you a more thoughtful solution that considers edge cases you didn't even think about. GPT 5.1 lands somewhere in the middle.&lt;/p&gt;

&lt;p&gt;For rapid prototyping? Speed wins. For production code that needs to be bulletproof? Maybe you want that extra thinking time.&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%2F4hewn1gottf32etpppf9.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%2F4hewn1gottf32etpppf9.png" alt="Just to have some fun. You took 8 hours to write 2 lines of code?" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Cost (let's be real)
&lt;/h3&gt;

&lt;p&gt;This is where things get really interesting. Claude Opus 4.5 dramatically dropped their pricing, making frontier level performance actually affordable for regular use.&lt;/p&gt;

&lt;p&gt;But here's the catch: a "cheaper" model that takes 3 attempts to get right might cost more than an "expensive" model that nails it on the first try. Token usage matters just as much as token price.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Benchmarks That Actually Help
&lt;/h2&gt;

&lt;p&gt;Okay, so if single scores don't tell the whole story, what should you look at? Here are the benchmarks I actually pay attention to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SWE bench Verified&lt;/strong&gt;: This tests real world bug fixing from actual GitHub repos. If a model scores high here (like Claude Opus 4.5's 80.9%), it means it can handle the messy, context heavy work that developers actually do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Terminal bench 2.0&lt;/strong&gt;: How well can the model work in command line environments? This matters way more than people realize if you're building DevOps tools or automation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP Atlas&lt;/strong&gt;: For scaled tool use. If you're building agents that need to juggle multiple APIs and services, this benchmark shows which models can keep track of complex workflows.&lt;/p&gt;

&lt;p&gt;The key is looking at &lt;strong&gt;benchmark combinations&lt;/strong&gt; that match your use case, not just the highest single score.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Real World Test
&lt;/h2&gt;

&lt;p&gt;I wanted to see this for myself, so I gave all three models the same task.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Opus 4.5&lt;/strong&gt; gave me the most comprehensive solution, it thought about data validation, built in retry logic, and even suggested monitoring. But it was also the slowest and used the most tokens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemini 3 Pro&lt;/strong&gt; was lightning fast and gave me clean, efficient code. But I had to manually add some edge case handling it missed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPT 5.1&lt;/strong&gt; was the most balanced, solid code, reasonable speed, handled most edge cases. It felt like the "safe choice."&lt;/p&gt;

&lt;p&gt;Which one was best? Honestly, it depends on whether I'm prototyping (Gemini), building production features (GPT 5.1), or architecting something complex (Claude Opus 4.5).&lt;/p&gt;

&lt;h2&gt;
  
  
  So... How DO You Choose?
&lt;/h2&gt;

&lt;p&gt;Here's my framework:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Start with your specific task&lt;/strong&gt; -&amp;gt; Don't just pick "the best model." Pick the best model for what you're building right now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Test with your actual use case&lt;/strong&gt; -&amp;gt; Spend an hour trying different models on a real problem you're solving. The difference in how they approach your specific domain will be way more revealing than any benchmark.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Consider the full cost&lt;/strong&gt; -&amp;gt; Factor in tokens used, iterations needed, and your time debugging. Sometimes the "expensive" model is actually cheaper.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Watch for specialization&lt;/strong&gt; -&amp;gt; Models are increasingly being optimized for specific tasks. Claude for agentic workflows, Gemini for reasoning, GPT for reliability. Use that to your advantage.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;The "best" LLM is the one that works best for your specific needs, at a price point that makes sense, with a workflow that fits how you actually work.&lt;/p&gt;

&lt;p&gt;These benchmark wars are fun to watch, but they're not the full story. Just like how the fastest laptop isn't always the best laptop for YOUR work, the highest scoring model isn't always the best model for YOUR project.&lt;/p&gt;

&lt;p&gt;The real skill isn't knowing which model has the highest score, it's knowing which model to use when, and why.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What's your experience been?&lt;/strong&gt; Have you found certain models work better for specific tasks? I'd love to hear what you've discovered in your own testing.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>benchmarks</category>
      <category>programming</category>
    </item>
    <item>
      <title>How I Built a Fully Automated Instagram Bot in One Weekend (From Zero n8n Knowledge to Live Workflow)</title>
      <dc:creator>Mathias Falci</dc:creator>
      <pubDate>Fri, 05 Sep 2025 19:42:04 +0000</pubDate>
      <link>https://forem.com/mathiasfc/how-i-built-a-fully-automated-instagram-bot-in-one-weekend-from-zero-n8n-knowledge-to-live-2cho</link>
      <guid>https://forem.com/mathiasfc/how-i-built-a-fully-automated-instagram-bot-in-one-weekend-from-zero-n8n-knowledge-to-live-2cho</guid>
      <description>&lt;p&gt;Hey everyone! 👋&lt;/p&gt;

&lt;p&gt;I want to share something pretty cool that happened last weekend. I went from never touching &lt;a href="https://n8n.io/" rel="noopener noreferrer"&gt;n8n&lt;/a&gt; to having a fully automated Instagram bot that finds content, processes it with AI, and creates beautiful carousel posts (all without any manual intervention). Honestly? I had no idea what I was getting myself into.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "Aha!" Moment
&lt;/h2&gt;

&lt;p&gt;Let me be straight with you: n8n is incredibly powerful, and I had zero experience with it before this weekend. I had some previous experience automating with Python, but n8n really showed me the full potential of workflow automation tools.&lt;/p&gt;

&lt;p&gt;The thing that blew my mind 🤯 is how there are literally unlimited possibilities. Seriously, check out their &lt;a href="https://n8n.io/workflows/" rel="noopener noreferrer"&gt;templates page&lt;/a&gt; if you want to see what I mean. From simple data processing to complex multi step workflows involving APIs, databases, AI agents, it's like having a programming language built specifically for connecting different services together.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pivot That Changed Everything
&lt;/h2&gt;

&lt;p&gt;My original idea was simple: &lt;em&gt;Create an instagram account that posts current crypto prices. Seemed straightforward, right? Wrong.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;About halfway through building it, I realized something obvious that I should have thought of earlier, crypto prices get outdated in hours (even in minutes). By the time someone sees a post, the information is basically useless.&lt;/p&gt;

&lt;p&gt;So I pivoted. Instead of prices, why not crypto news? News stays relevant longer, provides actual value to followers, and there's always fresh content to work with. ✅&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I'm Really Doing This
&lt;/h2&gt;

&lt;p&gt;Look, I'll be honest, automation has always fascinated me. There's something almost magical about setting up a system that just... works. While you're sleeping, having coffee, or working on other projects, this thing is out there doing its job.&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%2F1prgk8goaw9pf3ikwnj7.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%2F1prgk8goaw9pf3ikwnj7.png" alt="Automation meme image" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But beyond the cool factor, I wanted to really understand what n8n could do. I learn best by diving into actual projects, and this felt like the perfect way to explore a tool that could change how I approach repetitive tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the Magic Happens
&lt;/h2&gt;

&lt;p&gt;Here's the workflow breakdown:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Content Discovery&lt;/strong&gt;: The bot searches for trending crypto news from reliable sources using RSS feeds and news APIs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Content Processing&lt;/strong&gt;: Each article gets analyzed by AI (using Gemini API) to extract key points, determine relevance, and create engaging summaries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Content Creation&lt;/strong&gt;: The AI then transforms this information into Instagram friendly carousel content, multiple slides with digestible information, proper formatting, and engaging hooks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automated Posting&lt;/strong&gt;: Finally, everything gets posted to Instagram automatically using their API, complete with relevant hashtags and optimal timing.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Of course, just looking at these steps it seems pretty simple, and the idea actually is, but here we have the final workflow view (which I kindly call my little monster):&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%2Ff6hmqlgamwm4k82v88gf.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%2Ff6hmqlgamwm4k82v88gf.png" alt="N8N workflow" width="800" height="179"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The beautiful thing is that once it's set up, it just runs. Every few hours, fresh content appears on the Instagram account without me lifting a finger.&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%2F8i5t959rhetmjcu1r395.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%2F8i5t959rhetmjcu1r395.png" alt="automation meme workflow" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Numbers Don't Lie
&lt;/h2&gt;

&lt;p&gt;After about &lt;strong&gt;5 days&lt;/strong&gt; of running this automation, here are the results:&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%2Ffgll1da4jvd4ab0nrlrx.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%2Ffgll1da4jvd4ab0nrlrx.png" alt="Instagram followers, 25 followers" width="263" height="60"&gt;&lt;/a&gt;&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%2F8ennhjw9h3pof4ws127y.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%2F8ennhjw9h3pof4ws127y.png" alt="Professional dashboard, show 1.5k of views" width="409" height="82"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm curious to see what the next few months bring. Will the content quality stay consistent? How will the engagement evolve? Will I need to tweak the workflow as I learn more about what works?&lt;/p&gt;

&lt;p&gt;These are the questions that keep this project interesting beyond just the technical challenge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Want to Build Something Together?
&lt;/h2&gt;

&lt;p&gt;Here's the thing, this project taught me that the barrier to entry for powerful automation is way lower than I thought. If you've been curious about n8n, workflow automation, or just want to build something cool, I'd love to connect.&lt;/p&gt;

&lt;p&gt;Whether you're thinking about content automation, data processing, or something completely different, there's probably a way to make n8n work for it.&lt;/p&gt;

</description>
      <category>n8n</category>
      <category>automation</category>
      <category>bot</category>
      <category>workflow</category>
    </item>
    <item>
      <title>10 Years on GitHub: What I’ve Learned</title>
      <dc:creator>Mathias Falci</dc:creator>
      <pubDate>Sat, 07 Jun 2025 18:03:07 +0000</pubDate>
      <link>https://forem.com/mathiasfc/10-years-on-github-what-ive-learned-4h8e</link>
      <guid>https://forem.com/mathiasfc/10-years-on-github-what-ive-learned-4h8e</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: After 10 years on GitHub, I’ve learned the value of consistency. From my first commit as an intern to collaborating on open source, GitHub has shaped how I learn, share, and build. In this post, I reflect on key lessons from my journey, and why it still matters today.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 A Decade on GitHub
&lt;/h2&gt;

&lt;p&gt;I remember when I was in my first job as an intern in a software house called Absis (2015). I was with two more colleagues and we decided to create a GitHub account (to be honest here, I don’t exactly remember why), because in the software house we used Tortoise SVN (yeah, pretty old huh?). But the thing is, we created it and my journey with that awesome and powerful platform began (cheers to &lt;a href="https://github.com/kaleb14587" rel="noopener noreferrer"&gt;Kaleb&lt;/a&gt; and Gabriel). By the way, I do not find the Gabriel's GitHub anymore :/&lt;/p&gt;

&lt;p&gt;As I mentioned before, I was an intern and I didn’t even know exactly the purpose of GitHub, but I knew that it was important since all my references used it and had it.&lt;/p&gt;

&lt;p&gt;Things didn’t start smooth with GitHub. We created it, but actually the journey of learning how to use it had just begun. Then I started some free online courses, and things started to make sense.&lt;/p&gt;

&lt;p&gt;Maybe for most of the readers, Git and GitHub are already mastered topics, and you use them in your daily work routine. But trust me guys, it can look pretty simple and useful for us right now, but for those who are starting, it is so complicated and can take a month or more to get used to it. It’s hard, but whenever possible, try to put in practice your empathy to look at things with a beginner’s perspective.&lt;/p&gt;

&lt;p&gt;The following tip is very useful and I wish someone had shared it with me before. I discovered it by myself, but basically, before starting to use or study something, I like to go back to the origin and understand why it was created, what problem it solves. In the case of Git, it was pretty interesting, I strongly recommend you to go for that information and learn more about it =)&lt;/p&gt;

&lt;h3&gt;
  
  
  🕰️ Early Days
&lt;/h3&gt;

&lt;p&gt;I don’t remember exactly my first repository, my first star or issue. Of course, I can check it, because we always have all the history stored in GitHub. Probably I learned that after pushing some changes that deleted something that was not meant to be deleted haha.&lt;/p&gt;

&lt;p&gt;What really made a difference in my GitHub learning journey was &lt;strong&gt;consistency&lt;/strong&gt;, even just to get familiar with the common commands. After the intern job in the software house, I had the opportunity to work as a front-end developer in a digital marketing agency, where I needed to use GitHub every day to deliver my work.&lt;/p&gt;

&lt;p&gt;It was around 2017, two years after the creation of my GitHub account. At that time, things started to get serious with GitHub, and I understood that there is no better place for collaboration than inside GitHub or any other Git-based versioning platform/tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  📚 What GitHub Helped Me Learn
&lt;/h3&gt;

&lt;p&gt;It is so satisfying when you create pull requests to a recently discovered project and your collaboration is accepted by the owners of the project. Probably GitHub was the reason for my passion about open source and collaboration.&lt;/p&gt;

&lt;p&gt;I really recommend you take a periodic look at the &lt;a href="https://github.com/trending" rel="noopener noreferrer"&gt;trending page&lt;/a&gt; in GitHub. There are always awesome projects that you can check out, that you can use, fork, make modifications and improvements to, or even discover new worlds of possibilities.&lt;/p&gt;

&lt;p&gt;Who, with more than 1 year of coding, has never found an issue in the repository of a lib that you use, and you are facing some error that you have no clue how to solve — and another person already created an issue with the same problem. You feel so understood! Of course, sometimes there is no issue related to the problem you are facing, so be the one who will create the issue (following the issue template, please haha), and help future folks who will fight with it in the future.&lt;/p&gt;

&lt;p&gt;Also, every year we have the &lt;a href="https://hacktoberfest.com/" rel="noopener noreferrer"&gt;hacktoberfest&lt;/a&gt;, a brilliant event that incentivizes open source collaboration. You will achieve points and get rewards if you collaborate with other repositories, if people collaborate with your repositories, and so on. It’s really cool for experienced developers, but even more so for those who are starting in that world.&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%2Fkkc6197g7scvasweilvd.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%2Fkkc6197g7scvasweilvd.png" alt="Hacktoberfest banner" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I don’t have words to describe how “proud” I felt after receiving my first prize kit from Hacktoberfest back in 2019. Until today I have and use my t-shirt :D&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%2Fptyprwxtxgbovd6fe94v.jpeg" 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%2Fptyprwxtxgbovd6fe94v.jpeg" alt="Hacktoberfest prize" width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🔮 What’s Next?
&lt;/h3&gt;

&lt;p&gt;After 10 years on GitHub, I know one thing for sure: this journey is far from over.&lt;/p&gt;

&lt;p&gt;The tech world is evolving faster than ever with AI, new frameworks, and new ways of collaborating. GitHub itself is changing, with tools like Copilot making coding even more accessible and collaborative.&lt;/p&gt;

&lt;p&gt;For me, the next step is about &lt;strong&gt;keep consistent&lt;/strong&gt; , &lt;strong&gt;keep&lt;/strong&gt; contributing, &lt;strong&gt;keep&lt;/strong&gt; learning, and &lt;strong&gt;keep&lt;/strong&gt; helping others, especially beginners who are just getting started (like I once was).&lt;/p&gt;

&lt;p&gt;And of course… the goal is to come back here in another 10 years and write a new post: 20 Years on GitHub 🚀.&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%2F1uyjx9pbmg1016ri1noj.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%2F1uyjx9pbmg1016ri1noj.png" alt="The list of years in github" width="193" height="610"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you for read until here 🙏 Let's connect! Feel free to follow me on &lt;a href="https://github.com/mathiasfc" rel="noopener noreferrer"&gt;github&lt;/a&gt;, I'll for sure, follow you back. Happy coding!&lt;/p&gt;

</description>
      <category>github</category>
      <category>developers</category>
      <category>career</category>
      <category>programming</category>
    </item>
    <item>
      <title>50 Must-Know JavaScript Topics to Master Your Next Interview 🥷</title>
      <dc:creator>Mathias Falci</dc:creator>
      <pubDate>Thu, 30 Jan 2025 20:29:53 +0000</pubDate>
      <link>https://forem.com/mathiasfc/50-must-know-javascript-topics-to-master-your-next-interview-3cmk</link>
      <guid>https://forem.com/mathiasfc/50-must-know-javascript-topics-to-master-your-next-interview-3cmk</guid>
      <description>&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;A carefully curated list of topics that are commonly covered in JavaScript technical interviews. Due to the quantity, we won’t dive deep into each topic, but the goal here is to present them, so you can explore more on your own. Without further ado, let’s dive into the content!&lt;/p&gt;

&lt;h4&gt;
  
  
  1. &lt;code&gt;compose()&lt;/code&gt; and &lt;code&gt;pipe()&lt;/code&gt; Polyfill
&lt;/h4&gt;

&lt;p&gt;Both are higher-order functions that allow you to combine multiple functions into one. &lt;code&gt;compose()&lt;/code&gt;: Composes functions from right to left, meaning the rightmost function is executed first. &lt;code&gt;pipe()&lt;/code&gt;: Composes functions from left to right, meaning the leftmost function is executed first. &lt;a href="https://dev.to/joelbonetr/js-functional-concepts-pipe-and-compose-1mho"&gt;Check the implementation here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Promises and Their Helper Methods
&lt;/h4&gt;

&lt;p&gt;Promises are fundamental for handling asynchronous operations in JavaScript. Understanding how to &lt;a href="https://medium.com/@code_it_right/polyfill-promises-part-1-a3a110fe115f" rel="noopener noreferrer"&gt;implement polyfills&lt;/a&gt; for &lt;code&gt;Promise.all()&lt;/code&gt;, &lt;code&gt;Promise.race()&lt;/code&gt;, and &lt;code&gt;Promise.allSettled()&lt;/code&gt; demonstrates deep knowledge of promise mechanics and common async patterns.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Promise.all()&lt;/code&gt;: Waits for all promises to resolve or fails if any reject&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Promise.race()&lt;/code&gt;: Resolves/rejects as soon as the first promise settles&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Promise.allSettled()&lt;/code&gt;: Waits for all promises to settle, regardless of outcome&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3. Implement the &lt;code&gt;.map&lt;/code&gt;, &lt;code&gt;.filter&lt;/code&gt;, &lt;code&gt;.reduce&lt;/code&gt;, and &lt;code&gt;.forEach&lt;/code&gt; polyfills
&lt;/h4&gt;

&lt;p&gt;Creating these polyfills highlights your grasp of array iteration methods and how to work with JavaScript's Array.prototype. Each method serves a unique purpose, such as transforming, filtering, or reducing data. &lt;a href="https://dev.to/umerjaved178/polyfills-for-foreach-map-filter-reduce-in-javascript-1h13"&gt;Explore practical examples&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Implement the &lt;code&gt;Function.bind&lt;/code&gt;, &lt;code&gt;call&lt;/code&gt;, and &lt;code&gt;apply&lt;/code&gt; Methods
&lt;/h4&gt;

&lt;p&gt;These methods are fundamental for controlling the execution context &lt;code&gt;this&lt;/code&gt; of functions. Implementing them requires a solid understanding of how &lt;code&gt;this&lt;/code&gt; behaves in JavaScript. &lt;a href="https://www.w3schools.com/js/js_this.asp" rel="noopener noreferrer"&gt;Learn more&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  5. Implement Async.parallel and Async.series for Executing Async Tasks
&lt;/h4&gt;

&lt;p&gt;These are utility methods to manage asynchronous workflows. While parallel runs tasks concurrently, series executes them sequentially, making it crucial for managing complex async operations. &lt;a href="https://www.mbloging.com/post/learn-how-to-implement-async-parallel-and-async-series-for-better-workflow" rel="noopener noreferrer"&gt;Check code examples here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  6. Build a Promise from Scratch
&lt;/h4&gt;

&lt;p&gt;Creating a promise from scratch demonstrates your understanding of the promise lifecycle, including states (pending, fulfilled, rejected) and chaining. &lt;a href="https://humanwhocodes.com/blog/2020/09/creating-javascript-promise-from-scratch-constructor/" rel="noopener noreferrer"&gt;Here's a good example&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  7. Implement a Retry API
&lt;/h4&gt;

&lt;p&gt;Retry APIs are used to handle transient failures in async operations. Implementing one showcases your problem-solving skills for error recovery in unreliable systems. &lt;a href="https://dev.to/officialanurag/javascript-secrets-how-to-implement-retry-logic-like-a-pro-g57"&gt;Retry logic like a PRO&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  8. Implement Memoization
&lt;/h4&gt;

&lt;p&gt;Memoization optimizes performance by caching the results of expensive function calls. This technique is commonly used in recursive problems like Fibonacci sequence calculations.&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;// Fibonacci with Memoization&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;fibonacci&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;memo&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Check if the result is already cached&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;memo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

  &lt;span class="c1"&gt;// Compute and store the result in the cache&lt;/span&gt;
  &lt;span class="nx"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fibonacci&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;fibonacci&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;n&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;h4&gt;
  
  
  9. Currying
&lt;/h4&gt;

&lt;p&gt;Currying transforms a function with multiple arguments into a sequence of functions, each taking one argument. &lt;strong&gt;It’s a powerful functional programming concept&lt;/strong&gt; often used for partial application. &lt;a href="https://dev.to/darkmavis1980/a-practical-example-on-how-to-use-currying-in-javascript-1ae9"&gt;An excellent practical example of currying&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  10. String.prototype.repeat
&lt;/h4&gt;

&lt;p&gt;The repeat method repeats a string a specified number of times. Understanding this showcases your grasp of string manipulation and built-in methods.&lt;/p&gt;

&lt;h4&gt;
  
  
  11. Design Patterns
&lt;/h4&gt;

&lt;p&gt;Design patterns are essential tools in software development, offering reusable and proven solutions to common design challenges. They promote best practices, improve code maintainability, and foster collaboration by providing a shared vocabulary for developers. &lt;strong&gt;Definitely is a must-know topic.&lt;/strong&gt; &lt;a href="https://dev.to/topefasasi/js-design-patterns-a-comprehensive-guide-h3m"&gt;A comprehensive guide&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  12. Implement the Publisher-Subscriber Pattern
&lt;/h4&gt;

&lt;p&gt;The &lt;strong&gt;Publisher-Subscriber (Pub-Sub)&lt;/strong&gt; pattern is a way to let different parts of your application communicate without knowing about each other. In this pattern, "publishers" send out events, and "subscribers" listen for those events and react. This makes your app more scalable (you can add or remove parts easily), modular (components work independently), and flexible (you can handle events dynamically). &lt;a href="https://www.digitalocean.com/community/tutorials/publish-subscribe-pattern-in-node-js" rel="noopener noreferrer"&gt;More detailed explanation&lt;/a&gt;.&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;pubsub&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;events&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;
  &lt;span class="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;callback&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;events&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&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;events&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&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;events&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&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="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;events&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;[]).&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;callback&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="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;pubsub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;message&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;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Received:&lt;/span&gt;&lt;span class="dl"&gt;"&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;pubsub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;message&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="s2"&gt;Hello, Pub-Sub!&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;/div&gt;



&lt;h4&gt;
  
  
  13. Prototype and Prototype Inheritance
&lt;/h4&gt;

&lt;p&gt;In JavaScript, every object has a hidden "prototype" that it can inherit properties and methods from. This is called &lt;strong&gt;prototypal inheritance&lt;/strong&gt;, and it’s a key feature of how JavaScript handles object-oriented programming. Instead of creating classes (like in other languages), JavaScript uses prototypes to share functionality between objects. This makes your code more efficient and flexible, as objects can reuse behavior from their prototypes.&lt;/p&gt;

&lt;h4&gt;
  
  
  14. How Rendering Works in the Browser
&lt;/h4&gt;

&lt;p&gt;When you load a webpage, the browser goes through several steps to display it: it reads the HTML to build the structure (DOM), processes the CSS to create styles (CSSOM), combines them into a "render tree," and finally paints the page on the screen. Understanding this process helps you identify and fix performance issues, like slow-loading pages or janky animations. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Performance/How_browsers_work" rel="noopener noreferrer"&gt;A detailed explanation here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  15. Event Delegation and Event Propagation
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Event delegation&lt;/strong&gt; is a technique where you add a single event listener to a parent element instead of multiple listeners to individual child elements. This improves performance, especially for dynamic content. &lt;strong&gt;Event propagation&lt;/strong&gt; describes how events move through the DOM: first "capturing" (top-down) and then "bubbling" (bottom-up). Understanding these concepts helps you handle DOM events more efficiently and avoid common pitfalls. &lt;a href="https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events" rel="noopener noreferrer"&gt;Learn more about event delegation and propagation here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  16. Progressive Web Applications (PWAs)
&lt;/h4&gt;

&lt;p&gt;PWAs are web apps that feel like native apps. They work offline, send push notifications, and can be installed on your device. They use &lt;strong&gt;service workers&lt;/strong&gt; (for offline functionality) and &lt;strong&gt;app manifests&lt;/strong&gt; (for app-like behavior). &lt;a href="https://web.dev/progressive-web-apps/" rel="noopener noreferrer"&gt;Deep dive into PWAs&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  17. Clone an Object
&lt;/h4&gt;

&lt;p&gt;Cloning an object means creating a copy. A &lt;strong&gt;shallow copy&lt;/strong&gt; duplicates only the top-level properties, while a &lt;strong&gt;deep copy&lt;/strong&gt; duplicates nested objects too. Use &lt;code&gt;Object.assign&lt;/code&gt; for shallow copies and &lt;code&gt;structuredClone&lt;/code&gt; or libraries for deep copies. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/structuredClone" rel="noopener noreferrer"&gt;See more about object cloning here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  18. Debouncing and Throttling
&lt;/h4&gt;

&lt;p&gt;Both techniques improve performance in apps with frequent events (like scrolling or typing). &lt;strong&gt;Debouncing&lt;/strong&gt; delays execution until after a pause, while &lt;strong&gt;throttling&lt;/strong&gt; limits execution to once every set time interval. &lt;a href="https://css-tricks.com/debouncing-throttling-explained-examples/" rel="noopener noreferrer"&gt;Learn more about debouncing and throttling here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  19. Implement clearAllTimeout()
&lt;/h4&gt;

&lt;p&gt;This function clears all active &lt;code&gt;setTimeout&lt;/code&gt; timers. It’s useful for managing multiple timers and preventing unwanted executions. &lt;a href="https://stackoverflow.com/questions/8860188/javascript-clear-all-timeouts" rel="noopener noreferrer"&gt;Code example&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  20. How Does "this" Work in Different Scenarios?
&lt;/h4&gt;

&lt;p&gt;The value of &lt;code&gt;this&lt;/code&gt; changes based on how a function is called:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In global scope: &lt;code&gt;this&lt;/code&gt; refers to the global object (e.g., &lt;code&gt;window&lt;/code&gt; in browsers).&lt;/li&gt;
&lt;li&gt;In object methods: &lt;code&gt;this&lt;/code&gt; refers to the object.&lt;/li&gt;
&lt;li&gt;With &lt;code&gt;bind&lt;/code&gt;, &lt;code&gt;call&lt;/code&gt;, or &lt;code&gt;apply&lt;/code&gt;: &lt;code&gt;this&lt;/code&gt; is explicitly set. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this" rel="noopener noreferrer"&gt;Deep dive into &lt;code&gt;this&lt;/code&gt; binding here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  21. Difference Between Synchronous and Asynchronous Code
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Synchronous code&lt;/strong&gt; runs line-by-line, blocking other operations until it finishes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asynchronous code&lt;/strong&gt; runs in the background, allowing other tasks to continue. It uses &lt;strong&gt;callbacks&lt;/strong&gt;, &lt;strong&gt;promises&lt;/strong&gt;, or &lt;strong&gt;async/await&lt;/strong&gt;. &lt;a href="https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Concepts" rel="noopener noreferrer"&gt;Learn more about async vs. sync here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  22. Explain the Concept of "Truthy" and "Falsy" Values
&lt;/h4&gt;

&lt;p&gt;In JavaScript, some values are treated as &lt;code&gt;false&lt;/code&gt; (falsy) in conditions, like &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;""&lt;/code&gt;, &lt;code&gt;null&lt;/code&gt;, &lt;code&gt;undefined&lt;/code&gt;, and &lt;code&gt;false&lt;/code&gt;. Everything else is &lt;code&gt;true&lt;/code&gt; (truthy). This helps avoid bugs in conditionals. See the official docs for &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Truthy" rel="noopener noreferrer"&gt;truthy&lt;/a&gt; and &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Falsy" rel="noopener noreferrer"&gt;falsy&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  23. What Are Template Literals in ES6?
&lt;/h4&gt;

&lt;p&gt;Template literals are strings wrapped in backticks (&lt;code&gt;`&lt;/code&gt;) that allow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-line strings.&lt;/li&gt;
&lt;li&gt;Embedding variables or expressions using &lt;code&gt;${}&lt;/code&gt;.
Example: &lt;code&gt;`Hello, ${name}!`&lt;/code&gt;.
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals" rel="noopener noreferrer"&gt;Learn more about template literals here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  24. How Do You Handle Errors in JavaScript?
&lt;/h4&gt;

&lt;p&gt;Use &lt;code&gt;try-catch&lt;/code&gt; blocks to catch errors and prevent crashes. You can also throw custom errors using the &lt;code&gt;Error&lt;/code&gt; object and handle them gracefully. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch" rel="noopener noreferrer"&gt;Deep dive into error handling here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  25. Implement a Function to Flatten a Nested Array
&lt;/h4&gt;

&lt;p&gt;Flattening turns a multi-dimensional array (like &lt;code&gt;[1, [2, [3]]]&lt;/code&gt;) into a single-level array (&lt;code&gt;[1, 2, 3]&lt;/code&gt;). Use &lt;code&gt;Array.prototype.flat()&lt;/code&gt; or recursion. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat" rel="noopener noreferrer"&gt;Code example and explanation here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  26. Implement an LRU Cache
&lt;/h4&gt;

&lt;p&gt;An &lt;strong&gt;LRU (Least Recently Used) cache&lt;/strong&gt; removes the least accessed items when it reaches its size limit. It’s useful for optimizing memory in apps. &lt;a href="https://www.interviewcake.com/concept/java/lru-cache" rel="noopener noreferrer"&gt;Learn more about LRU cache implementation here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  27. What Are Closures in JavaScript?
&lt;/h4&gt;

&lt;p&gt;Closures are functions that "remember" the environment where they were created. They’re useful for creating private variables or encapsulating logic. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures" rel="noopener noreferrer"&gt;Deep dive into closures here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  28. Explain the Event Loop in JavaScript
&lt;/h4&gt;

&lt;p&gt;The event loop handles asynchronous tasks. It checks the &lt;strong&gt;call stack&lt;/strong&gt; and &lt;strong&gt;task queues&lt;/strong&gt; (like the callback queue or microtask queue) to decide what to run next, ensuring non-blocking execution. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop" rel="noopener noreferrer"&gt;Learn more about the event loop here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  29. What is the Difference Between var, let, and const?
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;var&lt;/code&gt;: Function-scoped, can be redeclared, and is hoisted.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;let&lt;/code&gt;: Block-scoped, cannot be redeclared, and is hoisted but not initialized.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;const&lt;/code&gt;: Block-scoped, cannot be redeclared or reassigned, and is hoisted but not initialized.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let" rel="noopener noreferrer"&gt;See more about var, let, and const here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  30. How Does Hoisting Work in JavaScript?
&lt;/h4&gt;

&lt;p&gt;Hoisting moves variable and function declarations to the top of their scope during compilation. However, only the &lt;strong&gt;declaration&lt;/strong&gt; is hoisted, not the &lt;strong&gt;initialization&lt;/strong&gt;. For example, &lt;code&gt;var x;&lt;/code&gt; is hoisted, but &lt;code&gt;x = 5;&lt;/code&gt; is not. &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Hoisting" rel="noopener noreferrer"&gt;Learn more about hoisting here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  31. What is the Purpose of setTimeout and setInterval?
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;setTimeout&lt;/code&gt; delays the execution of a function by a specified time, while &lt;code&gt;setInterval&lt;/code&gt; repeatedly executes a function at regular intervals. Both are used for scheduling tasks in JavaScript. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/setTimeout" rel="noopener noreferrer"&gt;Deep dive into timers here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  32. Explain How to Use the Fetch API
&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;fetch()&lt;/code&gt; method is used to make network requests. It returns a promise that resolves to a &lt;code&gt;Response&lt;/code&gt; object, which can be parsed as JSON, text, or other formats. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API" rel="noopener noreferrer"&gt;Learn more about the Fetch API here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  33. What is a Service Worker in the Context of PWAs?
&lt;/h4&gt;

&lt;p&gt;A service worker is a script that runs in the background, enabling features like offline access, caching, and push notifications in Progressive Web Apps (PWAs). &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API" rel="noopener noreferrer"&gt;Deep dive into service workers here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  34. Describe How to Implement Deep Cloning of an Object
&lt;/h4&gt;

&lt;p&gt;Deep cloning creates a copy of an object, including nested objects. Use &lt;code&gt;structuredClone()&lt;/code&gt; for modern browsers or write a recursive function to copy all properties. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/structuredClone" rel="noopener noreferrer"&gt;Learn more about deep cloning here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  35. What Are Modules in JavaScript? How Do You Use Them?
&lt;/h4&gt;

&lt;p&gt;Modules let you split code into reusable files. Use &lt;code&gt;export&lt;/code&gt; to share functions or variables and &lt;code&gt;import&lt;/code&gt; to use them in other files. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules" rel="noopener noreferrer"&gt;Deep dive into JavaScript modules here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  36. Explain the Concept of this Binding with Examples
&lt;/h4&gt;

&lt;p&gt;The value of &lt;code&gt;this&lt;/code&gt; depends on how a function is called. Arrow functions inherit &lt;code&gt;this&lt;/code&gt; from their parent scope, while regular functions depend on the calling context. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this" rel="noopener noreferrer"&gt;Learn more about &lt;code&gt;this&lt;/code&gt; binding here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  37. What is a Closure? Provide an Example
&lt;/h4&gt;

&lt;p&gt;A closure is a function that remembers its outer scope, even after the outer function has finished running. For example, a function inside another function can access its parent’s variables. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures" rel="noopener noreferrer"&gt;Deep dive into closures here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  38. How Do You Prevent Default Behavior of an Event?
&lt;/h4&gt;

&lt;p&gt;Use &lt;code&gt;event.preventDefault()&lt;/code&gt; to stop the default action of an event, like preventing a form from submitting or a link from navigating. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault" rel="noopener noreferrer"&gt;Learn more about event prevention here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  39. What Are Arrow Functions, and How Do They Differ from Regular Functions?
&lt;/h4&gt;

&lt;p&gt;Arrow functions are a shorter syntax for writing functions. Unlike regular functions, they don’t have their own &lt;code&gt;this&lt;/code&gt; and are great for callbacks. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions" rel="noopener noreferrer"&gt;See more about arrow functions here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  40. Explain the Concept of Promise Chaining
&lt;/h4&gt;

&lt;p&gt;Promise chaining links multiple &lt;code&gt;.then()&lt;/code&gt; calls, where each promise resolves and passes its result to the next. This creates a sequence of asynchronous operations. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise#chained_promises" rel="noopener noreferrer"&gt;Learn more about chained promises here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  41. What is the Purpose of Object.create()?
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;Object.create()&lt;/code&gt; creates a new object with a specified prototype. It’s useful for implementing inheritance without using classes. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create" rel="noopener noreferrer"&gt;Code example here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  42. How Can You Check if an Object is an Array?
&lt;/h4&gt;

&lt;p&gt;Use &lt;code&gt;Array.isArray()&lt;/code&gt; to check if a value is an array. It works reliably across different contexts.&lt;/p&gt;

&lt;h4&gt;
  
  
  43. What Are IIFE (Immediately Invoked Function Expressions)?
&lt;/h4&gt;

&lt;p&gt;IIFEs are functions that run immediately after they’re defined. They’re used to create private scopes and avoid polluting the global namespace. &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/IIFE" rel="noopener noreferrer"&gt;Oficial documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  44. Explain How to Create a Custom Event in JavaScript
&lt;/h4&gt;

&lt;p&gt;Custom events are created using the &lt;code&gt;CustomEvent&lt;/code&gt; constructor and dispatched with &lt;code&gt;element.dispatchEvent()&lt;/code&gt;. They’re useful for communication between components. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent" rel="noopener noreferrer"&gt;CustomEvent documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  45. What is JSON, and How Do You Parse It?
&lt;/h4&gt;

&lt;p&gt;JSON (JavaScript Object Notation) is a lightweight data format. Use &lt;code&gt;JSON.parse()&lt;/code&gt; to convert a JSON string into an object and &lt;code&gt;JSON.stringify()&lt;/code&gt; to convert an object into a JSON string. &lt;a href="https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/JSON" rel="noopener noreferrer"&gt;Working with JSON.&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  46. Describe How to Implement a Simple Event Emitter
&lt;/h4&gt;

&lt;p&gt;An event emitter is a utility for managing events. It allows you to register listeners and emit events, often implemented using an object to store event callbacks. &lt;a href="https://javascript.plainenglish.io/building-a-simple-event-emitter-in-javascript-f82f68c214ad" rel="noopener noreferrer"&gt;Building a Simple Event Emitter&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  47. What Are Weak References in JavaScript?
&lt;/h4&gt;

&lt;p&gt;Weak references allow access to objects without preventing them from being garbage collected. They’re useful for managing memory in caches or maps.&lt;/p&gt;

&lt;h4&gt;
  
  
  48. How Do You Optimize Performance in Large-Scale Applications?
&lt;/h4&gt;

&lt;p&gt;Optimization techniques include &lt;a href="https://www.freecodecamp.org/news/javascript-debounce-example/" rel="noopener noreferrer"&gt;debouncing&lt;/a&gt;, &lt;a href="https://dev.to/jeetvora331/throttling-in-javascript-easiest-explanation-1081"&gt;throttling&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Performance/Lazy_loading" rel="noopener noreferrer"&gt;lazy loading&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Code_splitting" rel="noopener noreferrer"&gt;code splitting&lt;/a&gt;, reducing DOM operations...&lt;/p&gt;

&lt;h4&gt;
  
  
  49. Explain How to Use localStorage and sessionStorage
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;localStorage&lt;/code&gt; and &lt;code&gt;sessionStorage&lt;/code&gt; are key-value storage mechanisms in the browser. &lt;code&gt;localStorage&lt;/code&gt; persists data across sessions, while &lt;code&gt;sessionStorage&lt;/code&gt; clears data when the tab or window is closed.&lt;/p&gt;

&lt;h4&gt;
  
  
  50. What Are Some Common Security Issues in JavaScript Applications?
&lt;/h4&gt;

&lt;p&gt;Common issues include XSS (Cross-Site Scripting), CSRF (Cross-Site Request Forgery), and insecure input handling. Mitigate them using content security policies, input sanitization, and secure coding practices. &lt;a href="https://zcybersecurity.com/javascript-security-vulnerabilities/" rel="noopener noreferrer"&gt;Check the top 9 JavaScript Security Vulnerabilities in 2025&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>career</category>
      <category>programming</category>
    </item>
    <item>
      <title>Do You Care About Commit Messages?</title>
      <dc:creator>Mathias Falci</dc:creator>
      <pubDate>Wed, 15 Jan 2025 18:15:02 +0000</pubDate>
      <link>https://forem.com/mathiasfc/do-you-care-about-commit-messages-3ml8</link>
      <guid>https://forem.com/mathiasfc/do-you-care-about-commit-messages-3ml8</guid>
      <description>&lt;p&gt;Have you ever read a commit message that left you wondering what the developer was thinking? Commit messages are often overlooked, but they play a crucial role in collaboration and project maintenance.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Do you care about your commit messages?&lt;/em&gt; You should. In this post, we'll dive into why good commit messages matter, explore tools to help craft them, and discuss how AI can assist in improving clarity and consistency.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Why Commit Messages Matter
&lt;/h2&gt;

&lt;p&gt;In summary, commit messages are more than just a formality, they are an essential tool for keeping your project organized and making collaboration efficient. They serve as the foundation for collaboration, debugging, and documentation. Here’s how:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;🤝 &lt;strong&gt;Collaboration&lt;/strong&gt;: Help team members understand the context of changes made to the code. When working in a team, clear commit messages allow others to quickly grasp the intention behind a change, reducing misunderstandings and making collaboration smoother.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🔍 &lt;strong&gt;Debugging&lt;/strong&gt;: During the debugging process, commit messages act as a vital reference to trace back issues. A well-written commit message provides insight into what was modified, which helps in identifying when and where problems were introduced.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📄 &lt;strong&gt;Documentation&lt;/strong&gt;: Commit messages serve as a historical log for the project. As the project evolves, the commit history becomes a valuable resource, showing how the code has changed over time and providing context for future developers who may need to maintain or extend the project.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. A Great Commit Message
&lt;/h2&gt;

&lt;p&gt;A good commit message should prioritize clarity, context, and conciseness. It should clearly explain the change in a straightforward way, avoiding ambiguity. Focus on the &lt;strong&gt;"why"&lt;/strong&gt; behind the change to provide context and explain the reasoning, not just the &lt;strong&gt;"what"&lt;/strong&gt; was done.&lt;/p&gt;

&lt;p&gt;Additionally, keep the title short (around or even under 50 characters) for a quick summary, and add further details in the body only when necessary to provide more context. Ensuring that your teammates and even your future self will thank you.&lt;/p&gt;

&lt;h3&gt;
  
  
  Good
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;feat: add user profile page for better account management&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chore: upgrade react version to 19.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Fix typo in checkout process causing validation error&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Update footer with new contact information per marketing team request&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bad
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fixed issue&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Updated UI elements&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;whoops, fixed the bug now&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WIP, added a new feature&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[empty_message]&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Tools for Crafting Better Commit Messages
&lt;/h2&gt;

&lt;p&gt;There are a few different commit message conventions available (e.g &lt;a href="https://www.conventionalcommits.org/en/v1.0.0/" rel="noopener noreferrer"&gt;conventionalcommits.org&lt;/a&gt;, and these can vary from company to company, each with its own set of rules and formats. &lt;/p&gt;

&lt;p&gt;The primary goal of these conventions is to improve the readability and clarity of the project's commit history as we already talked about. Futhermore, to ensure a consistent message format, tools like &lt;a href="https://github.com/commitizen/cz-cli" rel="noopener noreferrer"&gt;Commitizen&lt;/a&gt; and &lt;a href="https://typicode.github.io/husky/" rel="noopener noreferrer"&gt;Husky&lt;/a&gt; can be useful.&lt;/p&gt;

&lt;p&gt;If you're VSCode user, consider installing the &lt;a href="https://marketplace.visualstudio.com/items?itemName=waderyan.gitblame" rel="noopener noreferrer"&gt;Git Blame&lt;/a&gt; extension (or &lt;a href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens" rel="noopener noreferrer"&gt;GitLens&lt;/a&gt;). It's a great example of how clear and informative commit messages can benefit future developers. Those plugins shows who made a particular change, when it was made, and includes the commit message inline for quick reference.&lt;/p&gt;

&lt;p&gt;This feature is incredibly useful when troubleshooting bugs or tracking the history of changes. Imagine you're hunting down a bug and suddenly realize - wait, that was me, three years ago?! Yes, three whole years! And no, you didn’t just time travel. This extension can reveal some pretty wild surprises 😂. &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%2Fp0eu5jkiqnih8o3v19pk.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%2Fp0eu5jkiqnih8o3v19pk.png" alt="Showing how git lens work, with a old commit message" width="800" height="95"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Futhermore, AI tools can greatly assist in crafting commit messages. If you're unsure what to write, simply ask an AI tool like ChatGPT. It can help you refine your thoughts, suggest clear phrasing, and ensure your message is easy to understand.&lt;/p&gt;

&lt;p&gt;GitHub Copilot and Codeium already offer commit message suggestions based on file changes, saving time and maintaining relevance. These tools can generate messages automatically by analyzing the diffs in your code.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Wrapping Up
&lt;/h2&gt;

&lt;p&gt;Commit messages might seem like a &lt;del&gt;small detail that doesn’t always deserve our attention&lt;/del&gt;, but it’s important to remember that big things are often built from small, carefully crafted pieces. While I don’t want to dive into philosophy here, the real value often lies in the simple things. If we take care of the small details, everything else tends to fall into place.&lt;/p&gt;

&lt;p&gt;So, take a moment to consider your commit messages as a small but meaningful investment in the future of your project. Ask yourself: Will my teammate understand this? &lt;strong&gt;Put yourself in their shoes&lt;/strong&gt; and think about the message through their perspective. It’s a simple exercise, but it can make a world of difference, both in coding and in life.&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%2F29fypac0bv47uoud1pgc.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%2F29fypac0bv47uoud1pgc.png" alt="Commit message saying thanks to the readers" width="571" height="172"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>versioncontrol</category>
      <category>bestpractices</category>
      <category>codingtips</category>
    </item>
  </channel>
</rss>
