<?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: Shaquille Niekerk</title>
    <description>The latest articles on Forem by Shaquille Niekerk (@shaq_attack).</description>
    <link>https://forem.com/shaq_attack</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%2F2381335%2F7f7df455-e01b-46f8-afc8-2432d2d12e2f.jpg</url>
      <title>Forem: Shaquille Niekerk</title>
      <link>https://forem.com/shaq_attack</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/shaq_attack"/>
    <language>en</language>
    <item>
      <title>Comms Under Fire - Update 01</title>
      <dc:creator>Shaquille Niekerk</dc:creator>
      <pubDate>Fri, 16 Jan 2026 13:27:50 +0000</pubDate>
      <link>https://forem.com/shaq_attack/comms-under-fire-update-01-n8b</link>
      <guid>https://forem.com/shaq_attack/comms-under-fire-update-01-n8b</guid>
      <description>&lt;p&gt;This is a major update that I've done on my game.&lt;br&gt;
From a shift in the overall purpose of the game, to the mechanics, down to how things look. Below I will go over everything that I've done and try and explain why I've done it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Purpose
&lt;/h2&gt;

&lt;p&gt;Originally I wanted to create a web demo of a game I've wanted to create for PC, a game where you're in the drivers seat of a propaganda machine, and the middle man between soldiers on the ground and the powers that decide the fate of the nation. Oh, and this takes place during a war...&lt;br&gt;
Once I created the demo I realised that the tools I had to create this proved to be more difficult, so I stripped back on some functionalities and in doing so I realised I was working toward a different idea. a classic competitive typing game.&lt;br&gt;
This will have leader boards, with those who have the highest WPM sitting at the top, challenge modes where you can challenge other users to see who types the fastest, and a story mode, if you just want to improve in a relatively stress free mode, while getting the gist of what the story would be in this world.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mechanics
&lt;/h2&gt;

&lt;p&gt;The mechanics have not changed that much, the major change is that I am trying to remove any mouse input. Having the main element of the game be controlled solely by keyboard inputs.&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%2Fce9jmmk2t0pgu1ewozu4.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%2Fce9jmmk2t0pgu1ewozu4.png" alt=" " width="800" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Looks
&lt;/h2&gt;

&lt;p&gt;Originally I had two monitors on screen. One that displayed the text you needed to type, and the other displaying the text that you were typing. &lt;br&gt;
This approach brought a few issues. Firstly people kept getting lost where they were in the text because they had to move their eyes between two monitors. The fix for this was to show a cursor of where you were as you typed, but this just made people only focus on that one monitor, making the two monitor approach seem redundant... Now I think I will still keep the two monitor approach for the main game I plan on creating, but for now one monitor seems to do the job just fine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Update 01
&lt;/h2&gt;

&lt;p&gt;So here we are with the first update.&lt;br&gt;
A whole new game mode, from a story driven typing game to a ranked typing game. A whole new look, from a two monitor setup to a single monitor setup that can be controlled entirely with the keyboard.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;Update 01&lt;/strong&gt; I've only included the story mode. But rest assured that I am working on many updates to get this thing having all game modes I've mentioned, and any new ones that come to mind as I go.&lt;/p&gt;

&lt;p&gt;Thank you for reading,&lt;br&gt;
And please check out the game &lt;a href="https://war-typing-demo.vercel.app/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;br&gt;
And leave a comment on what you think, or let me know if you have any issues&lt;/p&gt;

</description>
      <category>indie</category>
      <category>gamedev</category>
      <category>cloudgaming</category>
      <category>indiegames</category>
    </item>
    <item>
      <title>How One Game Made Me a Gamer Again</title>
      <dc:creator>Shaquille Niekerk</dc:creator>
      <pubDate>Tue, 13 Jan 2026 14:56:04 +0000</pubDate>
      <link>https://forem.com/shaq_attack/how-one-game-made-me-a-gamer-again-kgj</link>
      <guid>https://forem.com/shaq_attack/how-one-game-made-me-a-gamer-again-kgj</guid>
      <description>&lt;p&gt;Lately, games have started to feel less like an escape and more like a chore.&lt;/p&gt;

&lt;p&gt;Every new release seems to come with a trade-off. Battle passes, cosmetic shops, seasonal content, daily logins. The message feels clear: the more money you spend and the more time you sink, the more fun you’re &lt;em&gt;allowed&lt;/em&gt; to have. Microtransactions are “optional,” of course. Just like breathing.&lt;/p&gt;

&lt;p&gt;I started wondering if the problem was me.&lt;/p&gt;

&lt;p&gt;Maybe I’ve just lost the patience to really get into games. Maybe adulthood hollowed out that part of my brain. I’d watch reviews where someone confidently stamped an “8/10” on a game, boot it up myself, and immediately feel like I’d played it already. Same mechanics, different coat of paint. Or worse, a game that felt unfinished unless I paid to fill in the gaps.&lt;/p&gt;

&lt;p&gt;Then, almost by accident, I played &lt;strong&gt;Dispatch&lt;/strong&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%2Fqu9hvjfi9bpmdgjfm4x8.jpg" 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%2Fqu9hvjfi9bpmdgjfm4x8.jpg" alt=" " width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For those who don’t know it, you’re in charge of a superhero group, managing crises and sending heroes out to fight crime. No endless progression systems. No dangling carrots. Just a focused idea, executed well.&lt;/p&gt;

&lt;p&gt;I finished it in one sitting. And immediately wanted to replay it to see the other outcomes.&lt;/p&gt;

&lt;p&gt;That hasn’t happened to me in &lt;em&gt;years&lt;/em&gt;. I still haven’t finished The Sims 2, and I started that around 2007.&lt;/p&gt;

&lt;p&gt;That experience made me pause. Maybe I wasn’t burnt out on games. Maybe I was just burnt out on &lt;em&gt;the kinds of games I’d been choosing&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;So I tested that idea.&lt;/p&gt;

&lt;p&gt;Instead of relying on reviews and scores, I went back to how I picked what game I play back in the day, so I started watching trailers and forming my own opinion about whether a game actually looked fun to &lt;em&gt;me&lt;/em&gt;. Not “content-rich” not “worth the grind” just fun.&lt;/p&gt;

&lt;p&gt;That’s how I landed on &lt;strong&gt;High on Life&lt;/strong&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%2Fdx19dmt1eonvp7vf3xdx.webp" 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%2Fdx19dmt1eonvp7vf3xdx.webp" alt=" " width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On my first play, I went for four uninterrupted hours.&lt;/p&gt;

&lt;p&gt;That might not sound impressive, but for me, that’s huge. Four hours without checking the time. Four hours without feeling guilty. Four hours without that nagging sense that I should be doing something more “productive.”&lt;/p&gt;

&lt;p&gt;And when I stopped playing, I didn’t feel like I’d wasted my time.&lt;/p&gt;

&lt;p&gt;So now I’m left with a burning question.&lt;/p&gt;

&lt;p&gt;Is it just me, or have a lot of modern games become either souls like pits that require time and dedication just to master one move, or carefully engineered money machines designed to drip-feed dopamine? Games that don’t respect your time unless you give them your wallet too?&lt;/p&gt;

&lt;p&gt;So great games are still out there, and  I’ve just been looking in all the wrong places.&lt;/p&gt;

&lt;p&gt;What game(s) have you been playing lately that was just an absolute blast?&lt;/p&gt;

</description>
      <category>pcgaming</category>
      <category>steam</category>
    </item>
    <item>
      <title>My PC melted while making this game...</title>
      <dc:creator>Shaquille Niekerk</dc:creator>
      <pubDate>Thu, 11 Dec 2025 14:57:37 +0000</pubDate>
      <link>https://forem.com/shaq_attack/my-pc-melted-while-making-this-game-4b71</link>
      <guid>https://forem.com/shaq_attack/my-pc-melted-while-making-this-game-4b71</guid>
      <description>&lt;p&gt;So I've been watching a lot of MoistCr1TiKaL Gaming and Jacksepticeye videos lately. And I've seen these guys play some games that look like a student project. And as someone who has always wanted to get into the Game Dev space, but never found that golden idea or hasn't found a team to work with, I finally decided to give it a go myself... This was after watching the Potrick Snap&lt;br&gt;
 video that I just thought, "Hey if this horror Spongebob game can get some love, I'm sure I can create something that someone will enjoy too."&lt;/p&gt;

&lt;p&gt;Well, fast forward a few days and I have everything set up. My game idea: a typing game that takes place during a war between two nations where your job is to relay comms between the frontline and HQ. And every now and then hack into the enemy’s comms and extract classified data. It's all time-based and you've got to be quick with your fingers. And I've downloaded Unity and bought some assets off the asset store. I haven't really used Unity before, but I was willing to learn. And one of the rules I set out for my game was that it would take place in one location, so it wouldn't be a high curve to get this thing started.&lt;/p&gt;

&lt;p&gt;Okay, so I've got my game idea, I've got Unity, and I've got my assets to build this world out. Well, here's where the issue comes in... I load this asset into Unity, which on a blank slate is already running at a snail's pace, but it all comes together when I load up the assets. Complete meltdown, everything comes to a halt and I cannot provide any inputs. This is when I realised maybe my PC needs retirement...&lt;/p&gt;

&lt;p&gt;Well, I still want to make this game. Do something. So I do the only thing I know what to do... a Web App. Sure, it'll only be a static screen for now, and I can't implement most of the features I had in mind for this game. But hey, it's better than nothing. And while I build up the funds to upgrade my PC, maybe this will get some eyes on the game. Build an audience, hopefully. And let me play around with some ideas I had for the game.&lt;/p&gt;

&lt;p&gt;Anyway, here is a link to a Work-In-Progress version 0 of the game titled &lt;a href="https://war-typing-demo.vercel.app/" rel="noopener noreferrer"&gt;Comms Under Fire&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hope you enjoy, and please feel free to let me know what you think.&lt;br&gt;
And note, I will be playing around with things, so apologies if you open it up and it's just a dumpster fire.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>gamedev</category>
      <category>beginners</category>
      <category>developer</category>
    </item>
    <item>
      <title>My First game - Comms Under Fire</title>
      <dc:creator>Shaquille Niekerk</dc:creator>
      <pubDate>Thu, 11 Dec 2025 14:57:28 +0000</pubDate>
      <link>https://forem.com/shaq_attack/my-first-game-comms-under-fire-2co</link>
      <guid>https://forem.com/shaq_attack/my-first-game-comms-under-fire-2co</guid>
      <description>&lt;p&gt;A game set in an alternate world where two nations are locked in a brutal war. You’ve been assigned to man the comms, where you’ll find yourself drafting Propaganda to keep your fellow citizens calm, hacking into enemy communication channels to leak sensitive state secrets, and planting destabilizing messages to push the enemy’s civilians into panic.&lt;/p&gt;

&lt;p&gt;All of this while staying alive during active invasions, relaying time-sensitive comms from the frontline to HQ, and doing whatever it takes to help win this war.&lt;/p&gt;

&lt;p&gt;The Comms Under Fire mini-demo has just gone &lt;a href="https://war-typing-demo.vercel.app/" rel="noopener noreferrer"&gt;live&lt;/a&gt;, and you can play-test it right now. It’s the tiniest snippet of the full idea — a small taste of what the final game will become. I’ll be releasing the full version on Steam once I’ve got the proper tools to build it out.&lt;/p&gt;

&lt;p&gt;For now, enjoy the free online mini-demo. Updates will be rolling in, so keep an eye out!&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>indie</category>
      <category>cloudgaming</category>
      <category>singleplayer</category>
    </item>
    <item>
      <title>Authentication &amp; Security: Keeping Bad Guys Out Without Annoying Users</title>
      <dc:creator>Shaquille Niekerk</dc:creator>
      <pubDate>Mon, 20 Oct 2025 00:53:40 +0000</pubDate>
      <link>https://forem.com/shaq_attack/authentication-security-keeping-bad-guys-out-without-annoying-users-2443</link>
      <guid>https://forem.com/shaq_attack/authentication-security-keeping-bad-guys-out-without-annoying-users-2443</guid>
      <description>&lt;p&gt;Hey folks, welcome back to another episode of &lt;em&gt;The Stack Unpacked&lt;/em&gt;. I’m Shaq-Attack, your friendly neighborhood developer, still trying not to lock myself out of my own Gmail.&lt;/p&gt;

