<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Precious Mae</title>
    <description>The latest articles on DEV Community by Precious Mae (@prcsmae).</description>
    <link>https://dev.to/prcsmae</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%2F1280762%2F9a2c50b4-13e6-43e2-84f2-824158689e10.jpg</url>
      <title>DEV Community: Precious Mae</title>
      <link>https://dev.to/prcsmae</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/prcsmae"/>
    <language>en</language>
    <item>
      <title>Back to Basics: A Developer’s Guide to Authentication</title>
      <dc:creator>Precious Mae</dc:creator>
      <pubDate>Sun, 01 Mar 2026 12:50:31 +0000</pubDate>
      <link>https://dev.to/prcsmae/back-to-basics-a-developers-guide-to-authentication-5cce</link>
      <guid>https://dev.to/prcsmae/back-to-basics-a-developers-guide-to-authentication-5cce</guid>
      <description>&lt;p&gt;Authentication (AuthN) is a crucial aspect of building systems and creating web applications, and could make or break your customer's trust. Microsoft Security (2026) defines authentication as the process that companies use to confirm that only the right people, services, and apps with the right permissions can get organizational resources. It proves &lt;em&gt;who&lt;/em&gt; the user is. This differs from authorization which controls what the verified user is allowed to do or &lt;em&gt;what&lt;/em&gt; they can access. These two security processes are interconnected, with authentication always happening first followed by authorization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why should we care?&lt;/li&gt;
&lt;li&gt;Why bother with the basics?&lt;/li&gt;
&lt;li&gt;How does the web work? (And why you, as a developer, need to know)&lt;/li&gt;
&lt;li&gt;How do we authenticate?&lt;/li&gt;
&lt;li&gt;Multi-factor authentication: Layering your defenses&lt;/li&gt;
&lt;li&gt;Common Authentication Services: From Factors to Platforms&lt;/li&gt;
&lt;li&gt;So... which one should you pick?&lt;/li&gt;
&lt;li&gt;Further Reading &amp;amp; References&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why should we care?
&lt;/h3&gt;

&lt;p&gt;In the digital age, &lt;strong&gt;data is power&lt;/strong&gt;. Every company and their mother is trying to get access to your data because that is how they make you come back. Your every action online is logged into a system that builds your online identity or profile from a company's point of view. For example, your YouTube algorithm has been collecting data to make sure that the videos it recommends make you stay on the app longer, which in turn allows them to show you more ads which means more revenue for them. This kind of practice is normal and is actually the industry standard (though digital privacy has been a rising concern due to some shady practices). &lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is where I'd normally go on a long tangent about online privacy, staying safe online, the attention economy, and late-stage capitalism in general. But I'm talking to developers—the people building the systems (hi, im part of that too :3). So I'll spare you. For now.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When you build a system, you want your users to stay and come back for more. Saving their information not only makes the use of your app easier for them, but also allows you to customize and improve their experience while using it.&lt;/p&gt;

&lt;p&gt;However, this means that your customer's data is not only valuable to you, it's also valuable to bad actors. A bad actor's first priority and step is always to gain unauthorized access to your systems. And if they get your customer's data, that's company image and customer trust gone. And there is no "company" without users. More than that, you are also required to comply with different governmental laws and standards (like the Data Privacy Act of 2012 of the Philippines).&lt;/p&gt;

&lt;p&gt;We've established why we, as developers, should care about protecting user's privacy. Here's the part where you'll usually find articles just listing out different authentication services and methods, but this is my article and I say I yap some more.&lt;/p&gt;

&lt;p&gt;Because data travels across networks we don't control, we need to understand that journey before deciding how to protect it. Data has three states: &lt;strong&gt;at rest, in motion, and in use&lt;/strong&gt;. In this article, we’ll be going over &lt;strong&gt;at rest&lt;/strong&gt; and &lt;strong&gt;in motion&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But before we go over all this complicated talk, I'd like to take a minute to discuss why we should learn this.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why bother with the basics?
&lt;/h3&gt;

&lt;p&gt;A large portion of this article unmasks the processes and methods used in authentication services. You might be thinking: "If I'm just going to use Clerk or Auth0 and delegate my auth to someone else, why do I need to understand TLS or hashing?" Fair question. But here's the thing: authentication services handle the complex parts for you—and while I also believe that they're one of technology's gifts to developers—until you understand what those complex parts are, you're just trusting that they're doing things right. And I don't know about you, but I can't trust anyone that much. &lt;/p&gt;

&lt;p&gt;When you understand that TLS protects data in transit and hashing secures it at rest, you can evaluate whether a service is doing those things right. You'll know why they ask for certain configurations, what those "enterprise features" actually protect against, and—most importantly—you'll be able to spot when something feels off. The fundamentals turn you from a copy-paste developer (or a vibe coder) into someone who actually knows what their auth service is doing with their users' data. And that knowledge sticks with you even when you switch services or providers.&lt;/p&gt;

&lt;p&gt;With all those covered: here, &lt;strong&gt;we define how the web works&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does the web work? (And why you, as a developer, need to know) &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Okay, so we've established why data matters: its valuable and vulnerable. We've also established why you need to understand the fundamentals: blind trust is how you get exploited—both in life and in security. We have to learn how to protect it now. And to do that effectively, we have to put ourselves in its shoes. We have to follow data on its journey.&lt;/p&gt;

&lt;p&gt;Imagine your user's login credentials—their email and password—like a physical letter. When they click that "Sign In" button on your app, that letter doesn't just magically teleport to your server. It has to travel across the internet—through a vast network of cables, routers, and servers across the world—that your user doesn't control (and also sometimes gets bitten by sharks ifykyk). This is the data &lt;strong&gt;in motion&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Your job, as the developer building the system, is to put that letter in a locked, armored briefcase, protecting it before it starts its journey. That's where understanding the basics of web communication comes in.&lt;/p&gt;

&lt;p&gt;I won't dive into every detail (like the exact role of DNS), but it's crucial to understand the two main protocols that carry our data over the web: &lt;strong&gt;HTTP&lt;/strong&gt; and &lt;strong&gt;HTTPS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTTP&lt;/strong&gt; (HyperText Transfer Protocol) defines a set of rules used for communicating with web servers for the transmission of webpage data (HTML, images, videos, etc.). When you access a website, your web browser makes a request to a web server for assets and then downloads the responses.&lt;/p&gt;

&lt;p&gt;A lot more happens behind the scenes, but we won't be concerned with that. The important thing to note here is that HTTP traffic is sent in &lt;strong&gt;cleartext&lt;/strong&gt;, meaning anyone with network access can intercept and read requests and responses using packet-capturing tools (like Wireshark). It's like sending over the letter in a clear transparent envelope.&lt;/p&gt;

&lt;p&gt;The need for secure web communication led to the creation of TLS that is layered below HTTP, which results in HTTPS or HyperText Transfer Protocol Secure. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TLS&lt;/strong&gt; (Transport Layer Security) is a cryptographic protocol operating at the transport layer of the OSI model, enabling secure communicating over insecure networks by providing confidentiality and integrity. Traffic is encrypted so it is impossible to determine whether the application data is HTTP or another protocol without encryption keys. Think of it as the "armored briefcase" I mentioned earlier.&lt;/p&gt;

&lt;p&gt;By using HTTPS, you've ensured the user's credentials arrived safely at your server's front door. But your journey isn't over. Now, you have to deal with the &lt;strong&gt;data at rest&lt;/strong&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Protecting your data at rest
&lt;/h3&gt;

&lt;p&gt;We've locked the briefcase with HTTPS, and your user's credentials have arrived safely. Now they're sitting in your database, or is &lt;strong&gt;at rest&lt;/strong&gt;. How do you store them safely so that even if an attacker breaks in, they can't steal your users' passwords?&lt;/p&gt;

&lt;p&gt;This is where we introduce cryptography and its two core concepts: &lt;strong&gt;encryption&lt;/strong&gt; and &lt;strong&gt;hashing&lt;/strong&gt;. They're often confused and used interchangeably, but they serve different purposes.&lt;/p&gt;

&lt;h4&gt;
  
  
  Encryption – Two‑Way, with Keys
&lt;/h4&gt;

&lt;p&gt;Encryption transforms data so that only someone with the correct &lt;strong&gt;key&lt;/strong&gt; can read it. It's reversible (i.e. two way). HTTPS uses encryption to protect &lt;strong&gt;data in motion&lt;/strong&gt;—your password is &lt;em&gt;encrypted&lt;/em&gt; on the user's device, then &lt;em&gt;decrypted&lt;/em&gt; by your server. But after decryption, your server has the plaintext password. Now, if you store it like that, you're one data breach away from disaster (RockYou.com ring a bell to you?). &lt;/p&gt;

&lt;p&gt;Worse, if you stored passwords using encryption, a compromise of the cryptographic key would be catastrophic—an attacker could decrypt every stored password all at once.&lt;/p&gt;

&lt;h4&gt;
  
  
  Hashing – One‑Way, No Keys
&lt;/h4&gt;

