<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sebastian Messier</title>
    <description>The latest articles on DEV Community by Sebastian Messier (@sbmsr).</description>
    <link>https://dev.to/sbmsr</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%2F811126%2F9c03549e-1ce8-47c9-91f3-7c9a5571bea5.png</url>
      <title>DEV Community: Sebastian Messier</title>
      <link>https://dev.to/sbmsr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sbmsr"/>
    <language>en</language>
    <item>
      <title>How I Build Forms Quickly in React</title>
      <dc:creator>Sebastian Messier</dc:creator>
      <pubDate>Wed, 03 Aug 2022 18:28:00 +0000</pubDate>
      <link>https://dev.to/sbmsr/the-best-react-form-library-2022-4621</link>
      <guid>https://dev.to/sbmsr/the-best-react-form-library-2022-4621</guid>
      <description>&lt;p&gt;Forms are everywhere in web apps. Whenever you log in, make a post on social media, or buy something online, you’re using a form.&lt;/p&gt;

&lt;p&gt;Despite their ubiquity, building forms requires a lot of attention and care. Form fields should only accept specific types of data, perform validations, and show errors on invalid input. As more fields are added, the complexity of the form grows.&lt;/p&gt;

&lt;p&gt;This work is repetitive and tiring. Wouldn’t it be great if we could make form building trivial?&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter RJSF
&lt;/h2&gt;

&lt;p&gt;I’ve &lt;a href="https://react-hook-form.com/"&gt;tried&lt;/a&gt; &lt;a href="https://formik.org/"&gt;lots&lt;/a&gt; &lt;a href="https://react-hook-form.com/"&gt;of&lt;/a&gt; &lt;a href="https://github.com/final-form/react-final-form"&gt;form&lt;/a&gt; &lt;a href="https://github.com/tannerlinsley/react-form"&gt;libraries&lt;/a&gt;, but none solve the burden of easy, rapid form building as well as &lt;a href="https://github.com/rjsf-team/react-jsonschema-form"&gt;RJSF&lt;/a&gt; does.&lt;/p&gt;

&lt;p&gt;What makes forms difficult is the management of JSX, state, validations, and errors. As you add more fields, you also need to manage more of the aforementioned things, which can get overwhelming fast.&lt;/p&gt;

&lt;p&gt;RJSF solves this by being a declarative form builder. Instead of manually defining the form and validation logic, you describe your form using &lt;a href="https://json-schema.org/"&gt;json-schema&lt;/a&gt;, and RJSF handles the rest.&lt;/p&gt;

&lt;p&gt;I’ve been using it in production with my clients to great effect. To show you how it works, we’ll make a quick sign up form. Familiarity with json-schema is helpful, so here is a &lt;a href="https://json-schema.org/blog/posts/json-schema-in-5-minutes"&gt;5 minute primer&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making a Sign Up Form
&lt;/h2&gt;

&lt;p&gt;We first need to collect the user’s email and password. This is what the RJSF react code looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Form
  schema={{
    title: "Signup",
    properties: {
      email: {
        type: "string"
      },
      password: {
        type: "string"
      }
    }
 }}
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BqFA1CBg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/08/image-4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BqFA1CBg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/08/image-4.png" alt="" width="880" height="906"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From this small bit of code, RJSF has built a heading, text inputs, and submit button. Cool, but this is far from done. Some improvements we can make:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make email and password required fields&lt;/li&gt;
&lt;li&gt;Enforce minimum password length&lt;/li&gt;
&lt;li&gt;email field should only accept emails&lt;/li&gt;
&lt;li&gt;password input should be obfuscated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s add these in.&lt;/p&gt;

&lt;h3&gt;
  
  
  Make email and password required fields:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Form
  schema={{
    title: "Signup",
    properties: {
      email: {
        type: "string"
         },
      password: {
        type: "string"
      },
    },
    required: ["email", "password"]
  }}
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Enforce minimum password length
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Form
  schema={{
  title: "Signup",
  properties: {
    email: {
      type: "string"
    },
    password: {
      type: "string",
      minLength: 8
    },
  },
  required: ["email", "password"]
}}
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  email field should only accept emails
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Form
  schema={{
    title: "Signup",
    properties: {
      email: {
        type: "string"
      },
      password: {
        type: "string",
        minLength: 8
      },
    },
    required: ["email", "password"]
  }}
  uiSchema={{
    "email": {
      "ui:widget": "email"
    }
  }}
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  password input should be obfuscated itself
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Form
  schema={{
    title: "Signup",
    properties: {
      email: {
        type: "string"
      },
      password: {
        type: "string",
        minLength: 8
      },
    },
    required: ["email", "password"]
  }}
  uiSchema={{
    "email": {
      "ui:widget": "email"
    },
    "password": {
      "ui:widget": "password"
    }
  }}
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And here is the final result (&lt;a href="https://replit.com/@sbmsr/The-Best-React-Forms-Library?v=1#src/SignupForm.jsx"&gt;View the code here&lt;/a&gt;.)&lt;/p&gt;



&lt;p&gt;&lt;em&gt;RJSF supports HTML native error handling, as well as custom JS error handling.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Else Can RJSF Do?
&lt;/h2&gt;

&lt;p&gt;This is just scratching the surface. RJSF has much more to offer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Themes
&lt;/h3&gt;

&lt;p&gt;Native support for popular libraries like chakra, semantic-ui, material design, and &lt;a href="https://github.com/rjsf-team/react-jsonschema-form#supported-themes"&gt;more&lt;/a&gt;.&lt;/p&gt;



&lt;h3&gt;
  
  
  Complex Fields
&lt;/h3&gt;

&lt;p&gt;Multi-select dropdowns, check boxes, configurable lists, and much more are supported out of the box. If you need, you can also create your own &lt;a href="https://react-jsonschema-form.readthedocs.io/en/latest/advanced-customization/custom-widgets-fields/"&gt;custom form fields&lt;/a&gt;.&lt;/p&gt;



&lt;h4&gt;
  
  
  Custom Validations &amp;amp; Errors
&lt;/h4&gt;

