<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alvis Tang</title>
    <description>The latest articles on DEV Community by Alvis Tang (@alvis).</description>
    <link>https://dev.to/alvis</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%2F665334%2F3b798062-160c-4081-be5b-4a52c088a973.jpeg</url>
      <title>DEV Community: Alvis Tang</title>
      <link>https://dev.to/alvis</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alvis"/>
    <language>en</language>
    <item>
      <title>Presetter - Reuse your config files and build scripts over JS projects</title>
      <dc:creator>Alvis Tang</dc:creator>
      <pubDate>Fri, 27 Aug 2021 10:14:22 +0000</pubDate>
      <link>https://dev.to/alvis/presetter-the-easiest-way-to-reuse-your-config-files-and-build-scripts-over-npm-projects-4kl1</link>
      <guid>https://dev.to/alvis/presetter-the-easiest-way-to-reuse-your-config-files-and-build-scripts-over-npm-projects-4kl1</guid>
      <description>&lt;p&gt;Nowadays, as the JS/TS ecosystem continues to mature, developers are writing more and more build scripts and configuration files for their projects. How many times you've copied identical configs for babel, eslint, jest, typescript and the life cycle scripts in package.json?&lt;/p&gt;

&lt;p&gt;For me, I've 40 common devDependencies, 24 scripts and 7 config files across my npm projects. Putting the need to copy and paste these things to bootstrap a new project aside, updating these tools across existing projects is just horrible pain. 🤦‍♂️&lt;/p&gt;

&lt;p&gt;So I spent my spare time making &lt;strong&gt;presetter&lt;/strong&gt;, a utility tool you'd love to use for easily and quickly reusing build scripts/configs across different npm projects. Now, instead of these countless devDependencies, build scripts, and config files, I can reduce them into just 2 devDependencies (or just 1 if you use npm 7+ which auto install peer dependencies automatically) and 1 config file (for presetter to determine which preset to use)!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh9pqxp0f27va7nodj50b.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh9pqxp0f27va7nodj50b.jpg" alt="Before and After"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  😀 Sounds good. What is presetter and a preset then?
&lt;/h2&gt;

&lt;p&gt;Presetter is a new open-source project that simplifies workflow for js/ts developers by providing a utility tool to enable us to store all common developmental configurations in one place, not a copy of those on each repo. This allows not only for the reuse of configurations but also reduces time spent on setup and maintaining the build systems across projects. Presetter is written in typescript but compatible with all js packages, backend, or frontend, as long as you use a package.json.&lt;/p&gt;

&lt;p&gt;In a nutshell, &lt;strong&gt;presetter&lt;/strong&gt; is a utility tool that set up and manage common devDependencies specified by a &lt;strong&gt;preset&lt;/strong&gt;, which provides 3 types of common building configurations: devDependencies, build scripts, and config files. With presetter, you can replace many of your common devDependencies like eslint plugins etc and its config files and scripts into only two dev packages and a config file, namely &lt;em&gt;presetter&lt;/em&gt;, your preset choice, and a &lt;code&gt;.presetterrc&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;By pairing them up, you no longer need to spend hours on maintaining the build systems across projects. Instead, simply pick (and customise) a predefined preset either off-the-shelf from the community or an unpublished private package living in your git repository. What's more? You get version control on the build system for free due to the way how a preset is packaged. Life is much simpler since then!&lt;/p&gt;

&lt;h2&gt;
  
  
  😻 Wow. Tell me how to use it
&lt;/h2&gt;

