<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Shubham Sharma</title>
    <description>The latest articles on Forem by Shubham Sharma (@shubhamku044).</description>
    <link>https://forem.com/shubhamku044</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%2F720295%2Fba8b4f90-4e0b-416e-8e78-cb568061bae8.png</url>
      <title>Forem: Shubham Sharma</title>
      <link>https://forem.com/shubhamku044</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/shubhamku044"/>
    <language>en</language>
    <item>
      <title>🚀 la-resume: 100+ Signups in Just 14 Days – Here’s Our Journey So Far</title>
      <dc:creator>Shubham Sharma</dc:creator>
      <pubDate>Sat, 08 Mar 2025 07:53:51 +0000</pubDate>
      <link>https://forem.com/shubhamku044/la-resume-100-signups-in-just-14-days-heres-our-journey-so-far-5cl3</link>
      <guid>https://forem.com/shubhamku044/la-resume-100-signups-in-just-14-days-heres-our-journey-so-far-5cl3</guid>
      <description>&lt;p&gt;Hey everyone! Two weeks ago, my friend &lt;strong&gt;Priyabrata Mondal&lt;/strong&gt; and I launched &lt;strong&gt;la-resume&lt;/strong&gt;, an open-source, ATS-friendly resume builder to help job seekers create professional resumes without the hassle. We’ve been blown away by the response so far—&lt;strong&gt;100+ signups&lt;/strong&gt; in just &lt;strong&gt;14 days&lt;/strong&gt;! 😱 Here’s a quick rundown of what’s been happening:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;100+ signups&lt;/strong&gt; (still can’t believe it!)
&lt;/li&gt;
&lt;li&gt;👀 &lt;strong&gt;730+ unique visitors&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;📄 &lt;strong&gt;2,200+ page views&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;⭐ &lt;strong&gt;25+ GitHub stars in just 14 days&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo9qavdncmcaxxeuxiw2b.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%2Fo9qavdncmcaxxeuxiw2b.png" alt="La Resume vercel analytics" width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As solo developers, we built this side project together for fun and to help out, and the traction has been incredible. I wanted to share our journey, the tech behind it, and some of the challenges we’ve faced along the way.&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%2Frd8duhcffld35710r12k.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%2Frd8duhcffld35710r12k.png" alt="la resume home page" width="800" height="279"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why We Built la-resume
&lt;/h2&gt;

&lt;p&gt;It all started when we were creating our resume on OverLeaf. We noticed that most resume builders out there either weren’t &lt;strong&gt;ATS-friendly&lt;/strong&gt; (a must for beating those applicant tracking systems) or charged crazy fees for basic stuff like PDF exports or writing LateX isn't easy for everyone. So, we teamed up to create &lt;strong&gt;la-resume&lt;/strong&gt; an easy-to-use tool optimised for ATS, letting users craft stunning resumes in minutes.&lt;/p&gt;

&lt;p&gt;Our goal? Help people land their dream jobs with resumes that look pro and pass those ATS filters with flying colors.&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%2Ffcl07xtt0ylxjdvi41xs.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%2Ffcl07xtt0ylxjdvi41xs.png" alt="la resume temlates" width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Tech Behind It
&lt;/h2&gt;

&lt;p&gt;If you’re curious about the tech we used to bring la-resume to life, here’s the stack we worked with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: Next.js 15 + Tailwind CSS (keeps things fast and pretty!)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: MongoDB (We started with NeonDB PostgreSQL but switched due to free-tier limits—lesson learned!)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth&lt;/strong&gt;: Clerk for super smooth authentication
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting&lt;/strong&gt;: Vercel (makes deployment a breeze)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Microservices&lt;/strong&gt;: Python-based microservices, containerized and hosted on AWS
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This setup has been awesome—it’s fast, scalable, and lets us iterate on new features without too much stress.&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%2Fa31wx33kdr0w87jnb7l4.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%2Fa31wx33kdr0w87jnb7l4.png" alt="la resume, made by you" width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;Using la-resume is super straightforward:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You fill out a form with your info.
&lt;/li&gt;
&lt;li&gt;That data gets plugged into a LaTeX template behind the scenes.
&lt;/li&gt;
&lt;li&gt;Boom—a polished, ATS-friendly PDF is generated for you!
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It’s all about making the process painless while ensuring your resume looks great and works for those ATS scans.&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%2Fdxdjajdgji2tsyx24gnm.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%2Fdxdjajdgji2tsyx24gnm.png" alt="la resume edits" width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2i58vis0m84yf163sxtx.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%2F2i58vis0m84yf163sxtx.png" alt="la resume edit your resume" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Journey: Challenges &amp;amp; What We’ve Learned
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1️⃣ Getting Those First Users
&lt;/h3&gt;

&lt;p&gt;Getting people to check out &lt;strong&gt;la-resume&lt;/strong&gt; was a big hurdle at first. Most of our traffic came from &lt;strong&gt;X&lt;/strong&gt; (&lt;a href="https://x.com/shubhamku044" rel="noopener noreferrer"&gt;shubhamku044&lt;/a&gt; &amp;amp; &lt;a href="https://x.com/prybruhta" rel="noopener noreferrer"&gt;prybruhta&lt;/a&gt;), &lt;strong&gt;Reddit&lt;/strong&gt;, and some posts on &lt;strong&gt;LinkedIn&lt;/strong&gt; (&lt;a href="https://www.linkedin.com/in/shubhamku044/" rel="noopener noreferrer"&gt;shubhamku044&lt;/a&gt; &amp;amp; &lt;a href="https://www.linkedin.com/in/prybruhta/" rel="noopener noreferrer"&gt;prybruhta&lt;/a&gt;). Here’s what worked for us:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Posting on communities like Reddit, Twitter, and Indie Hackers.
&lt;/li&gt;
&lt;li&gt;Sharing updates on LinkedIn and Dev.to to keep the momentum going.
&lt;/li&gt;
&lt;li&gt;Chatting with people in relevant groups to get feedback and spread the word.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The community support has been a huge boost!&lt;/p&gt;

&lt;h3&gt;
  
  
  2️⃣ Listening to Feedback
&lt;/h3&gt;

&lt;p&gt;The feedback from users has been amazing. People shared great ideas, like improving the UI or adding more template customization options. We’ve been quick to iterate and make those changes based on what real users need.&lt;/p&gt;

&lt;h3&gt;
  
  
  3️⃣ Keeping It Simple
&lt;/h3&gt;

&lt;p&gt;One lesson we learned early: don’t overcomplicate things! We focused on keeping the MVP simple and functional, which let us launch faster and figure out what users actually want before diving into bigger features.&lt;/p&gt;




&lt;h2&gt;
  
  
  Community Love &amp;amp; Recognition
&lt;/h2&gt;

