<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Luke Berry</title>
    <description>The latest articles on DEV Community by Luke Berry (@lukeberrypi).</description>
    <link>https://dev.to/lukeberrypi</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%2F941005%2F08d74257-fa30-4434-9759-2c3afc0578f6.png</url>
      <title>DEV Community: Luke Berry</title>
      <link>https://dev.to/lukeberrypi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lukeberrypi"/>
    <language>en</language>
    <item>
      <title>The 5 Most Important Features on phived.com</title>
      <dc:creator>Luke Berry</dc:creator>
      <pubDate>Thu, 22 Feb 2024 20:55:11 +0000</pubDate>
      <link>https://dev.to/lukeberrypi/the-5-most-important-features-on-phivedcom-317j</link>
      <guid>https://dev.to/lukeberrypi/the-5-most-important-features-on-phivedcom-317j</guid>
      <description>&lt;p&gt;My project &lt;a href="https://phived.com"&gt;phived.com&lt;/a&gt; is turning 1 today!&lt;/p&gt;

&lt;p&gt;It is an anti-procrastination to-do list that I developed as a way to help me remember things I have to do. The idea is you can list up to 5 things tasks. To do more, you have to complete some of the original tasks.&lt;/p&gt;

&lt;p&gt;To celebrate, I'll look back to the 5 most important features that were implemented.I will share the pull requests at the end of the post, so you can see the implementation for each one!&lt;/p&gt;

&lt;h3&gt;
  
  
  Reorder tasks
&lt;/h3&gt;

&lt;p&gt;The most requested feature on this list. It allowed you to organize tasks however you please, regardless of the order you originally typed them.&lt;/p&gt;

&lt;p&gt;A huge win for the user experience using &lt;a href="https://github.com/atlassian/react-beautiful-dnd"&gt;react-beautiful-dnd&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExYWZib2R6a29ncGN4MXpya3MzYzA5MjY5MXFyOGVjMmQxaXUzZXlsNyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/AGgh947Iv3AgtMMyr7/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExYWZib2R6a29ncGN4MXpya3MzYzA5MjY5MXFyOGVjMmQxaXUzZXlsNyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/AGgh947Iv3AgtMMyr7/giphy.gif" width="480" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  First Load Respects OS Theme
&lt;/h3&gt;

&lt;p&gt;Even though I'm a big fan of light mode, having dark mode was a must from day 1. I know how much users, specially developers, crave it.&lt;/p&gt;

&lt;p&gt;Even more important is that the initial load of the website respects the OS theme. This means that if your OS is set to Light the site will initially load as light mode, same for Dark.&lt;/p&gt;

&lt;p&gt;If the user manually changes it to a specific mode, that will be prioritized over OS theme for all future loads.&lt;/p&gt;

&lt;h3&gt;
  
  
  Daily Tasks
&lt;/h3&gt;

&lt;p&gt;A common complaint I got was that 5 tasks weren't enough, if it could be 6, 7, 8, etc...&lt;/p&gt;

&lt;p&gt;I always pushed back since it would undermine the original purpose of the project. After all, the site &lt;em&gt;is&lt;/em&gt; called phived (five-d). And you aren't meant to accumulate tasks, quite the opposite!&lt;/p&gt;

&lt;p&gt;But one feedback caught my attention: "I spend too much time typing the same tasks everyday". As an active user, I felt this too.&lt;/p&gt;

&lt;p&gt;To a point where it became tedious to write the same few tasks every day (such as "work out", "take creatine" and "wash my face"), just to complete them and move on with my other, sporadic tasks.&lt;/p&gt;

&lt;p&gt;So I added Daily Tasks! This feature lived in its own route, &lt;a href="https://phived.com/daily"&gt;phived.com/daily&lt;/a&gt;, and had one job: to restore tasks. Whenever you complete a task, the list shrinks, and a button with "restore tasks" appears.&lt;/p&gt;

&lt;p&gt;The tasks can only be restored in a different day to when you completed them, so it is perfect for things you want to do every day!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExenczNWZkdmNmZ20xZmRkbzd2ZDBtNW1xYjVkMHc4eGdwdWRxZmlsYyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/1YJyM5oBVtwgLHh3ow/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExenczNWZkdmNmZ20xZmRkbzd2ZDBtNW1xYjVkMHc4eGdwdWRxZmlsYyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/1YJyM5oBVtwgLHh3ow/giphy.gif" width="480" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Help Menu
&lt;/h3&gt;