&lt;p&gt;To setup presetter for managing your build system, you can easily achieve it via the &lt;code&gt;presetter use&lt;/code&gt; command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx presetter use &amp;lt;preset package name e.g. presetter-preset&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;which would perform the following few things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install presetter and your choice of preset as devDependencies,&lt;/li&gt;
&lt;li&gt;Patch the &lt;code&gt;scripts&lt;/code&gt; field in your &lt;code&gt;package.json&lt;/code&gt; to enable automatic bootstraping via the &lt;code&gt;prepare&lt;/code&gt; life cycle script,&lt;/li&gt;
&lt;li&gt;Bootstrap the preset by installing all the peerDependencies provided by the preset and create symlinks pointing to the generated config files on your project root, and&lt;/li&gt;
&lt;li&gt;Create a &lt;code&gt;.presetterrc&lt;/code&gt; file on the project root with the following content
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"preset"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;preset package name&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F36m9ul90iw67t6h2tig9.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F36m9ul90iw67t6h2tig9.gif" alt="Bootstrap Presetter"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After starting the project through bootstrapping, you have reached a point where it normally takes 5-10 minutes to duplicate all configuration settings from another repository. Now, you can achieve it by just &lt;strong&gt;ONE COMMAND&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;To apply the preset scripts, you can execute a script by using the &lt;code&gt;presetter run &amp;lt;script name&amp;gt;&lt;/code&gt; or shorthanded &lt;code&gt;run &amp;lt;script name&amp;gt;&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;Using &lt;strong&gt;presenter-preset&lt;/strong&gt; for example, when you invoke &lt;code&gt;run build&lt;/code&gt;, presetter will merge the custom scripts defined in your package.json and the &lt;a href="https://github.com/alvis/presetter/blob/master/packages/preset/templates/scripts.yaml" rel="noopener noreferrer"&gt;templated defined here&lt;/a&gt;, then invoke &lt;code&gt;run-s clean build:*&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tips&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can also use &lt;code&gt;run &amp;lt;script name&amp;gt;&lt;/code&gt; as part of your life cycle scripts to make your build experience identical to what you have before. For example,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"build"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"run build"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"coverage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"run coverage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"lint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"run lint"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prepare"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"presetter bootstrap &amp;amp;&amp;amp; run prepare"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prepublishOnly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"run prepublishOnly"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"release"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"run release --"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"run test --"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"watch"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"run watch"&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  👻 BUT. Can I customise it?
&lt;/h2&gt;

&lt;p&gt;Short answer, SURE! You may be just 99% satisfied with the preset and want to change a little thing like turning on/off a lint rule, presetter just get you covered!&lt;/p&gt;

&lt;p&gt;To do this, you just need to pass your customised config in the &lt;code&gt;config&lt;/code&gt; field in &lt;code&gt;.presetterrc.json&lt;/code&gt;. This config will be passed to the preset's configurator to achieve customisation. After adding your config, run &lt;code&gt;npx presetter bootstrap&lt;/code&gt; again to regenerate the config files.&lt;/p&gt;

&lt;p&gt;For example, to add &lt;code&gt;DOM&lt;/code&gt; as a library in tsconfig.json provided by &lt;strong&gt;presetter-preset&lt;/strong&gt;, simply add these lines in your &lt;code&gt;presetterrc.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"preset"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"presetter-preset"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"config"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"tsconfig"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"compilerOptions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"lib"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"DOM"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each preset can have its own set of customizable features. So check the preset's  documentation for a full list of customisable elements.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎩 Cool! What's the magic behind it?
&lt;/h2&gt;

&lt;p&gt;Presetter may sound too good to be true. Now you don't need to copy and paste all the time. But you may wonder how does it work?&lt;/p&gt;

&lt;p&gt;Well, it's actually pretty simple. Presetter basically does the following few things.&lt;/p&gt;

&lt;p&gt;When you run &lt;code&gt;presetter bootstrap&lt;/code&gt;, it&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;generates config files provided from the preset's template with your customisation applied and create symlinks on your project root, and&lt;/li&gt;
&lt;li&gt;uses npm's arborist to install all peer dependencies defined in the preset's package.json, so that it works even with npm &amp;lt;7.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you run &lt;code&gt;presetter run &amp;lt;command&amp;gt;&lt;/code&gt;, it&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;merges your project's package.json with the script template provided by the preset and invoke the command.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's basically all about how preset works. Now, let's see what kinds of presets are available and how to contribute one!&lt;/p&gt;

&lt;h2&gt;
  
  
  🐣 Alright. What presets can I try today?
&lt;/h2&gt;

