<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Natalie Pina - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Natalie Pina - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 16 May 2026 22:22:21 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/author/nataliepina/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Visual Studio Code Extensions to Boost Your Productivity in 2024 ]]>
                </title>
                <description>
                    <![CDATA[ According to the 2023 Stack Overflow Developer Survey, Visual Studio Code (also known as VSCode) ranked as the most preferred integrated developer environment (IDE) tool. Visual Studio Code has many great features out-of-the-box, and supports a large... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/best-vscode-extensions/</link>
                <guid isPermaLink="false">66bc4ca470137bd197ce3238</guid>
                
                    <category>
                        <![CDATA[ Productivity ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Visual Studio Code ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Natalie Pina ]]>
                </dc:creator>
                <pubDate>Wed, 24 Jan 2024 22:42:52 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2024/01/Group-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>According to the <a target="_blank" href="https://survey.stackoverflow.co/2023/#section-most-popular-technologies-integrated-development-environment">2023 Stack Overflow Developer Survey</a>, Visual Studio Code (also known as VSCode) ranked as the most preferred integrated developer environment (IDE) tool.</p>
<p>Visual Studio Code has many great features out-of-the-box, and supports a large community of extensions to add enhanced functionality.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/Screenshot-2024-01-12-at-12.01.59-PM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Stack Overflow survey image showing VSCode's popularity (73.71% of respondents use it)</em></p>
<p>Using extensions can expand VSCode's available features and tools. With a majority of tools in one place, it allows for less context switching which has been shown to <a target="_blank" href="https://asana.com/resources/context-switching">kill productivity</a>.</p>
<p>I have tested out over 40 different extensions in the last year and refined a curated list of my favorites. These extensions boosted my productivity as a software engineer. I want to share this list with you to boost your productivity, too.</p>
<p>This list is designed to be language-agnostic with an emphasis on productivity. If you're interested in exploring my recommended extensions to customize the style of your editor, you can find more details <a target="_blank" href="https://www.freecodecamp.org/news/best-colorful-vscode-extensions-for-productivity/">in this article</a>.</p>
<h2 id="heading-vscode-extensions-well-cover">VSCode Extensions We'll Cover:</h2>
<ul>
<li><p><a class="post-section-overview" href="#heading-better-comments">Better Comments</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-bookmarks">Bookmarks</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-code-spell-checker">Code Spell Checker</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-codesnap">CodeSnap</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-codiumai">CodiumAI</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-error-lens">Error Lens</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-git-history">Git History</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-gitlens">GitLens</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-github-copilot">GitHub Copilot</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-icon-themes">Icons Themes</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-indent-rainbow">Indent Rainbow</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-live-share">Live Share</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-multiple-cursor-case-preserve">Multiple Cursor Case Preserve</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-path-intellisense">Path Intellisense</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-peacock">Peacock</a></p>
</li>
<li><p><a target="_blank" href="https://www.freecodecamp.org/news/p/db680fa0-6ecb-42b3-a803-ea6b47c90add/@prettier">Prettier</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-project-manager">Project Manager</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-tabnine">Tabnine</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-todo-highlight">TODO Highlight</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-todo-tree">Todo Tree</a></p>
</li>
</ul>
<p>In this article, I will cover all of these extensions in greater detail and advise on how they can elevate your levels of efficiency as a developer.</p>
<h2 id="heading-better-comments">Better Comments</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=aaron-bond.better-comments">Better Comments</a> helps you strengthen the comments in code. Code comments are beneficial for readability, and providing explanations or context for future reference. Leaving good code comments can save others and yourself time in the future.</p>
<p>Supported features include the ability to categorize the annotations from alerts, writing queries, making a TODO list, and showing highlights. There is an extensive list of supported languages.</p>
<p>Lines of code that are commented out are styled to be dark gray with a text strikethrough, emphasizing their exclusion and signaling that they should be removed.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/better-comments.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Styled code comments with Better Comments.</em></p>
<h2 id="heading-bookmarks">Bookmarks</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=alefragnani.Bookmarks">Bookmarks</a> allows you to bookmark positions in your code. These lines are noted with a blue bookmark icon. Bookmarks can be organized and named to allow for quick reference.</p>
<p>All of the bookmarks can be found in a dedicated sidebar section. This is a great tool to improve navigation, and to help you spend lest time searching for references.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/printscreen-toggle.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Bookmarks displayed in blue with a bookmark icon next to the line number.</em></p>
<h2 id="heading-code-spell-checker">Code Spell Checker</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker">Code Spell Checker</a> lives up to its name. It provides a basic spell checker to find and fix spelling errors throughout your codebase. Misspelled words are indicated with a squiggly underline. It is available in many languages.</p>
<p>This is one of my personal favorite extensions. I have caught and fixed so many typos thanks to this one.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/example.gif" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>This image displays how Spell Checker detects and corrects spelling errors.</em></p>
<h2 id="heading-codesnap">CodeSnap</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=adpyke.codesnap">CodeSnap</a> is used to snap a screenshots of code. It can come in handy for sharing code snippets with ease.</p>
<p>To snap a shot of your code, use (Ctrl+Shift+P on Windows and Linux, Cmd+Shift+P on OS X) and search for <code>CodeSnap</code>. Then select the area of your code to screenshot, adjust the width, and click the shutter button. You can also take a snapshot by selecting code, right clicking, and selecting CodeSnap.</p>
<p>There are websites that can do this, however, having these tools right in your editor allows for less context switching to boost productivity.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/material_operator-mono.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Sample React code snippet created with CodeSnap.</em></p>
<h2 id="heading-codiumai">CodiumAI</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=Codium.codium">CodiumAI</a> is a free AI-powered code toolkit. It supports features like code autocompletion, chat, enhanced search, and suggestions.</p>
<p>AI has become a major player in improved developer productivity. Imagine spending half the time writing tests, allowing you to spend more time on other crucial, creative tasks.</p>
<p>When it comes to testing, CodiumAI excels. It can analyze code and generate meaningful tests and comprehensive test suites.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/Tests-Gif.gif" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>CodiumAI generating a test suite based on a section of Python code.</em></p>
<p>This is a relatively new extension and that has been rapidly gaining popularity. Languages supported are Python, JavaScript, TypeScript, Java, Go, and others.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/g_python_random_gen_with_logo.gif" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>CodiumAI's autocomplete functionality used to create functions based on natural language prompts.</em></p>
<h2 id="heading-error-lens">Error Lens</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=usernamehw.errorlens">Error Lens</a> improves highlighting of errors, warnings, and other language diagnostics. This is a great debugging and error-prevention tool to have.</p>
<p>Errors will not go unnoticed with this extension. Error and warnings are made prominent by highlighting the entire line, along with the related message printed inline.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/demo.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Error Lens identifying an error, notifying that there is a missing semicolon and a syntax error.</em></p>
<p>Spend less time sourcing errors, as clicking on an an annotation routes you directly to the corresponding line of code.</p>
<p>There is support for multiple languages which makes it a valuable for developers working in projects in different languages. You can also configure the appearance and behavior of errors and warnings.</p>
<h2 id="heading-git-history">Git History</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=donjayamanne.githistory">Git History</a> is an extremely useful extension for version control with Git (the extension has 10 million installs, so it's clear that it's popular). This extension allows you to explore the detailed history of your Git repository directly from the VSCode interface. You can view file history, git log, and perform comparisons.</p>
<p>It provides an interactive and visual representation of commit logs, branches, and file changes over time. This extension provides a more accessible and uncomplicated experience working on version-controlled projects.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/gitLogv3--1-.gif" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Git History is being used here to create a tag on a specific commit.</em></p>
<h2 id="heading-gitlens">GitLens</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens">GitLens</a> is the most robust Git tool, with so many features bundled into one extension. It has a strong open-source community, and it continues to have active support with frequent updates.</p>
<p>With GitLens, you can gain powerful insights into your repositories directly in VSCode. Annotations are integrated throughout the editor, displaying tons of Git information.</p>
<p>One of the most useful features of GitLens is the blame annotation. This allows you to see who wrote the code, and how long ago.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/current-line-blame.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>GitLens traces the line of code to a commit created 4 years ago from the user (You).</em></p>
<p>Another feature that I have found to be handy is the interactive rebase editor. This provides a nice user experience when performing rebases.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/rebase.gif" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>GitLens' example of an interactive rebase. Commits can be picked, edited, dropped, squashed, and more.</em></p>
<h2 id="heading-github-copilot">GitHub Copilot</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=GitHub.copilot">GitHub Copilot</a> has gained a ton of traction over the last two years. This product has revolutionized the coding experience by leveraging advanced AI capabilities. It not only assists with completing code snippets but also acts as an AI pair programming copilot, offering intelligent suggestions for entire lines or blocks of code.</p>
<p>The strength of GitHub Copilot lies in its integration with OpenAI, tapping into a vast repository of open-source code to provide contextually relevant and practical suggestions. This not only accelerates coding speed but also serves as a valuable learning tool, exposing you to diverse coding patterns and best practices.</p>
<p>This is not a free tool. A subscription can run you $10 per month as an individual, or it can be purchased for teams at a discounted rate. If you'd like to try out GitHub Copilot, there is currently a 30-day trail offer.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/212964557-8d832278-61bb-4288-a8a7-47f35859e868.gif" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>GitHub Copilot using intelligent autocomplete on a function.</em></p>
<p>There are also some free alternatives which you can <a target="_blank" href="https://www.freecodecamp.org/news/ai-tools-to-use-in-vs-code/">read more about here</a> (and I talk about Tabnine below as well).</p>
<h2 id="heading-icon-themes">Icon Themes</h2>
<p>While VSCode includes default icons, incorporating icon packs provides an excellent means to boost productivity and infuse a visually appealing aesthetic into the editor.</p>
<p>Icon packs provide a more extensive and visually recognizable set of icons compared to the defaults. This can make it easier for visual distinction between file types and folders. It can build intuitive recognition and reduce the cognitive load when navigating through files.</p>
<p>There are plenty of options when it comes to choosing an icon pack. Three popular choices are the <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=Equinusocio.vsc-material-theme-icons">Material Theme Icons</a>, <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=vscode-icons-team.vscode-icons">vscode-icons</a>, and <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=file-icons.file-icons">file-icons</a>.</p>
<p>I find that a good set of icons improves the overall readability of the file explorer. I enjoy the added benefits of the upgraded visual experience.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/Group-2.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Side-by-side comparison of my editor with the vscode-icons (left) and Material Icon Theme (right) enabled. There are icons for file types and folders that indicate what they contain.</em></p>
<h2 id="heading-indent-rainbow">Indent Rainbow</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow">Indent Rainbow</a> is a colorful extension that you can use to make indentation comprehensible, aiding in maintaining well-organized and properly indented code.</p>
<p>Each indent is marked with a different color, alternating between 4 different colors. The colorful representation of the structure is not only useful but also visually appealing. This extension is particularly useful for languages that rely heavily on indentation such as YAML or Python.</p>
<p>If you aren't fond of the default set of colors, you can configure your own!</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/example--1-.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>A side-by-side comparison of two styles from Indent Rainbow. The one on the left shows the lines of the indent in vibrant color and the other shows the entire indention in a muted tone.</em></p>
<h2 id="heading-live-share">Live Share</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare">Live Share</a> is a collaborative development extension, enabling real-time sharing.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/Screenshot-2024-01-18-at-12.10.57-PM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>The Live Share header in the extension marketplace. There are 15 million installs.</em></p>
<p>This extension helps you facilitate productive teamwork. Unlike traditional pair programming sessions, Live Share lets you work together while retaining your own editor preferences. Each person has their own cursor, and you can follow each others' cursors around the codebase.</p>
<p>With Live Share, there is no need to clone repositories or encounter conflicts when working off of a shared branch. Context is immediately gained from the environment when entering a session.</p>
<h2 id="heading-multiple-cursor-case-preserve">Multiple Cursor Case Preserve</h2>
<p>The <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=Cardinal90.multi-cursor-case-preserve">Multiple Cursor Case Preserve</a> extension is a productivity-boosting tool that aids in rapid code editing.</p>
<p>I have personally experienced the frustration when targeting multiple variable names throughout a file for renaming, and inadvertently overriding casing when making a change.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/Example--1-.gif" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Targeting multiple variables with the same word but different casing, and updating them all from 'element' to 'node' with the casing remaining in tact.</em></p>
<h3 id="heading-tip-multi-line-editing-in-vscode">Tip: Multi-Line Editing in VSCode</h3>
<p>Take advantage of these Mac keyboard shortcuts for multi-line editing:</p>
<ul>
<li><p><strong>Cmd + D:</strong> Quickly select a word and press it again to extend the selection to sequential occurrences.</p>
</li>
<li><p><strong>Alt + Shift + Up/Down:</strong> Create multiple cursors above or below your cursor. Use <code>Cmd + Right/Left</code> to navigate each cursor to the line end or start, and <code>Cmd + Left/Right</code> to reach the start or end of a word.</p>
</li>
<li><p><strong>Alt + Up/Down:</strong> Move the current line up or down. Combine with <code>Shift + Up/Down</code> to select and move multiple lines simultaneously, streamlining your code editing process.</p>
</li>
</ul>
<p>By preserving the case, it streamlines the editing process by reducing the manual effort required to fix casing.</p>
<h2 id="heading-path-intellisense">Path Intellisense</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense">Path Intellisense</a> is a file path productivity tool. It has intelligent auto-completion that dynamically suggests file paths and directory names as you type. It can minimize errors due to incomplete or wrong file paths.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/iaHeUiDeTUZuo.gif" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Path Intellisense used to auto-complete a link element's 'href' attribute with a style.css file.</em></p>
<p>It is compatible with a variety of programming languages. But if you are using npm, the <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=christian-kohler.npm-intellisense">npm Intellisense</a> plugin is recommended specifically.</p>
<h2 id="heading-peacock">Peacock</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=johnpapa.vscode-peacock">Peacock</a> is a personal favorite of mine, as I love to add more color to my editor. Not only does it outline your editor in color, but it also allows you to configure specific colors for each workspace which is very beneficial when context switching.</p>
<p>Peacock comes with a range of preselected colors, while also allowing for user-defined custom colors.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/peacock-windows.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>A stack of editors from Peacock showing the various default color options. The color is applied to the sidebar and bottom section in the editor window.</em></p>
<h2 id="heading-prettier">Prettier</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode">Prettier</a> is a widely embraced code formatting tool with over 40 million installations. It provides you with a shared solution to improve code readability.</p>
<p>This opinionated code formatter enforces consistent style throughout a codebase. With support for various programming languages, Prettier automatically analyzes and formats code according to a set of standardized rules, this eliminates debates over coding style and enhancing collaboration.</p>
<p>Prettier's integration with "format on save" in VSCode vastly increases productivity by automatically applying formatting, preventing any time spent on manual formatting concerns.</p>
<p>You've probably already heard about Prettier, nonetheless it's important to mention as one of the top extensions to have.</p>
<h2 id="heading-project-manager">Project Manager</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=alefragnani.project-manager">Project Manager</a> is a simple tool to set projects (aka Favorites) and access them. It includes a dedicated side bar section to manage all of your projects in one place.</p>
<p>This is great tool when you have a lot of projects to manage and need to frequently switch between them. It comes with a set of handy features like the ability to further organize projects by tags.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/vscode-project-manager-side-bar-tags.gif" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Project Manager's example of how to create a tag by selecting 'Edit Tags', choosing from the previously created tags, and where to view them under Favorites.</em></p>
<h2 id="heading-tabnine">Tabnine</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=TabNine.tabnine-vscode">Tabnine</a> is an free AI coding assistant. It can help to increase your productivity by providing real-time code completions.</p>
<p>Beyond basic code completion, it takes in the context and offers further relevant suggestions. This can be particularly useful when working in intricate codebases demanding extensive code exploration.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/completions-main.gif" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Tabnine's example of autocompletion. The autocomplete is used to quickly create Python and TypeScript code.</em></p>
<p>Tabnine supports many programming languages. Adaptive learning is used to adjust to the developer's coding style over time. There is an added focus on privacy, as code is never stored or shared.</p>
<p>As I mentioned above, Tabnine is often compared to as a GitHub Copilot alternative, and worth trying out at no cost. Keep an eye out on this one as they add new competitive features.</p>
<p>Support for this extension is strong with continual updates. Chat functionality is soon to come, allowing you to ask questions and generate anything from code to documentation.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/260391624-68c486fc-fa0d-4cfe-b8e1-432684b057d8.gif" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Example from Tabnine of how the new AI chat functionality will look. The user asks for a weather API and Tabnine responds with several examples.</em></p>
<h2 id="heading-todo-highlight">TODO Highlight</h2>
<p>Never forget another to-do with <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=wayou.vscode-todo-highlight">TODO Highlight</a>. It emphasizes <code>TODO</code>s and other annotations with a colorful highlight.</p>
<p>It is common to encounter a <code>TODO</code> or <code>FIXME</code> relic of the past in a codebase that has been around for awhile. These can be hard to remember to remove. TODO Highlight is here to help remind you to not leave a trail.</p>
<p>Wether your theme is light or dark, TODO Highlight will put a spotlight on annotations.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/material-night-eighties.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Some JavaScript code with a TODO highlighted in yellow along with a FIXME highlighted in pink.</em></p>
<h2 id="heading-todo-tree">Todo Tree</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=Gruntfuggly.todo-tree">Todo Tree</a> offers a quick and organized solution to uncover annotations. It searches your workspace for <code>TODO</code> and other annotations and organizes them in a file tree.</p>
<p>It occupies a specific section in the side activity bar. Clicking on each <code>TODO</code> opens the related file, where the <code>TODO</code> is highlighted for immediate attention.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/screenshot.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>The TODO Tree sidebar section with a selected to-do of 'TODO Fix this!'. In the code to the right, the 'TODO' is highlighted with a bright purple color.</em></p>
<h2 id="heading-summary">Summary</h2>
<p>VSCode stands out for its expansive extension ecosystem, making it a go-to choice for developers. Having thoroughly tested an array of popular extensions, I've carefully curated this list of my top recommendations.</p>
<p>This list is a great place to start from and build on. I highly encourage you to implement routine trial periods with new extensions. Delve into other extensions through the <a target="_blank" href="https://marketplace.visualstudio.com/vscode">Visual Studio Code extension search</a>.</p>
<p>Recognizing the importance of minimizing cognitive load for sustained focus, each extension on this list is chosen with the goal of reducing unnecessary mental burdens like context switching. Make VSCode become your main hub of development needs, and you an improved focus mode along with other benefits.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/01/Screenshot-2024-01-23-at-10.33.01-AM-1.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>I hope these recommendations allow you to optimize your workflow, minimize distractions, and ultimately boost your productivity!</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Use the JavaScript at() Array Method ]]>
                </title>
                <description>
                    <![CDATA[ One of JavaScript's most exciting new features is the at() method. The at() method is a new addition to the Array prototype in JavaScript. You can use this method to access elements in an array using a numeric index. The at() method takes an integer ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/javascript-at-method/</link>
                <guid isPermaLink="false">66bc4cb3d94fa6cb67b84491</guid>
                
                    <category>
                        <![CDATA[ arrays ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Natalie Pina ]]>
                </dc:creator>
                <pubDate>Mon, 21 Aug 2023 14:41:05 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/05/Grey-Minimalist-Tips-Blog-Banner.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>One of JavaScript's most exciting new features is the <code>at()</code> method. The <code>at()</code> method is a new addition to the <code>Array</code> prototype in JavaScript. You can use this method to access elements in an array using a numeric index.</p>
<p>The <code>at()</code> method takes an integer value and returns the item at that index. The value can be either a positive or negative integer. Negative integers count back from the last item in the array.</p>
<h2 id="heading-syntax-of-the-at-method">Syntax of the <code>at()</code> Method</h2>
<p>Here's the syntax – it's pretty simple:</p>
<pre><code class="lang-javascript">arr.at(index)
</code></pre>
<h2 id="heading-how-javascripts-at-method-works">How JavaScript's <code>at()</code> Method Works</h2>
<p>How does this method work, you might ask? The <code>at()</code> method takes a single parameter, which is the index of the element to be accessed.</p>
<p>The index should be a positive or negative integer value. Negative integers will count backward from the last item in the array, and positive integers will count forward from the start of the array.</p>
<p> For example, given the following array:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> rainbow = [<span class="hljs-string">'red'</span>, <span class="hljs-string">'orange'</span>, <span class="hljs-string">'yellow'</span>, <span class="hljs-string">'green'</span>, <span class="hljs-string">'blue'</span>, <span class="hljs-string">'purple'</span>];
</code></pre>
<p>To access the first element in the array (remember that arrays in JS are zero-indexed), you can do this:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> color = rainbow.at(<span class="hljs-number">0</span>); <span class="hljs-comment">// red</span>
</code></pre>
<p>To access the last element in the array, you'd do this:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> lastColor = rainbow.at(<span class="hljs-number">-1</span>); <span class="hljs-comment">// purple</span>
</code></pre>
<p>In the example above, the <code>-1</code> index is treated as an index relative to the end of the array, and will point to the last element in the array.</p>
<h3 id="heading-what-is-relative-indexing">What is relative indexing?</h3>
<p>Relative indexing is a technique used to index elements or values by their position in relation to a reference point or another element. </p>
<p>Rather than relying on fixed numerical indices that assign specific positions to elements, relative indexing enables you to indicate positions based on the relationship with other elements, adapting dynamically. Relative indexing has become a much easier solution with <code>at()</code>.</p>
<h3 id="heading-example-use-case">Example Use Case</h3>
<p>Arrays are used to store collections of data. Developers often need to retrieve specific elements from an array to use their values to display information. When processing data, you might want to modify, transform, or perform calculations on specific data points in an array.</p>
<p>Let's consider a real-world example where the <code>at()</code> method could be useful. Imagine you are building a weather app that displays the forecast for the upcoming week. You have an array containing the weekly temperatures:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> temperatureForecast = [<span class="hljs-number">70</span>, <span class="hljs-number">71</span>, <span class="hljs-number">75</span>, <span class="hljs-number">80</span>, <span class="hljs-number">77</span>, <span class="hljs-number">88</span>, <span class="hljs-number">90</span>];
</code></pre>
<p>The first item in the array is the temperature for today and it's followed by the next 6 days. You want to display the upcoming temperature for tomorrow. To access the temperature for tomorrow, you'd want to get the value at an index of 1.</p>
<p>Here's how you can use <code>at()</code> to access the temperature:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> temperatureForecast = [<span class="hljs-number">70</span>, <span class="hljs-number">71</span>, <span class="hljs-number">75</span>, <span class="hljs-number">80</span>, <span class="hljs-number">77</span>, <span class="hljs-number">88</span>, <span class="hljs-number">90</span>];

<span class="hljs-keyword">const</span> tomorrowsTemperature = temperatureForecast.at(<span class="hljs-number">1</span>);

<span class="hljs-built_in">console</span>.log(<span class="hljs-string">`The high for tomorrow is <span class="hljs-subst">${tomorrowsTemperature}</span>°F.`</span>); 
<span class="hljs-comment">// The high for tomorrow is 71°F.</span>
</code></pre>
<p>When presenting data to users, there are many scenarios where you want to display the most recent or latest item from an array. This is common in news feeds, chat applications, or activity logs.</p>
<h3 id="heading-try-it-out">Try it out:</h3>
<p>I encourage you to play around with this method to learn by doing. I've created a CodePen playground. Change the values in the array and the values passed into <code>at()</code> , try to see if you can guess the result:</p>
<div class="embed-wrapper">
        <iframe width="100%" height="350" src="https://codepen.io/nataliepina/embed/RwedQNj?editors=1010" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="CodePen embed" scrolling="no" allowtransparency="true" allowfullscreen="true" loading="lazy"></iframe></div>
<h2 id="heading-problems-the-at-method-solves">Problems the <code>at()</code> Method Solves</h2>
<p>Prior to its introduction, to access array elements by their index, you had to perform manual calculations.</p>
<p>It has been a common practice to use an array's <code>length</code> property to calculate the number of items in the array, and then to subtract from the length to target an index. For example, to access the last element of an array, you can use <code>array[array.length - 1]</code>.</p>
<h3 id="heading-slice-vs-the-length-property-vs-at"><code>slice()</code> vs the <code>length</code> property vs <code>at()</code></h3>
<p>Let's look at a comparison between three different methods that let us access items in an array. Notice the amount of code required for each, the readability of the code, and the complexity between the methods.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> animals = [<span class="hljs-string">"panda"</span>, <span class="hljs-string">"zebra"</span>, <span class="hljs-string">"penguin"</span>];

<span class="hljs-comment">// with slice()</span>
<span class="hljs-keyword">const</span> animal = animals.slice(<span class="hljs-number">-2</span>, <span class="hljs-number">-1</span>); <span class="hljs-comment">// 'zebra'</span>

<span class="hljs-comment">// with the length property</span>
<span class="hljs-keyword">const</span> animal = animals[animals.length - <span class="hljs-number">2</span>]; <span class="hljs-comment">// 'zebra'</span>

<span class="hljs-comment">// with at()</span>
<span class="hljs-keyword">const</span> animal = animals.at(<span class="hljs-number">-2</span>); <span class="hljs-comment">// 'zebra'</span>
</code></pre>
<p>Using the <code>at()</code> method, accessing the last element of an array is as simple as <code>array.at(-1)</code> . This method provides a far more readable and intuitive solution.</p>
<p>Readability is enhanced with <code>at()</code> method's syntax, because it's intention is well described with the word "at". For example, <code>array.at(0)</code> can be read as "the array <strong>at</strong> the index of zero". </p>
<p>In contrast, an alternative like <code>array.slice(0, 1)</code> lacks the same clarity. Improved readability reduces cognitive load and makes code easier to understand at a glance.</p>
<p>Additionally, adopting the <code>at()</code> method aligns well with other array methods like <code>map()</code> and <code>filter()</code>, fostering a cohesive and functional programming-oriented coding style throughout your code.</p>
<p>The <code>at()</code> method mitigates risk by providing a straightforward way to access elements. With <code>at()</code>, it is less likely to make indexing mistakes or off-by-one errors that commonly arise when working with numerical indices. The method's clear syntax reduces the likelihood of introducing bugs related to index manipulation.</p>
<p>The <code>at()</code> method performs bounds checking automatically, meaning it ensures that the index is within the valid range for the array. The <code>length</code> method does not offer any bounds checking. With bounds checking if an out-of-range index is provided, the method will return <code>undefined</code> without throwing an error.</p>
<p>Performing manual checks with <code>length</code> tend to be error-prone, and more difficult to debug. While manual indexing allows you to access elements, it requires a longer code sequence to do so. </p>
<p>The need to calculate indices, perform subtraction, and handle edge cases adds extra characters and complexity to your code. This approach can introduce subtle errors can be challenging to identify and fix.</p>
<p>For accessing a single element, using <code>.slice()</code> introduces unnecessary complexity. The method requires specifying both the start and end indices, which is inconvenient when you only need one element. </p>
<p>The use of <code>array.slice()</code> is best for scenarios where you want to retrieve a range of elements. If you only need a single element, using array indexing directly is more efficient.</p>
<p>While <code>slice()</code> and <code>length</code> have their uses, the <code>at()</code> method provides a compelling solution for array element access.</p>
<h2 id="heading-browser-support-for-at">Browser Support for <code>at()</code></h2>
<p>Because this method is new, it is not supported by all browsers just yet. Currently, it is supported by all major browsers like Chrome, FireFox, and Safari. It is not yet supported by Edge, or Internet Explorer (r.i.p).</p>
<p>Keep in mind, you can use a <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Glossary/Polyfill">polyfill</a> to handle browsers without this capability. Due to the support from major browsers already, it shouldn't be long until full support is available. </p>
<h2 id="heading-summary">Summary</h2>
<p>The addition of <code>at()</code> is a valuable asset to JavaScript's set of Array methods. It allows for a simple and straightforward way to access array elements using an index value. </p>
<p>With <code>at()</code>, you can provide a positive or negative integer value to retrieve an element in an array, counting forward or backward respectively. It is supported by all major browsers such as Chrome, Firefox, and Safari.</p>
<p>Give this new method a whirl and share your thoughts. Happy coding! </p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ The Difference Between Pseudo-Classes and Pseudo-Elements in CSS ]]>
                </title>
                <description>
                    <![CDATA[ In CSS, pseudo-classes and pseudo-elements are two types of keywords that you can combine with selectors. They are used to target the element's state or specific parts of an element.  In this article, we'll explore the differences between the two alo... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/the-difference-between-pseudo-classes-and-elements-in-css/</link>
                <guid isPermaLink="false">66bc4cbc3fc58765eaa843c1</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Natalie Pina ]]>
                </dc:creator>
                <pubDate>Fri, 21 Apr 2023 17:34:29 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/04/pseudo-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>In CSS, pseudo-classes and pseudo-elements are two types of keywords that you can combine with selectors. They are used to target the element's state or specific parts of an element. </p>
