<?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: Hannah Gooding</title>
    <description>The latest articles on DEV Community by Hannah Gooding (@hannahgooding).</description>
    <link>https://dev.to/hannahgooding</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%2F420661%2F5d99a522-821c-4eac-bbbd-7e7c272dbd91.jpeg</url>
      <title>DEV Community: Hannah Gooding</title>
      <link>https://dev.to/hannahgooding</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hannahgooding"/>
    <language>en</language>
    <item>
      <title>How I customise my Terminal with Oh My Zsh (macOS)</title>
      <dc:creator>Hannah Gooding</dc:creator>
      <pubDate>Fri, 30 Apr 2021 13:53:33 +0000</pubDate>
      <link>https://dev.to/hannahgooding/how-i-customise-my-terminal-with-oh-my-zsh-macos-427i</link>
      <guid>https://dev.to/hannahgooding/how-i-customise-my-terminal-with-oh-my-zsh-macos-427i</guid>
      <description>&lt;p&gt;As a software engineer I use the command line every day. It's very important to me that the tool I stare at for hours looks nice and that I have a set up that saves me time and energy. I use the macOS default Terminal because that's what I used when I started learning to code and I'm loath to change (soz). The macOS Terminal is a ZSH terminal shell (aka Z shell) which runs on a Unix-like operating system (macOS, Linux, BSD, Windows/WSL2). This post will go through how I set mine up on my personal MacBook Air (2015) running Big Sur, your experience on a different operating system may differ but luckily Oh My Zsh is a very popular framework so there will probably be people on Stack Overflow/Reddit who have encountered the same issues! &lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Downloading Oh My Zsh
&lt;/h2&gt;

&lt;p&gt;Oh My Zsh is opensource framework for terminal configuration that has loads of themes and plugins.&lt;/p&gt;

&lt;p&gt;You can download Oh My Zsh from their &lt;a href="https://ohmyz.sh/" rel="noopener noreferrer"&gt;website&lt;/a&gt; via &lt;code&gt;curl&lt;/code&gt; or &lt;code&gt;wget&lt;/code&gt; by copying and pasting the command. Make sure you're in your system's root folder.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Configuring the &lt;code&gt;.zshrc&lt;/code&gt; file
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;.zshrc&lt;/code&gt; file contains the script that is run when you start a new zsh shell (&lt;code&gt;rc&lt;/code&gt; stands for "run commands"). So if you make changes to this file you have to start a new shell to see them take effect.&lt;/p&gt;

&lt;p&gt;You can customise your terminal by running &lt;code&gt;open ~/.zshrc&lt;/code&gt; to open the &lt;code&gt;.zshrc&lt;/code&gt; file in your system's root folder (the &lt;code&gt;~&lt;/code&gt; tilde symbol means home directory).&lt;/p&gt;

&lt;p&gt;Note: if you're on macOS Catalina or above you may get the error &lt;code&gt;zsh: permission denied:&lt;/code&gt; - you will need to configure permissions to open the file with &lt;code&gt;chmod +x ~/.zshrc&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Changing the Terminal theme
&lt;/h2&gt;

&lt;p&gt;Choose your theme from the &lt;a href="https://github.com/ohmyzsh/ohmyzsh/wiki/Themes" rel="noopener noreferrer"&gt;Oh My Zsh Themes&lt;/a&gt; and change the &lt;code&gt;ZSH_THEME=""&lt;/code&gt; line in the &lt;code&gt;.zshrc&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;I use the &lt;a href="https://github.com/ohmyzsh/ohmyzsh/wiki/Themes#agnoster" rel="noopener noreferrer"&gt;agnoster&lt;/a&gt; theme so I have &lt;code&gt;ZSH_THEME="agnoster"&lt;/code&gt; in my &lt;code&gt;.zshrc&lt;/code&gt; file.&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%2Fyjimw4x0dfjxs48d4bgb.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyjimw4x0dfjxs48d4bgb.png" width="564" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you run a new shell you should see it has a new theme - yay! But wait...what are all those questions marks? You need to download the fonts to see the cool symbols!&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Installing Powerline Fonts
&lt;/h2&gt;

&lt;p&gt;Follow the instructions on the &lt;a href="https://github.com/powerline/fonts" rel="noopener noreferrer"&gt;Powerline fonts README&lt;/a&gt; to download the fonts needed for your new theme.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Changing your Terminal Fonts
&lt;/h2&gt;