&lt;p&gt;Add custom validations to your form. Here is a custom “password match” validation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Form 
  validate={(formData, errors) =&amp;gt; {
    if (formData.pass1 !== formData.pass2) {
      errors.pass2.addError("Passwords don't match");
    }
    return errors;
  }}
  schema={{
    type: "object",
    properties: {
      pass1: {type: "string", minLength: 3},
      pass2: {type: "string", minLength: 3},
    }
  }}
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;h2&gt;
  
  
  What are the RJSF Cons?
&lt;/h2&gt;

&lt;p&gt;While RJSF is great, it also comes with downsides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bundle Size&lt;/strong&gt;&lt;br&gt;
The RJSF core package is .25 MB, which is large! Upon close inspection, &lt;a href="https://bundlephobia.com/package/@rjsf/core@4.2.2"&gt;you can see that 33% of the bundle is attributed to the  AJV JSON Schema validation library&lt;/a&gt;. The maintainers are working on &lt;a href="https://github.com/rjsf-team/react-jsonschema-form/issues/869#issuecomment-1207286286"&gt;removing this dependency&lt;/a&gt; in a coming release.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Large Forms are Slow&lt;/strong&gt;&lt;br&gt;
I noticed this firsthand when building a dropdown with over 50 options. My form was super slow because of this. Reducing the options to ~15 seemed to solve it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;RJSF is fantastic if you're still figuring out the data your form is collecting. However, the docs mention that "if you have a priori knowledge of your data and want a toolkit for generating forms for it, you might want to look elsewhere".&lt;/p&gt;

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

&lt;p&gt;This was a quick dive into RJSF, my favorite react library for rapid form development.&lt;/p&gt;

&lt;p&gt;If you’d like to try it out, &lt;a href="https://rjsf-team.github.io/react-jsonschema-form/"&gt;check out this playground&lt;/a&gt;. It has tons of examples that show the power of RJSF. If you dig it, help the maintainers out by giving them a star on &lt;a href="https://github.com/rjsf-team/react-jsonschema-form"&gt;GitHub&lt;/a&gt;⭐&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The post &lt;a href="https://webdevwithseb.com/2022/08/03/the-best-react-form-library-2022/"&gt;The Best React Form Library (2022)&lt;/a&gt; first appeared on &lt;a href="https://webdevwithseb.com"&gt;💻 Web Dev With Seb&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>forms</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Sr Dev’s Thoughts on The Odin Project (Part 1)</title>
      <dc:creator>Sebastian Messier</dc:creator>
      <pubDate>Thu, 28 Apr 2022 20:08:25 +0000</pubDate>
      <link>https://dev.to/sbmsr/sr-devs-thoughts-on-the-odin-project-part-1-57c4</link>
      <guid>https://dev.to/sbmsr/sr-devs-thoughts-on-the-odin-project-part-1-57c4</guid>
      <description>&lt;p&gt;&lt;a href="https://youtu.be/s0BQCBC8GLI"&gt;&lt;strong&gt;&lt;em&gt;You can view the video version of this post here&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;👈&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.theodinproject.com/"&gt;The Odin Project&lt;/a&gt; is a free programming course that teaches full stack web development from the ground up. It’s immensely popular on &lt;a href="https://www.reddit.com/r/learnprogramming/"&gt;r/learnprogramming&lt;/a&gt;, where it’s generally recommended as the starting point for a beginner’s journey into software development.&lt;/p&gt;

&lt;p&gt;This is a two-part post covering my thoughts on the first part of the curriculum, titled &lt;a href="https://www.theodinproject.com/paths/foundations/courses/foundations"&gt;Foundations&lt;/a&gt;. The second part will cover the full stack section of the course.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aE5kudmz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/11/Pasted-Graphic-2.png%3Fresize%3D580%252C325%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aE5kudmz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/11/Pasted-Graphic-2.png%3Fresize%3D580%252C325%26ssl%3D1" alt='We will be focusing on the first half of the curriculum called "Foundations".' width="580" height="325"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;We will be focusing on the first half of the curriculum called “Foundations”.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There are three things I’m going to be sharing today.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;my impressions regarding the course and its content.&lt;/li&gt;
&lt;li&gt;Any gaps that I found in the course’s material&lt;/li&gt;
&lt;li&gt;Is it worth it from a sr dev’s perspective?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let’s jump right in. &lt;/p&gt;




&lt;h2&gt;
  
  
  What I Liked
&lt;/h2&gt;

&lt;p&gt;First things first, all the technology is covered in the foundation section are relevant today in 2022. I use my cli, git, Github, VSCode, and CSS primitives like flex box and flex grid on a daily basis. &lt;/p&gt;

&lt;p&gt;They also cover some more underrated topics very early in the course. Things like &lt;a href="https://developer.chrome.com/docs/devtools/"&gt;chrome dev tools&lt;/a&gt;, &lt;a href="https://www.aleksandrhovhannisyan.com/blog/atomic-git-commits/"&gt;atomic commits&lt;/a&gt;, and more advanced javascript patterns like &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters"&gt;default params&lt;/a&gt; and &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions"&gt;arrow functions&lt;/a&gt;. Getting you familiar with these less prominent features sooner rather than later will make your life much easier as a student of full stack web development. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Oad82DJU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/11/Pasted-Graphic-3.png%3Fresize%3D580%252C260%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Oad82DJU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/11/Pasted-Graphic-3.png%3Fresize%3D580%252C260%26ssl%3D1" alt="Tired of getting stuck in code issues? Chrome Dev Tools will help." width="580" height="260"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Tired of getting stuck in code issues? Chrome Dev Tools will help.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The most important of these are the chrome dev tools. They help you debug, modify, and tweak CSS styles all within the browser. If I’m being honest, a large chunk of my time building front ends is in the chrome dev tools. It makes me happy to see the Odin project mentioned these early in the curriculum. &lt;/p&gt;

&lt;p&gt;The last thing I loved about the Foundation section was how some lessons send you off to read documentation, blog posts and articles. I love this because it closely mirrors how software development works in the real world. Software developers spend a good amount of their time browsing documentation, reading blogs (and dare I say it), consulting Stack Overflow.&lt;/p&gt;