<p>In this article, we'll explore the differences between the two along with their history and best practices.</p>
<h6 id="heading-syntax">Syntax</h6>
<ul>
<li>The single colon <code>:</code> refers to pseudo-classes</li>
<li>The double colon <code>::</code> refers to pseudo-elements</li>
</ul>
<h2 id="heading-pseudo-classes-vs-pseudo-elements">Pseudo-Classes vs Pseudo-Elements</h2>
<p><a target="_blank" href="https://www.dictionary.com/browse/pseudo#:~:text=2%20of%202">Pseudo</a>-,pseudo%2D,names%20of%20isomers%20(pseudoephedrine).) itself means false, unreal, or fake. The prefix <code>pseudo-</code>, is used to reference classes or elements that are not "real". Not real in this context means not a DOM (Document Object Model) element, but instead a virtual element created for styling purposes. </p>
<p>To form a better definition, let's discuss the difference between pseudo-classes and pseudo-elements in greater detail.</p>
<h3 id="heading-what-are-pseudo-classes-in-css">What are Pseudo-Classes in CSS?</h3>
<p>Pseudo-classes (<code>:</code>) are primarily used to style an element that's under various states. When referring to state, this includes the condition or user behavior, for example hover, active, focus, or disabled. States generally involve user interaction.</p>
<p>For example, we can target all links to have a text color of lavender when the user hovers over the link.</p>
<pre><code class="lang-css"><span class="hljs-selector-tag">a</span><span class="hljs-selector-pseudo">:hover</span> {
  <span class="hljs-attribute">color</span>: lavender;
}
</code></pre>
<p>Inspect the Chrome DevTools and you will find other examples of state. Here you can also test out and debug applied styles based on the state (and the related pseudo-class used) by toggling them on and off. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/04/Screenshot-2023-04-20-at-10.13.42-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>There are over <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes#alphabetical_index">50 types of pseudo-classes</a>, so I highly suggest looking over all of the possibilities.</p>
<p>Test out the code example below, inspect the pseudo-classes, and try to add a new one. </p>
<div class="embed-wrapper">
        <iframe width="100%" height="350" src="https://codepen.io/nataliepina/embed/xxyRWYm" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="CodePen embed" scrolling="no" allowtransparency="true" allowfullscreen="true" loading="lazy"></iframe></div>