&lt;p&gt;If the web was a city, then authentication would be its front door that decides who gets in, who stays out, and who gets politely redirected to “forgot password”. It’s something we deal with in almost every app we build yet somehow it always feels slightly broken.&lt;/p&gt;

&lt;p&gt;From &lt;strong&gt;passwords&lt;/strong&gt; that everyone hates to &lt;strong&gt;OAuth redirects&lt;/strong&gt; that never quite go where you expect, to &lt;strong&gt;JWT tokens&lt;/strong&gt; that expire right when you finally open the dashboard. Authentication is one of those areas where complexity hides in plain sight.&lt;/p&gt;

&lt;p&gt;And yet, we rely on it completely. Without it every system would be wide open to chaos. With too much of it users give up before even signing in.&lt;/p&gt;

&lt;p&gt;This post is about finding that balance, the fine line between keeping bad guys out and keeping users sane.&lt;br&gt;
We’ll explore where authentication came from, why it evolved the way it did, and how we got from shared passwords on Databases to OAuth flows that make you question your career choices.&lt;/p&gt;

&lt;p&gt;By the end you’ll have a better grasp of &lt;strong&gt;how authentication actually works&lt;/strong&gt;, &lt;strong&gt;why security often feels like an unsolvable puzzle&lt;/strong&gt;, and maybe just maybe, a little more appreciation for those tiny login forms we take for granted.&lt;/p&gt;

&lt;p&gt;So unlock your screen, grab a coffee, and let’s step through the front door... carefully.&lt;/p&gt;

&lt;p&gt;Excellent — here’s &lt;strong&gt;Chunk 1&lt;/strong&gt;, written in the same narrative rhythm as your previous &lt;em&gt;Stack Unpacked&lt;/em&gt; episodes. It’s clear, researched, and flows like you’re walking the reader through your findings, not lecturing them.&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%2Fw9i4wg2yri9boq0gvq2l.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%2Fw9i4wg2yri9boq0gvq2l.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Passwords: Humanity’s Oldest Security Bug
&lt;/h2&gt;

&lt;p&gt;Before OAuth tokens and biometric logins there was the humble password, humanity’s oldest and most recycled security measure.&lt;/p&gt;

&lt;p&gt;The idea is simple just prove you are who you say you are by knowing something only you should know. It’s the same principle as a secret handshake, just with fewer handshakes and more “forgot password” emails.&lt;/p&gt;

&lt;p&gt;Passwords have been around since the &lt;strong&gt;early days of computing&lt;/strong&gt;. Back in the 1960s, mainframe systems at places like MIT used shared terminals. Each user had a password to keep their files private. The problem though was that those passwords were stored in plain text which meant if you could read the system logs, you could read everyone’s password too.&lt;/p&gt;

&lt;p&gt;Not much has changed. We’ve just gotten better at hiding our mistakes behind encryption.&lt;/p&gt;

&lt;p&gt;Despite endless frustration passwords persist because they’re easy to implement, require no extra hardware, and work almost anywhere. The problem isn’t that passwords don’t work, it’s that people do.&lt;/p&gt;

&lt;p&gt;Humans reuse them, forget them, write them on sticky notes, or pick ones that could be guessed by anyone with basic context and two brain cells.&lt;br&gt;
Studies have shown that &lt;em&gt;“123456”&lt;/em&gt; and &lt;em&gt;“password”&lt;/em&gt; are still among the most common credentials in the wild, even in 2025.&lt;/p&gt;

&lt;p&gt;Developers have tried to make them safer through password strength requirements, but those often backfire. A user faced with &lt;em&gt;“Must contain one uppercase, one number, one special symbol, and a haiku”&lt;/em&gt; usually just adds an exclamation mark at the end of their old password and calls it a day.&lt;/p&gt;

&lt;p&gt;Under the hood, though password handling has improved.&lt;br&gt;
Modern systems don’t store raw passwords anymore, or at least they shouldn’t. Instead, they &lt;strong&gt;hash&lt;/strong&gt; them using one-way cryptographic algorithms.&lt;/p&gt;

&lt;p&gt;Hashing transforms a password into a long string of gibberish. Even if someone steals the database they shouldn’t be able to reverse the process.&lt;br&gt;
To make things safer developers add a &lt;strong&gt;salt&lt;/strong&gt; which is a random string attached to each password before hashing so that even identical passwords result in different hashes.&lt;/p&gt;

&lt;p&gt;Algorithms like &lt;strong&gt;bcrypt&lt;/strong&gt;, &lt;strong&gt;scrypt&lt;/strong&gt;, and &lt;strong&gt;Argon2&lt;/strong&gt; are commonly used because they’re intentionally slow, making brute-force attacks impractical. It’s a small but powerful defense against the reality that not everyone picks strong passwords.&lt;/p&gt;

&lt;p&gt;But even with hashing and salting, the password model has its limits.&lt;br&gt;
If an attacker tricks a user into revealing their credentials (say, through phishing) all that backend protection becomes irrelevant.&lt;/p&gt;

&lt;p&gt;And on the other end of the spectrum users are so fatigued by logins and password resets that security often loses to convenience. That’s why newer systems are shifting toward &lt;strong&gt;passwordless authentication&lt;/strong&gt; like using email links, phone codes, or biometrics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tokens, Sessions, and the Rise of Stateless Login
&lt;/h2&gt;

&lt;p&gt;If passwords are about proving who you are, sessions and tokens are about &lt;em&gt;remembering&lt;/em&gt; that proof without forcing you to log in every five minutes.&lt;/p&gt;

&lt;p&gt;In the early days of web applications, authentication worked through &lt;strong&gt;sessions&lt;/strong&gt;. When you logged in, the server created a little record in its memory saying, “Yep, this person’s legit” and handed you a session ID in the form of a tiny string stored in your browser as a cookie. Every time you made a new request that cookie tagged along, reminding the server who you were.&lt;/p&gt;

&lt;p&gt;It worked beautifully, until the web stopped being simple.&lt;/p&gt;

&lt;p&gt;As applications grew and servers multiplied, this session-based model started to crack. Imagine millions of users logging in, each with their own active session stored in memory. Then imagine trying to scale that across multiple servers without losing track of anyone.&lt;/p&gt;

&lt;p&gt;The web had outgrown its one-server mindset. It needed a way to remember users without depending on a single machine’s memory.&lt;/p&gt;

&lt;p&gt;Enter &lt;strong&gt;tokens&lt;/strong&gt; they're small, self-contained chunks of information that could prove identity without requiring the server to remember anything at all.&lt;/p&gt;

&lt;p&gt;The most famous of these tokens is the &lt;strong&gt;JWT&lt;/strong&gt;, or &lt;em&gt;JSON Web Token&lt;/em&gt;. Think of a JWT as a digital ID card. It contains a payload (like your user ID and permissions) and a signature that verifies it hasn’t been tampered with.&lt;/p&gt;

&lt;p&gt;A JWT has three parts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Header&lt;/strong&gt;: tells you the algorithm used for signing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payload&lt;/strong&gt;: carries the user data (usually in JSON format).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Signature&lt;/strong&gt;: ensures the token wasn’t modified.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When you log in, the server generates this token and signs it with a secret key. From then on each time you make a request, you just include the token instead of relying on a stored session.&lt;br&gt;
If the signature checks out, the server trusts you no memory required.&lt;/p&gt;

&lt;p&gt;It’s a clever system, and it scales beautifully in distributed environments.&lt;/p&gt;

&lt;p&gt;JWTs solve a lot of problems, they’re stateless, portable, and easy to use across multiple servers or microservices. But, like most “clever” ideas in software, they come with trade-offs.&lt;/p&gt;

&lt;p&gt;Because tokens are self-contained once issued, they can’t be easily revoked. If a user logs out or a token leaks, that token might remain valid until it expires. You can reduce the risk by making tokens short-lived and issuing &lt;strong&gt;refresh tokens&lt;/strong&gt;, but the complexity grows fast.&lt;/p&gt;

&lt;p&gt;There’s also the matter of size, JWTs carry data and if they’re passed in every request, they can start to bloat network traffic. Storing them incorrectly (like in localStorage) can also make them targets for attacks.&lt;/p&gt;

&lt;p&gt;So while tokens fixed the scaling problem, they introduced new ones: revocation, security, and management overhead.&lt;/p&gt;

&lt;p&gt;In practice, modern apps often use a &lt;strong&gt;hybrid approach&lt;/strong&gt; short-lived tokens with backend session validation, or JWTs combined with secure cookies.&lt;br&gt;
It’s not as elegant as the theoretical models promise, but it’s what works in the real 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%2Flwxuzuhshqvieowkfje8.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%2Flwxuzuhshqvieowkfje8.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The evolution from sessions to tokens wasn’t about finding perfection, it was about finding something that could survive in the chaos of modern, distributed architecture.&lt;br&gt;
Excellent — here’s &lt;strong&gt;Chunk 3: OAuth — Delegated Trust and the Endless Redirects&lt;/strong&gt;, continuing the clear, research-based tone of your series, with subtle humor to keep it engaging but never over the top.&lt;/p&gt;

&lt;h2&gt;
  
  
  OAuth: Delegated Trust and the Endless Redirects
&lt;/h2&gt;

&lt;p&gt;At some point, developers collectively realized that managing passwords for every single app on the internet wasn’t just tedious it was dangerous. People were reusing passwords across sites, companies were getting hacked, and every “Sign up” button felt like another invitation to identity theft.&lt;/p&gt;

&lt;p&gt;That’s when &lt;strong&gt;OAuth&lt;/strong&gt; stepped in but not to replace passwords and rahter to make them someone else’s problem.&lt;/p&gt;

&lt;p&gt;OAuth short for &lt;strong&gt;Open Authorization&lt;/strong&gt; was designed to let users give one application permission to act on their behalf in another without ever sharing their password directly. In other words, it’s how you can log into a random website using your Google account without Google having to hand over your credentials.&lt;/p&gt;

&lt;p&gt;The key concept behind OAuth is &lt;strong&gt;delegation of access&lt;/strong&gt;.&lt;br&gt;
Instead of saying, “Here’s my username and password, please behave” you’re saying “I’m giving you a temporary key that lets you access &lt;em&gt;only what’s necessary&lt;/em&gt;”&lt;/p&gt;

&lt;p&gt;The flow usually looks something like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You click “Log in with Google.”&lt;/li&gt;
&lt;li&gt;You get redirected to Google, where you log in securely.&lt;/li&gt;
&lt;li&gt;Google asks if you’re okay with giving the other app certain permissions (like your email address).&lt;/li&gt;
&lt;li&gt;If you agree, Google sends the app a special &lt;strong&gt;authorization code&lt;/strong&gt; which it can exchange for an &lt;strong&gt;access token&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The app uses that token to prove it has permission not to log in as you directly, but to act on your behalf in limited ways.&lt;/p&gt;

&lt;p&gt;While OAuth handles &lt;em&gt;authorization&lt;/em&gt;, it doesn’t handle &lt;em&gt;authentication&lt;/em&gt;. That’s where &lt;strong&gt;OpenID Connect (OIDC)&lt;/strong&gt; comes in. It’s a thin layer built on top of OAuth 2.0 that adds identity to confirm &lt;em&gt;who&lt;/em&gt; the user is, not just what they’re allowed to do.&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%2F0js6sgc980bou3pta8h7.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%2F0js6sgc980bou3pta8h7.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In simpler terms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OAuth&lt;/strong&gt; says, “This app can act on your behalf”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenID Connect&lt;/strong&gt; says, “This app knows who you are”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s why most modern “Sign in with Google” buttons actually use both OAuth for permission and OIDC for authentication.&lt;/p&gt;