&lt;p&gt;We’ve been so humbled by the support:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The folks behind &lt;strong&gt;RenderCV&lt;/strong&gt; and &lt;strong&gt;ppResume&lt;/strong&gt; liked and starred our project on &lt;strong&gt;GitHub&lt;/strong&gt; (&lt;a href="https://github.com/shubhamku044/la-resume" rel="noopener noreferrer"&gt;la-resume&lt;/a&gt;, huge shoutout to them!
&lt;/li&gt;
&lt;li&gt;We’ve already hit &lt;strong&gt;25+ stars in just 14 days&lt;/strong&gt;!
&lt;/li&gt;
&lt;li&gt;We’re starting to see interest from open-source contributors, which is super exciting.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s awesome to see people rallying behind what we’ve built together.&lt;/p&gt;




&lt;h2&gt;
  
  
  What’s Next for la-resume?
&lt;/h2&gt;

&lt;p&gt;We’ve got big plans to keep improving la-resume, and we’re pumped about what’s coming:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🚀 &lt;strong&gt;LaTeX exports&lt;/strong&gt; for even better formatting.
&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;More template customization&lt;/strong&gt; options to fit everyone’s style.
&lt;/li&gt;
&lt;li&gt;💡 A &lt;strong&gt;freemium model&lt;/strong&gt; with some premium features for power users.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The support so far has been incredible, and we can’t wait to see where this journey takes us!&lt;/p&gt;




&lt;h2&gt;
  
  
  Want to Check It Out?
&lt;/h2&gt;

&lt;p&gt;If you’re on the hunt for an &lt;strong&gt;ATS-friendly resume builder&lt;/strong&gt;, we’d love for you to give la-resume a try! You can find it here: &lt;a href="https://la-resume.tech" rel="noopener noreferrer"&gt;la-resume.tech&lt;/a&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📌 &lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/shubhamku044" rel="noopener noreferrer"&gt;shubhamku044&lt;/a&gt; &amp;amp; &lt;a href="https://github.com/PriyabrataMo" rel="noopener noreferrer"&gt;PriyabrataMo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📢 &lt;strong&gt;Follow us on Twitter&lt;/strong&gt;: &lt;a href="https://x.com/shubhamku044" rel="noopener noreferrer"&gt;shubhamku044&lt;/a&gt; &amp;amp; &lt;a href="https://x.com/prybruhta" rel="noopener noreferrer"&gt;prybruhta&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🌍 &lt;strong&gt;Join our LinkedIn network&lt;/strong&gt;: &lt;a href="https://linkedin.com/in/shubhamku044" rel="noopener noreferrer"&gt;shubhamku044&lt;/a&gt; &amp;amp; &lt;a href="https://www.linkedin.com/in/prybruhta/" rel="noopener noreferrer"&gt;prybruhta&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We’re also &lt;strong&gt;open to opportunities&lt;/strong&gt;—whether it’s collaboration, job offers, or partnerships. As full-stack developers passionate about building scalable apps with React, TypeScript, and Go, we’d love to explore new projects or roles where we can contribute and grow. Feel free to reach out! We’d also love to hear your thoughts, feature ideas, or just say hi. Let’s keep building something awesome together! 💙&lt;/p&gt;




</description>
      <category>programming</category>
      <category>buildinpublic</category>
      <category>typescript</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Launching Your First AWS EC2 Instance: A Complete Guide for DevOps Beginners</title>
      <dc:creator>Shubham Sharma</dc:creator>
      <pubDate>Thu, 14 Nov 2024 21:32:27 +0000</pubDate>
      <link>https://forem.com/shubhamku044/launching-your-first-aws-ec2-instance-a-complete-guide-for-devops-beginners-1k6</link>
      <guid>https://forem.com/shubhamku044/launching-your-first-aws-ec2-instance-a-complete-guide-for-devops-beginners-1k6</guid>
      <description>&lt;p&gt;In the world of DevOps, the efficient management of resources is the main concern.&lt;br&gt;
This is where Virtual Machines (VMs) and hypervisors come into the picture, changing how organizations optimize their computing capabilities. Imagine a very big plot of land, where a single house is built, occupying only a small area. This analogy perfectly matches the role of VMs in the DevOps landscape.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Virtual Machines
&lt;/h2&gt;

&lt;p&gt;That single house on the vast piece of land is an example of an underutilized resource, and traditional physical servers frequently end up in a similar situation.&lt;br&gt;
Usually, businesses would assign a specific server to each team or application, which resulted in a major underutilization of the hardware's potential.&lt;/p&gt;

&lt;p&gt;On the other hand, virtual machines provide a revolutionary answer to this problem.&lt;br&gt;
VMs allow businesses to optimize the use of their computer resources by logically dividing a single physical server into several separate virtual environments.&lt;br&gt;
It would be like building several separate, smaller homes on that large piece of land, each one customized to meet the needs of its occupants.&lt;br&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%2F184mbtiuaruu5ork7co8.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%2F184mbtiuaruu5ork7co8.png" alt="Virtual Machine" width="786" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hypervisor: The Mastermind Behind Virtual Machines
&lt;/h2&gt;

&lt;p&gt;The hypervisor, an advanced software layer that builds and controls virtual machines on a physical server, is essential to this smooth virtualization. Consider the hypervisor to be the estate manager, carefully monitoring the distribution and use of the land to make sure every virtual "dwelling" (VM) has access to the resources it needs without interfering with the others.&lt;/p&gt;

&lt;p&gt;Well-known hypervisors like VMware and Xen enable businesses to divide hardware so that several users or apps can use it without any problems. The foundation of DevOps processes, where the capacity to grow resources on demand is crucial, is this degree of control and flexibility.&lt;br&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%2F4u4w62r7i5zxf5i3ca3w.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4u4w62r7i5zxf5i3ca3w.jpg" alt="Hypervisor" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Clouds, VMs, and the Art of Efficient Resource Management
&lt;/h2&gt;

&lt;p&gt;Cloud platforms, like AWS, Azure, and Google Cloud, have embraced the power of VMs to revolutionize their infrastructure. These cloud giants leverage vast data centres, each housing numerous physical servers across various regions. When a user requests a VM (or an EC2 instance on AWS), the cloud provider's systems spring into action, selecting an optimal physical server, creating a VM using a hypervisor, and allocating the requested resources to the virtual environment.&lt;/p&gt;

&lt;p&gt;This logical separation of physical hardware and virtual resources is the key to unlocking exceptional efficiency. Just as our analogy of the expansive plot of land can be transformed into a thriving community of smaller, specialized dwellings, cloud providers can now serve millions of users across fewer physical servers, a vast improvement over the traditional one-server-per-user approach.&lt;/p&gt;

&lt;h2&gt;
  
  
  Unleashing the Full Potential of VMs in DevOps
&lt;/h2&gt;

&lt;p&gt;As you go deeper into DevOps, understanding the intricacies of Virtual Machines and hypervisors will be instrumental in your journey. These technologies empower organizations to optimize resource utilization, scale infrastructure on-demand, and create agile, responsive computing environments – all essential pillars of successful DevOps practices.&lt;/p&gt;

&lt;p&gt;By embracing the power of VMs and hypervisors, DevOps practitioners can unlock new levels of efficiency, flexibility, and adaptability, positioning their organizations for success in the ever-evolving digital landscape.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started with a Virtual Machine(VM)
&lt;/h2&gt;

&lt;p&gt;Since there are many cloud providers available nowadays, for example, &lt;strong&gt;AWS&lt;/strong&gt; from Amazon, &lt;strong&gt;Azure&lt;/strong&gt; from MicroSoft, &lt;strong&gt;Google Cloud Provider&lt;/strong&gt; from Google, etc.&lt;br&gt;
But here in the blog, we will be using AWS, and all the steps which I will show you will be applicable for others too.&lt;/p&gt;

&lt;h3&gt;
  
  
  EC2
&lt;/h3&gt;

&lt;p&gt;The full form of &lt;strong&gt;EC2&lt;/strong&gt; is &lt;strong&gt;Elastic Compute Cloud&lt;/strong&gt;. It's not a buzz word, it just a name given to the Virtual Machine provided by &lt;strong&gt;AWS&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Important of Automation in cloud
&lt;/h3&gt;

&lt;p&gt;Before starting a &lt;strong&gt;EC2&lt;/strong&gt; instance, I would like to first tell you what is the importance of Automation in Cloud&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It will be quite simple to establish a single virtual machine. All you have to do is open the cloud provider of your choice. After that, all you have to do is enter some settings and hit a button to get your virtual machine started.&lt;/li&gt;
&lt;li&gt;But imagine if you want to create 1000's of virtual machines, this process will become very much tedious. And here you need automation else if you choose to do it manually, it will take weeks to just start 1000's of virtual mahines.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This automation can be done in multiple ways, for &lt;strong&gt;AWS EC2&lt;/strong&gt;, we can use it's API and then we can write a script and make an API call to AWS EC2 API.&lt;br&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%2Fxrx13t70f1se7glxatpx.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%2Fxrx13t70f1se7glxatpx.png" alt="AWS API" width="800" height="224"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Other ways to start &lt;strong&gt;AWS EC2&lt;/strong&gt; are&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS CLI&lt;/li&gt;
&lt;li&gt;AWS API (Boto3 if you want to use Python)&lt;/li&gt;
&lt;li&gt;AWS CFT(Cloud Formation Template)&lt;/li&gt;
&lt;li&gt;AWS CDK&lt;/li&gt;
&lt;li&gt;Terraform&lt;/li&gt;
&lt;li&gt;Though it is not specific to AWS. But you can also use it to start &lt;strong&gt;AWS EC2&lt;/strong&gt; instance. People use it for hybrid cloud model. I will write a Blog on &lt;strong&gt;Terraform&lt;/strong&gt; soon.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Starting your first EC2 Instance
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;First step is to visit &lt;a href="https://aws.amazon.com/console/" rel="noopener noreferrer"&gt;AWS console page&lt;/a&gt;, then go to &lt;strong&gt;sign-in&lt;/strong&gt; page.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;If you have an AWS account already then login with your credentials.&lt;/li&gt;
&lt;li&gt;If you don't have an account, please create one. It is very easy to create an account, it will ask some basic details like email, password but It will also ask for your &lt;strong&gt;credit card&lt;/strong&gt; details,
don't worry it won't cost you util are you not using any paid services&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After login you will see this interface&lt;br&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%2F21lw49457u33eok6uebz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F21lw49457u33eok6uebz.jpg" alt="AWS home screen" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then go to &lt;strong&gt;EC2&lt;/strong&gt;, you can either search it or directly click on the &lt;strong&gt;EC2&lt;/strong&gt; written text&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now, click on the &lt;strong&gt;Launch Instance&lt;/strong&gt;. So, we are going to start a &lt;strong&gt;ubuntu&lt;/strong&gt; machine, for this just fill the basic details like instance name, then choose &lt;strong&gt;Ubuntu&lt;/strong&gt; in application and OS Images section&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Below this you can choose intance type, for now I will suggest you to choose &lt;em&gt;t2.micro&lt;/em&gt; which is a free tier server&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Then, generate a key pair and save it to your laptop. This will be used to login to your &lt;strong&gt;ubuntu server&lt;/strong&gt; from your own computer
&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%2Fapr81yieq4b95tkfvbiv.jpg" alt="AWS key pair generate" width="800" height="389"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: Do not share it with anyone.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The next step is to click on &lt;strong&gt;Launch Instance&lt;/strong&gt; button, and you are good to go&lt;/li&gt;
&lt;li&gt;Last step is to visit the ec2 &lt;strong&gt;instances&lt;/strong&gt; page from side panel to see your running instance
&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%2Fhfa7u47ry8l4sbvtoxw1.jpg" alt="AWS EC2 Instance" width="800" height="389"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Congratulations 🎉, You have started your first ec2 instance&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Connecting to your EC2 instance
&lt;/h2&gt;

&lt;p&gt;In this section of blog, I will show you how can you connect your &lt;strong&gt;ec2&lt;/strong&gt; instance in two different ways&lt;/p&gt;

&lt;h3&gt;
  
  
  The easier way
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;In the instances pages, click on the &lt;strong&gt;instance id&lt;/strong&gt; of your ec2 instance&lt;/li&gt;
&lt;li&gt;Now, after that, in the top right of the screen you can see a &lt;strong&gt;Connect&lt;/strong&gt; button, click on that&lt;/li&gt;
&lt;li&gt;You will be redirected to a different screen, so now again click on &lt;strong&gt;Connect&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can now see a console in your browser, which is called aws console. If you can see it, means you have successfully connected to your EC2 Instance&lt;br&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%2F2p5114i8ias6zxufs78u.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2p5114i8ias6zxufs78u.jpg" alt="AWS Console" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now you can write your Linux commands&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The better way
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open any terminal of your choice on your computer&lt;/li&gt;
&lt;li&gt;Change the file permission of the key-value-pair-pem file
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;400 /path/to/your/key-value-pair-pem-file.pem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;this command will change the permission of the file, so that only owner can read it, and no one else can read/edit it&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now go to you ec2 instance and copy the public IPv4 address and run the below command
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-i&lt;/span&gt; /path/to/your/key-value-pair-pem-file.pem ubuntu@public-ip-of-your-ec2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For the first time, SSH asks you if you want to continue the connection (yes/no/[fingerprint]). Typing “yes” accepts the key, telling SSH that you trust the server, so please type yes&lt;br&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%2Fldmbfq7l8ctsq1lcpofd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fldmbfq7l8ctsq1lcpofd.jpg" alt="AWS connecting from terminal" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Congrats🎊, you have successfully connected your computer to an ec2 instance&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you'd like to connect and learn together, you can find me on &lt;a href="https://www.linkedin.com/in/shubhamku044/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; and &lt;a href="https://x.com/shubhamku044" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;. Let's help each other grow! 🚀&lt;/p&gt;

&lt;p&gt;Thank you for reading this article! I would love to hear your thoughts and experiences with DevOps in the comments below. Did you find this helpful? What aspects of DevOps would you like to learn more about? Drop a comment and let's discuss! 💭&lt;br&gt;
Your feedback helps me create better content for the community. 🙏&lt;/p&gt;

</description>
      <category>devops</category>
      <category>aws</category>
      <category>cloud</category>
      <category>virtualmachine</category>
    </item>
    <item>
      <title>Understanding DevOps through a SDLC lens: A Comprehensive Learning Journey</title>
      <dc:creator>Shubham Sharma</dc:creator>
      <pubDate>Sun, 10 Nov 2024 11:53:30 +0000</pubDate>
      <link>https://forem.com/shubhamku044/understanding-devops-through-a-sdlc-lens-a-comprehensive-learning-journey-47dk</link>
      <guid>https://forem.com/shubhamku044/understanding-devops-through-a-sdlc-lens-a-comprehensive-learning-journey-47dk</guid>
      <description>&lt;h2&gt;
  
  
  I. Introduction
&lt;/h2&gt;

&lt;p&gt;SDLC The &lt;strong&gt;Software Development Life Cycle&lt;/strong&gt; is a structured approach to software development, consisting of several phases such as planning, design, development, testing, deployment, and maintenance. Each phase is designed to systematically guide the development process, ensuring that the software meets business requirements, is built efficiently, and is thoroughly tested.&lt;/p&gt;

&lt;p&gt;The SDLC knowledge is essential for &lt;strong&gt;IT professionals&lt;/strong&gt; as it fosters collaboration, ensures efficient project planning, and aids in quality and risk management. It helps non-developers communicate better with developers, supports compliance and security, and makes it easier to adapt to Agile and DevOps practices. This shared understanding enables all teams to contribute effectively, improving overall project success.&lt;/p&gt;

&lt;p&gt;SDLC and DevOps are connected through their shared focus on quality, speed, and collaboration. While SDLC structures development phases, DevOps adds automation and continuous feedback, allowing faster, higher-quality releases and seamless integration across teams. Together, they streamline workflows and improve delivery efficiency.&lt;/p&gt;

&lt;h2&gt;
  
  
  II. What is Software Development Life Cycle (SDLC)?
&lt;/h2&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%2Ffmaha14qrklovwsqel0v.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%2Ffmaha14qrklovwsqel0v.png" alt="Software Development Life Cycle" width="314" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  A. Definition and importance
&lt;/h3&gt;

&lt;p&gt;The Software Development Life Cycle (SDLC) is a comprehensive methodology that provides a structured framework for software development projects. It encompasses the complete process from initial planning through maintenance of the finished application. SDLC defines a series of phases, each with specific deliverables and activities, ensuring systematic and efficient software development.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Project Planning and Control&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Establishes clear project roadmap&lt;/li&gt;
&lt;li&gt;Enables effective resource allocation&lt;/li&gt;
&lt;li&gt;Ensures systematic development approach&lt;/li&gt;
&lt;li&gt;Facilitates cost estimation and control&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Quality and Risk Management&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Ensures systematic testing at each phase&lt;/li&gt;
&lt;li&gt;Early identification of potential issues&lt;/li&gt;
&lt;li&gt;Maintains consistent quality standards&lt;/li&gt;
&lt;li&gt;Improves end-product reliability&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Team Collaboration and Efficiency&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Clearly defined roles and responsibilities&lt;/li&gt;
&lt;li&gt;Improved team communication&lt;/li&gt;
&lt;li&gt;Optimized resource utilization&lt;/li&gt;
&lt;li&gt;Enhanced project transparency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The implementation of SDLC in software development projects has become increasingly crucial in today's rapidly evolving technological landscape. Organizations that follow this structured approach consistently deliver higher quality products while maintaining better control over project timelines and budgets. The framework not only helps in managing current development processes but also establishes a foundation for future improvements and scalability. By providing clear guidelines and checkpoints throughout the development process, SDLC ensures that all stakeholders remain aligned with project goals while maintaining quality standards. This systematic approach has proven particularly valuable in complex projects where multiple teams need to coordinate effectively, ultimately leading to more successful software deployments and higher customer satisfaction rates. The flexibility of SDLC also allows organizations to adapt their development processes to changing business needs while maintaining structure and efficiency in their operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  III. The SDLC Phases in Detail
&lt;/h2&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%2Fhhvgl8zgf30dk3zbpfzw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhhvgl8zgf30dk3zbpfzw.jpg" alt="Software Development Life Cycle" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  A. Planning Phase
&lt;/h3&gt;

&lt;p&gt;The Planning Phase is the foundational step in the Software Development Life Cycle (SDLC), focused on defining project objectives, understanding user needs, and mapping out a high-level roadmap for development. It sets the direction for the entire project, making it essential for aligning all stakeholders and ensuring clear, achievable goals. This phase typically includes the following key activities:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Requirement Gathering&lt;/strong&gt;: Identifying and documenting the needs of stakeholders through interviews and workshops to clarify software goals and features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customer Feedback Collection&lt;/strong&gt;: Gathering insights from potential users to ensure the software meets real-world needs and expectations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Market Research&lt;/strong&gt;: Analyzing competitor products and industry trends to guide feature development and set the software apart.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creating Software Requirement Specification (SRS)&lt;/strong&gt;: Documenting all requirements in a detailed guide for developers and stakeholders to ensure alignment and clarity.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  B. Design Phase
&lt;/h3&gt;

&lt;p&gt;The Design Phase transforms requirements into a comprehensive blueprint for the software system. It involves creating both high-level and detailed technical specifications that guide developers through implementation. This phase bridges the gap between requirements and actual development, ensuring a structured approach to building the system. This phase typically includes the following key activities:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;System Architecture Design&lt;/strong&gt;: Creating the overall structure of the system, including component relationships and technology stack decisions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database Schema Planning&lt;/strong&gt;: Designing data models and relationships to efficiently store and manage application data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interface Design&lt;/strong&gt;: Developing user interface mockups and API specifications to define how users and systems will interact.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security Architecture&lt;/strong&gt;: Planning security measures and compliance requirements to protect system and user data.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  C. Building Phase
&lt;/h3&gt;

&lt;p&gt;The Building Phase, also known as the development phase, is where the actual software construction takes place. Developers transform design documents into functional code while following established coding standards and best practices. This phase brings the theoretical plans into reality through careful implementation. This phase typically includes the following key activities:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Code Development&lt;/strong&gt;: Writing clean, efficient code based on design specifications and requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version Control Management&lt;/strong&gt;: Maintaining code organization through Git repositories and branching strategies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Review Process&lt;/strong&gt;: Implementing peer review practices to ensure code quality and knowledge sharing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unit Testing&lt;/strong&gt;: Creating and executing tests to verify individual component functionality.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  D. Testing Phase
&lt;/h3&gt;

&lt;p&gt;The Testing Phase focuses on validating the software's functionality, performance, and reliability. Through systematic testing approaches, the team ensures the software meets quality standards and user requirements before deployment. This crucial phase helps identify and resolve issues early in the development cycle. This phase typically includes the following key activities:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Test Planning&lt;/strong&gt;: Creating comprehensive test strategies and test cases to cover all aspects of the software.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality Assurance&lt;/strong&gt;: Executing various types of testing including functional, performance, and security testing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bug Tracking&lt;/strong&gt;: Identifying, documenting, and managing defects through their lifecycle to resolution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User Acceptance Testing&lt;/strong&gt;: Validating that the software meets business requirements through end-user testing.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  E. Deployment Phase
&lt;/h3&gt;

&lt;p&gt;The Deployment Phase marks the transition of software from development to production environment. It involves careful planning and execution to ensure smooth delivery to end users while maintaining system stability and performance. This phase requires close coordination between development, operations, and support teams. This phase typically includes the following key activities:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Release Planning&lt;/strong&gt;: Preparing deployment strategies and rollback procedures for safe releases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment Setup&lt;/strong&gt;: Configuring production infrastructure and security measures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User Training&lt;/strong&gt;: Providing documentation and training materials for end users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring Setup&lt;/strong&gt;: Implementing tools and procedures for system monitoring and performance tracking.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  F. Maintenance Phase
&lt;/h3&gt;

&lt;p&gt;The Maintenance Phase ensures the software continues to perform optimally after deployment. It focuses on ongoing support, updates, and improvements based on user feedback and system performance data. This phase is crucial for the software's long-term success and user satisfaction. This phase typically includes the following key activities:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Production Support&lt;/strong&gt;: Providing ongoing technical support and issue resolution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance Optimization&lt;/strong&gt;: Monitoring and improving system performance based on usage patterns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feature Enhancement&lt;/strong&gt;: Implementing new features and updates based on user feedback and business needs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security Updates&lt;/strong&gt;: Maintaining system security through regular patches and updates.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  IV. DevOps Integration in SDLC
&lt;/h2&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%2Fcb1ju5h1e3wctpgcorfr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcb1ju5h1e3wctpgcorfr.jpg" alt="Software Development Life Cycle" width="792" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  A. Key focus areas for DevOps engineers
&lt;/h3&gt;

&lt;p&gt;The Key Focus Areas for DevOps Engineers represents the core responsibilities and priorities that drive successful DevOps implementation within the SDLC. DevOps engineers bridge the gap between development and operations, focusing on automation, continuous integration, and delivery to streamline the entire development process. This domain includes critical activities essential for modern software development practices:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Building Automation&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Implementing CI/CD pipelines&lt;/li&gt;
&lt;li&gt;Automating code compilation and packaging&lt;/li&gt;
&lt;li&gt;Setting up automated dependency management&lt;/li&gt;
&lt;li&gt;Configuring build triggers and notifications&lt;/li&gt;
&lt;li&gt;Managing build artifacts and versioning&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Testing Automation&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Creating automated test suites&lt;/li&gt;
&lt;li&gt;Implementing continuous testing practices&lt;/li&gt;
&lt;li&gt;Setting up automated test environments&lt;/li&gt;
&lt;li&gt;Managing test data and configurations&lt;/li&gt;
&lt;li&gt;Integrating security testing automation&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Deployment Automation&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Creating infrastructure as code&lt;/li&gt;
&lt;li&gt;Implementing automated deployment scripts&lt;/li&gt;
&lt;li&gt;Managing configuration automation&lt;/li&gt;
&lt;li&gt;Setting up environment provisioning&lt;/li&gt;
&lt;li&gt;Automating rollback procedures&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  B. How DevOps improves SDLC
&lt;/h3&gt;

&lt;p&gt;The DevOps Improvement in SDLC focuses on transforming traditional software development practices through automation, collaboration, and continuous improvement. This integration enhances various aspects of the development lifecycle, leading to more efficient and reliable software delivery. The key improvements include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Reducing Manual Intervention&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Automating repetitive tasks&lt;/li&gt;
&lt;li&gt;Implementing self-service capabilities&lt;/li&gt;
&lt;li&gt;Standardizing processes across teams&lt;/li&gt;
&lt;li&gt;Reducing human error through automation&lt;/li&gt;
&lt;li&gt;Creating automated validation checks&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Improving Efficiency&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Streamlining workflow processes&lt;/li&gt;
&lt;li&gt;Optimizing resource utilization&lt;/li&gt;
&lt;li&gt;Implementing parallel processing&lt;/li&gt;
&lt;li&gt;Reducing bottlenecks&lt;/li&gt;
&lt;li&gt;Enhancing team collaboration&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Faster Delivery&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Implementing continuous integration&lt;/li&gt;
&lt;li&gt;Enabling continuous deployment&lt;/li&gt;
&lt;li&gt;Reducing deployment time&lt;/li&gt;
&lt;li&gt;Automating release processes&lt;/li&gt;
&lt;li&gt;Minimizing time-to-market&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Quality Assurance&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Implementing automated testing&lt;/li&gt;
&lt;li&gt;Maintaining consistent environments&lt;/li&gt;
&lt;li&gt;Ensuring security compliance&lt;/li&gt;
&lt;li&gt;Monitoring system performance&lt;/li&gt;
&lt;li&gt;Facilitating continuous feedback&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  V. Practical Example: E-commerce Platform
&lt;/h2&gt;

&lt;h3&gt;
  
  
  A. Real-world scenario
&lt;/h3&gt;

&lt;p&gt;An e-commerce platform wants to add a Kids’ Section to attract a new customer demographic. Here’s how SDLC and DevOps come into play:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Requirement Gathering (SDLC)&lt;/strong&gt;: The team collects input from stakeholders and customers to define features like categories (clothing, toys) and design preferences. This is documented in the Software Requirement Specification (SRS).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design (SDLC)&lt;/strong&gt;: The architecture is planned, and details like database changes and UI/UX design are finalized for the Kids’ section.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Development (SDLC &amp;amp; DevOps)&lt;/strong&gt;: Developers write the code for the new section. DevOps tools like version control (Git) and continuous integration (CI) ensure regular updates, automated testing, and error-free integration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing (SDLC &amp;amp; DevOps)&lt;/strong&gt;: The QA team tests the new features. DevOps ensures continuous testing and quick feedback through automated processes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment (SDLC &amp;amp; DevOps)&lt;/strong&gt;: The feature is deployed using continuous delivery (CD) tools, ensuring a smooth and timely release. Monitoring tools ensure everything runs smoothly post-deployment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintenance (SDLC &amp;amp; DevOps)&lt;/strong&gt;: The Kids’ section is maintained with ongoing performance monitoring and regular updates, ensuring scalability and customer satisfaction.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By combining SDLC for structured development and DevOps for automation and continuous feedback, the platform efficiently adds the Kids’ section while maintaining quality and reducing risks.&lt;/p&gt;

&lt;h2&gt;
  
  
  VI. Conclusion
&lt;/h2&gt;

&lt;p&gt;Incorporating the Software Development Life Cycle (SDLC) and DevOps into a development project ensures a structured, efficient, and high-quality approach to building software. By following the clear stages of SDLC—planning, design, development, testing, deployment, and maintenance—teams can deliver products that meet both business requirements and customer expectations. The integration of DevOps practices enhances this process by promoting automation, continuous integration, and faster feedback loops, ultimately accelerating development while maintaining high standards.&lt;/p&gt;

&lt;p&gt;As demonstrated through the practical example of adding a Kids’ section to an e-commerce platform, combining SDLC with DevOps not only streamlines development but also ensures that the final product is scalable, reliable, and responsive to user needs. In today’s fast-paced digital world, mastering these methodologies is crucial for IT professionals to deliver innovative, high-quality software that stands out in a competitive market.&lt;/p&gt;

&lt;p&gt;If you'd like to connect and learn together, you can find me on &lt;a href="https://www.linkedin.com/in/shubhamku044/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; and &lt;a href="https://x.com/shubhamku044" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;. Let's help each other grow! 🚀&lt;/p&gt;

&lt;p&gt;Thank you for reading this article! I would love to hear your thoughts and experiences with DevOps in the comments below. Did you find this helpful? What aspects of DevOps would you like to learn more about? Drop a comment and let's discuss! 💭&lt;br&gt;
Your feedback helps me create better content for the community. 🙏&lt;/p&gt;

</description>
      <category>devops</category>
      <category>sdlc</category>
      <category>puppet</category>
      <category>developer</category>
    </item>
    <item>
      <title>DevOps Fundamentals: Breaking Down the Culture, Tools, and Practices</title>
      <dc:creator>Shubham Sharma</dc:creator>
      <pubDate>Sun, 03 Nov 2024 05:44:55 +0000</pubDate>
      <link>https://forem.com/shubhamku044/devops-fundamentals-breaking-down-the-culture-tools-and-practices-4egj</link>
      <guid>https://forem.com/shubhamku044/devops-fundamentals-breaking-down-the-culture-tools-and-practices-4egj</guid>
      <description>&lt;h2&gt;
  
  
  What is DevOps?
&lt;/h2&gt;

&lt;p&gt;DevOps is a culture that improves the organizational ability to &lt;strong&gt;deliver&lt;/strong&gt; the application.&lt;/p&gt;

&lt;p&gt;Let me give you an example: Imagine an issue on &lt;a href="https://shubhams.dev" rel="noopener noreferrer"&gt;shubhams.dev&lt;/a&gt;. Once the development team fixes the problem, the DevOps practices ensure that the changes can be deployed quickly and reliably to production.&lt;/p&gt;

&lt;p&gt;Usually, people think, &lt;strong&gt;DevOps &amp;lt;--&amp;gt; CI/CD&lt;/strong&gt;(improving delivery). In fact &lt;strong&gt;DevOps&lt;/strong&gt; is &lt;strong&gt;Improving Delivery&lt;/strong&gt;, but it consists of many different things.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;DevOps&lt;/strong&gt; is a process of &lt;strong&gt;improving application&lt;/strong&gt; delivery by ensuring there is proper automation in place, quality maintaining, continuous monitoring an continuous testing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why DevOps?
&lt;/h2&gt;

&lt;p&gt;So, many years ago when DevOps was not there then the process was much tedious, explain below👇&lt;/p&gt;

&lt;p&gt;System Admins -&amp;gt; They used to create servers&lt;/p&gt;

&lt;p&gt;Developer -&amp;gt; They put the code to some central location(Servers / VM ware)&lt;/p&gt;

&lt;p&gt;Tester -&amp;gt; They used to test the application which is present on the server&lt;/p&gt;

&lt;p&gt;BRE(Build and Release Engineer) -&amp;gt; They take forward to production or pre-production&lt;/p&gt;

&lt;p&gt;This process took too much time because of the different teams. So, After DevOps, this process became fast and smooth&lt;/p&gt;

&lt;h2&gt;
  
  
  How to introduce yourself?
&lt;/h2&gt;

&lt;p&gt;Mention your developer experience, Other experience also like &lt;em&gt;system admin&lt;/em&gt;, &lt;em&gt;BRE&lt;/em&gt;, &lt;em&gt;server admin&lt;/em&gt;, &lt;em&gt;java dev&lt;/em&gt;, &lt;em&gt;python dev&lt;/em&gt; etc.&lt;br&gt;
Also mention What you did, for example - &lt;em&gt;automation check&lt;/em&gt;, &lt;em&gt;quality check&lt;/em&gt;, &lt;em&gt;monitoring of application&lt;/em&gt;, &lt;em&gt;testing&lt;/em&gt; etc.&lt;br&gt;
You should also mention the tools you were using like &lt;em&gt;GitHub Action&lt;/em&gt; for CI/CD, &lt;em&gt;Kubernetes&lt;/em&gt; for container orchestration, &lt;em&gt;Ansible&lt;/em&gt;, &lt;em&gt;Terraform&lt;/em&gt; etc.&lt;/p&gt;

&lt;p&gt;If you'd like to connect and learn together, you can find me on &lt;a href="https://www.linkedin.com/in/shubhamku044/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; and &lt;a href="https://x.com/shubhamku044" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;. Let's help each other grow! 🚀&lt;/p&gt;

&lt;p&gt;Thank you for reading this article! I would love to hear your thoughts and experiences with DevOps in the comments below. Did you find this helpful? What aspects of DevOps would you like to learn more about? Drop a comment and let's discuss! 💭&lt;br&gt;
Your feedback helps me create better content for the community. 🙏&lt;/p&gt;

</description>
      <category>devops</category>
      <category>devchallenge</category>
      <category>docker</category>
      <category>puppet</category>
    </item>
    <item>
      <title>Setup ReactJs + TS + Styled-Componets + Redux</title>
      <dc:creator>Shubham Sharma</dc:creator>
      <pubDate>Mon, 27 Mar 2023 18:57:40 +0000</pubDate>
      <link>https://forem.com/shubhamku044/setup-reactjs-ts-styled-componets-redux-580d</link>
      <guid>https://forem.com/shubhamku044/setup-reactjs-ts-styled-componets-redux-580d</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;In this blog tutorial, we will see how we can setup a &lt;a href="https://react.dev/" rel="noopener noreferrer"&gt;ReactJs&lt;/a&gt; project with &lt;a href="https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html" rel="noopener noreferrer"&gt;Typescript&lt;/a&gt;, &lt;a href="https://styled-components.com/" rel="noopener noreferrer"&gt;styled-components&lt;/a&gt; and &lt;a href="https://redux-toolkit.js.org/" rel="noopener noreferrer"&gt;redux toolkit&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  ReactJs
&lt;/h2&gt;

&lt;p&gt;React is a popular open-source JavaScript library for building user interfaces. React allows developers to build reusable UI components that can be used to create complex user interfaces. React uses a declarative syntax and a virtual DOM to efficiently update the UI when data changes. React can be used for both client-side and server-side rendering and can be integrated with other libraries and frameworks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Typescript
&lt;/h2&gt;

&lt;p&gt;TypeScript is a programming language and a typed superset of JavaScript that adds optional static type checking, classes, interfaces, enums, and other features to JavaScript. TypeScript can help improve code quality and maintainability, catch errors at compile time rather than at runtime, and provide better tooling and editor support for large codebases. It is widely adopted in the industry for building scalable and maintainable applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Styled-components
&lt;/h2&gt;

&lt;p&gt;Styled Components is a popular open-source library for styling components in React applications. It allows developers to write CSS code as part of their component code using a unique syntax that is similar to regular CSS but is scoped to the specific component. This allows for easy and efficient styling of components and helps to avoid naming conflicts and specificity issues. Styled Components also support dynamic styles based on props and theming.&lt;/p&gt;

&lt;h2&gt;
  
  
  Redux-toolkit
&lt;/h2&gt;

&lt;p&gt;Redux Toolkit is an official opinionated collection of utilities and best practices designed to simplify the development of Redux applications. It includes pre-configured tools that help developers write clean, concise, and maintainable Redux code. Redux Toolkit provides an easy-to-use API for creating Redux slices, which are small, self-contained pieces of the Redux store that manage a specific piece of state and associated logic.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Ensure that Node.js is installed on your machine. If it is not installed, you can download and install it by &lt;a href="https://nodejs.org/en" rel="noopener noreferrer"&gt;clicking here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Now you need a package manager, either &lt;code&gt;npm&lt;/code&gt; or &lt;code&gt;yarn&lt;/code&gt;, &lt;code&gt;npm&lt;/code&gt; comes by default with node installation. You can install yarn by writing this in your bash  or shell.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#for windows&lt;/span&gt;
npm i &lt;span class="nt"&gt;-g&lt;/span&gt; yarn

&lt;span class="c"&gt;# for macOs/linux&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;npm i &lt;span class="nt"&gt;-g&lt;/span&gt; yarn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Creating react app with vite
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm create vite
&lt;span class="c"&gt;#or &lt;/span&gt;
yarn create vite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fl8kmy1lf629z58blycfs.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%2Fl8kmy1lf629z58blycfs.png" alt="React Js, typescript, react-redux, styled-components" width="755" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnfqmo8eqvx3t84t7wl7l.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%2Fnfqmo8eqvx3t84t7wl7l.png" alt="React Js, typescript, react-redux, styled-components" width="778" height="616"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg1v8mlr1vnkinyfgg6qo.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%2Fg1v8mlr1vnkinyfgg6qo.png" alt="React Js, typescript, react-redux, styled-components" width="778" height="616"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpar0j0z2flh4yy59afb9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpar0j0z2flh4yy59afb9.jpg" alt="React Js, typescript, react-redux, styled-components" width="778" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2m0qfwrylg0a9rqdw0xq.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%2F2m0qfwrylg0a9rqdw0xq.png" alt="React Js, typescript, react-redux, styled-components" width="800" height="662"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;project-name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn
yarn dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we are done with the installing &lt;code&gt;ReactJs&lt;/code&gt; with &lt;code&gt;Typescript&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The folder structure should look like this for now&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%2Fstf28rjj2o4fd25g7142.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%2Fstf28rjj2o4fd25g7142.png" alt="Folder structrue" width="396" height="614"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now We are going to delete &lt;code&gt;App.css&lt;/code&gt; and &lt;code&gt;index.css&lt;/code&gt;,&lt;/p&gt;

&lt;h3&gt;
  
  
  Installation and setup of styled-components
&lt;/h3&gt;

&lt;p&gt;Now let's install &lt;code&gt;styled-components&lt;/code&gt;. So to install &lt;code&gt;styled-components&lt;/code&gt; you need to write.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add styled-components
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We will be creating &lt;code&gt;components&lt;/code&gt;, &lt;code&gt;pages&lt;/code&gt; and a &lt;code&gt;styles&lt;/code&gt; folder inside &lt;code&gt;src&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;components&lt;/code&gt; will be for writing reusable components.&lt;br&gt;
&lt;code&gt;pages&lt;/code&gt; directory contains the main pages of the application&lt;br&gt;
&lt;code&gt;styles&lt;/code&gt; gonna contain the styles of components and pages&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── src/
│ ├── assets/
│ ├── components/
│ ├── pages/
│ ├── styles/
│ │ ├── global.ts
│ │ └── theme.ts
│ ├── App.tsx
│ └── main.tsx
│ └── vite-env.d.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;global.ts&lt;/code&gt; is going to contain global styles for web-app and the &lt;code&gt;theme.ts&lt;/code&gt; will contain the variables that we can use in writing style.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// theme.ts&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#f1faee&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;secondary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#457b9d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;tertiary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#a8dadc&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#1d3557&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#f1faee&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;primaryTextColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#594F43&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;secondaryTextColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#777777&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;inputPlaceholder&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#C7C7C7&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;darkGrayText&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#303030&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;darkText&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#f1faee&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;black&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#000000&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;white&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#ffffff&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;paddings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;container&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;15px&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;pageTop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;30px&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;fonts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0.8rem&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;sm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0.9rem&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;base&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1rem&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;md&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1.2rem&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// global.ts&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createGlobalStyle&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;styled-components&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ThemeType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Record&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;GlobalStyles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;createGlobalStyle&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ThemeType&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="s2"&gt;`
*,
*::before,
*::after {
  box-sizing: border-box;
}

html {
  font-size: 100%;
}

body {
  margin: 0;
  padding: 0;
  overflow-x: hidden;
  min-height: 100vh;
  text-rendering: optimizeSpeed;
  font-family: 'Lato', sans-serif;
  font-size: 1rem;
  line-height: 1;
  background-color: &lt;/span&gt;&lt;span class="p"&gt;${({&lt;/span&gt; &lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;background&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;;
  color: &lt;/span&gt;&lt;span class="p"&gt;${({&lt;/span&gt; &lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;;
}

h1,
h2,
h3,
h4,
h5,
h6,
p,
ul,
figure,
blockquote,
dl,
dd {
  padding: 0;
  margin: 0;
}
button {
  border: none;
  background-color: transparent;
  font-family: inherit;
  padding: 0;
  cursor: pointer;
}
/* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */
ul[role="list"],
ol[role="list"] {
  list-style: none;
}
li {
  list-style-type: none;
}
/* Set core root defaults */
html:focus-within {
  scroll-behavior: smooth;
}
/* A elements that don't have a class get default styles */
a:not([class]) {
  text-decoration-skip-ink: auto;
}

a {
  text-decoration: none;
}

/* Make images easier to work with */
img,
picture {
  max-width: 100%;
  display: block;
}

/* Inherit fonts for inputs and buttons */
input,
button,
textarea,
select {
  font: inherit;
}
/* Remove all animations, transitions and smooth scroll for people that prefer not to see them */
@media (prefers-reduced-motion: reduce) {
  html:focus-within {
    scroll-behavior: auto;
  }

  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

#root {
  min-height: 100vh;
}
`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;after this, you need to add this to your &lt;code&gt;main.ts&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ReactDOM&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-dom/client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./App&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;GlobalStyles&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./styles/global&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./styles/theme&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ThemeProvider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;styled-components&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;ReactDOM&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createRoot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;root&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;HTMLElement&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;StrictMode&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ThemeProvider&lt;/span&gt; &lt;span class="nx"&gt;theme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;GlobalStyles&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/ThemeProvider&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/React.StrictMode&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;,
&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Installation and setup of redux for state management
&lt;/h3&gt;

&lt;p&gt;Now we need to install redux,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add @reduxjs/toolkit react-redux
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We will be creating another folder &lt;code&gt;store&lt;/code&gt; inside &lt;code&gt;src&lt;/code&gt;, so our new &lt;code&gt;src&lt;/code&gt; will look like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── src/
│ ├── assets/
│ ├── components/
│ ├── pages/
│ ├── styles/
│ │ ├── global.ts
│ │ └── theme.ts
│ ├── store/
│ │ ├── actions/
│ │ ├── reducers/
│ │ └── index.ts
│ ├── App.tsx
│ └── main.tsx
│ └── vite-env.d.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And this &lt;code&gt;store&lt;/code&gt; is going to contain the code related to state management of the web application.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;store/index.ts&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/* The code is taken from redux toolkit website */&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;configureStore&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@reduxjs/toolkit&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;configureStore&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;reducer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// reducers.&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Infer the `RootState` and `AppDispatch` types from the store itself&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;RootState&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;ReturnType&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getState&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;// Inferred type: {posts: PostsState, comments: CommentsState, users: UsersState}&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;AppDispatch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dispatch&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;main.tsx&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ReactDOM&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-dom/client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./App&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;GlobalStyles&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./styles/global&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./styles/theme&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ThemeProvider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;styled-components&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./store&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Provider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-redux&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;ReactDOM&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createRoot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;root&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;HTMLElement&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;StrictMode&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ThemeProvider&lt;/span&gt; &lt;span class="nx"&gt;theme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;GlobalStyles&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Provider&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Provider&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/ThemeProvider&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/React.StrictMode&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;,
&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's all.&lt;/p&gt;

&lt;p&gt;If you have any question, drop a comment below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://shubhams.dev" rel="noopener noreferrer"&gt;Shubham&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>typescript</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Introduction to CI/CD</title>
      <dc:creator>Shubham Sharma</dc:creator>
      <pubDate>Mon, 12 Dec 2022 17:48:03 +0000</pubDate>
      <link>https://forem.com/shubhamku044/introduction-to-cicd-4baf</link>
      <guid>https://forem.com/shubhamku044/introduction-to-cicd-4baf</guid>
      <description>&lt;h1&gt;
  
  
  CI/CD
&lt;/h1&gt;

&lt;p&gt;CI/CD, short for Continuous Integration and Continuous Delivery/Deployment, is a software development practice that aims to automate and improve the process of building, testing, and releasing software. By utilizing a CI/CD pipeline, developers can quickly and consistently deliver high-quality software that is ready for deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continuous Integration
&lt;/h2&gt;

&lt;p&gt;Continuous Integration (CI) is a software development practice where developers regularly merge their code changes into a central repository. Each merge is then verified by an automated build, allowing teams to detect problems early.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continuous Delivery
&lt;/h2&gt;

&lt;p&gt;Continuous Delivery (CD) is a software development practice where code changes are automatically built, tested, and prepared for a release to production. CD aims to shorten the lead time between code changes and their release to production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continuous Deployment
&lt;/h2&gt;

&lt;p&gt;Continuous Deployment (CD) is a software development practice where code changes are automatically built, tested, and released to production. CD aims to shorten the lead time between code changes and their release to production.&lt;/p&gt;

&lt;h2&gt;
  
  
  CI/CD Pipeline
&lt;/h2&gt;

&lt;p&gt;A CI/CD pipeline is a set of automated processes that takes code from a version control repository and builds, tests, and deploys it to a production environment. The goal of a CI/CD pipeline is to automate the build, test, and release process.&lt;/p&gt;

&lt;p&gt;A CI/CD pipeline typically consists of several stages, each of which is responsible for a specific step in the software development process. These stages may include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Source code management&lt;/em&gt;: This stage is responsible for managing and storing the source code for the software. This may include tracking changes, managing branches, and performing code reviews.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Build&lt;/em&gt;: This stage is responsible for building the software from the source code. This may include compiling the code, running unit tests, and generating artifacts (such as executables or Docker images).&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Test&lt;/em&gt;: This stage is responsible for running automated tests on the software to ensure that it functions as expected. This may include unit tests, integration tests, and end-to-end tests.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Deploy&lt;/em&gt;: This stage is responsible for deploying the software to a staging or production environment. This may include pushing Docker images to a registry, deploying to a Kubernetes cluster, or releasing to a cloud platform.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Monitor&lt;/em&gt;: This stage is responsible for monitoring the deployed software to ensure that it is functioning properly. This may include tracking metrics, logging errors, and alerting on issues.&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/image1.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/image1.png" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To set up a CI/CD pipeline, developers first need to choose a CI/CD platform. There are many different options available. Some popular options include Jenkins, CircleCI, and GitLab.&lt;/p&gt;

&lt;p&gt;Once a platform has been chosen, developers need to configure the pipeline by defining the stages and the tasks that need to be performed in each stage. This can typically be done using a YAML file or a graphical interface provided by the CI/CD platform.&lt;/p&gt;

&lt;p&gt;For example, a simple CI/CD pipeline for a Node.js application might look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;stages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;build&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;test&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;deploy&lt;/span&gt;

&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;stage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;build&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;node:latest&lt;/span&gt;
    &lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;npm install&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;npm run build&lt;/span&gt;

&lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;stage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;node:latest&lt;/span&gt;
    &lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;npm run test&lt;/span&gt;

&lt;span class="na"&gt;deploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;stage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deploy&lt;/span&gt;
    &lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;docker build -t my-app .&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;docker push my-app&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This pipeline consists of three stages: build, test, and deploy. In the build stage, the source code is built using the npm install and npm run build commands. In the test stage, the software is tested using the npm test command. In the deploy stage, the software is built into a Docker image and pushed to a registry.&lt;/p&gt;

&lt;p&gt;Once the pipeline has been defined, developers can trigger a build by committing changes to the source code repository. This will automatically kick off the pipeline, running each stage in sequence. If any stage fails, the pipeline will stop and the developer will be notified of the issue.&lt;/p&gt;

&lt;p&gt;In addition to automating the software development process, a CI/CD pipeline can also provide many other benefits. For example, it can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensure that software is always delivered quickly and consistently&lt;/li&gt;
&lt;li&gt;Reduce the need for manual intervention and the risk of human error&lt;/li&gt;
&lt;li&gt;Allow developers to focus on writing code, rather than worrying about the deployment process&lt;/li&gt;
&lt;li&gt;Provide a clear view of the software development process,including any issues or failures&lt;/li&gt;
&lt;li&gt;Enable faster feedback, allowing developers to quickly address and fix problems&lt;/li&gt;
&lt;li&gt;Provide a consistent and predictable deployment process, making it easier to roll back or redeploy software if necessary&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  To get started with a CI/CD pipeline, follow these steps:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Choose a CI/CD platform. There are many different options available, each with its own strengths and weaknesses. Consider factors such as cost, features, and integration with other tools.&lt;/li&gt;
&lt;li&gt;Configure the pipeline by defining the stages and tasks that need to be performed in each stage. This can typically be done using a YAML file or a graphical interface provided by the CI/CD platform.&lt;/li&gt;
&lt;li&gt;Connect the pipeline to the source code repository. This will allow the pipeline to automatically trigger builds when changes are committed to the repository.&lt;/li&gt;
&lt;li&gt;Trigger a build by committing changes to the source code repository. This will kick off the pipeline and run each stage in sequence.&lt;/li&gt;
&lt;li&gt;Monitor the pipeline to ensure that it is running smoothly and address any issues or failures that may occur.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By following these steps, developers can quickly set up a CI/CD pipeline and start delivering high-quality software consistently and efficiently.&lt;/p&gt;

&lt;h3&gt;
  
  
  Thank You
&lt;/h3&gt;

&lt;p&gt;If you have any queries you can post in the comment.&lt;/p&gt;

&lt;p&gt;You can also connect with me on &lt;a href="https://www.linkedin.com/in/shubhamku044" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; and &lt;a href="https://twitter.com/shubhamku044" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>tutorial</category>
      <category>programming</category>
      <category>opensource</category>
    </item>
    <item>
      <title>What is Bootstrap? The best 2022 beginner's guide.</title>
      <dc:creator>Shubham Sharma</dc:creator>
      <pubDate>Mon, 21 Nov 2022 17:00:00 +0000</pubDate>
      <link>https://forem.com/documatic/what-is-bootstrap-the-best-2022-beginners-guide-19cp</link>
      <guid>https://forem.com/documatic/what-is-bootstrap-the-best-2022-beginners-guide-19cp</guid>
      <description>&lt;p&gt;For a few years now this has become an essential tool for frontend developers. For the rest of us, it’s just another coding buzzword we don’t understand.&lt;/p&gt;




&lt;h2&gt;
  
  
  But what is Bootstrap?
&lt;/h2&gt;

&lt;p&gt;So we know it’s useful, but what is it used for, and &lt;strong&gt;how does it really help web developers?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The web app development toolkit was created by former Twitter employees Mark Otto and Jacob Thornton.&lt;/p&gt;




&lt;h2&gt;
  
  
  The official Bootstrap website describes it as:
&lt;/h2&gt;

&lt;p&gt;“The most popular HTML, CSS, and JS framework for developing responsive, mobile-first projects on the web.”&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%2Fdgcuiaqazotzhpdoin01.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%2Fdgcuiaqazotzhpdoin01.png" alt="Bootstrap" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here’s what that means in plainer terms:&lt;/strong&gt;&lt;br&gt;
Bootstrap is a giant collection of handy, reusable bits of code written in HTML, CSS, and JavaScript. It’s also a frontend development framework that enables developers and designers to quickly build fully responsive websites.&lt;/p&gt;

&lt;p&gt;Essentially, Bootstrap saves you from writing lots of CSS code, giving you more time to spend on designing webpages.&lt;/p&gt;

&lt;p&gt;It’s also FREE!&lt;/p&gt;

&lt;p&gt;It’s currently hosted on &lt;strong&gt;GitHub&lt;/strong&gt; and can be downloaded easily from the official site.&lt;/p&gt;

&lt;p&gt;So, now that we know what it is, let’s take a closer look to see whether it’s useful for your web development work.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Why is Bootstrap the go-to for web developers?
&lt;/h2&gt;

&lt;p&gt;Let’s checkout the advantages down in parts:&lt;/p&gt;

&lt;h3&gt;
  
  
  Its responsive grid
&lt;/h3&gt;

&lt;p&gt;No more spending hours coding your own grid—Bootstrap comes with its own grid system predefined.&lt;/p&gt;

&lt;p&gt;Now, you can get straight to filling your containers with content.&lt;/p&gt;

&lt;p&gt;Defining custom breakpoints for each column is a snap using their extra small, small, medium, large, and extra large breaks. You can also simply stick to the default as it might already meet the needs of your site.&lt;/p&gt;

&lt;h3&gt;
  
  
  Its responsive images
&lt;/h3&gt;

&lt;p&gt;Bootstrap comes with its own code for automatically resizing images based on the current screen size. Just add the &lt;strong&gt;.img-responsive&lt;/strong&gt; class to your images, and the predefined CSS rules take care of the rest.&lt;/p&gt;

&lt;p&gt;Let Bootstrap resize your images for you!&lt;/p&gt;

&lt;p&gt;It can even change the shape of your images with the addition of classes like ** img-circle ** and ** img-rounded **, and that’s without going back and forth between the code and your design software.&lt;/p&gt;

&lt;h3&gt;
  
  
  Its components
&lt;/h3&gt;

&lt;p&gt;Bootstrap comes with a whole barrelful of components you can easily tack onto your web page, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigation bars&lt;/li&gt;
&lt;li&gt;Dropdowns&lt;/li&gt;
&lt;li&gt;Progress bars&lt;/li&gt;
&lt;li&gt;Thumbnails&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not only is it a breeze to add eye-catching design elements to your webpage, you’ll also be able to rest assured knowing that every one of them will look great no matter the screen size or device used to view them. That’s a lot of ready-made functionality right at your fingertips.&lt;/p&gt;

&lt;p&gt;For a more complete list of addable features, check out the component documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Its JavaScript
&lt;/h3&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%2F8uvljbjaueyooydy9ksj.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%2F8uvljbjaueyooydy9ksj.png" alt="Bootstrap" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Still not enough functions? Try &lt;a href="https://jquery.com/" rel="noopener noreferrer"&gt;JQuery&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Bootstrap also allows developers to take advantage of over a dozen custom JQuery plugins.&lt;/p&gt;

&lt;p&gt;This library gives you even more room to play with interactivity, offering up easy solutions for modal popups, transitions, image carousels, and—one of my personal favorites—a plugin called ** scrollspy **, which automatically updates your navigation bar as you scroll through a page.&lt;/p&gt;

&lt;h3&gt;
  
  
  Its documentation
&lt;/h3&gt;

&lt;p&gt;Simply put, Bootstrap’s documentation is some of the best we’ve ever seen. Every piece of code is described and explained in explicit detail on their website.&lt;/p&gt;

&lt;p&gt;Explanations also include code samples for basic implementation, simplifying the process for even the most beginner of beginners. All you need to do is choose a component, copy and paste the code into your page, and tweak from there.&lt;/p&gt;

&lt;h3&gt;
  
  
  Its customizability
&lt;/h3&gt;

&lt;p&gt;One of the main critiques when it comes to frameworks such as Bootstrap is their size—the weight they throw around can really slow down your application upon first load. The current version of Bootstrap’s CSS file, for example, is a whopping 119 KB. While this may not seem especially large compared to image and video files, for a CSS file, that’s enormous!&lt;/p&gt;

&lt;p&gt;What it allows you to do to combat this, however, is customize which functionality you want to include in your download. By simply going to their Customize and Download page, you can check off the features you won’t need for your application, trimming the weight off your file and saving your users the additional load time.&lt;/p&gt;

&lt;p&gt;Customization is key!&lt;/p&gt;

&lt;h3&gt;
  
  
  Its community
&lt;/h3&gt;

&lt;p&gt;As with so many open-source projects, Bootstrap has a large community of designers and developers behind it. Being hosted on GitHub makes it easy for developers to modify and contribute to Bootstrap’s codebase. It also makes it easy for people to collaborate, lend their advice, and interact with peers and fellow users.&lt;/p&gt;

&lt;p&gt;Bootstrap has an active Twitter page, a Bootstrap blog, and even a dedicated Slack room. And that doesn’t even get into the wealth of developers willing to help with technical problems on Stack Overflow, where all questions can be found under the bootstrap-4 tag.&lt;/p&gt;

&lt;h3&gt;
  
  
  Its external templates
&lt;/h3&gt;

&lt;p&gt;As its popularity grew, people started creating templates based on Bootstrap in order to accelerate the web development process even further. There are many websites out there dedicated to sharing and buying custom templates based on Bootstrap.&lt;/p&gt;

&lt;p&gt;Here are just a few:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;W3Schools Bootstrap templates&lt;/li&gt;
&lt;li&gt;Start Bootstrap templates&lt;/li&gt;
&lt;li&gt;Wrap Bootstrap templates&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Why might you avoid Bootstrap?
&lt;/h2&gt;

&lt;p&gt;By now, you’re probably thinking that using it is a no-brainer. But remember—there are two sides to every coin. Like almost everything in life, &lt;strong&gt;even Bootstrap has its downsides&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let’s take a quick look at some common complaints you might hear about Bootstrap:&lt;/p&gt;




&lt;h2&gt;
  
  
  “Its syntax is confusing!”
&lt;/h2&gt;

&lt;p&gt;Before you become familiar with Bootstrap, some of its syntax can be confusing. When using the grid system, for example, in order to make a column that takes up a third of the screen, you have to add the .col-md-4 class to it.&lt;/p&gt;

&lt;p&gt;“Wait—4? Where did this 4 come from?!”&lt;/p&gt;

&lt;p&gt;Undoubtedly, the four might lead you to believe the column would take up a quarter of the screen—not a third. While this syntax does make sense (Bootstrap uses a 12-column system, and 4 is a third of 12), it can be unintuitive for those new to the whole process.&lt;/p&gt;




&lt;h2&gt;
  
  
  “Its files are too big!”
&lt;/h2&gt;

&lt;p&gt;As mentioned earlier, Bootstrap files can be a bit, well, large to account for the sheer functionality offered by its framework. This can lead to an increase in load times for websites, especially on slower networks.&lt;/p&gt;

&lt;p&gt;Beginners might have a hard time identifying and fixing this issue; however, as mentioned above, the customize tool on Bootstrap’s website can help eliminate any unnecessary code for functions you’ll never use.&lt;/p&gt;

&lt;p&gt;So have it your way—just pick out the bits you need and leave the rest. (Of course, this task gets easier the more you know about coding!)&lt;/p&gt;

&lt;h2&gt;
  
  
  “It keeps me from actually learning code!”
&lt;/h2&gt;

&lt;p&gt;There’s always the risk that, by using Bootstrap, you’ll get into a cycle of simply recycling existing code without actually understanding it. This is the same as using Node.js and other tools before learning JavaScript itself. By spending the time to really learn what you’re doing, however, you can use Bootstrap as a way of accelerating your learning, rather than hindering it.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Wrapping it all up
&lt;/h2&gt;

&lt;p&gt;As you’ve probably noticed by now, Bootstrap is a powerful tool that allows a developer to get up and running quickly and painlessly. It makes it easy to integrate many great features that enrich a user’s interaction with the web without having to code them from scratch.&lt;/p&gt;

&lt;p&gt;Bootstrap is immensely popular and has been used to build some great websites. Don’t believe us? Check out &lt;a href="https://www.mongodb.com/" rel="noopener noreferrer"&gt;MongoDB’s&lt;/a&gt; website, the &lt;a href="https://www.nasa.gov/" rel="noopener noreferrer"&gt;NASA&lt;/a&gt; website, or even &lt;a href="https://www.fifa.com/" rel="noopener noreferrer"&gt;FIFA’s&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What You Should Do Now
&lt;/h2&gt;

&lt;p&gt;If you want to become a web developer then first of all you need to follow this roadmap to achieve success.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learn HTML&lt;/li&gt;
&lt;li&gt;Learn CSS&lt;/li&gt;
&lt;li&gt;Learn JavaScript&lt;/li&gt;
&lt;li&gt;Build Projects&lt;/li&gt;
&lt;li&gt;Learn Advanced JS(OOPS, AJAX, Promises, currying, closures, etc)&lt;/li&gt;
&lt;li&gt;Learn Bootstrap or Tailwind &lt;/li&gt;
&lt;li&gt;Build Projects&lt;/li&gt;
&lt;li&gt;Learn Any Frontend Framework(Reactjs)&lt;/li&gt;
&lt;li&gt;Clone your Favourite Website.&lt;/li&gt;
&lt;li&gt;Learn Backend Framework(Django or Nodejs or anyone)&lt;/li&gt;
&lt;li&gt;Start building real-world web apps&lt;/li&gt;
&lt;li&gt;Revise and Repeat&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;If you like our post, please give it a like and follow our page for more blogs.&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%2F0jqiavcwwt3fzn0lo51s.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%2F0jqiavcwwt3fzn0lo51s.png" alt="Thank You" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tooling</category>
    </item>
    <item>
      <title>What is Bcrypt. How to use it to hash passwords</title>
      <dc:creator>Shubham Sharma</dc:creator>
      <pubDate>Thu, 17 Nov 2022 09:01:00 +0000</pubDate>
      <link>https://forem.com/documatic/what-is-bcrypt-how-to-use-it-to-hash-passwords-5c0g</link>
      <guid>https://forem.com/documatic/what-is-bcrypt-how-to-use-it-to-hash-passwords-5c0g</guid>
      <description>&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%2Fepuacmigi25fc22kjnke.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%2Fepuacmigi25fc22kjnke.png" alt="Javascript" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The bcrypt npm package is a JavaScript implementation of the bcrypt password hashing function that allows you to easily create a hash out of a password string. Unlike encryption which you can decode to get back the original password, hashing is a one-way function that can’t be reversed once done.&lt;/p&gt;

&lt;p&gt;When the user submits a password, the password will be hashed and your JavaScript application needs to store the hash in the database. Later when the user wants to authenticate his or her account, you need to compare the password input with the hash stored in your database to see if it matches.&lt;/p&gt;

&lt;p&gt;The bcrypt library makes the process easy by providing you with methods to hash and compare passwords.&lt;/p&gt;

&lt;p&gt;** To start using the library, you need to install it with your package manager: **&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;bcrypt
&lt;span class="c"&gt;# or&lt;/span&gt;
yarn add bcrypt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;** Then include the module to your JavaScript code with require: **&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bcrypt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Creating a password hash with bcrypt
&lt;/h2&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%2Fvah3wuvad8vivs8k5wbe.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%2Fvah3wuvad8vivs8k5wbe.png" alt="Password" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To generate a password using the bycrypt module, you need to call on the &lt;code&gt;hash()&lt;/code&gt; method which accepts the following three parameters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The password string that you wish to hash&lt;/li&gt;
&lt;li&gt;The number of rounds to secure the hash. The number commonly 
ranges from 5 to 15&lt;/li&gt;
&lt;li&gt;The callback function to execute when the hash process is finished, passing along the error message and the hash result&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s an example of &lt;code&gt;bcrypt.hash()&lt;/code&gt; processing the password string "generic":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bcrypt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;generic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// TODO: Store the hash in your password DB&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or you can use the synchronous method equivalent called hashSync():&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bcrypt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myPlaintextPassword&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;generic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hashSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myPlaintextPassword&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Generating salt for the hash
&lt;/h2&gt;

&lt;p&gt;A hashing function requires you to add salt into the process. A salt is simply a random data that’s used as an additional input to the hashing function to safeguard your password. The random string from the salt makes the hash unpredictable.&lt;/p&gt;

&lt;p&gt;In the code examples above, the salt is auto-generated by bcrypt module, but you can actually generate the salt first before hashing the password.&lt;/p&gt;

&lt;p&gt;To generate a salt, you can use the &lt;code&gt;genSalt()&lt;/code&gt; method from the module:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bcrypt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;genSalt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;salt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;salt&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// the random salt string&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you have the salt, you can pass it to the hash() method as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bcrypt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;genSalt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;salt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;generic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;salt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// Store hash in your password DB.&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There’s also a synchronous equivalent for the method called genSaltSync():&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;salt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;genSaltSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hashSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;generic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;salt&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that there’s no differences on the resulting hash whether you generate a salt separately or automatically, but the CPU usage may be lowered when you separate the salt generation and the hash process. You should test if your NodeJS server can handle auto-generating the salt and hash first before separating them.&lt;/p&gt;

&lt;h2&gt;
  
  
  A note on the salt round number
&lt;/h2&gt;

&lt;p&gt;The salt generation for your hash function can range from a few seconds to many days, depending on how many rounds you passed. The bcrypt module will go through 2^rounds to generate the salt to give you a secure hash.&lt;/p&gt;

&lt;p&gt;According to the &lt;a href="https://github.com/kelektiv/node.bcrypt.js#a-note-on-rounds" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;, here’s the amount of time to process the salt generation on a 2GHz core computer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;rounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8 : ~40 hashes/sec
&lt;span class="nv"&gt;rounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;9 : ~20 hashes/sec
&lt;span class="nv"&gt;rounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10: ~10 hashes/sec
&lt;span class="nv"&gt;rounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;11: ~5  hashes/sec
&lt;span class="nv"&gt;rounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;12: 2-3 hashes/sec
&lt;span class="nv"&gt;rounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;13: ~1 sec/hash
&lt;span class="nv"&gt;rounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;14: ~1.5 sec/hash
&lt;span class="nv"&gt;rounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;15: ~3 sec/hash
&lt;span class="nv"&gt;rounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;25: ~1 hour/hash
&lt;span class="nv"&gt;rounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;31: 2-3 days/hash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The number is just an estimation, so you may want to test the highest rounds with the fastest generation time that your server can support.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verifying a password with bcrypt
&lt;/h2&gt;

&lt;p&gt;Once you saved the hash to the database, you can compare the user’s plain text input with the stored hash using the &lt;code&gt;compare()&lt;/code&gt; method.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;compare()&lt;/code&gt; method accepts three parameters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The plain string password for comparison&lt;/li&gt;
&lt;li&gt;The hash string created earlier&lt;/li&gt;
&lt;li&gt;And the callback function once the comparison process is 
finished&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The method will pass the error err object and the boolean value result, telling you whether the comparison matches or not.&lt;/p&gt;

&lt;p&gt;Here’s an example of the &lt;code&gt;compare()&lt;/code&gt; method in action:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bcrypt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;generic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// The hash returned, continue to compare&lt;/span&gt;
  &lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;generic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;generic:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// generic: true&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;falsy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;falsy:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// falsy: false&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The module also provides the synchronous method compareSync for you to use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bcrypt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myPlaintextPassword&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;generic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hashSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myPlaintextPassword&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compareSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myPlaintextPassword&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the comparison is finished, you need to provide the right authentication code according to the returned result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using promise or async/await instead of callback function
&lt;/h2&gt;

&lt;p&gt;Finally, bcrypt module also supports the use of promise and async/await code style, so you can use them instead of callbacks to make your code cleaner.&lt;/p&gt;

&lt;p&gt;Here’s an example of using promises in the hash process:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bcrypt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;bcrypt&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;generic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;generic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;generic:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// generic: true&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And another example using the async/await style:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bcrypt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;passwordHashTest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;passwordHashTest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;generic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// test the async function&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that’s how the bcrypt module in NodeJS works ;)&lt;/p&gt;

&lt;p&gt;If you like our blog post then please follow our page and give a like to this post.&lt;/p&gt;

&lt;p&gt;Thanks.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>tutorial</category>
      <category>webdev</category>
      <category>node</category>
    </item>
    <item>
      <title>Top 10 ways to become a self-taught developer</title>
      <dc:creator>Shubham Sharma</dc:creator>
      <pubDate>Mon, 07 Nov 2022 17:05:35 +0000</pubDate>
      <link>https://forem.com/documatic/top-10-ways-to-become-a-self-taught-developer-5gig</link>
      <guid>https://forem.com/documatic/top-10-ways-to-become-a-self-taught-developer-5gig</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Hello fellow newbies and self-taught developers, As a rookie, what are your challenges in learning?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My biggest challenges as a self-taught in development were:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No clear path and vision&lt;/li&gt;
&lt;li&gt;Lack of structures&lt;/li&gt;
&lt;li&gt;No one to hold me accountable&lt;/li&gt;
&lt;li&gt;No proper guidance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I was learning alone. No one was there to guide me or share my problems and frustrations. Whenever I get confused and burned out, I procrastinate for days, even weeks, to cool down.&lt;br&gt;
Does it sound familiar to you?&lt;/p&gt;

&lt;p&gt;I learned it the hard way, but you don't have to go through what I've been through. Or at least you can avoid spending your time on things that I wish I knew sooner and could do better.&lt;br&gt;
I hope this advice can help and guide you as new self-taught developers.&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%2F4q4elgtqcvk7xnrz0zhg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4q4elgtqcvk7xnrz0zhg.jpg" alt="Image description" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Find your field of interest.
&lt;/h2&gt;

&lt;p&gt;As a self-taught developer and a newbie, I got interested in a few different development fields.&lt;br&gt;
I was at crossroads between choosing to pursue data science or web development.&lt;/p&gt;

&lt;p&gt;I learned Python first because I heard that it is a beginner-friendly language. So what can go wrong?&lt;br&gt;
It took me almost two months, and I didn't go far beyond 20% of the programming because it didn't click. And I got frustrated.&lt;/p&gt;

&lt;p&gt;Rather than stick to my learning, I switched to the other course.&lt;br&gt;
I am a visual person.&lt;br&gt;
So the fact that I could see "Hello World" rendered on the page for the first time with HTML made my heart jump with excitement.&lt;br&gt;
After trying a couple of languages, I found where my bigger interest lies.&lt;/p&gt;

&lt;p&gt;You can read &lt;a href="https://roadmap.sh/" rel="noopener noreferrer"&gt;this developer roadmap&lt;/a&gt; to give you clearer insight if you haven't found your niche.&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%2Fhjba78trk5d6wm979nff.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhjba78trk5d6wm979nff.jpg" alt="Fev" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  2. Stick to your choice and go deep
&lt;/h1&gt;

&lt;p&gt;After trying several languages and finding your niche, stick and go deep into it. Get good at it.&lt;br&gt;
As it takes a lot of time and effort to be a successful programmer so, go deep as you can and try to become a master at one portion or a language.&lt;br&gt;
Once you find the best fit for you then start with it.&lt;/p&gt;

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




&lt;h1&gt;
  
  
  3. Find your best time to learn and create a structure
&lt;/h1&gt;

&lt;p&gt;I started to learn to code alone.&lt;br&gt;
At that time, learning in the morning or during the day was almost impossible.&lt;br&gt;
So outside her nap time, I found another time that works for me. And it is around 10:00 PM after everybody in the house sleeps.&lt;br&gt;
Most of the time, I'm already exhausted. But I will intrigue myself to sit and learn for at least half-hour, which usually will increase to one or two hours.&lt;br&gt;
And the learning structure that works for me is to practice what I've learned the day before. Then I add one or two new topics daily instead of cramming some new knowledge.&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%2Fj86cudq5nj5iixmffrk5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj86cudq5nj5iixmffrk5.jpg" alt="Structure" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  4. Don't memorize the code just understand how things work
&lt;/h1&gt;

&lt;p&gt;Yes, don't memorize the code just try to understand how code works and internal behaviour so you will get a deep knowledge.&lt;br&gt;
Good to know: Senior developers would still google things.&lt;br&gt;
Because no one knows everything.&lt;br&gt;
Try to understand the concept and the flow.&lt;/p&gt;

&lt;p&gt;And google the rest, also the syntaxes, when you get lost as in the programming world every individual does googling every day to find his/her answers so, that’s not the issue.&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%2Fv6to1b4yyz37ns4kagun.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv6to1b4yyz37ns4kagun.jpg" alt="Things" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  5. Ask questions or help
&lt;/h1&gt;

&lt;p&gt;I was uncomfortable asking questions because I felt like my questions were "very beginner" or it was "stupid questions." Or I could get, "Have you Google it?".&lt;br&gt;
Little did I know that those thoughts were only playing in my head.&lt;/p&gt;

&lt;p&gt;It took me a long time to finally threw my first question.&lt;br&gt;
And when I finally did, it wasn't as bad as I thought.&lt;br&gt;
The first time I asked a question, I threw it on Twitter. To my surprise, I received answers, and some people even offered to walk through the codes with me.&lt;/p&gt;

&lt;p&gt;The courses that I took provide Discord channels for their students.&lt;br&gt;
I started to feel more confident in asking questions or asking for help when I needed it there.&lt;br&gt;
So don't hesitate!&lt;br&gt;
When you get stuck for some time, ask for help.&lt;/p&gt;

&lt;p&gt;It could be on Twitter or on the Discord channels where you at.&lt;br&gt;
This journey is supposed to be enjoyable, make you grow, and not make you frustrated for too long or even quit.&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%2Fijg16pr8c3kwpcirba8l.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fijg16pr8c3kwpcirba8l.jpg" alt="Questions" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Create projects
&lt;/h2&gt;

&lt;p&gt;A piece of advice that's always been given after learning something is, "Go build a project!".&lt;br&gt;
Self-taught is often get trapped in tutorial hell.&lt;br&gt;
It's a good practice that we code along with a tutorial rather than only watching and doing nothing.&lt;/p&gt;

&lt;p&gt;But when it comes to building a project from scratch, there would be times when we don't even know where to start. Then we find ourselves getting back to a tutorial.&lt;/p&gt;

&lt;p&gt;When you have an idea for a project, build it and learn things on the go.&lt;br&gt;
But when you don't know what to build, try replicating the tutorial's project without playing it back. Even better, try to add some more features to the project. When you get stuck, google your problems to find solutions. &lt;/p&gt;

&lt;p&gt;Give yourself half to one hour to search for it. And only after you searched in that time frame and still don't find any solution, ask for help or look back at the tutorial.&lt;br&gt;
Don't let yourself get lost for too long and get demotivated.&lt;/p&gt;

&lt;p&gt;Another tip, when you build a project, breaking tasks into smaller chunks would help you to finish your project quickly and you won't feel bored as this technique is called &lt;strong&gt;Divide and Conquer&lt;/strong&gt; in DSA. &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%2Fjt37rp6u3by056450oe9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjt37rp6u3by056450oe9.jpg" alt="Projects" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Research for Jobs related to your skills
&lt;/h2&gt;

&lt;p&gt;Is your goal to land a job in the web development field?&lt;br&gt;
Then, before you go much further in your learning, you better research job demands in your area.&lt;/p&gt;

&lt;p&gt;My goal is to land a job as a full-stack developer.&lt;br&gt;
I learned by following the course's lessons — HTML, CSS, JavaScript, MongoDB, Express, and NodeJS without a front-end framework.&lt;/p&gt;

&lt;p&gt;After I finished the course six months later, someone gave me the advice to do my research on web developer jobs in my area.&lt;br&gt;
They said it would help me pick which front-end framework I need to learn since I haven't discovered one.&lt;/p&gt;

&lt;p&gt;The result was heartbreaking!&lt;br&gt;
The on-demand front-end jobs in my area are React and Angular, while the backend is Java, PHP, and .NET (C#).&lt;/p&gt;

&lt;p&gt;Based on my research, the backend stack that I've learned wasn't on-demand.&lt;br&gt;
So a slight change of plan has to be made.&lt;br&gt;
React is what I'm learning now to be a front-end developer.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Find a popular and active community
&lt;/h2&gt;

&lt;p&gt;When you are in a positive and supportive community, you will gain much more than if you are alone.&lt;/p&gt;

&lt;p&gt;You have people who genuinely care for you and support your journey. You can ask questions, get help when needed, and have the whole community hold you accountable.&lt;/p&gt;

&lt;p&gt;You can also help others who need your support in any way.&lt;br&gt;
With community, you will gain confidence and grow faster.&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%2Fk7htisb9xpa2w3xxsf9w.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk7htisb9xpa2w3xxsf9w.jpg" alt="Strength" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Be patient and kind to yourself
&lt;/h2&gt;

&lt;p&gt;Learning to code is hard for everyone.&lt;br&gt;
There would be times when you have a hard time understanding a concept. There would be lots of times when you have trouble finding solutions. You might cross paths with imposter syndrome.&lt;br&gt;
When they come, don't be too hard on yourself.&lt;/p&gt;

&lt;p&gt;Take a break.&lt;br&gt;
Pat yourself on the back.&lt;br&gt;
Remember, where you are today is one step ahead of where you were yesterday.&lt;br&gt;
Don't compare yourself with anybody else.&lt;br&gt;
The only comparison is who and where you are now and before.&lt;br&gt;
Be kind to yourself, always.&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%2Fc0g8aw5ybsxxdnsauyh8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc0g8aw5ybsxxdnsauyh8.jpg" alt="Productive" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Last but not the least
&lt;/h2&gt;

&lt;p&gt;Be patient and consistent as it takes a lot of time and effort to be a champ as no one becomes a master in one day. It takes time to build a great personality. &lt;br&gt;
Just trust the process.&lt;/p&gt;

&lt;p&gt;I hope you find the above tips helpful, and I wish you a pleasant journey in your learning 😊.&lt;/p&gt;

&lt;p&gt;Feel free to add your tips and experience as a self-taught developer in the comment below.&lt;br&gt;
Thanks for reading.&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%2Fyobsato32o049f96oq97.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyobsato32o049f96oq97.jpg" alt="Thanks" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>career</category>
    </item>
    <item>
      <title>How to find open-source projects to contribute to</title>
      <dc:creator>Shubham Sharma</dc:creator>
      <pubDate>Sun, 06 Nov 2022 03:08:20 +0000</pubDate>
      <link>https://forem.com/documatic/how-to-find-open-source-projects-to-contribute-to-455m</link>
      <guid>https://forem.com/documatic/how-to-find-open-source-projects-to-contribute-to-455m</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In this article, we are going to see &lt;code&gt;how you can find open-source communities to contribute to&lt;/code&gt; and &lt;code&gt;why you should care about open-source&lt;/code&gt;. Open source not only improves your technical skills but also your communication and networking skills. So you can get jobs, clients and the money that you deserve.&lt;/p&gt;

&lt;p&gt;It is also very important if you want to land a very high-paying job then if you mention it in your resume then you will have a much higher chance to get hired.&lt;/p&gt;

&lt;p&gt;A very common problem people face is finding the right project to contribute to, but don't worry it happens to most people who want to get started with open-source contributions.&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%2Fbv4cc0w0vxr24uw138q4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbv4cc0w0vxr24uw138q4.jpg" alt="Stock image" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What are open-source projects?
&lt;/h2&gt;

&lt;p&gt;An open-source project is a type of project with source code in which you can inspect, modify and implement some new ideas. It is just like social coding.&lt;br&gt;
Basically, it means, it's free to use and free to access to modify.&lt;br&gt;
In GitHub people can not only comment on your code, and fork your code to share it but they can also contribute back to the project by adding some features to it or by fixing some bugs, Just like StackOverFlow where all the developers provide answers to the various problems posted by another developer. A lot of open-source projects are available on popular hosting sites like &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, &lt;a href="https://gitlab.com/users/sign_in" rel="noopener noreferrer"&gt;GitLab&lt;/a&gt; or &lt;a href="https://sourceforge.net/" rel="noopener noreferrer"&gt;SourceForge&lt;/a&gt;.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Why one should contribute to open-source projects?
&lt;/h2&gt;

&lt;p&gt;You should care about open-source because you're probably using a lot of open-source tools and projects, and it's great you're are using these amazing open-source tools but they are only there available because people like you who contribute to them.&lt;br&gt;
It's an inclusive community and you get to know and collaborate with people around the world.&lt;/p&gt;

&lt;p&gt;Some more advantages are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improves your problem-solving skills.&lt;/li&gt;
&lt;li&gt;Improves your technical skills.&lt;/li&gt;
&lt;li&gt;Helps to gather information about a specific topic.&lt;/li&gt;
&lt;li&gt;You will get Industry level experience.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  What are examples of some open-source projects?
&lt;/h3&gt;

&lt;p&gt;There are many open-source projects out there, and many of them are likely tools you have used before. These are some popular products that you may be surprised to know are open source.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Android is an open-source operating system in which we can implement our own ideas.&lt;/li&gt;
&lt;li&gt;Linux is an open-source kernel and we see so many servers that run Linux.&lt;/li&gt;
&lt;li&gt;You may be familiar with JQuery, a JavaScript library that provides many front-end capabilities like animation, less code writing, transformation and much more.&lt;/li&gt;
&lt;li&gt;Our popular version control system Git, is fittingly the best example of open-source software.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  How this will benefit your career?
&lt;/h2&gt;

&lt;p&gt;Open source is a great way to get real-world software development experience from the comfort of your home. It will enhance your resume very much. You'll get to put on some really big projects that you contributed to. You get the satisfaction that your written code is being used by people around the world.&lt;br&gt;
You get to know networking and making connections from around the world, the internal working of the project, a productive mindset and good communication skills.&lt;br&gt;
You will get good level experience that how actually it works. It will also give a good impression when you discuss your contribution in public.&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%2F8m5ftwzlggg7c8ad7r6s.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8m5ftwzlggg7c8ad7r6s.jpg" alt="Image description" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to get involved in open source.
&lt;/h2&gt;

&lt;p&gt;The source code for open-source projects is available to anyone -- from the developer just starting out to the developer with decades of experience. So you can contribute at any point in your development career and become a member of the open-source community! Here are a few things to look out for as you search for an open-source project to get involved with.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to look for in the project?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;An open-source license.&lt;/li&gt;
&lt;li&gt;Easy to read and unambiguous documentation.&lt;/li&gt;
&lt;li&gt;Recent activity.&lt;/li&gt;
&lt;li&gt;Activity community or any medium to discuss.&lt;/li&gt;
&lt;li&gt;Tagged issues and features to implement.&lt;/li&gt;
&lt;li&gt;Piques your interest.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ideas to contribute to open-source.
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Update documentation&lt;/li&gt;
&lt;li&gt;Post an issue if you find any.&lt;/li&gt;
&lt;li&gt;Fix accessibility issues.&lt;/li&gt;
&lt;li&gt;Make the descriptive clean and inclusive.&lt;/li&gt;
&lt;li&gt;Use the project to build something useful.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Prerequisites are git, programming &lt;br&gt;
language of your choice and the tech stack of your choice. e.g Web dev, android development, iOS development, blockchain and machine learning etc. You don't need to be an expert, if you have basic to medium knowledge of your tech stack you can definitely contribute.&lt;/p&gt;

&lt;p&gt;** Bonus Tip ** You can also learn some new technologies at this stage such as you can learn iOS development using Swift or Objective C and also it is a demanded skill.&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%2Fju43puy4i5bamzbxyoso.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fju43puy4i5bamzbxyoso.jpg" alt="Image description" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to find projects/communities to contribute?
&lt;/h2&gt;

&lt;p&gt;You are not alone if you are wondering where to get started. It can be overwhelming to start coding without knowing what to build or what it takes to build a project.&lt;br&gt;
The best way to find a project is by going backwards and forward and searching for the issues rather than searching for a project directly. The project maintainers who are looking for contributors usually add labels to some issues.&lt;/p&gt;

&lt;p&gt;If you are just starting out your open-source journey, then I would suggest you go with &lt;code&gt;good first issue&lt;/code&gt; labelled issues. And here is a list of some websites where you can find these &lt;code&gt;good first issues&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.firsttimersonly.com/" rel="noopener noreferrer"&gt;First Timers Only&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.goodfirstissue.dev/" rel="noopener noreferrer"&gt;Good First Issue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://project-awesome.org/MunGell/awesome-for-beginners" rel="noopener noreferrer"&gt;Beginners&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you already have a project in mind, then it's best to carefully look at the issues with the label and whether it suits your tech stack or not, And if the answer is yes, then you are good to go.&lt;br&gt;
Hope I have covered your all doubts regarding this topic. If you have any queries, you can directly reach out to me on &lt;a href="https://twitter.com/shubhamku044" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or &lt;a href="https://linkedin.com/in/shubhamku044" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading this blog.&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%2Fzcy16woodtro0szlyzzk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzcy16woodtro0szlyzzk.jpg" alt="Image description" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>career</category>
    </item>
    <item>
      <title>Important JavaScript Array method</title>
      <dc:creator>Shubham Sharma</dc:creator>
      <pubDate>Tue, 11 Oct 2022 17:28:05 +0000</pubDate>
      <link>https://forem.com/shubhamku044/important-javascript-array-method-15oj</link>
      <guid>https://forem.com/shubhamku044/important-javascript-array-method-15oj</guid>
      <description>&lt;p&gt;Hello Developers,&lt;/p&gt;

&lt;p&gt;While coding you definitely need arrays somewhere in your code. and if you have used arrays, you must know how to work loop over arrays.&lt;br&gt;
So, basically in this blog, we are going to learn about the most used javascript array method. Yes, you have guessed it correctly, it's the &lt;code&gt;map()&lt;/code&gt; method.&lt;/p&gt;
&lt;h2&gt;
  
  
  map()
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/ldQ4wHy0I_8?start=13"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Remember all the points written below, so you will never confuse about when and where to use the &lt;code&gt;map()&lt;/code&gt; method.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It is used to iterate over an array, it's just like forEach() and for of loop.&lt;/li&gt;
&lt;li&gt;It does not mutate the original array.&lt;/li&gt;
&lt;li&gt;It returns a new array.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Syntax
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;// it takes a callback function&lt;/span&gt;
&lt;span class="c1"&gt;// array.map(callbackFn())&lt;/span&gt;

&lt;span class="c1"&gt;// parameters of callback function&lt;/span&gt;
&lt;span class="c1"&gt;// 1. callbackFn(element)&lt;/span&gt;
&lt;span class="c1"&gt;// 2. callbackFn(element, index)&lt;/span&gt;
&lt;span class="c1"&gt;// 3. callbackFn(element, index, arrary)    the 3rd one is the original array where we are using map()&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We are going to learn javascript &lt;code&gt;map()&lt;/code&gt; with 3 questions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Question 1
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Create a new array based on the given array with twice every element.&lt;/span&gt;
&lt;span class="c1"&gt;// double [2, 6, 4, 16, 18, 10, 2, 14]&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;doubledArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;myArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Question 2
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Create a new array based on the given array with the sum of index + element at that index.&lt;/span&gt;
&lt;span class="c1"&gt;// double [1, 4, 4, 11, 18, 10, 2, 14]&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Question 3
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// create a new array based on the given array object, the new array should contain &lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;fName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;John&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;lName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Doe&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;fName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Julia&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;lName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Green&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;fName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Thomas&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;lName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Freguson&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;fName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Jane&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;lName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Smith&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;fName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Maria&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;lName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Reese&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newItems&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;// ['John Doe', 'Julia Green', 'Thomas Freguson', 'Jane Smith', 'Maria Reese']&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hope you have understood when to use the &lt;code&gt;map()&lt;/code&gt; method in javascript&lt;/p&gt;

&lt;p&gt;If you have any queries you can post in the comment.&lt;/p&gt;

&lt;p&gt;You can also connect with me on &lt;a href="https://www.linkedin.com/in/shubhamku044" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; and &lt;a href="https://twitter.com/shubhamku044" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>High-level overview of Javascript</title>
      <dc:creator>Shubham Sharma</dc:creator>
      <pubDate>Thu, 06 Oct 2022 14:17:05 +0000</pubDate>
      <link>https://forem.com/shubhamku044/high-level-overview-of-javascript-em8</link>
      <guid>https://forem.com/shubhamku044/high-level-overview-of-javascript-em8</guid>
      <description>&lt;p&gt;Javascript is a &lt;strong&gt;&lt;code&gt;high-level&lt;/code&gt;&lt;/strong&gt; &lt;strong&gt;&lt;code&gt;prototyped-based object oriented&lt;/code&gt;&lt;/strong&gt; &lt;strong&gt;&lt;code&gt;multi-paradigm&lt;/code&gt;&lt;/strong&gt; &lt;strong&gt;&lt;code&gt;interpreted or just-in-time compiled&lt;/code&gt;&lt;/strong&gt; &lt;strong&gt;&lt;code&gt;dynamic&lt;/code&gt;&lt;/strong&gt; &lt;strong&gt;&lt;code&gt;single-threaded&lt;/code&gt;&lt;/strong&gt; &lt;strong&gt;&lt;code&gt;garbage-collected&lt;/code&gt;&lt;/strong&gt; programming language with &lt;strong&gt;&lt;code&gt;first-class functions&lt;/code&gt;&lt;/strong&gt; and a non-blocking &lt;strong&gt;&lt;code&gt;event loop concurrency model&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  High-Level
&lt;/h2&gt;

&lt;p&gt;Every program on your computer needs hardware resources such as memory and the CPU to do its work. Now, there are low-level languages, such as C where you have to manually manage these resources. e.g asking the computer for memory to create a new variable. on the other side, you have high-level languages such as javascript and python, where we do not have to manage resources at all because these languages have so-called abstractions that take all of the work away from us. This makes the language easier to learn and use, but the downside is that programs will never be as fast or as optimised as C programs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Garbage collected
&lt;/h2&gt;

&lt;p&gt;Garbage collection is basically an algorithm inside the javascript engine that automatically removed old, unused objects from the computer memory to avoid clogging it up with necessary stuff. So it's a bit like JavaScript has a cleaning guy who cleans our memory from time to time so that we don't have to manually do it in our code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Interpreted or just-in-time compiled
&lt;/h2&gt;

&lt;p&gt;As we know that the computer’s processor only understands zeros and ones, that’s right. Ultimately, every single program needs to be written in zeros and ones which is also called machine code. And since that’s not really practical to write. We simply write human-readable javascript code, which is an abstraction over machine code, but this code eventually needs to be translated to machine code. And that step can be either compiling or interpreting. This step is necessary in every single programming language because no one writes machine code manually, in the case of javascript, this happens inside the javascript engine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi paradigm
&lt;/h2&gt;

&lt;p&gt;A paradigm is an approach and mindset to structuring code, which will direct your coding style and technique. eg. Procedural programming, object-oriented programming and functional programming. Now, many languages are only procedural or only object-oriented or only functional, but JavaScript does all of it. So it's really flexible and versatile. And so we can do really whatever we want with it. It's our choice. We can use whatever paradigm we want. &lt;/p&gt;

&lt;h2&gt;
  
  
  Prototype-based object-oriented
&lt;/h2&gt;

&lt;p&gt;So about the object-oriented nature of Javascript, it is a prototype-based, object-oriented approach. Well, first almost everything in javascript is an object, except for primitive values such as numbers, strings etc. but arrays, e.g are just objects. Have you ever wondered why we can create an array and then use the push method on it? Well, it’s because of prototypal inheritance. Basically, we create arrays from an array blueprint, which is like a template and this is called the prototype. This prototype contains all the array methods and the arrays that we create in our code and then inherit the methods from the blueprint so that we can use them on the arrays. &lt;/p&gt;

&lt;h2&gt;
  
  
  First-class function
&lt;/h2&gt;

&lt;p&gt;It just simply means that functions are treated as regular variables., So we can pass functions into other functions and this is extremely powerful because it allows us to use a lot of powerful techniques and also allows for functional programming&lt;/p&gt;

&lt;h2&gt;
  
  
  Dynamic
&lt;/h2&gt;

&lt;p&gt;Dynamic actually means dynamically typed, in javascript we don’t assign data types to variables. Instead, they only became known when the javascript executes out code. Also, the type of variables can be easily changed as we reassign variables, and this is basically whey dynamically typed means.&lt;/p&gt;

&lt;h2&gt;
  
  
  Single-threaded &amp;amp; Non-blocking event loop
&lt;/h2&gt;

&lt;p&gt;It just means that javascript can do one thing at one time. So basically, the thread is where our code is actually executed in a machine’s processor. all Right. But what if there is a long-running task? like fetching data from a remote server? Well, it sounds like that would block the single thread where the code is running. But of course, we don’t want that.  What we want is so-called non-blocking behaviour. Well by using a so-called event loop. The event loop takes long-running tasks, executes them in the background and then puts them in the background and then puts them back in the main thread once they are finished.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Source: &lt;a href="https://www.udemy.com/course/the-complete-javascript-course/" rel="noopener noreferrer"&gt;Jonas Schmedtmann Udemy Course&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Feel free to connect me on &lt;a href="https://linkedin.com/in/shubhamku044" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;, &lt;a href="https://twitter.com/shubhamku044" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; and &lt;a href="https://shubhams.dev/" rel="noopener noreferrer"&gt;My website&lt;/a&gt;&lt;/p&gt;

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