<h4 id="heading-functional-pseudo-classes">Functional Pseudo-Classes</h4>
<p>Another variation of the pseudo-class type is the functional pseudo-class. These function calls take in a parameter of a <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/CSS/Selector_list#selector_list">selector-list</a> to match elements. </p>
<p>Unlike other types of pseudo-classes that target static state such as hover, these can dynamically target events and user interactions.</p>
<pre><code class="lang-css"><span class="hljs-selector-pseudo">:is()</span>
<span class="hljs-comment">/* The matches-any pseudo-class matches any element that matches any of
the selectors in the list provided. */</span>

<span class="hljs-selector-pseudo">:not()</span>
<span class="hljs-comment">/* The negation, or matches-none, pseudo-class represents any element 
that is not represented by its argument. */</span>

<span class="hljs-selector-pseudo">:where()</span>
<span class="hljs-comment">/* The specificity-adjustment pseudo-class matches any element that
matches any of the selectors in the list provided without adding any 
specificity weight. */</span>

<span class="hljs-selector-pseudo">:has()</span>
<span class="hljs-comment">/* The relational pseudo-class represents an element if any of the 
relative selectors match when anchored against the attached element. */</span>
</code></pre>
<h3 id="heading-what-are-pseudo-elements-in-css">What are Pseudo-Elements in CSS?</h3>
<p>Pseudo-elements (<code>::</code>) are used to style specified parts of an element. They can be used to target the first letter or first line. Or they can be used to insert content before or after the element. </p>
<p>It's worth getting familiar with this <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements#alphabetical_index">index of pseudo-elements</a> to learn more about the available keywords.</p>
<p>As an example, to create a large first letter of a paragraph, you can do that using <code>first-letter</code> like this:</p>
<pre><code class="lang-css"><span class="hljs-selector-tag">p</span><span class="hljs-selector-pseudo">::first-letter</span> {
  <span class="hljs-attribute">font-size</span>: <span class="hljs-number">9em</span>;
}
</code></pre>
<p>Another common example of a pseudo-element is to use <code>::before</code> or <code>::after</code> to insert content before or after the targeted element.</p>
<p>Test out the code example below to see how you can use <code>::before</code> and <code>::after</code> to create lines before and after a text element.</p>
<div class="embed-wrapper">
        <iframe width="100%" height="350" src="https://codepen.io/nataliepina/embed/qBJqpgq" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="CodePen embed" scrolling="no" allowtransparency="true" allowfullscreen="true" loading="lazy"></iframe></div>
<h2 id="heading-the-difference-between-and-in-css">The Difference between <code>:</code> and <code>::</code> in CSS</h2>
<p>As a takeaway, remember that there is a key difference between a single and double colon. Most importantly that <code>:</code> refers to pseudo-classes and <code>::</code> refers to pseudo-elements.</p>
<h3 id="heading-history-of-the">History of the <code>::</code></h3>
<p>Historically, there was only a single colon <code>:</code>  to both define pseudo-classes and pseudo-elements. The <code>::</code> notation was introduced with CSS3 as a way to differentiate the two.</p>
<p>Pseudo-elements and pseudo-classes are related concepts that provide different ways to style an element. As a result, the slight variation in syntax between them is logical.</p>
<p>Using only the single colon syntax is not recommended for both, as it has become deprecated. Browsers will still accept <code>:</code> for both currently, for backwards compatibility reasons. Since it's possible to encounter either syntax, understanding the historical context around this is beneficial.</p>
<h2 id="heading-best-practices-for-using-vs">Best Practices for using <code>:</code> vs <code>::</code></h2>
<p>The best practice when choosing which colon syntax to use is to stick with current standards of CSS3. Following these standards will improve the maintainability of your codebase, so it's helpful to keep and enforce guidelines around this for your codebase.</p>
<p>It will also help to future-proof your CSS. As we discussed, browsers currently accept the single colon syntax for both, but that may not always be the case. By using the double-colon syntax for pseudo-elements, you can help prevent errors and bugs in the future as CSS continues to change and evolve.</p>
<p>The syntax distinction between the two offers readability improvements. This clarifies what you are targeting, and is helpful when dealing with intricate selectors that involve multiple pseudo-elements and pseudo-classes together.</p>
<h2 id="heading-wrapping-up">Wrapping Up</h2>
<p>Understanding the difference between a pseudo-class and a pseudo-element is essential for writing maintainable CSS. Pseudo-classes are used to target state. Pseudo-elements are used to target specific parts of an element.</p>
<p>I hope this article helped to understand the differences between pseudo-classes and pseudo-elements, along with the history, and best practices when using them. </p>
<p>Happy styling! </p>
<p>If you want to learn more about CSS, you can find me on <a target="_blank" href="https://twitter.com/ui_natalie">Twitter</a>. </p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Update NPM Dependencies ]]>
                </title>
                <description>
                    <![CDATA[ The Node Package Manager (npm) provides various features to help you install and maintain your project's dependencies. Dependencies can become outdated over time due to bug fixes, new features, and other updates. The more project dependencies you hav... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-update-npm-dependencies/</link>
                <guid isPermaLink="false">66bc4cae73c9920bb20c0e01</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ node ]]>
                    </category>
                
                    <category>
                        <![CDATA[ npm ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Natalie Pina ]]>
                </dc:creator>
                <pubDate>Tue, 05 Jul 2022 22:55:20 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/07/deps.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>The Node Package Manager (npm) provides various features to help you install and maintain your project's dependencies.</p>
<p>Dependencies can become outdated over time due to bug fixes, new features, and other updates. The more project dependencies you have, the harder it is to keep up with these updates. </p>
<p>Outdated packages can pose a threat to security and can have negative effects on performance. Up-to-date packages prevent vulnerabilities. This means that periodic dependency checks and updates are important.</p>
<h2 id="heading-how-to-keep-dependencies-up-to-date">How to Keep Dependencies Up-To-Date</h2>
<p>Now, you could go through each individual package in package.json one by one to change the version and run <code>npm install &lt;package&gt;@latest</code> to get the latest version. But this isn't going to be the most efficient method. </p>
<p>Imagine if you had 20 or more packages that could use a version bump. Instead, you should develop a workflow to periodically check for new versions before the number of outdated dependencies grows and it becomes increasingly harder to upgrade.</p>
<p>Here's a workflow that helps me stay on top of updates: first, discover which packages need to be updated and how far behind the versions are. Next, choose to update packages individually or together in a batch. Always test out the updates to ensure breaking changes haven't occurred.</p>
<p>I prefer to perform major version updates individually. With major updates, you're likely to encounter breaking changes. It's much easier to undo or address code changes in relation to one package compared to many.</p>
<p>In this article, I will go over methods to inspect and upgrade dependencies in detail.</p>
<h2 id="heading-how-to-use-the-npm-outdated-command">How to Use the <code>npm outdated</code> Command</h2>
<pre><code>npm outdated
</code></pre><p>This command will check every installed dependency and compare the current version with the latest version in the <a target="_blank" href="https://www.npmjs.com/">npm registry</a>. It is printed out into a table outlining available versions.</p>
<p>It is built into npm so there are no additional packages required to download. <code>npm outdated</code> is a good place to start for an overview of the number of dependency updates required.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/Screen-Shot-2022-07-03-at-1.14.41-PM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<ul>
<li>Current is the current version installed.</li>
<li>Wanted is the max version of the package according the <a target="_blank" href="https://docs.npmjs.com/misc/semver">semver</a> range.</li>
<li>Latest is the version of the package tagged as latest in the npm registry.</li>
</ul>
<p>With this method, to install updates for every package, you just need to run:</p>
<pre><code>npm update
</code></pre><p>Keep in mind that with <code>npm update</code> it will never update to a major breaking-changes version. It updates the dependencies in package.json and package-lock.json. It will use the "wanted" version. </p>
<p>To obtain the "latest" version append <code>@latest</code>to individual installs, for example <code>npm install react@latest</code>. </p>
<h2 id="heading-how-to-use-npm-check-updates">How to Use <code>npm-check-updates</code></h2>
<p>For an advanced and customizable upgrading experience, I'd recommend <a target="_blank" href="https://www.npmjs.com/package/npm-check-updates"><code>npm-check-updates</code></a>. This package can do everything <code>npm outdated</code> and <code>npm upgrade</code> can do with some added customization options. It does require a package installation, however.</p>
<p>To get started, install the <a target="_blank" href="https://www.npmjs.com/package/npm-check-updates"><code>npm-check-updates</code></a> package globally:</p>
<pre><code>npm install -g npm-check-updates
</code></pre><p>Then, run <code>ncu</code> to display packages to upgrade. Similar to <code>npm outdated</code> it will not apply any changes.</p>
<pre><code>ncu
Checking package.json
[====================] <span class="hljs-number">12</span>/<span class="hljs-number">12</span> <span class="hljs-number">100</span>%

 @testing-library/user-event    ^<span class="hljs-number">13.5</span><span class="hljs-number">.0</span>  →  ^<span class="hljs-number">14.2</span><span class="hljs-number">.1</span>
 @types/jest                    ^<span class="hljs-number">27.5</span><span class="hljs-number">.2</span>  →  ^<span class="hljs-number">28.1</span><span class="hljs-number">.4</span>
 @types/node                  ^<span class="hljs-number">16.11</span><span class="hljs-number">.42</span>  →  ^<span class="hljs-number">18.0</span><span class="hljs-number">.1</span>

