<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Heru Hartanto</title>
    <description>The latest articles on Forem by Heru Hartanto (@elukuro).</description>
    <link>https://forem.com/elukuro</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F576101%2F9cb43cea-de95-481c-8fad-24df7ab60014.jpg</url>
      <title>Forem: Heru Hartanto</title>
      <link>https://forem.com/elukuro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/elukuro"/>
    <language>en</language>
    <item>
      <title>Why I think GitHub Copilot is a Must-Have Tool for Developers</title>
      <dc:creator>Heru Hartanto</dc:creator>
      <pubDate>Sat, 04 Jan 2025 23:01:43 +0000</pubDate>
      <link>https://forem.com/elukuro/why-i-think-github-copilot-is-a-must-have-tool-for-developers-248o</link>
      <guid>https://forem.com/elukuro/why-i-think-github-copilot-is-a-must-have-tool-for-developers-248o</guid>
      <description>&lt;p&gt;GitHub Copilot is an AI-powered code completion tool that helps you write better code faster. Here’s how to make the most of it:&lt;/p&gt;

&lt;h3&gt;
  
  
  Context-Aware Suggestions
&lt;/h3&gt;

&lt;p&gt;GitHub Copilot provides suggestions based on the context of your code. It understands the programming language, libraries, and frameworks you are using. For example, if you are writing a function in Python, it will suggest code snippets relevant to Python.&lt;/p&gt;

&lt;h3&gt;
  
  
  Autocomplete
&lt;/h3&gt;

