<?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: Denis Veleaev</title>
    <description>The latest articles on DEV Community by Denis Veleaev (@denisveleaev).</description>
    <link>https://dev.to/denisveleaev</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%2F356687%2Fdc140ebd-7171-4e1d-b3fb-5ad777705840.jpg</url>
      <title>DEV Community: Denis Veleaev</title>
      <link>https://dev.to/denisveleaev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/denisveleaev"/>
    <language>en</language>
    <item>
      <title>Why do you abandon your personal projects?</title>
      <dc:creator>Denis Veleaev</dc:creator>
      <pubDate>Thu, 05 Nov 2020 15:28:08 +0000</pubDate>
      <link>https://dev.to/denisveleaev/why-do-you-abandon-your-personal-projects-4bc0</link>
      <guid>https://dev.to/denisveleaev/why-do-you-abandon-your-personal-projects-4bc0</guid>
      <description>&lt;p&gt;Hi. 👋&lt;br&gt;
I'm Denis. I'm going to give a talk at my company and I need your help with my small investigation.  &lt;/p&gt;

&lt;p&gt;So, &lt;strong&gt;why do you abandon your personal projects?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thanks a lot for your answers in advance!&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>watercooler</category>
      <category>codenewbie</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Personal projects. Do you work on them? Have you finished one?</title>
      <dc:creator>Denis Veleaev</dc:creator>
      <pubDate>Thu, 05 Nov 2020 12:08:28 +0000</pubDate>
      <link>https://dev.to/denisveleaev/personal-projects-do-you-work-on-them-have-you-finished-one-342d</link>
      <guid>https://dev.to/denisveleaev/personal-projects-do-you-work-on-them-have-you-finished-one-342d</guid>
      <description>&lt;h1&gt;
  
  
  Hi. 👋
&lt;/h1&gt;

&lt;p&gt;I'm Denis. I've recently completed a mega workshop called &lt;strong&gt;30 projects in 30 days&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I want to give a talk in my company about the lessons I've learned from it. But I'd like to know who can be interested in it and what problems related to my topic developers experience.&lt;/p&gt;

&lt;p&gt;If you have a spare minute, may I ask you several questions on that? It will help me a lot!&lt;/p&gt;

&lt;h3&gt;
  
  
  Please please please answer these questions:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Do (or did you) you work on personal projects? Why?&lt;/li&gt;
&lt;li&gt;Are they small or medium/large?&lt;/li&gt;
&lt;li&gt;How many years of experience in development do you have?&lt;/li&gt;
&lt;li&gt;Do you tend to start and abandon these projects? Why?&lt;/li&gt;
&lt;li&gt;Have you completed at least one personal project? Was it successful?&lt;/li&gt;
&lt;li&gt;What's your process? Do you start with coding or any investigation?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Thanks a lot in advance! &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>discuss</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>5 SOLID principles with JavaScript. How to make your code SOLID</title>
      <dc:creator>Denis Veleaev</dc:creator>
      <pubDate>Sat, 19 Sep 2020 12:51:23 +0000</pubDate>
      <link>https://dev.to/denisveleaev/5-solid-principles-with-javascript-how-to-make-your-code-solid-1kl5</link>
      <guid>https://dev.to/denisveleaev/5-solid-principles-with-javascript-how-to-make-your-code-solid-1kl5</guid>
      <description>&lt;h3&gt;
  
  
  Hi 👋! I'm Denis.
&lt;/h3&gt;

&lt;p&gt;SOLID principles are strictly related to &lt;strong&gt;design patterns&lt;/strong&gt;. It's important to know design patterns because it's a hot topic for an interview. If you know them, you'll easily understand more sophisticated programming paradigms, architectural patterns, and language features such as &lt;em&gt;reactive programming&lt;/em&gt;, &lt;em&gt;flux architecture (Redux)&lt;/em&gt;, &lt;em&gt;generators in JavaScript&lt;/em&gt;, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are SOLID principles?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SOLID&lt;/strong&gt; stands for&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;S — Single responsibility principle&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;O — Open closed principle&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;L — Liskov substitution principle&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I — Interface segregation principle&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D — Dependency Inversion principle&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These 5 principles will guide you on how to write better code. Though they come from object-oriented programming. I know it's very daring to call JavaScript an object-oriented language :) Regardless, I promise that if you understand these principles, then when you design your next solutions, you will definitely ask yourself "Hey, am I violating the Single-responsibility principle?".&lt;/p&gt;

&lt;p&gt;So, let's begin&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;S — Single responsibility principle&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;It's probably the easiest principle, and at the same time, the most misunderstood one. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A module should be responsible for only one actor. As a consequence, it has only one reason to change&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Example
&lt;/h4&gt;

&lt;p&gt;Let's take a look at the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;TodoList&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="o"&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;addItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;removeItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;splice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;toString&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="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;writeFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Some implementation&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;



&lt;p&gt;Ooops. Even though from first glance, this class seems to be fine, it violates the Single responsibility principle. We added second responsibility to our TodoList class which is the management of our database.&lt;/p&gt;