Run ncu -u to upgrade package.json
</code></pre><p>To upgrade dependencies, you just need to run:</p>
<pre><code>ncu --upgrade

<span class="hljs-comment">// or </span>
ncu -u
</code></pre><p><img src="https://www.freecodecamp.org/news/content/images/2022/07/screenshot.png" alt="Image" width="600" height="400" loading="lazy">
<em>Resource: <a target="_blank" href="https://www.npmjs.com/package/npm-check-updates">npm-check-updates</a></em></p>
<ul>
<li>Red = major</li>
<li>Cyan = minor</li>
<li>Green = patch</li>
</ul>
<p>This updates dependencies in only the package.json file and will select the latest version even if it includes a breaking change. With this method, <code>npm install</code> is not run automatically so be sure to run that afterward to update package-lock.json.</p>
<p>To choose your preferred version type, run <code>ncu --target [patch, minor, latest, newest, greatest]</code>. </p>
<h3 id="heading-how-to-use-interactive-mode-with-npm-check-updates">How to Use Interactive Mode with <code>npm-check-updates</code></h3>
<pre><code>ncu --interactive

<span class="hljs-comment">// or </span>
ncu -i
</code></pre><p>Interactive mode allows you to select specific packages to update. By default, all packages are selected. </p>
<p>Navigate down through each package and use space to deselect, and enter when you are ready to upgrade all of the selected packages. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/175337598-cdbb2c46-64f8-44f5-b54e-4ad74d7b52b4.png" alt="Image" width="600" height="400" loading="lazy">
<em>Resource: <a target="_blank" href="https://www.npmjs.com/package/npm-check-updates">npm-check-updates</a></em></p>
<p>There are several ways to elevate the interactive <code>npm-check-updates</code> experience. </p>
<pre><code class="lang-ncu">ncu --interactive --format group
</code></pre>
<p>This command groups and organizes packages into major, minor and patch releases. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/175336533-539261e4-5cf1-458f-9fbb-a7be2b477ebb--1-.png" alt="Image" width="600" height="400" loading="lazy">
<em>Resource: <a target="_blank" href="https://www.npmjs.com/package/npm-check-updates">npm-check-updates</a></em></p>
<p><code>npm-check-updates</code> provides other useful tools such as <a target="_blank" href="https://github.com/raineorshine/npm-check-updates#doctor-mode">doctor mode</a> which installs upgrades and runs tests to check for breaking changes. </p>
<p>I highly suggest taking a look at the <a target="_blank" href="https://github.com/raineorshine/npm-check-updates">documentation</a> overall to learn more about all this package has to offer. The project is well-maintained along with a climbing weekly download rate of ~<a target="_blank" href="https://www.npmjs.com/package/npm-check-updates">294,467</a> at the time of writing this article.</p>
<h2 id="heading-summary">Summary</h2>
<p>Getting in the habit of regularly updating your dependencies will help your apps' security and performance. </p>
<p>Both <code>npm outdated</code> and <code>npm-check-updates</code> are useful tools to check for packages that could use a version bump. </p>
<p>I suggest trying both of these out to see which provides a better developer experience.</p>
<p>I hope these methods help along the path of updating!</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Convert a Value to a Boolean in JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ A boolean is a primitive value that represents either true or false. In Boolean contexts, JavaScript utilizes type casting to convert values to true/false. There are implicit and explicit methods to convert values into their boolean counterparts. Thi... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-convert-value-to-boolean-javascript/</link>
                <guid isPermaLink="false">66bc4cabe35f27b3539506d7</guid>
                
                    <category>
                        <![CDATA[ beginner ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Boolean ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Natalie Pina ]]>
                </dc:creator>
                <pubDate>Fri, 20 May 2022 18:06:38 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/05/Fashion-Sale--Banner--Landscape--.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>A boolean is a <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Glossary/Primitive">primitive value</a> that represents either true or false. In Boolean contexts, JavaScript utilizes <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Glossary/Type_Conversion">type casting</a> to convert values to true/false. There are implicit and explicit methods to convert values into their boolean counterparts.</p>
<p>This article provides an overview of truthy and falsy values and how to convert values into booleans in JavaScript.</p>
<h3 id="heading-javascript-truthy-and-falsy-values-cheatsheet">JavaScript Truthy and Falsy Values Cheatsheet</h3>
<pre><code><span class="hljs-built_in">Boolean</span>(<span class="hljs-literal">false</span>);         <span class="hljs-comment">// false</span>
<span class="hljs-built_in">Boolean</span>(<span class="hljs-literal">undefined</span>);     <span class="hljs-comment">// false</span>
<span class="hljs-built_in">Boolean</span>(<span class="hljs-literal">null</span>);          <span class="hljs-comment">// false</span>
<span class="hljs-built_in">Boolean</span>(<span class="hljs-string">''</span>);            <span class="hljs-comment">// false</span>
<span class="hljs-built_in">Boolean</span>(<span class="hljs-literal">NaN</span>);           <span class="hljs-comment">// false</span>
<span class="hljs-built_in">Boolean</span>(<span class="hljs-number">0</span>);             <span class="hljs-comment">// false</span>
<span class="hljs-built_in">Boolean</span>(<span class="hljs-number">-0</span>);            <span class="hljs-comment">// false</span>
<span class="hljs-built_in">Boolean</span>(<span class="hljs-number">0n</span>);            <span class="hljs-comment">// false</span>

<span class="hljs-built_in">Boolean</span>(<span class="hljs-literal">true</span>);          <span class="hljs-comment">// true</span>
<span class="hljs-built_in">Boolean</span>(<span class="hljs-string">'hi'</span>);          <span class="hljs-comment">// true</span>
<span class="hljs-built_in">Boolean</span>(<span class="hljs-number">1</span>);             <span class="hljs-comment">// true</span>
<span class="hljs-built_in">Boolean</span>([]);            <span class="hljs-comment">// true</span>
<span class="hljs-built_in">Boolean</span>([<span class="hljs-number">0</span>]);           <span class="hljs-comment">// true</span>
<span class="hljs-built_in">Boolean</span>([<span class="hljs-number">1</span>]);           <span class="hljs-comment">// true</span>
<span class="hljs-built_in">Boolean</span>({});            <span class="hljs-comment">// true</span>
<span class="hljs-built_in">Boolean</span>({ <span class="hljs-attr">a</span>: <span class="hljs-number">1</span> });      <span class="hljs-comment">// true</span>
</code></pre><p>It's best to start by first understanding which values are interpreted as truthy or falsy by JavaScript. It's also important to understand <a target="_blank" href="https://betterprogramming.pub/implicit-and-explicit-coercion-in-javascript-b23d0cb1a750">implicit coercion</a> compared to <a target="_blank" href="https://www.bookstack.cn/read/TypesGrammar/spilt.3.ch4.md#Explicitly:%20*%20%E2%80%94%3E%20Boolean">explicit coercion</a>. </p>
<p>Implicit coercion is initiated by the JavaScript engine and happens automatically. Explicit coercion is performed by manually converting values, and JavaScript provides built in methods to handle this.</p>
<h3 id="heading-the-operator">The <code>!!</code> Operator</h3>
<pre><code class="lang-javascript">!!value
</code></pre>
<p>You may already be familiar with <code>!</code> as the logical NOT operator. When using two in succession (<code>!!</code>), the first <code>!</code> coerces the value to a boolean and inverts it. For example <code>!true</code> would result in false. The second <code>!</code> reverses the previous inverted value, resulting in the true boolean value.</p>
<p>This is generally a preferred method, as it has <a target="_blank" href="https://www.measurethat.net/Benchmarks/Show/11127/0/boolean-vs">better performance</a>. A potential con to this method is a loss in readability, mainly if other developers are unfamiliar with how this operator works.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> value = <span class="hljs-string">"truthy string"</span>
!!value <span class="hljs-comment">// true</span>
</code></pre>
<p>Here is an example breaking this down into steps:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> value = <span class="hljs-string">"truthy string"</span>;

!value; <span class="hljs-comment">// false</span>
!!value; <span class="hljs-comment">// true</span>
</code></pre>
<p>Below is a list of example output with the <code>!!</code> operator.</p>
<pre><code class="lang-javascript"><span class="hljs-comment">// Falsy Values</span>

!!<span class="hljs-string">''</span> <span class="hljs-comment">// false</span>
!!<span class="hljs-literal">false</span> <span class="hljs-comment">// false</span>
!!<span class="hljs-literal">null</span> <span class="hljs-comment">// false</span>
!!<span class="hljs-literal">undefined</span> <span class="hljs-comment">// false</span>
!!<span class="hljs-number">0</span> <span class="hljs-comment">// false</span>
!!<span class="hljs-literal">NaN</span> <span class="hljs-comment">// false</span>


<span class="hljs-comment">// Truthy Values</span>

!![] <span class="hljs-comment">// true</span>
!!<span class="hljs-string">"false"</span> <span class="hljs-comment">// true</span>
!!<span class="hljs-literal">true</span> <span class="hljs-comment">// true</span>
!!<span class="hljs-number">1</span> <span class="hljs-comment">// true</span>
!!{} <span class="hljs-comment">// true</span>
</code></pre>
<h3 id="heading-the-boolean-function">The <code>Boolean()</code> Function</h3>
<pre><code class="lang-javascript"><span class="hljs-built_in">Boolean</span>(value)
</code></pre>
<p><code>Boolean()</code> is a global function that converts the value it's passed into a boolean.   </p>
<p>You shouldn't use this with the new keyword (<code>new Boolean</code>) as this creates an instance of a Boolean that has a type of object. Below is an example of the correct use of this function.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> value = <span class="hljs-string">"truthy string"</span>
<span class="hljs-built_in">Boolean</span>(value) <span class="hljs-comment">// true</span>
</code></pre>
<h2 id="heading-tldr">TL;DR</h2>
<p>There are two methods to cast a value to a boolean in JavaScript.</p>
<h3 id="heading-1">1. <code>!!</code></h3>
<pre><code class="lang-javascript">!!value
</code></pre>
<h3 id="heading-2-boolean">2. <code>Boolean()</code></h3>
<pre><code><span class="hljs-built_in">Boolean</span>(value)
</code></pre><pre><code class="lang-javascript"><span class="hljs-keyword">const</span> finalThoughts = <span class="hljs-string">"I really enjoyed writing this article. Thanks for reading!"</span>

