<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Will Taylor</title>
    <description>The latest articles on Forem by Will Taylor (@wtaylor45).</description>
    <link>https://forem.com/wtaylor45</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%2F134648%2Ff6665e8d-e4a2-4d7c-844e-541e15ea7768.jpg</url>
      <title>Forem: Will Taylor</title>
      <link>https://forem.com/wtaylor45</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/wtaylor45"/>
    <language>en</language>
    <item>
      <title>5 Ways to Stand Out at your Dev Job</title>
      <dc:creator>Will Taylor</dc:creator>
      <pubDate>Thu, 25 Jul 2019 11:35:24 +0000</pubDate>
      <link>https://forem.com/wtaylor45/5-ways-to-stand-out-at-your-dev-job-32pf</link>
      <guid>https://forem.com/wtaylor45/5-ways-to-stand-out-at-your-dev-job-32pf</guid>
      <description>&lt;p&gt;I’ve recently been trying at work to get out of my comfort zone. That means doing my best to stand out in positive ways. &lt;br&gt;
During this time, I’ve seen some great personal growth, and I know people at work have also taken note. &lt;/p&gt;

&lt;p&gt;So if you’re looking for ways to stand out in your dev role, hopefully a few of my ideas can give you some inspiration!&lt;/p&gt;

&lt;h2&gt;
  
  
  Build Trust with Product Owners
&lt;/h2&gt;

&lt;p&gt;Product owners are seen as a necessary evil by many devs. The reality is that having a strong relationship with your product owner can be extremely powerful.&lt;/p&gt;

&lt;p&gt;Building trust can be tough, though. Here's a couple of things I've found especially effective. &lt;/p&gt;

&lt;p&gt;Be willing and able to compromise. There will be times that a requirement comes down that for whatever reason you don't agree with. If you can talk to them to find a middle ground, they'll be much more willing to hear you out when you want to bring up your own ideas.&lt;/p&gt;

&lt;p&gt;Communicate calmly. It can be frustrating when a conversation isn't going your way. Stay calm and explain your reasoning. That'll leave them feeling comfortable talking to you moving forward.&lt;/p&gt;

&lt;p&gt;At the end of the day, you want to be the person your product owner loves to talk with.&lt;/p&gt;

&lt;h2&gt;
  
  
  Suggest New Ideas Beyond Your Title
&lt;/h2&gt;

&lt;p&gt;This is a tricky one. I've always advocated that developers should not be confined in their engineering box. A great way to do this is to always look for suggestions or actions you can take that might be outside of your direct responsibilities.&lt;/p&gt;

&lt;p&gt;For example, if you're a front end dev, try designing a quick mock-up in Sketch. Simply making a quick suggestion to the designer if your team has one can be just as effective as well. Little things add up and won’t go unnoticed.&lt;/p&gt;

&lt;p&gt;Be sure to be respectful &lt;strong&gt;as hell&lt;/strong&gt; when you do this, though. You don't want to step on other people's toes or inadvertently hurt a colleague’s feelings. If you do pull it off, however, you'll make a deep impression on people throughout the organization.&lt;/p&gt;

&lt;p&gt;You'll show everyone that you are more than what your title says you are.&lt;/p&gt;

&lt;h2&gt;
  
  
  Share Your Knowledge
&lt;/h2&gt;

&lt;p&gt;You know things. I promise that you do. You probably know things that people at your company don't know.&lt;/p&gt;

&lt;p&gt;A great way to stand out is to share that knowledge. Say you’ve been working hard on setting up the linting for a project. Give a quick demo and teach people about configuring the linting rules themselves. If you're passionate about accessibility, share that with others at your company!&lt;/p&gt;

&lt;p&gt;Not only is this a great way to stand out, but it's an awesome medium for personal growth. By talking or writing about a subject, you force yourself to engrain that topic in your brain. In addition, it can be a great confidence boost. &lt;/p&gt;

&lt;p&gt;If you're already writing blog posts or sharing through another medium and your company doesn't know, tell them! It can be scary, but odds are they'll want nothing more than to encourage you!&lt;/p&gt;

&lt;p&gt;So share your knowledge! Go help your company out all while making yourself more noticeable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Always Ask Questions
&lt;/h2&gt;