&lt;p&gt;If encryption is a two-way street, hashing is a one‑way street (or, irreversible). In hashing, a hash function takes an input (like a password) and produces a fixed‑length string called a &lt;strong&gt;hash&lt;/strong&gt;. When a user signs up, you hash their password and store only the hash. When they log in, you hash the entered password and then compare it to the stored hash. If they match, access is granted. Hashing is what is used to protect your &lt;strong&gt;data at rest&lt;/strong&gt; because passwords need to be &lt;em&gt;verified&lt;/em&gt; and not &lt;em&gt;recovered&lt;/em&gt;. It ensures that the original password cannot be &lt;em&gt;retrieved&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;But just hashing isn't enough. Using the same hashing function for two identical inputs also means two identical hashses. Attackers then can use precomputed tables (or rainbow tables) to reverse common passwords. This is where &lt;strong&gt;salting&lt;/strong&gt; comes in. A unique random value (salt) is added to each password before hashing. Salting ensures that even if two users have the same password, their resulting hashes are different.&lt;/p&gt;

&lt;p&gt;Modern algorithms like &lt;strong&gt;bcrypt&lt;/strong&gt;, &lt;strong&gt;Argon2&lt;/strong&gt;, or &lt;strong&gt;PBKDF2&lt;/strong&gt; are deliberately slow and handle salting automatically. They're the standard for password storage.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why this matters&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If an attacker steals your database, they can only get the salted hashes—not the passwords themselves. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Protecting stored passwords keeps attackers from reading them—but it doesn't explain how we confirm identity during login. How do we verify that the person presenting credentials is truly who they claim to be? This brings us to the core of our topic: authentication.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do we authenticate?
&lt;/h3&gt;

&lt;p&gt;Modern authentication usually delegates the authentication process to a trusted, &lt;em&gt;separate&lt;/em&gt; identity system, as opposed to traditional authentication where each system verifies identities itself. But regardless of who's doing the verifying, all authentication methods essentially fall into one (or more) of three categories, called authentication factors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Something you &lt;strong&gt;know&lt;/strong&gt; (knowledge-based)&lt;/li&gt;
&lt;li&gt;Something you &lt;strong&gt;have&lt;/strong&gt; (possession-based)&lt;/li&gt;
&lt;li&gt;Something you &lt;strong&gt;are&lt;/strong&gt; (inherence-based)
### Something you know
#### Password-based authentication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the most common form of authentication. You prove your identity by demonstrating knowledge of a secret—your password. However, as bad actors have gotten better at stealing passwords, more authentication methods have been developed and are in use today. &lt;/p&gt;

&lt;p&gt;To combat this problem, many apps and services have decided to require people to create passwords that use a complex combination of numbers, letters, and symbols, to reduce the risk that a bad actor can brute-force its way with a wordlist like rockyou. But this also creates a usability problem. It's difficult for people to come up with and memorize unique passwords for each of their accounts, and knowing that almost every service online requires you to make an account now, this will easily become unmanageable without a password manager.&lt;/p&gt;

&lt;p&gt;Password-based authentication is also similar to PIN-based authentication or Personal Identification Number. Instead of a complex string of different characters though, its a numerical secret often used as a simpler, device-specific knowledge factor, sometimes in combination with something you have (like an ATM card).&lt;/p&gt;

&lt;h3&gt;
  
  
  Something you have
&lt;/h3&gt;

&lt;p&gt;This factor requires users to prove they possess a specific physical item or device. Meaning, even if an attacker knows your password, they can't log in without an access  to your "something".&lt;/p&gt;

&lt;h4&gt;
  
  
  Token-based authentication
&lt;/h4&gt;

&lt;p&gt;This typically refers to time-based one-time PINs (TOTP), where the user's device and the authentication system generate the same unique number that changes every 30 seconds. If the numbers match, the system verifies that the user physically has the device, without anything being transmitted over the network.&lt;/p&gt;

&lt;h4&gt;
  
  
  One-time passwords (OTPs)
&lt;/h4&gt;

&lt;p&gt;OTPs are codes generated for a single sign-in event that will expire shortly after they are issued. They can be delivered in multiple ways, such as via SMS, email, or displayed on a hardware token. They are convenient, but its security depends upon the delivery method. SMS can be intercepted through SIM swapping, while email OTPs depend on the security of the user's email account.&lt;/p&gt;

&lt;h4&gt;
  
  
  Push notifications
&lt;/h4&gt;

&lt;p&gt;When someone tries to sign in, they receive a message on their trusted device asking them to approve or deny the request. However, because users sometimes accidentally approve notifications they weren't expecting, some services combine this with an OTP  and the system generates a unique number that the user must enter, making the authentication more phishing-resistant.&lt;/p&gt;

&lt;h3&gt;
  
  
  Something you are
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Biometric authentication
&lt;/h4&gt;

&lt;p&gt;These have become increasingly common in everyday devices like your phone. Biometric data is typically encoded, encrypted, and saved directly on the device itself, not on a remote server. This means the biometric is linked to a specific device—attackers can't use your fingerprint to access your accounts without also having physical possession of your phone or computer.&lt;/p&gt;

&lt;p&gt;This approach solves many usability problems with passwords. Users don't have to memorize anything, and the authentication process is nearly instantaneous. From a security perspective, biological features are difficult for bad actors to steal or replicate compared to passwords that can be guessed, phished, or leaked in data breaches.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-factor authentication: Layering your defenses &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;You've probably noticed that each authentication factor has its own strengths and weaknesses. Passwords can be stolen. Phones can be lost. Biometrics can't be changed if compromised. So how do we build truly robust security?&lt;/p&gt;

&lt;p&gt;Here comes Multi-factor authentication (MFA). MFA requires users to present two or more authentication factors from different categories before granting access. This layered approach means that even if one factor is compromised—say, an attacker steals a password—they still can't get in without having the others. It's why almost every account you have on a service makes you add MFA.&lt;/p&gt;

&lt;p&gt;When you combine something the user knows (password) with something they have (phone) or something they are (fingerprint), you create a barrier that's exponentially harder for attackers to bypass.&lt;/p&gt;