&lt;p&gt;Go to &lt;code&gt;Preferences &amp;gt; Profiles &amp;gt; Font&lt;/code&gt; to change the font for your Terminal to any of the fonts that have Powerline in the name. I use &lt;code&gt;Meslo LG L DZ Regular for Powerline&lt;/code&gt;. You can either change the Basic profile or make a new profile and make that your default profile.&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%2Fkjlkg78rqg2prqvtvbdm.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkjlkg78rqg2prqvtvbdm.png" width="581" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now the question marks should be replaced with cool symbols. The purple arrow indicates what directory you are in, and the green arrow indicates what branch you are on if you are in a git initiliased directory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Changing your colours
&lt;/h2&gt;

&lt;p&gt;You can play around with the colours in the Terminal Profiles yourself but I would suggest going with a pre-made theme because they will have considered the constrast and readability of the colours in different scenarios. Here's a list of cool &lt;a href="https://github.com/lysyi3m/macos-terminal-themes" rel="noopener noreferrer"&gt;MacOS Terminal Themes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I use the &lt;a href="https://github.com/lysyi3m/macos-terminal-themes#vs-code-dark-plus-download" rel="noopener noreferrer"&gt;VS Code Dark Plus&lt;/a&gt; theme which looks like this:&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%2Fqnbe5yqch9896w52sy8e.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqnbe5yqch9896w52sy8e.png" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can download the &lt;code&gt;.terminal&lt;/code&gt; file and go to your Terminal &lt;code&gt;Preferences &amp;gt; Profiles&lt;/code&gt; and import it as a new profile. Then select &lt;code&gt;Default&lt;/code&gt; to make it your default theme.&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%2F86nd4ws1sbu0im83i77z.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F86nd4ws1sbu0im83i77z.png" width="800" height="816"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now it looks beautiful! 💄 💅 &lt;/p&gt;

&lt;h2&gt;
  
  
  Plugins
&lt;/h2&gt;

&lt;p&gt;There's so many other things you can do with Oh My Zsh. Have a look at the &lt;a href="https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins" rel="noopener noreferrer"&gt;plugins&lt;/a&gt; it comes bundled with. I use the aliases that come with the &lt;a href="https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/git" rel="noopener noreferrer"&gt;Git plugin&lt;/a&gt; every day. An alias is a shortcut for a command that you write instead of the command and it runs the command.&lt;/p&gt;

&lt;p&gt;The Git aliases I use the most are:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Alias&lt;/th&gt;
&lt;th&gt;Git Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ggp&lt;/td&gt;
&lt;td&gt;git push origin $(current_branch)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gcb &lt;/td&gt;
&lt;td&gt;git checkout -b &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gco &lt;/td&gt;
&lt;td&gt;git checkout &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Aliases
&lt;/h2&gt;

&lt;p&gt;You can add your own custom aliases by adding them to your &lt;code&gt;.zshrc&lt;/code&gt; file&lt;/p&gt;

&lt;p&gt;The bottom of the file has the syntax for aliases in comments:&lt;/p&gt;

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

# Example aliases
# alias zshconfig="mate ~/.zshrc"


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

&lt;/div&gt;

&lt;p&gt;I have the command for editing my &lt;code&gt;.zshrc&lt;/code&gt; file under the alias &lt;code&gt;edit&lt;/code&gt;. I prefer editing the file in VS Code* so I have this in my file:&lt;br&gt;
&lt;code&gt;alias edit="code ~/.zshrc"&lt;/code&gt;&lt;/p&gt;

&lt;h6&gt;
  
  
  *The instructions to set up launching files in VS Code from the command line can be found &lt;a href="https://code.visualstudio.com/docs/setup/mac" rel="noopener noreferrer"&gt;here&lt;/a&gt; for macOS.
&lt;/h6&gt;

&lt;h2&gt;
  
  
  🎨 That's all! 🎉
&lt;/h2&gt;

&lt;p&gt;Customising the Terminal is a great place to start personalising your tooling, apparently you can do even cooler things with iTerm2 and you can customise that in much the same way as I've outlined in this tutorial.&lt;/p&gt;