&lt;p&gt;Like I said, you know things. Other people know other things. Ask them about those things!&lt;/p&gt;

&lt;p&gt;The benefits that come from asking questions cannot be understated. You'll work through problems more quickly. You'll show your co-workers that you're eager to learn. Most importantly, you'll actually learn new things.&lt;/p&gt;

&lt;p&gt;Don't spend an hour bashing your head against a wall trying to debug something. If you've been at it for 5 or 10 minutes and feel stuck, throw the question into slack. Even better, if you know someone who might know a solution, go talk to them!&lt;/p&gt;

&lt;p&gt;When you ask these questions, make sure to get some context behind the answers. A huge advantage of getting the answers from someone you know over going to Stack Overflow is the fact that you can dig deeper. &lt;/p&gt;

&lt;p&gt;At the jobs I've worked, asking questions was always valued extremely highly. Just make sure you give whatever problem you're tackling an honest shot before asking!&lt;/p&gt;

&lt;h2&gt;
  
  
  Be Confident
&lt;/h2&gt;

&lt;p&gt;This is the hardest one of all. Many of us struggle to some degree with imposter syndrome. That often makes us get in our own heads about standing out.&lt;/p&gt;

&lt;p&gt;Amy Cuddy had wise words that fit well here. "Fake it till you become it". Doing everything I listed above is not easy, but it's something we're all capable of doing.&lt;/p&gt;

&lt;p&gt;It only gets easier the more you do it. It's a positive feedback loop. Act confident, and you'll start to feel more confident. Start sharing your knowledge, and you'll become a better communicator. &lt;/p&gt;

&lt;p&gt;You can do this. You got this. Go kill it! &lt;/p&gt;

</description>
      <category>career</category>
    </item>
    <item>
      <title>Quick and Easy Text Highlight Animation</title>
      <dc:creator>Will Taylor</dc:creator>
      <pubDate>Mon, 15 Jul 2019 12:26:46 +0000</pubDate>
      <link>https://forem.com/wtaylor45/quick-and-easy-text-highlight-animation-386e</link>
      <guid>https://forem.com/wtaylor45/quick-and-easy-text-highlight-animation-386e</guid>
      <description>&lt;p&gt;Highlighting text on your site is a great way to bring attention to key features or important context. Sure, you could just have the text highlighted by default, but what if you could do it in a silky smooth and 😎crazy cool😎 way?&lt;/p&gt;

&lt;p&gt;Getting an effect that looks just like this one is super simple, so let me show you!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7lpeb0ntr2pdkxhsyt36.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7lpeb0ntr2pdkxhsyt36.gif" alt="animation of an underline moving up and highlighting all of the text on hover"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's start off with the initial state where the text is underlined. While it may look like we use a &lt;code&gt;border-bottom&lt;/code&gt; or a &lt;code&gt;text-decoration&lt;/code&gt;, it's actually a handful of background properties.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;linear-gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;#ffd900&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;#ffd900&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;background-repeat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;no-repeat&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0%&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt; &lt;span class="m"&gt;2px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;The code above says that there is a &lt;code&gt;background-image&lt;/code&gt; that is really just the solid color &lt;code&gt;#ffd900&lt;/code&gt;. By using &lt;code&gt;background-image&lt;/code&gt;, however, we can set &lt;code&gt;background-repeat&lt;/code&gt; to &lt;code&gt;no-repeat&lt;/code&gt; to have full control over the size and position of the background.&lt;/p&gt;

&lt;p&gt;The code that gives us the line itself is &lt;code&gt;background-size: 100% 2px&lt;/code&gt;, which says that the background should fill the whole width but only be 2px high. To position that line under the text, we use &lt;code&gt;background-position: 0% 100%&lt;/code&gt;, which tells the background to position itself at the start of the text horizontally, but all the way at the end vertically.&lt;/p&gt;

&lt;p&gt;Now, let's talk about the highlighted state! I'm going to have the highlighted state trigger on hover, but you could have it trigger any way you want. To get the text highlighted, we just need to make a couple of tweaks to the initial state:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0%&lt;/span&gt; &lt;span class="m"&gt;0%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;Not so bad, right! We just use &lt;code&gt;background-size&lt;/code&gt; to make the background cover 100% of the width and height of the container and &lt;code&gt;background-position&lt;/code&gt; to move the start of the background to the top of the container.&lt;/p&gt;