&lt;p&gt;Let's fix the code so that it complies with the "S" principle.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;TodoList&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="o"&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;addItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;removeItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;splice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;toString&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="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toString&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="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;DatabaseManager&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;saveToFile&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="nx"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;writeFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;filename&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="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;loadFromFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Some implementation&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;



&lt;p&gt;Thus our code has become more scalable. Of course, it's not so obvious when we're looking at small solutions. When applied to a complex architecture, this principle takes on much more meaning.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;O — Open closed principle&lt;/strong&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Modules should be open for extension but closed for modification&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That means that if you want to extend a module's behavior, you won't need to modify the existing code of that module.&lt;/p&gt;

&lt;h4&gt;
  
  
  Example
&lt;/h4&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Coder&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fullName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;language&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hobby&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;education&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;workplace&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fullName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fullName&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;language&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;language&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hobby&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;hobby&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;education&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;education&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;workplace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;workplace&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;position&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;CoderFilter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;filterByName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;coders&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fullName&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;coders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;coder&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;coder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fullName&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;fullName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;filterBySize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;coders&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;language&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;coders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;coder&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;coder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;language&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;language&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;filterByHobby&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;coders&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hobby&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;coders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;coder&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;coder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hobby&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;hobby&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;



&lt;p&gt;The problem with &lt;code&gt;CoderFilter&lt;/code&gt; is that if we want to filter by any other new property we have to change &lt;code&gt;CodeFilter&lt;/code&gt;'s code. Let's solve this problem by creating a &lt;code&gt;filterByProp&lt;/code&gt; function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;filterByProp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;propName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&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;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;propName&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;L — Liskov substitution principle&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A principle with the most confusing name. What does it mean?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you have a function, that works for a base type, it should work for a derived type&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let's go with a classic example&lt;/p&gt;

&lt;h4&gt;
  
  
  Example
&lt;/h4&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Rectangle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;width&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;width&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="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_width&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;height&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="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_height&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;getArea&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="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_width&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_height&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Square&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Rectangle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;size&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;square&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Square&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;square&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;square&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getArea&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Guess what will be printed to the console. If your answer is &lt;code&gt;6&lt;/code&gt;, you are right. Of course, the desired answer is 9. Here we can see a classic violation of the Liskov substitution principle.&lt;/p&gt;

&lt;p&gt;By the way, to fix the issue you can define &lt;code&gt;Square&lt;/code&gt; this way:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Square&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Rectangle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;value&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;



&lt;h2&gt;
  
  
  &lt;strong&gt;I — Interface segregation principle&lt;/strong&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Clients should not be forced to depend upon interfaces that they do not use&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There are no interfaces in JavaScript. There is a way to mimic their behavior, but I don't think there's much sense. Let's better adapt the principle to the js world.&lt;/p&gt;

&lt;h4&gt;
  
  
  Example
&lt;/h4&gt;

&lt;p&gt;Let's define an "abstract" &lt;code&gt;Phone&lt;/code&gt; class which will play role of the interface in our case:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Phone&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&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="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;.&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;Phone&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&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;Phone class is absctract&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;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

  &lt;span class="nx"&gt;takePhoto&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

  &lt;span class="nx"&gt;connectToWifi&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;



&lt;p&gt;Can we use it to define an iPhone?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;IPhone&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Phone&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Implementation&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;takePhoto&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Implementation&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;connectToWifi&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Implementation&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;



&lt;p&gt;Okay, but for an old Nokia 3310 this interface will violate the "I" principle&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Nokia3310&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Phone&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Implementation&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;takePhoto&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Argh, I don't have a camera&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;connectToWifi&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Argh, I don't know what wifi is&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;



&lt;h2&gt;
  
  
  &lt;strong&gt;D — Dependency Inversion principle&lt;/strong&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;High-level modules should not depend on low-level modules&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let's take a look at the following example:&lt;/p&gt;

&lt;h4&gt;
  
  
  Example
&lt;/h4&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;FileSystem&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;writeToFile&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="c1"&gt;// Implementation&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;ExternalDB&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;writeToDatabase&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="c1"&gt;// Implementation&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;LocalPersistance&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;push&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="c1"&gt;// Implementation&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;PersistanceManager&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;saveData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;db&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;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nx"&gt;FileSystem&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;writeToFile&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;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nx"&gt;ExternalDB&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;writeToDatabase&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;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nx"&gt;LocalPersistance&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&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="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;In this case, a high-level module &lt;code&gt;PersistanceManager&lt;/code&gt; depends on the low-level modules, which are &lt;code&gt;FileSystem&lt;/code&gt;, &lt;code&gt;ExternalDB&lt;/code&gt;, and &lt;code&gt;LocalPersistance&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To avoid the issue in this simple case we should probably do something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;FileSystem&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;save&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="c1"&gt;// Implementation&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;ExternalDB&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;save&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="c1"&gt;// Implementation&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;LocalPersistance&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;save&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="c1"&gt;// Implementation&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;PersistanceManager&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;saveData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;db&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="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;save&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Of course, this is an oversimplified example, but you've got the point.&lt;/p&gt;

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