&lt;p&gt;The curriculum takes a similar approach here. Instead of giving you a complete resource, it asks you to consult various disparate sources and synthesize this information into knowledge and eventually code. This is essentially how software is built. I found this to be a very clever way to recreate this aspect of software development, which might go over many beginners heads.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I didn’t like
&lt;/h2&gt;

&lt;p&gt;Next up, I’m gonna be talking about some of the things I didn’t love about the Foundation section of the Odin project.&lt;/p&gt;

&lt;p&gt;I only had one issue with the curriculum, and that’s that it doesn’t talk about data structures and algorithms. My guess is that at the end of the day, they want you to learn how to build web apps as quickly as possible.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uDRaGdVt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/11/Pasted-Graphic-4.png%3Fresize%3D580%252C326%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uDRaGdVt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/11/Pasted-Graphic-4.png%3Fresize%3D580%252C326%26ssl%3D1" alt="_This book is a great primer on DSA. We will talk more about it later." width="580" height="326"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;This book is a great primer on DSA. We will talk more about it later.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That’s perfectly fine. But eventually you will need to learn data structures and algorithms at some point. Most jobs require you to pass a technical interview which test your knowledge of data structures and algorithms. While I’m personally not a fan of it, this is sadly the status quo in the industry, and it’s something we all have to deal with. &lt;/p&gt;




&lt;h2&gt;
  
  
  What are the Gaps?
&lt;/h2&gt;

&lt;p&gt;So now that we’ve covered my first impressions of the course, we’re going to move on to some of the gaps.&lt;/p&gt;

&lt;p&gt;I was pleasantly surprised to find very few gaps in the course. Foundations has all of the web dev fundamentals covered. If I was forced to pick a gap, I think the obvious ones are the lack of data structure and algorithms content. &lt;/p&gt;

&lt;p&gt;A decent resource here is a book called “&lt;a href="https://amzn.to/3zG2lrv"&gt;Cracking the Coding Interview&lt;/a&gt;“. It gives you a very quick rundown of various data structures and algorithms and how to use them effectively in coding interviews and the real world. &lt;/p&gt;

&lt;p&gt;The foundations also lack advanced content regarding the CLI, Git and CSS frameworks like &lt;a href="https://tailwindcss.com/"&gt;Tailwind CSS&lt;/a&gt;, &lt;a href="https://sass-lang.com/"&gt;Sass&lt;/a&gt;, or &lt;a href="https://chakra-ui.com/"&gt;Chakra&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;I think this is intentional in order to avoid overwhelming you. But if you’re ready for it, I think taking a deeper look at some of these technologies is a good idea.&lt;/p&gt;

&lt;p&gt;For the CLI, I recommend checking out something called &lt;a href="https://ohmyz.sh/"&gt;Oh My Zsh&lt;/a&gt;. It’s something that I use every day in my terminal and it provides really cool features like plug-ins, themes, and even auto completions for git, rails, and much more. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8TtAJnYN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/11/GUI-Clients.png%3Fresize%3D580%252C326%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8TtAJnYN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/11/GUI-Clients.png%3Fresize%3D580%252C326%26ssl%3D1" alt="_There are a ton of Git GUI options in the link below." width="580" height="326"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;There are a ton of Git GUI options in the link below.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As far as git is concerned, I was surprised to see them show you just the cli and not any git GUIs. A git GUI is simply an application that lets you use git through a visual interface instead of the CLI.&lt;/p&gt;

&lt;p&gt;I’m a big fan of the CLI, but if you’ve ever come across a painful merge conflict, you’ll know that fixing it in a git GUI is much easier than the command line. &lt;a href="https://git-scm.com/downloads/guis"&gt;I highly recommend you check them out if git is giving you a headache.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As for CSS frameworks, I’m a big fan of &lt;a href="https://tailwindcss.com/"&gt;Tailwind CSS&lt;/a&gt;. While, I don’t think it’s necessary for beginners to take a look at just yet, if you’re ready to level up your CSS, I recommend you check it out.&lt;/p&gt;

&lt;p&gt;The TLDR is that Tailwind is a bunch of pre-defined CSS classes. To use them, you just add them to the style attributes of your html tags. It’s like legos for CSS.&lt;/p&gt;

&lt;p&gt;Trust me, once you start using it, CSS becomes much more delightful to use. Just make sure you have your CSS fundamentals down before you start reaching for a tool like this.&lt;/p&gt;




&lt;h2&gt;
  
  
  Is it Worth it?
&lt;/h2&gt;

&lt;p&gt;It’s now time to answer the big question…Is the Odin project foundations worth it?&lt;/p&gt;

&lt;p&gt;The answer is a very strong YES, absolutely. It’s free, which is honestly incredible. I studied computer science at a four year university and didn’t learn most of these things in college. I learned most of these things on my own, at internships and jobs.&lt;/p&gt;

&lt;p&gt;Seeing this all be presented in a nice little package is pretty awesome. And what is even better is that the material is constantly being updated, since the course is &lt;a href="https://github.com/TheOdinProject"&gt;open source&lt;/a&gt;. Seeing arrow functions and default parameters be presented in the javascript sections was really encouraging. It shows that the maintainers are keeping the content updated with the latest standards.&lt;/p&gt;

&lt;p&gt;What’s cool about the course too is that it has a pretty vibrant discord community. I see a lot of people encouraging each other and motivating each other to stick to it. If you’re curious about web development and would like to give it a try, I highly encourage you check TOP out.&lt;/p&gt;

&lt;p&gt;In a follow up post, I will be discussing the second half of the course, which is the full stack track. I hope to see you again soon &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lqejd1iP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s.w.org/images/core/emoji/14.0.0/72x72/1f64f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lqejd1iP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s.w.org/images/core/emoji/14.0.0/72x72/1f64f.png" alt="🙏" width="72" height="72"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://webdevwithseb.com/2022/04/28/my-thoughts-on-the-odin-project-2022/"&gt;Sr Dev’s Thoughts on The Odin Project (Part 1)&lt;/a&gt; first appeared on &lt;a href="https://webdevwithseb.com"&gt;💻 Web Dev With Seb&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>theodinproject</category>
      <category>learntocode</category>
      <category>fullstack</category>
      <category>bootcamp</category>
    </item>
    <item>
      <title>Code Smarter; Use a Debugger</title>
      <dc:creator>Sebastian Messier</dc:creator>
      <pubDate>Mon, 28 Mar 2022 12:24:00 +0000</pubDate>
      <link>https://dev.to/sbmsr/code-smarter-use-a-debugger-48h8</link>
      <guid>https://dev.to/sbmsr/code-smarter-use-a-debugger-48h8</guid>
      <description>&lt;p&gt;I was helping a friend debug an issue yesterday. He just started learning PHP, and was building an auth login page in HTML/CSS/JS.&lt;/p&gt;