&lt;p&gt;Okay, awesome! We have the text initially underlined, then getting highlighted on hover. It's pretty off-putting, though, how it snaps between states. So let's animate this bad boy!&lt;/p&gt;

&lt;p&gt;Doing so is really, really easy. Both &lt;code&gt;background-position&lt;/code&gt; and &lt;code&gt;background-size&lt;/code&gt; can be animated which is key for what we want to do. That means by just applying a &lt;code&gt;transition&lt;/code&gt; to our initial and highlighted states, we can achieve our desired result! Here's what those transitions look like:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;background-size&lt;/span&gt; &lt;span class="m"&gt;.5s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;background-position&lt;/span&gt; &lt;span class="m"&gt;.3s&lt;/span&gt; &lt;span class="n"&gt;ease-in&lt;/span&gt; &lt;span class="m"&gt;.5s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;background-position&lt;/span&gt; &lt;span class="m"&gt;.5s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;background-size&lt;/span&gt; &lt;span class="m"&gt;.3s&lt;/span&gt; &lt;span class="n"&gt;ease-in&lt;/span&gt; &lt;span class="m"&gt;.5s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;The hover transition brings the underline up to the top first, and then increases the &lt;code&gt;background-size&lt;/code&gt; to 100%. The transition back to the initial state is almost identical, but we shrink the &lt;code&gt;background-size&lt;/code&gt; first, and then bring the underline back down. To make one happen after the other we just need to set the transition delay to the same length as the first transition. I do this using the short-hand &lt;code&gt;transition&lt;/code&gt; property to set the &lt;code&gt;transition-delay&lt;/code&gt; as well as a couple of other properties.&lt;/p&gt;

&lt;p&gt;Combining these few lines of code results in that smooth animation I showed you earlier! It doesn't have to stop there though! You can animate these properties however much you want. You can trigger them however you want. You can use these for something other than text highlighting. This is something that really leaves room for creativity, and I urge you to try it out!&lt;/p&gt;

&lt;p&gt;Thanks for reading! ✌️ &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://codepen.io/wtaylor45/pen/pXGbeY" rel="noopener noreferrer"&gt;View the source for this animation on CodePen&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>css</category>
    </item>
    <item>
      <title>Be Lazier With Semantic HTML</title>
      <dc:creator>Will Taylor</dc:creator>
      <pubDate>Thu, 20 Jun 2019 11:45:26 +0000</pubDate>
      <link>https://forem.com/wtaylor45/be-lazier-with-semantic-html-3mge</link>
      <guid>https://forem.com/wtaylor45/be-lazier-with-semantic-html-3mge</guid>
      <description>Cover photo by Drew Coffman on Unsplash




&lt;p&gt;&lt;em&gt;I know semantic HTML is old news, but here's me shouting from the rooftops that it's literally easier to use it than to not. Show this to haters should you come across them&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;You may have heard of the term "Div Soup" before. That's when a website is built mostly out of hundreds of divs, often deeply nested within one another. If you want a good example, look at Twitter's source.&lt;/p&gt;

&lt;p&gt;What's wrong with div soup? Well, there are three main problems.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Web crawlers will have a worse time indexing and ranking your site&lt;/li&gt;
&lt;li&gt;Your code base is harder to read through and understand&lt;/li&gt;
&lt;li&gt;Harder to account for and implement accessibility&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now, I'm not trying to attack Twitter. They clearly don't have SEO problems, the site works well from an accessibility standpoint, and I'll just assume they have a well-maintained code base. That's a credit to everyone who worked hard on the redesign and got it out the door.&lt;/p&gt;

&lt;p&gt;However, I'm here to advocate for a different approach to the hard work Twitter put in. That approach is... &lt;strong&gt;Laziness&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Semantic HTML
&lt;/h2&gt;

&lt;p&gt;For those who aren't totally familiar with what I mean when I say "Semantic HTML", let me give a brief overview.&lt;/p&gt;

&lt;p&gt;Semantic HTML elements released in HTML5 (and also some from 4) give meaning to the content on the page, agnostic to any style decisions. For example, the &lt;code&gt;section&lt;/code&gt; element could technically be used everywhere you use a &lt;code&gt;div&lt;/code&gt;. That's not the point of the &lt;code&gt;section&lt;/code&gt; element, though. It serves as a way to group together thematically related content. The element itself has no impact on the way your site is visually displayed.&lt;/p&gt;

