{"id":3235,"date":"2024-08-26T13:30:42","date_gmt":"2024-08-26T18:30:42","guid":{"rendered":"https:\/\/frontendmasters.com\/blog\/?p=3235"},"modified":"2024-08-26T13:30:43","modified_gmt":"2024-08-26T18:30:43","slug":"what-skills-should-you-focus-on-as-junior-web-developer-in-2024","status":"publish","type":"post","link":"https:\/\/frontendmasters.com\/blog\/what-skills-should-you-focus-on-as-junior-web-developer-in-2024\/","title":{"rendered":"What Skills Should You Focus on as Junior Web Developer in 2024?"},"content":{"rendered":"\n<p class=\"has-drop-cap\">Let&#8217;s say <em>Junior Web Developer<\/em> means you&#8217;re either just starting out learning, you&#8217;ve got a job but are early in your career, or somewhere between those. Our goal with this guide is to give you things to learn that we believe will serve you well. That is, they will <strong>make you a better developer and ideally a more employable and promotable employee<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/juniors.png?resize=1024%2C683&#038;ssl=1\" alt=\"\" class=\"wp-image-3544\" srcset=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/juniors.png?resize=1024%2C683&amp;ssl=1 1024w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/juniors.png?resize=300%2C200&amp;ssl=1 300w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/juniors.png?resize=768%2C512&amp;ssl=1 768w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/juniors.png?resize=1536%2C1024&amp;ssl=1 1536w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/juniors.png?resize=2048%2C1365&amp;ssl=1 2048w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Fundamentals are always smart.<\/h2>\n\n\n\n<p>Let&#8217;s not be <code>old-man-shakes-fist-at-kids.gif<\/code> about this, but learning the fundamentals of tech is demonstrateably useful. It&#8217;s true in basketball, it&#8217;s true for the piano, and it&#8217;s true in making websites. If you&#8217;re aiming at a long career in websites, the fundamentals are what powers it. <\/p>\n\n\n\n<p>For a web developer, those are HTML, CSS, JavaScript, accessibility, image formats (e.g. PNG, SVG, JPG, etc.), data storage, API design and usage, HTTP, servers and backend languages, and lets throw version control in there. Do you need to have complete mastery over all of them? Nope. But you need a working knowledge of them.<\/p>\n\n\n\n<p>The point of the fundamentals is how long-lasting and transferrable the knowledge is. It will serve you well no matter what <em>other<\/em> technologies a job might have you using, or when the abstractions over them change, as they are want to do.<\/p>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Here&#8217;s an example regarding images on the web <\/summary>\n<p>All frameworks will handle images differently. They&#8217;ll all have their reasons for that. <\/p>\n\n\n\n<p>For instance, Rails has <a href=\"https:\/\/api.rubyonrails.org\/v7.1.3.4\/classes\/ActionView\/Helpers\/AssetTagHelper.html\">a helper method like this: <code>image_tag()<\/code><\/a>. This helps you generate an <code>&lt;img \/&gt;<\/code> with a <code>src<\/code> that points to the image correctly, and helpfully generates browser-cache busting URL parameters. You&#8217;re on your own for optimization. If you want to try to use the responsive images syntax, only recently do they have <a href=\"https:\/\/eagerworks.com\/blog\/rails-picture-tag-responsive-image-support\">rudimentary support<\/a>. <\/p>\n\n\n\n<p><a href=\"https:\/\/nextjs.org\/docs\/app\/api-reference\/components\/image\">The Next.js <code>&lt;Image \/&gt;<\/code> component<\/a> is quite different in that it wants to <em>optimize<\/em> the image for you and output the image with the <code>srcset<\/code> syntax in order to serve right-size images to different devices, as well as provide a blur-up loading style. This is much fancier and helpful, but if you are trying to do something custom, like any <code>&lt;picture&gt;<\/code> element usage, you&#8217;ve gotta keep going down <a href=\"https:\/\/nextjs.org\/docs\/app\/api-reference\/components\/image#getimageprops\">a proprietary rabbit hole<\/a>. <\/p>\n\n\n\n<p><a href=\"https:\/\/www.11ty.dev\/docs\/plugins\/image\/\">The Eleventy Image utility<\/a> helps provide optimized image output for you to use however you want to construct your image HTML. It&#8217;s quite powerful in how many options it offers and features and formats it supports. But it&#8217;s intentionally unopinionated leaving much of a final implementation on your shoulders.<\/p>\n\n\n\n<p>Those are all <em>very<\/em> different approaches.<\/p>\n\n\n\n<p>A developer skilled in the fundamentals will understand how the <code>&lt;img&gt;<\/code> tag (and related elements and attributes) works in HTML and then layers on tools to help get there. That knowledge will translate from approach to approach and framework to framework. If you just use whatever a framework gives you and don&#8217;t dig into the fundamentals, you not only aren&#8217;t doing as good of a job as you could, but you lose knowledge between projects.<\/p>\n<\/details>\n\n\n\n<h3 class=\"wp-block-heading\">Understand the Browser<\/h3>\n\n\n\n<p>This is literally what the term &#8220;front end&#8221; means. It means <strong>the browser.<\/strong> <\/p>\n\n\n\n<p>&#8220;Back end&#8221; work revolves around servers. Servers that are <em>exactly known<\/em> and produce identical and reliable results each time they are used. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-large is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1012\" height=\"1024\" src=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/browsers-complex.png?resize=1012%2C1024&#038;ssl=1\" alt=\"\" class=\"wp-image-3562\" style=\"width:276px;height:auto\" srcset=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/browsers-complex.png?resize=1012%2C1024&amp;ssl=1 1012w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/browsers-complex.png?resize=297%2C300&amp;ssl=1 297w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/browsers-complex.png?resize=768%2C777&amp;ssl=1 768w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/browsers-complex.png?w=1050&amp;ssl=1 1050w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n<\/div>\n\n\n<p>Browsers are much less <em>known<\/em> \u2014 that is \u2014 <em>one<\/em> browser will produce identical and reliable results when used, but users visit your website from thousands of different permutations of browsers, versions of those browsers, devices they run on, screen sizes they are looking at, with different features enabled, and more. The browser space is <a href=\"https:\/\/daverupert.com\/2024\/02\/ui-states\/\">pretty complex and unpredictable<\/a>.<\/p>\n\n\n\n<p>Learning what the browser is doing and how to work with it is immensely useful. Your main tool in this endeavor is that browsers DevTools. <a href=\"https:\/\/frontendmasters.com\/courses\/dev-tools\/?utm_source=boost&amp;utm_medium=blog&amp;utm_campaign=boost\">DevTools are very worth learning.<\/a> DevTools allow you to do all sorts of inspection and analysis on a website like:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Understand all the network requests that were made to produce the website you&#8217;re looking at<\/li>\n\n\n\n<li>Inspect any particular element on the page, see where it sits in the DOM tree, and see all associated styling information on it.<\/li>\n\n\n\n<li>See the original HTML that came down in the initial request for the page (e.g. &#8220;View Source&#8221;)<\/li>\n\n\n\n<li>Dig into the animations present on the page, slowing them down, reversing them, and generally controlling them to understand what is happening. <\/li>\n\n\n\n<li>Look at the storage (e.g. cookies, sessionStorage, etc) that apply to the current page<\/li>\n\n\n\n<li>And&#8230; no joke&#8230; easily hundreds more things, <em>most<\/em> of which will be useful at some point to you. (Try pressing <code>Command-Shift-P<\/code> within DevTools to see a menu of some of the things it can do.)<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"440\" src=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/Screenshot-2024-08-19-at-8.19.45%E2%80%AFAM.png?resize=1024%2C440&#038;ssl=1\" alt=\"\" class=\"wp-image-3556\" srcset=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/Screenshot-2024-08-19-at-8.19.45%E2%80%AFAM.png?resize=1024%2C440&amp;ssl=1 1024w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/Screenshot-2024-08-19-at-8.19.45%E2%80%AFAM.png?resize=300%2C129&amp;ssl=1 300w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/Screenshot-2024-08-19-at-8.19.45%E2%80%AFAM.png?resize=768%2C330&amp;ssl=1 768w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/Screenshot-2024-08-19-at-8.19.45%E2%80%AFAM.png?resize=1536%2C661&amp;ssl=1 1536w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/Screenshot-2024-08-19-at-8.19.45%E2%80%AFAM.png?resize=2048%2C881&amp;ssl=1 2048w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">Seeing and being able to manipulate the DOM, as well as the active styles on any element, is incredibly useful alone.<\/figcaption><\/figure>\n\n\n\n<p>Again, anything you learn on top of what browsers are natively doing is a purposeful abstraction. Learning what browsers are doing means that as higher-level technology changes (e.g. <em>a new framework!<\/em>) you&#8217;ll still have the underlying knowledge of how it all works.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Basics of HTML<\/h3>\n\n\n\n<p>Literally every website is HTML. It&#8217;s absolutely unavoidable, not that you&#8217;d want to avoid it, because it&#8217;s powerful and useful. Here are the basics to know first:<\/p>\n\n\n\n<p>Use the semantic (meaning <em>appropriate<\/em> and <em>meaningful<\/em>) block tags of HTML. Using a <code>&lt;div><\/code> or <code>&lt;span><\/code> is a perfectly fine choice for a block or line of content (respectively) that you need to apply a class to to style, but use a <code>&lt;section><\/code>, <code>&lt;article><\/code>, <code>&lt;header><\/code>, <code>&lt;footer><\/code>, <code>&lt;search><\/code>, or <code>&lt;aside><\/code> if that is what the element contains.<\/p>\n\n\n\n<p>Use <code>&lt;a href=\"\"&gt;<\/code> for links to pages and <code>&lt;button&gt;<\/code> for actions that aren&#8217;t navigating to pages.<\/p>\n\n\n\n<p>Use <code>&lt;h1&gt;<\/code> &#8230; <code>&lt;h6&gt;<\/code> for headings, knowing that each level down is like marking a subsection, so an <code>&lt;h3&gt;<\/code> is like a header under a subsection of the nearest above <code>&lt;h2&gt;<\/code>.<\/p>\n\n\n\n<p>Use semantic and <em>functional<\/em> forms that properly pair labels with inputs, like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">form<\/span> <span class=\"hljs-attr\">action<\/span>=<span class=\"hljs-string\">\"\/login\"<\/span> <span class=\"hljs-attr\">method<\/span>=<span class=\"hljs-string\">\"post\"<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">label<\/span>&gt;<\/span>\n    Email\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"email\"<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"email\"<\/span> <span class=\"hljs-attr\">required<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">label<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">label<\/span>&gt;<\/span>\n    Password\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"password\"<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"password\"<\/span> <span class=\"hljs-attr\">required<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">label<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">button<\/span>&gt;<\/span>Log In<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">button<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">form<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Use the <code>id<\/code> attribute on elements in order to more easily select it in JavaScript, for accessibility associations, or to allow links to jump down to that element, and generally not for styling. Use the <code>class<\/code> attribute for CSS to select and style things. Use <code>data-*<\/code> attributes for arbitrary information from your own app you need to access via JavaScript later or select in CSS against, rather than making up your own attributes.<\/p>\n\n\n\n<p>There is actually quite a lot to know about HTML, but this will bring you far. Do not push HTML away as some kind of toy language. It is absolutely fundamental to to the web and powerful in it&#8217;s own right. <em>Every<\/em> website uses and needs it.<\/p>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Here&#8217;s a semantic HTML document<\/summary><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-meta\">&lt;!DOCTYPE <span class=\"hljs-meta-keyword\">html<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">html<\/span> <span class=\"hljs-attr\">lang<\/span>=<span class=\"hljs-string\">\"en\"<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">head<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">meta<\/span> <span class=\"hljs-attr\">charset<\/span>=<span class=\"hljs-string\">\"UTF-8\"<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">meta<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"viewport\"<\/span> <span class=\"hljs-attr\">content<\/span>=<span class=\"hljs-string\">\"width=device-width, initial-scale=1.0\"<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">title<\/span>&gt;<\/span>Sample Semantic Page<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">title<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">head<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">body<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">header<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">h1<\/span>&gt;<\/span>Website<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">h1<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">nav<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">ul<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">li<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"\/\"<\/span>&gt;<\/span>Home<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">a<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">li<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">li<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"\/about\"<\/span>&gt;<\/span>About<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">a<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">li<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">li<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"#contact\"<\/span>&gt;<\/span>Contact<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">a<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">li<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">ul<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">nav<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">search<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">form<\/span> <span class=\"hljs-attr\">action<\/span>=<span class=\"hljs-string\">\"#\"<\/span> <span class=\"hljs-attr\">method<\/span>=<span class=\"hljs-string\">\"get\"<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">label<\/span>&gt;<\/span>\n          Search\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"search\"<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">label<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">form<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">search<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">header<\/span>&gt;<\/span>\n\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">main<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">article<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">h2<\/span>&gt;<\/span>Welcome to Our Website<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">h2<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span>&gt;<\/span>This is an example of an article within a main element. Here you can include any content relevant to your main topic.<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">article<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">main<\/span>&gt;<\/span>\n  \n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">aside<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">h2<\/span>&gt;<\/span>News<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">h2<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span>&gt;<\/span>Latest updates and news can be found here.<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">aside<\/span>&gt;<\/span>\n\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">footer<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"contact\"<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span>&gt;<\/span>Contact us at <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"mailto:info@example.com\"<\/span>&gt;<\/span>info@example.com<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">a<\/span>&gt;<\/span>.<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">form<\/span> <span class=\"hljs-attr\">action<\/span>=<span class=\"hljs-string\">\"#\"<\/span> <span class=\"hljs-attr\">method<\/span>=<span class=\"hljs-string\">\"post\"<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">label<\/span> <span class=\"hljs-attr\">for<\/span>=<span class=\"hljs-string\">\"name\"<\/span>&gt;<\/span>Name:<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">label<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"text\"<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"name\"<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"name\"<\/span> <span class=\"hljs-attr\">required<\/span>&gt;<\/span>\n\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">label<\/span> <span class=\"hljs-attr\">for<\/span>=<span class=\"hljs-string\">\"email\"<\/span>&gt;<\/span>Email:<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">label<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"email\"<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"email\"<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"email\"<\/span> <span class=\"hljs-attr\">required<\/span>&gt;<\/span>\n\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">label<\/span> <span class=\"hljs-attr\">for<\/span>=<span class=\"hljs-string\">\"message\"<\/span>&gt;<\/span>Message:<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">label<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">textarea<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"message\"<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"message\"<\/span> <span class=\"hljs-attr\">required<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">textarea<\/span>&gt;<\/span>\n\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">button<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"submit\"<\/span>&gt;<\/span>Send<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">button<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">form<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">footer<\/span>&gt;<\/span>\n  \n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">body<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">html<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/details>\n\n\n\n<p class=\"learn-more\"><a href=\"https:\/\/frontendmasters.com\/courses\/web-development-v3\/\">Complete Intro to Web Development<\/a> is free and covers all of this in one course.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Basics of CSS<\/h3>\n\n\n\n<p>CSS is what styles the web. Some web developers end up embracing or even focusing on CSS, and some do not. That&#8217;s OK, but you have to respect it. Like HTML, <em>all<\/em> websites use it. CSS is so solid and powerful these days you can learn enough to be effective pretty quickly.<\/p>\n\n\n\n<p>Layout might be the most important single thing you can learn in CSS, and thanks to grid layout, you&#8217;ve got a great tool for it at your fingertips. As <a href=\"https:\/\/frontendmasters.com\/blog\/wp-admin\/post.php?post=3235&amp;action=edit\">Miriam Suzanne says<\/a>, more advanced CSS features can wait, <em><a href=\"https:\/\/frontendmasters.com\/courses\/css-grid\/?utm_source=boost&amp;utm_medium=blog&amp;utm_campaign=boost\">learn grid now<\/a><\/em>. Setting up a basic page layout is honestly quite satisfying:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"page\"<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">main<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">main<\/span>&gt;<\/span>\n\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">aside<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">aside<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-class\">.page<\/span> {\n  <span class=\"hljs-attribute\">display<\/span>: grid;\n  <span class=\"hljs-attribute\">gap<\/span>: <span class=\"hljs-number\">1rem<\/span>;\n  <span class=\"hljs-attribute\">grid-template-columns<\/span>: <span class=\"hljs-number\">1<\/span>fr <span class=\"hljs-number\">150px<\/span>;\n\n  @media (width &lt; 400px) {\n    <span class=\"hljs-attribute\">grid-template-columns<\/span>: <span class=\"hljs-number\">1<\/span>fr;\n  }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n<\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"232\" src=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/side-by-side.png?resize=1024%2C232&#038;ssl=1\" alt=\"\" class=\"wp-image-3598\" style=\"width:476px;height:auto\" srcset=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/side-by-side.png?resize=1024%2C232&amp;ssl=1 1024w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/side-by-side.png?resize=300%2C68&amp;ssl=1 300w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/side-by-side.png?resize=768%2C174&amp;ssl=1 768w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/side-by-side.png?w=1050&amp;ssl=1 1050w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">Putting elements side by side is no small part of the job.<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Setting up <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/CSS\/Using_CSS_custom_properties\">custom properties<\/a> (variables) is also a good practice, and colors is the perfect use. Giving yourself a set of colors to pick from will help keep your design consistent and easier to work with:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">html<\/span> {\n  <span class=\"hljs-attribute\">--brand<\/span>: red;\n  <span class=\"hljs-attribute\">--accent<\/span>: yellow;\n\n  <span class=\"hljs-attribute\">--gray-extra-light<\/span>: <span class=\"hljs-number\">#f8f9fa<\/span>;\n  <span class=\"hljs-attribute\">--gray-light<\/span>: <span class=\"hljs-number\">#dee2e6<\/span>;\n  <span class=\"hljs-attribute\">--gray<\/span>: <span class=\"hljs-number\">#adb5bd<\/span>;\n  <span class=\"hljs-attribute\">--gray-dark<\/span>: <span class=\"hljs-number\">#495057<\/span>;\n  <span class=\"hljs-attribute\">--gray-extra-dark<\/span>: <span class=\"hljs-number\">#212529<\/span>;\n}\n\n<span class=\"hljs-selector-class\">.box<\/span> {\n  <span class=\"hljs-attribute\">background<\/span>: <span class=\"hljs-built_in\">var<\/span>(--gray);\n  <span class=\"hljs-attribute\">border<\/span>: <span class=\"hljs-number\">2px<\/span> solid <span class=\"hljs-built_in\">var<\/span>(--gray-extra-dark);\n\n  &amp;.accent {\n    <span class=\"hljs-attribute\">border-color<\/span>: <span class=\"hljs-built_in\">var<\/span>(--accent);\n  }\n\n  <span class=\"hljs-selector-tag\">h2<\/span> {\n    <span class=\"hljs-attribute\">color<\/span>: <span class=\"hljs-built_in\">var<\/span>(--brand);\n  }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Oliver Reichenstein once famously wrote that <a href=\"https:\/\/ia.net\/topics\/the-web-is-all-about-typography-period\">Web Design is 95% Typography<\/a>. He&#8217;s not wrong. There is awful lot of words on the web trying to communicate with us, and they can be objectively well presented&#8230; or not. <\/p>\n\n\n\n<p>Even if you learn and use a framework that abstracts aways CSS into HTML like <a href=\"https:\/\/tailwindcss.com\/\">Tailwind<\/a> (which is probably a smart choice particularly if you&#8217;re job hunting \u2014 <a href=\"https:\/\/frontendmasters.com\/courses\/tailwind-css\/?utm_source=boost&amp;utm_medium=blog&amp;utm_campaign=boost\">here&#8217;s a course<\/a>), the styles are ultimately applied with CSS and so knowing it behooves you.<\/p>\n\n\n\n<p>There is a lot to know about CSS alone, but between a good foundation of layout, colors, and typography, you&#8217;ll be in good shape. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Basics of JavaScript<\/h3>\n\n\n\n<p>JavaScript is arguably the biggest and most important language in web development. It is all-powerful in the browser, dealing with interactivity, events, network requests, manipulating the DOM, and more. If you end up having a long career in web development, you&#8217;ll end up reading and writing a <em>lot<\/em> of JavaScript. <\/p>\n\n\n\n<p>If you&#8217;re into web <em>design<\/em>, we&#8217;d recommend still being somewhat familiar with JavaScript, and <a href=\"https:\/\/frontendmasters.com\/blog\/5-things-designers-can-do-with-javascript\/\">here&#8217;s our recommendations<\/a> on what to learn that will serve you sell. <\/p>\n\n\n\n<p>If you find yourself clicking with JavaScript, focusing on it isn&#8217;t a bad idea. We have lots of great courses on JavaScript, like a free course on <a href=\"https:\/\/frontendmasters.com\/courses\/getting-started-javascript-v2\/?utm_source=boost&amp;utm_medium=blog&amp;utm_campaign=boost\">getting started with JavaScript<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-group learn-more\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p>We have a fantastic learning path covering all the <a href=\"https:\/\/frontendmasters.com\/learn\/beginner\/?utm_source=boost&amp;utm_medium=blog&amp;utm_campaign=boost\">essentials of web development<\/a> or even a full path to <a href=\"https:\/\/frontendmasters.com\/learn\/javascript\/?utm_source=boost&amp;utm_medium=blog&amp;utm_campaign=boost\">become a JavaScript master<\/a> if video courses are your thing!<\/p>\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">But\u2026 only fundamentals isn\u2019t enough.<\/h2>\n\n\n\n<p>It&#8217;s a tough job market out there. Employers are often looking for skills in a specific technology, especially in lieu of a lot of experience. If you find yourself clicking with some aspect of web design and development, you&#8217;d do well do go deep on it, as it will likely feel fulfilling to you while being easier to stick with. Plus, that helps turn you into someone <a href=\"https:\/\/en.wikipedia.org\/wiki\/T-shaped_skills\">T-shaped<\/a> (deep experience in one area, wide experience with other areas) which is a common and desirable thing for web developers. <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If working with data clicks with you, lean into that.<\/li>\n\n\n\n<li>If you&#8217;re attracted to building systems, design systems are a big thing these days with companies have dedicated design system teams. <\/li>\n\n\n\n<li>If you enjoy illustration or animation, the web is a great place for that.<\/li>\n\n\n\n<li>If managing servers and processes sounds like something you&#8217;d be interested in, DevOps is a whole career path. <\/li>\n<\/ul>\n\n\n\n<p>In back-end web development land, it&#8217;s not uncommon at all to find job postings for specific languages and technologies. Companies hire for things like a &#8220;Go Developer&#8221; or a &#8220;Python Developer&#8221;. <\/p>\n\n\n\n<p>It&#8217;s a bit less common to hire for specific languages on the front-end, but it&#8217;s <em>very<\/em> common for companies to use the title <strong>&#8220;Full-Stack Developer&#8221;<\/strong> to describe what is likely mostly a front-end job. If you need to put <strong>full-stack<\/strong> on your resume to get you past the robot resume checkers, you should go for it (to get on the road, here&#8217;s our <a href=\"https:\/\/frontendmasters.com\/learn\/fullstack\/?utm_source=boost&amp;utm_medium=blog&amp;utm_campaign=boost\">full-stack learning path<\/a>). Aspects of full-stack development that touch the back end are likely rooted in data fetching and API development, and commonly in Node JavaScript, which nicely pairs with front-end knowledge.<\/p>\n\n\n\n<p>If you&#8217;re more comfortable with saying &#8220;Front-End Developer&#8221;, in some poking around job boards and general job postings, that&#8217;s still a pretty common term used for hiring.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"571\" src=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/full-stack.jpg?resize=1024%2C571&#038;ssl=1\" alt=\"\" class=\"wp-image-3601\" srcset=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/full-stack.jpg?resize=1024%2C571&amp;ssl=1 1024w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/full-stack.jpg?resize=300%2C167&amp;ssl=1 300w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/full-stack.jpg?resize=768%2C428&amp;ssl=1 768w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/full-stack.jpg?resize=1536%2C857&amp;ssl=1 1536w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/full-stack.jpg?w=1800&amp;ssl=1 1800w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">The job can be a more than half learning conventions<\/h3>\n\n\n\n<p>Say you&#8217;re a new web developer on the job, and you&#8217;re given a ticket to have a button open an informational popup for users to read for extra information. You have a solid grasp of the fundamentals, so you make a Pull Request where you implement this <a href=\"https:\/\/frontendmasters.com\/blog\/popover-api-is-here\/\">as a popover<\/a> (e.g. <code>&lt;div id=\"extra-information\" popover&gt;Extra information.&lt;\/div&gt;<\/code>).<\/p>\n\n\n\n<p>Then the feedback arrives: <em>&#8230; but that&#8217;s not how it&#8217;s done <strong>here<\/strong> &#8230;<\/em><\/p>\n\n\n\n<p>At this job, with this current code base, you:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Use the existing <code>&lt;Popup \/&gt;<\/code> element from the Design System.<\/li>\n\n\n\n<li>Keep the content in the <code>Copy<\/code> package as HTML strings, so it can be translated. <\/li>\n\n\n\n<li>Make an enum for it (e.g. <code>export const POPOVER_EXTRA_INFORMATION = \"POPOVER_EXTRA_INFORMATION\"<\/code>) so that anywhere that refers to this component or copy has a consistent name. <\/li>\n\n\n\n<li>Has a component test ensuring it functions correctly.<\/li>\n\n\n\n<li>Use special classes from the design system in order to create variations, rather than it&#8217;s own bespoke styles.<\/li>\n<\/ol>\n\n\n\n<p>None of those things are really &#8220;fundamentals&#8221;, they are <em>conventions<\/em> that this particular code base has grown into over time to make it manageable. You might even bristle against them at first because they seem overzealous, overcomplicated, or antiquated. But give it time. Typically conventions like this are put in place to solve previous problems, and you may not have been around to feel those problems. <\/p>\n\n\n\n<p>As the title of this section said, the actual work of a job might be more than half learning, using, and evolving these conventions. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Learn a framework<\/h2>\n\n\n\n<p>Pick one!<\/p>\n\n\n\n<p>It&#8217;s actually probably better to pick <em>one<\/em> (and a relatively popular one at that) and build something real\/significant on it. Right now, the big front-end frameworks are:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/nextjs.org\/\">Next.js<\/a> (React) \u2014 <a href=\"https:\/\/frontendmasters.com\/learn\/react\/?utm_source=boost&amp;utm_medium=blog&amp;utm_campaign=boost\">React Learning Path<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/nuxt.com\/\">Nuxt<\/a> (Vue) \u2014 <a href=\"https:\/\/frontendmasters.com\/learn\/vue\/?utm_source=boost&amp;utm_medium=blog&amp;utm_campaign=boost\">Vue Learning Path<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/astro.build\/\">Astro<\/a> (Multi-framework capable) \u2014 <a href=\"https:\/\/frontendmasters.com\/courses\/astro\/?utm_source=boost&amp;utm_medium=blog&amp;utm_campaign=boost\">Astro Course<\/a><\/li>\n<\/ol>\n\n\n\n<p>And if you&#8217;re intentionally <em>not<\/em> wanting to use a site where you&#8217;re writing JavaScript to build it:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/gohugo.io\/\">Hugo<\/a> (Go)<\/li>\n\n\n\n<li><a href=\"https:\/\/jekyllrb.com\/\">Jekyll<\/a> (Ruby)<\/li>\n\n\n\n<li><a href=\"https:\/\/www.11ty.dev\/\">Eleventy<\/a> (Node)<\/li>\n<\/ol>\n\n\n\n<p>If what you&#8217;re building is a pure content site a classic Content Management System (CMS) is good choice, and here are some of the big ones:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wordpress.org\/\">WordPress<\/a> (PHP)<\/li>\n\n\n\n<li><a href=\"https:\/\/craftcms.com\/\">CraftCMS<\/a> (PHP)<\/li>\n\n\n\n<li><a href=\"https:\/\/strapi.io\/\">Strapi<\/a> (Node)<\/li>\n<\/ul>\n\n\n\n<p>If you&#8217;re interested in more of a full stack framework that helps with back-end needs as well:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/rubyonrails.org\/\">Ruby on Rails<\/a> (Ruby)<\/li>\n\n\n\n<li><a href=\"https:\/\/www.djangoproject.com\/\">Django<\/a> (Python)<\/li>\n\n\n\n<li><a href=\"https:\/\/laravel.com\/\">Laravel<\/a> (PHP)<\/li>\n<\/ol>\n\n\n\n<p>You may hear advice that you should learn fundamentals and understand what a framework is doing before you leap into using the framework. That&#8217;s an understandable opinion, but frameworks are so common and come up in job descriptions enough that learning them early is not going to hurt you. Many people learn and framework and the underlaying technology together and over time.<\/p>\n\n\n\n<p>The point of picking a framework is partially because they help you build websites faster by helping with a whole variety of things, including things that aren&#8217;t really a part of the web platform itself. For instance, websites are often built from <strong>data<\/strong>. Sure, a blog post is ultimately served as HTML, but the content, the title, the author, the tags, etc. are not <em>stored<\/em> as a big chunk of HTML, it is stored as data, and later templated into HTML. This gives you a practical level of control over what you&#8217;re building. A framework can help you retrieve that data and do the templating, and potentially even store and edit that data. That&#8217;s just to name one thing a framework can do that is awfully important.<\/p>\n\n\n\n<p>A framework will likely also help you with URLs, otherwise known as <em>routing.<\/em> A framework like Next.js has &#8220;folder-based&#8221; routing, meaning you&#8217;re building the URLs your site will use based on the names of folders and files in the project itself. A framework like WordPress gives you control over the URLs through settings and the way you structure content, and much less so through files and folders. Learning these different conventions is interesting, as they are full of trade-offs. Evaluating trade-offs are a big part of leveling up as a developer.<\/p>\n\n\n\n<p>Frameworks will also likely provide a way to build a site by combining together smaller pieces. JavaScript frameworks typically call them &#8220;components&#8221;, but any framework will have some abstraction for this idea. &#8220;Partials&#8221; and &#8220;includes&#8221; are similar ideas. Building websites from smaller parts is now well-established as the way that digital products are best-built. They can evolve into a design system, a way to systematize and bring consistency to otherwise large and unwieldily products. Components can be opinionated, in a good way, about what data they require. They can encapsulate logic, styles, and behavior. They can sometimes be loaded as needed to help with performance. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">General Tooling<\/h2>\n\n\n\n<p>It&#8217;s useful to understand how some tools help you with the fundamental languages. For, consider these tools that we&#8217;d generically refer to as processors:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/frontendmasters.com\/learn\/typescript\/\">TypeScript<\/a> augments <a href=\"https:\/\/frontendmasters.com\/learn\/javascript\/\">JavaScript<\/a> \u2014 <a href=\"https:\/\/frontendmasters.com\/learn\/typescript\/?utm_source=boost&amp;utm_medium=blog&amp;utm_campaign=boost\">TypeScript Learning Path<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sass-lang.com\/documentation\/js-api\/interfaces\/options\/\">SCSS<\/a> augments CSS<\/li>\n\n\n\n<li><a href=\"https:\/\/react.dev\/learn\/writing-markup-with-jsx\">JSX<\/a> augments HTML<\/li>\n<\/ul>\n\n\n\n<p>You don&#8217;t always need them, but it&#8217;s good to know when laying them on is a good idea. Most code bases, particularly at a job where you have a team and are working on a long-term project, are going to use a bunch of tools.  <\/p>\n\n\n\n<p>There are tools that&#8230; help run tools! If you&#8217;re using a framework, it&#8217;s common that a variety of tooling is already built in. For example Nuxt and Astro run <a href=\"https:\/\/vitejs.dev\/\">Vite<\/a> under the hood, which does all sorts of things like running a server, processing TypeScript, and bundling. Vite is great and <a href=\"https:\/\/frontendmasters.com\/courses\/vite\/?utm_source=boost&amp;utm_medium=blog&amp;utm_campaign=boost\">worth learning<\/a>. <\/p>\n\n\n\n<p>There is great benefit to tools in the formatting and linting world as well. A formatting like <a href=\"https:\/\/prettier.io\/\">Prettier<\/a> automatically formats your code in your code editor. Linting tools like <a href=\"https:\/\/eslint.org\/\">ESLint<\/a> for JavaScript and <a href=\"https:\/\/stylelint.io\/\">Stylelint<\/a> for CSS are helpful in warning you about problems in your code. These types of tools you typically make dependencies of your project, but express themselves mostly in your code editor. And let&#8217;s face it, <a href=\"https:\/\/code.visualstudio.com\/\">VS Code<\/a> is the dominant code editor right now.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Making a Complete Website<\/h2>\n\n\n\n<p>There is one thing you can do that might just light a spark inside you about this whole <em>building websites<\/em> thing. It&#8217;s build a website. For real though:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Buy a domain for something real<\/li>\n\n\n\n<li>Figure out web hosting<\/li>\n\n\n\n<li>Build the real website<\/li>\n\n\n\n<li>Deploy it to the world<\/li>\n<\/ol>\n\n\n\n<p>For example, buy your own name as a domain name. There are so many TLDs these days, you&#8217;ll find something that works. Now you&#8217;ve got real skin in the game. This is <em>your<\/em> website. It represents <em>you.<\/em> You&#8217;ll probably send people here on purpose, maybe for the rest of your life. You own this bit of digital real estate, and paid money to have it. <\/p>\n\n\n\n<p>Getting a project like this done can be truly exhilarating, knowing that anyone in the world can see and interact with it. Now do it again!<\/p>\n\n\n\n<p class=\"learn-more\">You could build <a href=\"https:\/\/frontendmasters.com\/courses\/portfolio-website\/?utm_source=boost&amp;utm_medium=blog&amp;utm_campaign=boost\">a personal portfolio website<\/a> for this. Hosting doesn&#8217;t have to be hard or expensive, <a href=\"https:\/\/frontendmasters.com\/blog\/exactly-how-to-deploy-local-files-to-make-a-live-website\/\">we have a simple guide<\/a>. Leveling up, Jem&#8217;s course can walk you through <a href=\"https:\/\/frontendmasters.com\/courses\/fullstack-v3\/?utm_source=boost&amp;utm_medium=blog&amp;utm_campaign=boost\">setting up your own server from scratch<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"798\" src=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/build-portfolio.png?resize=1024%2C798&#038;ssl=1\" alt=\"\" class=\"wp-image-3602\" srcset=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/build-portfolio.png?resize=1024%2C798&amp;ssl=1 1024w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/build-portfolio.png?resize=300%2C234&amp;ssl=1 300w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/build-portfolio.png?resize=768%2C598&amp;ssl=1 768w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/build-portfolio.png?resize=1536%2C1197&amp;ssl=1 1536w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/build-portfolio.png?resize=2048%2C1596&amp;ssl=1 2048w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/build-portfolio.png?w=3000&amp;ssl=1 3000w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">The Most Important of All: Being Someone People Want to Work With<\/h2>\n\n\n\n<p><strong>Be friendly.<\/strong> Nobody wants to work with a jerk.<\/p>\n\n\n\n<p>I understand that you can&#8217;t snap your fingers and change your personality, but you can work on it. And just in case you have an idea that this industry prefers the <em>lone genius<\/em> type that you have to tiptoe around or get snapped at, please wipe that out of your mind because it isn&#8217;t true and it&#8217;s going to hurt you more than help. People hire other people. People give other people promotions. People are going to do that for people they like. <\/p>\n\n\n\n<p><strong>Be interesting.<\/strong> It&#8217;s a big world out there.<\/p>\n\n\n\n<p>People want to work with people they like, respect, and think are worth getting to know. Are you super into building model ships? Did you recently become a more dedicated runner? Can you play the sitar? Are you a bit of a foodie? You don&#8217;t have to constantly prattle on about it, but you can bring all of yourself to professional situations. Intrigue people and remember that interesting solutions come from diverse places.<\/p>\n\n\n\n<p><strong>Be valuable.<\/strong> People don&#8217;t forget it when you help them.<\/p>\n\n\n\n<p>Make sure you do your own work, but help other people with theirs, too. The most valuable people on any team are typically the <em>force multipliers<\/em>. A 10\u00d7 developer isn&#8217;t a developer that is ten times better than an average developer, it&#8217;s a developer that multiplies the whole teams output by being helpful. That&#8217;s what will make you senior someday.<\/p>\n\n\n\n<p><strong>Be smart.<\/strong> You can <em>become<\/em> smart, particularly in niche areas, by putting in the time and learning them deeply. That&#8217;s what Frontend Masters is here for! Being smart is part of being valuable. Your expertise makes you that way, when you use it to solve problems and help people. <\/p>\n\n\n\n<p><strong>Build a network.<\/strong> You&#8217;re going to need to ask questions. A lot. Like, everyday. A network is just a way of saying you&#8217;ve got places to ask questions. Here are some Discords we like:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/discord.gg\/CUuYVH7Qa9\">The Spicy Web Discord<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/discord.com\/invite\/buildWithLit\">Lit Framework Discord<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/discord.com\/invite\/bUG2bvbtHy\">Next.js Discord<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/discord.com\/invite\/astrodotbuild\">Astro Discord<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/v1.tailwindcss.com\/discord\">Tailwind CSS Discord<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/discord.com\/invite\/AuEWpFkfD4\">JavaScript.info Discord<\/a><\/li>\n<\/ul>\n\n\n\n<p>And if you have a Frontend Masters membership, we have a Discord (look under the <a href=\"https:\/\/frontendmasters.com\/my-account\/apps\/\">Apps<\/a> section of your account for access)<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"345\" src=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/people.png?resize=1024%2C345&#038;ssl=1\" alt=\"\" class=\"wp-image-3603\" srcset=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/people.png?resize=1024%2C345&amp;ssl=1 1024w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/people.png?resize=300%2C101&amp;ssl=1 300w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/people.png?resize=768%2C259&amp;ssl=1 768w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/people.png?resize=1536%2C518&amp;ssl=1 1536w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/people.png?w=1850&amp;ssl=1 1850w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">A Practical Step<\/h2>\n\n\n\n<p><strong>Do something every day.<\/strong> Couple months of that and you&#8217;ve got yourself a awfully productive habit. For those of you with a job, you&#8217;re already doing this, so good job. This is more for the people who are trying to level up and get that job. An hour a day of learning and practicing is better than seven hours in one day.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Know this:<\/h2>\n\n\n\n<p>It&#8217;s always going to be <a href=\"https:\/\/rachsmith.com\/comfortable-with-the-struggle\/\">a little uncomfortable<\/a>. And by &#8220;always&#8221; we mean pretty much every day. You&#8217;ll sit down, have something you need to do, and not really understand how you&#8217;re going to do it. It can be frustrating and demoralizing. But computers are logical machines. Check out Julia Evan&#8217;s <a href=\"https:\/\/store.wizardzines.com\/products\/poster-debugging-manifesto\">Debugging Manifesto poster<\/a>, it has a great line on it: &#8220;computers are always logical, even when it doesn&#8217;t feel that way.&#8221; There is a way through, and you&#8217;ll be able to find it. Take a walk, sleep it off, come back and try it again. This daily struggle is part of this career path.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Things *not* to learn<\/h2>\n\n\n\n<p>We&#8217;d be hesitant to <em>stop<\/em> you from learning anything, particularly if your natural course of working and creating anything leads you there. If you&#8217;re trying to learn something that feels a bit like pulling teeth and you&#8217;re just learning it for the sake of learning it, that might be a good time to change course, just because there are no shortage of <em>other<\/em> things to learn that might click with you better.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Good luck! <\/h2>\n\n\n\n<p>Feel free to comment below if you have your own thoughts on what a junior web developer these days should be focusing on, or to share your own journey.<\/p>\n\n\n\n<p class=\"learn-more\">We&#8217;ve been pointing to Frontend Masters courses here a lot, but can you blame us? It&#8217;s part of the journey. Our <a href=\"https:\/\/frontendmasters.com\/learn\/beginner\/?utm_source=boost&amp;utm_medium=blog&amp;utm_campaign=boost\">Beginner Learning Path<\/a> is nearly 40 hours, so that&#8217;ll keep you busy. It&#8217;s literally designed to make you career-ready. And beyond technical skills, we also have a completely free course on <a href=\"https:\/\/frontendmasters.com\/courses\/getting-a-job-v3\/\">Getting a Developer Job, v3<\/a> when you feel like it&#8217;s time to hunt for a job!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>These are our recommendations for those of you early in your web developer journey. This is about tech and the real world stuff around it that you&#8217;ll need.<\/p>\n","protected":false},"author":15,"featured_media":3601,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"sig_custom_text":"","sig_image_type":"featured-image","sig_custom_image":0,"sig_is_disabled":false,"inline_featured_image":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[207,22],"class_list":["post-3235","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog-post","tag-editorial","tag-job-hunting"],"acf":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/08\/full-stack.jpg?fit=1800%2C1004&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/posts\/3235","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/comments?post=3235"}],"version-history":[{"count":68,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/posts\/3235\/revisions"}],"predecessor-version":[{"id":3667,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/posts\/3235\/revisions\/3667"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/media\/3601"}],"wp:attachment":[{"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/media?parent=3235"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/categories?post=3235"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/tags?post=3235"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}