&lt;p&gt;The bug was strange – there was an if statement in his client side javascript which always resolved to false:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (response.html == "OK") {
  // Response Success
  console.log("This Print Statement Never Executes")
} else {
  // Error Occurred
  console.log("This Print Statement Always Executes")
}

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

&lt;/div&gt;



&lt;p&gt;There was no indication as to why &lt;code&gt;response.html&lt;/code&gt; was never equal to “OK”. The backend logs looked fine, and the client network logs even showed “OK” in the response.&lt;/p&gt;

&lt;p&gt;My friend spent the whole day trying to figure out what the hell was going on. He eventually called me and asked if I could take a look.&lt;/p&gt;

&lt;h2&gt;
  
  
  The &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yFKK4z9g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s.w.org/images/core/emoji/13.1.0/72x72/1f92f.png" alt="🤯" width="72" height="72"&gt; Moment
&lt;/h2&gt;

&lt;p&gt;On initial inspection, everything seemed fine. I couldn’t immediately tell why this didn’t work. So I jumped in to chrome devtools to start the debugger.&lt;/p&gt;

&lt;p&gt;We put down some breakpoints and found the issue in a minute. It turned out the backend response was “\nOK”. A single, measly &lt;a href="https://en.wikipedia.org/wiki/Newline#In_programming_languages"&gt;newline&lt;/a&gt; was the issue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2RefNQPJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/03/Hide_The_Pain_Harold_2_panel.jpeg%3Fresize%3D580%252C773%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2RefNQPJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/03/Hide_The_Pain_Harold_2_panel.jpeg%3Fresize%3D580%252C773%26ssl%3D1" alt="Hide The Pain Harold Meme Image" width="580" height="773"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My friend couldn’t believe there was an alternative to debugging with &lt;code&gt;console.log()&lt;/code&gt;. I showed him how to place breakpoints in his code, pause his code mid-execution, check the state of the program, and use this information to figure out why things aren’t working.&lt;/p&gt;

&lt;p&gt;Seeing how happy it made him motivated me to share this story.  &lt;strong&gt;If you find yourself getting stuck on bugs and start writing print statements everywhere to fix the issues, I urge you to look into using a debugger.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you’re doing web development, Chrome has fantastic dev tools built in to the browser. &lt;a href="https://developer.chrome.com/docs/devtools/javascript/"&gt;Here are their docs&lt;/a&gt; on how to set up debugging breakpoints in your client side javascript apps.&lt;/p&gt;

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

&lt;p&gt;My goal is to inspire people who are currently not using a debugger to finally do it. For reference, I spend at least 30% of my time in the debugger as a professional developer. That’s how useful it is.&lt;/p&gt;

&lt;p&gt;If you’re on the self-taught track, you need to be resourceful with your time and energy. Code smarter, not harder, by using a debugger. I guarantee it will make the journey much easier.&lt;/p&gt;

&lt;h3&gt;
  
  
  Want more web dev tips? Follow me on &lt;a href="https://twitter.com/_sbmsr"&gt;twitter&lt;/a&gt; and subscribe to &lt;a href="https://github.us19.list-manage.com/subscribe?u=3122ad8b8bdaf8335e05ec4fa&amp;amp;id=53643b22fa"&gt;my web dev newsletter&lt;/a&gt;.
&lt;/h3&gt;




&lt;p&gt;The post &lt;a href="https://webdevwithseb.com/2022/03/28/work-smarter-use-a-debugger/"&gt;Code Smarter; Use a Debugger&lt;/a&gt; first appeared on &lt;a href="https://webdevwithseb.com"&gt;💻 Web Dev With Seb&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>selftaught</category>
    </item>
    <item>
      <title>Stuck in Tutorial Hell? This Open Source Project Might Help</title>
      <dc:creator>Sebastian Messier</dc:creator>
      <pubDate>Wed, 23 Mar 2022 12:19:00 +0000</pubDate>
      <link>https://dev.to/sbmsr/stuck-in-tutorial-hell-this-open-source-project-might-help-4kpg</link>
      <guid>https://dev.to/sbmsr/stuck-in-tutorial-hell-this-open-source-project-might-help-4kpg</guid>
      <description>&lt;p&gt;I’ve noticed there are lots of people frustrated &amp;amp; stuck in tutorial hell. If this describes you, I’ve found an open source project that I think might help.&lt;/p&gt;

&lt;p&gt;It’s called &lt;a href="https://github.com/gothinkster/realworld"&gt;RealWorld&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is RealWorld?
&lt;/h2&gt;

&lt;p&gt;RealWorld is a production ready full-stack &lt;a href="https://medium.com/"&gt;Medium&lt;/a&gt; clone. It has all of the things you expect from a production-ready application:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;user accounts&lt;/li&gt;
&lt;li&gt;authorization &amp;amp; authentication&lt;/li&gt;
&lt;li&gt;pagination&lt;/li&gt;
&lt;li&gt;mobile responsiveness&lt;/li&gt;
&lt;li&gt;…and even tests!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s all open source, and (best part) it’s been implemented in tons of different &lt;a href="https://codebase.show/projects/realworld?category=frontend"&gt;frontend&lt;/a&gt; and &lt;a href="https://codebase.show/projects/realworld?category=backend"&gt;backend&lt;/a&gt; frameworks. This makes it perfect for learning your framework of choice, while sticking to the same end-goal.&lt;/p&gt;