&lt;p&gt;There are plenty of other elements, and I strongly encourage you to check out &lt;a href=""&gt;this article&lt;/a&gt; which gives you a bit of detail on each.&lt;/p&gt;

&lt;p&gt;So how does this all relate to being lazy? &lt;/p&gt;

&lt;p&gt;It's lazy because creating or updating a site to use semantic elements doesn't require you to migrate to a new library or framework. It doesn't require some highly specialized knowledge or a total refactoring of your CSS on top of it. It's lazy because it can take a lot of the burden away off the developer when trying to make your site accessible for people using screen readers. &lt;/p&gt;

&lt;p&gt;It's lazy, and yet still comes with so many big advantages. Let's look at that list of pain points about div soup from earlier again.&lt;/p&gt;

&lt;h3&gt;
  
  
  SEO
&lt;/h3&gt;

&lt;p&gt;When a web crawler comes through to decide how it should rank your site, it uses a host of different strategies to understand what's happening on the page. One of the most basic strategies is using HTML tag names. &lt;/p&gt;

&lt;p&gt;For example, having your header, nav bar, and footer clearly marked with their corresponding HTML elements and your main site content under the &lt;code&gt;main&lt;/code&gt; tag allows a crawler to quickly identify where it should look for the actual meat of your site. This is the same idea as using more well-known SEO tags like &lt;code&gt;title&lt;/code&gt; and all of the &lt;code&gt;meta&lt;/code&gt; variations.&lt;/p&gt;

&lt;p&gt;SEO is kind of a black box. There's no concrete way to say, "Yes! Using HTML5 elements will shoot you up in the rankings!". It's well known, however, that web crawlers do use HTML tags to try and find out where to look. If you can make their lives easier, that has a good chance of helping your site out.&lt;/p&gt;

&lt;h3&gt;
  
  
  Harder to read code base
&lt;/h3&gt;

&lt;p&gt;A maintainable code base is a really, really hard to thing to achieve. That's why tools like ESLint and Prettier are so important. Format your code all you want, but if everything and its dog is a &lt;code&gt;div&lt;/code&gt;, you'll probably have a headache before you understand what you're looking at.&lt;/p&gt;

&lt;p&gt;Take a look at this beauty.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"header"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Hello There&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    This is some of the more important content. This is a basic intro to it.
    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
        Now let's get into the content
        &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This is an example piece of content&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This is an example piece of content too&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
    This is my footer.
    Here's some legal info.
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This isn't very complicated to parse once you take a beat. At first glance, however, it can be really tough to understand. Almost everything is segmented off with a &lt;code&gt;div&lt;/code&gt;, and our only other clues to what's going are the class names and the content itself.&lt;/p&gt;

&lt;p&gt;So let's fix this in the laziest way possible. Let's just change the tag names on the elements to be semantic.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;header&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"header"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Hello There&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;This is the header!&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/header&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;main&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    This is some of the more important content. This is a basic intro to it.
    &lt;span class="nt"&gt;&amp;lt;section&amp;gt;&lt;/span&gt;
        Now let's get into the content
        &lt;span class="nt"&gt;&amp;lt;article&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This is an example piece of content&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;article&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This is an example piece of content too&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/main&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;footer&amp;gt;&lt;/span&gt;
    This is my footer.
    &lt;span class="nt"&gt;&amp;lt;small&amp;gt;&lt;/span&gt;Here's some legal info.&lt;span class="nt"&gt;&amp;lt;/small&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/footer&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With just a few minor changes, this page becomes just a little bit easier to read. No libraries, no weird out of place comments, just pure HTML. Another benefit is that the page looks exactly the same as it did before (except the &lt;code&gt;small&lt;/code&gt; element, that one changes font-size 😬).&lt;/p&gt;

&lt;p&gt;Keep in mind this might not matter for an example on this small of a scale, but as your site grows, so will the value gained from leveraging semantic elements. This holds true even when you have your site well broken up into smaller components.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accessibility
&lt;/h3&gt;

&lt;p&gt;Accessibility is something every developer needs to be aware of. A significant portion of users have disabilities and use some sort of assistive tech when browsing the web. &lt;/p&gt;