!!finalThoughts <span class="hljs-comment">// true</span>
<span class="hljs-built_in">Boolean</span>(finalThoughts) <span class="hljs-comment">// true</span>
</code></pre>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Best Colorful VSCode Extensions – How to Personalize Your Editor ]]>
                </title>
                <description>
                    <![CDATA[ Engineers spend a good portion of their day writing code in their integrated development environment, or IDE for short. And Visual Studio Code is one of the best free IDE's on the market.  I find that personalizing my IDE helps me enjoy the time I sp... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/best-colorful-vscode-extensions-for-productivity/</link>
                <guid isPermaLink="false">66bc4ca273c9920bb20c0dff</guid>
                
                    <category>
                        <![CDATA[ editor ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Integrated Development Environment   ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Productivity ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Visual Studio Code ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Natalie Pina ]]>
                </dc:creator>
                <pubDate>Tue, 12 Apr 2022 18:19:17 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/03/Cover.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Engineers spend a good portion of their day writing code in their integrated development environment, or IDE for short. And <a target="_blank" href="https://code.visualstudio.com/">Visual Studio Code</a> is one of the best free IDE's on the market. </p>
<p>I find that personalizing my IDE helps me enjoy the time I spend using it more. I want to share that same spark of joy with you all, and have been searching for and testing out the best extensions to download. And many of these will help you be more productive.</p>
<p>This article goes beyond theming extensions, so I suggest picking out a theme first. Or try out my current favorite theme, <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=mathcale.theme-dracula-refined">Dracula Refined</a>. </p>
<h2 id="heading-indent-rainbow">Indent Rainbow</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow">Indent Rainbow</a> is a great tool to add color and productivity to your setup. It can also help serve as an alignment check for your indentation. Each indentation is given an alternating rainbow color.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/03/Screen-Shot-2022-03-25-at-4.26.13-PM.png" alt="Image" width="600" height="400" loading="lazy">
<em>Indent Rainbow</em></p>
<h3 id="heading-bonus-indent-rainbow-palettes">Bonus: Indent Rainbow Palettes</h3>
<p>Want custom colors in your Indent Rainbow? Check out <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=evondev.indent-rainbow-palettes">Indent Rainbow Palettes</a> by Evondev.</p>
<p>After installing Indent Rainbow, install this extension and follow the outlined steps to select a new gradient palette.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/03/Screen-Shot-2022-03-25-at-4.32.34-PM.png" alt="Image" width="600" height="400" loading="lazy">
<em>Indent Palettes1</em></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/03/Screen-Shot-2022-03-25-at-4.34.17-PM.png" alt="Image" width="600" height="400" loading="lazy">
<em>Indent Palettes2</em></p>
<h2 id="heading-bracket-pair-colorizer">Bracket Pair Colorizer</h2>
<p>This will add rainbow colors to brackets, and matching brackets will have the same color. This extension has saved me a number of times when looking for a missing or extra bracket. </p>
<p>The <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer-2">Bracket Pair Colorizer</a> is another popular extension with over 4 million installs.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/03/Screen-Shot-2022-03-25-at-5.15.51-PM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<h4 id="heading-depreciation-notice-for-2022">Depreciation Notice for 2022</h4>
<p>This extension has recently become depreciated. This is because of upgrades to VSCode allowing for a bracket pair colorization setting. This can be toggled on with <code>"editor.bracketPairColorization.enabled": true</code> in your user settings. </p>
<p>The improved performance of this feature makes it a better choice, but if you'd prefer to not edit your user settings, I'd suggest looking for extensions that handle this for you such as Bracket Pair Colorizer or <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=wayou.vscode-todo-highlight">Rainbow Brackets</a>.</p>
<h2 id="heading-colorize">Colorize</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=kamikillerto.vscode-colorize">Colorize</a> visualizes color variables by highlighting them with their color value. This is a handy timesaver for translating hex codes and variable names.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/03/demo_variables.gif" alt="Image" width="600" height="400" loading="lazy">
<em>Photo Credit: Colorize</em></p>
<h2 id="heading-peacock">Peacock</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=johnpapa.vscode-peacock">Peacock</a> provides optional window colors. It is great for managing multiple workspaces. It can be easy to forget which workspace you are in when jumping between similar windows, but not with the bright colors provided by Peacock. You can even <a target="_blank" href="https://papapeacockstorage.z13.web.core.windows.net/guide/#favorite-colors">customize workspace colors</a>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/03/hero.png" alt="Image" width="600" height="400" loading="lazy">
<em>Photo Credit: Peacock</em></p>
<h2 id="heading-vscode-icons">VSCode Icons</h2>
<p>Adding icons can help when navigating through your folders. <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=vscode-icons-team.vscode-icons">VSCode Icons</a> has an extensive library of icons matching a variety of file types. </p>
<p>For example, you can easily see if you are selecting a TypeScript file or a JavaScript file based on the icon. It also adds an extra touch of color and detail to folder structures.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/03/screenshot.gif" alt="Image" width="600" height="400" loading="lazy">
<em>Photo Credit: vscode-icons</em></p>
<h2 id="heading-todo-highlight">TODO Highlight</h2>
<p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=wayou.vscode-todo-highlight">TODO Highlight</a> will customize your list of TODO comments and make them pop with color. It can be easy to overlook commented out code, but not with this extension, as it is difficult to overlook text that is bright orange. </p>
<p><code>TODO</code> and <code>FIXME</code> are built in keywords. You'll have the option to customize the color of these and add additional keywords.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/03/material-night-eighties.png" alt="Image" width="600" height="400" loading="lazy">
<em>Photo Credit: TODO Highlight</em></p>
<h2 id="heading-tldr">TL;DR</h2>
<p>Here is a condensed list of the extensions mentioned in this article.</p>
<ul>
<li><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow">Indent Rainbow</a></li>
<li><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer-2">Bracket Pair Colorizer</a></li>
<li><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=kamikillerto.vscode-colorize">Colorize</a></li>
<li><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=johnpapa.vscode-peacock">Peacock</a></li>
<li><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=vscode-icons-team.vscode-icons">VSCode Icons</a></li>
<li><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=wayou.vscode-todo-highlight">TODO Highlight</a></li>
<li><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=mathcale.theme-dracula-refined">Dracula Refined Theme</a></li>
</ul>
<p>I hope these extensions will bring a rainbow of colors to your VSCode, too.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What is a UX Engineer? User Experience Engineer Role Explained ]]>
                </title>
                <description>
                    <![CDATA[ I am currently a User Experience or UX Engineer for D2iQ. And lots of people ask me what exactly is a UX Engineer.  This question comes from designers and developers alike. So, I figured it was time to write about it to create awareness and demystify... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/what-is-a-ux-engineer/</link>
                <guid isPermaLink="false">66bc4cbf7fa38392bfab8132</guid>
                
                    <category>
                        <![CDATA[ user experience ]]>
                    </category>
                
                    <category>
                        <![CDATA[ UX ]]>
                    </category>
                
                    <category>
                        <![CDATA[ ux design ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Natalie Pina ]]>
                </dc:creator>
                <pubDate>Fri, 25 Mar 2022 21:47:17 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/03/Blog-Header-1200x600-px--1--1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>I am currently a User Experience or UX Engineer for D2iQ. And lots of people ask me what exactly is a UX Engineer. </p>
<p>This question comes from designers and developers alike. So, I figured it was time to write about it to create awareness and demystify the role.</p>
<p>This article will help you understand what a UX Engineer is, what their duties are, the required skillset, and it may even convince you to be come one yourself.</p>
<h2 id="heading-what-does-user-experience-mean">What Does User Experience Mean?</h2>
<p>Before we jump into the role of UX Engineer, let's take a brief moment to define User Experience. </p>
<p>Most people are familiar with UI, which refers to the user interface. The user interface is most commonly the screen in which user is interacting with, for example a website or application. </p>
<p>UX relates to the all encompassing experiences the end user has while using a product or service, UI included.</p>
<p>The significance of UX is undeniable. In <em>The User Experience Team of One</em>, author Leah Buley notes, </p>
<blockquote>
<p>“UX is a force for good. In an increasingly technological world, designing products with real people in mind helps us make sure that technology integrates in our lives in a human way. It’s a voice of reason, arguing that products and technology can support and even enrich our fundamental humanity.” </p>
</blockquote>
<h2 id="heading-who-are-ux-engineers">Who are UX Engineers?</h2>
<p>A UX Engineer (UXE) is the bridge between design and development. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/03/UXEngineer_Diagram.png" alt="Image" width="600" height="400" loading="lazy">
<em>Icon credit: Noun Project</em></p>
<h3 id="heading-engineers">Engineers</h3>
<p>UXE's are engineers first, with a working knowledge of design. Front end development skills are a prerequisite. A UXE cares deeply about the user experience and is heavily involved in impacting it.</p>
<blockquote>
<p>"Developers write the code and build the systems that make the experience real. That moment when a flat concept on a page becomes a working, functioning, interactive thing is like making life. It’s incredibly rewarding. It also enables them to see and understand how it will feel and function for the enduser." – <em>The User Experience Team of One</em></p>
</blockquote>
<h3 id="heading-designers">Designers</h3>
<p>UXEs can be particularly useful in conceptualization stages of design. They are able to help designers understand what is feasible and how much engineering effort it may take to achieve.</p>
<p>Some UXE's will contribute prototypes, wireframes, and design mockups. The amount of true design work can vary from company to company. </p>
<p>It is common for a UX Engineer to be working within a Design System. For example, my role at D2iQ includes maintaining a design system and component library.</p>
<h3 id="heading-advocates">Advocates</h3>
<p>A UXE will need to have empathy for both sides and be able to advocate for design or development. They may be required to push back on either side as an advocate. This is the reason they are considered the bridge between design and development.</p>
<p>A UXE may even need to advocate for UX itself within their organization, to create awareness and to build support for their work. This can be achieved through setting up a peer-to-peer learning community, lunch and learn meetings, and other methods to share and educate others.</p>
<p>You may find varying definitions of what a UX Engineer means. The lines are often blurred between UI Engineer, UX Engineer, and Design Technologist. Much of the role can depend on the company and what are the needs they want to fill with that role. </p>
<p>You may thrive as a UXE if you enjoy:</p>
<ul>
<li>Front end engineering</li>
<li>Styling with CSS specifically</li>
<li>Design thinking</li>
<li>Occasionally flexing some design skills</li>
<li>Participating in UX Research</li>
<li>Working with Design Systems</li>
<li>Creative leeway</li>
</ul>
<p>We'll dive deeper on the skills required as a UXE which may clarify what exactly it entails.</p>
<h3 id="heading-confusion-within-the-front-end">Confusion within the Front End</h3>
<p>I wanted to make a note on the confusion between UI Engineer, UX Engineer and Front End Engineer. These are often assumed to be the same role. That may or may not be the case, depending on what is in the job description. However, there are some notable differences.</p>
<p>UI Engineer is the most similar to a Front End Engineer. They're not entirely the same historically, but the line between the two has become blurry. They will work on the technical side of building the user interface. Working on the UI can easily start to bleed into UX topics as they are tightly coupled, which may be where the confusion arises. </p>
<p>On the other hand, a UX Engineer is the more design forward of the two. A UXE is a technical role that is intrinsically involved in the user's experience. They would be the one to consider "how is the user interacting with this button?", "how can I make it absolutely clear what this button does", and "how can I provider the user a better experience when using this button?" </p>
<p>On the other hand, a UI Engineer would generally ask themselves how to best match the design to engineer an efficient button. </p>
<p>This is of course glossing over the depths that each role can go into. UI Engineers can become more involved in UX if they take a conscious efforts to impact it. </p>
<p>The job description of UX Engineer might align more with what you would see under Design Technologist or Design System Engineer.</p>
<p>Overall, the term Front End can cover a broad range of individually complex topics and skillsets, which is why we are starting to see the need to define more specific roles within Front End. UX Engineer is among the more recent positions to become defined based on this.</p>
<h2 id="heading-required-skills-for-a-user-experience-engineer">Required Skills for a User Experience Engineer</h2>
<p>There are many skills that a UXE may possess that aren't limited to Front End development and design. Again, much of the role can be dictated by the company’s definition of the role and responsibilities. </p>
<p>Below are some of the key skills that would be most commonly applicable and helpful to have.</p>
<h3 id="heading-technical-skills">Technical Skills</h3>
<p><strong>Front End Development.</strong> This includes knowledge of HTML, CSS and JavaScript. You should also know popular JavaScript libraries such as React. This could additionally include testing, debugging, build tools, and dependency managers.</p>
<p><strong>CSS Specialists.</strong> It is important to note that the role requires in-depth knowledge of CSS. This could entail CSS architecture or working with preprocessors like Sass and Less. It's beneficial to have experience with CSS-in-JS libraries such as Styled Components and Emotion.</p>
<p><strong>UI/UX Design.</strong> This may be a mix of design related skills from prototyping to UX Principles to wire-framing. UXE’s may produce low-fidelity or high-fidelity design mockups. It is helpful to have experience with design tools such as Figma, Sketch, or InVision. Design systems could also be lumped into this category. It's valuable to understand the benefit of design systems, and knowing how to enforce the design standards in the UI. </p>
<p><strong>Storybook.</strong> Storybook is a tool to help engineers build, test, and display UI components. Working with Storybook will require additional niche technical know-how specific to this tool. There is a likelihood that if you are working with a design system and component library, the documentation is utilizing Storybook.</p>
<p><strong>Accessibility.</strong> To excel in this role, you need to understand accessibility guidelines. Caring for users means inclusive design. Products should not limit the type of user. Products should account for all users. Having technical skills to test and improve the accessibility of applications will be extremely beneficial.</p>
<p><strong>Responsive Design.</strong> Designers may only be able to mock up several screen size views such as mobile, tablet, and desktop. You'll be implementing those designs. There are gaps between each screen size mock which will require technical and decision making skills and for a seamless transition. These are the types of problems you will encounter and they impact the user experience.</p>
<h3 id="heading-less-technical-skills">Less Technical Skills</h3>
<p><strong>Empathy.</strong> This is a crucial skill for a UXE. They need to understand users in order to improve their experience. This includes having a passion for understanding how people think. Caring deeply about the impact you can have on user experiences will take you far in this field. </p>
<p><strong>Communication and Collaboration.</strong> UXEs are required to do a lot of cross-functional communication. They can speak with users, designers, developers, product owners, and stakeholders. They are held responsible for translations between design and engineering teams. There is a likelihood of contributing to documentation which uses written communication skills. This could include documenting style guides, components, or guides for users.</p>
<p><strong>Creativity.</strong> It may seem obvious that this would be a great skill to have based on the design factor of the role. UXE's have the opportunity to find creative solutions especially when design and development need to meet in the middle.</p>
<p><strong>User Experience Principles and Theories.</strong> Understanding the psychological aspect of UX will come in handy when making design decisions. Learning psychological heuristics is essential. The <a target="_blank" href="https://lawsofux.com/">Laws of UX</a> site is a great overview of these.</p>
<h2 id="heading-summary">Summary</h2>
<p>As design and engineering processes mature, there is a need for roles like UX Engineer, UX Researcher, UI/UX Designer, UI Engineer, and more, each with their own set of advanced skills. </p>
<p>By collaborating, these roles are able to come together to create top-notch experiences for users. The need for many of these roles has been increasing in recent years, especially with the recognization of the importance of design systems within organizations.</p>
<p>UX Engineers fill a void that can be beneficial to the handoff between design and development. We will continue to see an increasing amount of UX Engineering roles surface as the significance of this role becomes further recognized. </p>
<p>I love the blend of skills that I am able to use daily as a UXE. If you are a creative individual who wants to work closer with design teams this may be the perfect role for you too. </p>
<p>If you would like to learn more about working as a UX Engineer, feel free to reach out on <a target="_blank" href="https://twitter.com/ui_natalie">Twitter</a>. </p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Create a New Stacking Context with the Isolation Property in CSS ]]>
                </title>
                <description>
                    <![CDATA[ What is the CSS Isolation Property? In CSS, you can use the isolation property to create a new stacking context. Here's what that looks like: .container-for-new-stacking-context {   isolation: isolate; } The default value for isolation is auto, whic... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/the-css-isolation-property/</link>
                <guid isPermaLink="false">66bc4cb970137bd197ce323a</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Natalie Pina ]]>
                </dc:creator>
                <pubDate>Fri, 11 Mar 2022 20:03:45 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/02/stacked.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <h2 id="heading-what-is-the-css-isolation-property">What is the CSS Isolation Property?</h2>