&lt;p&gt;When I launched phived, I got feedback I never thought I'd get: "Your site looks nice... But what does it do?".&lt;/p&gt;

&lt;p&gt;This is such a crucial topic. As the developer, the goal of your website is crystal clear. But your user needs guidance. They must know what your site does. If you fail at this, they're gone and they won't look back.&lt;/p&gt;

&lt;p&gt;That's why I implemented this Help Menu, explaining what the site does (and some keyboard shortcuts as a bonus!).&lt;/p&gt;

&lt;p&gt;A nice touch is that it is open by default when the user first loads the website.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhdtw9t6vjpiynb6c1zdt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhdtw9t6vjpiynb6c1zdt.png" alt="A help menu explaining what phived.com does" width="800" height="875"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Confirm to Delete Tasks
&lt;/h3&gt;

&lt;p&gt;You shouldn't be able to complete destructive actions with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No confirmation step&lt;/li&gt;
&lt;li&gt;No way to undo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's why we added a confirm dialog to the "clear tasks" button. I'm sure it saved some important tasks from vanishing!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5wi6ly9fboe3jzmqrac3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5wi6ly9fboe3jzmqrac3.png" alt="A confirm modal asking the user if they're sure about the deletion of all their tasks" width="800" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Here are the pull requests for each feature:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/LukeberryPi/phived/pull/42"&gt;Reorder Tasks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LukeberryPi/phived/pull/52"&gt;Confirm to Delete Tasks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LukeberryPi/phived/pull/76"&gt;First Load Respects OS Theme&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I merged the other two straight into main, sorry!&lt;/p&gt;

&lt;p&gt;Thanks for reading! If you enjoyed this follow me on &lt;a href="https://twitter.com/lukeberrypi"&gt;twitter&lt;/a&gt; and &lt;a href="https://github.com/LukeberryPi/phived"&gt;star phived on github&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Adding Twitter/VIM-inspired navigation to my React website</title>
      <dc:creator>Luke Berry</dc:creator>
      <pubDate>Wed, 21 Feb 2024 16:46:32 +0000</pubDate>
      <link>https://dev.to/lukeberrypi/adding-twittervim-inspired-navigation-to-my-react-website-49bp</link>
      <guid>https://dev.to/lukeberrypi/adding-twittervim-inspired-navigation-to-my-react-website-49bp</guid>
      <description>&lt;p&gt;I recently started learning VIM and became enchanted by its navigation. I am also a twitter addict, which has excellent shortcuts.&lt;/p&gt;

&lt;p&gt;Inspired by these, I added similar navigation to my project. And I will show you how to do this in React in this article.&lt;/p&gt;

&lt;p&gt;I created &lt;a href="https://phived.com"&gt;phived.com&lt;/a&gt; a year ago with the purpose of being a minimal to-do list that would help me remember things I had to do.&lt;/p&gt;

&lt;p&gt;Since then, I have used it everyday. I added some shortcuts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;enter&lt;/code&gt; to go to the next task&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;shift + enter&lt;/code&gt; to go to the previous task&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cmd + enter&lt;/code&gt; to complete a task&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/LukeberryPi/phived/blob/afce487a817e0c5cf305e47cf2b8ce8467f6b711/src/components/GeneralTasks.tsx#L81"&gt;Here is the code&lt;/a&gt; for these behaviors. Since it isn't the focus of this article, I won't explain it further. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This mostly kept my hands off the mouse. But another feature changed things...&lt;/p&gt;

&lt;p&gt;After using the website routinely, I found myself adding the same tasks every day. I always pushed back the idea of adding &lt;em&gt;more&lt;/em&gt; than five tasks at a time, since that would undermine the original purpose of the project.&lt;/p&gt;

&lt;p&gt;I ended up adding a &lt;a href="https://phived.com/daily"&gt;/daily&lt;/a&gt; page, similar to the original tasks, with a key difference: tasks that you complete can be restored tomorrow: so you don't have to type them everyday!&lt;/p&gt;

&lt;p&gt;Now, I wanted to toggle between &lt;code&gt;phived.com&lt;/code&gt; and &lt;code&gt;phived.com/daily&lt;/code&gt; tasks using &lt;code&gt;g + g&lt;/code&gt;, inspired by twitter's shortcuts such as &lt;code&gt;g + h&lt;/code&gt; to go to Home, &lt;code&gt;g + n&lt;/code&gt; to go to Notifications, etc...&lt;/p&gt;