&lt;p&gt;A preset is a collection of common development configurations that can be applied to a project. It provides 3 groups of common building tools&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;devDependencies,&lt;/li&gt;
&lt;li&gt;build scripts, and&lt;/li&gt;
&lt;li&gt;config files&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Today, we have 4 official presets for different kinds of projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/alvis/presetter/tree/master/packages/preset-essentials" rel="noopener noreferrer"&gt;presetter-preset-essentials&lt;/a&gt;: The starter kit for your typescript project, including settings for typescript, eslint, jest, prettier, standard-version and many others&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/alvis/presetter/tree/master/packages/preset-rollup" rel="noopener noreferrer"&gt;presetter-preset-rollup&lt;/a&gt;: A collection of opinionated configurations for a building a code bundle via rollup.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/alvis/presetter/tree/master/packages/preset-web" rel="noopener noreferrer"&gt;presetter-preset-web&lt;/a&gt;: A preset for a modern web project&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/alvis/presetter/tree/master/packages/preset-react" rel="noopener noreferrer"&gt;presetter-preset-react&lt;/a&gt;: A preset for a react project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each preset is a single npm package. You can publish yours to share it with the community or just make it as a github repo without publishing it. Both works.&lt;/p&gt;

&lt;p&gt;Another thing is that you can also contribute to the official presets. See &lt;a href="https://github.com/alvis/presetter/blob/master/CONTRIBUTING.md" rel="noopener noreferrer"&gt;CONTRIBUTING&lt;/a&gt; for all things related to preset's development and contribution!&lt;/p&gt;

&lt;h2&gt;
  
  
  👾 To Conclude...
&lt;/h2&gt;

&lt;p&gt;Now you can stop worrying about managing devDependencies, scripts and config files. Presetter is a tool that reduces the complexity of your build system. &lt;/p&gt;

&lt;p&gt;We all know that duplication of code is a bad thing, and there are many tools to eliminate it, but we don't have a tool for avoiding copying build configuration.&lt;/p&gt;

&lt;p&gt;It's time to put the messy build configs aside. Try &lt;strong&gt;presetter&lt;/strong&gt; today and visit &lt;a href="https://github.com/alvis/presetter" rel="noopener noreferrer"&gt;the repository on Github&lt;/a&gt; for detailed documentation.&lt;/p&gt;

&lt;p&gt;Don't forget to star or watch this repo if you like it! And don't forget to leave your comments below too. 👇&lt;/p&gt;

</description>
      <category>npm</category>
      <category>productivity</category>
      <category>tooling</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Did GitHub just start the Junior Developer as a Service era? Thoughts on GitHub Copilot</title>
      <dc:creator>Alvis Tang</dc:creator>
      <pubDate>Thu, 22 Jul 2021 11:52:07 +0000</pubDate>
      <link>https://dev.to/alvis/did-github-just-start-the-junior-developer-as-a-service-era-thoughts-on-github-copilot-4j23</link>
      <guid>https://dev.to/alvis/did-github-just-start-the-junior-developer-as-a-service-era-thoughts-on-github-copilot-4j23</guid>
      <description>&lt;p&gt;On Jun 29, the headline of many tech channels was the revelation of &lt;a href="https://copilot.github.com"&gt;GitHub Copilot&lt;/a&gt;, an AI that writes code by the developer's command. This is not the first time an application of artificial intelligence has been used in software engineering, but it might be one of the most important milestones when considering its implications on how we learn to be an experienced developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Captain Dev, Copilot AI Reports for Duty
&lt;/h2&gt;

&lt;p&gt;So, what is GitHub Copilot? Basically, Copilot is an AI that is delivered as a VS Code extension. GitHub promotes it as an revolutionary AI that is more than an auto-complete assistant. GitHub claims it can sense the intent of a programmer when he/she starts writing a new snippet and uses the context provided to synthesise code to match.&lt;/p&gt;

&lt;p&gt;Under the hood, Copilot generates code using Codex, a variant of GPT-3 by OpenAI. When you write, it tries to understand the current state of your code and then generates relevant snippets. Given GPT-3 has been shown to be capable of generating multiple types of text in response to human prompts, it comes as no surprise that it can also write code.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pQDaMsCz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s9ocljhx7elrc6xbavdl.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pQDaMsCz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s9ocljhx7elrc6xbavdl.gif" alt="An example demonstrating how copilot work."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The benefit, according to GitHub, is that Copilot can save developers time in building an application with new external components. From completing a database query to integrating a payment service, just write what you want to achieve in pain language and Copilot will write an example code for you.&lt;/p&gt;