<p>In CSS, you can use the <code>isolation</code> property to create a new stacking context. Here's what that looks like:</p>
<pre><code class="lang-css"><span class="hljs-selector-class">.container-for-new-stacking-context</span> {
  <span class="hljs-attribute">isolation</span>: isolate;
}
</code></pre>
<p>The default value for <code>isolation</code> is <code>auto</code>, which is a bit more nuanced as a stacking context <em>can</em> be created – but it depends on the properties of the element and if they require it. </p>
<p>You can also set the value to <code>inherit</code>,  <code>initial</code>, <code>revert</code>, or <code>unset</code>. </p>
<p>Using <code>isolation: isolate;</code> is a definitive way to create a new stacking context. </p>
<h2 id="heading-what-is-the-stacking-context">What is the Stacking Context?</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/01/doll-g9145bb1e2_1280.jpg" alt="Image" width="600" height="400" loading="lazy"></p>
<p>In CSS, the stacking context quite literally allows for HTML elements to be stacked with their starting position based upon a base element that provides context.</p>
<p>Elements are placed along an imaginary matrix with a x-axis and y-axis. There is also a z-axis, in which element can be placed in front of or behind each other. The <code>z-index</code> property is commonly used to place elements along the z-axis. </p>
<p>Keep in mind that when the root HTML element is rendered, it comes along with a root/global stacking context.</p>
<p>There are many ways to create stacking contexts within the global stacking context. One common way is to use <code>position: relative</code> with <code>z-index</code>. </p>
<p>Using <code>position: sticky</code> or <code>fixed</code> works, but will take elements outside of the flow layout and require additional properties for desired placement. </p>
<p>You can also use <code>transform</code>, <code>clip-path</code>, or <code>filter</code> to facilitate stacking. To see all the ways the stacking context can be formed, read more on <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context">MDN Web Docs</a>.</p>
<p>Stacking contexts can contain subsequent inner stacking contexts, and continue on to nest further. That may be a bit too <em>Inception</em>-like to conceptualize, so let's get down to why this is useful.</p>
<h2 id="heading-the-z-index-black-hole">The Z-Index Black Hole</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/01/wormhole-g9c2a60580_1280.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Using <code>z-index</code> can be hard to maintain. You have to be really cautious about where you are using it and what values you are supplying to it. </p>
<p>Design systems can help to solve issues related to this. Creating a set of reusable values and documenting in what cases they should be used can be really helpful. For example, setting aside your highest variable values for modals and other items that will always take over the entire page. </p>
<p>But most of the time we're really just trying to have our style appear the way we want it to. Which can mean prescribing arbitrary <code>z-index</code> values and continuing to bump up those values until they work. </p>
<p>I've encountered the infamous <code>z-index: 999999;</code> many times. Tracking down these random values and creating new order can become arduous. This can lead to issues that are hard to debug. </p>
<p>The higher numbers you begin to use, the deeper and deeper you can go into the black hole and the harder it is to get back out of it later on.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/01/zindex.svg" alt="Image" width="600" height="400" loading="lazy"></p>
<h3 id="heading-keep-it-simple-with-isolation-instead">Keep It Simple with Isolation Instead</h3>
<p>Setting the isolation property to isolate is a simple one-liner that can create a new stacking context without reaching for <code>z-index</code> to place elements in front of each other.</p>
<p>You can use isolation on statically-position elements and it will not affect children elements. It's a great way to create an isolated base for containing children elements within. The isolation property is also widely <a target="_blank" href="https://caniuse.com/?search=isolation">supported</a>. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/01/isolation-3.svg" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Just as a reminder, here's the syntax for that:</p>
<pre><code class="lang-css"><span class="hljs-selector-class">.container-for-new-stacking-context</span> {
  <span class="hljs-attribute">isolation</span>: isolate;
}
</code></pre>
<h2 id="heading-to-sum-up">To Sum Up:</h2>
<p>Setting  <code>isolation: isolate;</code> will create a new stacking context for children elements when applied to a top-level element. </p>
<p>If you found this article helpful, feel free to reach out on Twitter <a target="_blank" href="https://twitter.com/ui_natalie">@ui_natalie</a>. Happy stacking! </p>
<h3 id="heading-resources">Resources</h3>
<ul>
<li><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/CSS/isolation">MDN Web Docs - Isolation</a></li>
<li><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context">MDN Web Docs - The Stacking Context</a></li>
<li><a target="_blank" href="https://www.joshwcomeau.com/css/stacking-contexts/">What The Heck, z-index??</a></li>
</ul>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Use Optional Chaining in JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ Optional chaining is a safe and concise way to perform access checks for nested object properties. The optional chaining operator ?. takes the reference to its left and checks if it is undefined or null. If the reference is either of these nullish va... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/javascript-optional-chaining/</link>
                <guid isPermaLink="false">66bc4cb73fc58765eaa843bf</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Natalie Pina ]]>
                </dc:creator>
                <pubDate>Mon, 07 Feb 2022 17:13:35 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/01/pexels-pixabay-220237.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Optional chaining is a safe and concise way to perform access checks for nested object properties.</p>
<p>The optional chaining operator <code>?.</code> takes the reference to its left and checks if it is undefined or null. If the reference is either of these nullish values, the checks will stop and return undefined. Otherwise, the chain of access checks will continue down the happy path to the final value. </p>
<pre><code><span class="hljs-comment">// An empty person object with missing optional location information</span>
<span class="hljs-keyword">const</span> person = {}

<span class="hljs-comment">// The following will equate to undefined instead of an error</span>
<span class="hljs-keyword">const</span> currentAddress = person.location?.address
</code></pre><p>Optional chaining was introduced in ES2020. According to <a target="_blank" href="https://github.com/tc39/proposal-optional-chaining">TC39</a> it is currently at stage 4 of the proposal process and is prepared for inclusion in the final ECMAScript standard. This means that you can use it, but note that older browsers may still require polyfill usage.</p>
<p>Optional chaining is a useful feature that can help you write cleaner code. Now let's learn how we can use it.</p>
<h2 id="heading-optional-chaining-syntax">Optional Chaining Syntax</h2>
<p>In this article, I will mostly be covering how to access object properties. But you can also use optional chaining as a check on functions. </p>
<p>Here are all of the use cases for optional chaining:</p>
<pre><code>obj?.prop       <span class="hljs-comment">// optional static property access</span>
obj?.[expr]     <span class="hljs-comment">// optional dynamic property access</span>
func?.(...args) <span class="hljs-comment">// optional function or method call</span>
</code></pre><p>Source: <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining">MDN Web Docs</a> </p>
<h3 id="heading-example">Example:</h3>
<pre><code><span class="hljs-keyword">const</span> value = obj?.propOne?.propTwo?.propThree?.lastProp;
</code></pre><p>In the code snippet above, we are checking if <code>obj</code> is null or undefined, then <code>propOne</code>, then <code>propTwo</code>, and so on. Optional chaining lives up to its name. In the chain of object property access we can check that each value is not undefined or null.</p>
<p>This check can be extremely useful when accessing deeply nested object values. It has been a highly anticipated feature and it keeps you from having to do numerous null checks. It also means you don't need to use temporary variables to store checked values, for example:</p>
<pre><code><span class="hljs-keyword">const</span> neighborhood = city.nashville &amp;&amp; city.nashvile.eastnashville;
</code></pre><p>Here we can check that <code>nashville</code> is a property within <code>city</code> before attempting to access the inner neighborhood property of <code>eastnashville</code>. We can convert the above to use optional chaining, like so:</p>
<pre><code><span class="hljs-keyword">const</span> neighborhood = city?.nashville?.eastnashville;
</code></pre><p>Optional chaining simplifies this expression.</p>
<h2 id="heading-error-handling-with-optional-chaining">Error Handling with Optional Chaining</h2>
<p>Optional chaining is particularly useful when working with API data. If you're not sure whether an optional property exists, you can reach for optional chaining.</p>
<h3 id="heading-a-word-of-caution">A Word of Caution</h3>
<p>Don't use optional chaining at every opportunity. This could result in silencing errors by having undefined potentially returned in many places.</p>
<p>It's also important to remember that the check will stop and "short-circuit" the moment it encounters a nullish value. Consider this for the subsequent properties in the chain and what will occur if they are not able to be reached. </p>
<p>It's best to use this check when you know that something may not have a value, such as an optional property. If a required value has a nullish check on, it may be silenced with undefined returned instead of returning an error to alert of this issue.</p>
<h2 id="heading-optional-chaining-nullish-coalescing">Optional Chaining + Nullish Coalescing</h2>
<p>Optional chaining pairs well with nullish coalescing <code>??</code> to provide fallback values. </p>
<pre><code><span class="hljs-keyword">const</span> data = obj?.prop ?? <span class="hljs-string">"fallback string"</span>;
</code></pre><pre><code><span class="hljs-keyword">const</span> data = obj?.prop?.func() ?? fallbackFunc();
</code></pre><p>If the item to the left of <code>??</code> is nullish, the item to the right will be returned.</p>
<p>We know that if any <code>?.</code> check equates to a nullish value within the chain, it will return <code>undefined</code>. So we can use our nullish coalescing to respond to the undefined outcome and set an explicit fallback value.</p>
<pre><code><span class="hljs-keyword">const</span> meal = menu.breakfast?.waffles ?? <span class="hljs-string">"No Waffles Found."</span>
</code></pre><h3 id="heading-wrapping-up">Wrapping Up</h3>
<p>Optional chaining is a handy recent feature of JavaScript that lets you check for nullish values while accessing property values. You can also use it with the <code>?.</code> operator. </p>
<p>I hope this article has helped to introduce or clarify optional chaining. Happy coding! </p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What is Margin Collapse in CSS? And How to Avoid It ]]>
                </title>
                <description>
                    <![CDATA[ What is Margin Collapse? Margin collapse occurs when vertically adjacent margins of block-level elements collide to share a general margin space. The size of this shared space is dictated by the larger number margin.  You can visualize this as an arm... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/what-is-margin-collapse-and-how-to-avoid-it/</link>
                <guid isPermaLink="false">66bc4cc173c9920bb20c0e03</guid>
                
                    <category>
                        <![CDATA[ CSS Margins ]]>
                    </category>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Natalie Pina ]]>
                </dc:creator>
                <pubDate>Tue, 11 Jan 2022 18:07:52 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/01/domino-g6f10860f9_1280.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <h2 id="heading-what-is-margin-collapse">What is Margin Collapse?</h2>
<p>Margin collapse occurs when vertically adjacent margins of block-level elements collide to share a general margin space. The size of this shared space is dictated by the larger number margin. </p>
<p>You can visualize this as an arm wrestling match, where the larger margin will take over and win.</p>
<p>It is important to clarify what it means to be the larger number. </p>
<p>If a margin of 70px collides with a margin of 90px, the 90px margin will win. If a margin of -70px collides with a margin of -90px, -90px will win. </p>
<p>Although a negative number is technically a smaller value on a mathematical scale than a positive number, with margin collapse instead it is helpful to remember that a higher numerical value will hold the higher significance. </p>
<p>Collapsing is relevant regardless of the unit of measurement such as pixels, rem, em, or percentages. These units can be calculated against each other even with mixed use.</p>
<p>In various scenarios this interaction can become problematic. For example, if you are creating a reusable component that is expected to have a set consistent margin space surrounding it, regardless of placement. </p>
<p>Inconsistencies may occur depending on, where that component is placed as the margin may interact with another. Fortunately, there are precautions we can take to avoid this.</p>
<p>Margin collapse can cause unexpected behaviors in your layout. You'll likely see applied spacing that doesn't seem to match up with what you expect. </p>
<p>Instead of trying to increase margins by adding extra pixels until the spacing is correct, you can learn the inner workings of the margin property so you can recognize when collapsing can occur. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/01/margin-collapse-2.png" alt="Image" width="600" height="400" loading="lazy"></p>
<h3 id="heading-margin-collapse-code-example">Margin Collapse Code Example</h3>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"one"</span>&gt;</span>Block-Level Element One<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"two"</span>&gt;</span>Block-level Element Two<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<pre><code class="lang-css"><span class="hljs-selector-tag">div</span><span class="hljs-selector-class">.one</span> {
    <span class="hljs-attribute">margin-bottom</span>: <span class="hljs-number">30px</span>;
}