&lt;p&gt;There's a lot to consider when it comes to making your site accessible, (too much to cover here). Luckily, you can get away with a &lt;em&gt;little&lt;/em&gt; laziness just by using semantic HTML.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;DISCLAIMER: I'm not saying this is all you need to do for accessibility. It just helps.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;To illustrate one of the big wins from using semantic HTML, let's look at the code from earlier's &lt;a href="https://developers.google.com/web/fundamentals/accessibility/semantics-builtin/the-accessibility-tree" rel="noopener noreferrer"&gt;accessibility tree&lt;/a&gt;. The accessibility tree is a representation of the DOM that screen readers use to read to its users.&lt;/p&gt;

&lt;p&gt;Here's the tree for one part of the non-semantic HTML:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fe58v5q8roqakfwar8p5o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fe58v5q8roqakfwar8p5o.png" alt="accessibility tree showing only a paragraph tag and some text within it"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Okay, that makes enough sense. It's a paragraph with some text in it. Now, what about the accessibility tree that uses semantic elements? Here's that tree for the exact same portion as above:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fenjvk4h6t3z466r1mnhb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fenjvk4h6t3z466r1mnhb.png" alt="accessibility tree showing main, section, article and paragraph tags"&gt;&lt;/a&gt;&lt;/p&gt;
No, that's not just an un-cropped version of the first picture.



&lt;p&gt;There's actually a lot more there! There's more context about what is present on the screen and what exactly the user is reading. &lt;/p&gt;

&lt;p&gt;Why the difference? &lt;/p&gt;

&lt;p&gt;The accessibility tree will leave out most divs since their purpose is usually stylistic rather than semantic. Therefore, there's no reason a screen reader should care about them.&lt;/p&gt;

&lt;p&gt;You can, and &lt;strong&gt;should&lt;/strong&gt;, add aria-label's to both examples to help the screen reader out. Doing so will include the div in the accessibility tree along with the label. We're talking about laziest wins we can get here, though. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Update: Here's a handy quote from &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA" rel="noopener noreferrer"&gt;MDN's ARIA docs&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Many of these widgets were later incorporated into HTML5, and &lt;br&gt;
developers should prefer using the correct semantic HTML element &lt;br&gt;
over using ARIA, if such an element exists.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;Semantic HTML is not the holy elixir that will magically solve all your problems and cure all that ails you. Nor are &lt;code&gt;div&lt;/code&gt; tags the devil. They have their use, and they should continue to be used in the proper way. Semantic HTML is, however, a super easy, almost-no-risk way to gain some easy wins for your site.&lt;/p&gt;

&lt;p&gt;So whether you're starting up a new project or continuing to work on a monolithic legacy codebase, you can leverage semantic HTML with ease. &lt;/p&gt;

&lt;p&gt;So please do. Seriously. It's been official for like 5 years guys.&lt;/p&gt;