&lt;p&gt;Another awesome feature is that you can mix and match the frontend with the backend, because &lt;strong&gt;they all adhere to the same &lt;a href="https://realworld-docs.netlify.app/docs/specs/backend-specs/introduction"&gt;API spec&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This means you can swap between React, Vue, Svelte, Angular on the frontend, and hook that up to either a Node.js, Go, Python, or Rails backend. There are tons of options to choose from.&lt;/p&gt;

&lt;p&gt;Here is what the &lt;a href="https://demo.realworld.io/#/"&gt;demo app&lt;/a&gt; looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--S6nZo4Q8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/03/RealWorld_HomePage_Screenshot.png%3Fresize%3D580%252C291%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--S6nZo4Q8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/03/RealWorld_HomePage_Screenshot.png%3Fresize%3D580%252C291%26ssl%3D1" alt="Real World, an open source medium clone to help you learn how to build your own projects." width="580" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  How Will This Get Me Out of Tutorial Hell?
&lt;/h1&gt;

&lt;p&gt;The problem with video tutorials is that they don’t teach people how to build their own projects. Instead, they show you how to build something in a very specific way.&lt;/p&gt;

&lt;p&gt;Learning how to paint is a great analogy here. You can watch a painter and follow along as they create a painting. You might end up with a nice painting, but can you really say you know how to paint on your own?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ik9AwLfW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/03/bob_ross_the_painting_instructor.jpeg%3Fresize%3D286%252C370%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ik9AwLfW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/03/bob_ross_the_painting_instructor.jpeg%3Fresize%3D286%252C370%26ssl%3D1" alt="" width="286" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of copying a painter’s process, you should instead copy their end result – the painting itself. As you copy it, you will develop your own style and technique. With enough practice, you can then carry these skills towards your own projects.&lt;/p&gt;

&lt;p&gt;Rebuilding a project like RealWorld is the same as copying the painting all by yourself. By doing this, you will learn how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;find solutions to the problems that arise along the way&lt;/li&gt;
&lt;li&gt;compare your implementation to those on github&lt;/li&gt;
&lt;li&gt;stay motivated with a concrete end-goal in mind&lt;/li&gt;
&lt;li&gt;develop your own process and techniques for building software&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Learning from tutorials is a great way to get started. But if you’re not making progress, you should try something less passive, and more interactive.&lt;/p&gt;

&lt;p&gt;Rebuilding an existing production-ready code base is a great way to graduate out of tutorial hell, and start building projects all by yourself.&lt;/p&gt;

&lt;p&gt;It won’t be easy, but if you stick to it you will eventually learn how to build your own projects. And once you reach that point… the sky is the limit.&lt;/p&gt;

&lt;h3&gt;
  
  
  Want more web dev tips? Follow me on &lt;a href="https://twitter.com/_sbmsr"&gt;twitter&lt;/a&gt; and subscribe to &lt;a href="https://github.us19.list-manage.com/subscribe?u=3122ad8b8bdaf8335e05ec4fa&amp;amp;id=53643b22fa"&gt;my web dev newsletter&lt;/a&gt;.
&lt;/h3&gt;




&lt;p&gt;The post &lt;a href="https://webdevwithseb.com/2022/03/23/stuck-in-tutorial-hell-this-open-source-project-might-help/"&gt;Stuck in Tutorial Hell? This Open Source Project Might Help&lt;/a&gt; first appeared on &lt;a href="https://webdevwithseb.com"&gt;💻 Web Dev With Seb&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>learntocode</category>
      <category>selftaught</category>
      <category>tutorialhell</category>
    </item>
    <item>
      <title>How To Go From Ignored to Hired</title>
      <dc:creator>Sebastian Messier</dc:creator>
      <pubDate>Mon, 14 Mar 2022 12:33:00 +0000</pubDate>
      <link>https://dev.to/sbmsr/how-to-go-from-ignored-to-hired-1f38</link>
      <guid>https://dev.to/sbmsr/how-to-go-from-ignored-to-hired-1f38</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BXzWKzng--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qlgio9i79jfk8tar3q1w.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BXzWKzng--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qlgio9i79jfk8tar3q1w.jpeg" alt="Image description" width="880" height="572"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Getting my first web dev job was painful. After 100 ignored/rejected job applications, I knew there was something wrong.&lt;/p&gt;

&lt;p&gt;With time I learned the truth. &lt;strong&gt;Employers ignored me because I lacked employment history&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It makes sense: the more experience you’ve got, the more valuable you will be to a prospective employer. But how does one get experience, if you can’t get hired?&lt;/p&gt;

&lt;p&gt;After much hesitation, I deployed a simple solution. I expanded my job search to part-time &amp;amp; freelance work. It eventually got me hired.&lt;/p&gt;

&lt;h2&gt;
  
  
  Struggling? Start Freelancing
&lt;/h2&gt;

&lt;p&gt;When I reached 100 rejections, I knew I had to try something else. Freelance web development seemed like a viable option.&lt;/p&gt;

&lt;p&gt;My reasoning was simple – if no one wanted to hire me full-time, perhaps someone would hire me for part-time work?&lt;/p&gt;

&lt;p&gt;I hesitated. If my lack of experience can’t get me a job, wouldn’t it also make freelancing impossible? I decided to try anyway.&lt;/p&gt;

&lt;p&gt;I applied for web dev work every day on UpWork, Indeed, and Craigslist. I focused on what I knew best: JS/HTML/CSS, and Node.&lt;/p&gt;

&lt;p&gt;Within a month, I had landed a freelance gig. It was a React project for a local business and they paid me $20/hr. I was finally earning money and gaining real world experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Benefits of Freelancing
&lt;/h2&gt;

&lt;p&gt;The lesson I learned was that in tech, getting freelance work is easier than getting a full time job.&lt;/p&gt;

&lt;p&gt;Convincing clients to let you build a website for their small business is much easier than convincing employers to hire you.&lt;/p&gt;

&lt;p&gt;Freelance also gave my resumé an edge when applying for jobs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;real world experience&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;broad portfolio of projects&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;paying customers as professional references&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eventually, one of my clients asked if I was interested in a full time position. Without hesitation I joined as a full time web developer and kickstarted my career.&lt;/p&gt;