&lt;h3&gt;
  
  
  All together now
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data in motion&lt;/strong&gt; → Encrypt with TLS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data at rest (passwords)&lt;/strong&gt; → Hash with a salt.&lt;/li&gt;
&lt;li&gt;And a secret third thing… (not really but we're not gonna cover it)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All the authentication services we'll discuss later handle password hashing for you. They use best practices so you don't have to have a PhD in cryptography.&lt;/p&gt;




&lt;p&gt;Finally! We've covered all the fundamentals, and if you're still here, we will now be discussing what you probably opened this article for:&lt;/p&gt;

&lt;h3&gt;
  
  
  Common Authentication Services: From Factors to Platforms
&lt;/h3&gt;

&lt;p&gt;Now that you understand authentication factors and MFA, here's where theory meets practice. As a developer, you could build all this yourself—password hashing, session management, MFA flows, account recovery. But should you?&lt;/p&gt;

&lt;p&gt;Building production-grade authentication takes 5-12+ months and costs a whole lot of money. More than that, it also requires you to learn a lot of the nitty gritty, like JWTs, session invalidation, etc. And that's just the initial build. You then get to maintain it forever (aww &amp;lt;3), pray you didn't mess up the cryptography, and hope you're handling things the same way the OWASP cheatsheet says you should.&lt;/p&gt;

&lt;p&gt;For most teams and projects, using a managed authentication service makes far more sense. These platforms handle the complex, security-critical parts of authentication so you can focus on your actual product. More often that not, these platforms also have more experience and knowledge in building these, so it might be more secure than you just building your own. The right choice depends on your stack, scale, budget, and feature needs.&lt;/p&gt;

&lt;p&gt;I know I’m saying too much, but before we jump into the comparisons, you’ll see some concepts that is reflected in almost every service I will mention below. Let me take a quick second to explain them so choosing the best auth for your use case is easier.&lt;/p&gt;

&lt;h4&gt;
  
  
  OAuth and OpenID connect
&lt;/h4&gt;

&lt;p&gt;When logging in or signing in to apps today, you probably see the button somewhere that says “Login with Google” or “Login with GitHub”. That is OAuth 2.0 and OpenID Connect. These two services are industry standards that have become commonplace and define how authentication and authorization happen across different services. Every platform I’ll be mentioning implement these under the hood, and are essentially managed OAuth/OIDC providers that save you time from implementing the protocols yourself.&lt;/p&gt;

&lt;h4&gt;
  
  
  Passkeys, passkeys, passkeys.
&lt;/h4&gt;

&lt;p&gt;If you’ve been reading this whole article without skipping through (I doubt), you’ll probably remember the &lt;strong&gt;something you are&lt;/strong&gt; factor I mentioned earlier. Passkeys, or WebAuthn, are its modern evolution. They're phishing-resistant, device-bound, and easier for users than passwords. Your phone's face unlock or fingerprint sensor becomes the authentication method. If you're starting a project in 2026, you should probably care about passkey support.&lt;/p&gt;

&lt;h4&gt;
  
  
  Have you heard about vendor lock-in?
&lt;/h4&gt;

&lt;p&gt;Authentication is sticky. And just like slime, once it's in your hair (or your system), getting it out is a painful, time-consuming mess. Once users create accounts in your system, migrating them elsewhere is painful—you're either forcing password resets on everyone or building custom export scripts. Some services make this easier (like open-source options) but others make it impossible. When choosing your auth, you have to take into account: “If this platform stops working for me, can I take my users and leave?”&lt;/p&gt;

&lt;p&gt;That's it. Now here are some of the authentication services you can look at:&lt;/p&gt;

&lt;h4&gt;
  
  
  Clerk
&lt;/h4&gt;

&lt;p&gt;If you're just starting off web development and/or building with React, Next.js, or Remix, Clerk is your best choice.&lt;/p&gt;

&lt;p&gt;Setup is stupidly simple, and I mean like 15 minutes from &lt;code&gt;pnpm install&lt;/code&gt; to having a working sign-in form. Clerk gives you pre-built components like &lt;code&gt;&amp;lt;SignIn /&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;UserProfile /&amp;gt;&lt;/code&gt; that you can add to your code and will work with little to no setup. They handle email/password, social logins, password reset flows, error states—everything you'd spend weeks building yourself.&lt;/p&gt;

&lt;p&gt;Clerk also covers everything we talked about when it comes to authentication factors. Passwords (something you know), MFA via authenticator apps and SMS (something you have), and passkeys/WebAuthn (something you are/have) all work out of the box. Session management uses 60-second tokens with automatic background refresh, which means users stay logged in without you having to think about it.&lt;/p&gt;

&lt;p&gt;When it comes to pricing, Clerk also offers a free tier: 50,000 monthly active users (MAU) are now free in every application, which is more than enough for most startups. Paid plans on the other hand start at around $20/month.&lt;/p&gt;

&lt;p&gt;There is a catch though, it's not open source. So if you need or want to run everything on your own infrastructure, Clerk is fully managed and has no self-hosting option. &lt;/p&gt;

&lt;h4&gt;
  
  
  Auth0
&lt;/h4&gt;

&lt;p&gt;Auth0 is the veteran. It's been around since forever, it's feature-complete, and it's what most companies reach for when they need to check every compliance box. It offers almost, if not, everything—passwords, social login, MFA (SMS, TOTP, push, WebAuthn), passwordless magic links, enterprise SSO via SAML/OIDC. They also have an &lt;strong&gt;Actions&lt;/strong&gt; framework that lets you inject custom code at any point in the authentication flow—pre-login, post-registration, token generation.&lt;/p&gt;

&lt;p&gt;But for a one-person team or a simple project, Auth0 may not be best for you since it excels in enterprise features. By that I mean SAML connections, Active Directory integration, comprehensive built logs, etc. which might not be useful for a quick and simple To Do application.&lt;/p&gt;

&lt;p&gt;More than that, Auth0 is also very complex, and might be overwhelming. Basic setup takes 4-8 hours, and complex implementations can take you 1-2 weeks. It’s dashboard has so many tabs and options that even experienced developers get lost.&lt;/p&gt;

&lt;p&gt;In terms of pricing, free tier covers 25,000 monthly active users. Paid plans on the other hand range from $35 to 150/month for 500 users, and if you’re a startup just starting to get some traction their paid plans might be too much. Also some user reviews complain about pricing complexity and unpredictable scaling costs. So before choosing Auth0 you should probably look more into that.&lt;/p&gt;

&lt;h4&gt;
  
  
  Firebase Authentication
&lt;/h4&gt;

&lt;p&gt;Firebase Auth is Google's baby, and if you're already in the Google Cloud ecosystem, it's the path of least resistance. It’s particularly strong and used for mobile apps. iOS and Android developers get native authentication flows that feel platform-appropriate.&lt;/p&gt;

&lt;p&gt;Setup is straightforward and simple—email/password, social logins, phone auth (SMS), and anonymous authentication all work with minimal configuration. The Firebase SDKs are well-documented and widely used. I’ve personally used this and I would argue its as simple as Clerk’s setup.&lt;/p&gt;

&lt;p&gt;Google also offers a generous free tier with 50,000 monthly active users at no cost. Most Firebase products have no-cost usage quotas that reset daily or monthly. If you’re just building a side project, this can be a good contender.&lt;/p&gt;

&lt;p&gt;However, if you’re a startup starting to scale, Firebase Auth starts getting more restrictive. Organization and multi-tenancy support is largely manual. MFA exists but requires upgrading to Identity Platform. SAML and OIDC also require upgrades.&lt;/p&gt;

&lt;p&gt;Additionally, migrating away from Firebase later is painful. Complex queries and advanced authorization require workarounds. And because it's Google, you're subject to their API limits and rate throttling.&lt;/p&gt;

&lt;h4&gt;
  
  
  AWS Cognito
&lt;/h4&gt;

&lt;p&gt;Google has Firebase Authentication while AWS has AWS Cognito. Same as with Firebase Auth, if your infrastructure is already on the AWS ecosystem, Cognito makes compliance and architecture simple. User pools manage directories, identity pools provide temporary AWS credentials for accessing other services, and it all stays inside your AWS account.&lt;/p&gt;

&lt;p&gt;Cognito takes some time for setup though. Around 1-2 days for basic implementation, and 4-7 days for production-ready. And if you’re unfamiliar with the AWS ecosystem, this might even take longer.&lt;/p&gt;

&lt;p&gt;AWS structure its pricing into tiers: Essentials and Plus. Essentials offers basic user registration, authentication, and management capabilities, along with Managed Login and passwordless login options. Plus, on the other hand, is geared toward customers with elevated security needs for their applications and offers threat protection capabilities.&lt;/p&gt;

&lt;p&gt;Where AWS makes it money though come from add-ons. SMS messages go through SNS and emails go through SES, all billed separately. And if you enable Advanced Security Features on a Lite tier pool, your bill explodes.&lt;/p&gt;

&lt;h4&gt;
  
  
  MojoAuth
&lt;/h4&gt;

&lt;p&gt;If you’re modern and want to go passwordless, MojoAuth could be your answer. They have magic links, OTPs, WhatsApp verification, and passkeys.&lt;/p&gt;

&lt;p&gt;You might notice I specifically mentioned &lt;em&gt;WhatsApp&lt;/em&gt; verification and not SMS. Instead of trying to figure out SMS rates, MojoAuth built WhatsApp login natively. SMS verification costs $0.01–0.05 per message; WhatsApp Business API costs $0.003–0.009, and in countries where WhatsApp is the go-to, it makes more sense.&lt;/p&gt;

&lt;p&gt;For developers, it’s lightweight. APIs, a drop-in hosted login page, clean SDKs, and you can probably integrate in under 15 minutes.&lt;/p&gt;

&lt;p&gt;In pricing, free tier covers 25,000 monthly active users. Business Pro runs $50/month with unlimited users, passkeys, custom domains, and enhanced attack protection. &lt;/p&gt;

&lt;p&gt;MojoAuth’s biggest selling feature is being passwordless. Meaning, if you’re traditional and want passwordless authentication for some reason, you better stay far far away from it. And since it’s new, the ecosystem is smaller.&lt;/p&gt;

&lt;h4&gt;
  
  
  Supabase Auth
&lt;/h4&gt;

&lt;p&gt;If you want open source, Supabase is a Firebase alternative that could be your choice. Open source also means you can self-host the entire stack and avoid vendor lock-in. Auth comes built-in, which makes it easier if you’re already using Supabase for database and storage. Open source also&lt;/p&gt;

&lt;p&gt;The auth layer supports email/password, social logins, magic links, and TOTP MFA out of the box. It's PostgreSQL-backed, which means user data lives in a database you can actually query and join with your application data. &lt;/p&gt;

&lt;p&gt;Free tier gives you 50,000 monthly active users at no cost, plus 500MB database and 1GB storage. On the other hand, the Pro plan starts at $25/month and removes project pausing and bumps limits.&lt;/p&gt;

&lt;p&gt;Supabase Auth was the first Auth service I ever used when I started web development. It was for a project built on Next.js and Supabase, and I wanted to implement some features that—in theory—should have been straightforward. Unfortunately as a beginner, I had such a hard time that I eventually moved onto Better Auth. Part of the issues I had could definitely be attributed to my inexperience, but also... the OAuth redirect flow had me screaming at my monitor.&lt;/p&gt;

&lt;p&gt;Supabase Auth works well for many use cases, just maybe not mine at that time. But if you're doing anything beyond basic auth, be prepared to spend some quality time with their docs and maybe a few dates or debugging sessions.&lt;/p&gt;

&lt;h4&gt;
  
  
  Auth.js (Formerly NextAuth.js)
&lt;/h4&gt;

&lt;p&gt;If you’ve built a Next.js app in the last few years, you’ve probably encountered Auth.js.&lt;/p&gt;

&lt;p&gt;It’s open source, you own your data, no vendor lock-in. User data lives in your database and not on some third-party server. Auth.js supports 80+ OAuth providers out of the box, email magic links, credentials authentication, and has database adapters for Prisma, Drizzle, Supabase, and basically everything else. It's runtime-agnostic too, works with Docker, Node.js, serverless, etc. &lt;/p&gt;

&lt;p&gt;But breaking news: &lt;strong&gt;Auth.js is now being maintained and overseen by the Better Auth team&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  BetterAuth
&lt;/h4&gt;

&lt;p&gt;It’s new, but promising (and I also have some fond memories with it). It's framework-agnostic, TypeScript-first, and positions itself as "the most comprehensive authentication library for TypeScript".&lt;/p&gt;

&lt;p&gt;My frustration when working with Supabase Auth that I mentioned earlier—building the same auth primitives over and over, hitting limitations, wishing for other ways—is literally why Better Auth exists. The creator felt that auth in the TypeScript ecosystem was "a half-solved problem" where other libraries required tons of additional code for anything beyond basic auth. Rather than pushing third-party services, the goal was to build something the community could own.&lt;/p&gt;

&lt;p&gt;And as mentioned earlier, Auth.js is now under BetterAuth’s team. The two biggest open-source authentication libraries in the TypeScript ecosystem are now working together rather than fragmenting. If you're using Auth.js today, you can continue doing so without disruption. The Better Auth team will keep addressing security patches and urgent issues as they come up . But—and this is important—they strongly recommend new projects start with Better Auth instead, unless you have very specific needs like stateless session management without a database.&lt;/p&gt;

&lt;p&gt;Better Auth is free. And I mean, &lt;em&gt;completely&lt;/em&gt; free. MIT licensed, no usage limits, no user caps, no features locked behind paid tiers. You can self-host everything on your own infrastructure with complete control over your user data and no recurring subscription fees. The project is backed by Y Combinator, but the core framework remains open source—they're building optional infrastructure services for scaling separately.&lt;/p&gt;

&lt;p&gt;Better Auth's feature set solves exactly the problems I ran into with Supabase Auth. Multiple authentication methods work out of the box—email/password, social login with 50+ providers, magic links, passkeys. Two-factor authentication (TOTP, OTP) and organization and team management with role-based access control is built in. There's even built-in rate limiting and security features so you don't have to invent them from scratch. And it's genuinely framework-agnostic—React, Vue, Svelte, Next.js, Nuxt, Astro, Solid, Remix, Hono, vanilla JS—basically whatever stack you're reaching for, it works.&lt;/p&gt;

&lt;p&gt;Better Auth also has a comprehensive plugin ecosystem meaning you don’t have to rebuild everything. Official plugins handle username authentication, email OTP, passkeys, admin controls, multi-tenancy, payment, more.&lt;/p&gt;

&lt;p&gt;A quick full stop though: there’s a trade-off. Better Auth is newer so the ecosystem and community are smaller than Auth0 or even Auth.js historically. I remember facing issues with it too, since my very specific and odd edge cases don’t have exact answers on Stack Overflow.&lt;/p&gt;

&lt;p&gt;If you're starting a new project today and you want to own your auth without paying per user or fighting limitations, Better Auth is probably where you should look first. The end goal—the one Auth.js had, the one Better Auth was built for—remains unchanged: you should own your auth.&lt;/p&gt;




&lt;p&gt;To make it easier for you, here’s a quick summary table of the services I went over:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;th&gt;Stack Fit&lt;/th&gt;
&lt;th&gt;Setup Time&lt;/th&gt;
&lt;th&gt;Key Strengths&lt;/th&gt;
&lt;th&gt;Pricing (Free Tier)&lt;/th&gt;
&lt;th&gt;Paid Starts At&lt;/th&gt;
&lt;th&gt;Vendor Lock-In Risk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Clerk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Beginners, React/Next.js apps&lt;/td&gt;
&lt;td&gt;React, Next.js, Remix&lt;/td&gt;
&lt;td&gt;15 min&lt;/td&gt;
&lt;td&gt;Pre-built components, 60-sec token refresh, passkeys&lt;/td&gt;
&lt;td&gt;50,000 MAU&lt;/td&gt;
&lt;td&gt;$20/month&lt;/td&gt;
&lt;td&gt;High (fully managed, no self-host)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auth0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Enterprise, compliance-heavy apps&lt;/td&gt;
&lt;td&gt;Universal&lt;/td&gt;
&lt;td&gt;4-8 hrs basic, 1-2 weeks complex&lt;/td&gt;
&lt;td&gt;Feature-complete, Actions framework, enterprise SSO&lt;/td&gt;
&lt;td&gt;25,000 MAU&lt;/td&gt;
&lt;td&gt;$35/month (500 users)&lt;/td&gt;
&lt;td&gt;Medium (standard OIDC, but migration pain)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Firebase Auth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mobile apps, Google Cloud ecosystem&lt;/td&gt;
&lt;td&gt;iOS, Android, Web&lt;/td&gt;
&lt;td&gt;~15 min&lt;/td&gt;
&lt;td&gt;Native mobile flows, well-documented, generous free tier&lt;/td&gt;
&lt;td&gt;50,000 MAU&lt;/td&gt;
&lt;td&gt;Pay-as-you-go after free tier&lt;/td&gt;
&lt;td&gt;High (Google ecosystem lock-in)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AWS Cognito&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AWS-native infrastructure&lt;/td&gt;
&lt;td&gt;AWS services&lt;/td&gt;
&lt;td&gt;1-2 days basic, 4-7 days prod&lt;/td&gt;
&lt;td&gt;Tight AWS integration, identity pools for AWS credentials&lt;/td&gt;
&lt;td&gt;10,000 MAU (Essentials tier)&lt;/td&gt;
&lt;td&gt;Tiered (Essentials/Plus) + separate SMS/email costs&lt;/td&gt;
&lt;td&gt;High (AWS ecosystem)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MojoAuth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Passwordless-first apps, WhatsApp-heavy regions&lt;/td&gt;
&lt;td&gt;Universal&lt;/td&gt;
&lt;td&gt;&amp;lt;15 min&lt;/td&gt;
&lt;td&gt;WhatsApp verification, passwordless focus, competitive SMS alternative&lt;/td&gt;
&lt;td&gt;25,000 MAU&lt;/td&gt;
&lt;td&gt;$50/month (unlimited users)&lt;/td&gt;
&lt;td&gt;Medium (newer, smaller ecosystem)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Supabase Auth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Open-source believers, PostgreSQL lovers&lt;/td&gt;
&lt;td&gt;JS/TS, any framework&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;td&gt;PostgreSQL-backed, self-hostable, queryable user data&lt;/td&gt;
&lt;td&gt;50,000 MAU&lt;/td&gt;
&lt;td&gt;$25/month&lt;/td&gt;
&lt;td&gt;Low (open source, self-host option)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auth.js&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Next.js apps, data ownership purists&lt;/td&gt;
&lt;td&gt;Next.js primarily, others supported&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;td&gt;80+ OAuth providers, database adapters, no vendor lock-in&lt;/td&gt;
&lt;td&gt;Free (open source)&lt;/td&gt;
&lt;td&gt;Free (self-host)&lt;/td&gt;
&lt;td&gt;None (you own the data)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Better Auth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;TypeScript lovers, teams wanting self-hosted control&lt;/td&gt;
&lt;td&gt;Any framework (TypeScript-first)&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;td&gt;Comprehensive features (orgs, RBAC, rate limiting), plugin ecosystem, YC-backed&lt;/td&gt;
&lt;td&gt;Free (MIT licensed)&lt;/td&gt;
&lt;td&gt;Free (self-host)&lt;/td&gt;
&lt;td&gt;None (open source, optional infra services)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  So... which one should you pick?
&lt;/h2&gt;

&lt;p&gt;If you've made it this far, you've earned the right to be overwhelmed. There are a lot of options, and I just threw eight of them at you (sorry hehe). But also, not sorry—because the right answer depends on &lt;em&gt;you&lt;/em&gt;, and you deserved to see the full landscape before deciding.&lt;/p&gt;

&lt;p&gt;Here's what I hope you take away from all my yapping:&lt;/p&gt;

&lt;p&gt;Web development is &lt;strong&gt;a lot.&lt;/strong&gt; And auth is just one aspect you have to mull over. But, this also doesn’t mean that it’s something you can overlook. It isn't something to half-ass. Your users entrust their data to you, and it’s up to you to make sure that you’re doing everything in your power to make sure that no bad actor can have access to that. It's the door to your entire application, and if that door is flimsy, nothing else matters.  But &lt;em&gt;building&lt;/em&gt; that door from scratch? Nope. It'll take longer than you think, cost more than you expect, distract you from whatever you actually wanted to build, and might result to a very flimsy door.&lt;/p&gt;

&lt;p&gt;The services above exist so you can focus on your actual product. Use them.&lt;/p&gt;

&lt;p&gt;If you're a solo dev building your first serious app, I say start with Clerk or Firebase. They're forgiving, well-documented, and let you see progress in minutes, not days.&lt;/p&gt;

&lt;p&gt;If you're building inside someone else's ecosystem (like AWS or Google Cloud), use their auth. Fighting the platform is exhausting, and also &lt;em&gt;why&lt;/em&gt;. Surrender to Cognito or Firebase Auth and move on.&lt;/p&gt;

&lt;p&gt;If you're paranoid about vendor lock-in (hi, fellow paranoids), go open source. &lt;strong&gt;Supabase Auth&lt;/strong&gt; if you want batteries included, &lt;strong&gt;Better Auth&lt;/strong&gt; if you want TypeScript purity and plugin flexibility. You'll own your data, sleep better at night, and never get a surprise bill because one user authenticated too many times.&lt;/p&gt;

&lt;p&gt;If you're building for enterprise and compliance is the whole conversation, &lt;strong&gt;Auth0&lt;/strong&gt; will check every box. Just budget extra time for setup and extra money for the inevitable overages.&lt;/p&gt;

&lt;p&gt;And if you're going passwordless in a WhatsApp-heavy market, &lt;strong&gt;MojoAuth&lt;/strong&gt; is doing something genuinely interesting. Worth a look.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The throughline in all of this?&lt;/strong&gt; Understand your factors, protect data in motion &lt;em&gt;and&lt;/em&gt; at rest, and never build auth yourself unless you're prepared to maintain it forever (if you have no commitment issues).&lt;/p&gt;

&lt;p&gt;(It’s also good to note that there’s also the &lt;strong&gt;data in use&lt;/strong&gt;, but that’s an article for another day)&lt;/p&gt;

&lt;p&gt;Okay, that’s it.  Go build something worth authenticating into. &lt;/p&gt;




&lt;h2&gt;
  
  
  Further Reading &amp;amp; References
&lt;/h2&gt;

&lt;p&gt;If you want to dive deeper or verify anything I've said, here are the sources and recent discussions that informed this article.&lt;/p&gt;

&lt;p&gt;Microsoft. (2026). &lt;em&gt;What is authentication?&lt;/em&gt; Microsoft Security. &lt;a href="https://www.microsoft.com/en-us/security/business/security-101/what-is-authentication" rel="noopener noreferrer"&gt;https://www.microsoft.com/en-us/security/business/security-101/what-is-authentication&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Google Firebase. (2026, February). &lt;em&gt;Manage users in Firebase Authentication&lt;/em&gt;. Firebase Documentation. &lt;a href="https://firebase.google.com/docs/auth" rel="noopener noreferrer"&gt;https://firebase.google.com/docs/auth&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clerk. (2026, February 5). &lt;em&gt;New plans, more value&lt;/em&gt; [Product announcement]. Clerk Changelog. &lt;a href="https://clerk.com/changelog/2026-02-05-new-plans" rel="noopener noreferrer"&gt;https://clerk.com/changelog/2026-02-05-new-plans&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS. (2026, February 8). &lt;em&gt;Amazon Cognito pricing&lt;/em&gt;. AWS Pricing. &lt;a href="https://aws.amazon.com/cognito/pricing/" rel="noopener noreferrer"&gt;https://aws.amazon.com/cognito/pricing/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Supabase. (2026, February 12). &lt;em&gt;OAuth 2.1 flows&lt;/em&gt;. Supabase Auth Documentation. &lt;a href="https://supabase.com/docs/guides/auth/oauth-2-1" rel="noopener noreferrer"&gt;https://supabase.com/docs/guides/auth/oauth-2-1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MojoAuth. (2026, January). &lt;em&gt;MojoAuth API documentation&lt;/em&gt;. PublicAPIs.io. &lt;a href="https://publicapis.io/mojoauth-api" rel="noopener noreferrer"&gt;https://publicapis.io/mojoauth-api&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Better Auth. (2026, January 30). &lt;em&gt;Release v1.5.0-beta.11&lt;/em&gt; [GitHub release]. GitHub. &lt;a href="https://github.com/better-auth/better-auth/releases" rel="noopener noreferrer"&gt;https://github.com/better-auth/better-auth/releases&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Software Advice. (2026, February 12). &lt;em&gt;Auth0 vs Google Cloud: 2026 comparison&lt;/em&gt; [User reviews]. &lt;a href="https://www.softwareadvice.com/identity-management/auth0-vs-google-cloud-profile/" rel="noopener noreferrer"&gt;https://www.softwareadvice.com/identity-management/auth0-vs-google-cloud-profile/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Software Advice. (2025–2026). &lt;em&gt;Microsoft Authenticator user reviews&lt;/em&gt; [399 verified reviews]. &lt;a href="https://www.softwareadvice.com/security/microsoft-authenticator-profile/reviews/" rel="noopener noreferrer"&gt;https://www.softwareadvice.com/security/microsoft-authenticator-profile/reviews/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;BitTitan. (2026, January 6). &lt;em&gt;Authentication methods for Microsoft 365 migrations&lt;/em&gt;. BitTitan Help Center. &lt;a href="https://help.bittitan.com/hc/en-us/articles/360044743691-Authentication-methods-for-M365-migrations" rel="noopener noreferrer"&gt;https://help.bittitan.com/hc/en-us/articles/360044743691-Authentication-methods-for-M365-migrations&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Better Auth. (2026, February). &lt;em&gt;Better Auth GitHub repository&lt;/em&gt;. GitHub. &lt;a href="https://github.com/better-auth/better-auth" rel="noopener noreferrer"&gt;https://github.com/better-auth/better-auth&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to fact-check anything in this article, start with the links above. They're the same places I looked.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>webdev</category>
      <category>auth</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Security with AWS Cognito: Building Your First User Pool</title>
      <dc:creator>Precious Mae</dc:creator>
      <pubDate>Mon, 04 Nov 2024 06:42:35 +0000</pubDate>
      <link>https://dev.to/prcsmae/security-with-aws-cognito-building-your-first-user-pool-533d</link>
      <guid>https://dev.to/prcsmae/security-with-aws-cognito-building-your-first-user-pool-533d</guid>
      <description>&lt;p&gt;One of the most important features of any application is &lt;strong&gt;user authentication&lt;/strong&gt;. It's also almost always the first feature you create when building an application. Yes, you could go about building your authentication and authorization for your web app, but building a secure authentication service is complex and time-consuming and exposes your app and your users to unnecessary risks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is where 3rd-party authentication services come in&lt;/strong&gt;. It provides secure authentication, scalability, and a positive user experience. So many services are on the market right now, but we will focus on Amazon Cognito and see what it has to offer. &lt;/p&gt;

&lt;h2&gt;
  
  
  But before all that, why choose Amazon Cognito?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://console.aws.amazon.com/cognito/home" rel="noopener noreferrer"&gt;Amazon Cognito&lt;/a&gt; is an excellent and secure way into user authentication for web and mobile applications, especially when you're already heavy in the AWS ecosystem, since it interacts well not only with API Gateway but also with IAM. Additionally, Cognito is an AWS managed service, so you do not have to worry about your infrastructure or security maintenance, and it scales automatically to handle your growing user base. In terms of pricing, on the other end, for levels of low to medium users, Cognito offers a free tier. If you are just getting started, that would probably be perfect for you. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is Amazon Cognito?
&lt;/h2&gt;

&lt;p&gt;Amazon Cognito is the identity platform for web and mobile apps. It's a user directory, an authentication server, and an authorization service for OAuth 2.0 access tokens and AWS credentials. It represents a secure, scalable, and customizable authentication service with easy integration of other AWS services. Let Cognito do the heavy lifting for authentication and authorization, freeing you up to build the important parts of your application. &lt;/p&gt;

&lt;p&gt;Amazon Cognito is composed of building blocks such as &lt;em&gt;User Pools&lt;/em&gt; and &lt;em&gt;Identity Pools&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;An &lt;strong&gt;Amazon Cognito user pool&lt;/strong&gt; is a completely managed user directory through which authentication and authorization of users to either web or mobile applications is made quite easy. It stores user information in a secured manner, manages user signup and sign-in, and resets passwords. In addition, it supports MFA and social identity provider integration, which enhances security and improves user experience. Conversely, with Cognito User Pools, one would be offloading some complexity in user management and focusing on core features of the application.&lt;/p&gt;

&lt;p&gt;On the other hand, the &lt;strong&gt;Amazon Cognito Identity Pool&lt;/strong&gt; is a service that provides easy and secured authentication and authorization into web or mobile applications. It allows for user identity management temporary AWS credentials and provides for flexible access control to AWS resources. Users can use your application without an account or log in with their social identities via Google, Facebook, Amazon, or Apple. With Cognito, you handle users efficiently and add an extra layer of security, so you can focus on the core features of your app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating your first user pool
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Note: This tutorial is intended for beginners, as such we’ll be utilizing the AWS Console instead of the CLI. Additionally, I am expecting that you already have your AWS Account ready for use.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Of course, Cognito also allows for use with other frameworks and technologies such as &lt;a href="https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-test-application-react.html" rel="noopener noreferrer"&gt;React&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-test-application-flutter.html" rel="noopener noreferrer"&gt;Flutter&lt;/a&gt;. But aside from the these, Amazon Cognito also boasts a &lt;em&gt;Hosted UI Service&lt;/em&gt;. This hosted UI service is a pre-built user interface provided by Amazon Cognito to handle user authentication and authorization tasks. We will use this feature to test out the Cognito service for the first time.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to your &lt;a href="https://console.aws.amazon.com/" rel="noopener noreferrer"&gt;AWS Console&lt;/a&gt;, and look for &lt;a href="https://console.aws.amazon.com/cognito/home" rel="noopener noreferrer"&gt;Cognito&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Click on Create User Pool.&lt;/li&gt;
&lt;/ol&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%2F1r22wuwupn2pqj0jxlm6.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%2F1r22wuwupn2pqj0jxlm6.png" alt="create user pool screenshot" width="800" height="111"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;On Step 1, ensure that for authentication providers Cognito User Pool is selected. Also, click on Username and email for the sign-in options.&lt;/li&gt;
&lt;/ol&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%2Frz6xbm04po0evb2ohtm5.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%2Frz6xbm04po0evb2ohtm5.png" alt="step 1 screenshot" width="800" height="656"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In Step 2, ensure that Cognito defaults are chosen for the password policy. For MFA, choose Optional MFA, and allow for Authenticator apps and SMS. Also enable self-service account recovery, with email only chosen.&lt;/li&gt;
&lt;/ol&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%2Fxocs0up27wys1hm8w0sb.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%2Fxocs0up27wys1hm8w0sb.png" alt="step 2 screenshot" width="800" height="581"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;For Step 3, keep everything as default.&lt;br&gt;
Enable self-registration, and allow Cognito to automatically send messages to verify and confirm. For attributes to verify, choose Send email message, and verify email address. For verifying attribute changes, ensure that Keep original attribute value active when an update is pending is checked. For required attributes, ensure that &lt;em&gt;email&lt;/em&gt; is chosen by default.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For Step 4, pick Send email with Cognito. This is appropriate since we are just testing out the features, but Amazon SES is recommended for use for enterprise-level workloads.&lt;br&gt;
For SMS messages, Create a new IAM Role, and name it &lt;code&gt;CognitoSMS&lt;/code&gt; or whatever you prefer.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&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%2Fjizq2rqimd5twaeg6rfk.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%2Fjizq2rqimd5twaeg6rfk.png" alt="sms messages screenshot" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;For Step 5, configure a pool name, you can name it &lt;code&gt;MyFirstUserPool&lt;/code&gt; or whatever you prefer. Afterwards, click on &lt;code&gt;Use Cognito Hosted UI&lt;/code&gt;. Then, configure a &lt;em&gt;Cognito domain&lt;/em&gt; that you would like to use.&lt;/li&gt;
&lt;/ol&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%2Fvlmnbysysajplbuvkdud.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%2Fvlmnbysysajplbuvkdud.png" alt="cognito domain screenshot" width="800" height="413"&gt;&lt;/a&gt;&lt;br&gt;
   For the app client, ensure that the Public client is chosen. For the client name, you can choose the same name for your pool name, or something else. Click on &lt;em&gt;Do not generate client secret&lt;/em&gt;. For your callback URL, use &lt;code&gt;https://[your domain name].auth.us-west-2.amazoncognito.com/auth-callback&lt;/code&gt; (This won't work since we do not have an application, and the information goes nowhere. We're just using this as a placeholder so Cognito allows us to create the user pool.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lastly, review your choices and click on &lt;em&gt;Create user pool&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once your User pool has been created, you can click on it and navigate to &lt;em&gt;App integration&lt;/em&gt;. Once you're there, scroll down to your &lt;em&gt;App clients&lt;/em&gt; and click on your App client. Navigate to the &lt;em&gt;Hosted UI&lt;/em&gt; segment and click on &lt;em&gt;View Hosted UI&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%2Fwz2mrcr12zcv21r7tlfa.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%2Fwz2mrcr12zcv21r7tlfa.png" alt="view hosted ui screenshot" width="800" height="278"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Populating your user pool
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Once in your Hosted UI, click Sign Up and fill out your email, username, and password.&lt;/li&gt;
&lt;/ol&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%2Fgtndvp4ew1ligwxynsoc.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%2Fgtndvp4ew1ligwxynsoc.png" alt="hosted ui screenshot" width="383" height="523"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cognito will send you a verification code in your email, look for it and enter it on the verification page.&lt;/li&gt;
&lt;/ol&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%2Fmy6i6v96f4n68tqabbl4.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%2Fmy6i6v96f4n68tqabbl4.png" alt="verification hosted ui screenshot" width="400" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Once verified, it will redirect you to the callback URL (which, as mentioned earlier won't do anything).&lt;/li&gt;
&lt;li&gt;Go back to your &lt;a href="https://console.aws.amazon.com/cognito/home" rel="noopener noreferrer"&gt;Cognito console&lt;/a&gt;, and click on your user pool.&lt;/li&gt;
&lt;li&gt;Check the user's tab, and look at the user that you signed up earlier.&lt;/li&gt;
&lt;/ol&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%2Fk1bai2ebbtlh98mkqu95.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%2Fk1bai2ebbtlh98mkqu95.png" alt="users tab aws console screenshot" width="800" height="147"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: Signing in will not give any response, as we didn't handle our callbacks properly.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Congrats! You just made your first Amazon Cognito user pool using it's Hosted UI service.&lt;/p&gt;




&lt;p&gt;This walkthrough introduced you to Amazon Cognito's user pools and hosted UI service, which is just the beginning of your journey through the Amazon cloud. While this tutorial focused on manual configuration in the console, like with many AWS services, Cognito also covers SDKs and integrations with other frameworks, such as &lt;a href="https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-test-application-react.html" rel="noopener noreferrer"&gt;React&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-test-application-flutter.html" rel="noopener noreferrer"&gt;Flutter&lt;/a&gt;. For more information, you can refer to the official documentation &lt;a href="https://docs.aws.amazon.com/cognito/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>aws</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Back to Basics: Git and GitHub Crash Course</title>
      <dc:creator>Precious Mae</dc:creator>
      <pubDate>Tue, 27 Aug 2024 03:16:02 +0000</pubDate>
      <link>https://dev.to/prcsmae/back-to-basics-git-and-github-crash-course-kll</link>
      <guid>https://dev.to/prcsmae/back-to-basics-git-and-github-crash-course-kll</guid>
      <description>&lt;p&gt;&lt;em&gt;Edited (11/04/2024): Included &lt;code&gt;git switch&lt;/code&gt; command.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;One of the most important concepts you have to learn when starting out in coding, and one you’ll continue to use even as you become a professional, is Git and GitHub. With these two technologies, you’ll be able to streamline your coding workflow, collaborate seamlessly with teams, and contribute to open-source projects.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: This article is intended for ultimate beginners to begin using Git bash. Git has multiple GUI clients that could be used, including GitHub desktop, but we'll be using Git bash in this article.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Git vs GitHub
&lt;/h2&gt;

&lt;p&gt;Contrary to most beginners’ belief, Git and GitHub are entirely different from one another. However, they are commonly used alongside one another.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Git&lt;/strong&gt; is the most famous and widely used free and open-source version control system. It's used by most industry tech companies such as Google, Twitter, Microsoft, and many more. It was created by Linus Torvalds, the creator and lead developer of the Linux kernel, in 2005.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;, on the other hand, is a repository hosting service. It is a place for developers to publish their code. When working on a team, you often need a remote place to put your code so others can view or access it, and even contribute to its development. &lt;/p&gt;

&lt;h2&gt;
  
  
  Your GitHub Account
&lt;/h2&gt;

&lt;p&gt;To start, let's create your GitHub account first.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, and click on &lt;em&gt;Sign up&lt;/em&gt; on the right of the header.&lt;/li&gt;
&lt;li&gt;Enter your email address, a password, and a username.&lt;/li&gt;
&lt;li&gt;GitHub will send a verification to code to your email address, access it and enter it when prompted.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Starting out with Git
&lt;/h2&gt;

&lt;p&gt;As mentioned earlier, Git is a free and open-source version control system. Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later. &lt;/p&gt;

&lt;h3&gt;
  
  
  Your First Repo:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;First, navigate to the &lt;a href="https://git-scm.com/download/win" rel="noopener noreferrer"&gt;Git downloads page&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Download the latest 64-bit version of Git for Windows, and install it once it has finished downloading.&lt;/li&gt;
&lt;li&gt;Open Git Bash by navigating to the folder where you have installed the Git or just simply search in the Windows search bar for Git bash.&lt;/li&gt;
&lt;li&gt;Run the following command to Git bash: &lt;code&gt;git --version&lt;/code&gt;.
If Git was installed properly, it should show the version of Git you just installed.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now let's let Git know who we are and setup your username and email.&lt;br&gt;
Run the following commands:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git config --global user.name "yourusername"
git config --global user.email "your@email.com"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: Use the same credentials you used with your GitHub account in the prior section.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Check if everything is configured correctly:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git config --global -l
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set up your default code editor. For this article, we'll be setting &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;VSCode&lt;/a&gt; as our default:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git config --global core.editor "code --wait"
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Remote repository
&lt;/h3&gt;

&lt;p&gt;Now, let's create your first remote repository.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a folder using the command:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir first-repo &amp;amp;&amp;amp; cd first-repo &amp;amp;&amp;amp; code .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note: &lt;code&gt;mkdir&lt;/code&gt; stands for &lt;strong&gt;make directory&lt;/strong&gt;, it creates a folder with the name you specified, in this case, it is &lt;strong&gt;first-repo&lt;/strong&gt;. &lt;code&gt;cd&lt;/code&gt; stands for &lt;strong&gt;change directory&lt;/strong&gt;, it changes your current working directory. &lt;code&gt;code .&lt;/code&gt; opens your current directory in your chosen code editor.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Initialize your first Git repository.&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git init
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create your first file in the repository.&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;touch HelloWorld.c &amp;amp;&amp;amp; code HelloWorld.c
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note: &lt;code&gt;touch&lt;/code&gt;  is a standard command used in the UNIX/Linux operating system which is used to create, change and modify the timestamps of a file, in this case we are using it to create the &lt;code&gt;HelloWorld.c&lt;/code&gt; file. &lt;code&gt;code HelloWorld.c&lt;/code&gt; is a VSCode command that opens the file specified, &lt;code&gt;HelloWorld.c&lt;/code&gt; in VSCode.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Paste the following code to the file:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;   &lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
   &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
            &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello World!"&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;/li&gt;
&lt;li&gt;
&lt;p&gt;Save your changes and run this command in the terminal:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;git add&lt;/code&gt; tells Git to begin tracking the files specified. the &lt;code&gt;.&lt;/code&gt; adds all the files in the current directory you are in.&lt;/p&gt;

&lt;p&gt;Before changes are committed to the repository history, they live in the staging index and the working directory.&lt;/p&gt;

&lt;p&gt;The contents of your project folder (the folders and files you find within it) are represented by the &lt;strong&gt;working directory&lt;/strong&gt;. The &lt;strong&gt;staging index&lt;/strong&gt; is when Git starts tracking and saving changes that occur in files. Files in the staging index are tracked by Git.&lt;/p&gt;

&lt;p&gt;If you don't want to track all the files in your directory, you can manually list the files you wish to track, e.g. &lt;code&gt;git add Documentation/*.txt&lt;/code&gt;, which adds content from all *.txt files under Documentation directory and its subdirectories, or &lt;code&gt;git add README.md HelloWorld.c&lt;/code&gt;, which adds the README.md file and HelloWorld.c file.&lt;/p&gt;

&lt;p&gt;Files in your Git repository folder can be in one of 2 states:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tracked&lt;/strong&gt; - files that Git knows about and are added to the repository.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Untracked&lt;/strong&gt; - files that are in your working directory, but not added to the repository.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Commits
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Check if the status of your repo using:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  git status
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;This will display your tracked and untracked files, the status of your branch (if it is ahead or behind), etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Since all your changes have been staged, you are ready to create your first commit.&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit -m "chore: init"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note: &lt;code&gt;git commit&lt;/code&gt; is the command to create a commit. &lt;code&gt;-m&lt;/code&gt; is a subcommand used to specify a commit message, in this case it is the &lt;code&gt;"chore: init"&lt;/code&gt;. If you don't use the &lt;code&gt;-m&lt;/code&gt; subcommand to specify a message, Git will open your code editor to make you write a commit message.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Commits act like &lt;em&gt;snapshots of your repository at specific times&lt;/em&gt;&lt;/strong&gt;. You should make new commits often, based around logical units of change in your code and repository. Commits include lots of metadata in addition to the contents and message, like the author, timestamp, and more.&lt;/p&gt;

&lt;p&gt;Commits require a &lt;em&gt;commit message&lt;/em&gt;. These messages are extremely important, as they become a descriptor for the change you are commiting. To know how to write proper commit messages, check out this link: &lt;a href="https://gist.github.com/qoomon/5dfcdf8eec66a051ecd85625518cfd13/#examples" rel="noopener noreferrer"&gt;Guide for conventional commits&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Branches
&lt;/h3&gt;

&lt;p&gt;Let's say I want to create another version of my project without affecting the main one. We can use &lt;strong&gt;branches&lt;/strong&gt; to do this. Git branches are like separate paths or versions of your project where you can work on different features or fixes without affecting the main project. For local repositories, the name of the main branch is called &lt;code&gt;master&lt;/code&gt;, while on GitHub it is &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a new branch:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git branch name
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;name&lt;/code&gt; is the name of the new branch we want to create, you can use whatever name you want, but in this tutorial let's use &lt;code&gt;name&lt;/code&gt;. If Git finds a branch with a similar name, it will throw an error.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Change from your current branch to your new branch.&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout name
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can actually combine the these two steps into one by using:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout -b name
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will create a new branch named &lt;code&gt;name&lt;/code&gt; and also change your current branch to &lt;code&gt;name&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can also use a &lt;code&gt;git switch&lt;/code&gt; to create a new branch and switch to it.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git switch -c name
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check what current branch you are working on with&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git branch
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you are working on the correct branch, paste the following code into your &lt;code&gt;HelloWorld.c&lt;/code&gt; file.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;   &lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
   &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
            &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Linus"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, %s!"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&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;p&gt;Stage and commit your changes:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add .
git commit -m "feat: added a variable name to print"
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now checkout your main branch with:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout master
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If everything worked out, this branch should not include the changes you made in the &lt;code&gt;name&lt;/code&gt; branch.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Let's merge the two branches together. Before merging to master, make sure that everything works first to ensure that you don't break anything.&lt;/p&gt;

&lt;p&gt;Assuming you are still in the &lt;code&gt;master&lt;/code&gt; branch, run the command:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git merge name
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This command should merge your &lt;code&gt;name&lt;/code&gt; branch into the &lt;code&gt;master&lt;/code&gt; branch.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Local repository to Remote
&lt;/h3&gt;

&lt;p&gt;Now, let's connect your local repository to GitHub.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open &lt;a href="//github.com"&gt;GitHub&lt;/a&gt; and create a new repository. Add a repository name, in this case we'll use &lt;code&gt;first-repo&lt;/code&gt;. Choose if you want to make this repository public or private, and if you want to initialize a README.md (but we'll skip this for now). Click on &lt;strong&gt;Create repository&lt;/strong&gt; once you're done. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;After creating your repository, GitHub will redirect you to a quick setup page. Copy the https link provided.&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%2Fdvny75179ditrezdq1gh.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%2Fdvny75179ditrezdq1gh.png" alt="'setup link'" width="800" height="98"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On your &lt;code&gt;first-repo&lt;/code&gt; directory, run the following commands:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git remote add origin &amp;lt;link you copied&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Replace the text inside the &amp;lt;&amp;gt; with the link you copied, and remove the &amp;lt;&amp;gt;. To see the remote repositories associated with your local repository, run:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git remote -v
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Rename your branch&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git branch -M main
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This command will rename your current branch to &lt;code&gt;main&lt;/code&gt;. The &lt;code&gt;-m&lt;/code&gt; stands for 'move' or 'rename'. As mentioned earlier, local repositories use the name &lt;code&gt;master&lt;/code&gt; for their main branch, while GitHub uses &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Push all your local commits to GitHub.&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push -u origin main
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;git push&lt;/code&gt; is a command used to upload your local branch's commits to your remote GitHub repository. &lt;code&gt;-u&lt;/code&gt; or &lt;code&gt;--set-upstream&lt;/code&gt; is  used to set the upstream branch, connecting your local main branch to the remote repository's main branch. You can just use &lt;code&gt;git push&lt;/code&gt; after setting this. &lt;code&gt;origin&lt;/code&gt; is the default name for the remote repository in Git. &lt;code&gt;main&lt;/code&gt; specifies the branch you want to push, in this case, the &lt;code&gt;main&lt;/code&gt; branch.&lt;/p&gt;

&lt;p&gt;This command should push all your local commits to your GitHub repository. Check your GitHub for the changes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Pulling changes from remote to local
&lt;/h3&gt;

&lt;p&gt;Now, let's say that you're working on a project with multiple people, and one of your team members just pushed a change to your main branch.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;First, let's simulate how this work. Go to your GitHub repository and click on &lt;strong&gt;Add file&lt;/strong&gt; and &lt;strong&gt;Create a new file&lt;/strong&gt;. Name your file &lt;code&gt;README.md&lt;/code&gt;, a README file contains information about your project.&lt;/p&gt;

&lt;p&gt;A README.md uses Markdown Language. You can refer to this link for its' syntax: &lt;a href="https://www.markdownguide.org/basic-syntax/" rel="noopener noreferrer"&gt;Markdown Language Syntax&lt;/a&gt;. Paste the following contents to your file:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# My First Repo

Local repository to remote.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can preview its contents, by clicking on the &lt;strong&gt;Preview&lt;/strong&gt; button next to the &lt;strong&gt;Edit&lt;/strong&gt;. Once everything is ok, click on &lt;strong&gt;Commit changes&lt;/strong&gt;. A pop-up will appear prompting a commit message. Click on &lt;strong&gt;Commit changes&lt;/strong&gt; once you are done.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On Git bash, run the following command:&lt;/p&gt;

&lt;p&gt;Since you already set the upstream branch earlier, you can just use &lt;code&gt;git pull&lt;/code&gt; directly.&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git pull
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will pull all the changes from your remote repository to your local. Look at your explorer or use the command &lt;code&gt;ls&lt;/code&gt; in your Git bash to list all your files and directories. &lt;code&gt;README.md&lt;/code&gt; should be listed.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Undoing changes
&lt;/h3&gt;

&lt;p&gt;Let's say I want to undo my changes and go back to a certain version of my project. There are several ways to undo commits, like &lt;code&gt;git revert&lt;/code&gt;, &lt;code&gt;git reset&lt;/code&gt;, &lt;code&gt;git checkout&lt;/code&gt; etc.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;See all your commits using the &lt;code&gt;git log --oneline&lt;/code&gt; command. This will display all the commits with their hashes. Commit histories are long, so the &lt;code&gt;--oneline&lt;/code&gt; subcommand limits the information displayed to one line.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Copy the hash of the commit you want to go to. In this case, I want to revert to the initial commit with the hash &lt;code&gt;a894e0f&lt;/code&gt;. But first, let's visit that commit.&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout a894e0f
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Undoing a commit with &lt;code&gt;git checkout&lt;/code&gt;
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Checkout to the commit you want to go back to.&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout a894e0f
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Using this command will remove you from your current branch, which means you won't be working on any branch.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;From this state, we can run:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout -b newbranch_nocommit
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The repository is now in a timeline where the &lt;code&gt;a894e0f&lt;/code&gt; commit no longer exists. &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Undoing a commit with &lt;code&gt;git revert&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Git revert is used to record some new commits to reverse the effect of some earlier commits. Unlike &lt;code&gt;git checkout&lt;/code&gt;, it creates a history of its undo. This is the ideal 'undo' method for working with public shared repositories.&lt;/p&gt;

&lt;p&gt;Let's say I want to go back to my past commit.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    git revert HEAD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;HEAD is your current branch, or active branch. Git can only checkout one branch at a time, and this is your HEAD branch. When you change branches using the &lt;code&gt;checkout&lt;/code&gt; command, this new branch now becomes your new HEAD. &lt;code&gt;git revert HEAD&lt;/code&gt; creates a new commit that undoes the changes made by the latest commit (the one pointed to by HEAD).&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    git revert HEAD~3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This will revert the changes specified by the fourth last commit in HEAD and create a new commit with the reverted changes.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    git revert a894e0f --no-edit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;git revert a894e0f&lt;/code&gt; reverts to the commit with the specified hash. &lt;code&gt;--no-edit&lt;/code&gt;  skips the commit message editor, resulting in getting the default revert message.&lt;/p&gt;

&lt;p&gt;Reverting to a certain commit will sometimes result in merge conflicts, wherein your past commit will have conflicts with your current commit. To handle these errors, you can open the conflicted file and decide what changes you want to accept.&lt;/p&gt;

&lt;p&gt;Once you resolved all conflicts, run &lt;code&gt;git revert --continue&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Undoing uncommited changes
&lt;/h4&gt;

&lt;p&gt;In the case wherein you have only staged your files, but did not commit them yet, you can run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git reset
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;git reset&lt;/code&gt; should generally be considered a 'local' undo method. &lt;code&gt;git reset a894e0f&lt;/code&gt; can also be used, where &lt;code&gt;a894e0f&lt;/code&gt; is the commit hash of the commit you want to go back to, but doing this will rewrite your repository's history, so it is not recommended. A reset should be used when undoing changes to a private branch. This safely isolates the removal of commits from other branches that may be in use by other developers. &lt;/p&gt;

&lt;p&gt;On the hand, when your changes are in the working directory, you can run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clean
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command removes untracked files from the working tree. The Working Tree is the area where you are currently working, or where your files live. It cleans it by recursively removing files that are not under version control, starting from the current directory.&lt;/p&gt;

&lt;h3&gt;
  
  
  From remote to local: Cloning
&lt;/h3&gt;

&lt;p&gt;We created a repository by using &lt;code&gt;git init&lt;/code&gt; in the prior section, but there is another way to create a repository, and that is by first creating a remote repository and cloning it into your local machine. This is helpful when you want to work on a project that is owned by someone else.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Similar to when we created a remote repository earlier, go to your &lt;a href="//github.com"&gt;GitHub&lt;/a&gt;, and create a new repository. Name your repository as &lt;code&gt;second-repo&lt;/code&gt;, and initialize a README.md. Write in your README.md:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; # second-repo

 Remote to local.
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Commit your changes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to your repository's home page, and click on &lt;strong&gt;Code&lt;/strong&gt;. Copy the HTTPS url.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In Git bash, &lt;code&gt;cd&lt;/code&gt; to a directory you want to clone your repository into.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; cd repo-test
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Once you're in the directory you want, run the command:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;This will clone your remote repository to your local machine.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;cd&lt;/code&gt; into your &lt;code&gt;second-repo&lt;/code&gt; and open your README.md file. Edit the contents of your file:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; # second-repo

 Remote to local.

 This is an edit.
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Save, stage, and commit your changes.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; git add README.md
 git commit -m "docs: edited README.md"
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can directly push to your remote repository.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Git hosts a lot of features and commands, and what I covered in this article will only scratch the surface, but hopefully it will help you get started in exploring Git and GitHub. To know more, you can refer to &lt;a href="https://git-scm.com/docs" rel="noopener noreferrer"&gt;Git's Documentation&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;After reading article, you can consult W3School's &lt;a href="https://www.w3schools.com/git/default.asp?remote=github" rel="noopener noreferrer"&gt;Git and GitHub Tutorial&lt;/a&gt; or GeeksforGeeks' &lt;a href="https://www.geeksforgeeks.org/ultimate-guide-git-github/" rel="noopener noreferrer"&gt;Ultimate Guide to Git and GitHub&lt;/a&gt; to explore other features such as &lt;code&gt;.gitignore&lt;/code&gt; or pull requests.&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>The AI Tech Revolution: Will AI be replacing programmers?</title>
      <dc:creator>Precious Mae</dc:creator>
      <pubDate>Mon, 19 Feb 2024 15:06:39 +0000</pubDate>
      <link>https://dev.to/up_min_sparcs/the-ai-tech-revolution-will-ai-be-replacing-programmers-2bga</link>
      <guid>https://dev.to/up_min_sparcs/the-ai-tech-revolution-will-ai-be-replacing-programmers-2bga</guid>
      <description>&lt;h6&gt;
  
  
  This article was co-authored by &lt;a class="mentioned-user" href="https://dev.to/angelakimmasong"&gt;@angelakimmasong&lt;/a&gt;
&lt;/h6&gt;

&lt;p&gt;In today's era dominated by the widespread influence of AI, its rapid transformation affects every sector across the country. Whether it’s healthcare or finance, AI’s rise has reshaped how things work, pushing industries into new frontiers of innovation. However, amidst this revolution, one area is surprisingly vulnerable: &lt;em&gt;the world of technology itself&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;As AI continues its relentless advancement, its impact on the tech industry is profound, challenging established norms while sparkling both awe and apprehension. One significant aspect of this transformation lies in the integration of AI into programming. This integration is poised to reshape programmer roles, automating repetitive tasks and allowing them to focus on higher-value work. &lt;/p&gt;

&lt;p&gt;In this article, we’ll delve into the relationship between AI and technology, exploring the myriad ways of  AI’s rise in reshaping how we innovate in the tech world.&lt;/p&gt;

&lt;h3&gt;
  
  
  How is the rapid growth of AI impacting the prevalence of layoffs in the tech industry?
&lt;/h3&gt;

&lt;p&gt;In recent years, the tech industry has experienced significant shifts, with the rise of artificial intelligence (AI) playing a central role. According to Tech Crunch (2024), the tech industry has experienced 240,000 jobs in 2023, and has experienced around 20,000 layoffs in January 2024 alone. These alarming numbers are enough reason to concern tech professionals and beginners alike. The demand for AI became the driving force behind job cuts last year and continues to be a significant factor this year (Forbes, 2023).&lt;/p&gt;

&lt;p&gt;Among these AI technologies is the rise of different code-generation technologies that bring uncertainties in the stability in the field.&lt;/p&gt;

&lt;h4&gt;
  
  
  Most popular AI code-generator technologies
&lt;/h4&gt;

&lt;p&gt;Artificial Intelligence has transformed software development, leading to the rise in popularity of code-generation technologies within the tech industry. Here, are some of the most well-known AI code-generation tools that in recent years:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blackbox AI:&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%2Foqzphrj156rbabmv8xm9.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%2Foqzphrj156rbabmv8xm9.png" alt="Blackbox AI website landing page" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Blackbox AI is a cutting-edge code generation technology that utilizes deep learning algorithms to automate the process of writing code. It is a sophisticated artificial intelligence model designed specifically for code generation. At its core, it excels in understanding natural language requests and translating them into functional programming constructs (Blackbox AI Code Chat, 2024).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Co-pilot:&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%2F90sm91icc4q3d47vl6lg.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%2F90sm91icc4q3d47vl6lg.png" alt="Github co-pilot webpage landing page" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Developed by GitHub in collaboration with OpenAI, GitHub Co-pilot is also a powerful code completion tool that assists developers in writing code more efficiently. It suggests code snippets, identifies relevant APIs, and provides real-time feedback as developers write code.&lt;/p&gt;

&lt;p&gt;It contributes to solving selected fundamental problems in computer science, such as sorting and implementing data structures, and generates a dataset of programming problems with human-provided solutions (GitHub Copilot AI Pair Programmer: Asset or Liability?, 2023). Furthermore, it has gained significant traction among developers and organizations, with notable improvements in code quality and productivity reported by users (GitHub: AI Helps Developers Write Safer Code, but You Need to Get the Basics Right, 2023).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ChatGPT:&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%2Fk33egv0hnoa2f0prq8m5.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%2Fk33egv0hnoa2f0prq8m5.png" alt="ChatGPT about page" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This platform has gained a lot of popularity and is a versatile AI model developed by OpenAI that can generate code based on user input and context. The technology has numerous applications in various industries, including customer service, education, healthcare, and entertainment.&lt;/p&gt;




&lt;h4&gt;
  
  
  The limitations of AI
&lt;/h4&gt;

&lt;p&gt;Though we are seeing rapid advancements in technology, there is one fact about AI that cannot be ignored: Artificial intelligence can’t think on its own. Currently, the AI we know today relies on machine learning, which lets computers learn by experience by feeding it massive amounts of data that it then processes. These machines are categorized as weak AI, meaning they are only programmed to do one specific task. Ultimately, we are still far from creating Artificial General Intelligence, which would be capable of exhibiting the full range of human capabilities, including creativity (Lifewire, 2023). All this just means one thing, and that is that the AI we know today still lacks the ability to fully be independent and still relies heavily on human engagement. &lt;/p&gt;

&lt;p&gt;Although code-generation technologies exist, they cannot fully replicate the human mind. The act of programming requires human creativity, intuition, and judgment, which are yet to be replicated by artificial intelligence. It is up to humans to ideate and create complex systems to solve different problems and make important decisions. These code-generation technologies only serve as a supplement, letting the machines do the mundane and small tasks to let the professionals focus on the more meaningful work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;The introduction of AI technologies is reshaping the way different industries work, including the tech industry. One of these ways is how it introduced different code-generation technologies that offer valuable assistance to programmers. However, due to its inability to fully replicate human thought and abilities, these technologies still fall short of fully replacing humans in the field. While the recent developments in artificial intelligence are impressive, its limitations leave it to remain a complementary tool that is still incapable of replacing human ingenuity in the field of programming.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>career</category>
    </item>
  </channel>
</rss>