&lt;p&gt;OAuth became the backbone of modern web authentication because it solved a critical trust issue... it allowed users to connect services securely without handing over their keys.&lt;br&gt;
Here’s the &lt;strong&gt;Outro — The Art of Trust&lt;/strong&gt;, written to wrap up the episode in your trademark &lt;em&gt;Stack Unpacked&lt;/em&gt; voice: insightful, clean, and slightly witty without overdoing it. It ties everything together — from passwords to OAuth — and closes with a meaningful call to action.&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%2Fqt5ev3hk064gvoxbv041.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%2Fqt5ev3hk064gvoxbv041.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Art of Trust
&lt;/h2&gt;

&lt;p&gt;When it comes down to it, authentication is really about &lt;strong&gt;trust&lt;/strong&gt;  not just between a user and a system, but between people and the technology that guards their information.&lt;/p&gt;

&lt;p&gt;We’ve seen how passwords became the web’s first gatekeepers, how tokens helped scale identity across the cloud, and how OAuth turned “sign in” into an act of delegated permission. Each one tried to solve the same problem from a different angle proving identity without losing sanity.&lt;/p&gt;

&lt;p&gt;And yet, despite decades of progress authentication still feels like a compromise. Every solution fixes something and breaks something else.&lt;br&gt;
Passwords are simple but insecure.&lt;br&gt;
Tokens are efficient but fragile.&lt;br&gt;
OAuth is powerful but complicated.&lt;/p&gt;

&lt;p&gt;Security isn’t a final product, it’s a moving target. The real goal isn’t to build a perfect wall but to build &lt;strong&gt;a smarter one&lt;/strong&gt;, one that learns and adapts without exhausting the people who use it.&lt;/p&gt;

&lt;p&gt;As developers our job isn’t just to lock things down, it’s to design systems that feel safe &lt;em&gt;and&lt;/em&gt; usable.&lt;br&gt;
Audit your app’s login flow.&lt;br&gt;
Check your password storage.&lt;br&gt;
Add MFA if you haven’t already.&lt;br&gt;
Because security doesn’t start with policies or frameworks it starts with the choices you make right now, in your code.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Security isn’t about keeping everyone out — it’s about letting the right people in, without making them wish they’d stayed out.”&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>web3</category>
      <category>security</category>
      <category>learning</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Containers Made Simple: No more ‘It Works on My Machine’</title>
      <dc:creator>Shaquille Niekerk</dc:creator>
      <pubDate>Thu, 09 Oct 2025 12:25:23 +0000</pubDate>
      <link>https://forem.com/shaq_attack/containers-made-simple-no-more-it-works-on-my-machine-573o</link>
      <guid>https://forem.com/shaq_attack/containers-made-simple-no-more-it-works-on-my-machine-573o</guid>
      <description>&lt;p&gt;Hey there, welcome! I’m Shaq-Attack, a developer who firmly believes that “it works on my machine” should never be anyone’s famous last words. Today we’re diving into the magical world of containers like Docker, Kubernetes, and why every dev seems to be talking about them like they’re the eighth wonder of the software world.&lt;/p&gt;

&lt;p&gt;If you have ever asked yourself &lt;em&gt;“When should I containerize my app?”&lt;/em&gt; or &lt;em&gt;“Why even bother with containers at all?”&lt;/em&gt; you are in the right place. Let’s grab our digital toolbox and take a look under the hood to see what containers can actually do.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why Containerization Exists&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Containers were not invented simply for fun they were born out of necessity.&lt;/p&gt;

&lt;p&gt;If you have ever built an application that ran perfectly on your laptop but failed spectacularly on someone else’s machine, you have encountered &lt;strong&gt;environment drift&lt;/strong&gt;. This is caused by tiny differences in operating systems, dependency versions, missing packages, or conflicting ports. These small issues can turn a perfectly working project into a troubleshooting nightmare.&lt;/p&gt;

&lt;p&gt;Containerization solves this problem by packaging &lt;strong&gt;everything your application needs&lt;/strong&gt; like code, libraries, runtimes, and configuration files into a portable box called a &lt;strong&gt;container image&lt;/strong&gt;.&lt;br&gt;
You can run that image anywhere and it will behave exactly the same way.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Docker: The household name&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Containers existed before Docker, but they were complicated and mostly the domain of experienced system administrators. Then Docker came along in 2013 and asked: “What if containerization could be easy enough for every developer to use?”&lt;/p&gt;

&lt;p&gt;Docker takes your application and all its dependencies and packages them into a &lt;strong&gt;single, portable image&lt;/strong&gt;. You can run this image anywhere, on your own laptop, a coworker’s computer, or a production server in the cloud.&lt;/p&gt;