&lt;p&gt;The value of SOLID principles is not obvious. But if you ask yourself "Am I violating SOLID principles" when you design your architecture, I promise that the quality and scalability of your code will be much better.&lt;/p&gt;

&lt;p&gt;Thanks a lot for reading!&lt;br&gt;
Feel free to follow me here on DEV.to and also on Twitter (&lt;a href="https://twitter.com/DenisVeleaev"&gt;@DenisVeleaev&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Peace!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>webdev</category>
    </item>
    <item>
      <title>6 simple rules to fully understand "this" keyword in JavaScript </title>
      <dc:creator>Denis Veleaev</dc:creator>
      <pubDate>Wed, 09 Sep 2020 05:50:22 +0000</pubDate>
      <link>https://dev.to/denisveleaev/6-simple-rules-to-fully-understand-this-keyword-in-javascript-1kmk</link>
      <guid>https://dev.to/denisveleaev/6-simple-rules-to-fully-understand-this-keyword-in-javascript-1kmk</guid>
      <description>&lt;p&gt;Hey! 👋&lt;br&gt;
I'm Denis.&lt;/p&gt;

&lt;p&gt;One of the most popular topics for a JavaScript interview is the &lt;strong&gt;&lt;code&gt;this&lt;/code&gt;&lt;/strong&gt; keyword. Even though this concept is fundamental, there are a lot of developers who don't really know the &lt;em&gt;rules&lt;/em&gt; of &lt;code&gt;this&lt;/code&gt; keyword. &lt;/p&gt;

&lt;p&gt;Actually there is nothing complicated. I want to share with you 6 simple rules that will help you to stand out among the other interviewees.&lt;/p&gt;
&lt;h1&gt;
  
  
  &lt;strong&gt;Rules&lt;/strong&gt;
&lt;/h1&gt;
&lt;h3&gt;
  
  
  1. &lt;strong&gt;&lt;code&gt;new&lt;/code&gt;&lt;/strong&gt; keyword
&lt;/h3&gt;

&lt;p&gt;The first and the most important rule is that if the &lt;strong&gt;&lt;code&gt;new&lt;/code&gt;&lt;/strong&gt; keyword is used when we calling a function, inside this function &lt;code&gt;this&lt;/code&gt; refers to a new object that is created and returned by the constructor function. This rule is also applicable when we use ES6 classes&lt;/p&gt;
&lt;h4&gt;
  
  
  Example
&lt;/h4&gt;


&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Person&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="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&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;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Person&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="cm"&gt;/* Output */&lt;/span&gt;
&lt;span class="c1"&gt;// {}&lt;/span&gt;
&lt;span class="c1"&gt;// { age: 23 }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;&lt;code&gt;apply&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;call&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;bind&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The rule that we all probably know is that when we can force a function call to use a particular object as &lt;code&gt;this&lt;/code&gt; using one of these 3 methods: &lt;strong&gt;&lt;code&gt;apply&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;call&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;bind&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;myFunction&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="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&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;thisObject&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;someValue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;myFunction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;thisObject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;// { someValue: 23 }&lt;/span&gt;
&lt;span class="nx"&gt;myFunction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;thisObject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;// { someValue: 23 }&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myBoundFunction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;myFunction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;thisObject&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;myBoundFunction&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;             &lt;span class="c1"&gt;// { someValue: 23 }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Function as a &lt;em&gt;method&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;This one is quite popular for interviews. The rule is simple. When the function is called as a method (i.e., the function is called by a preceding dot), &lt;code&gt;this&lt;/code&gt; is the object that the function is a property of (&lt;code&gt;this&lt;/code&gt; is the object before that dot).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;thisObject&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;someValue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;itsMethod&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&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="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&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="nx"&gt;thisObject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;itsMethod&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;John&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// { someValue: 23, itsMethod: ƒ }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  4. The simplest case
&lt;/h3&gt;

&lt;p&gt;This is the simplest one, but a lot of people forget (or don't know) it. The rule says: if the function is called without any of the conditions above, &lt;code&gt;this&lt;/code&gt; is the &lt;em&gt;&lt;code&gt;global&lt;/code&gt;&lt;/em&gt; object (&lt;code&gt;window&lt;/code&gt;) for browser.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;f&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="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;// Window (global object)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  5. The order
&lt;/h3&gt;

&lt;p&gt;If multiple rules can be applied simultaneously, the rule that is higher in the list will determine the &lt;code&gt;this&lt;/code&gt; value.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Arrow functions
&lt;/h3&gt;

&lt;p&gt;Arrow functions are the most favorite for interviews. Everyone knows that there's something special with &lt;code&gt;this&lt;/code&gt; and arrow functions, but the minority really can tell the rule.&lt;/p&gt;

&lt;p&gt;So, the rule is that arrow function &lt;strong&gt;ignores&lt;/strong&gt; all the rules and takes the &lt;code&gt;this&lt;/code&gt; value of its surrounding scope at the time it’s created. &lt;/p&gt;

&lt;p&gt;It's that simple! We can determine an arrow function's &lt;code&gt;this&lt;/code&gt; value by finding the line where it was created and looking at what the value of &lt;code&gt;this&lt;/code&gt; is there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test yourself!
&lt;/h2&gt;

&lt;p&gt;Let's test if you understand the rules 🙂.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;abc&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;createFn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&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;return&lt;/span&gt; &lt;span class="kd"&gt;function&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="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&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="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createFn&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;So, can you tell me what's going to be printed as &lt;code&gt;this&lt;/code&gt; in this case? Can you clearly tell why? &lt;/p&gt;

&lt;p&gt;To test it you can simply run this code in chrome console.&lt;/p&gt;

&lt;p&gt;But can you answer how to "fix" this code? &lt;/p&gt;

&lt;p&gt;If the answer is "Yes", congratulations! 🎉 You're one step closer to passing JavaScript interview!&lt;/p&gt;

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

&lt;p&gt;The rules of &lt;code&gt;this&lt;/code&gt; are really simple, but knowing them you can definitely show understanding of the fundamentals to the interviewer.&lt;/p&gt;

&lt;p&gt;Thanks a lot for reading my article. Feel free to subscribe to me on DEV and Twitter &lt;a href="https://twitter.com/DenisVeleaev"&gt;@DenisVeleaev&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Peace!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>How to be mentally healthy and what you should pursue in your career</title>
      <dc:creator>Denis Veleaev</dc:creator>
      <pubDate>Sun, 06 Sep 2020 09:59:04 +0000</pubDate>
      <link>https://dev.to/denisveleaev/how-to-be-mentally-healthy-and-should-you-really-pursue-in-your-career-27e6</link>
      <guid>https://dev.to/denisveleaev/how-to-be-mentally-healthy-and-should-you-really-pursue-in-your-career-27e6</guid>
      <description>&lt;h3&gt;
  
  
  Hey! 👋
&lt;/h3&gt;

&lt;p&gt;I'm Denis - I am a Web Developer and an IT mentor at &lt;a href="https://coderdojo.com/"&gt;CoderDojo&lt;/a&gt;. And I want to ask you a very important question&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Are you happy with your job? Do you understand why?&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;I believe that understanding what makes you happy is probably one of the most important drivers for your career. And this question is much more complex than it seems to be. It requires a lot of self-awareness and experimentations.&lt;/p&gt;

&lt;p&gt;I'd like to share with you my &lt;strong&gt;absolute truths&lt;/strong&gt; that I've found out working on different positions with different teams and of different projects. This article is inspired by &lt;a href="https://twitter.com/monicalent"&gt;Monica Lent's&lt;/a&gt; great story "&lt;a href="https://monicalent.com/blog/2019/06/03/absolute-truths-unlearned-as-junior-developer/"&gt;7 absolute truths I unlearned as junior developer&lt;/a&gt;"&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;1. The team is the most important factor&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I'd like to start with a kind of obvious topic, but extremely important. The people around you influence your mental health more than anything else even in current conditions. This is true both in positive and negative directions. Being in a toxic environment is awful and if you are in such one, you should definitely find a way to change it. There is a popular opinion that you have to stay in one workplace no matter what to avoid having a resume full of short stints. The truth is that in a toxic environment you won't have the motivation to grow and share, and you'll end up a less valuable and employable specialist. So, there's nothing more important than your mental health.&lt;/p&gt;

&lt;p&gt;I'm happy I've never been in a toxic environment though.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2. You are the arithmetic mean of the people around you&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Once our team had got a junior developer who was full of energy, constantly learning something new and sharing this with others, it literally changed the spirit of the team. This growing mindset spread among the people. Btw he has become one of the best young web devs I know in person now. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You are the arithmetic mean of the people around you.&lt;/strong&gt; Try to surround yourself with people who grow fast, and, on the other hand, be the one who shares his/her energy with others. It pays back. I promise.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;3. Understand the most suitable role for you&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;At the beginning of my career path, I thought that as a developer you can simply be a working bee or the leader or manager-dev. Now I understand that it's not that simple. The development process is very complex, and to be a developer does not only mean to write code. Try to analyze what makes you feel happy in terms of non-coding responsibilities. Some questions I'd suggest to ask yourself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do you like to have an influence on the product?&lt;/li&gt;
&lt;li&gt;Are you the kind of person who wants to "just do their job" and be involved in any meetings as less as possible?&lt;/li&gt;
&lt;li&gt;What pace of development is the most comfortable for you?&lt;/li&gt;
&lt;li&gt;Do you like to interact with other team members a lot?&lt;/li&gt;
&lt;li&gt;Do you like to teach people?&lt;/li&gt;
&lt;li&gt;Do you like to be taught by other people?&lt;/li&gt;
&lt;li&gt;Do you like to be involved in the client's business processes?&lt;/li&gt;
&lt;li&gt;Do you like trying new things?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are no right or wrong answers. Thinking about these things you can find out what role in the team suites you. I believe that you cannot find an ideal workplace. But you can create it, knowing your needs.&lt;/p&gt;

&lt;h4&gt;
  
  
  What I've found out thinking about my role:
&lt;/h4&gt;

&lt;p&gt;I'm a teacher by nature. At my workplace, I help a lot to my colleagues, teaching them new things. I mentor the interns and do the lectures for them to end other colleagues. I'm also a volunteer IT mentor for children at CodeDojo.&lt;br&gt;
It's important for me to be involved in shaping the product I build. I really like to interact with other team members. I like startup-like pushing super-fast pace of development. I'm into trying a lot of new things. &lt;/p&gt;

&lt;p&gt;If some of these needs are not satisfied in my workplace I find another way to do it. For example, I participate in Hackathons (and suggest you try too. It's magical).&lt;/p&gt;

&lt;p&gt;The ideal team for me is the one who can literally break the walls to overcome the problems. And I'm extremely happy to be surrounded by such people.&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/-2QjmYDtjv8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;4. All the people are different&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I must confess. Early in my career, I silently blamed the people for the fact that they don't want to grow fast, like the comfortable process of delivery, spend too much time on polishing things more than it's needed, don't like to communicate with others much. The truth is that we all are different and it's absolutely normal, that other people are driven by different things than you.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;5. Balance is crucial&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;It's super important to find work-life balance. Find time not only for learning and work but also for building healthy relationships with your friends and family, and for your hobby. If you neglect any of these, the others will be ruined soon.&lt;/p&gt;

&lt;p&gt;By the way, &lt;strong&gt;I'm interested in what your hobbies are.&lt;/strong&gt; Please share it with us in the comment session! I'm a fire-show artist and volunteer IT mentor for children. I also like board games and conduct board games events for children and adults.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;6. Don't burn out&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Despite everything I've said, you are not your job. You don't have to stay at work more than you are paid for. But I believe that you should strive to find or create a place where you want to stay longer. Anyway, really important, &lt;strong&gt;listen to yourself&lt;/strong&gt; and take a pause if needed. And never try to escape other life problems via working more. It's very unhealthy.&lt;/p&gt;

&lt;p&gt;Don't blame yourself for being unproductive today. It's normal! :)&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;7. FOMO is your enemy&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This is extremely important for developers. The wold around is changing constantly and the fact that you cannot be on top of all the new technologies generates a lot of FOMO (Fear Of Missing Out). Trust me, even the most senior people feel it. Just learn to live with it. Think of the gap in your knowledge as a growth opportunity!&lt;/p&gt;

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

&lt;p&gt;It's not easy to find out what's important for you. But it's the key to find (or more precisely &lt;em&gt;to create&lt;/em&gt;) the best workplace for you. Invest in your self-awareness. It really pays back.&lt;/p&gt;

&lt;p&gt;Thank you for reading my article. Peace!&lt;/p&gt;

</description>
      <category>career</category>
      <category>mentalhealth</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The complete learning path for Front-End developer (Online courses)</title>
      <dc:creator>Denis Veleaev</dc:creator>
      <pubDate>Fri, 21 Aug 2020 07:10:14 +0000</pubDate>
      <link>https://dev.to/denisveleaev/the-complete-learning-path-for-fron-end-developer-online-courses-bnl</link>
      <guid>https://dev.to/denisveleaev/the-complete-learning-path-for-fron-end-developer-online-courses-bnl</guid>
      <description>&lt;h1&gt;
  
  
  Hey! 👋
&lt;/h1&gt;

&lt;p&gt;I'm a Front-End (React) Developer and an IT mentor at &lt;a href="https://coderdojo.com/" rel="noopener noreferrer"&gt;CoderDojo&lt;/a&gt;. People often ask me how to become a developer, what &lt;strong&gt;resources&lt;/strong&gt; I would recommend, what is the correct order for learning these technologies. As a person who constantly watches courses online and learned A LOT from them, I think I've got a pretty decent answer. &lt;/p&gt;

&lt;p&gt;So, let me share with you the courses that had a great influence on my career. And BTW I want to say special thanks to the authors of these courses because without them I'd probably become a vegetable seller. This is not an advertisement, although I would like it to be...&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;First things first: HTML + CSS&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Since this is the very first topic you should touch, there's quite a lot of information on HTML and the basics of CSS on the Internet. But there is one resource that I've found very decent. I like Jonas Schmedtmann's course not only because it's very comprehensive. Jonas is a great designer and walking through this course you'll build the web pages that look amazing! We all know how hard it is to maintain the motivation at the beginning of your learning journey, but I promise that the web-artworks that you'll create with this course will provide you instant gratification. You'll be proud of what you're doing, trust me :)&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://www.udemy.com/course/design-and-develop-a-killer-website-with-html5-and-css3/" rel="noopener noreferrer"&gt;Build Responsive Real World Websites with HTML5 and CSS3&lt;/a&gt; by Jonas Schmedtmann
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://www.udemy.com/course/design-and-develop-a-killer-website-with-html5-and-css3/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FxFTc6VT%2Fhtmlcss.png" alt="Build Responsive Real World Websites with HTML5 and CSS3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Second things second: Advanced CSS&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Try to ask a Back-End Developer "Why didn't you choose Front-End?". Chances are good that you will receive something like "I hate CSS. I just can't do it". For some unclear reason, a lot of people think that the ability to use CSS is God's gift. News flash — it isn't 😊. The delusion is probably caused by the fact that it is easy to start working with CSS, but it requires a lot of time to master it. And again, I think that the best option to start with it is another course by Jonas Schmedtmann. The author dives deep into important topics like Flexbox, CSS-Grid, preprocessors, project structure, BEM methodology, etc. I really do recommend it!&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://www.udemy.com/course/advanced-css-and-sass/" rel="noopener noreferrer"&gt;Advanced CSS and Sass: Flexbox, Grid, Animations and More!&lt;/a&gt; by Jonas Schmedtmann
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://www.udemy.com/course/advanced-css-and-sass/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FxD8DcsW%2Fsass.png" alt="Advanced CSS and Sass: Flexbox, Grid, Animations and More!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The heat is getting higher: JavaScript&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;JavaScript is without hesitation the most important skill for you as a Front-End Developer. I am a supporter of the not very popular opinion that the fastest and most effective way to master it is as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Learn the basics of JavaScript&lt;/li&gt;
&lt;li&gt;Learn React (or another framework/library)&lt;/li&gt;
&lt;li&gt;Understand that you don't know the basics of JavaScript&lt;/li&gt;
&lt;li&gt;Truly learn JavaScript&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Don't try to learn every little JavaScript detail from the beginning. It will be much easier for you to understand and prioritize many things if you already have some practical experience. But don't be fooled by a too superficial understanding of the basics.&lt;/p&gt;

&lt;p&gt;At the beginning of your JavaScript journey I'd recommend one of these tho courses:&lt;/p&gt;

&lt;h5&gt;
  
  
  &lt;a href="https://www.udemy.com/course/the-complete-javascript-course/" rel="noopener noreferrer"&gt;The Complete JavaScript Course: Build Real Projects!&lt;/a&gt; by Jonas Schmedtmann
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://www.udemy.com/course/the-complete-javascript-course/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FpJYgG1r%2Fjs1.png" alt="The Complete JavaScript Course: Build Real Projects!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  &lt;a href="https://www.udemy.com/course/javascript-the-complete-guide-2020-beginner-advanced/" rel="noopener noreferrer"&gt;JavaScript - The Complete Guide(Beginner + Advanced)&lt;/a&gt; by Maximilian Schwarzmüller
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://www.udemy.com/course/javascript-the-complete-guide-2020-beginner-advanced/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg-a.udemycdn.com%2Fcourse%2F750x422%2F2508942_11d3.jpg" alt="JavaScript - The Complete Guide(Beginner + Advanced)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Time to choose your destiny: React, Angular, Vue&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Now you're ready to learn how to handle real power. There's no need to learn all of them. At least for the start, you'd better pick one of the frameworks/libraries. I'm really into React but I don't want to start a holy war about what technology is better (although React is the best 😊). I tried them all and can confidently say that &lt;a href="https://academind.com/" rel="noopener noreferrer"&gt;Academind&lt;/a&gt; (Maximilian Schwarzmüller) has excellent courses about all three:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.udemy.com/course/react-the-complete-guide-incl-redux/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FcxczjYG%2Ffwks.png" alt="JavaScript - The Complete Guide(Beginner + Advanced)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  &lt;a href="https://www.udemy.com/course/react-the-complete-guide-incl-redux/" rel="noopener noreferrer"&gt;React - The Complete Guide (incl Hooks, React Router, Redux)&lt;/a&gt; by Maximilian Schwarzmüller
&lt;/h5&gt;

&lt;h5&gt;
  
  
  &lt;a href="https://www.udemy.com/course/the-complete-guide-to-angular-2/" rel="noopener noreferrer"&gt;Angular - The Complete Guide (2020 Edition)&lt;/a&gt; by Maximilian Schwarzmüller
&lt;/h5&gt;

&lt;h5&gt;
  
  
  &lt;a href="https://www.udemy.com/course/vuejs-2-the-complete-guide/" rel="noopener noreferrer"&gt;Vue JS - The Complete Guide (incl. Vue Router &amp;amp; Vuex)&lt;/a&gt; by Maximilian Schwarzmüller
&lt;/h5&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The "T-word": Unit Testing&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I know that you hate it. I hate it too. But we have to live with what we've got. The process of testing is especially painful when you try to come up with weird hacks because of a lack of knowledge. And probably the best way to gain this knowledge is an awesome course on unit testing by &lt;a href="https://kentcdodds.com/" rel="noopener noreferrer"&gt;Kent C. Dodds&lt;/a&gt;. Everybody in the community knows him. He truly deserves trust. After all, he gave us the react-testing-library. Definitely the best resource on unit (and not only unit) testing I've seen:&lt;/p&gt;

&lt;h5&gt;
  
  
  &lt;a href="https://testingjavascript.com/" rel="noopener noreferrer"&gt;Learn the smart, efficient way to test any JavaScript application&lt;/a&gt; by Kent C. Dodds
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://testingjavascript.com/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fkentcdodds.com%2Fstatic%2FmetaImage-a10bc5908ac36d2832d80fec74205556.jpg" alt="Learn the smart, efficient way to test any JavaScript application"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;JavaScript on steroids: TypeScript&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Another great Maximilian Schwarzmüller's course. If you truly master TypeScript, you'll insanely improve the quality of your code! There're a lot of people with a superficial understanding of TypeScript... Please, don't become one of them. This course (and a lot of practice) will help you to become a Master Yoda of TypeScript.&lt;/p&gt;

&lt;h5&gt;
  
  
  &lt;a href="https://www.udemy.com/course/understanding-typescript/" rel="noopener noreferrer"&gt;Understanding TypeScript&lt;/a&gt; by Maximilian Schwarzmüller
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://www.udemy.com/course/understanding-typescript/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.filepicker.io%2Fapi%2Ffile%2FhDdzn2AcQccmYaE4h8iK" alt="Understanding TypeScript"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Think out of the box: Node.js&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;What? Isn't it for the Back-End?! Technically it's not only for BE but I do want to talk about the Back-End part. At some point in your career, you'll most probably want (need?) to try the Back-End part or even become a full-stack developer. I've taken a few courses on this topic and the one I like the most is created by Andrew Mead:&lt;/p&gt;

&lt;h5&gt;
  
  
  &lt;a href="https://www.udemy.com/course/the-complete-nodejs-developer-course-2/" rel="noopener noreferrer"&gt;The Complete Node.js Developer Course&lt;/a&gt; by Andrew Mead
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://www.udemy.com/course/the-complete-nodejs-developer-course-2/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FPrLhkkc%2Fnode.png" alt="The Complete Node.js Developer Course"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;There ain't no REST for you: GraphQL&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Even though GraphQL is not that new technology (in Front-End development world things are changing so fast that there will likely be released a fancy new framework by the end of this article), REST is still much much more popular. But I'm sure you'll want (or need) to give it a try. After all, as a good person once said &lt;em&gt;"No sane person would choose REST instead of GraphQL"&lt;/em&gt;. It's hard to find the course on this topic that is not out of date. For today I think this one is quite decent:&lt;/p&gt;

&lt;h5&gt;
  
  
  &lt;a href="https://www.udemy.com/course/graphql-bootcamp/" rel="noopener noreferrer"&gt;The Modern GraphQL Bootcamp (with Node.js and Apollo)&lt;/a&gt; by Andrew Mead
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://www.udemy.com/course/graphql-bootcamp/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FDMgqDD8%2Fgql.png" alt="The Modern GraphQL Bootcamp (with Node.js and Apollo)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What? JavaScript again?: The Hard Parts&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;As I previously said, the vast majority of us (devs) at some point have to realize that "we know nothing". I love Will Sentance's course from the bottom of my heart because he dives deep in very important topics that you probably missed during your first cycle of learning of the basics. The author uses only the whiteboard to explain the concepts. I like it so much that I even give such lectures for the interns in the company where I work. It helps a lot in preparation for an interview.&lt;/p&gt;

&lt;h5&gt;
  
  
  &lt;a href="https://frontendmasters.com/courses/javascript-hard-parts/" rel="noopener noreferrer"&gt;JavaScript: The Hard Parts&lt;/a&gt; by Will Sentance
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://frontendmasters.com/courses/javascript-hard-parts/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FBV8WLqp%2Fhp.png" alt="JavaScript: The Hard Parts"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;If you watched all the mentioned courses, I'm sure you are a decent specialist. One thing I wanted to mention before the end is a trap for Front-End Developers. Our JS world is probably one of the most fast-changing in the industry. It's almost impossible to be on top of all new technologies. You can probably feel the same "fear of missing out" because of that as I do. I've recently come across a wonderful Kitze's Talk on how to "Navigate the Hype-Driven Frontend Development World Without Going Insane". Please, enjoy what you're doing and live a balanced life.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/QZ6aC6G0ufg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Peace.&lt;/p&gt;

&lt;p&gt;Thanks again to all the authors of these amazing courses, and also thank you, the readers. Feel free to follow me on Twitter &lt;a href="https://twitter.com/DenisVeleaev" rel="noopener noreferrer"&gt;@DenisVeleaev&lt;/a&gt;. I'm at the beginning of my blogging path. Hope you will like it. &lt;/p&gt;

&lt;p&gt;Also, I would like to see your recommendations.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Honorable mentions&lt;/strong&gt;
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/course/mongodb-the-complete-developers-guide/" rel="noopener noreferrer"&gt;MongoDB - The Complete Developer's Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/course/react-native-the-practical-guide/" rel="noopener noreferrer"&gt;React Native - The Practical Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/course/design-patterns-javascript/" rel="noopener noreferrer"&gt;Design Patterns in JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://advancedreact.com/" rel="noopener noreferrer"&gt;Fullstack Advanced React &amp;amp; GraphQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/course/js-algorithms-and-data-structures-masterclass/" rel="noopener noreferrer"&gt;JavaScript Algorithms and Data Structures Masterclass&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/course/nodejs-the-complete-guide/" rel="noopener noreferrer"&gt;NodeJS - The Complete Guide (MVC, REST APIs, GraphQL, Deno)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>react</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>What I've learned during the year teaching IT to children as a volunteer.</title>
      <dc:creator>Denis Veleaev</dc:creator>
      <pubDate>Mon, 06 Jul 2020 14:22:02 +0000</pubDate>
      <link>https://dev.to/denisveleaev/what-i-ve-learned-during-the-year-teaching-it-to-children-as-a-volunteer-1pp</link>
      <guid>https://dev.to/denisveleaev/what-i-ve-learned-during-the-year-teaching-it-to-children-as-a-volunteer-1pp</guid>
      <description>&lt;p&gt;Hi! For last year I’ve been teaching children IT disciplines as a volunteer in Coder Dojo (The community of 2272 free, open and local programming clubs for young people in 100+ countries). Well, I’d say “teach” is the wrong word. In our Dojo we apply so-called “Project-based learning”. Me and 2 other outstanding people have been helping children with everything they want in the field of IT (game development, web development, graphic design, SMM, AR effects for Instagram, etc.)&lt;/p&gt;

&lt;p&gt;Initially, I thought I’ll teach these children. In fact, I think I’ve learned from them much more. So, today I want to tell you why I think you should definitely try IT volunteering. &lt;/p&gt;

&lt;h2&gt;
  
  
  Here’re conclusions that I’ve made this year:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  We’re extremely lazy
&lt;/h3&gt;

&lt;p&gt;Sorry for that, but for the vast majority of us, it’s true. As a volunteer, I visited several IT events and competitions for young people. I met a lot of talented children and, to be honest, it was a challenge for my ego. These outstanding children and teens create serious projects in domains such as Machine Learning, IoT, robotics, game dev, etc. I’m pretty sure that some of them could probably replace some of your colleagues right now. And that’s not because they are so talented. They are not geniuses. They simply work hard! And this drives me to work harder. &lt;/p&gt;

&lt;h3&gt;
  
  
  It’s normal to try and fail
&lt;/h3&gt;

&lt;p&gt;In fact, it’s the only way to grow. You should fail a lot! I know that might sound corny, but we forget about this simple truth so often. We’re so afraid of failing that we don’t even try. The children, on the contrary, try and fail a lot. And that’s how they find their interests, their strengths, and weaknesses. And, guess what, nobody cares about your failure, so, please, don’t be afraid! (To be honest, I’m afraid to publish this article :))&lt;/p&gt;

&lt;h3&gt;
  
  
  Internal motivation is far more powerful than external
&lt;/h3&gt;

&lt;p&gt;What drives you as a professional? What was your motivation when you started learning IT disciplines? I’m pretty sure that the majority of us didn’t start learning because of money. And I really hope you managed to keep this spark inside you because after hard work that’s the main driver of growth. Internal motivation not only helps you to grow faster, it really makes you happier. And that’s the distinguishing feature of the most talented children (and grown-up colleagues as well). So, if you don’t feel this fire, you should probably do something with it.&lt;/p&gt;

&lt;h3&gt;
  
  
  All the limitations are only in your head
&lt;/h3&gt;

&lt;p&gt;As I said, I’ve met a lot of teenagers who already can replace some of your colleagues. The secrets are hard work and passion. And nothing else matters.&lt;/p&gt;

&lt;h3&gt;
  
  
  It’s normal to be a generalist
&lt;/h3&gt;

&lt;p&gt;Even more, it’s cool! As a developer, I often heard something like “You should know everything about ”. And that’s okay unless it’s not for you. Some people are generalists, and despite their narrow niche they want to have at least superficial knowledge of other fields. And that’s what helped me a lot with mentoring children.&lt;/p&gt;

&lt;h3&gt;
  
  
  Grown-ups are simply big children
&lt;/h3&gt;

&lt;p&gt;Well, what I wanted to say is that this experience of working with children helped me when at my workplace I got my first junior assistant and had to help her get onboarded fast in a quite complex project. So, If you want to become a better leader or mentor, I definitely recommend you to try volunteer teaching.&lt;/p&gt;

&lt;h3&gt;
  
  
  It really extends your network
&lt;/h3&gt;

&lt;p&gt;I wish I knew it earlier that volunteering gives you the possibility to enormously extend your network with amazing people. It’s hard to explain how it influences you, but it’s easy to understand the benefits of being familiar with the most “significant” people in the IT domain in your location.&lt;/p&gt;

&lt;h2&gt;
  
  
  In conclusion
&lt;/h2&gt;

&lt;p&gt;I want to say I found what makes me happy. I will not exchange for anything the look of the burning eyes of people who give their whole soul to their beloved work. And I am very glad that I have the opportunity to help them with this. I hope my experience was useful to you. I really want this community to continue to grow.&lt;/p&gt;

</description>
      <category>leadership</category>
      <category>career</category>
      <category>codenewbie</category>
      <category>teaching</category>
    </item>
  </channel>
</rss>