&lt;p&gt;The argument behind the claim, which is simple-seeming, is that the task of integrating a third-party component often requires only a few lines of code, but before developers can write those few lines of code, they have to research the documentation or read tutorials to learn how to use the new component they are integrating, which can take hours or days.&lt;/p&gt;

&lt;h2&gt;
  
  
  Junior Developer as a Service (JDaaS)?
&lt;/h2&gt;

&lt;p&gt;Gosh! "Did Github just make a junior developer as a service (JDaaS) product!?", this is my first reaction when I read the intro of Copilot.&lt;/p&gt;

&lt;p&gt;Who finds it difficult to read and understand documentation? Who wants answers from StackOverflow the most? Who spends most of their time doing just coding? Junior developers.&lt;/p&gt;

&lt;p&gt;Experienced developers would know most of the time spent is actually not programming, but writing tests, docs and communicating with tons of stakeholders. Coding is only relatively a small portion of their time.&lt;/p&gt;

&lt;p&gt;Now that Copilot is able to generate simple code by verbal commands, pretty much like a senior briefing a junior on what to do next in a project. I have to say this could be the beginning of JDaaS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tubb1DDM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pppphnj1l1j92m8nsm4w.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tubb1DDM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pppphnj1l1j92m8nsm4w.jpeg" alt="Some developers reaction towards Github Copilot."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Copilot, where are we heading?
&lt;/h2&gt;

&lt;p&gt;Now, with the arduous first step in creating any application - figuring out how the different components work - removed, how would this kind of new AI affect the ecosystem in tech?&lt;/p&gt;

&lt;p&gt;I have an interesting view. It may end up holding tech back than the intended opposite. It is a threat to the tech industry. Not because they are powerful, but that I'm so afraid that we will lose the chance to learn to be experienced developers and hence hindering the potential of our future technology development.&lt;/p&gt;

&lt;p&gt;The reason is that while Copilot is designed to help developers write code more quickly, in doing so, it removes the good part of it - the opportunity for us to experience the pain and the frustration, and the fun and the feeling of achieving upon figuring a difficult task. Everything Copilot removed is essential for a junior developer to learn to be an experienced developer.&lt;/p&gt;

&lt;p&gt;With this development, companies will be more reluctant to hire junior developers and train them to be the next generation developers too. In the US, even a junior web developer can cost you $80,000 a year. Knowing an AI can do most of the tasks a junior can do, what would you do as an employer?&lt;/p&gt;

&lt;p&gt;Copilot is a genius application, but it could be the thing that makes junior developers less likely to be hired and become experienced leaders one day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Brace, Brace, Brace
&lt;/h2&gt;

&lt;p&gt;As a tech leader, I am glad that artificial intelligence has bought us all sorts of new tools to allow us to do our work more efficiently. For example, when someone wants to find out something about their medical condition, you can just say it to Google Assistant and you would get pretty much professional-grade answers like a real doctor. The benefits of AI are just undeniable.&lt;/p&gt;

&lt;p&gt;But sometimes I feel like the advance of AI, by achieving higher efficiency, takes away something that we actually enjoy doing or at least something that we need to go through it. Figuring things out yourself and making mistakes is the necessary process for learning to be an expert.&lt;/p&gt;

&lt;p&gt;Now, the impact of AI on the tech industry has never been this close. Like other industries, we also have to start accessing its impact on us and adapt. In the long run, I hope that AI will make junior developers more experienced and not less valued in the industry. We need a healthy supply of talents.&lt;/p&gt;

&lt;p&gt;To ensure that we have people who can fly planes in the future, we need first officers, not captains!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tMiKXpt_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9jdcccrl7srt7oj6epru.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tMiKXpt_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9jdcccrl7srt7oj6epru.jpeg" alt="A captain flying a plane. Photo by byronsterk on Unsplash."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Where to find me:&lt;br&gt;
&lt;a href="https://github.com/alvis"&gt;github&lt;/a&gt; | &lt;a href="https://linkedin.com/in/alvistang"&gt;linkedin&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>ai</category>
      <category>vscode</category>
      <category>career</category>
    </item>
  </channel>
</rss>