</description>
      <category>tooling</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>terminal</category>
    </item>
    <item>
      <title>Group project tip: How to set up a Jira board and link it to your GitHub project</title>
      <dc:creator>Hannah Gooding</dc:creator>
      <pubDate>Wed, 23 Sep 2020 16:10:27 +0000</pubDate>
      <link>https://dev.to/hannahgooding/group-project-tip-how-to-set-up-a-jira-board-and-link-it-to-your-github-project-2n1d</link>
      <guid>https://dev.to/hannahgooding/group-project-tip-how-to-set-up-a-jira-board-and-link-it-to-your-github-project-2n1d</guid>
      <description>&lt;p&gt;During my web development bootcamp at Founders and Coders we built a new group project in a couple of days every week. We raised issues on our GitHub repositories, and then used the GitHub project kanban boards to visualise our issues into the default recommended columns: To Do, In Progress, Done.&lt;/p&gt;

&lt;p&gt;As we moved to building bigger projects in longer sprints, we wanted to try out linking our GitHub repo to Jira instead because it has a lot more features out of the box like issue priority tags, time tracking and sprint points (note: GitHub has loads of marketplace tools that you can manually add on to your project boards instead, but it's always fun to play with new software).&lt;/p&gt;

&lt;p&gt;Jira is a very popular tool for project tracking, not just in software engineering teams. In my previous life before becoming a programmer I worked in a photography studio for an e-commerce fashion brand and they used Jira to track the status of the product photos (whether they had been shot, retouched, etc.).&lt;/p&gt;

&lt;p&gt;I've picked up that people seem to have a love/hate relationship with it, and it can be quite difficult to use as a beginner. When I set up my first Jira project I was overwhelmingly confused, but hopefully I can break it down for those who want to try it and become bosses at sprint planning!&lt;/p&gt;

&lt;h2&gt;
  
  
  Step One - Set up Jira project board
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Set up your Jira account if you don't already have one.&lt;/li&gt;
&lt;li&gt;On Jira, go to &lt;strong&gt;Projects &amp;gt; Create Project&lt;/strong&gt; and select &lt;strong&gt;Classic Project&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Take note of the project key as this is what will link to your GitHub branches and issues.&lt;/li&gt;
&lt;li&gt;Choose your project board template, I'd recommend Kanban for an open-ended project, or Scrum for fixed sprint planning. I'm going with Scrum for this tutorial.&lt;/li&gt;
&lt;/ul&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%2Fi.imgur.com%2FF1K3kHb.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%2Fi.imgur.com%2FF1K3kHb.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step Two - Set up GitHub integration
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;On Jira, go to &lt;strong&gt;Apps &amp;gt; Find New Apps&lt;/strong&gt; and search for "Github for Jira".&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Get app&lt;/strong&gt; and once it is added successfully, select &lt;strong&gt;Get started&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Add organisation&lt;/strong&gt; which will take you to your GitHub account.&lt;/li&gt;
&lt;li&gt;If you don't see your organisation listed, select &lt;strong&gt;Install Jira&lt;/strong&gt; where it says: "Don't see your account? &lt;strong&gt;Install Jira&lt;/strong&gt; on your user account or an Organization you own.".&lt;/li&gt;
&lt;li&gt;Install on all or only selected repositories.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Please see the &lt;a href="https://github.com/integrations/jira" rel="noopener noreferrer"&gt;docs&lt;/a&gt; for more details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step Three - Add your teammates on Jira
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;People &amp;gt; View all people and teams&lt;/strong&gt; and select &lt;strong&gt;Add People&lt;/strong&gt; to add your teammates to your Jira site.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step Four - Add issues on Jira
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Now you can start logging your issues into your &lt;strong&gt;Backlog&lt;/strong&gt; on Jira.&lt;/li&gt;
&lt;li&gt;You can assign Priority arrows for each issue, and also Story Points and Original Estimate (time estimation).&lt;/li&gt;
&lt;/ul&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%2Fi.imgur.com%2FNYwYmQf.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%2Fi.imgur.com%2FNYwYmQf.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step Five - Sprint planning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Once you have logged all your issues you can select &lt;strong&gt;Create Sprint&lt;/strong&gt; and start dragging the Backlog issues into the Sprint.&lt;/li&gt;
&lt;li&gt;It will tell you at the bottom the points Estimate so you can keep track.&lt;/li&gt;
&lt;/ul&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%2Fi.imgur.com%2FNwN9AUx.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%2Fi.imgur.com%2FNwN9AUx.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step Six - Start the sprint!
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;When you select &lt;strong&gt;Start sprint&lt;/strong&gt; you can configure the duration and start date.&lt;/li&gt;
&lt;li&gt;Then you will be redirected to the project board where you can move issues across columns. This can now also be found when you navigate to &lt;strong&gt;Active Sprints&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&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%2Fi.imgur.com%2FNIo9Bxo.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%2Fi.imgur.com%2FNIo9Bxo.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7 - Linking your GitHub branches and commit messages
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Now you can start assigning issues to team members and start coding!&lt;/li&gt;
&lt;li&gt;But wait, how do you link the branches you're working on and commits that you make? Well, remember the project key? That's why all my issues are named &lt;code&gt;COOL-1&lt;/code&gt;, &lt;code&gt;COOL-2&lt;/code&gt;, etc.&lt;/li&gt;
&lt;li&gt;To link a branch to your Jira issue make sure the branch name starts with the Jira issue name, e.g. &lt;code&gt;COOL-1_create_readme&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;To link your commits, start the commit message with the Jira issue number and then add your message
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit -m "COOL-1 Create README file"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 8 - Log your time
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You can keep track of your work by logging the time spent on each issue on Jira so you can review how well you estimated at the end of each sprint.&lt;/li&gt;
&lt;/ul&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%2Fi.imgur.com%2FNyYMTzE.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%2Fi.imgur.com%2FNyYMTzE.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it for setting up a basic project! There are so many more features that Jira has to offer, but this was sufficient to take us through our group projects.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>agile</category>
      <category>management</category>
      <category>github</category>
    </item>
    <item>
      <title>VS Code shortcuts and tricks that I wish I knew sooner</title>
      <dc:creator>Hannah Gooding</dc:creator>
      <pubDate>Wed, 12 Aug 2020 09:01:43 +0000</pubDate>
      <link>https://dev.to/hannahgooding/vs-code-shortcuts-and-tricks-that-i-wish-i-knew-sooner-3mcj</link>
      <guid>https://dev.to/hannahgooding/vs-code-shortcuts-and-tricks-that-i-wish-i-knew-sooner-3mcj</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;After teaching myself for a year I started coding full time when I joined the Founders and Coders web development bootcamp in March 2020. Two weeks into the course we went into lockdown in the UK and our cohort had to go remote for the remaining 16 weeks. Thanks to the collaborative power of the VS Code Live Share extension we were still able to pair program and go through the syllabus as planned, but one of the things we missed out on from not being in person was organically sharing the little tips and tricks that you would normally pick up from working next to each other.&lt;/p&gt;

&lt;p&gt;You can watch someone demonstrate something while sharing their screen, but unless you see them typing on the keyboard you don't necessarily pick up on the key presses that could also save you seconds of your day! As a result there are a lot of nifty VS Code tricks that I have learned since starting my first role as a Full Stack Developer that I wish I had know during the course.&lt;/p&gt;

&lt;p&gt;I compiled these into a talk for the next Founders and Coders cohort, entitled "Why The F*** Didn't I Know This Sooner?!", and I also wanted to share them here for those starting out on their own coding journeys.&lt;/p&gt;

&lt;h1&gt;
  
  
  VS Code shortcuts
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://code.visualstudio.com/docs/editor/emmet" rel="noopener noreferrer"&gt;Emmet&lt;/a&gt; gives you some default abbreviations for a range of file types including &lt;code&gt;.html&lt;/code&gt; and &lt;code&gt;.css&lt;/code&gt; which expand into useful code snippets. Emmet support is built into VS Code so it does not require downloading an extension.&lt;/p&gt;

&lt;h2&gt;
  
  
  HTML boilerplates
&lt;/h2&gt;

&lt;p&gt;If you type &lt;code&gt;!&lt;/code&gt; into an &lt;code&gt;html&lt;/code&gt; file in VS Code and then press enter, you get the following HTML skeleton:&lt;/p&gt;

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

&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Document&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;A lot of my frequently used HTML tags are missing from this boilerplate so I have configured my own.&lt;/p&gt;

&lt;p&gt;I made &lt;code&gt;!!&lt;/code&gt; into a custom shortcut for my VS Code editor that includes the &lt;code&gt;&amp;lt;meta&amp;gt;&lt;/code&gt; tag for SEO, as well as the tags for for linking CSS stylesheets and JavaScript files, and a few other frequently used semantic tags.&lt;/p&gt;

&lt;p&gt;To do this you need to navigate to Code &amp;gt; Preferences &amp;gt; User Snippets and search for 'html.json'. Then you add your custom snippets into this file.&lt;/p&gt;

&lt;p&gt;I would recommend writing out the desired structure into an HTML file first, and then you can copy it into a tool like &lt;a href="https://www.freeformatter.com/json-escape.html" rel="noopener noreferrer"&gt;this&lt;/a&gt; to parse your HTML file into a JSON string with escaped characters to get the right indentation.&lt;/p&gt;

&lt;p&gt;My &lt;code&gt;html.json&lt;/code&gt; file looks like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"HTML boilerplate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"prefix"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"!!"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"body"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;html lang=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;en&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;  &amp;lt;meta charset=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;UTF-8&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;  &amp;lt;meta name=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;viewport&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; content=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;width=device-width, initial-scale=1.0&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;  &amp;lt;meta name=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; content=&lt;/span&gt;&lt;span class="se"&gt;\"\"&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;  &amp;lt;link rel=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;stylesheet&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; type=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="s2"&gt;css&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; href=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;styles.css&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;  &amp;lt;title&amp;gt;Document&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="s2"&gt;title&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="s2"&gt;head&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;  &amp;lt;header&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;  &amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="s2"&gt;header&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;  &amp;lt;main&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;  &amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="s2"&gt;main&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;  &amp;lt;footer&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;  &amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="s2"&gt;footer&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;  &amp;lt;script src=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;scripts.js&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="s2"&gt;script&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="s2"&gt;body&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;&lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="s2"&gt;html&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HTML boilerplate with custom tags"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


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

&lt;/div&gt;

&lt;p&gt;And the finished boilerplate looks like this:&lt;/p&gt;

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

&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text/css"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"styles.css"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Document&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&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;/header&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;/main&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;footer&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/footer&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"scripts.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;
&lt;h2&gt;
  
  
  HTML abbreviations
&lt;/h2&gt;

&lt;p&gt;Sometimes you can spend longer learning to type out shortcuts than if you just manually typed the code. I personally don't find Emmet abbreviations a time saver for writing CSS, but some of the HTML abbreviations I find useful include:&lt;/p&gt;
&lt;h3&gt;
  
  
  Nested elements
&lt;/h3&gt;

&lt;p&gt;The shortcut &lt;code&gt;nav&amp;gt;ul&amp;gt;li&lt;/code&gt; creates:&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;nav&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/nav&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Multiple elements
&lt;/h3&gt;

&lt;p&gt;The shortcut &lt;code&gt;li*5&lt;/code&gt; creates:&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;li&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Tags with text
&lt;/h3&gt;

&lt;p&gt;The shortcut &lt;code&gt;a{Click Me}&lt;/code&gt; creates:&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;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Click Me&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Elements with multiple classes
&lt;/h3&gt;

&lt;p&gt;The shortcut &lt;code&gt;div.first-class.second-class&lt;/code&gt; creates:&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;"first-class second-class"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Elements with IDs
&lt;/h3&gt;

&lt;p&gt;The shortcut &lt;code&gt;div#main&lt;/code&gt; creates:&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;id=&lt;/span&gt;&lt;span class="s"&gt;"main"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;A full list of shortcuts for can be found on the &lt;a href="https://docs.emmet.io/cheat-sheet/" rel="noopener noreferrer"&gt;Emmet Docs Cheat Sheet&lt;/a&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  VS Code Source Control Tab
&lt;/h1&gt;

&lt;p&gt;Using VS Code's built in Source Control feature, you can stage your files and write commit messages with the VS Code UI, rather than using the terminal.&lt;/p&gt;

&lt;p&gt;What I like about this is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can stage particular files easily without having to type out the file path into your terminal.&lt;/li&gt;
&lt;li&gt;You can format your commit messages more easily.&lt;/li&gt;
&lt;li&gt;When you write a commit message, it warns you if you go over the "recommended" character count in a line.&lt;/li&gt;
&lt;li&gt;If you are using the Live Share extension, your collaborator's co-authoring credentials appear (they have to be signed in with their GitHub account).&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Useful VS Code extensions
&lt;/h1&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer-2" rel="noopener noreferrer"&gt;Bracket Pair Colorizer 2&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This extension colorizes matching opening and closing brackets in your code so you can scope your functions and statements at a glance.&lt;/p&gt;

&lt;p&gt;Without extension:&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%2F109jb5q6w1ocb9hnm5gt.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F109jb5q6w1ocb9hnm5gt.png" width="300" height="185"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With extension:&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%2Fs7s3vwukwx4v1mhq3tfh.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs7s3vwukwx4v1mhq3tfh.png" width="300" height="185"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Edit: This article originally linked to Bracket Pair Colorizer v1, thank you to &lt;a class="mentioned-user" href="https://dev.to/indcoder"&gt;@indcoder&lt;/a&gt; for pointing out in the comments that there is a v2 out there which is faster and more accurate!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=jakob101.RelativePath" rel="noopener noreferrer"&gt;Relative File path&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This extension gives you a shortcut for getting the relative filepath of another file from your current file. This is really helpful in a large codebase with lots of nested folders where you have a lot of imports and exports between files, for instance in a React.js project.&lt;/p&gt;

&lt;p&gt;Use the shortcut to bring up the file search (Windows &lt;code&gt;Ctrl+Shift+H&lt;/code&gt;, Mac &lt;code&gt;Cmd+Shift+H&lt;/code&gt;):&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%2F9jx5yye4yxx9mgldc79a.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9jx5yye4yxx9mgldc79a.png" width="777" height="236"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Search for the file you want the relative path for:&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%2Fri33y0sxmkvgudf3zmwv.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fri33y0sxmkvgudf3zmwv.png" width="800" height="282"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The relative path will appear:&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%2F8jd4z3k34jrpb8826wc5.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8jd4z3k34jrpb8826wc5.png" width="788" height="231"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens" rel="noopener noreferrer"&gt;GitLens&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This extension is Git supercharged for your editor with loads of features that I don't yet know how to use.&lt;/p&gt;

&lt;p&gt;What I do use it for is the Git blame feature, which annotates the most recent commit history for each line in your files. This is especially useful when working on a group project so you can see at a glance when the last changes were made, who made them, and the relevant commit message.&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%2Fn3nt52852d69yhoti5pp.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn3nt52852d69yhoti5pp.png" width="775" height="217"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode" rel="noopener noreferrer"&gt;Prettier&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Prettier is a lifesaver because it automatically formats your code! You can download it as an extension on VS Code, and it will run your settings that you configure in the application (go to Settings and search for 'Prettier').&lt;/p&gt;

&lt;p&gt;To format your current file, right click and select Format Document, or to turn on automatic formatting when you save your files go to Settings and search for 'format on save' and tick the checkbox.&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%2Ffeknlabevgy7fjyyaqlc.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffeknlabevgy7fjyyaqlc.png" width="800" height="210"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's a good idea to have a &lt;code&gt;.prettierrc&lt;/code&gt; config file in the root folder of your group projects where you specify how many spaces you want for intentation, single or double quotes, whether all lines should finish with a semi-colon, etc.&lt;/p&gt;

&lt;p&gt;The config file overrides your local VS Code Prettier settings so everyone on the team will have the same formatting rules applied to their code - avoiding nasty conflicts!&lt;/p&gt;

&lt;p&gt;I use this &lt;a href="https://michelelarson.com/prettier-config/" rel="noopener noreferrer"&gt;Prettier Config Generator&lt;/a&gt; to generate the JSON for the file, and the &lt;a href="https://prettier.io/docs/en/options.html" rel="noopener noreferrer"&gt;Prettier docs&lt;/a&gt; explain more about what each of the format options mean.&lt;/p&gt;

&lt;p&gt;The following JSON in a &lt;code&gt;.prettierrc&lt;/code&gt; file:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"printWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"tabWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"useTabs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"semi"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"singleQuote"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


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

&lt;/div&gt;

&lt;p&gt;Reformats this:&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%2F4rei8g2bycot3okr00og.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4rei8g2bycot3okr00og.png" width="780" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Into this, with consistent spacing, an average line width of roughly 80 characters, 2 spaces for indentation and &lt;em&gt;not&lt;/em&gt; tabs, semicolons printed at the end of every statement, and double quotes instead of single quotes:&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%2Fumxmhu17291b0ugvuvvo.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fumxmhu17291b0ugvuvvo.png" width="780" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is just an example to demonstrate the formatting changes Prettier applies, and is not a recommendation of code style. Most of the time you won't have to play around with the settings too much and you can go with the &lt;a href="https://prettier.io/docs/en/configuration.html" rel="noopener noreferrer"&gt;basic config&lt;/a&gt; to keep your codebase consistent, or when you start working as a developer your company will already have a "house style".&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>codenewbie</category>
      <category>html</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