&lt;h2&gt;
  
  
  Don’t Give Up
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2vt0wstP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/03/pexels-photo-8812715.jpeg%3Fresize%3D580%252C386%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2vt0wstP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/03/pexels-photo-8812715.jpeg%3Fresize%3D580%252C386%26ssl%3D1" alt="close up shot of a text in a frame" width="580" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Landing your first web dev job will be one of the toughest obstacles of your web dev career. It will take patience and lots of hard work.&lt;/p&gt;

&lt;p&gt;If you feel like you’re getting nowhere, I recommend you try freelancing. It opened doors for me when nothing else did.&lt;/p&gt;

&lt;p&gt;I highly recommend you consider it if you’re stuck on your web dev job hunt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Want more web dev tips? Follow me on &lt;a href="https://twitter.com/_sbmsr"&gt;twitter&lt;/a&gt; and subscribe to &lt;a href="https://github.us19.list-manage.com/subscribe?u=3122ad8b8bdaf8335e05ec4fa&amp;amp;id=53643b22fa"&gt;my web dev newsletter&lt;/a&gt;.
&lt;/h3&gt;




&lt;p&gt;The post &lt;a href="https://webdevwithseb.com/2022/03/14/my-job-search-experience-from-ignored-to-hired/"&gt;How To Go From Ignored to Hired&lt;/a&gt; first appeared on &lt;a href="https://webdevwithseb.com"&gt;💻 Web Dev With Seb&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>jobs</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>career</category>
    </item>
    <item>
      <title>How to pick the best NPM packages</title>
      <dc:creator>Sebastian Messier</dc:creator>
      <pubDate>Fri, 04 Mar 2022 15:10:02 +0000</pubDate>
      <link>https://dev.to/sbmsr/how-to-pick-the-best-npm-packages-58k9</link>
      <guid>https://dev.to/sbmsr/how-to-pick-the-best-npm-packages-58k9</guid>
      <description>&lt;p&gt;Picking the best NPM package is no easy task; there are always too many options to choose form:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React vs Next vs Vue vs Angular vs Svelte vs …&lt;/li&gt;
&lt;li&gt;Express vs Koa vs Fastify vs Nest vs …&lt;/li&gt;
&lt;li&gt;Sequelize vs Prisma vs TypeORM vs Knex vs …&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At the end of the day, all we want is to avoid wasting our precious time learning an obsolete package.&lt;/p&gt;

&lt;p&gt;I’m going to share 2 tips to help you pick the best NPM packages for your projects every single time.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Tip #1: Stick to What’s Popular&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Choosing popular packages is a very smart move in the NPM ecosystem. Doing so has three powerful outcomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minimizes the risk of learning an obsolete / dead package&lt;/li&gt;
&lt;li&gt;More opportunities for employment / freelance&lt;/li&gt;
&lt;li&gt;Larger ecosystem of plugins / extensions to build on&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---Sz-rv8Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/03/New-Project-1.jpeg%3Fresize%3D580%252C397%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---Sz-rv8Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/03/New-Project-1.jpeg%3Fresize%3D580%252C397%26ssl%3D1" alt="" width="580" height="397"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;I’m joking. Angular is a mighty fine framework.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;My favorite way to measure adoption of a framework is to search it on &lt;a href="https://openbase.com/"&gt;Openbase&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Openbase lets you compare NPM packages. You can browse their weekly downloads, Github stars, active contributors, and reviews.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip #2: Stay Within Your Circle of Competence
&lt;/h2&gt;

&lt;p&gt;In a world where &lt;a href="https://en.wikipedia.org/wiki/Shiny_object_syndrome#:~:text=Shiny%20object%20syndrome%20is%20the,something%20new%20takes%20its%20place."&gt;shiny object syndrome&lt;/a&gt; runs rampant, avoiding the magnetic pull of hype is a superpower. Instead, stay &lt;a href="https://en.wikipedia.org/wiki/Circle_of_competence"&gt;within your circle of competence&lt;/a&gt; by using familiar packages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tSvA_qAY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/03/Untitled-March-3-2022-13.59.jpg%3Fresize%3D580%252C580%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tSvA_qAY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/03/Untitled-March-3-2022-13.59.jpg%3Fresize%3D580%252C580%26ssl%3D1" alt="" width="580" height="580"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is helpful for a couple of reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keeps you productive&lt;/li&gt;
&lt;li&gt;Raises the odds of success&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fs.blog/compounding-knowledge/"&gt;Builds upon your existing knowledge&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In doing so you avoid the cost of learning a new package. If you stick to what you know, you wont have to scan documentation or watch tutorials.&lt;/p&gt;

&lt;p&gt;This keeps you productive &amp;amp; eases the burden of shipping a project.&lt;/p&gt;

&lt;p&gt;A good way to stay within your circle of competence is to browse related tools to those you use every day.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you know &lt;a href="https://vuejs.org/"&gt;Vue&lt;/a&gt; &lt;strong&gt;→&lt;/strong&gt; check out &lt;a href="https://nuxtjs.org/"&gt;Nuxt&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;If you know &lt;a href="https://reactjs.org/"&gt;React&lt;/a&gt; &lt;strong&gt;→&lt;/strong&gt; check out &lt;a href="https://preactjs.com/"&gt;Preact&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;If you know &lt;a href="https://en.wikipedia.org/wiki/PostgreSQL"&gt;Postgres&lt;/a&gt; &lt;strong&gt;→&lt;/strong&gt; check out &lt;a href="https://supabase.com/"&gt;Supabase&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When in doubt, pick packages that build upon your existing knowledge. You’ll rarely regret it.&lt;/p&gt;

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

&lt;p&gt;The NPM ecosystem is an ever-evolving beast. New packages come and go on a monthly basis. This makes picking the right NPM packages hard, when it doesn’t have to be.&lt;/p&gt;

&lt;p&gt;The best JS developers defer to picking what’s popular, and staying within their circle of competence.&lt;/p&gt;

&lt;p&gt;If you stick to these two principles you’ll decrease the learning curve of new libraries and frameworks. You will be working smarter, not harder, and your knowledge will compound.&lt;/p&gt;

&lt;p&gt;Do this long enough, and you’ll pick the best NPM packages for your next project every single time.&lt;/p&gt;

&lt;h1&gt;
  
  
  Want more web dev tips?