&lt;p&gt;I achieved this with the following code. It belongs to the Daily component and redirects us to "/" when the user presses the combination &lt;code&gt;g + g&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  const pressedKeys = useRef("");

  useEffect(() =&amp;gt; {
    const handleKeyPress = (event: KeyboardEvent) =&amp;gt; {
      const inputIsFocused = document.activeElement instanceof HTMLInputElement;

      if (event.key !== "g" || inputIsFocused) {
        return;
      }

      pressedKeys.current += "g";

      if (pressedKeys.current === "gg") {
        window.location.href = "/";
        pressedKeys.current = "";
      }
    };

    window.addEventListener("keydown", handleKeyPress);

    return () =&amp;gt; {
      window.removeEventListener("keydown", handleKeyPress);
    };
  }, []);

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

&lt;/div&gt;



&lt;p&gt;Let's dive in! First, a ref will store our key presses:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const keysPressed = useRef("")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our useEffect has one goal: listen to the keydown event and store them in the ref. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;An important caveat is that, if the input is focused (user is editing a task) the redirect shouldn't happen. Imagine you're typing "buy e &lt;strong&gt;gg&lt;/strong&gt; s" as a task, and it suddenly jumps you to another page.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We avoid that by returning early, which we also do if the key pressed isn't &lt;code&gt;g&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const inputIsFocused = document.activeElement instanceof HTMLInputElement;