&lt;p&gt;A simple Node.js Dockerfile might look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:18-alpine&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["npm", "start"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you run &lt;code&gt;docker build .&lt;/code&gt;, Docker follows the recipe and creates an image or a &lt;strong&gt;snapshot&lt;/strong&gt; of your application’s environment frozen in time. Running &lt;code&gt;docker run&lt;/code&gt; starts a live instance of that image in an isolated container.&lt;/p&gt;

&lt;p&gt;Docker makes onboarding new developers fast, ensures consistency across CI/CD pipelines, and simplifies rollbacks. However, Docker is focused on managing containers on a single machine. Once your application grows to hundreds of containers across multiple servers you will need something more powerful.&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%2F3p49ltgkyblskkg87mds.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%2F3p49ltgkyblskkg87mds.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Kubernetes: Managing Containers at Scale&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Docker solved one major problem, it made running your application anywhere easy. But what happens when your application grows?&lt;/p&gt;

&lt;p&gt;Imagine starting with a single container then adding another for a database, another for caching, and another for an API gateway. Suddenly, you have a mini container city running and something is bound to go wrong.&lt;/p&gt;

&lt;p&gt;Enter &lt;strong&gt;Kubernetes&lt;/strong&gt;, the ultimate container orchestrator. Originally built by Google and released as open source in 2014, Kubernetes automatically manages complex containerized systems. It schedules containers to run where there is available capacity, balances load to prevent servers from being overwhelmed, restarts failed containers, scales applications up or down, and rolls out updates safely.&lt;/p&gt;

&lt;p&gt;Here are the key components to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pod:&lt;/strong&gt; The smallest deployable unit, usually containing one or more containers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node:&lt;/strong&gt; A machine, physical or virtual, that runs pods.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cluster:&lt;/strong&gt; A collection of nodes managed by Kubernetes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment:&lt;/strong&gt; Rules specifying how many pods you want running and how to update them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service:&lt;/strong&gt; Ensures traffic reaches the correct pods, even as containers restart or move.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it this way Docker gives you shipping containers, while Kubernetes acts as a global logistics system, tracking every container, knowing where it should go and rerouting when necessary.&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%2Fjl7d8chsn2jh2bk1khi9.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%2Fjl7d8chsn2jh2bk1khi9.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Where Containerization Fits&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Now that we understand Docker and Kubernetes, the next question is: &lt;strong&gt;where does containerization make sense?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The short answer is almost anywhere modern applications live. The longer answer depends on your project’s size, your team, and your goals.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Local Development:&lt;/strong&gt; Developers often first encounter Docker here. You can spin up the exact production environment on your laptop, including databases and APIs, with a single command. No more environment setup headaches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Deployments:&lt;/strong&gt; Containers shine in the cloud. Managed services like AWS ECS, Google GKE, and Azure AKS allow you to deploy and scale applications efficiently.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Microservices:&lt;/strong&gt; If your application is made up of multiple smaller services, containers allow each service to run in its own isolated environment. Your frontend can run in Node.js, your backend in Go, and your analytics in Python, all without dependency conflicts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI/CD Pipelines:&lt;/strong&gt; Containers make testing, building, and deploying code predictable and fast, ensuring the exact same image runs in every stage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edge &amp;amp; Hybrid Environments:&lt;/strong&gt; Containers can run on everything from Raspberry Pis to IoT gateways to hybrid on-prem setups, providing consistent behavior across devices and data centers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While containers are versatile, it is important to remember that just because you &lt;em&gt;can&lt;/em&gt; use them everywhere does not mean you always &lt;em&gt;should&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why Containerization Matters&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;You might be asking: why go through the effort of learning Docker commands, writing YAML files, and understanding pods?&lt;/p&gt;

&lt;p&gt;Here are the main benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Consistency Everywhere:&lt;/strong&gt; Containers bundle your application, dependencies, and environment, ensuring it behaves the same in development, staging, or production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easier Scaling:&lt;/strong&gt; As your user base grows, containers make scaling simple. Kubernetes can automatically add or remove containers based on demand.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Isolation and Flexibility:&lt;/strong&gt; Containers isolate processes, preventing one service from breaking another. You can mix different languages, libraries, and versions without conflicts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Faster Deployments and Rollbacks:&lt;/strong&gt; Containers are immutable. Each deployment is predictable, and rolling back to a previous version is simple.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collaboration and Onboarding:&lt;/strong&gt; With tools like Docker Compose, a single command can spin up an entire development environment for new team members.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portability Across Platforms:&lt;/strong&gt; Containers run anywhere a compatible runtime exists, allowing seamless movement from local development to the cloud or between cloud providers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reliability and Recovery:&lt;/strong&gt; Containers can automatically restart after a crash, and orchestrators like Kubernetes handle failover, resulting in higher uptime.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short, containerization makes applications predictable, portable, and production ready no matter where they run or how large they grow.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Outro&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;So here’s the TL;DR: Containers make your app behave everywhere. Docker packages it neatly, and Kubernetes keeps it running when things get big and messy.&lt;/p&gt;

&lt;p&gt;Containerization is not magic. It’s consistency, isolation, and sanity-saving all rolled into one.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>kubernetes</category>
      <category>containers</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Thinking About Switching to Omarchy — Is It Worth It?</title>
      <dc:creator>Shaquille Niekerk</dc:creator>
      <pubDate>Wed, 08 Oct 2025 01:24:41 +0000</pubDate>
      <link>https://forem.com/shaq_attack/thinking-about-switching-to-omarchy-is-it-worth-it-3c3o</link>
      <guid>https://forem.com/shaq_attack/thinking-about-switching-to-omarchy-is-it-worth-it-3c3o</guid>
      <description>&lt;p&gt;Lately, I’ve been hearing about Omarchy, the workspace designed around using the keyboard as much as possible, minimizing the need for a mouse. As someone who’s always curious about more efficient ways to work this really caught my eye.&lt;/p&gt;

&lt;p&gt;But here’s my question... is it worth the switch? or is it just another hype tool that’ll fade away? The idea of navigating an entire OS without reaching for the mouse sounds appealing but I can’t help but wonder about the learning curve. How much time and effort does it really take to become productive?&lt;/p&gt;

&lt;p&gt;If you’ve tried Omarchy, I’d love to hear your take. Did it actually boost your workflow? or did it end up being more trouble than it’s worth?&lt;/p&gt;

</description>
      <category>archlinux</category>
      <category>linux</category>
      <category>discuss</category>
      <category>help</category>
    </item>
    <item>
      <title>SQL vs NoSQL: The Data War That Never Really Ended</title>
      <dc:creator>Shaquille Niekerk</dc:creator>
      <pubDate>Mon, 06 Oct 2025 12:15:58 +0000</pubDate>
      <link>https://forem.com/shaq_attack/the-stack-unpacked-episode-4-to-query-or-not-to-query-4jcp</link>
      <guid>https://forem.com/shaq_attack/the-stack-unpacked-episode-4-to-query-or-not-to-query-4jcp</guid>
      <description>&lt;p&gt;Welcome back to another episode of &lt;strong&gt;The Stack Unpacked&lt;/strong&gt;. I'm Shaq-Attack, your friendly neighborhood developer, part-time bug hunter, and full time protector of production.&lt;/p&gt;

&lt;p&gt;Today we will be talking about &lt;strong&gt;databases&lt;/strong&gt;, the heart, brain, and occasionally the heartbeat of every software system.&lt;/p&gt;

&lt;p&gt;They quietly hold everything together, until one day they don't. And when that day comes, you'll learn the real meaning of "why your choice will haunt you forever".&lt;/p&gt;

&lt;p&gt;Our goal today isn't just to list the pros and cons of SQL vs NoSQL. Google can tell you that.&lt;br&gt;
Rather, we will go into understanding &lt;em&gt;why&lt;/em&gt; these two database worlds exist, &lt;em&gt;how&lt;/em&gt; they think differently, and &lt;em&gt;when&lt;/em&gt; each one makes sense. Because once you understand their logic you'll stop fearing databases, and maybe even start respecting them.&lt;/p&gt;

&lt;p&gt;So grab your digital shovel, because we're about to dig deep, right into the foundations of data. &lt;/p&gt;

&lt;h2&gt;
  
  
  SQL: The Structured OG
&lt;/h2&gt;

&lt;p&gt;Before the world went wild with JSON and felxibility, there was SQL the database equivalent of that one guy wearing a pressed shirt, balancing the books, and reminding everyone to commit their transactions before leaving the office.&lt;/p&gt;

&lt;p&gt;At it's core, &lt;strong&gt;SQL&lt;/strong&gt; (Structured Query Language) is built on the idea that data should live in &lt;strong&gt;relations&lt;/strong&gt;, or what we usually call &lt;em&gt;tables&lt;/em&gt;. These tables are made of rows and columns. They connect to each other through relationships. You might have a &lt;code&gt;users&lt;/code&gt; table and a &lt;code&gt;posts&lt;/code&gt; table, and the relationship between them says, "Hey, each post belongs to a user."&lt;/p&gt;

&lt;p&gt;This structure makes SQL databases feel &lt;em&gt;predictable&lt;/em&gt;. You know exactly what your data looks like, how it connects, and what happens when you update it. That predictability comes from something known as &lt;strong&gt;Schemas&lt;/strong&gt; these are the blueprints that define what data can, and can't, exist in a table.&lt;/p&gt;

&lt;p&gt;If you try to insert text where a number should go, SQL says "Nope". If you try and delete a user that still has posts linked to them, SQL says "Think again".&lt;/p&gt;

&lt;p&gt;It's strict, sometimes annoyingly so, but that's the point. It prevents chaos before it starts.&lt;/p&gt;

&lt;h2&gt;
  
  
  The ACID Test
&lt;/h2&gt;

&lt;p&gt;SQL databases live by a sacred code knows as &lt;strong&gt;ACID&lt;/strong&gt;. It's not a new programming language, it's a set of rules that keep your data safe and consistent.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Atomicity&lt;/strong&gt;: All or nothing. A transaction either happens completely or not at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistency&lt;/strong&gt;: Data must follow the rules, the schema, at all times.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Isolation&lt;/strong&gt;: Transactions don't step on each others toes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Durability&lt;/strong&gt;: Once somethings saved, it stays saved. Even if the server crashes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You could think of &lt;strong&gt;ACID&lt;/strong&gt; like an insurance policy for your data. It makes sure you don't end up with a half-processed payment or an order that doesn't exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Strength of Structure
&lt;/h2&gt;

&lt;p&gt;The real magic of SQL isn't just its reliability, it's how it makes data &lt;em&gt;relational&lt;/em&gt;. With a few well written joins, you can connect data across multiple tables in milliseconds. Need to know how many posts a user has? One query. Need to see which users bought somethings in the last 30 days? One query.&lt;/p&gt;

&lt;p&gt;It's elegant, clean, and honestly an ease to work with, &lt;em&gt;when&lt;/em&gt; it works right.&lt;/p&gt;

&lt;p&gt;And that structure doesn't just make things consistent, it makes them &lt;strong&gt;understandable&lt;/strong&gt;. Your database becomes self-documenting. Anyone can open your schema and see exactly what's going on.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Usual Suspects
&lt;/h2&gt;

&lt;p&gt;A few of the most popular SQL databases have been around long enough to earn their grey hairs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL&lt;/strong&gt;: The open source powerhouse, famous for reliability and standards compliance. It's a go-to if you want serious features without vendor lock-in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MySQL&lt;/strong&gt;: The crowd favorite for web apps, known for being lightweight and everywhere.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQLite&lt;/strong&gt;: The embedded, no server needed hero that lives inside mobile apps and small projects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft SQL Server&lt;/strong&gt; and &lt;strong&gt;Oracle Database&lt;/strong&gt;: The enterprise veterans, still running mission-critical systems  in giant corporations.
Each of these speak SQL, but with slightly different dialects. It's like English accents, you'll understand most of it but some words might sound funny, and take a minute to click.&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%2Ftis34anjidm20ty8ucwi.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%2Ftis34anjidm20ty8ucwi.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Price of Order
&lt;/h2&gt;

&lt;p&gt;This structure comers with trade-offs. SQL databases scale &lt;em&gt;vertically&lt;/em&gt; meaning if you need more performance, you usually need a bigger machine, not more machines. They're excellent for consistency, but not so great when you suddenly go viral and your app starts handling millions of requests.&lt;/p&gt;

&lt;p&gt;Sharding, which means splitting data across multiple servers, is technically possible in SQL databases, but it seems like it's no walk in the park to manage. Schema migrations have a reputation for being nerve wracking and changing a column on a production database has caused more late night rollbacks than most would like to admit.&lt;/p&gt;

&lt;p&gt;Still SQL remains the foundation of most serious applications today. Even with newer tech trends, the structured, predictable world of relational databases continues to thrive. Because once you understand it, it just makes sense.&lt;/p&gt;

&lt;h2&gt;
  
  
  NoSQL: The Rebel with Many Causes
&lt;/h2&gt;

&lt;p&gt;If SQL is the organized, rule following engineer of the database world, then NoSQL is the creative rebel who dropped out of schema school and build a data model in their garage.&lt;/p&gt;

&lt;p&gt;NoSQL, short for &lt;em&gt;Not Only SQL&lt;/em&gt; emerged from a growing need to handle larger, messier, and faster changing data than traditional relational databases were designed for. Around the late 2000s, as web apps started scaling to millions of users and cloud computing became mainstream, developers realized that the one size fits all model of relational databases couldn't keep up.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Rise of the Schemaless Mindset
&lt;/h2&gt;

&lt;p&gt;NoSQL databases were designed to store and retrieve data in ways that break free from the table based model. Instead of everything living in neatly defined rows and columns, data could be saved as &lt;strong&gt;documents&lt;/strong&gt;, &lt;strong&gt;key-value pairs&lt;/strong&gt;, &lt;strong&gt;wide columns&lt;/strong&gt;, or even &lt;strong&gt;graphs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;There are several main types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Document databases&lt;/strong&gt;: MongoDB, and CouchDB are some examples. These store data in JSON like documents, easy to read, easy to nest, and easy to change on the fly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key-value stores&lt;/strong&gt;: Redis, and DynamoDB represent these. They are lightning fast for lookups, perfect for caching or session data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Column-family stores&lt;/strong&gt;: Cassandra, and HBase seem most popular. These organize data for high scalability across distributed systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graph databases&lt;/strong&gt;: Neo4j focus on relationships, ideal for things like social networks of recommendation engines.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Document databases became especially popular among web developers because they worked naturally with JSON, which is already everywhere in modern programming. Storing data as JSON documents felt intuitive, quick, and familiar. A huge departure from the rigid schema requirements of SQL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trade-offs and the "Eventually Consistent" Reality
&lt;/h2&gt;

&lt;p&gt;NoSQL's biggest strength is its flexibility and this is also its biggest trade-off.&lt;br&gt;
Without a strict schema, data structures can evolve as the app grows. You can add new fields, drop old ones, and experiment freely. The catch is, if you're not careful, that same flexibility can lead to inconsistency.&lt;/p&gt;

&lt;p&gt;Many NoSQL systems also follow something called &lt;strong&gt;eventual consistency&lt;/strong&gt;. It means that, in a distributed environment, data might not be instantly synchronized everywhere. It'll get there &lt;em&gt;eventually&lt;/em&gt;, once all replicas have caught up. That's usually fine for social apps or analytics dashboards, not so much for things like banking systems.&lt;/p&gt;

&lt;p&gt;From a research standpoint, this trade-off was a conscious design choice. NoSQL systems prioritized &lt;strong&gt;availability and scalability&lt;/strong&gt; over &lt;strong&gt;immediate consistency&lt;/strong&gt;. They were built for the modern web, where speed and uptime often matter more than having every copy of the data match perfectly at all times.&lt;/p&gt;

&lt;p&gt;My first job had me working with a SQL database, full of tables, relationships, and carefully defined rules. Then, in my second job I moved onto a document store, MongoDB, a NoSQL database. That's when I got a taste of freedom.&lt;/p&gt;

&lt;p&gt;Transforming documents was easy, almost fun. I could add new fields, change structures, and adapt the data as the app evolved. But that same freedom came with a few headaches. A single type in a field name could make records disappear quietly, no trace, and no error thrown back at you to help find the problem.&lt;/p&gt;

&lt;p&gt;It was liberating, but also a reminder. Flexibility without guardrails is powerful, but dangerous.&lt;/p&gt;

&lt;h2&gt;
  
  
  Structure vs Flexibility
&lt;/h2&gt;

&lt;p&gt;At its heart, the difference between SQL and NoSQL is a difference in &lt;strong&gt;philosophy&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;SQL believes in &lt;strong&gt;order&lt;/strong&gt;, every piece of data neatly defined, validated, and cross-referenced before it earns its place in the table. It's like a well run library where every book has a catalog number and a precise location.&lt;/p&gt;

&lt;p&gt;NoSQL believes in &lt;strong&gt;freedom&lt;/strong&gt;, data can take any form it needs to, as long as it works for the application. It's more like a collection of notebooks scattered across a desk, a little messy, but much easier to jot new ideas into.&lt;/p&gt;

&lt;p&gt;Neither is wrong. The choice depends on what kind of world your data lives in. Structured environments thrive on SQL. Dynamic, ever changing systems thrive on NoSQL.&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%2F4th094qfv41dwgztji0d.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%2F4th094qfv41dwgztji0d.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The CAP Theorem: You Can’t Have It All
&lt;/h2&gt;

&lt;p&gt;To understand why these trade-offs exist, we need to mention something called the CAP Theorem, a concept that shows up often in distributed systems research.&lt;/p&gt;

&lt;p&gt;It says that a distributed database can only guarantee two out of three of the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Consistency&lt;/strong&gt;: Every node sees the same data at the same time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Availability&lt;/strong&gt;: The system always responds, even if some nodes fail.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Partition tolerance&lt;/strong&gt;: The system keeps working even when parts of the network can’t communicate.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In practice, this means you can’t have perfect consistency, perfect availability, and perfect fault tolerance all at once. You pick two, and you live with the consequences.&lt;/p&gt;

&lt;p&gt;SQL databases traditionally lean toward Consistency and Availability, prioritizing correctness.&lt;br&gt;
NoSQL databases lean toward Availability and Partition tolerance, prioritizing resilience and scalability.&lt;/p&gt;

&lt;p&gt;Neither side is wrong. They’re just optimizing for different realities.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Modern Middle Ground
&lt;/h2&gt;

&lt;p&gt;Interestingly, modern database systems have started blurring the lines between SQL and NoSQL.&lt;br&gt;
For instance, PostgreSQL now supports JSONB columns, allowing you to store flexible, document style data without abandoning relational structure.&lt;br&gt;
And on the flip side, MongoDB and Cassandra have introduced stronger consistency models and transactional features.&lt;/p&gt;

&lt;p&gt;The industry seems to be quietly converging, not because one side “won,” but because developers demanded both structure and freedom.&lt;/p&gt;

&lt;p&gt;Databases today are less about picking a side and more about understanding your trade-offs. It’s no longer a battle it’s a balancing act.&lt;/p&gt;

</description>
      <category>database</category>
      <category>sql</category>
      <category>mongodb</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Down the Web3 Rabbit Hole: A Dive Into Blockchain, Crypto &amp; NFTs</title>
      <dc:creator>Shaquille Niekerk</dc:creator>
      <pubDate>Wed, 01 Oct 2025 13:40:41 +0000</pubDate>
      <link>https://forem.com/shaq_attack/down-the-web3-rabbit-hole-a-dive-into-blockchain-crypto-nfts-lcc</link>
      <guid>https://forem.com/shaq_attack/down-the-web3-rabbit-hole-a-dive-into-blockchain-crypto-nfts-lcc</guid>
      <description>&lt;h2&gt;
  
  
  Intro: Trying to Make Sense of the Buzz
&lt;/h2&gt;

&lt;p&gt;Everywhere I look, people are talking about blockchain, crypto, NFTs, and Web3. To me, it feels like they're talking a different language. I’ve seen friends showing off their crypto wallets, heard people say “I staked this” or “I minted that,” and nodded politely even though I had no clue what they were talking about.&lt;/p&gt;

&lt;p&gt;So I decided to actually sit down and unpack it. Not from the perspective of an expert, because I’m definitely not, but as someone curious and maybe a little overwhelmed. This is me doing the research, connecting the dots, and reporting back. Piece by piece, let’s try to figure out what this whole world really is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blockchain: The Foundation Layer
&lt;/h2&gt;

&lt;p&gt;The word &lt;em&gt;blockchain&lt;/em&gt; gets thrown around like it’s self-explanatory, but once I dug in, I realized it’s less mysterious and more… &lt;em&gt;clever&lt;/em&gt;. At its core, a blockchain is just a &lt;strong&gt;ledger&lt;/strong&gt; like the record book an accountant might keep, except instead of one person controlling it &lt;em&gt;everyone&lt;/em&gt; can see and verify it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instead of a single database, the blockchain is &lt;strong&gt;distributed&lt;/strong&gt; across thousands of computers.&lt;/li&gt;
&lt;li&gt;Transactions are grouped into &lt;strong&gt;blocks&lt;/strong&gt;, which get &lt;strong&gt;chained&lt;/strong&gt; together in order.&lt;/li&gt;
&lt;li&gt;Because the chain is &lt;strong&gt;crypto&lt;/strong&gt;graphically locked, you can’t just go back and fudge the numbers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means trust doesn’t come from a bank or an authority, but from the math and the network itself.&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%2F2j619c1b9v1en948f9rn.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%2F2j619c1b9v1en948f9rn.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Consensus Mechanisms (a new word I had to Google)
&lt;/h3&gt;

&lt;p&gt;The system still needs a way to agree on what’s valid, so that’s where things like &lt;strong&gt;Proof of Work (PoW)&lt;/strong&gt; and &lt;strong&gt;Proof of Stake (PoS)&lt;/strong&gt; comes in.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PoW (used by Bitcoin) makes miners solve complex math problems to add new blocks. Energy intensive, but secure.&lt;/li&gt;
&lt;li&gt;PoS (used by Ethereum now) has validators “stake” coins to prove they’re trustworthy. More eco-friendly, but introduces different dynamics.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once I got this part, the other concepts started clicking. Blockchain is basically the foundation. Crypto, NFTs, DeFi, and everything else I’ll cover later are all built on top of this trustless, shared ledger idea.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cryptocurrency: More Than Digital Money?
&lt;/h2&gt;

&lt;p&gt;When most people say “crypto,” they mean &lt;strong&gt;cryptocurrency&lt;/strong&gt; which is digital money that runs on top of a blockchain. That much I knew. But what I didn’t realize is how different variants of crypto exist, and how wildly different their purposes can be.&lt;/p&gt;

&lt;p&gt;The obvious starting point is &lt;strong&gt;Bitcoin&lt;/strong&gt;. It was the first, launched back in 2009, and it still acts like digital gold: scarce, mined, and valuable because people believe it is. What surprised me, though, is that Bitcoin isn’t really designed to do much beyond being a store of value and a way to transfer money securely.&lt;/p&gt;

&lt;p&gt;Then comes &lt;strong&gt;Ethereum&lt;/strong&gt;, which changed the game. Instead of just transferring coins, Ethereum let developers build &lt;em&gt;programs&lt;/em&gt; called &lt;strong&gt;smart contracts&lt;/strong&gt; directly on the blockchain. That means you can set rules like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“If Alice sends 1 ETH, automatically mint her a token.”&lt;/li&gt;
&lt;li&gt;“If a loan isn’t repaid in 30 days, return the collateral.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s programmable money that feels both futuristic and a little dangerous.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Many Faces of Crypto
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Altcoins&lt;/strong&gt;: Pretty much every coin that isn’t Bitcoin. Some are serious (Cardano, Solana), others are memes (Dogecoin, Shiba Inu).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stablecoins&lt;/strong&gt;: Tokens tied to “real” money like the US dollar (USDC, USDT). These exist so you can use crypto without the price rollercoaster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Utility &amp;amp; Governance Tokens&lt;/strong&gt;: Coins that give you perks in certain apps, or even voting power in communities (we’ll come back to this with DAOs).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And here’s the part that really clicked for me: crypto isn’t just “money” in the way I thought. A token might represent currency, but it could also be your &lt;strong&gt;membership pass&lt;/strong&gt;, your &lt;strong&gt;voting share&lt;/strong&gt;, or your &lt;strong&gt;access key&lt;/strong&gt; to a platform.&lt;/p&gt;

&lt;p&gt;So while Bitcoin is digital cash, Ethereum and beyond start to feel like the foundation of an entire alternative economy.&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%2Fm17infj1tkku3x0u7x30.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%2Fm17infj1tkku3x0u7x30.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  NFTs: Beyond the JPEG Hype
&lt;/h2&gt;

&lt;p&gt;If crypto is about money, then NFTs are about ownership. The acronym stands for &lt;strong&gt;Non-Fungible Token&lt;/strong&gt;. Which, translated into human language, means: &lt;em&gt;a digital thing that’s unique and can’t be swapped 1:1 for something else.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I remember the 2021 explosion, Bored Ape Yacht Club, pixelated punks, people buying virtual land on virtual Earths. Headlines about JPEGs selling for millions left me baffled. Like, couldn’t you just screenshot the image and save it? Why would anyone &lt;em&gt;pay&lt;/em&gt; for it?&lt;/p&gt;

&lt;p&gt;Here’s what I learned: the picture itself isn’t the NFT. The NFT is more like a &lt;strong&gt;certificate of authenticity&lt;/strong&gt; stored on the blockchain. Anyone can copy the Mona Lisa, but there’s only one hanging in the Louvre. With NFTs, the blockchain acts as the Louvre proving which copy is “the real one.”&lt;/p&gt;

&lt;h3&gt;
  
  
  Where NFTs Are Used
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Art &amp;amp; Collectibles&lt;/strong&gt;: The most famous use case, from Apes to Beeple’s $69M digital artwork.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gaming&lt;/strong&gt;: In-game items (weapons, skins, characters) you can &lt;em&gt;own&lt;/em&gt; and even trade outside the game.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Music &amp;amp; Media&lt;/strong&gt;: Artists selling albums or special editions directly to fans.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tickets &amp;amp; Identity&lt;/strong&gt;: NFTs that prove you went to an event or belong to a community.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And then there’s the stranger side: people buying plots of land in the &lt;em&gt;metaverse&lt;/em&gt;. At first glance, it feels wild, like paying real money for imaginary dirt. But in these digital worlds, ownership actually matters if the world itself becomes a place people &lt;em&gt;live&lt;/em&gt; and do business in.&lt;/p&gt;

&lt;h3&gt;
  
  
  My Takeaway
&lt;/h3&gt;

&lt;p&gt;NFTs aren’t about the file. They’re about &lt;strong&gt;ownership records&lt;/strong&gt; in a digital economy. It’s less “buying a JPEG” and more “holding a verified spot in a club, game, or cultural moment.”&lt;/p&gt;

&lt;p&gt;Whether that’s worth millions is another debate entirely... but it did shift my view from &lt;em&gt;“that’s dumb”&lt;/em&gt; to &lt;em&gt;“okay, I see why people value it.”&lt;/em&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%2Fqky5lb2qoowki2ye2yxo.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%2Fqky5lb2qoowki2ye2yxo.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  DeFi: Banks Without Banks?
&lt;/h2&gt;

&lt;p&gt;Some time after NFTs started making headlines, I began hearing another buzzword: &lt;strong&gt;DeFi&lt;/strong&gt;, short for &lt;em&gt;Decentralized Finance&lt;/em&gt;. Companies were saying they were “disrupting the financial ecosystem,” investors were hyping it, and honestly, I had no idea what any of it meant. Was this the future of money, or just marketing spin?&lt;/p&gt;

&lt;p&gt;Here’s what I found: DeFi is basically an attempt to rebuild the traditional financial system through savings, loans, trading, and even insurance, all without banks or middlemen. Instead, it all runs on &lt;strong&gt;smart contracts&lt;/strong&gt; living on a blockchain (usually Ethereum).&lt;/p&gt;

&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Decentralized Exchanges (DEXs)&lt;/strong&gt;: Places like Uniswap where you can swap tokens instantly, without a broker or exchange in the middle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lending &amp;amp; Borrowing&lt;/strong&gt;: Platforms like Aave let you put up crypto as collateral and borrow against it. No paperwork, no banker, just code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Liquidity Pools &amp;amp; Yield Farming&lt;/strong&gt;: Users “lock up” tokens to provide liquidity for trades, and in return they earn fees or extra tokens. It’s like putting your money to work in a strange, blockchain-native way.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Staking&lt;/strong&gt;: Another form of earning, where you lock up coins to help secure a network (common in Proof of Stake blockchains).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On paper, it sounds incredible: 24/7 markets, no gatekeepers, anyone in the world with internet access can participate. That’s the “bright future” side.&lt;/p&gt;

&lt;p&gt;But then I discovered the flip side.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smart contracts can be buggy, and when code manages billions of dollars, bugs = hacks.&lt;/li&gt;
&lt;li&gt;Scams and “rug pulls” (where project creators vanish with investor money) have been rampant.&lt;/li&gt;
&lt;li&gt;Prices swing wildly, which makes “decentralized loans” sound less stable and more… terrifying.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Big Question
&lt;/h3&gt;

&lt;p&gt;So is DeFi a glimpse into a new financial era, or a bubble waiting to burst? From what I’ve read, it’s &lt;em&gt;both&lt;/em&gt;. The technology is undeniably disruptive, software engineers are literally coding banks into existence, but it’s also risky and a really new space.&lt;/p&gt;

&lt;p&gt;For me, the takeaway is this: &lt;strong&gt;DeFi isn’t going away, it’s evolving.&lt;/strong&gt; Whether it becomes mainstream banking or stays a crypto niche depends on if it can grow past its wild-west phase.&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%2Fftr56vodgu0247w581yr.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%2Fftr56vodgu0247w581yr.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  DAOs: Wait, What Are These?
&lt;/h2&gt;

&lt;p&gt;When I first came across the term &lt;strong&gt;DAO&lt;/strong&gt;, my reaction was pretty much: &lt;em&gt;“Okay, another acronym. What now?”&lt;/em&gt; Turns out it stands for &lt;strong&gt;Decentralized Autonomous Organization&lt;/strong&gt;, which, honestly, didn’t make it much clearer at first.&lt;/p&gt;

&lt;p&gt;Here’s what I eventually pieced together: a DAO is like an &lt;strong&gt;online organization or community that runs on code instead of managers.&lt;/strong&gt; Instead of a CEO or a board making decisions, DAOs use &lt;strong&gt;smart contracts&lt;/strong&gt; and &lt;strong&gt;tokens&lt;/strong&gt; to let members collectively govern how things work.&lt;/p&gt;

&lt;h3&gt;
  
  
  How It Works (in simple terms)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A group launches a DAO on a blockchain.&lt;/li&gt;
&lt;li&gt;People who hold the DAO’s token get &lt;strong&gt;voting rights&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Rules like how funds are spent or what the project builds next are enforced by &lt;strong&gt;smart contracts&lt;/strong&gt;, not just people.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, if you want to propose something (say, funding a new project), you submit it, token holders vote, and if it passes, the smart contract automatically carries it out. No middle management, no “trust me bro” just code + consensus.&lt;/p&gt;

&lt;h3&gt;
  
  
  Examples That Blew My Mind
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MakerDAO&lt;/strong&gt;: Manages a stablecoin called DAI. The entire system is governed by token holders deciding parameters like interest rates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uniswap DAO&lt;/strong&gt;: Governs one of the biggest decentralized exchanges in crypto. Users literally steer how a multi-billion dollar protocol evolves.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Investment DAOs&lt;/strong&gt;: Groups that pool funds and vote on what startups or NFTs to invest in. Kind of like a venture capital firm, but run by a global internet community.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why It’s Interesting
&lt;/h3&gt;

&lt;p&gt;To me, DAOs feel like a mashup of a company, a co-op, and a Discord server. They’re still clunky, and participation can be low (not everyone with a token votes), but the idea is radical: &lt;strong&gt;organizations without traditional hierarchies, managed by code, where ownership and governance are shared.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before this, I had never heard of DAOs, and I’m still wrapping my head around them. But they hint at a future where communities online can &lt;em&gt;own and run&lt;/em&gt; the things they care about, instead of just consuming them.&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%2F8hbt9klf9wdu9z7h2vtp.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%2F8hbt9klf9wdu9z7h2vtp.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Web3 &amp;amp; The Future: All the Pieces Coming Together
&lt;/h2&gt;

&lt;p&gt;After diving into blockchains, crypto, NFTs, DeFi, and DAOs, I started to see the bigger picture. Individually, each concept feels niche or confusing. But together, they form what people are calling &lt;strong&gt;Web3&lt;/strong&gt;, a vision for a new internet that’s built on ownership, decentralization, and participation.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Core Idea of Web3
&lt;/h3&gt;

&lt;p&gt;Right now (Web2), most of what we do online is controlled by big platforms like social media companies, cloud providers, banks, app stores. We create, share, and spend, but the platforms own the infrastructure and often the profits.&lt;/p&gt;

&lt;p&gt;Web3 flips that by saying:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data and assets should live on blockchains, not private servers.&lt;/li&gt;
&lt;li&gt;Users should &lt;strong&gt;own&lt;/strong&gt; their digital identities and creations (via NFTs, tokens, wallets).&lt;/li&gt;
&lt;li&gt;Communities should have a say in how platforms evolve (via DAOs).&lt;/li&gt;
&lt;li&gt;Money should flow natively through the internet (via crypto and DeFi), without middlemen.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s a shift from &lt;em&gt;platform-owned&lt;/em&gt; to &lt;em&gt;user-owned&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where It’s Heading
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Metaverse&lt;/strong&gt;: Virtual worlds where NFTs = your land, clothes, or identity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tokenization&lt;/strong&gt;: Real world assets (stocks, real estate, even music royalties) represented as blockchain tokens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layer 2 Scaling&lt;/strong&gt;: Networks like Polygon or Arbitrum making blockchains faster and cheaper to use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interoperability&lt;/strong&gt;: Bridges that let assets move across chains, like transferring money between banks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy Coins &amp;amp; Identity&lt;/strong&gt;: Balancing openness with personal security (think Monero, Zcash, or zero-knowledge proofs).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  My Takeaway
&lt;/h3&gt;

&lt;p&gt;The more I read, the more I realized Web3 isn’t a single technology, it’s a &lt;strong&gt;philosophy&lt;/strong&gt;. It’s about imagining an internet where the rules are baked into code, ownership is transparent, and participation is rewarded.&lt;/p&gt;

&lt;p&gt;It’s still early days. The tech has big problems (scalability, scams, complexity), regulators are circling, and not every grand idea will survive. Some parts might fade out as fads, others might become the backbone of how we use the internet in ten years.&lt;/p&gt;

&lt;p&gt;For me, the biggest shift was seeing Web3 less as hype and more as an &lt;em&gt;experiment in rethinking the internet itself&lt;/em&gt;. Whether it succeeds or not, it’s already shaping the conversation about what comes next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: Reflections from the Rabbit Hole
&lt;/h2&gt;

&lt;p&gt;When I first started digging into all of this, I honestly just wanted to understand what people were talking about when they showed off their wallets or dropped words like “mint,” “staking,” and “DAO.” It felt like an exclusive club with its own vocabulary.&lt;/p&gt;

&lt;p&gt;Now, after unpacking blockchains, cryptocurrencies, NFTs, DeFi, DAOs, and the wider Web3 vision, I feel like I’ve at least learned the language, even if I’m still a beginner in the conversation.&lt;/p&gt;

&lt;p&gt;Here’s where I landed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blockchain&lt;/strong&gt; is the foundation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crypto&lt;/strong&gt; is more than money. It’s programmable assets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NFTs&lt;/strong&gt; are about ownership, not just pictures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DeFi&lt;/strong&gt; is financial services without banks, both exciting and risky.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DAOs&lt;/strong&gt; are internet-native organizations experimenting with shared governance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web3&lt;/strong&gt; is the big-picture philosophy tying it all together.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do I think this is the inevitable future? I’m not sure. Some of it still feels experimental, messy, or maybe even faddish. But other parts like the idea of user owned platforms, global access to finance, and digital ownership feel too important to ignore.&lt;/p&gt;

&lt;p&gt;And that’s the fascinating part: even if half of today’s projects collapse tomorrow, the concepts have already shifted how we think about the internet.&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%2Fhvsdwu54r4916x3t4xmt.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%2Fhvsdwu54r4916x3t4xmt.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’d love to hear from you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you’re deep into this space, what did &lt;em&gt;you&lt;/em&gt; wish someone had told you when you were first learning?&lt;/li&gt;
&lt;li&gt;If you’re like me and just starting to explore, what’s the most confusing or intriguing part so far?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drop your thoughts in the comments, your insights could make this journey less overwhelming for the next curious mind wandering into Web3.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>web3</category>
      <category>learning</category>
      <category>beginners</category>
    </item>
    <item>
      <title>TypeScript: The Safety Net JavaScript Didn’t Know It Needed</title>
      <dc:creator>Shaquille Niekerk</dc:creator>
      <pubDate>Mon, 29 Sep 2025 08:05:04 +0000</pubDate>
      <link>https://forem.com/shaq_attack/the-stack-unpacked-episode-3-typescript-the-safety-net-javascript-didnt-know-it-needed-27i</link>
      <guid>https://forem.com/shaq_attack/the-stack-unpacked-episode-3-typescript-the-safety-net-javascript-didnt-know-it-needed-27i</guid>
      <description>&lt;p&gt;Welcome back to &lt;strong&gt;The Stack Unpacked&lt;/strong&gt;. If JavaScript is the language that runs the web, TypeScript is the pair of safety goggles you put on when you start cutting metal with it.&lt;/p&gt;

&lt;p&gt;Why are we talking about TypeScript? Because JavaScript grew up. Small scripts and prototypes are blissfully flexible and great for experimenting. But once an app balloons to dozens of contributors, hundreds of modules, and a CI pipeline, tiny mismatches become expensive bugs. TypeScript’s job is simple (and huge) catch a whole class of those mistakes earlier, at compile time, instead of at 5 p.m. on a Friday when a customer files a ticket titled “Your app made my money disappear.”&lt;/p&gt;

&lt;p&gt;TypeScript doesn’t replace JavaScript it just amplifies it. It adds a static type system on top of JavaScript so editors and compilers can give you smarter feedback, better autocompletion, safer refactors, and clearer contracts between modules. The trick is incremental adoption. You don’t have to rewrite everything overnight. Just Rename a file to &lt;code&gt;.ts&lt;/code&gt;, add types where they matter, and let the compiler help you move forward.&lt;/p&gt;

&lt;h2&gt;
  
  
  Type System Basics
&lt;/h2&gt;

&lt;p&gt;At its heart, TypeScript is a &lt;strong&gt;static, structural, gradual&lt;/strong&gt; type system layered on top of JavaScript.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Static&lt;/strong&gt;: checks happen before runtime (at compile time).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structural&lt;/strong&gt;: compatibility is based on the &lt;em&gt;shape&lt;/em&gt; of values, not class names. If two objects share compatible properties, they’re compatible. “duck typing” for the compiler.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gradual&lt;/strong&gt;: TypeScript figures out many types for you, and you only add annotations when it can’t.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tiny type examples
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Primitives &amp;amp; annotation&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&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="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Union &amp;amp; narrowing&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;number&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;print&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="nx"&gt;ID&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="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&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;id&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// narrowed to string&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Interface vs type alias&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;MaybeUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;User&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;/div&gt;



&lt;p&gt;&lt;strong&gt;Generics (tiny example)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;identity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&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;v&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;T&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;v&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;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;identity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;any vs unknown&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;any&lt;/code&gt; disables checking (use sparingly).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;unknown&lt;/code&gt; forces you to narrow before use and is safer than &lt;code&gt;any&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Important note:&lt;/strong&gt; TypeScript is compile-time only, so your runtime is still plain JavaScript. For untrusted external inputs (JSON, network payloads), you still need runtime validation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What TypeScript actually buys you (developer workflows)
&lt;/h2&gt;

&lt;p&gt;TypeScript changes how you work, not just what you write:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Editor feedback that matters.&lt;/strong&gt; Autocomplete, jump-to-definition, inline docs, these are sharper because the editor knows shapes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safer refactors.&lt;/strong&gt; Rename a function, and the compiler flags missed call sites. You stop guessing where that utility is used.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Living contracts.&lt;/strong&gt; Types become documentation. A function signature that clearly says “returns &lt;code&gt;Promise&amp;lt;User[]&amp;gt;&lt;/code&gt;” communicates intent immediately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incremental safety.&lt;/strong&gt; Start with &lt;code&gt;allowJs&lt;/code&gt; or add &lt;code&gt;--checkJs&lt;/code&gt; later. Tighten rules over time (enable &lt;code&gt;strict&lt;/code&gt; when ready).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team confidence.&lt;/strong&gt; Teams ship changes faster when they trust the compiler to catch accidental breakage.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Real moment: I once jumped into a weekend challenge thinking TypeScript would be a nice-to-have. Two hours later I was neck-deep deciding whether a function should return &lt;code&gt;string&lt;/code&gt;, &lt;code&gt;Promise&amp;lt;string&amp;gt;&lt;/code&gt;, or some awkward union type. TypeScript compiled, but the iteration felt heavier — a useful reminder that the trade-off exists, especially for small prototypes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The double-edged sword: when TS gets in the way
&lt;/h2&gt;

&lt;p&gt;TypeScript isn't free ergonomically. Trade offs include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Slower prototyping:&lt;/strong&gt; For quick hacks, adding and managing types can slow you down.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build/compile step:&lt;/strong&gt; Tooling needs configuration, CI must compile. Modern toolchains mitigate this, but it’s still a step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learning curve:&lt;/strong&gt; Generics, conditional types, mapped types, they're powerful, but initially daunting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Over-annotation:&lt;/strong&gt; It’s possible to turn a codebase into a sea of redundant annotations. Rather use inference where it’s clear.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pragmatic rule: use TypeScript where the long-term value of safer changes and clearer contracts outweighs the upfront friction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Interop &amp;amp; the ecosystem
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Any valid JavaScript is valid TypeScript.&lt;/strong&gt; That’s by design. Incremental migration is possible file-by-file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Declaration files (&lt;code&gt;.d.ts&lt;/code&gt;)&lt;/strong&gt; describe JS libs for the compiler. Many popular packages bundle types. Others are available via DefinitelyTyped (&lt;code&gt;@types/…&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tooling:&lt;/strong&gt; Most major editors (VS Code, JetBrains IDEs) provide outstanding TS support out of the box. Bundlers and runtimes (Vite, Webpack, Bun, Node) all have robust TS integrations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Migration strategies: practical steps
&lt;/h2&gt;

&lt;p&gt;If you’re evaluating adoption, here’s a safe, pragmatic path:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Add &lt;code&gt;tsconfig.json&lt;/code&gt;&lt;/strong&gt; with conservative settings (&lt;code&gt;allowJs: true&lt;/code&gt;, &lt;code&gt;checkJs: false&lt;/code&gt;) to start.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rename files&lt;/strong&gt;: Convert a single module from &lt;code&gt;.js&lt;/code&gt; → &lt;code&gt;.ts&lt;/code&gt;/&lt;code&gt;.tsx&lt;/code&gt; and fix the immediate complaints.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use &lt;code&gt;--noImplicitAny&lt;/code&gt; / &lt;code&gt;strict&lt;/code&gt;&lt;/strong&gt; incrementally; enable one flag at a time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adopt &lt;code&gt;unknown&lt;/code&gt; instead of &lt;code&gt;any&lt;/code&gt;&lt;/strong&gt; for places where you really don’t know the shape. Narrow before use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use &lt;code&gt;// @ts-ignore&lt;/code&gt; sparingly&lt;/strong&gt; it’s a bandage, not a pattern.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write declaration files&lt;/strong&gt; for critical third-party libs without types, or install &lt;code&gt;@types/…&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automate CI checks&lt;/strong&gt; so compilation runs in PRs early and catches mistakes before merging.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Simple &lt;code&gt;tsconfig.json&lt;/code&gt; starter&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"compilerOptions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"es2020"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"module"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"esnext"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"strict"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"allowJs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"checkJs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"skipLibCheck"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"forceConsistentCasingInFileNames"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Practical patterns you’ll use daily
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Typing async data&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;  &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&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="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;fetchUsers&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&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="cm"&gt;/* ... */&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DTOs &amp;amp; validation&lt;/strong&gt; use runtime validation (zod, yup, io-ts) for external inputs, and map validated results to typed shapes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Typed hooks (React)&lt;/strong&gt; annotate return types for custom hooks so consumers get correct autocompletion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contract-first APIs&lt;/strong&gt; share types between backend and frontend with a small &lt;code&gt;types/&lt;/code&gt; package so both sides agree on payload shapes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Advanced features (when you need them)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Generics&lt;/strong&gt; for reusable, type-safe utilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conditional &amp;amp; mapped types&lt;/strong&gt; to compute types from other types (powerful in libraries).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Declaration merging &amp;amp; module augmentation&lt;/strong&gt; for advanced library integrations.
Use these gradually, most apps do fine with interfaces, unions, and a little generics.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wrap-up: when to reach for TypeScript
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Short version:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use TypeScript when you expect to maintain, refactor, or scale the codebase (multiple contributors, production concerns, shared contracts).&lt;/li&gt;
&lt;li&gt;Skip it (or opt for minimal use) for throwaway prototypes, tiny scripts, and when iteration speed beats long-term safety.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Final take:&lt;/strong&gt; TypeScript is a logical safety net. It won’t make you a better developer on its own, but it will make your codebase communicate better, catch a lot of common mistakes early, and give your team confidence to change things safely.&lt;/p&gt;

&lt;p&gt;That’s it from me on this weeks post of &lt;em&gt;The Stack Unpacked&lt;/em&gt;. Keep shipping, keep breaking, and remember: sometimes the safety net is what lets you jump.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>typescript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Choosing a Framework is Hard… Here’s the Shortcut</title>
      <dc:creator>Shaquille Niekerk</dc:creator>
      <pubDate>Thu, 25 Sep 2025 11:26:03 +0000</pubDate>
      <link>https://forem.com/shaq_attack/choosing-a-framework-is-hard-heres-the-shortcut-485g</link>
      <guid>https://forem.com/shaq_attack/choosing-a-framework-is-hard-heres-the-shortcut-485g</guid>
      <description>&lt;p&gt;This isn’t our next official episode of &lt;strong&gt;The Stack Unpacked&lt;/strong&gt; (that one’s about TypeScript), but let’s call this a &lt;em&gt;filler episode&lt;/em&gt; — the kind that doesn’t quite fit in the timeline, but covers a question I think every dev eventually faces:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Which framework should I use for my next project?”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you’ve ever opened VS Code, stared at a blank project folder, and then spent &lt;strong&gt;weeks&lt;/strong&gt; comparing React vs Vue vs Svelte instead of actually coding… well, you’re not alone. (Confession: I’ve been there. More than once.)&lt;/p&gt;

&lt;p&gt;So today, we’re unpacking the big players — React, Vue, Angular, Next.js — plus some of the newer kids on the block: Svelte, SolidJS, and Astro.&lt;br&gt;
The goal isn’t to crown a winner, but to help you figure out &lt;strong&gt;when each makes sense&lt;/strong&gt; and whether you should stick to one or keep switching.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Frameworks Exist
&lt;/h2&gt;

&lt;p&gt;Before we dive into names and logos, let’s rewind.&lt;br&gt;
Plain JavaScript (a.k.a. &lt;em&gt;Vanilla JS&lt;/em&gt;) can build anything. But as apps grew, developers found themselves tangled in &lt;strong&gt;state management&lt;/strong&gt;, &lt;strong&gt;DOM updates&lt;/strong&gt;, and &lt;strong&gt;reusable UI logic&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Frameworks were the answer: opinionated tools that provided structure, solved cross-browser headaches, and made big apps maintainable.&lt;/p&gt;

&lt;p&gt;Think of them as &lt;strong&gt;power tools for the web&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You &lt;em&gt;could&lt;/em&gt; build a house with a hammer, nails, and patience.&lt;/li&gt;
&lt;li&gt;Or you could grab a nail gun and save yourself weeks of frustration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Big Four (and Beyond)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  React — The Industry Titan
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Created by:&lt;/strong&gt; Facebook (2013)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Philosophy:&lt;/strong&gt; &lt;em&gt;UI as a function of state.&lt;/em&gt; Build small components, wire them together, and let React handle re-rendering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ecosystem:&lt;/strong&gt; Massive. Tutorials, job listings, libraries — everywhere.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// React Hello World&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&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;App&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="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="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&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="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&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="nf"&gt;setCount&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="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      Clicked &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; times
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;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;&lt;strong&gt;Strengths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dominates the industry → more jobs and community support.&lt;/li&gt;
&lt;li&gt;Huge ecosystem (Next.js, React Native, Remix).&lt;/li&gt;
&lt;li&gt;Flexible: bring your own tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Bring your own tools” can also mean &lt;em&gt;decision fatigue&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Learning curve around hooks, state, and effects.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;em&gt;Anecdote:&lt;/em&gt; The first time I discovered &lt;code&gt;useEffect&lt;/code&gt;, I thought I’d found a &lt;strong&gt;magic wand&lt;/strong&gt; that could summon components and variables whenever I wanted. Spoiler: if you don’t manage those carefully, you’ll summon endless popups until your browser begs for mercy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vue — The Friendly One
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Created by:&lt;/strong&gt; Evan You (2014)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Philosophy:&lt;/strong&gt; Approachability first. “Progressive framework” — you can sprinkle it into a project or build a full SPA.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Vue Hello World --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"count++"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Clicked &lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt; times&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt; &lt;span class="na"&gt;setup&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ref&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="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Beginner-friendly syntax (template + script + style).&lt;/li&gt;
&lt;li&gt;Great docs, small learning curve.&lt;/li&gt;
&lt;li&gt;Strong adoption in Asia and among indie devs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smaller job market compared to React.&lt;/li&gt;
&lt;li&gt;Ecosystem is growing, but less sprawling than React’s.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Angular — The Enterprise Giant
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Created by:&lt;/strong&gt; Google (2010, rewritten in 2016 as Angular 2+)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Philosophy:&lt;/strong&gt; Full framework. Batteries included: routing, state, forms, HTTP.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Angular Hello World Component&lt;/span&gt;
&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;app-root&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`&amp;lt;button (click)="count++"&amp;gt;Clicked {{ count }} times&amp;lt;/button&amp;gt;`&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AppComponent&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="mi"&gt;0&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;&lt;strong&gt;Strengths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complete solution → no need to glue together libraries.&lt;/li&gt;
&lt;li&gt;TypeScript-first → safer for big codebases.&lt;/li&gt;
&lt;li&gt;Popular in large, enterprise teams.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Heavy learning curve.&lt;/li&gt;
&lt;li&gt;Verbose compared to others.&lt;/li&gt;
&lt;li&gt;Less popular with startups and small teams.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Next.js — React with Superpowers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Created by:&lt;/strong&gt; Vercel (2016)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Philosophy:&lt;/strong&gt; Build fast, production-ready apps with React. Provides routing, SSR, API routes.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Next.js page (pages/index.js)&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Home&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Hello from Next.js&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Solves React’s missing pieces (routing, SSR).&lt;/li&gt;
&lt;li&gt;SEO-friendly with server-side rendering.&lt;/li&gt;
&lt;li&gt;Backed by Vercel, growing fast.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tied to React → inherits React’s quirks.&lt;/li&gt;
&lt;li&gt;Can feel “too much” for tiny projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Svelte — The Compiler Approach
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Created by:&lt;/strong&gt; Rich Harris (2016)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Philosophy:&lt;/strong&gt; Write less code. Svelte compiles templates into optimized JS at build time.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight svelte"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Svelte Hello World --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script&amp;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="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;on:click=&lt;/span&gt;&lt;span class="si"&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="nx"&gt;count&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Clicked &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; times
&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minimal boilerplate → smaller code.&lt;/li&gt;
&lt;li&gt;Fast performance.&lt;/li&gt;
&lt;li&gt;Joyful developer experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smaller ecosystem than React/Vue.&lt;/li&gt;
&lt;li&gt;Still maturing — fewer enterprise adopters.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  SolidJS — React, Refined
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Created by:&lt;/strong&gt; Ryan Carniato (2020)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Philosophy:&lt;/strong&gt; React-like API with fine-grained reactivity (no VDOM overhead).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React familiarity without some of React’s inefficiencies.&lt;/li&gt;
&lt;li&gt;Blazing performance benchmarks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Young ecosystem.&lt;/li&gt;
&lt;li&gt;Fewer tutorials, smaller community.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Astro — For Content-Heavy Sites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Created by:&lt;/strong&gt; Fred K. Schott &amp;amp; open-source contributors (2021)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Philosophy:&lt;/strong&gt; Content-focused, partial hydration (ship less JavaScript). Great for blogs, docs, marketing sites.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lightning-fast static sites.&lt;/li&gt;
&lt;li&gt;Can mix-and-match React/Vue/Svelte components.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Not meant for complex apps.&lt;/li&gt;
&lt;li&gt;Still finding its place in the ecosystem.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Choose — A Use Case Guide
&lt;/h2&gt;

&lt;p&gt;Here’s a way to think about it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Learning &amp;amp; Jobs:&lt;/strong&gt; Start with &lt;strong&gt;React&lt;/strong&gt; (industry standard).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quick Prototypes / Simplicity:&lt;/strong&gt; Try &lt;strong&gt;Vue&lt;/strong&gt; or &lt;strong&gt;Svelte&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise / Big Teams:&lt;/strong&gt; &lt;strong&gt;Angular&lt;/strong&gt; (structure + TypeScript).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO &amp;amp; Fullstack React:&lt;/strong&gt; &lt;strong&gt;Next.js&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cutting-Edge / Performance:&lt;/strong&gt; &lt;strong&gt;SolidJS&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content Sites / Blogs:&lt;/strong&gt; &lt;strong&gt;Astro&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;em&gt;Anecdote:&lt;/em&gt; Honestly, I’ve spent &lt;strong&gt;weeks&lt;/strong&gt; choosing a framework before even starting a side project. That’s half the reason I’m writing this: so you can spend less time comparing, and more time actually coding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recap
&lt;/h2&gt;

&lt;p&gt;Frameworks exist because vanilla JS gets messy fast. Each framework offers a trade-off: React’s ecosystem, Vue’s simplicity, Angular’s structure, Next.js’s power, Svelte’s joy, Solid’s speed, Astro’s focus.&lt;/p&gt;

&lt;p&gt;There isn’t a single right answer. The “best” framework depends on what you’re building, your team, and your goals.&lt;/p&gt;

&lt;h2&gt;
  
  
  Outro
&lt;/h2&gt;

&lt;p&gt;So here’s the real question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Should you &lt;strong&gt;master one framework deeply&lt;/strong&gt;, or &lt;strong&gt;switch based on the project&lt;/strong&gt;?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Beginners — what framework are you learning first, and why?&lt;br&gt;
Seasoned devs — what’s your rule of thumb when picking frameworks?&lt;/p&gt;

&lt;p&gt;Drop your thoughts below. Your experience could save someone else from framework paralysis.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>webdev</category>
      <category>frameworks</category>
      <category>programming</category>
    </item>
    <item>
      <title>JavaScript: The Language That Runs the Web</title>
      <dc:creator>Shaquille Niekerk</dc:creator>
      <pubDate>Sat, 20 Sep 2025 04:47:25 +0000</pubDate>
      <link>https://forem.com/shaq_attack/the-stack-unpacked-episode-2-javascript-the-language-that-runs-the-web-cbj</link>
      <guid>https://forem.com/shaq_attack/the-stack-unpacked-episode-2-javascript-the-language-that-runs-the-web-cbj</guid>
      <description>&lt;p&gt;Welcome back to &lt;strong&gt;The Stack Unpacked&lt;/strong&gt;. Do you sometimes find yourself spending more time debugging JavaScript state issues than managing your own life state? Then just know you’re not alone and you’re in the right place.&lt;/p&gt;

&lt;p&gt;First let’s wind the clock back to the mid 90s, for a quick history  lesson. The web was young, browsers were clunky, and most websites were basically static pages. If you wanted interactivity, you had three bad options: slow Java applets, slower server round trips, or plain old HTML with a “mailto” link. Not exactly revolutionary.&lt;/p&gt;

&lt;p&gt;Enter Netscape. They pulled in &lt;a href="https://en.wikipedia.org/wiki/Brendan_Eich" rel="noopener noreferrer"&gt;Brendan Eich&lt;/a&gt; and gave him a wild assignment: &lt;em&gt;“Create a scripting language for the web. You’ve got ten days.”&lt;/em&gt; Ten days! That’s barely enough time for me to create a landing page, let alone design a language. But somehow, he pulled it off. What he built was lightweight, approachable, and just powerful enough to make web pages feel alive.&lt;/p&gt;

&lt;p&gt;It bounced through a few names. Mocha, LiveScript, and finally JavaScript (thanks to marketing hype). If you missed the naming saga, check out the previous episode.&lt;/p&gt;

&lt;p&gt;The key thing: JavaScript was never meant to carry today’s weight. It was duct tape for static pages. Nobody at Netscape imagined we’d be building banking apps and streaming platforms with it.&lt;/p&gt;

&lt;p&gt;And honestly, that’s why my own struggles with JS always make me laugh. Half the time I’ll update some piece of state and the UI just… refuses to budge. Hours later, I discover it was one stubborn &lt;code&gt;useEffect&lt;/code&gt; all along. JavaScript: the scrappy ten day experiment that still finds ways to humble us.&lt;/p&gt;

&lt;p&gt;The takeaway? JavaScript stuck not because it was perfect but because it was there, it worked, and people never stopped leaning on it.&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%2F08odbbbe6ml4btj43uss.jpg" 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%2F08odbbbe6ml4btj43uss.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Language Fundamentals &amp;amp; Unique Design
&lt;/h2&gt;

&lt;p&gt;So what makes JavaScript &lt;em&gt;itself&lt;/em&gt; unique? It’s a mix of brilliance and chaos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dynamic typing.&lt;/strong&gt; Variables don’t lock into one type. A number can turn into a string mid flight. Great for experimentation, but also why &lt;code&gt;2 + 2 = 4&lt;/code&gt; and &lt;code&gt;"2" + 2 = "22"&lt;/code&gt;. Freedom and chaos in equal measure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Prototypal inheritance.&lt;/strong&gt; Instead of rigid class hierarchies, objects inherit directly from other objects. Flexible, but confusing if you’re expecting Java or C++.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;First class functions.&lt;/strong&gt; Functions are Lego bricks you can pass them around, return them, stack them endlessly. That’s what made callbacks, higher order functions, and async code possible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The event loop.&lt;/strong&gt; The beating heart of JavaScript. Instead of freezing while waiting for slow tasks, JS queues them up and keeps going. Genius, but also the reason for so many &lt;em&gt;“why isn’t this in order?!”&lt;/em&gt; debugging moments.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Altogether, JS is like that one friend who’s fun but reckless. Amazing to hang with, but also the reason you stayed out until 3 AM on a work night. You love it, you hate it, you keep coming back.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Ecosystem Explosion
&lt;/h2&gt;

&lt;p&gt;If 90s JavaScript was a sidekick, the 2000s turned it into a superhero.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;V8 engine (2008).&lt;/strong&gt; Google compiled JS down to machine code, making it fast. Suddenly, “toy language” apps felt snappy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Node.js.&lt;/strong&gt; Someone asked, &lt;em&gt;“What if V8 ran outside the browser?”&lt;/em&gt; And boom: JavaScript on the server. Front end and back end in one language. A Swiss Army knife that suddenly chopped wood, lit fires, and maybe fought bears?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;npm registry.&lt;/strong&gt; It exploded. Need to left pad a string? There’s a package. Want a color picker? Package. Need to install one library but accidentally pull in a hundred friends sneaking into the concert? Package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Frameworks.&lt;/strong&gt; Angular, React, and Vue are like survival gear for managing growing complexity. They gave us patterns, state management, and structure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tooling.&lt;/strong&gt; Babel let us use shiny new features early. Webpack, Parcel, Rollup bundled our mess for the browser. And TypeScript snuck in with some much needed guardrails (we’ll dive into that next episode).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The ecosystem grew so fast it was overwhelming. Today, you can spin up a project in minutes with powerful tooling, but also feel like you need a PhD just to pick a starter template.&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%2Fdewdn0cj8hwmyslpm8i3.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%2Fdewdn0cj8hwmyslpm8i3.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Weird Bits
&lt;/h2&gt;

&lt;p&gt;And now… the quirks. Because no JavaScript story is complete without them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Type coercion.&lt;/strong&gt; JS wants to be “helpful,” so it converts things on the fly. Zero equals false? Sure. Empty array equals false? Yep.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hoisting.&lt;/strong&gt; Functions can run before they’re declared, and variables sort of exist before they exist. Every new dev hits the &lt;em&gt;“why does my variable exist but not exist?”&lt;/em&gt; moment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The wandering &lt;code&gt;this&lt;/code&gt;.&lt;/strong&gt; In most languages, &lt;code&gt;this&lt;/code&gt; points to the current object. In JavaScript, it’s a free spirit. Sometimes with you, sometimes global, sometimes undefined unless you wrangle it with &lt;code&gt;.bind()&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Async chaos.&lt;/strong&gt; NonBlocking is genius, but it gave us callback hell: code nested so deep your editor begged for a second monitor. Promises and async/await cleaned it up, but async still surprises you with “undefined” returns that just haven’t resolved yet.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the kicker? None of this is a bug. It’s all by design. Remember that ten day deadline. It’s duct tape in the wiring.&lt;/p&gt;

&lt;p&gt;Like the time I discovered that adding an empty array to another empty array doesn’t throw an error it just returns an empty string. Why? Because JavaScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where JavaScript Fits Today
&lt;/h2&gt;

&lt;p&gt;So where does JS sit now?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Browsers.&lt;/strong&gt; Still the backbone. HTML and CSS handle structure and style, but JS makes pages &lt;em&gt;do things&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Servers.&lt;/strong&gt; Node.js turned JS into a backend player. Teams could now code front and back in one language, giving rise to the “fullstack JS dev.”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Frameworks.&lt;/strong&gt; Vanilla JS is the foundation, but frameworks (React, Angular, Vue) scale apps without descending into spaghetti. Each has trade offs. React gives freedom, Angular gives structure, Vue tries to balance both.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Beyond the web.&lt;/strong&gt; React Native powers mobile apps. Electron builds desktop apps. JS even sneaks into IoT and cloud functions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key? Just because JS &lt;em&gt;can&lt;/em&gt; run everywhere doesn’t mean it always should. Sometimes a strongly typed backend makes more sense. Sometimes plain HTML/CSS is enough. JS is versatile, not universal.&lt;/p&gt;

&lt;p&gt;For beginners: don’t panic. Start with vanilla JS and DOM, events, async. Once you get the fundamentals, frameworks and Node won’t feel overwhelming.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Future &amp;amp; Ecosystem Trends
&lt;/h2&gt;

&lt;p&gt;Where’s JavaScript heading?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Language upgrades.&lt;/strong&gt; Annual ECMAScript updates (optional chaining, nullish coalescing, destructuring) keep smoothing rough edges.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;WebAssembly (WASM).&lt;/strong&gt; Lets browsers run Rust, C, or C++ alongside JS at near native speeds. JS becomes the manager, delegating heavy lifting while keeping the glue role.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;New runtimes.&lt;/strong&gt; Deno and Bun are rethinking Node’s foundations with better security and blazing speed. Whether they dethrone Node is &lt;em&gt;TBD&lt;/em&gt;, but the competition shows JS isn’t slowing down.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tooling evolution.&lt;/strong&gt; After years of Babel, Webpack, and Vite, the trend is simplification. Future tools will focus on reducing boilerplate so devs can &lt;em&gt;build&lt;/em&gt; instead of &lt;em&gt;configure&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;TypeScript.&lt;/strong&gt; It’s not replacing JS, it’s reinforcing it. Strong typing is becoming survival gear for scaling apps.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Big picture: JavaScript isn’t going anywhere. It’ll keep evolving, branching, and surprising us, which is very on brand for a language hacked together in ten days that somehow ended up running the internet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrap Up
&lt;/h2&gt;

&lt;p&gt;Today we unpacked JavaScript, the scrappy little language that was supposed to validate forms but ended up powering the modern web.&lt;/p&gt;

&lt;p&gt;We traced it from its ten day birth at Netscape, through fundamentals like dynamic typing and the event loop, to the V8/Node/npm boom that turned it fullstack. We wrestled with quirks like coercion and &lt;code&gt;this&lt;/code&gt;, explored where it fits today, and peeked into a future with WASM, Bun, Deno, and TypeScript.&lt;/p&gt;

&lt;p&gt;The truth? JavaScript isn’t just the language of the web. It’s the glue, the connective tissue of modern development. Love it or hate it, it’s here to stay.&lt;/p&gt;

&lt;h2&gt;
  
  
  Outro
&lt;/h2&gt;

&lt;p&gt;If you enjoyed this episode of &lt;strong&gt;The Stack Unpacked&lt;/strong&gt;, hit follow so you don’t miss the next one where we dive into TypeScript, JavaScript’s safety net and the reason your future self will thank you.&lt;/p&gt;

&lt;p&gt;And hey, if you’ve got a friend just starting in web dev, share this with them. Nobody deserves to face callback hell alone.&lt;/p&gt;

&lt;p&gt;At the end of the day, JavaScript is like pizza: even when it’s messy, weird, and makes you uncomfortable… you just keep coming back for more.&lt;/p&gt;

&lt;p&gt;And that’s where we’ll pause for today. But before I go, I’d love to hear from you.&lt;/p&gt;

&lt;p&gt;If you’re a seasoned developer, what’s one piece of advice you wish you’d known earlier? Something that might help those of us still figuring this out. Drop it in the comments. Your experience could make someone else’s learning curve a little less steep.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>learning</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