&lt;/h1&gt;

&lt;p&gt;Follow me on &lt;a href="https://twitter.com/_sbmsr"&gt;twitter&lt;/a&gt; and subscribe to &lt;a href="https://github.us19.list-manage.com/subscribe?u=3122ad8b8bdaf8335e05ec4fa&amp;amp;id=53643b22fa"&gt;my web dev newsletter&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;The post &lt;a href="https://webdevwithseb.com/2022/03/04/how-to-pick-the-best-npm-packages/"&gt;How to pick the best NPM packages&lt;/a&gt; first appeared on &lt;a href="https://webdevwithseb.com"&gt;💻 Web Dev With Seb&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>npm</category>
    </item>
    <item>
      <title>The 3 Best Full-Stack Hosting Platforms (2022)</title>
      <dc:creator>Sebastian Messier</dc:creator>
      <pubDate>Thu, 03 Mar 2022 13:52:00 +0000</pubDate>
      <link>https://dev.to/sbmsr/the-3-best-full-stack-hosting-platforms-2022-52f1</link>
      <guid>https://dev.to/sbmsr/the-3-best-full-stack-hosting-platforms-2022-52f1</guid>
      <description>&lt;p&gt;I’ve compiled the 3 best full-stack hosting platforms based on 3 criteria:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ease of Use&lt;/strong&gt; (You don’t need to learn/know dev ops)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Generous free tiers&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affordability&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Disclaimer: Since we are focusing on &lt;strong&gt;full-stack apps&lt;/strong&gt; we will ignore popular front end hosting platforms like Vercel and Netlify. These are great solutions for deploying frontends, but they do not let you deploy your own backend.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  1) &lt;a href="https://railway.app?referralCode=9Y13IY"&gt;Railway&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DRpj31g3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/www.sbmsr.com/content/images/2022/02/logotype-dark.png%3Fw%3D580%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DRpj31g3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/www.sbmsr.com/content/images/2022/02/logotype-dark.png%3Fw%3D580%26ssl%3D1" alt="The logo of Railway, a platform for hosting full-stack apps for cheap." width="580" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Railway launched in 2020. The platform is growing in popularity with startups and solo developers.&lt;/p&gt;

&lt;p&gt;Best of all, it is incredibly affordable. Their developer plan offers 100 GB of disk and 32GB of RAM. Depending on your app’s hourly usage, this can cost you a couple of dollars a month.&lt;/p&gt;

&lt;p&gt;I am currently running &lt;a href="http://www.photorake.com"&gt;photorake&lt;/a&gt; (lots of disk usage!), &lt;a href="http://comb.social"&gt;comb&lt;/a&gt;, and &lt;a href="https://umami.is/"&gt;umami&lt;/a&gt; for $1 a month on Railway. This is the best pricing I’ve found across the board.&lt;/p&gt;

&lt;p&gt;Pros&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logs &amp;amp; monitoring within web UI&lt;/li&gt;
&lt;li&gt;Automated Git based deploys via Github&lt;/li&gt;
&lt;li&gt;&lt;a href="https://railway.app/pricing"&gt;Flexible Pricing (only pay for what you use)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;$10 of free credits a month&lt;/li&gt;
&lt;li&gt;&lt;a href="https://railway.app/starters"&gt;Easy to use App Starters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Apps never go dormant due to inactivity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cons&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uncapped expenses when your app’s scales&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2) &lt;a href="https://render.com"&gt;Render&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EPMTY-5S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/02/render-logo-wordmark.png%3Fresize%3D580%252C219%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EPMTY-5S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/02/render-logo-wordmark.png%3Fresize%3D580%252C219%26ssl%3D1" alt="The logo of Render, a platform for hosting full-stack apps for cheap." width="580" height="219"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Render launched in 2018, and they’re positioning themselves to be the next Heroku. You can host static sites, web apps, background workers, cron jobs, Postgres databases, and Redis caches on Render.&lt;/p&gt;

&lt;p&gt;They have a similar pricing model to Heroku where you pick the infrastructure up front based on your RAM and CPU needs. Their prices are &lt;a href="https://render.com/render-vs-heroku-comparison"&gt;heavily discounted when compared to Heroku&lt;/a&gt;, which is awesome.&lt;/p&gt;

&lt;p&gt;Pros&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://render.com/render-vs-heroku-comparison"&gt;Competitive Pricing with Heroku&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Logs &amp;amp; monitoring within web UI&lt;/li&gt;
&lt;li&gt;Automated Git based deploys via Github&lt;/li&gt;
&lt;li&gt;Various apps supported (static sites, bg workers, cron jobs, DBs)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://render.com/docs"&gt;One-click Quick Start Deployments&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Expenses are fixed based on plan&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cons&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Disk is $0.25/GB (3x EBS pricing on AWS)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://render.com/docs/free#free-web-services"&gt;Free apps go dormant after 15 minutes of inactivity&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3) &lt;a href="https://www.heroku.com/"&gt;Heroku&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H7ucuFR---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/02/Heroku_logo.svg_.png%3Fresize%3D580%252C162%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H7ucuFR---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/02/Heroku_logo.svg_.png%3Fresize%3D580%252C162%26ssl%3D1" alt="The logo of Heroku, a platform for hosting full-stack apps for cheap." width="580" height="162"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Heroku is the original developer friendly platform for full-stack web apps since 2007. It is popular with enterprises, startups, and solo developers alike.&lt;/p&gt;

&lt;p&gt;You can host full stack apps, Postgres DBs, Redis Caches, and Apache Kafka queues. Rails and Django apps are commonly hosted on Heroku.&lt;/p&gt;

&lt;p&gt;Pros&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Great for Rails and Django Apps&lt;/li&gt;
&lt;li&gt;Logs &amp;amp; monitoring within web UI&lt;/li&gt;
&lt;li&gt;Automated Git based deploys via Github&lt;/li&gt;
&lt;li&gt;&lt;a href="https://elements.heroku.com/addons"&gt;Robust Add-ons Ecosystem&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cons&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.heroku.com/app_sleeping_on_heroku"&gt;Free apps go dormant after 30 mins of inactivity&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Which is my favorite?
&lt;/h3&gt;