</description>
      <category>semantichtml</category>
      <category>a11y</category>
    </item>
    <item>
      <title>"You're Not Smart Enough to Code"</title>
      <dc:creator>Will Taylor</dc:creator>
      <pubDate>Mon, 10 Jun 2019 15:26:36 +0000</pubDate>
      <link>https://forem.com/wtaylor45/you-re-not-smart-enough-to-code-1jgc</link>
      <guid>https://forem.com/wtaylor45/you-re-not-smart-enough-to-code-1jgc</guid>
      <description>&lt;p&gt;I vividly remember the fall of my junior year of high school. Everyone was working hard to get their GPA up while simultaneously trying to figure out what they were going to study in college. After all, what you study in college determines the rest of your career (&lt;em&gt;Note: it does not&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;I was lucky. I knew exactly what I wanted to study. Since I was a twelve-year-old I'd been toying around with code. I'd make websites, little very-bad games, and learn whatever the latest YouTube tutorials wanted to teach me. I was good to go.&lt;/p&gt;

&lt;p&gt;Oh, except I wasn't very good at math. Actually, I &lt;strong&gt;sucked&lt;/strong&gt; at math. My whole life up to that point I desperately needed a math tutor to have any chance of getting through a class. I knew math was important, but I never had a doubt that I couldn't code because of it.&lt;/p&gt;

&lt;p&gt;That was until it was time to meet with my counselor. &lt;/p&gt;

&lt;p&gt;The school had three counselors, each assigned a group of students. These counselors were meant to help guide you through the tumultuous time of picking your college and your future. It's a very useful tool for many, and I was excited to take advantage of it.&lt;/p&gt;

&lt;p&gt;When my meeting finally rolled around, the conversation started off very light. We talked about how the year was going, my band (hell yeah I had a band), and joked about the ending of &lt;em&gt;Lost&lt;/em&gt;. Then we got down to business.&lt;/p&gt;

&lt;p&gt;He asked me about where I was thinking of applying. I laid out five or six schools I was highly interested in. They were a little bit above my weight class, but I wanted to give them a shot. We talked strategy when it came to the essay, resumé, and potential interview. Very valuable information that I'm thankful to this day that I got. Then we talked about safety schools.&lt;/p&gt;

&lt;p&gt;Safety schools are something everyone needs when applying to college. There's nothing wrong with them, and there's nothing wrong with going to them. My counselor mentioned that I probably was going to need a few, especially given I wanted to declare a computer science major.&lt;/p&gt;

&lt;p&gt;That made sense, computer science is extremely popular. More and more students every year are declaring it as a major. What struck me was his next suggestion.&lt;/p&gt;

&lt;p&gt;Maybe computer science was &lt;em&gt;too&lt;/em&gt; competitive for me.&lt;/p&gt;

&lt;p&gt;Too competitive? Okay, so I won't get into a few of my top schools. That's fine. My counselor was trying to get at something a little more dramatic.&lt;/p&gt;

&lt;p&gt;Math is the single most important thing when it comes to computer science, he told me. If you're bad at math, you won't be able to become a programmer. It goes beyond not getting into school though, because even if I do, according to him, I'd likely be one of the many who drop the major after a year or less.&lt;/p&gt;

&lt;p&gt;What I heard was, "You're too dumb to code".&lt;/p&gt;

&lt;p&gt;I left that meeting feeling like someone kicked me in the stomach. I never doubted that computer science was exactly what I wanted to do. I'd been insecure about my intelligence, but never about my ability to code. He didn't only plant a seed of doubt in my mind. He watered it, gave it plenty of sunlight, and ensured it blossomed into a fully grown demon reminding me I'm not smart enough.&lt;/p&gt;

&lt;p&gt;Over the next few months, I considered several different majors. History? I love learning about history. That could work. Maybe English? I kept thinking, but nothing sparked the same fire in me that coding did. Every time I started coding, though, the voice of doubt came back.&lt;/p&gt;

&lt;p&gt;The time finally came to apply to some colleges, and I had to make a decision. I tried so hard to find something, anything that I thought I would enjoy doing more than computer science. Nothing felt right, and so I applied to every school as a computer science major.&lt;/p&gt;

&lt;p&gt;Responses started to roll in slowly. Rejections, wait-lists, and even acceptances on the condition that I &lt;em&gt;was not&lt;/em&gt; a computer science major. I could hear the voice of doubt in my head saying, "I told you so".&lt;/p&gt;

&lt;p&gt;It wasn't until June of my senior year, which was terrifyingly late, that I was accepted off the wait-list at the University of Delaware as a computer science major. &lt;/p&gt;

&lt;p&gt;Four years later, I graduated. I made it through a stressful job search my senior year, and then another just a couple of months ago. The voice of doubt in my head still exists, as I know it does for a lot of us. Just remember, if you're passionate about programming, or really anything, don't give up on it just because people say you're not good enough.&lt;/p&gt;

&lt;p&gt;Oh, by the way, I still suck at math.&lt;/p&gt;

</description>
      <category>career</category>
      <category>impostersyndrome</category>
    </item>
    <item>
      <title>What are JavaScript Pipeline Operators?</title>
      <dc:creator>Will Taylor</dc:creator>
      <pubDate>Thu, 21 Mar 2019 01:41:19 +0000</pubDate>
      <link>https://forem.com/wtaylor45/what-are-javascript-pipeline-operators-30ca</link>
      <guid>https://forem.com/wtaylor45/what-are-javascript-pipeline-operators-30ca</guid>
      <description>&lt;p&gt;&lt;em&gt;Update: View live examples of the pipe operator on &lt;a href="https://codepen.io/wtaylor45/pen/jJKXzv"&gt;CodePen&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;JavaScript is a constantly evolving language as I'm sure you've already experienced. TC39, the technical committee that determines what features become a part of the JavaScript standard, is constantly receiving proposals that aim to further improve the language.&lt;/p&gt;

&lt;p&gt;One such proposal is the &lt;strong&gt;Pipeline Operator&lt;/strong&gt;. This operator is still in the early stages of the process that brings proposals from ideas to reality, but its availability in &lt;a href="https://github.com/babel/babel/releases/tag/v7.3.0"&gt;Babel 7.3&lt;/a&gt; has allowed it to gain some notoriety. So let's dive into what the pipeline operator actually does.&lt;/p&gt;

&lt;p&gt;Let me preface this all by saying I'm covering one of the &lt;a href="https://github.com/tc39/proposal-pipeline-operator/wiki"&gt;several proposals&lt;/a&gt; that pertain to the pipeline operator. This falls under the fourth, the "smart pipeline operator".&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclaimer: None of the functionally outlined below is officially slated for an ECMAScript edition, as of March 2018&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Smart Pipeline Operator
&lt;/h2&gt;

&lt;p&gt;Let's say you wanted to be able to perform a series of different string manipulations on a given string. Being an awesome functional programmer, you made each distinct manipulation its own function.&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;, &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;exclaim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;capitalize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now all you have to do is pass a string to all of these functions and watch the magic happen.&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Expected result: Hello World! Hello World!&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;noPipe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;exclaim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;capitalize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hello world&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
&lt;span class="c1"&gt;// 🤮&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;That's not bad, but stuff like this can get really ugly and difficult to understand as it grows larger. &lt;/p&gt;

&lt;p&gt;Enter piping.&lt;/p&gt;

&lt;p&gt;Using the pipeline operator (|&amp;gt;), we can rewrite the above code to achieve the same result.&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Expected result: Hello World! Hello World!&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;withPipe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hello world&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="o"&gt;|&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;repeat&lt;/span&gt;
    &lt;span class="o"&gt;|&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;exclaim&lt;/span&gt;
    &lt;span class="o"&gt;|&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;capitalize&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// Pipe it up 🥰&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;With the pipe operator, you simply continue to call functions using &lt;code&gt;|&amp;gt;&lt;/code&gt;, and whatever you use the pipeline operator on will be passed in as an argument.&lt;/p&gt;

&lt;p&gt;This can make your code a lot easier to read as you know up front what is being acted upon, and the actions being taken on it read more like a story.&lt;/p&gt;

&lt;p&gt;You may be asking now about using the pipeline operator with functions that have multiple arguments. Well, we can take care of those too! Let's take this function as an example.&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And now let's use the pipeline operator to put it to work.&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Expected result: 6&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;|&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;#&lt;/code&gt; character here serves as a reference to the value we are piping through to each function.&lt;/p&gt;

&lt;p&gt;Okay, cool. So we can use this with single and multi-parameter functions and it makes us look &lt;em&gt;really&lt;/em&gt; cool too. But what if I don't want to write a function just to do whatever modification I'm trying to do? Why can't I just do some logic inline?&lt;/p&gt;

&lt;p&gt;You can! Let's do the same addition again, but this time without calling the &lt;code&gt;add&lt;/code&gt; function.&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Expected result: 6&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;|&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now obviously this seems a little silly to do with an example as simple as this, but as it grows in size and complexity this operator can really help your code stay readable.&lt;/p&gt;

&lt;p&gt;The proposal, which you can &lt;a href="https://github.com/js-choi/proposal-smart-pipelines/"&gt;view on github&lt;/a&gt; includes a lot of these examples and more. Some of the functionality outlined there, however, is not in the latest release of Babel. For instace, the use of &lt;code&gt;await&lt;/code&gt; and &lt;code&gt;yield&lt;/code&gt; in your pipeline. &lt;/p&gt;

&lt;p&gt;Hopefully you found this brief introduction to pipeline operators useful, and make sure to check out some of the other TC39 proposals that made it into Babel 7+! Also, CodePen now has Babel 7 support, so feel free to try this out on there.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>ecmascript</category>
      <category>babel</category>
      <category>pipelineoperator</category>
    </item>
  </channel>
</rss>