&lt;p&gt;As you type, GitHub Copilot will suggest completions. Accept a suggestion by pressing &lt;code&gt;Tab&lt;/code&gt; or &lt;code&gt;Enter&lt;/code&gt;. Cycle through suggestions using &lt;code&gt;Ctrl&lt;/code&gt; + &lt;code&gt;]&lt;/code&gt; or &lt;code&gt;Ctrl&lt;/code&gt; + &lt;code&gt;[&lt;/code&gt;. this is one of my most favorite feature.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code Refactoring
&lt;/h3&gt;

&lt;p&gt;GitHub Copilot can help you refactor your code by suggesting more efficient or cleaner ways to achieve the same functionality.&lt;/p&gt;

&lt;p&gt;To get the best results from GitHub Copilot, follow these best practices:&lt;/p&gt;

&lt;h3&gt;
  
  
  Write Clear Comments
&lt;/h3&gt;

&lt;p&gt;Clear and descriptive comments help GitHub Copilot understand what you are trying to achieve. This leads to more accurate and relevant suggestions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Review Suggestions
&lt;/h3&gt;

&lt;p&gt;Always review the suggestions to ensure they are optimal and error-free remember while it is a powerful tool it still not perfect.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use as a Learning Tool
&lt;/h3&gt;

&lt;p&gt;Analyze suggestions as a way to learn new coding techniques and best practices.&lt;/p&gt;

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

&lt;p&gt;GitHub Copilot is a powerful tool that can help you write better code faster. Use clear comments, review suggestions, and leverage it as a learning tool.&lt;/p&gt;

</description>
      <category>developers</category>
    </item>
    <item>
      <title>Set Git to Recognize Case Changes</title>
      <dc:creator>Heru Hartanto</dc:creator>
      <pubDate>Sun, 08 Dec 2024 02:22:25 +0000</pubDate>
      <link>https://forem.com/elukuro/set-git-to-recognize-case-changes-3f77</link>
      <guid>https://forem.com/elukuro/set-git-to-recognize-case-changes-3f77</guid>
      <description>&lt;p&gt;By default, Git is case-insensitive, which can cause issues when renaming files by changing only their capitalization, e.g., flag.svg to Flag.svg.&lt;/p&gt;

&lt;p&gt;To fix this, set core.ignorecase to false in your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nb"&gt;global&lt;/span&gt; &lt;span class="nx"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ignorecase&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This global setting ensures Git detects case-sensitive changes in all repositories. To apply it only to a specific repository, run the command without --global.&lt;/p&gt;

</description>
      <category>git</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Enable Communication Between Browser Windows with JavaScript</title>
      <dc:creator>Heru Hartanto</dc:creator>
      <pubDate>Sun, 17 Nov 2024 22:11:26 +0000</pubDate>
      <link>https://forem.com/elukuro/how-to-enable-communication-between-browser-windows-with-javascript-1675</link>
      <guid>https://forem.com/elukuro/how-to-enable-communication-between-browser-windows-with-javascript-1675</guid>
      <description>&lt;p&gt;The postMessage API in JavaScript is a powerful tool for securely enabling cross-origin communication between different windows or iframes. It’s commonly used to exchange data between a parent component and an embedded iframe, allowing for controlled interaction even if the documents originate from different sources.&lt;/p&gt;

&lt;p&gt;Here’s a practical example of using postMessage to send data between an iframe and a parent component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="c1"&gt;// Parent Component&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;iframe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;myIframe&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Send a message to the iframe&lt;/span&gt;
&lt;span class="nx"&gt;iframe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;contentWindow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;postMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello from parent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://iframe-domain.here&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Listen the message&lt;/span&gt;
&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;origin&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://iframe-domain.here&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Message from iframe:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;


&lt;span class="c1"&gt;// Iframe Component&lt;/span&gt;
&lt;span class="c1"&gt;// Send a message to the parent&lt;/span&gt;
&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;postMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello from iframe&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://parent-domain.here&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

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

&lt;/div&gt;



</description>
      <category>javascript</category>
    </item>
    <item>
      <title>How to Temporarily Store Changes in Git</title>
      <dc:creator>Heru Hartanto</dc:creator>
      <pubDate>Sat, 26 Oct 2024 11:26:50 +0000</pubDate>
      <link>https://forem.com/elukuro/how-to-temporarily-store-changes-in-git-397c</link>
      <guid>https://forem.com/elukuro/how-to-temporarily-store-changes-in-git-397c</guid>
      <description>&lt;p&gt;git stash is a Git command used to temporarily save changes in your working directory without committing them.&lt;/p&gt;

&lt;p&gt;This is useful when you want to switch branches or work on something else but don’t want to commit incomplete work.&lt;/p&gt;

&lt;p&gt;Here some key command for git stash &lt;/p&gt;

&lt;h4&gt;
  
  
  git stash save
&lt;/h4&gt;

&lt;p&gt;Saves your changes and resets your working directory to match the latest commit.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;stash&lt;/span&gt; &lt;span class="nx"&gt;save&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;WIP: working on feature&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  git stash list
&lt;/h4&gt;

&lt;p&gt;To show all stash that you have made.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;stash&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt;
&lt;span class="nx"&gt;stash&lt;/span&gt;&lt;span class="p"&gt;@{&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="nx"&gt;WIP&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;working&lt;/span&gt; &lt;span class="nx"&gt;on&lt;/span&gt; &lt;span class="nx"&gt;feature&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  git stash drop
&lt;/h4&gt;

&lt;p&gt;Removes a specific stash entry from the stack. You can drop the latest stash or specify one by index.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;stash&lt;/span&gt; &lt;span class="nx"&gt;drop&lt;/span&gt; &lt;span class="nx"&gt;stash&lt;/span&gt;&lt;span class="p"&gt;@{&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>What is an IIFE (Immediately Invoked Function Expression) and Why Should You Care?</title>
      <dc:creator>Heru Hartanto</dc:creator>
      <pubDate>Sun, 13 Oct 2024 03:39:38 +0000</pubDate>
      <link>https://forem.com/elukuro/what-is-an-iife-immediately-invoked-function-expression-and-why-should-you-care-2cap</link>
      <guid>https://forem.com/elukuro/what-is-an-iife-immediately-invoked-function-expression-and-why-should-you-care-2cap</guid>
      <description>&lt;p&gt;An (IIFE) Immediately Invoked Function Expression is a function that executed as soon as it’s defined.&lt;br&gt;
It’s a common design pattern that helps create a private scope and avoiding polluting the global scope.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Code inside IIFE&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The function declare inside parentheses and trailing () immediately invoke it.&lt;/p&gt;

&lt;p&gt;This can be useful when you need to fetch data immediately after the page loads, here the example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://jsonplaceholder.typicode.com/posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Error fetching data:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Promise.finally(): Your Secret Weapon for Smoother Promise</title>
      <dc:creator>Heru Hartanto</dc:creator>
      <pubDate>Sat, 31 Aug 2024 11:33:23 +0000</pubDate>
      <link>https://forem.com/elukuro/promisefinally-your-secret-weapon-for-smoother-promise-2djk</link>
      <guid>https://forem.com/elukuro/promisefinally-your-secret-weapon-for-smoother-promise-2djk</guid>
      <description>&lt;p&gt;When you have a promise, sometimes you want to ensure that some code always runs, regardless of the outcome of the promise. For example, you may want to hide a loading spinner or close a file connection whether the operation was successful or not. Before finally(), developers had to duplicate code in both the .then() and .catch() blocks. finally() eliminates that redundancy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;fetchData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Data fetched successfully&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Error fetching data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;hideLoadingSpinner&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Runs no matter the result&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>javascript</category>
    </item>
    <item>
      <title>Understanding Scope Chain in JavaScript</title>
      <dc:creator>Heru Hartanto</dc:creator>
      <pubDate>Mon, 05 Aug 2024 21:24:28 +0000</pubDate>
      <link>https://forem.com/elukuro/understanding-scope-chain-in-javascript-2dn3</link>
      <guid>https://forem.com/elukuro/understanding-scope-chain-in-javascript-2dn3</guid>
      <description>&lt;p&gt;In JavaScript, the scope chain is a mechanism that defines how variable resolution works in nested functions. It determines the order in which variables are looked up when a variable is referenced. &lt;/p&gt;

&lt;p&gt;The scope chain works by looking up variables in the local scope first, then moving up to the outer (parent) scope, and finally to the global scope if necessary. This process continues until the variable is found or the global scope is reached.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;globalVar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;global&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;outerFunction&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;outerVar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;outer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;innerFunction&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;innerVar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;inner&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;innerVar&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// Outputs: inner&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;outerVar&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// Outputs: outer&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;globalVar&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Outputs: global&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;innerFunction&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;outerFunction&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explanation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;innerFunction can access innerVar from its own scope, outerVar from outerFunction’s scope, and globalVar from the global scope.&lt;/li&gt;
&lt;li&gt;If a variable is not found in the local scope, JavaScript moves up the scope chain to find it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understanding the scope chain is crucial for avoiding variable name conflicts and managing variable access in your code.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Understanding Tagged Template Literals in JavaScript</title>
      <dc:creator>Heru Hartanto</dc:creator>
      <pubDate>Sun, 04 Aug 2024 10:13:01 +0000</pubDate>
      <link>https://forem.com/elukuro/understanding-tagged-template-literals-in-javascript-4m4p</link>
      <guid>https://forem.com/elukuro/understanding-tagged-template-literals-in-javascript-4m4p</guid>
      <description>&lt;h3&gt;
  
  
  What are Tagged Template Literals?
&lt;/h3&gt;

&lt;p&gt;A tagged template literal involves a template literal prefixed with a function, called a tag. This function can process and manipulate the literal's content. Here's a simple example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;strings&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;strings&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Processed string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;greeting&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tag&lt;/span&gt;&lt;span class="s2"&gt;`Hello, &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;! How are you?`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;greeting&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Use Cases for Tagged Template Literals
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Internationalization (i18n)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tagged template literals can dynamically translate strings based on the user’s locale. Here’s an example using Japanese:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;i18n&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;strings&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;translations&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello, &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;こんにちは、&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;! How are you?&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;！元気ですか？&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;strings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;translations&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;アリス&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;greeting&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;i18n&lt;/span&gt;&lt;span class="s2"&gt;`Hello, &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;! How are you?`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;greeting&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Output: "こんにちは、アリス！元気ですか？"&lt;/span&gt;

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

&lt;/div&gt;



&lt;h4&gt;
  
  
  2. Custom String Formatting
&lt;/h4&gt;

&lt;p&gt;They can also implement custom formatting logic, such as escaping HTML.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;escapeHTML&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;strings&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;escape&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&amp;amp;/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;amp;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&amp;lt;/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;lt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&amp;gt;/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;strings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;escape&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;script&amp;gt;alert("XSS")&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sanitized&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;escapeHTML&lt;/span&gt;&lt;span class="s2"&gt;`User input: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;userInput&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sanitized&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Output: "User input: &amp;amp;lt;script&amp;amp;gt;alert(&amp;amp;quot;XSS&amp;amp;quot;)&amp;amp;lt;/script&amp;amp;gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Tagged template literals provide a versatile tool for dynamic string manipulation in JavaScript. They can simplify tasks like internationalization and custom string formatting, leading to more expressive and maintainable code.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>The Impact of AI on Junior-Level Jobs</title>
      <dc:creator>Heru Hartanto</dc:creator>
      <pubDate>Sat, 13 Jul 2024 11:33:44 +0000</pubDate>
      <link>https://forem.com/elukuro/the-impact-of-ai-on-junior-level-jobs-2ocg</link>
      <guid>https://forem.com/elukuro/the-impact-of-ai-on-junior-level-jobs-2ocg</guid>
      <description>&lt;p&gt;The rapid advancement of artificial intelligence (AI) is transforming industries at an unprecedented rate, bringing both opportunities and challenges. Among the most affected by this technological revolution are junior-level professionals. From copywriting and UX writing to programming and administrative tasks, AI is increasingly capable of performing tasks traditionally carried out by entry-level workers. This shift poses significant questions about the future of work and the steps we need to take to adapt.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Threat to Entry-Level Jobs
&lt;/h4&gt;

&lt;p&gt;AI's capabilities have grown to include a wide array of functions that were once the domain of human workers. For instance, AI-driven tools are now proficient in generating content for blogs, marketing materials, and even technical documents. Applications like OpenAI's GPT-4 can produce coherent, contextually relevant text with minimal human input. This advancement threatens the job security of junior copywriters and UX writers, who typically start their careers performing these exact tasks.&lt;/p&gt;

&lt;p&gt;Similarly, administrative roles such as drafting contracts, taking notes, and creating resumes are also at risk. AI-powered platforms can automate these processes, delivering accurate and efficient results. For example, AI can quickly draft a contract by analyzing templates and previous documents, saving time and reducing the need for a human touch.&lt;/p&gt;

&lt;p&gt;Junior programmers are not immune to this trend either. Code generation tools like GitHub Copilot can assist in writing code, debugging, and even suggesting improvements. These tools, while beneficial for seasoned developers, could make it challenging for newcomers to find entry-level positions, as their tasks become increasingly automated.&lt;/p&gt;

&lt;h4&gt;
  
  
  Navigating the New Landscape
&lt;/h4&gt;

&lt;p&gt;Given these challenges, it's crucial for junior-level professionals and those entering the job market to develop strategies to remain relevant. Here are a few recommendations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Embrace Lifelong Learning&lt;/strong&gt;: The pace of technological change means that continuous learning is more important than ever. Junior professionals should seek to expand their skill sets beyond basic tasks that AI can perform. This could include learning about AI and machine learning themselves, gaining a deeper understanding of advanced programming concepts, or developing skills in areas that require a human touch, such as creative thinking and problem-solving.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Focus on Soft Skills&lt;/strong&gt;: While AI can handle many technical tasks, soft skills such as communication, teamwork, and leadership remain uniquely human. These skills are critical in roles that involve collaboration and strategic decision-making. Junior professionals should focus on honing these abilities, as they are less likely to be replicated by machines.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Specialize&lt;/strong&gt;: Specialization in a niche area can provide a buffer against automation. Whether it's becoming an expert in a specific programming language, mastering a particular type of content creation, or focusing on a unique aspect of UX design, deep expertise in a specialized field can make a professional more valuable and harder to replace.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Leverage AI as a Tool&lt;/strong&gt;: Rather than viewing AI purely as a threat, junior professionals should learn to leverage AI tools to enhance their productivity and creativity. Understanding how to effectively use AI can turn it into a powerful ally, helping to perform tasks more efficiently and freeing up time for more complex and rewarding work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Seek Out Mentorship and Networking&lt;/strong&gt;: Building relationships with experienced professionals can provide guidance and opportunities that might not be readily apparent. Mentors can offer insights into industry trends, advice on skill development, and potentially open doors to new roles that are less susceptible to automation.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Conclusion
&lt;/h4&gt;

&lt;p&gt;The rise of AI undeniably presents challenges for junior-level professionals, but it also offers opportunities for growth and adaptation. By embracing continuous learning, focusing on soft skills, specializing, leveraging AI tools, and seeking mentorship, individuals can navigate this evolving landscape successfully. The key lies in staying adaptable and proactive, ensuring that as AI continues to advance, human professionals remain indispensable contributors to the workforce.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>It's okay to be mediocre</title>
      <dc:creator>Heru Hartanto</dc:creator>
      <pubDate>Mon, 08 Apr 2024 00:14:03 +0000</pubDate>
      <link>https://forem.com/elukuro/its-okay-to-be-mediocre-52mb</link>
      <guid>https://forem.com/elukuro/its-okay-to-be-mediocre-52mb</guid>
      <description>&lt;p&gt;The coding world is vast! It's perfectly normal for developers to have areas of strength and areas for improvement. You might be a whiz with backend but still working on centering div in HTML, you maybe good at react framework but don't know anything about python. relax That's okay!.&lt;/p&gt;

&lt;p&gt;We all have those days where progress feels slow, and mistakes pop up at work. But hey, that's being human! Remember, even the most experienced developers make mistakes. The key is to learn from them, dust yourself off, and keep building your skills.&lt;/p&gt;

&lt;p&gt;There's no single "perfect developer."😎 Some excel at full-stack development, while others master in specific tools or areas. The beauty lies in our diverse skillsets that come together to build amazing things, you're like a single gear teeth that help car drivable, insignificant but nedded.&lt;/p&gt;

&lt;p&gt;The most important thing? Your mediocre coding skills improve your life! Whether it puts food on the table for your family or opens doors to new opportunities, coding is a valuable skill you can be proud of 🤩. so It's okay to be mediocre.&lt;/p&gt;

</description>
      <category>programming</category>
    </item>
    <item>
      <title>How retired developer look like?</title>
      <dc:creator>Heru Hartanto</dc:creator>
      <pubDate>Sun, 10 Dec 2023 12:06:00 +0000</pubDate>
      <link>https://forem.com/elukuro/how-retired-developer-look-like-1mp7</link>
      <guid>https://forem.com/elukuro/how-retired-developer-look-like-1mp7</guid>
      <description>&lt;p&gt;Most of developer job today didn't exist in the least 50 year, I want to know what retired developer look like and what do you think about it?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>career</category>
    </item>
    <item>
      <title>How to deal with Imposter Syndrome</title>
      <dc:creator>Heru Hartanto</dc:creator>
      <pubDate>Sat, 07 Oct 2023 10:00:33 +0000</pubDate>
      <link>https://forem.com/elukuro/how-to-deal-with-imposter-syndrome-17ol</link>
      <guid>https://forem.com/elukuro/how-to-deal-with-imposter-syndrome-17ol</guid>
      <description>&lt;h2&gt;
  
  
  What is Imposter Syndrome
&lt;/h2&gt;

&lt;p&gt;As developer did you ever feel that you're not good at your job, you feel that other developer is better than you, their code is look cleaner and more efficient, you feel incompetent and useless. &lt;/p&gt;

&lt;p&gt;Guest what you're not alone, as many as 58% of tech worker feel imposter syndrome.&lt;/p&gt;

&lt;p&gt;In simple term imposter syndrome is feeling of self doubt event though you already have excellent skill and achievement, it will make you suffer with insecurity, demotivated and anxiety.&lt;/p&gt;

&lt;p&gt;This list is an indicator that you have imposter syndrome&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fear of getting exposed as a fraud if`` your colleague expose your knowledge gap with them&lt;/li&gt;
&lt;li&gt;Feel that you're not fit with your job&lt;/li&gt;
&lt;li&gt;Fall behind your colleague's performance&lt;/li&gt;
&lt;li&gt;Only doing "comfortable" task&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to deal with it
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Realize if you have Imposter Syndrome
&lt;/h3&gt;

&lt;p&gt;It's is a good sign that you recognize if you have Imposter syndrome, many developers don't realize if they have it and just ignore it.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Moving out from your comfort zone
&lt;/h3&gt;

&lt;p&gt;Nobody in tech industry is expert at everything because technology always moving, the best developer is the one who able to keep learning and adapting to industry needs.&lt;/p&gt;

&lt;p&gt;You must learn to deal with situation that make you feel uncomfortable such as doing task that you never done before, learning new language or using another framework that you never use, with doing things that you don't know you will expand your skill and you will feel more confident with yourself.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Don't compare
&lt;/h3&gt;

&lt;p&gt;Don't compare yourself with other colleague, this behavior will make you look down upon yourself, so whenever you achieved something in your job it's because your effort, don't look down to it and celebrate every achievement.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Don't quit
&lt;/h3&gt;

&lt;p&gt;You need determination, persistence and discipline if you want to level up in this field, look back in your journey and you will realize that you already make big improvement, you just need to continue and see a failure, mistake and a bug as opportunity to grow instead of step back.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.istockphoto.com/id/vektor/sindrom-penipu-kemunafikan-ketidakjujuran-bisnis-atau-pembohong-palsu-kejahatan-gm1307149475-397509066?phrase=impostor"&gt;Cover image &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.turing.com/blog/programmer-imposter-syndrome-tips/#:~:text=Accept%20that%20you're%20dealing,deep%20into%20the%20problem%20later."&gt;Source&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>developer</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