if (event.key !== "g" || inputIsFocused) {
  return;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we can add the key press to the ref:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pressedKeys.current += "g";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check if the combination is &lt;code&gt;g + g&lt;/code&gt; and redirect towards our general tasks (that live on &lt;code&gt;phived.com&lt;/code&gt;, remember). We also empty the ref since it has fulfilled its cycle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (pressedKeys.current === "gg") {
  window.location.href = "/";
  pressedKeys.current = "";
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We then add (and remove) the eventListener with useEffect, so that it hooks into the component's lifecycle correctly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;window.addEventListener("keydown", handleKeyPress);

return () =&amp;gt; {
  window.removeEventListener("keydown", handleKeyPress);
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And voilà! It works as intended. But not quite...&lt;/p&gt;

&lt;p&gt;Since we can't redirect while input is focused, when can we redirect? When the focus is somewhere else. Currently, the only way to do that is by clicking another element. And that's not what we're looking for!&lt;/p&gt;

&lt;p&gt;We are missing a crucial step, that Twitter implements in its website: pressign &lt;code&gt;ESC&lt;/code&gt; to blur from input.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/RBbsJrhaZ0nK6GYW3G/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/RBbsJrhaZ0nK6GYW3G/giphy.gif" width="480" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The following code does this. If there's an active element and the key pressed is &lt;code&gt;ESC&lt;/code&gt;, we blur (remove focus).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const handleKeyDown = (e: React.KeyboardEvent&amp;lt;HTMLDivElement&amp;gt;) =&amp;gt; {
    if (!(document.activeElement instanceof HTMLElement)) {
      return;
    }

    if (e.key === "Escape") {
      document.activeElement.blur();
    }
  };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, we just assign the onKeyDown prop to handleKeyDown on the element that surrounds the components where we want this behavior. In my case, that is a &lt;code&gt;div&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
return (
    &amp;lt;GeneralTasksContextProvider&amp;gt;
      &amp;lt;div
        onKeyDown={handleKeyDown}
        className="flex h-full w-full flex-col items-center justify-center bg-softWhite dark:bg-trueBlack"
      &amp;gt;
        &amp;lt;HelmetProvider&amp;gt;
          &amp;lt;Head /&amp;gt;
        &amp;lt;/HelmetProvider&amp;gt;
        &amp;lt;ModeSelectorMobile /&amp;gt;
        &amp;lt;Header /&amp;gt;
        &amp;lt;GeneralTasks /&amp;gt;
        &amp;lt;Message /&amp;gt;
        &amp;lt;Footer /&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/GeneralTasksContextProvider&amp;gt;
  );
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now it works: we can toggle between the general and daily tasks by pressing &lt;code&gt;ESC + g + g&lt;/code&gt; - without touching the mouse!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExMXRhZXFqNjVkNWp1YWdiMXZ0YnkwZzlkNG5pMTV6aXRhMzdiNHJodyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/FPrcuySxmZXLjsjU0e/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExMXRhZXFqNjVkNWp1YWdiMXZ0YnkwZzlkNG5pMTV6aXRhMzdiNHJodyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/FPrcuySxmZXLjsjU0e/giphy.gif" width="480" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading! If you enjoyed this follow me on &lt;a href="https://twitter.com/lukeberrypi"&gt;twitter&lt;/a&gt; and &lt;a href="https://github.com/LukeberryPi/phived"&gt;star phived on github&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>the silliest UI mistake</title>
      <dc:creator>Luke Berry</dc:creator>
      <pubDate>Wed, 10 Jan 2024 18:16:03 +0000</pubDate>
      <link>https://dev.to/lukeberrypi/the-silliest-ui-mistake-86d</link>
      <guid>https://dev.to/lukeberrypi/the-silliest-ui-mistake-86d</guid>
      <description>&lt;h3&gt;
  
  
  what is it?
&lt;/h3&gt;

&lt;p&gt;a "false click button" is an element that looks like a button, but has a "dead area" that triggers nothing when clicked.&lt;/p&gt;

&lt;p&gt;sometimes, clicking said area even triggers typical click animations (such as translate and scale changes), which further aggravates the user experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  why does it happen?
&lt;/h3&gt;

&lt;p&gt;this happens when the event is mispositioned on a child element/container instead of the wrapper element.&lt;/p&gt;

&lt;h3&gt;
  
  
  where does it happen?
&lt;/h3&gt;

&lt;p&gt;i thought this happened only in products that don't care about ui/ux, but i saw it recently in two products that are industry references in design: duolingo and airbnb.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://x.com/LukeberryPi/status/1745144209240137801?s=20"&gt;i can't  upload gifs here&lt;/a&gt; for some reason, so check out my twitter/x posts of it happening: in the &lt;a href="https://x.com/LukeberryPi/status/1744717524011192440?s=20"&gt;duolingo website&lt;/a&gt; and the &lt;a href="https://x.com/LukeberryPi/status/1743726946125570389?s=20"&gt;airbnb website&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  why is it a problem?
&lt;/h3&gt;

&lt;p&gt;a "false click button" can lead a user to click multiple times in frustration, to interpret that there is an error with their internet, or ultimately, to give up and leave your site.&lt;/p&gt;

&lt;h3&gt;
  
  
  how to fix it
&lt;/h3&gt;

&lt;p&gt;place the event on the wrapper element, instead of inside a child element/container. also ensure that animations/pointer cursor only happen in the same level where the event happens (again, the wrapper element).&lt;/p&gt;

&lt;h3&gt;
  
  
  important
&lt;/h3&gt;

&lt;p&gt;ideally, this wrapper element will be a button, for accessibility reasons. if you must use another element for this, be mindful of &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/button_role#description"&gt;role=button attribute&lt;/a&gt; and other a11y implications.&lt;/p&gt;

&lt;h3&gt;
  
  
  conclusion
&lt;/h3&gt;

&lt;p&gt;this is an easy bug to fix with significant UX wins. it is definitely worth fixing. i'm a website bug collector, so &lt;a href="https://twitter.com/LukeberryPi"&gt;follow me on x&lt;/a&gt; if you want to see more.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>My 5 Most Used VS Code Hotkeys And Why</title>
      <dc:creator>Luke Berry</dc:creator>
      <pubDate>Tue, 25 Oct 2022 15:33:13 +0000</pubDate>
      <link>https://dev.to/lukeberrypi/my-5-most-used-vs-code-hotkeys-and-why-enk</link>
      <guid>https://dev.to/lukeberrypi/my-5-most-used-vs-code-hotkeys-and-why-enk</guid>
      <description>&lt;p&gt;VS Code is excellent software. It suits web developers amazingly.&lt;/p&gt;

&lt;p&gt;The codebase I currently work on is larger than all my personal projects combined. The mouse can only get you so far, and rather slowly. These are my most used VS Code hotkeys as a Beginner Software Developer (and the reason behind each choice).&lt;/p&gt;

&lt;h2&gt;
  
  
  CTRL + SHIFT + F
&lt;/h2&gt;

&lt;p&gt;This looks through your directory for any string. It can be a function, variable, etc...&lt;/p&gt;

&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Moving through a professional codebase as a beginner is intimidating. There is so much information flying around that being able to look everywhere at once will allow you to map behaviors more easily.&lt;/p&gt;

&lt;h2&gt;
  
  
  CTRL + P
&lt;/h2&gt;

&lt;p&gt;Similarly, this hotkey allows to search for filenames, using &lt;a href="https://www.techtarget.com/whatis/definition/fuzzy-search"&gt;fuzzy search&lt;/a&gt;. Also a must for traversing large projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;There are files that we open regularly, such as READMEs. Also, in React we can have a component, content and template architecture. With similar naming for these files, you can find all them at once.&lt;/p&gt;

&lt;h2&gt;
  
  
  CTRL + SHIFT + L
&lt;/h2&gt;

&lt;p&gt;This hotkey surprised me. I had been using CTRL + D repeatedly to select occurences of a string in the current file. CTRL + SHIFT + L does that immediately, for &lt;em&gt;all&lt;/em&gt; ocurrences.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Makes it ultra-fast to refactor, specially variable names (descriptive variables FTW).&lt;/p&gt;

&lt;h2&gt;
  
  
  ALT + UP/DOWN
&lt;/h2&gt;

&lt;p&gt;Forget cutting, removing empty spaces, pasting and adding empty lines back: by using this, you can manually move any amount of lines up or down in your file seamlessly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Want to switch the order of your components just to see what it looks like? This is the way to go!&lt;/p&gt;

&lt;h2&gt;
  
  
  CTRL + SHIFT + K
&lt;/h2&gt;

&lt;p&gt;This removes the selected lines. As a beginner, I felt frightened to remove anything from the codebase. This hotkey helped me overcome that fear (with some obligatory CTRL + Z to follow).&lt;/p&gt;

&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;A great lesson I learned is that removing code is a shorter path to understanding functionality than adding. CTRL + SHIFT + K is our fastest tool for that.&lt;/p&gt;

&lt;p&gt;Here is a &lt;a href="https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf"&gt;useful pdf&lt;/a&gt; with many other keyboard shortcuts to increase your productivity.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>vscode</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Mentoring as a Beginner</title>
      <dc:creator>Luke Berry</dc:creator>
      <pubDate>Fri, 21 Oct 2022 00:58:28 +0000</pubDate>
      <link>https://dev.to/lukeberrypi/mentoring-as-a-beginner-359l</link>
      <guid>https://dev.to/lukeberrypi/mentoring-as-a-beginner-359l</guid>
      <description>&lt;p&gt;I had a thought a few weeks back: "Can you mentor without being an expert?". As a proud member of the ever-growing Tech Community, I went to Twitter and asked, openly, for their opinion.&lt;/p&gt;

&lt;p&gt;The results were surprising, although not shocking: three resounding yesses. Actually, I &lt;em&gt;had&lt;/em&gt; been mentoring a few students as a beginner. This question wasn't about intention, it was about validation.&lt;/p&gt;

&lt;p&gt;See, there's a plague roaming around: the Impostor Syndrome. Everyone is susceptible to it, newcomers and masters. It may be an old friend of yours, or hiding just around the corner.&lt;/p&gt;

&lt;p&gt;I'm a beginner myself. And mentoring was a double-edged sword to me. It felt amazing to see my guidance be worthy. Many of the people I instructed were simply months behind me or not as fortunate. And yet, it felt terrible to be unable to respond to their expectation when the question was beyond my capacity.&lt;/p&gt;

&lt;p&gt;That's where my thought arised. In reality, there is no shame in saying "I don't know" and handing the person a gigantic stackoverflow thread from 2011. It is foolish to assume that I can have &lt;em&gt;all&lt;/em&gt; the answers. It is foolish to assume that an expert would.&lt;/p&gt;

&lt;p&gt;Mentoring goes beyond the technical, it's also about trust and connection. A beginner has the upper hand here: no one is closer to a student than a Junior Developer (except for another student... and hell, get mentoring from them too!).&lt;/p&gt;

&lt;p&gt;A student may be unaware of the true value. For now, their mentor may just be a clever friend with the right answers.&lt;/p&gt;

&lt;p&gt;For the mentor, the value  is crystal clear. No knowledge is as well consolidated as the one you can teach.&lt;/p&gt;

&lt;p&gt;Still, mentoring isn't about having the answer. It's about being however many steps ahead of someone and deploying your knowledge with empathy.&lt;/p&gt;

&lt;p&gt;In short, it's a win-win. It's a must for both. As a student, seek beginner mentors (or other students!). If you have been recently employed in tech, share your story and provide for the people trying to enter the field. Your aid will be a familiar face.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>career</category>
    </item>
  </channel>
</rss>