<span class="hljs-selector-tag">div</span><span class="hljs-selector-class">.two</span> {
    <span class="hljs-attribute">margin-top</span>: <span class="hljs-number">100px</span>;
}
</code></pre>
<h2 id="heading-negative-margins">Negative Margins</h2>
<p>Negative margin values are also susceptible to margin collapse. They work as positive margins do, where the greater number will take over.   </p>
<p>The result of a -30px margin and a -100px collision will result in a margin space of -100px.</p>
<h3 id="heading-mixing-negative-and-positive-margins">Mixing Negative and Positive margins</h3>
<p>When a negative and a positive margin interact, the pixels will be added together, cancelling each other out. Here is where some math will factor in. </p>
<p>For example, a margin of -30px and a margin of 10px will result in a shared margin space of -20px. Alternatively, a margin of 10px and a margin of -1opx will result in no margin spacing (-10 + 10 = 0)! </p>
<h2 id="heading-how-to-recognize-margin-collapse">How to Recognize Margin Collapse</h2>
<p>There are different scenarios when margins can collapse. Review the comparisons below to gain a better grasp on when margin collapse can happen.</p>
<h3 id="heading-margin-collapse">Margin Collapse</h3>
<ul>
<li>Elements are block-level, such as <code>div</code> or <code>p</code></li>
<li>Vertical margins will collapse</li>
<li>Collapse will only occur in Flow Layout, which is the default layout mode</li>
<li>An "invisible" element like a  <code>&lt;br/&gt;</code> will not stop margin collapse</li>
</ul>
<h3 id="heading-no-margin-collapse">No Margin Collapse</h3>
<ul>
<li>Horizontal sibling elements will not collapse</li>
<li>No margin collapse in Flex, Grid, or Positioned Layout </li>
<li>Margin collapse can stack and create a domino effect of siblings effecting each other</li>
<li>A <code>&lt;hr/&gt;</code> element between vertical siblings can prevent collapsing</li>
</ul>
<h3 id="heading-how-to-inspect-your-margins">How to Inspect your Margins</h3>
<p>The Inspect feature in your browser is a great tool to get a visual on your margins, padding, and other aspects of the Box Model. This will help you to see if margins are shared.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/01/boxmodel.png" alt="Image" width="600" height="400" loading="lazy">
<em>The Box Model</em></p>
<h2 id="heading-how-to-avoid-margin-collapse">How to Avoid Margin Collapse</h2>
<p>First, remember that margins should preferably be used to increase the distance between sibling elements, not to create spacing between a child and a parent. If you need to increase space within the Flow layout, reach first for padding if possible.</p>
<p>Also, consider the layout mode when adding a margin. Take note of which layout mode you are in and watch out for margin collapse whenever in normal Flow Layout. </p>
<p>To add spacing between siblings and avoid margin collapse altogether, consider using Flexbox or Grid and utilizing their gap functionalities.</p>
<p>You can also consider using a component library aligned with the spacing guidelines of a particular design system. Or you can use an open-source library that has already resolved margin collapse issues. You can also setup a system of design for you team where you can use consistent margin and padding throughout your UI. </p>
<p>Finally, try to develop a sense for when margin collapse is occurring. Now that you are more aware of this behavior, you will start to notice it more frequently. </p>
<p>Use your trusty browser inspector tools when your margin collapse radar is activated. If you find it, remove it to prevent repeated use of the style as it may be reused and cause issues in the future.</p>
<h3 id="heading-resources-on-margin-collapse">Resources on Margin Collapse</h3>
<p>If you'd like to do a deeper dive on margin collapse, I highly suggest reading <a target="_blank" href="https://www.joshwcomeau.com/css/rules-of-margin-collapse/">The Rules of Margin Collapse</a> by Josh W. Comeau. </p>
<p>I also recommend his comprehensive course <a target="_blank" href="https://css-for-js.dev/">CSS for JavaScript Developers</a> if you'd like to fill in any gaps in your CSS knowledge and learn more about topics such as this.</p>
<h2 id="heading-summary">Summary</h2>
<p>Margin collapse may be a CSS behavior that you have previously experienced and didn't yet had a definition for, or you might not have had all the tools available to avoid it. </p>
<p>This tricky aspect of the margin property can often go overlooked and wreak havoc through expected behaviors. Understanding these effects can help to improve your UI and reduce the number of bugs in your CSS.</p>
<p>Happy coding!</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Write Better Git Commit Messages – A Step-By-Step Guide ]]>
                </title>
                <description>
                    <![CDATA[ When first introduced to Git, it's typical for developers to feel uncomfortable with the process.  You might feel uncertainty when encountering the Git commit message, unsure how to properly summarize the changes you've made and why you've made them.... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-write-better-git-commit-messages/</link>
                <guid isPermaLink="false">66bc4cb17fa38392bfab812e</guid>
                
                    <category>
                        <![CDATA[ Collaboration ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Git ]]>
                    </category>
                
                    <category>
                        <![CDATA[ teamwork ]]>
                    </category>
                
                    <category>
                        <![CDATA[ version control ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Natalie Pina ]]>
                </dc:creator>
                <pubDate>Tue, 04 Jan 2022 22:34:45 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/01/gitcommitmessage.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>When first introduced to Git, it's typical for developers to feel uncomfortable with the process. </p>
<p>You might feel uncertainty when encountering the Git commit message, unsure how to properly summarize the changes you've made and why you've made them. But the earlier in your career you can develop good committing habits, the better.</p>
<p>Have you ever wondered how you can improve your Git commit messages? This guide outlines steps to elevate your commit messages that you can start implementing today.</p>
<p>This article assumes you already understand basic Git workflow. If not, I suggest reading through the <a target="_blank" href="https://guides.github.com/introduction/git-handbook/">Git Handbook</a>.</p>
<p>It is also important to note that you should follow your team's conventions first and foremost. These tips are based on suggestions based upon research and general consensus from the community. But by the end of this article you may have some implementations to suggest that may help your team's workflow.</p>
<blockquote>
<p>I think git enters a whole other realm the moment you start working in teams -- there are so many cool different flows and ways that people can commit code, share code, and add code to your repo open-source or closed-source-wise. — <a target="_blank" href="https://syntax.fm/">Scott Tolinski, Syntax.fm</a>.</p>
</blockquote>
<h2 id="heading-why-should-you-write-better-commit-messages">Why should you write better commit messages?</h2>
<p>I challenge you to open up a personal project or any repository for that matter and run <code>git log</code> to view a list of old commit messages. The vast majority of us who have run through tutorials or made quick fixes will say "Yep... I have absolutely no idea what I meant by 'Fix style' 6 months ago." </p>
<p>Perhaps you have encountered code in a professional environment where you had no idea what it was doing or meant for. You've been left in the dark without code comments or a traceable history, and even wondering "what are the odds this will break everything if I remove this line?"</p>
<h3 id="heading-back-to-the-future">Back to the Future</h3>
<p>By writing good commits, you are simply future-proofing yourself. You could save yourself and/or coworkers hours of digging around while troubleshooting by providing that helpful description. </p>
<p>The extra time it takes to write a thoughtful commit message as a letter to your potential future self is extremely worthwhile. On large scale projects, documentation is imperative for maintenance. </p>
<p>Collaboration and communication are of utmost importance within engineering teams. The Git commit message is a prime example of this. I highly suggest setting up a convention for commit messages on your team if you do not already have one in place.</p>
<h2 id="heading-the-anatomy-of-a-commit-message">The Anatomy of a Commit Message</h2>
<h4 id="heading-basic">Basic:</h4>
<p><code>git commit -m &lt;message&gt;</code></p>
<h4 id="heading-detailed">Detailed:</h4>
<p><code>git commit -m &lt;title&gt; -m &lt;description&gt;</code></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/01/Screen-Shot-2022-01-03-at-10.31.49-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<h2 id="heading-5-steps-to-write-better-commit-messages">5 Steps to Write Better Commit Messages</h2>
<p> Let's summarize the suggested guidelines:</p>
<ol>
<li>Capitalization and Punctuation: Capitalize the first word and do not end in punctuation. If using Conventional Commits, remember to use all lowercase. </li>
<li>Mood: Use imperative mood in the subject line. Example – <code>Add fix for dark mode toggle state</code>. Imperative mood gives the tone you are giving an order or request.</li>
<li>Type of Commit: Specify the type of commit. It is recommended and can be even more beneficial to have a consistent set of words to describe your changes. Example: Bugfix, Update, Refactor, Bump, and so on. See the section on Conventional Commits below for additional information. </li>
<li>Length: The first line should ideally be no longer than 50 characters, and the body should be restricted to 72 characters.</li>
<li>Content: Be direct, try to eliminate filler words and phrases in these sentences (examples: though, maybe, I think, kind of). Think like a journalist. </li>
</ol>
<h3 id="heading-how-to-find-your-inner-journalist">How to Find Your Inner Journalist</h3>
<p>I never quite thought my Journalism minor would benefit my future career as a Software Engineer, but here we are!   </p>
<p>Journalists and writers ask themselves questions to ensure their article is detailed, straightforward, and answers all of the reader's questions. </p>
<p>When writing an article they look to answer <em>who</em>, <em>what</em>, <em>where</em>, <em>when</em>, <em>why</em> and <em>how.</em>  For committing purposes, it is most important to answer the what and why for our commit messages. </p>
<p>To come up with thoughtful commits, consider the following: </p>
<ul>
<li>Why have I made these changes?</li>
<li>What effect have my changes made?</li>
<li>Why was the change needed?</li>
<li>What are the changes in reference to?</li>
</ul>
<p>Assume the reader does not understand what the commit is addressing. They may not have access to the story addressing the detailed background of the change.</p>
<p>Don't expect the code to be self-explanatory. This is similar to the point above. </p>
<p>It might seem obvious to you, the programmer, if you're updating something like CSS styles since it is visual. You may have intimate knowledge on why these changes were needed at the time, but it's unlikely you will recall why you did that hundreds of pull requests later. </p>
<p>Make it clear <em>why</em> that change was made, and note if it may be crucial for the functionality or not.  </p>
<p>See the differences below:</p>
<ol>
<li><code>git commit -m 'Add margin'</code></li>
<li><code>git commit -m 'Add margin to nav items to prevent them from overlapping the logo'</code></li>
</ol>
<p>It is clear which of these would be more useful to future readers.   </p>
<p>Pretend you're writing an important newsworthy article. Give the headline that will sum up what happened and what is important. Then, provide further details in the body in an organized fashion.   </p>
<p>In filmmaking, it is often quoted "show, don't tell" using visuals as the communication medium compared to a verbal explanation of what is happening.</p>
<p>In our case, "<strong>tell</strong>, don't [just] show" – though we have some visuals at our disposal such as the browser, most of the specifics come from reading the physical code.  </p>
<p>If you're a VSCode user, download the <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=waderyan.gitblame">Git Blame</a> extension. This is a prime example of when useful commit messages are helpful to future developers. </p>
<p>This plugin will list the person who made the change, the date of the changes, as well as the commit message commented inline. </p>
<p>Imagine how useful this could be in troubleshooting a bug or back-tracing changes made. Other honorable mentions to see Git historical information are <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=donjayamanne.githistory">Git History</a> and <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens">GitLens</a>. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/01/Screen-Shot-2022-01-03-at-10.45.49-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<h2 id="heading-conventional-commits">Conventional Commits</h2>
<p>Now that we've covered basic commit structure of a good commit message, I'd like to introduce Conventional Commits to help provide some detail on creating solid commit messages.   </p>
<p>At D2iQ, we use Conventional Commit which is a great practice among engineering teams. Conventional Commit is a formatting convention that provides a set of rules to formulate a consistent commit message structure like so:</p>
<pre><code>&lt;type&gt;[optional scope]: <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">description</span>&gt;</span>

[optional body]

[optional footer(s)]</span>
</code></pre><p>The commit type can include the following:</p>
<ul>
<li><code>feat</code> – a new feature is introduced with the changes</li>
<li><code>fix</code> – a bug fix has occurred</li>
<li><code>chore</code> – changes that do not relate to a fix or feature and don't modify src or test files (for example updating dependencies)</li>
<li><code>refactor</code> – refactored code that neither fixes a bug nor adds a feature </li>
<li><code>docs</code> – updates to documentation such as a the README or other markdown files</li>
<li><code>style</code> – changes that do not affect the meaning of the code, likely related to code formatting such as white-space, missing semi-colons, and so on.</li>
<li><code>test</code> – including new or correcting previous tests </li>
<li><code>perf</code> – performance improvements</li>
<li><code>ci</code> – continuous integration related</li>
<li><code>build</code> – changes that affect the build system or external dependencies </li>
<li><code>revert</code> – reverts a previous commit </li>
</ul>
<p>The commit type subject line should be all lowercase with a character limit to encourage succinct descriptions. </p>
<p>The optional commit body should be used to provide further detail that cannot fit within the character limitations of the subject line description. </p>
<p>It is also a good location to utilize <code>BREAKING CHANGE: &lt;description&gt;</code> to note the reason for a breaking change within the commit. </p>
<p>The footer is also optional. We use the footer to link the JIRA story that would be closed with these changes for example: <code>Closes D2IQ-&lt;JIRA #&gt;</code> .</p>
<h4 id="heading-full-conventional-commit-example">Full Conventional Commit Example</h4>
<pre><code>fix: fix foo to enable bar

This fixes the broken behavior <span class="hljs-keyword">of</span> the component by doing xyz. 

BREAKING CHANGE
Before <span class="hljs-built_in">this</span> fix foo wasn<span class="hljs-string">'t enabled at all, behavior changes from &lt;old&gt; to &lt;new&gt;

Closes D2IQ-12345</span>
</code></pre><p>To ensure that these committing conventions remain consistent across developers, commit message linting can be configured before changes are able to be pushed up. <a target="_blank" href="https://commitizen-tools.github.io/commitizen/">Commitizen</a> is a great tool to enforce standards, sync up semantic versioning, along with other helpful features.</p>
<p>To aid in adoption of these conventions, it's helpful to include guidelines for commits in a contributing or README markdown file within your projects.</p>
<p>Conventional Commit works particularly well with semantic versioning (learn more at <a target="_blank" href="https://semver.org/">SemVer.org</a>) where commit types can update the appropriate version to release.  You can also <a target="_blank" href="https://www.conventionalcommits.org/en/v1.0.0/">read more about Conventional Commits here</a>.</p>
<h2 id="heading-commit-message-comparisons">Commit Message Comparisons</h2>
<p>Review the following messages and see how many of the suggested guidelines they check off in each category.</p>
<h4 id="heading-good">Good</h4>
<ul>
<li><code>feat: improve performance with lazy load implementation for images</code></li>
<li><code>chore: update npm dependency to latest version</code></li>
<li><code>Fix bug preventing users from submitting the subscribe form</code></li>
<li><code>Update incorrect client phone number within footer body per client request</code></li>
</ul>
<h4 id="heading-bad">Bad</h4>
<ul>
<li><code>fixed bug on landing page</code></li>
<li><code>Changed style</code></li>
<li><code>oops</code></li>
<li><code>I think I fixed it this time?</code></li>
<li>empty commit messages</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Writing good commit messages is an extremely beneficial skill to develop, and it helps you communicate and collaborate with your team. Commits serve as an archive of changes. They can become an ancient manuscript to help us decipher the past, and make reasoned decisions in the future.</p>
<p>There is an existing set of agreed-upon standards we can follow, but as long as your team agrees upon a convention that is descriptive with future readers in mind, there will undoubtedly be long-term benefits.</p>
<p>In this article, we've learned some tactics to level up our commit messages. How do you think these techniques can improve your commits?</p>
<p>I hope you've learned something new, thanks for reading! </p>
<p>Connect with me on Twitter <a target="_blank" href="https://twitter.com/ui_natalie">@ui_natalie</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How Empathy Can Make You a Better Software Engineer ]]>
                </title>
                <description>
                    <![CDATA[ Empathy is a tool every Software Engineer needs in their soft skill set. Many of us unconsciously display empathy. But if we actively chose to use it, it has the potential to become a superpower.  This article will provide you a deeper understanding ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-empathy-makes-you-a-better-software-engineer/</link>
                <guid isPermaLink="false">66bc4ca83fc58765eaa843bb</guid>
                
                    <category>
                        <![CDATA[ empathy ]]>
                    </category>
                
                    <category>
                        <![CDATA[ self-improvement  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ soft skill ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Software Engineering ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Natalie Pina ]]>
                </dc:creator>
                <pubDate>Thu, 18 Feb 2021 18:36:33 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2021/02/josh-calabrese-qmnpqDwla_E-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Empathy is a tool every Software Engineer needs in their soft skill set. Many of us unconsciously display empathy. But if we actively chose to use it, it has the potential to become a superpower. </p>
<p>This article will provide you a deeper understanding of what empathy is and how to better integrate it into software development.</p>
<h2 id="heading-what-is-a-soft-skill">What is a soft skill?</h2>
<p>Soft skills are non-technical abilities such as communication, logical thinking, problem solving, teamwork, and empathy. These emotional intelligence skills are valuable as a Software Engineer.</p>
<p>It is very hard to learn and unlearn skills such as these. You cannot necessarily read a book or watch a tutorial and immediately have improved communication skills. Some of these skills are innate. They are built over the years and take time and practice to develop.  </p>
<p>Soft skills can play an important role within the hiring process. The good news is that you can work to further develop these skills. </p>
<h2 id="heading-what-is-empathy-and-why-is-it-so-important">What is empathy and why is it so important?</h2>
<blockquote>
<p>“Empathy is seeing with the eyes of another, listening with the ears of another and feeling with the heart of another.” – Alfred Adler</p>
</blockquote>
<p>Empathy is a deeply human emotion. In the sci-fi novel, <em>Do Androids Dream of Electric Sheep?</em> empathy is the main detectable trait between androids and humans.</p>
<p>Empathy lies at the heart of emotional intelligence. It has the ability facilitate our awareness of our personal emotions, handling interpersonal relationships and creating stronger bonds (<a target="_blank" href="https://www.headspace.com/articles/how-to-be-more-empathetic">Source</a>).</p>
<h3 id="heading-empathy-vs-sympathy">Empathy vs. Sympathy</h3>
<p>It is vital to distinguish between sympathy and empathy. Sympathy can arise in the form of feeling bad for someone else's situation – “Sorry for your loss.” Empathy is sincerely visualizing yourself in the shoes of the person who has lost something.</p>
<blockquote>
<p>"Empathy is a choice and it's a vulnerable choice. Because in order to connect with you, I have to connect with something in myself that knows that feeling." – Dr. Brené Brown</p>
</blockquote>
<p>One of my first gigs out of university was in a Customer Service role for a health insurance provider. We were required to go through a training program before speaking with members over the phone.</p>
<p>I distinctly remember the emphasis they put on understanding empathy and how it is not the same as sympathy. They pulled up YouTube and put on an animated short with audio from a talk by Brené Brown.</p>
<p>This video has stuck with me and helps me remember the importance of empathy.</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/1Evwgu369Jw" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<p>In the video, Dr. Brown mentions the four qualities of empathy outlined by nursing scholar Teresa Wiseman:</p>
<ol>
<li>Perspective taking, the ability to see the world as others do</li>
<li>Staying out of judgement in these perspectives</li>
<li>Recognizing the emotions in others and relating</li>
<li>Communicating with that emotional understanding </li>
</ol>
<h2 id="heading-how-to-apply-empathy-as-a-software-engineer">How to apply empathy as a Software Engineer</h2>
<h3 id="heading-empathy-for-users">Empathy for Users</h3>
<p>Having empathy for users can take many forms. Empathy can come in to play when thinking about what your users' needs and wants are. Jumping into their perspective can give you an entirely new outlook. </p>
<p>Accessibility requirements are essential and require a good amount of empathy in a similar fashion. Any type of user should be able to use your application. </p>
<p>Envision yourself navigating and operating a website only able to use limited keys such as tab, spacebar, and enter. Users with visual impairments that are unable to use the keyboard and mouse can use <a target="_blank" href="https://www.afb.org/blindness-and-low-vision/using-technology/assistive-technology-products/screen-readers">screen readers</a> to audibly navigate through web pages. Test out your site with a screen reader to shine a new light on this perspective.</p>
<p>The best way to ensure that your application is accessibility-friendly is to be compliant with the standards set by <a target="_blank" href="https://www.w3.org/WAI/standards-guidelines/wcag/">Web Content Accessibility Guidelines</a> (WCAG) along with <a target="_blank" href="https://www.section508.gov/manage/laws-and-policies">Section 508</a>. Study the <a target="_blank" href="https://www.w3.org/WAI/standards-guidelines/wcag/">guidelines</a>, become familiar with the requirements, and implement them into your code.</p>
<p>Now imagine seeing the world as a color deficiency individual. You may be unable to decipher an error messages from a success message if you are red/green color deficient. This falls under <a target="_blank" href="https://www.w3.org/WAI/WCAG21/Understanding/error-suggestion.html">Level AA 3.3.3 - Error Suggestions</a>, and there are a wide array of situations to consider under this criterion alone.  </p>
<p>To rate the accessibility (also known as a11y) levels of your website or app, run it through an audit by <a target="_blank" href="https://developers.google.com/web/tools/lighthouse">Lighthouse</a>. The audit utilizes the a11y guidelines for testing and displays a rating out of 100. It provides direct feedback regarding what you can change to improve your score. Additionally, there are scores for "Best Practices", "SEO", and "Performance".</p>
<p>UX/UI Designers are no strangers to using an empathetic skill set. UX Researcher is a role almost entirely based on this idea. Designers remind themselves who they are creating for. </p>
<p>Creating <a target="_blank" href="https://www.interaction-design.org/literature/article/personas-why-and-how-you-should-use-them">Personas</a> is a great way to put yourself in the place of users. Personas are boiled down versions of users, including their behaviors, needs, and learned experiences. Personas are created by collecting data from users and summing up correlated traits. </p>
<p>According to <a target="_blank" href="https://www.interaction-design.org/literature/article/creating-personas-from-user-research-results">Interaction Design Foundation</a>, </p>
<blockquote>
<p>"Collecting insights about the social and cultural backgrounds of the users, their psychological traits, their feelings of frustration, and their goals will help you develop a broad knowledge of the users."</p>
</blockquote>
<p>This all may seem front end-oriented, but empathy can be applicable for back end engineers as well. Envision how you’d like your data to be stored, how secure you would like that information to be. What information would you like saved to save yourself precious time in the future (or what would cost you lots of time, in case of a security breach)? </p>
<p>It all comes back to imagining yourself in the place of others. Actors must be exceptional at empathizing! What better way to serve your users than to imagine yourself as them.</p>
<h3 id="heading-empathy-for-teammates">Empathy for Teammates</h3>
<p>Teamwork and empathy go hand in hand. Strong relationships can be built upon a foundation of listening and understanding, without passing judgement. </p>
<p>Having an understanding of what your teammates are feeling can facilitate supporting each other and grow together as a team. Allow teammates to vent to you with the understanding that you are not necessarily here to fix the situation but that you can listen (without judgement). </p>
<p>Use emotional empathy to absorb and mirror the feelings others are going through. Imagine a teammate being strongly reprimanded for a mistake they made. What emotions would you be feeling if that were you instead? </p>
<p>Having this emotional comprehension will allow you to better communicate with them. It may be the very support they need at that time. Emotional empathy can <a target="_blank" href="https://www.verywellmind.com/cognitive-and-emotional-empathy-4582389#citation-5">move you to lend a helping hand</a>.</p>
<p>Empathy can become your superpower when dealing with difficult interpersonal situations with coworkers. Try to observe different perspectives and why someone may be acting out of anger, fear, or sadness. </p>
<p>Perspective taking (using cognitive empathy) is a wonderful method to navigate contentious situations in the workplace. </p>
<p>Imagine your coworker has been working extremely hard the past few years to get a promotion, only to find out after their review that they received neither a raise nor promotion. You could use cognitive empathy to take the perspective of your coworker to recognize how disappointing that may feel if it were you.</p>
<p>Empathy is speaking to others how you'd like to be spoken to. It requires mindfulness. Think of empathy as a tool the next time you encounter a difficult situation at work, but also in your day-to-day conversations.</p>
<blockquote>
<p>"Between stimulus and response there is a space. In that space is our power to choose our response" – Viktor E. Frankl</p>
</blockquote>
<h3 id="heading-empathy-for-future-engineers">Empathy for Future Engineers</h3>
<p>There are many ways we can display compassion toward future engineers when they have to interact with code we’ve written. </p>
<p>Many engineers have found themselves in legacy projects, entering a brand-new codebase, or even looking back at an old personal project and they feel a sense of logical bewilderment. More so if there was nothing left behind to explain some of the complexities and logical decisions that were made.  </p>
<p>If you could put yourself in the shoes of that future engineer looking at your code, what would you want to see left behind? </p>
<p>The best way to implement this is to write readable code. You can do this by limiting abstractions, avoiding complex logic, and using clear naming conventions. </p>
<p>Do your best to break things down and organize your files. There are plenty of great tips to help you write cleaner code in <em>Clean Code: A Handbook of Agile Software Craftsmanship</em> by Robert C. Martin.   </p>
<p>Documentation is also a kindness to future readers. Whether that is crafting an informative <a target="_blank" href="https://www.makeareadme.com/">README</a> file or writing how-to's. Leaving <em>useful</em> comments in your code and detailed commit messages can also be helpful. Most of us can’t recall changes we committed months ago ourselves. </p>
<p>Leaving behind a trail of textual breadcrumbs can make the life of the next person who stumbles across it that much easier – and that person might even be you!</p>
<h3 id="heading-empathy-for-clients">Empathy for Clients</h3>
<p>Empathy can help you connect with your clients and assist in delivering the best product to them. Communication comes largely into play here, which goes beyond words involving your tone, body language, and delivery.</p>
<p>You can use empathy to fully visualize the brand and comprehend what the client themselves may be facing on their end. It can be a useful tool to convince others of your point of view if you can first understand theirs.</p>
<p>Utilize cognitive and emotional empathy when dealing with difficult situations with clients. Picture why they might be upset to have their product delayed, frustrated users or monetary loss. </p>
<p>Have curiosity when working with clients. Go above and beyond to learn more about the client. If you come from a place of curiosity, it will iterate your interest and a deeper understanding of the product. </p>
<p>Use your best listening skills when speaking with the client. Don't miss the details and your client will feel heard, appreciated and more satisfaction with the product.</p>
<h3 id="heading-empathy-for-leadership">Empathy for Leadership</h3>
<p>Some of the finest leaders are the ones who remember what it was like to work their way up from the bottom or who can foresee themselves in other positions. Empathetic leaders establish strong connections with the individuals under their direction. </p>
<p>The best managers I have had in the past have displayed a concern for what I was feeling and what I may need. </p>
<p>Empathy means understanding impostor syndrome and checking in on the mental wellness of your employees. It's much easier to open up to someone who you feel 'gets it'. When you feel understood and respected, you’re more inclined to work hard and give back a mutual level of respect. </p>
<p>Leaders should have a strong level of emotional intelligence. Who wouldn't want a manager that seems approachable, self-aware, nonjudgemental, and understanding?</p>
<p>Emotional intelligence can be developed with conscious efforts. Being able to describe your own emotions will give you the ability to better resonate with what others are feeling. </p>
<p>Instead of saying "I'm feeling anxiety", go deeper. Anxiety is not quite an emotion, so what does it actually <em>feel</em> like? The heart of the emotion may really feel like sadness, shame, guilt, frustration, or embarrassment. Practice self awareness and labeling the emotions you are feeling. This is not isolated to those in leadership, it goes for everyone. </p>
<p>Cultivating empathy can give you the power to help motivate those around you.</p>
<blockquote>
<p>"Empathy does not require that we have been through the same thing as another person, simply that we meet them where they are now."  – Andy Puddicombe, former Buddhist monk and Headspace co-founder</p>
</blockquote>
<h2 id="heading-summary">Summary</h2>
<p>One of the best skills you can develop as an engineer is empathy. You can work on this skill by trying to establish an unbiased point of view in all communications. </p>
<p>Practice shifting your perspectives and observe the changes in your interactions. Improving this soft skill will be a catalyst for positive change at and outside of work. </p>
<p>I hope this article has provided insights on situations where you can start integrating more empathy into your day-to-day routines.</p>
<h3 id="heading-thank-you-for-reading">Thank you for reading!</h3>
<p>I am a writer passionate about programming, user interface engineering and design. Find me on <a target="_blank" href="https://twitter.com/ui_natalie">Twitter</a> and <a target="_blank" href="https://www.linkedin.com/in/nataliepina/">LinkedIn.</a>  </p>
<p>_Cover Photo by <a target="_blank" href="https://unsplash.com/@joshcala?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Josh Calabrese</a> on <a target="_blank" href="https://unsplash.com/?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>_</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