&lt;p&gt;After having tried the above platforms, I’ve decided to run my apps on Railway. The fact I don’t have to know my CPU/RAM needs up front, their affordable pricing, and the fact my apps never go dormant have won me over.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KH3hbFlk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/www.sbmsr.com/content/images/2022/02/image-2.png%3Fw%3D580%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KH3hbFlk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/www.sbmsr.com/content/images/2022/02/image-2.png%3Fw%3D580%26ssl%3D1" alt="" width="580" height="160"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;I’m only paying 1$ a month to host 3 web apps with Railway.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I encourage you to give these 3 a try and find your favorite; you won’t be disappointed.&lt;/p&gt;

&lt;p&gt;If this helped you narrow down a platform for your next side project, give me a follow on &lt;a href="https://twitter.com/_sbmsr"&gt;twitter&lt;/a&gt;, and &lt;a href="https://github.us19.list-manage.com/subscribe?u=3122ad8b8bdaf8335e05ec4fa&amp;amp;id=53643b22fa"&gt;subscribe to my newsletter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Happy Hacking! 😎&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://webdevwithseb.com/2022/03/03/the-3-best-full-stack-hosting-platforms-2022/"&gt;The 3 Best Full-Stack Hosting Platforms (2022)&lt;/a&gt; first appeared on &lt;a href="https://webdevwithseb.com"&gt;💻 Web Dev With Seb&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>fullstack</category>
      <category>hosting</category>
      <category>platform</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Full-Stack JS is Insane… Is Rails better?</title>
      <dc:creator>Sebastian Messier</dc:creator>
      <pubDate>Wed, 02 Mar 2022 02:12:52 +0000</pubDate>
      <link>https://dev.to/sbmsr/full-stack-js-is-insane-is-rails-better-13fi</link>
      <guid>https://dev.to/sbmsr/full-stack-js-is-insane-is-rails-better-13fi</guid>
      <description>&lt;p&gt;“Is Rails better for full-stack development?” is a question I see a lot.&lt;/p&gt;

&lt;p&gt;The person asking is typically a full-stack JS developer that is overwhelmed by the sea of frameworks to choose from.&lt;/p&gt;

&lt;p&gt;In this post we will see what sets Rails apart from full-stack JS to decide if Rails is better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full-Stack JS vs Rails&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eM1B2GLm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/03/image.jpeg%3Fresize%3D580%252C580%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eM1B2GLm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/03/image.jpeg%3Fresize%3D580%252C580%26ssl%3D1" alt="" width="580" height="580"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s compare the philosophies of Rails and full-stack JS.&lt;/p&gt;

&lt;p&gt;Rails is a convenient bundle of tools for building full-stack web apps, written in Ruby. It comes with a &lt;a href="https://guides.rubyonrails.org/action_view_overview.html"&gt;frontend&lt;/a&gt;, &lt;a href="https://guides.rubyonrails.org/action_controller_overview.html"&gt;REST API Layer&lt;/a&gt;, &lt;a href="https://guides.rubyonrails.org/active_record_basics.html"&gt;ORM&lt;/a&gt;, &lt;a href="https://guides.rubyonrails.org/active_job_basics.html"&gt;Job Scheduler&lt;/a&gt;, &lt;a href="https://tailwindcss.com/docs/guides/ruby-on-rails"&gt;Tailwind CSS Support (new!)&lt;/a&gt;, and more.&lt;/p&gt;

&lt;p&gt;In full-stack JS you pick the frontend library, backend framework, CSS libs, and ORM yourself. This tends to overwhelm beginning web devs.&lt;/p&gt;

&lt;p&gt;Rails’s goal is to set you up with a stable foundation of tools to building production-ready full-stack apps. This will probably sound like music to the ears of full-stack JS beginners.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is Rails Better for Full-Stack Apps?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;“Better” is a dirty word when discussing subjective matters. Let’s instead focus on the circumstances in which Rails outshines Full-Stack JS.&lt;/p&gt;

&lt;p&gt;Rails is better than full-stack JS if you…&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;want a Swiss army knife for building full-stack web apps quickly&lt;/li&gt;
&lt;li&gt;want a full-stack framework that feels knowable and well-defined&lt;/li&gt;
&lt;li&gt;don’t mind writing frontends in HTML/CSS&lt;/li&gt;
&lt;li&gt;are tired of Framework &lt;a href="https://kentcdodds.com/blog/dealing-with-fomo"&gt;FOMO&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;are interested in &lt;a href="https://learnxinyminutes.com/docs/ruby/"&gt;learning Ruby&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uS4AQwKK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/03/rails_swiss_army.png%3Fresize%3D580%252C530%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uS4AQwKK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/webdevwithseb.com/wp-content/uploads/2022/03/rails_swiss_army.png%3Fresize%3D580%252C530%26ssl%3D1" alt="" width="580" height="530"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Rails, the full-stack swiss army knife (pizza sold separately)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Rails is worth learning if at least 3 of these points resonate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you are overwhelmed by full-stack JS, Rails will be a breath of fresh air. Rails helps you ship quickly by choosing many things for you out of the box.&lt;/p&gt;

&lt;p&gt;If you are looking to invest in a comprehensive framework that helps you ship faster, &lt;strong&gt;Rails is a great choice&lt;/strong&gt;. I highly recommend you check it out.&lt;/p&gt;

&lt;h1&gt;
  
  
  Want more web dev tips?
&lt;/h1&gt;

&lt;p&gt;Follow me on &lt;a href="https://twitter.com/_sbmsr"&gt;twitter&lt;/a&gt; and subscribe to &lt;a href="https://github.us19.list-manage.com/subscribe?u=3122ad8b8bdaf8335e05ec4fa&amp;amp;id=53643b22fa"&gt;my web dev newsletter&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;The post &lt;a href="https://webdevwithseb.com/2022/03/02/full-stack-js-is-insane-is-rails-better/"&gt;Full-Stack JS is Insane… Is Rails better?&lt;/a&gt; first appeared on &lt;a href="https://webdevwithseb.com"&gt;💻 Web Dev With Seb&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>fullstack</category>
      <category>javascript</category>
      <category>rails</category>
    </item>
  </channel>
</rss>
