<?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: Justin Graysen</title>
    <description>The latest articles on DEV Community by Justin Graysen (@justin_graysen).</description>
    <link>https://dev.to/justin_graysen</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%2F912958%2F3cdcec85-90c3-46cc-80ba-a8a0b0a208d5.jpg</url>
      <title>DEV Community: Justin Graysen</title>
      <link>https://dev.to/justin_graysen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/justin_graysen"/>
    <language>en</language>
    <item>
      <title>Why variables can be accessed before declaration in Javascript?</title>
      <dc:creator>Justin Graysen</dc:creator>
      <pubDate>Fri, 02 Sep 2022 10:48:52 +0000</pubDate>
      <link>https://dev.to/justin_graysen/why-variables-can-be-accessed-before-declaration-in-javascript-7bl</link>
      <guid>https://dev.to/justin_graysen/why-variables-can-be-accessed-before-declaration-in-javascript-7bl</guid>
      <description>&lt;p&gt;One of the most used and famous languages today without a doubt is JavaScript, nowadays it is everywhere, we can create web applications and systems, develop APIs on the back-end and create mobile applications.&lt;/p&gt;

&lt;p&gt;Despite its popularity, many people don’t like JavaScript, mainly because some &lt;strong&gt;particularities&lt;/strong&gt; of the language are very different from others.&lt;/p&gt;

&lt;p&gt;One of the things that confused me when I started using JavaScript was the &lt;strong&gt;possibility of using variables or functions before their declarations&lt;/strong&gt; and I believe that many people also find this a bit strange.&lt;/p&gt;

&lt;p&gt;In this post I will try to explain how does this happen. 👇&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lCiWMY8a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/12000/0%2ABhUx4CTW2beTRIug" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lCiWMY8a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/12000/0%2ABhUx4CTW2beTRIug" alt="Photo by [Tudor Baciu](https://unsplash.com/@baciutudor?utm_source=medium&amp;amp;utm_medium=referral) on [Unsplash](https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral)" width="880" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Execution Context
&lt;/h2&gt;

&lt;p&gt;Before we talk about variables and functions, we need to understand some concepts about the JavaScript language, the first of them will be context execution.&lt;/p&gt;

&lt;p&gt;In JavaScript a fundamental unit of execution are functions, we use them all the time, to calculate something, perform side effects (like changing the UI), reuse code or to make code easier to understand. We also know that a function can call another function, which in turn can call another function, and so on…&lt;/p&gt;

&lt;p&gt;When a function calls another function, the code execution must go back to the position where it was called from, i.e:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2p5gkZpO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3044/1%2A6Du-o9ADcanGU15szdJqhA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2p5gkZpO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3044/1%2A6Du-o9ADcanGU15szdJqhA.png" alt="Javascript code" width="880" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When calling the dialog function we will call another function (in this case hello), when the hello function is finished executing, we need to go back to where it was called, i.e., inside the dialog function and continue execution.&lt;/p&gt;

&lt;p&gt;But, have you ever wondered &lt;strong&gt;how the JavaScript engines keep track of all these functions running and returning to specific positions in the code?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In JavaScript there are two main types of code: global and function.&lt;/p&gt;

&lt;h3&gt;
  
  
  Global code
&lt;/h3&gt;

&lt;p&gt;This code is defined outside of all functions, i.e. they are loose in our JavaScript.&lt;/p&gt;

&lt;h3&gt;
  
  
  Function code
&lt;/h3&gt;

&lt;p&gt;This code is defined inside the functions.&lt;/p&gt;

&lt;p&gt;When our code is being executed by JavaScript engines, each statement is executed over a certain execution context and as we have two types of code, we also have two types of contexts: &lt;strong&gt;global execution context **and **function execution context&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The most significant difference between them is that there is only one global execution context, it is created when JavaScript starts its execution. &lt;strong&gt;While for each function invocation a new function execution context is created.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thus, it is through these contexts that JavaScript can handle pauses, executions and callbacks.&lt;/p&gt;

&lt;p&gt;We know that JavaScript is based on a &lt;strong&gt;single thread execution model&lt;/strong&gt;, that is, only one piece of code can be executed at a time. Therefore, every time a function is invoked, the current execution context is paused and a new function execution context is created, from which the code will be evaluated. After the function has performed its task, that is, its code has been executed, the execution context of that function is usually discarded and the previous execution context is restored.&lt;/p&gt;

&lt;p&gt;So it is necessary to keep both contexts tracked, that is, we need one running execution context and another context that is paused. The easiest way to implement this functionality would be through stacks, called &lt;strong&gt;execution context stacks&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lexical Environment
&lt;/h2&gt;

&lt;p&gt;Now that we understand a little more about how execution contexts work, let’s take a look at the lexical environment.&lt;/p&gt;

&lt;p&gt;Consider the following example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qYNmR7ip--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3044/1%2AfMlGbzaN_uhBcC5mk1YnGQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qYNmR7ip--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3044/1%2AfMlGbzaN_uhBcC5mk1YnGQ.png" alt="Javascript code" width="880" height="265"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this case, we know that by calling the console.log function a new execution context will be created, but how does the log function get the value of the variable name?&lt;/p&gt;

&lt;p&gt;This process is called &lt;strong&gt;identifier resolution&lt;/strong&gt;, basically the idea is to &lt;strong&gt;find out which variable a given identifier refers to&lt;/strong&gt;, the execution context does this through the lexical environment.&lt;/p&gt;

&lt;p&gt;A lexical environment is an internal JavaScript mechanism to &lt;strong&gt;keep track of the mapping of identifiers to specific variables&lt;/strong&gt;, going back to the previous code:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qYNmR7ip--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3044/1%2AfMlGbzaN_uhBcC5mk1YnGQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qYNmR7ip--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3044/1%2AfMlGbzaN_uhBcC5mk1YnGQ.png" alt="Javascript code" width="880" height="265"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The lexical environment is consulted when the variable name is accessed, that is, in the console.log declaration.&lt;/p&gt;

&lt;p&gt;Lexical environments are an internal implementation of the JavaScript scopes mechanism, and people generally refer to them as scopes.&lt;/p&gt;

&lt;p&gt;Generally a lexical environment is associated with a specific code structure, it can be associated with a function, a block of code or a catch (part of try/catch) and each structure can have its own identifier mapping.&lt;/p&gt;

&lt;h2&gt;
  
  
  Types of variables in Javascript
&lt;/h2&gt;

&lt;p&gt;In JavaScript we can use three reserved words to define variables: var, let and const. They differ in two aspects: mutability and their relationship to the lexical environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mutability
&lt;/h3&gt;

&lt;p&gt;If we categorize the variable declaration by the mutability aspect, we can put const on one side and var/let on the other.&lt;/p&gt;

&lt;p&gt;All variables defined with const are immutable, that is, their value can only be set once. On the other hand, all variables defined with var or let can have their values changed as many times as needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lexical environment
&lt;/h3&gt;

&lt;p&gt;The three types of variable definitions (var, let and const) can also be categorized by their relationship to the lexical environment (by their scope), we can put var on one side and let/const on the other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using var&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When we use the var definition type, the variable is defined in the nearest function or global lexical environment (blocks are ignored). Let’s take a look at the following example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XAczozMq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3044/1%2A1xmfvdz23tOcxeC354KOMg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XAczozMq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3044/1%2A1xmfvdz23tOcxeC354KOMg.png" alt="Javascript code" width="880" height="658"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What can be strange with JavaScript, and confuses a lot of people coming from other languages, is that we can access variables defined in block code outside of these blocks.&lt;/p&gt;

&lt;p&gt;This is because when we declare variables with the reserved word var they are &lt;strong&gt;registered in the nearest function or global lexical environment&lt;/strong&gt;, regardless of block scopes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using let and const&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because of this odd behavior, in the ES6 version of JavaScript two new variable declaration types let and const have been added.&lt;/p&gt;

&lt;p&gt;Unlike var, they define variables in the *&lt;em&gt;nearest lexical environment *&lt;/em&gt;(it can be a block, a loop, a function, or global).&lt;/p&gt;

&lt;p&gt;Making a few changes to the previous code:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nYe48zH4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3044/1%2Aa0PXqGSNwh1uxF6mTHC5xg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nYe48zH4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3044/1%2Aa0PXqGSNwh1uxF6mTHC5xg.png" alt="Javascript code" width="880" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this example, you can't access the text variable outside of the for loop and you can't access the message variable outside of the function hello. Because, in both cases, it's not in their lexical environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Registering identifiers in the lexical environment
&lt;/h2&gt;

&lt;p&gt;One of the principles of the JavaScript language is to be easy to use, so we don’t specify function return types, parameter types, variable types, and so on… And you already know that JavaScript code is executed line by line, so let’s take a look at the following example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Mwvi339m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3044/1%2Auv7wYFBa56i19giRQ5Gj1w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mwvi339m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3044/1%2Auv7wYFBa56i19giRQ5Gj1w.png" alt="Javascript code" width="880" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If code is executed line by line, how can we call the hello function before its declaration? The execution of JavaScript code occurs in two phases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The first phase is activated when a new lexical environment is created, in this phase no code is executed, but, the JavaScript engine visits and registers all variables and functions declared in the current lexical environment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the second phase, JavaScript execution occurs after the first phase was performed, this behavior depends on the variable declaration type (var, let and const) and the environment type (global, function or block).&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--41X7mupW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3044/1%2AtK8wRyrxWnzzd2rnuNc2fA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--41X7mupW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3044/1%2AtK8wRyrxWnzzd2rnuNc2fA.png" alt="Javascript code" width="880" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this example it will be logged undefined in our console, because the first step will be to scan and register the identifier for each variable with the initial value undefined. The value of the variable will be set to the second one when the code execution is actually done.&lt;/p&gt;

&lt;p&gt;This is because variables of type var can have their values undefined and be accessed before their declaration.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If the variables were defined with let or const, JavaScript will throw a ReferenceError saying that we cannot access variables before they are declared.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;In this article we saw why variables of type var can be accessed before their declarations and how declaration functions can be called before their definitions.&lt;/p&gt;

&lt;p&gt;We also saw some interesting JavaScript concepts such as: execution contexts, lexical environments, scopes, identifier resolution and identifiers.&lt;/p&gt;

&lt;p&gt;Thanks for reading! Follow me in this platform to read more development content. Have a great day, see you soon! 👋&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>15 tips to improve as a Javascript developer</title>
      <dc:creator>Justin Graysen</dc:creator>
      <pubDate>Thu, 01 Sep 2022 17:50:09 +0000</pubDate>
      <link>https://dev.to/justin_graysen/15-tips-to-improve-as-a-javascript-developer-197e</link>
      <guid>https://dev.to/justin_graysen/15-tips-to-improve-as-a-javascript-developer-197e</guid>
      <description>&lt;p&gt;In this article I’ll show you 15 excellent tips to master the JavaScript language. We'll learn coding shortcuts, features that few people know and some "tricks" that can be very useful for JS programmers in general.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Warning:&lt;/strong&gt; Not all tips will please everyone. The intention is to show interesting possibilities, but knowing when is the best time to use each of them is up to the programmer (taking into account code readability, for example).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Today’s tips increase in difficulty, so if you find some tip too easy, keep reading and it will get harder (or not, you may already master what I'll teach today 😅).&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%2Fcdn-images-1.medium.com%2Fmax%2F9024%2F0%2Ad-63qTsL8Ng4OMNo" 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%2Fcdn-images-1.medium.com%2Fmax%2F9024%2F0%2Ad-63qTsL8Ng4OMNo" alt="Photo by [Artem Maltsev](https://unsplash.com/@art_maltsev?utm_source=medium&amp;amp;utm_medium=referral) on [Unsplash](https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Null and undefined evaluation
&lt;/h2&gt;

&lt;p&gt;One of the things that we soon learn in JavaScript is that not everything is what it seems to be and that there are many ways that a variable can cause you problems in a dynamic language like this. A very common test that can be done is to check if a variable is null or undefined, or even "empty", as the example below:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let username;
if (name !== null || name !== undefined || name !== '') {
   userName = name;
} else {
   userName = "";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;A simpler way to do the same evaluation would be:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let userName = name || "";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you don't believe it, please test it out!&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Array definition
&lt;/h2&gt;

&lt;p&gt;So you have to create an Array object and then populate it with its elements, right? Your code will probably look something like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let a = new Array(); 
a[0] = "s1"; 
a[1] = "s2"; 
a[2] = "s3";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;How about doing the same thing in just one line?&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let a = ["s1", "s2", "s3"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Pretty nice, huh!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Warning: I know this tip's simpler but bare with me, it may help some folks starting from other programming languages&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  3. Ternary Operator
&lt;/h2&gt;

&lt;p&gt;The famous "one-line if/else", the ternary operator is already an old acquaintance for many programmers of C-like languages like Java and C#. It exists in JS as well and can easily transform blocks of code like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let big;
if (x &amp;gt; 10) {
    big = true;
}
else {
    big = false;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;In this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let big = x &amp;gt; 10 ? true : false;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Or even simpler:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let big = x &amp;gt; 10;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;But does it work with function calls as well? If I have two different functions and I want to call one in case the if is true and one in case the if is false, typically you would do something like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function x() { console.log('x') };
function y() { console.log('y') };

let z = 3;
if (z == 3) {
    x();
} else {
    y();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;But, hold on to your chair…you can do the same function call using ternary:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function x() { console.log('x') };
function y() { console.log('y') };

let z = 3;
(z==3 ? x : y)(); // Shortcut
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Also worth an honorable mention are the ifs that test whether a variable is true, where some programmers still do it that way:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (likeJs === true)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;When they can just do it like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (likeJs)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  4. Declaring variables
&lt;/h2&gt;

&lt;p&gt;Yes, even the declaration of variables has its quirks. Although this is not exactly a secret, you still see a lot of programmers making declarations like this:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let x;
let y;
let z = 3;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;When they could do this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let x, y, z = 3;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  5. Using RegExp
&lt;/h2&gt;

&lt;p&gt;Regular Expressions are a great tool to create elegant and powerful code when it comes to textual analysis and validation, and data extraction in the case of some types of web crawlers.&lt;/p&gt;

&lt;p&gt;You can learn more on how to use regular expressions in these links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://regexr.com/" rel="noopener noreferrer"&gt;https://regexr.com/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://regex101.com/" rel="noopener noreferrer"&gt;https://regex101.com/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  6. charAt() shorcut
&lt;/h2&gt;

&lt;p&gt;So you want to select just one character from a string, at a specific position, right? I bet the first thing that comes to your mind is to use the charAt function, like below:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"string".charAt(0);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;But get this, you get the same result by remembering that analogy of the String being an array of chars:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"string"[0]; // Returns 's'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  7. Powers of base 10
&lt;/h2&gt;

&lt;p&gt;This is just a leaner notation for Base-10 exponential numbers or the famous &lt;strong&gt;numbers full of zeros&lt;/strong&gt;. For those of you who are close to mathematics, you won’t be too surprised to see one of these, but a number 10,000 can easily be replaced in JS by 1e4, that is, 1 followed by 4 zeros, as below:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for (let i = 0; i &amp;lt; 1e4; i++) {
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  8. Template Literals
&lt;/h2&gt;

&lt;p&gt;This semantic feature is unique to ECMAScript version 6 or higher and greatly simplifies reading string concatenations in variable sets. For example, the concatenation below:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const question = “My number is “ + number + “, ok?”
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This one is simple, and you have probably done worse concatenations. As of ES6, we can do this concatenation using template literals:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const question = `My number is ${number}, ok?`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  9. Arrow Functions
&lt;/h2&gt;

&lt;p&gt;Arrow Functions are shortened ways to declare functions. Yes, more ways to do the same thing that have worked since the first version of JavaScript. For example, below is a sum function:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function sum(n1,n2){
   return n1 + n2;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;We can also declare this function like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const sum = function(n1,n2){
   return n1+n2;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;But using arrow functions:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const sum = (n1,n2) =&amp;gt; n1 + n2;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  10. Argument Destructuring
&lt;/h2&gt;

&lt;p&gt;This tip is for those functions that are full of parameters and you decided to replace all of them with one object. Or for those functions that really require a configuration object as parameter.&lt;/p&gt;

&lt;p&gt;So far no problem, after all who has never experienced this? The problem is having to keep accessing the object that was passed by parameter followed by each property we want to read, right? Like this:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function init(config){
   const s = config.s;
   const t = config.t;
   return s + t;// or config.s + config.t
}

init({s: "1", t: "2"});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The argument destructuring feature serves precisely to simplify this and at the same time help code readability by replacing the previous statement with this one:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function init({s, t}){
   return s + t;
}

init({s: 1, t: 2});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;And to top it off, we can still add default values in properties of our parameter object:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function init({s = 10, t = 20}){
   return s + t;
}

init({s: 1});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This way, the value of s will be 1, but the value of t will default to this property, which will be 20.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Key-Value Names
&lt;/h2&gt;

&lt;p&gt;A very addictive feature is the abbreviated way of assigning properties to objects. Imagine you have a person object that has a name property that is going to be assigned via a name variable. It would look like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const name = "Joseph"
const person = { name: name }

// { name: "Joseph" }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;While you can do it like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const name = "Joseph"
const person = { name }

// { name: "Joseph" }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;That is, if your variable has the same name as the property, you don’t need to call it, just pass the variable. The same is true for multiple properties:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const name = "Joseph"
const canCode = true
const person = { name, canCode }
// { name: "Joseph", canCode: true }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  12. Map
&lt;/h2&gt;

&lt;p&gt;Consider the following array of objects:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const animals = [
    {
        "name": "cat",
        "size": "small",
        "weight": 5
    },
    {
        "name": "dog",
        "size": "small",
        "weight": 10
    },
    {
        "name": "lion",
        "size": "medium",
        "weight": 150
    },
    {
        "name": "elefante",
        "size": "large",
        "weight": 5000
    }
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now imagine that we want to take just the names of the animals to add to another array. Normally we would do this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let animalNames = [];

for (let i = 0; i &amp;lt; animals.length; i++) {
    animalNames.push(animals[i].name);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;But with Map, we can do this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let animalNames = animais.map((animal) =&amp;gt; {
    return animal.nome;
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Note that map expects a function by parameter with at most three arguments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The first is the &lt;strong&gt;current object&lt;/strong&gt; (as in a foreach)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The second is the &lt;strong&gt;index&lt;/strong&gt; of the current iteration&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The third is the &lt;strong&gt;entire array&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Obviously this function will be called once for each object in the animal array.&lt;/p&gt;

&lt;h2&gt;
  
  
  13. Filter
&lt;/h2&gt;

&lt;p&gt;What if we want to iterate through the same array of animal objects as in the previous tip, but this time returning only those whose size is “small”?&lt;/p&gt;

&lt;p&gt;How would we do that with regular JS?&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let smallAnimals = [];

for (let i = 0; i &amp;lt; animals.length; i ++) {
    if (animals[i].size === "small") {
       smallAnimals.push(animals[i])
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;However, using the &lt;strong&gt;filter&lt;/strong&gt; operator, we can do this in a much less verbose and clearer way:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let smallAnimals = animais.filter((animal) =&amp;gt; {
    return animal.size === "small"
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Filter expects a function by parameter with the argument that is the object of the current iteration (as in a foreach) and it should return a boolean indicating whether this object will be part of the return array or not (true indicates that it passed the test and will be part of it).&lt;/p&gt;

&lt;h2&gt;
  
  
  14. Reduce
&lt;/h2&gt;

&lt;p&gt;Another important feature of Javascript it the &lt;strong&gt;reduce&lt;/strong&gt;. It allows us to do grouping and calculations on top of collections in a very easy and powerful way. For example, if we wanted to add up the weight of all the animals in our array of animal objects, how would we do it?&lt;/p&gt;

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

for (let i = 0; i &amp;lt; animals.length; i++) {
    totalWeight += animals[i].weight;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;But with reduce we can do this instead:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let totalWeight = animals.reduce((total, animal) =&amp;gt; {
    return total += animal.weight;
}, 0)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Reduce expects a function by parameter with the following arguments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The first is the current value of the &lt;strong&gt;accumulator&lt;/strong&gt; variable (at the end of all iterations, it will contain the final value)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The second argument is the &lt;strong&gt;object of the current iteration&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The third argument is the &lt;strong&gt;index&lt;/strong&gt; of the current iteration&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The fourth argument is the &lt;strong&gt;array with all objects that will be iterated&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This function will be executed once on each object in the array, returning the aggregated value at the end of its execution.&lt;/p&gt;

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

&lt;p&gt;What about you? Do you have any other tips to add to the list? Leave it in the comments!&lt;/p&gt;

&lt;p&gt;Thanks for reading! Follow me in this platform to read more development content. Have a great day, see you soon! 👋&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Best 4 IDEs for Javascript to use in 2022: pros and cons</title>
      <dc:creator>Justin Graysen</dc:creator>
      <pubDate>Tue, 23 Aug 2022 15:48:00 +0000</pubDate>
      <link>https://dev.to/justin_graysen/best-4-ides-for-javascript-to-use-in-2022-pros-and-cons-20d6</link>
      <guid>https://dev.to/justin_graysen/best-4-ides-for-javascript-to-use-in-2022-pros-and-cons-20d6</guid>
      <description>&lt;p&gt;To increase your productivity when coding Javascript, I brought this &lt;strong&gt;selection of IDEs&lt;/strong&gt; that will help you a lot!&lt;/p&gt;

&lt;p&gt;JS is the most popular language for web development. It integrates well with CSS and HTML, which together can &lt;strong&gt;make incredible applications&lt;/strong&gt;. A language as popular as this must have a lot of IDEs and editor available, right?&lt;/p&gt;

&lt;p&gt;But this high numbers of tools can be &lt;strong&gt;confusing for new developers&lt;/strong&gt;. There are many options and functionalities. So, to help you choose the best one, check out this article and &lt;strong&gt;find the best Javascript IDE for you.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--f4R4vG8H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AZ9Vnhb6jSWvVw2XN" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--f4R4vG8H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AZ9Vnhb6jSWvVw2XN" alt="Code example" width="880" height="660"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is an IDE?
&lt;/h2&gt;

&lt;p&gt;An IDE (Integrated Development Environment) is a software that allows you to code with many extra features instead of just typing lines of code. &lt;strong&gt;With IDEs, you can edit, modify, debug, execute and test your code.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;IDEs come with many extra features, like automatic text completion, that increases your coding speed and productivity. In this article, I curated a list of &lt;strong&gt;the best 4 free IDEs&lt;/strong&gt;, all of which are in the top 10 most used IDEs according to a &lt;a href="https://pypl.github.io/IDE.html"&gt;GitHub research&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5Fz112-q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2ARNL8sb7qZl5JlYYKva8uUA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5Fz112-q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2ARNL8sb7qZl5JlYYKva8uUA.png" alt="Ranking of the most used IDEs" width="880" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Differences between IDEs and code editors
&lt;/h2&gt;

&lt;p&gt;Using an IDE is preferred over code editors because of the IDE’s ability to debug the code. Furthermore, IDEs have support for ALM systems (Application Lifecycle Management).&lt;/p&gt;

&lt;p&gt;In short, an IDE can provide the following benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A code editor (that shows you syntax errors while typing)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugger (to find errors in the code)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compiler and interpreter&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Automatic compilation (creating script to automate many tasks, like documentation for example)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Syntax highlighting&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quick access to class or function definition&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Shortcuts to execute commands&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Easy-to-use user interface&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Many code libraries&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Automatic code completion&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Support to different programming languages&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cloud development&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mobile development&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, today the difference between source code editors and IDEs is blurred, since there are code editors that have slowly started to offer similar functionality to the IDEs.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose a Javascript IDE
&lt;/h2&gt;

&lt;p&gt;To make a good choice, you need to be clear about &lt;strong&gt;what is important to you and to the project you will be working on.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Do you code alone or in larger teams? What types of functionality are on your most relevant list? Do you prefer an open source IDE or not?&lt;/p&gt;

&lt;p&gt;We have already talked about the pros of using an IDE, but &lt;strong&gt;what about the cons?&lt;/strong&gt; Are there any? Yes. Basically, because they are complex and heavy software, they demand a lot from the hardware (they need a lot of memory both to be installed and to run).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So depending on your working conditions it might be better to use a code editor, which are usually lighter (and free) programs.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The IDE should save you time so that you can study more and become more creative.&lt;/p&gt;

&lt;p&gt;The following lists of pros and cons of the IDEs were compiled based on the opinions of some novice and experienced developers, as well as the specifications described by the maintainers of each software.&lt;/p&gt;

&lt;p&gt;Many of their functionalities are the same, especially the basic ones such as syntax highlighting, debugging, extension by plugins, refactoring, etc. &lt;strong&gt;The question here will be the quality vs. usability that each offers.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Visual Studio Code
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Z2QgzDIo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2024/0%2Ate8WbNV5TlCCNGHw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Z2QgzDIo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2024/0%2Ate8WbNV5TlCCNGHw.png" alt="Visual Studio Code" width="880" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Company:&lt;/strong&gt; Microsoft&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Platforms:&lt;/strong&gt; Windows, Linux, Mac&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;**Open source: &lt;a href="https://github.com/microsoft/vscode"&gt;**Yes&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Languages*:&lt;/strong&gt;* more than 30 languages, like Java, &lt;strong&gt;JavaScript&lt;/strong&gt;, C#, C++, PHP, SQL, R, Python, TypeScript, JSON, XML etc.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;ASP.NET 5 and Node.js, plus great WSL integration&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Good debugger&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Support for a terminal inside the window&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Syntax highlighting&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Works directly with Github&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Good auto-completion (IntelliSense)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Comes practically zeroed when downloaded, which makes it lightweight!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Minimalist, may not be suitable for very large projects&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To support a language not supported natively, you have to look for extensions in the store and configure them manually&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging tools could be better&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Interface can scare beginners.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="http://Download%20VS%20Code"&gt;*Download VS Code&lt;/a&gt;*&lt;/p&gt;

&lt;h3&gt;
  
  
  Eclipse
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cFYaPqNP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AvEf6ZE4KbeN1xdun.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cFYaPqNP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AvEf6ZE4KbeN1xdun.jpg" alt="Eclipse" width="487" height="248"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Company:&lt;/strong&gt; IBM/Eclipse Foundation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Platforms:&lt;/strong&gt; Windows, Linux, Mac, Solaris&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Open source:&lt;/strong&gt; Yes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Languages:&lt;/strong&gt; initially it was built for Java only, but today it works well with &lt;strong&gt;JavaScript&lt;/strong&gt;, C, C++, PHP, Python, Kotlin, and more.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Great project management (Application Lifecycle Management)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Almost all packages support Git integration&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Editable syntax highlighting&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;High-level debugging&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Good auto-completion&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Programming in several languages like Java, JavaScript, PHP, C, C++, C#, Ruby, Phyton, Haskel, Cobol, and many others&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Flexible environment because it is modular&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ability to integrate JUnit&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remote debugging (when using JVM)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Some beginners may be scared by the amount of possibilities&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some plugins will not always work very well, so choose the most well established ones in the community&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Many of the changes need a reboot to work&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.eclipse.org/downloads/"&gt;*Download Eclipse&lt;/a&gt;*&lt;/p&gt;

&lt;h3&gt;
  
  
  Atom
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R3VIo964--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2048/0%2A3yhxhrmJeAeRgLeg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R3VIo964--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2048/0%2A3yhxhrmJeAeRgLeg.jpeg" alt="Atom" width="880" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Company:&lt;/strong&gt; Github&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Platforms:&lt;/strong&gt; Windows, Linux, Mac&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Open source:&lt;/strong&gt; &lt;a href="https://gitbox.apache.org/repos/asf?p=netbeans.git"&gt;Yes&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Languages:&lt;/strong&gt; &lt;strong&gt;JavaScript&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Highly integrated with Github&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Great for large, complex projects&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Automatic error search&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Easy to install new plugins&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Permanent display of all project files&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fast code window splitting&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Has more than 2000 packages and 600 themes for customization (the search can be done inside the IDE)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Good auto-completion&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Accepts collaborative work on a project’s files&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;It takes some time getting your plugins and configuration sorted&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It’s a browser-based app (runs on Electron), and is a bit slow to load and sometimes to respond&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://atom.io/"&gt;*Download Atom&lt;/a&gt;*&lt;/p&gt;

&lt;h3&gt;
  
  
  NetBeans
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kKWOiUdJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AOosVx924wdeYBCS0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kKWOiUdJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AOosVx924wdeYBCS0.jpg" alt="NetBeans" width="880" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Company:&lt;/strong&gt; Oracle&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Platforms:&lt;/strong&gt; Windows, Linux, Mac, BSD, Solaris&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Open source:&lt;/strong&gt; Yes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Languages:&lt;/strong&gt; initially built for Java only, but today it works well with &lt;strong&gt;JavaScript&lt;/strong&gt;, PHP, Python, HTML5, CSS3 and more.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Syntax highlighting&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimal refactoring&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Automatic error search&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Intuitive interface (drag and drop function)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dynamic and static libraries&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remote development capability&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Supports multiple compilers, including CLang / LLVM, Cygwin, GNU, MinGW and Oracle Solaris Studio&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integrated issue tracking with Jira and Bugzilla&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ability to search for tasks, save searches, update and resolve tasks in its log repository&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Needs a lot of memory, so can get slow on some machines or large projects&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Annoying pop-ups&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://netbeans.apache.org/"&gt;*Download Netbeans&lt;/a&gt;*&lt;/p&gt;

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

&lt;p&gt;That’s it for today. Now we know some of the most popular IDEs for Javascript! I hope this article helped you start your journey with programming.&lt;/p&gt;

&lt;p&gt;Thanks for reading! Follow me in this platform to read more developer content. Have a great day, see you soon! 👋&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Top 12 Javascript books to read in 2022</title>
      <dc:creator>Justin Graysen</dc:creator>
      <pubDate>Mon, 22 Aug 2022 20:29:29 +0000</pubDate>
      <link>https://dev.to/justin_graysen/top-12-javascript-books-to-read-in-2022-3ii5</link>
      <guid>https://dev.to/justin_graysen/top-12-javascript-books-to-read-in-2022-3ii5</guid>
      <description>&lt;p&gt;If you've already learned HTML and CSS and now want to learn a programming language, I recommend that you learn &lt;strong&gt;JavaScript&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;JavaScript is one of the leading names when it comes to front-end development. &lt;strong&gt;Moreover, it is one of the best programming languages to learn.&lt;/strong&gt; There are several ways to learn Javascript, among them are books.&lt;/p&gt;

&lt;p&gt;Books are a great way to learn almost anything, including programming languages. So, here is the list of the &lt;strong&gt;12 best JavaScript books for developers&lt;/strong&gt; of any skill level, including those new to programming.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RuJY_juR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3840/0%2AjlRTiwGwPurxXK2A.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RuJY_juR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3840/0%2AjlRTiwGwPurxXK2A.jpg" alt="Javascript Logo" width="880" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. JavaScript: The Definitive Guide
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cNAm2gX5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2ApDlEFkvCfQtIod-H.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cNAm2gX5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2ApDlEFkvCfQtIod-H.jpg" alt="JavaScript: The Definitive Guide" width="381" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;JavaScript is the programming language of the web and is used by more software developers today than any other programming language. For nearly 25 years this best seller has been the go-to guide for JavaScript programmers. The seventh edition is fully updated to cover the 2020 version of JavaScript, and new chapters cover classes, modules, iterators, generators, Promises, async/await, and meta programming. You’ll find illuminating and engaging example code throughout.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://amzn.to/3a2xffF"&gt;Link to Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. You Don’t Know JS Book Series
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RC0J9Ua9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AlBCzzPe4g0fWPK5B.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RC0J9Ua9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AlBCzzPe4g0fWPK5B.jpg" alt="You Don’t Know JS Book Series" width="333" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It seems like there’s never been as much widespread desire before for a better way to deeply learn the fundamentals of JavaScript. But with a million blogs, books, and videos out there, just where do you START? Look no further!The worldwide best selling ‘You Don’t Know JS’ book series is back for a 2nd edition: ‘You Don’t Know JS Yet’. All 6 books are brand new, rewritten to cover all sides of JS for 2020 and beyond.’Get Started’ prepares you for the journey ahead, first surveying the language then detailing how the rest of the You Don t Know JS Yet book series guides you to knowing JS more deeply.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com/-/pt/dp/B084DFZ6GW/ref=sr_1_1?keywords=you+don%27t+know+js+yet&amp;amp;qid=1660877272&amp;amp;sr=8-1"&gt;Link to Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Eloquent Javascript
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jmADCZRV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2A9L8srK-9YQUDp45Z.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jmADCZRV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2A9L8srK-9YQUDp45Z.jpg" alt="Eloquent Javascript" width="379" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;JavaScript lies at the heart of almost every modern web application, from social apps like Twitter to browser-based game frameworks like Phaser and Babylon. Though simple for beginners to pick up and play with, JavaScript is a flexible, complex language that you can use to build full-scale applications.&lt;br&gt;
 This much anticipated and thoroughly revised third edition of Eloquent JavaScript dives deep into the JavaScript language to show you how to write beautiful, effective code. It has been updated to reflect the current state of Java¬Script and web browsers and includes brand-new material on features like class notation, arrow functions, iterators, async functions, template strings, and block scope. A host of new exercises have also been added to test your skills and keep you on track.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com/-/pt/dp/1593279507/ref=sr_1_1?keywords=eloquent+javascript&amp;amp;qid=1660877375&amp;amp;sprefix=eloquent+j%2Caps%2C180&amp;amp;sr=8-1"&gt;Link to Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Effective JavaScript
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YGC6Dc_p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2ABzW5E7ZNWkUPC49-.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YGC6Dc_p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2ABzW5E7ZNWkUPC49-.jpg" alt="Effective JavaScript" width="382" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In order to truly master JavaScript, you need to learn how to work effectively with the language’s flexible, expressive features and how to avoid its pitfalls. No matter how long you’ve been writing JavaScript code, Effective JavaScript will help deepen your understanding of this powerful language, so you can build more predictable, reliable, and maintainable programs. Author David Herman, with his years of experience on ECMA's JavaScript standardization committee, illuminates the language’s inner workings as never before — helping you take full advantage of JavaScript’s expressiveness.&lt;br&gt;
 Reflecting the latest versions of the JavaScript standard, the book offers well-proven techniques and best practices you’ll rely on for years to come.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com/Effective-JavaScript-Specific-Software-Development/dp/0321812182/ref=as_li_ss_tl?dchild=1&amp;amp;keywords=effective+javascript&amp;amp;qid=1596643399&amp;amp;sr=8-1&amp;amp;linkCode=sl1&amp;amp;tag=daolf-20&amp;amp;linkId=6ce7d0eb8edca69387226b2ba70b6324&amp;amp;language=en_US"&gt;Link to Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Secrets of the JavaScript Ninja
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7UhF9h88--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AEF1E9GKEjmPvq552.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7UhF9h88--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AEF1E9GKEjmPvq552.jpg" alt="Secrets of the JavaScript Ninja" width="399" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;More than ever, the web is a universal platform for all types of applications, and JavaScript is the language of the web. If you’re serious about web development, it’s not enough to be a decent JavaScript coder. You need to be ninja-stealthy, efficient, and ready for anything. This book shows you how.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/1617292850/ref=as_li_ss_tl?_encoding=UTF8&amp;amp;qid=1596669830&amp;amp;sr=8-1&amp;amp;linkCode=sl1&amp;amp;tag=daolf-20&amp;amp;linkId=c720b6d3ff2c793b7fbb276d97599bb9&amp;amp;language=en_US"&gt;Link to Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. JavaScript Patterns
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---yeyDpKy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AHjCo58w69oAICPtj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---yeyDpKy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AHjCo58w69oAICPtj.jpg" alt="JavaScript Patterns" width="381" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What’s the best approach for developing an application with JavaScript? This book helps you answer that question with numerous JavaScript coding patterns and best practices. If you’re an experienced developer looking to solve problems related to objects, functions, inheritance, and other language-specific categories, the abstractions and code templates in this guide are ideal — whether you’re using JavaScript to write a client-side, server-side, or desktop application.&lt;br&gt;
 Written by JavaScript expert Stoyan Stefanov — Senior Yahoo! Technical and architect of YSlow 2.0, the web page performance optimization tool — JavaScript Patterns includes practical advice for implementing each pattern discussed, along with several hands-on examples.&lt;br&gt;
 You’ll also learn about anti-patterns: common programming approaches that cause more problems than they solve\nExplore useful habits for writing high-quality JavaScript code, such as avoiding globals, using single var declarations, and more&lt;br&gt;
 Learn why literal notation patterns are simpler alternatives to constructor functions. Discover different ways to define a function in JavaScript. Create objects that go beyond the basic patterns of using object literals and constructor functions&lt;br&gt;
 Learn the options available for code reuse and inheritance in JavaScript\nStudy sample JavaScript approaches to common design patterns such as Singleton, Factory, Decorator, and more.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com/JavaScript-Patterns-Better-Applications-Coding/dp/0596806752/ref=as_li_ss_tl?dchild=1&amp;amp;keywords=javascript+patterns&amp;amp;qid=1596643572&amp;amp;sr=8-1&amp;amp;linkCode=sl1&amp;amp;tag=daolf-20&amp;amp;linkId=e2a8a4a0f51f1f05a8fae2cd9ed3d44c&amp;amp;language=en_US"&gt;Link to Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7. The Principles of Object-Oriented JavaScript
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gvRIwZ45--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2ASuoG6fs2wABVhMGg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gvRIwZ45--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2ASuoG6fs2wABVhMGg.jpg" alt="The Principles of Object-Oriented JavaScript" width="378" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you’ve used a more traditional object-oriented language, such as C++ or Java, JavaScript probably doesn’t seem object-oriented at all. It has no concept of classes, and you don’t even need to define any objects in order to write code. But don’t be fooled — JavaScript is an incredibly powerful and expressive object-oriented language that puts many design decisions right into your hands.&lt;br&gt;
 In The Principles of Object-Oriented JavaScript, Nicholas C. Zakas thoroughly explores JavaScript’s object-oriented nature, revealing the language’s unique implementation of inheritance and other key characteristics. You’ll learn:&lt;br&gt;
 • The difference between primitive and reference values&lt;br&gt;
 • What makes JavaScript functions so unique\n–The various ways to create objects&lt;br&gt;
 • How to define your own constructors\n–How to work with and understand prototypes&lt;br&gt;
 • Inheritance patterns for types and objects&lt;br&gt;
 The Principles of Object-Oriented JavaScript will leave even experienced developers with a deeper understanding of JavaScript. Unlock the secrets behind how objects work in JavaScript so you can write clearer, more flexible, and more efficient code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com/Principles-Object-Oriented-JavaScript-Nicholas-Zakas/dp/1593275404/ref=as_li_ss_tl?crid=1X6PBZUKN5THB&amp;amp;dchild=1&amp;amp;keywords=principles+of+object-oriented+javascript&amp;amp;qid=1596646260&amp;amp;sprefix=principles+of+object+oriented+javascript,aps,259&amp;amp;sr=8-1&amp;amp;linkCode=sl1&amp;amp;tag=daolf-20&amp;amp;linkId=72e6ade1e294bb37f6b95508271685ce&amp;amp;language=en_US"&gt;Link to Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  8. JavaScript and JQuery: Interactive Front-End Web Development
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y_qJGfPT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AW9zuZUxxODZ6Rmmf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y_qJGfPT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AW9zuZUxxODZ6Rmmf.jpg" alt="JavaScript and JQuery: Interactive Front-End Web Development" width="402" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This book was written for anyone who wants to use JavaScript to make their websites a little more interesting, engaging, interactive, or usable. In particular, it is aimed at people who do not have a degree in computer science (well, not yet anyway). Programming books can be intimidating, so we wanted to create a book that taught readers how to use JavaScript in a gentler, more visual way. And importantly, we did not want to assume that the reader had any experience of programming beyond the ability to create a web page in HTML and CSS. (After all, many kinds of people are creating websites these days, and not all of us come from a programming background.)&lt;br&gt;
 So, if you have ever struggled to get a script working on your web pages, want a better idea of how to customize scripts, or want to write your own scripts from scratch, this book was written for you.We can’t promise to remove the unfamiliar terms that programmers use, but we do tell you what they mean (with the aid of visual examples and diagrams) so that JavaScript won’t seem like a foreign language any more.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com/JavaScript-JQuery-Interactive-Front-End-Development/dp/1118531647/ref=as_li_ss_tl?dchild=1&amp;amp;keywords=javascript+and+jquery&amp;amp;qid=1596643478&amp;amp;sr=8-2&amp;amp;linkCode=sl1&amp;amp;tag=daolf-20&amp;amp;linkId=86b572bcd6a6c05d6cc4552356ef6080&amp;amp;language=en_US"&gt;Link to Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Beginning JavaScript
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9jMcuXTr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AuXP6Va2dlU3ZqZHD.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9jMcuXTr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AuXP6Va2dlU3ZqZHD.jpg" alt="Beginning JavaScript" width="399" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Beginning JavaScript 5th Edition shows you how to work effectively with JavaScript frameworks, functions, and modern browsers, and teaches more effective coding practices using HTML5.&lt;br&gt;
 This new edition has been extensively updated to reflect the way JavaScript is most commonly used today, introducing you to the latest tools and techniques available to JavaScript developers. Coverage includes modern coding practices using HTML5 markup, the JSON data format, DOM APIs, the jQuery framework, and more.&lt;br&gt;
 Exercises with solutions provide plenty of opportunity to practice, and the companion website offers downloadable code for all examples given in the book. Learn JavaScript using the most up to date coding style. Understand JSON, functions, events, and feature detection.&lt;br&gt;
 Utilize the new HTML5 elements and the related API. Explore new features including geolocation, local storage, and more. JavaScript has shaped the Web from a passive medium into one that is rich, dynamic, and interactive. No matter the technology on the server side, it’s JavaScript that makes it come alive in the browser. To learn JavaScript the way it’s used today, Beginning JavaScript, 5th Edition is your concise guide.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com/Beginning-JavaScript-Jeremy-McPeak/dp/1118903331/ref=as_li_ss_tl?dchild=1&amp;amp;keywords=beginning+javascript&amp;amp;qid=1596646335&amp;amp;sr=8-1&amp;amp;linkCode=sl1&amp;amp;tag=daolf-20&amp;amp;linkId=cd12a81357735c84b0396d62fb63451e&amp;amp;language=en_US"&gt;Link to Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Speaking JavaScript
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oYyLAPOo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AucoqCSws8rUxu9KA.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oYyLAPOo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AucoqCSws8rUxu9KA.jpg" alt="Speaking JavaScript" width="381" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Like it or not, JavaScript is everywhere these days — from browser to server to mobile — and now you, too, need to learn the language or dive deeper than you have. This concise book guides you into and through JavaScript, written by a veteran programmer who once found himself in the same position.&lt;br&gt;
 Speaking JavaScript helps you approach the language with four standalone sections. First, a quick-start guide teaches you just enough of the language to help you be productive right away. More experienced JavaScript programmers will find a complete and easy-to-read reference that covers each language feature in depth.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com/Speaking-JavaScript-Depth-Guide-Programmers/dp/1449365035/ref=as_li_ss_tl?crid=1F5XALZONDFZV&amp;amp;dchild=1&amp;amp;keywords=speaking+javascript&amp;amp;qid=1596646419&amp;amp;sprefix=speaking+javascript,aps,253&amp;amp;sr=8-1&amp;amp;linkCode=sl1&amp;amp;tag=daolf-20&amp;amp;linkId=858b8c0d8ca70da3c0fe87e255870ce7&amp;amp;language=en_US"&gt;Link to Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Programming JavaScript Applications
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NL9PUlX7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AGfvx4PdZSMlKuS2Z.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NL9PUlX7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AGfvx4PdZSMlKuS2Z.jpg" alt="Programming JavaScript Applications" width="381" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Take advantage of JavaScript’s power to build robust web-scale or enterprise applications that are easy to extend and maintain. By applying the design patterns outlined in this practical book, experienced JavaScript developers will learn how to write flexible and resilient code that’s easier — yes, easier — to work with as your code base grows. JavaScript may be the most essential web programming language, but in the real world, JavaScript applications often break when you make changes.&lt;br&gt;
 With this book, author Eric Elliott shows you how to add client- and server-side features to a large JavaScript application without negatively affecting the rest of your code. Examine the anatomy of a large-scale JavaScript application. Build modern web apps with the capabilities of desktop applications. Learn best practices for code organization, modularity, and reuse. Separate your application into different layers of responsibility. Build efficient, self-describing hypermedia APIs with Node.js. Test, integrate, and deploy software updates in rapid cycles. Control resource access with user authentication and authorization. Expand your application’s reach through internationalization&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com/Programming-JavaScript-Applications-Architecture-Libraries/dp/1491950293/ref=as_li_ss_tl?crid=GXEYY2TNAFRE&amp;amp;dchild=1&amp;amp;keywords=programming+javascript+applications&amp;amp;qid=1596646528&amp;amp;sprefix=programming+javascript,aps,254&amp;amp;sr=8-1&amp;amp;linkCode=sl1&amp;amp;tag=daolf-20&amp;amp;linkId=bd1df4940dedfa3b00e22a97bbc730b3&amp;amp;language=en_US"&gt;Link to Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Professional JavaScript for Web Developers
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a9eH54TH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2A5XjlrJYCgBeer4Mh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a9eH54TH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2A5XjlrJYCgBeer4Mh.jpg" alt="Professional JavaScript for Web Developers" width="399" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Professional JavaScript for Web Developers is the essential guide to next-level JavaScript development. Written for intermediate-to-advanced programmers, this book jumps right into the technical details to help you clean up your code and become a more sophisticated JavaScript developer. From JavaScript-specific object-oriented programming and inheritance, to combining JavaScript with HTML and other markup languages, expert instruction walks you through the fundamentals and beyond.&lt;br&gt;
 At 1200 pages, this book is the most comprehensive JavaScript reference available anywhere. This new fourth edition has been updated to cover through ECMAScript 2019; new frameworks and libraries, new techniques, new APIs, and more are explained in detail for the professional developer, with a practical focus that helps you put your new skills to work on real-world projects.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com/Professional-JavaScript-Developers-Matt-Frisbie/dp/1119366445/ref=as_li_ss_tl?crid=3615T8YS079OO&amp;amp;dchild=1&amp;amp;keywords=professional+javascript+for+web+developers&amp;amp;qid=1596646694&amp;amp;sprefix=professional+javascr,aps,260&amp;amp;sr=8-1&amp;amp;linkCode=sl1&amp;amp;tag=daolf-20&amp;amp;linkId=86c1ef16b2e1ea32cde55c7ce2ddef9a&amp;amp;language=en_US"&gt;Link to Amazon&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;That’s it for today. I hope some of these books can help you start your journey with programming.&lt;/p&gt;

&lt;p&gt;Thanks for reading! Follow me in this platform to read more development content. Have a great day, see you soon! 👋&lt;/p&gt;

</description>
      <category>programming</category>
      <category>javascript</category>
      <category>books</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Top 10 programming books to read in 2022</title>
      <dc:creator>Justin Graysen</dc:creator>
      <pubDate>Mon, 22 Aug 2022 12:20:04 +0000</pubDate>
      <link>https://dev.to/justin_graysen/top-10-programming-books-to-read-in-2022-5ggo</link>
      <guid>https://dev.to/justin_graysen/top-10-programming-books-to-read-in-2022-5ggo</guid>
      <description>&lt;p&gt;Not long ago, programming was only a hobby for geeks playing with computers in their basements. Recently, programming has moved from a hobby to an &lt;strong&gt;excellent career skill&lt;/strong&gt; that you can start learning TODAY.&lt;/p&gt;

&lt;p&gt;The benefits of programming are many, to name a few:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Grow in your current job&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Get a new job in programming careers that have great earning potential&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Work from home&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Start your own business&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improve your logic and reasoning skills&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Because of those and many more reasons, I curated a list of the &lt;strong&gt;best 10 books to learn programming&lt;/strong&gt; in 2022. Let's check it out! 😁&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MR_x0WyC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/11014/0%2ANPuHjIU0hJWGdwhw" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MR_x0WyC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/11014/0%2ANPuHjIU0hJWGdwhw" alt="Photo by [Emile Perron](https://unsplash.com/@emilep?utm_source=medium&amp;amp;utm_medium=referral) on [Unsplash](https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral)" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Soft Skills: The software developer’s life manual
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0gZLDg7q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2ANrLwHtXLVn0eZCqt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0gZLDg7q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2ANrLwHtXLVn0eZCqt.jpg" alt="Soft Skills: The software developer’s life manual" width="398" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For most software developers, coding is the fun part. The hard bits are dealing with clients, peers, and managers, staying productive, achieving financial security, keeping yourself in shape, and finding true love. This book is here to help.&lt;br&gt;
 This book is a guide to a well-rounded, satisfying life as a technology professional. In it, developer and life coach John Sonmez offers advice to developers on important “soft” subjects like career and productivity, personal finance and investing, and even fitness and relationships. Arranged as a collection of 71 short chapters, this fun-to-read book invites you to dip in wherever you like. A Taking Action section at the end of each chapter shows you how to get quick results. Soft Skills will help make you a better programmer, a more valuable employee, and a happier, healthier person.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://amzn.to/2HziTGl"&gt;Check it on Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Cracking the Coding Interview
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---EON9A_V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AmnHwWcheu2VyDa3i.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---EON9A_V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AmnHwWcheu2VyDa3i.jpg" alt="Cracking the Coding Interview" width="350" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I am not a recruiter. I am a software engineer. And as such, I know what it’s like to be asked to whip up brilliant algorithms on the spot and then write flawless code on a whiteboard. I’ve been through this as a candidate and as an interviewer.&lt;br&gt;
 This book is here to help you through this process, teaching you what you need to know and enabling you to perform at your very best. I’ve coached and interviewed hundreds of software engineers. The result is this book.&lt;br&gt;
 Learn how to uncover the hints and hidden details in a question, discover how to break down a problem into manageable chunks, develop techniques to unstick yourself when stuck, learn (or re-learn) core computer science concepts, and practice on 189 interview questions and solutions. These interview questions are real; they are not pulled out of computer science textbooks. They reflect what’s truly being asked at the top companies, so that you can be as prepared as possible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://amzn.to/37CuhvD"&gt;Check it on Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Design Patterns
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--o0p_Z5-d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AvLGHj8_iVn2sMBEH.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o0p_Z5-d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AvLGHj8_iVn2sMBEH.jpg" alt="Design Patterns" width="397" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Capturing a wealth of experience about the design of object-oriented software, four top-notch designers present a catalog of simple and succinct solutions to commonly occurring design problems. Previously undocumented, these 23 patterns allow designers to create more flexible, elegant, and ultimately reusable designs without having to rediscover the design solutions themselves.&lt;br&gt;
 The authors begin by describing what patterns are and how they can help you design object-oriented software. They then go on to systematically name, explain, evaluate, and catalog recurring designs in object-oriented systems. With Design Patterns as your guide, you will learn how these important patterns fit into the software development process, and how you can leverage them to solve your own design problems most efficiently.&lt;br&gt;
 Each pattern describes the circumstances in which it is applicable, when it can be applied in view of other design constraints, and the consequences and trade-offs of using the pattern within a larger design. All patterns are compiled from real systems and are based on real-world examples. Each pattern also includes code that demonstrates how it may be implemented in object-oriented programming languages like C++ or Smalltalk.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://amzn.to/38Eb9yO"&gt;Check it on Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7. The Clean Coder
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--433lQBv7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AYvxBzRjt2FMOcG9l.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--433lQBv7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AYvxBzRjt2FMOcG9l.jpg" alt="The Clean Coder" width="385" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Programmers who endure and succeed amidst swirling uncertainty and nonstop pressure share a common attribute: They care deeply about the practice of creating software. They treat it as a craft. They are professionals.&lt;br&gt;
 In this book*&lt;em&gt;,&lt;/em&gt;* legendary software expert Robert C. Martin introduces the disciplines, techniques, tools, and practices of true software craftsmanship. This book is packed with practical advice–about everything from estimating and coding to refactoring and testing. It covers much more than technique: It is about attitude. Martin shows how to approach software development with honor, self-respect, and pride; work well and work clean; communicate and estimate faithfully; face difficult decisions with clarity and honesty; and understand that deep knowledge comes with a responsibility to act.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://amzn.to/2u63SIS"&gt;Check it on Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. The Mythical Man-Month
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Tp8LGp0u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AaAFBNdf-mHFAMrcK.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Tp8LGp0u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AaAFBNdf-mHFAMrcK.jpg" alt="The Mythical Man-Month" width="336" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Few books on software project management have been as influential and timeless as The Mythical Man-Month. With a blend of software engineering facts and thought-provoking opinions, Fred Brooks offers insight for anyone managing complex projects. These essays draw from his experience as project manager for the IBM System/360 computer family and then for OS/360, its massive software system.&lt;br&gt;
 Now, 20 years after the initial publication of his book, Brooks has revisited his original ideas and added new thoughts and advice, both for readers already familiar with his work and for readers discovering it for the first time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://amzn.to/3bL1lVz"&gt;Check it on Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Working Effectively with Legacy Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pN74EEHe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2A2hyShrObCQ2_drRP.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pN74EEHe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2A2hyShrObCQ2_drRP.jpg" alt="Working Effectively with Legacy Code" width="378" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In this book, Michael Feathers offers start-to-finish strategies for working more effectively with large, untested legacy code bases.&lt;br&gt;
 This book draws on material Michael created for his own renowned Object Mentor seminars: techniques Michael has used in mentoring to help hundreds of developers, technical managers, and testers bring their legacy systems under control.&lt;br&gt;
 This book also includes a catalog of twenty-four dependency-breaking techniques that help you work with program elements in isolation and make safer changes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://amzn.to/2P37DWJ"&gt;Check it on Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Refactoring
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8BPWOxAL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AvT0NXg4m1ngLbFJ_.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8BPWOxAL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AvT0NXg4m1ngLbFJ_.jpg" alt="Refactoring" width="381" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;As the application of object technology–particularly the Java programming language–has become commonplace, a new problem has emerged to confront the software development community. Significant numbers of poorly designed programs have been created by less-experienced developers, resulting in applications that are inefficient and hard to maintain and extend. Increasingly, software system professionals are discovering just how difficult it is to work with these inherited, non-optimal applications.&lt;br&gt;
 For several years, expert-level object programmers have employed a growing collection of techniques to improve the structural integrity and performance of such existing software programs. Referred to as refactoring, these practices have remained in the domain of experts because no attempt has been made to transcribe the lore into a form that all developers could use…until now. In Refactoring: Improving the Design of Existing Software, renowned object technology mentor Martin Fowler breaks new ground, demystifying these master practices and demonstrating how software practitioners can realize the significant benefits of this new process. With proper training a skilled system designer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://amzn.to/2uSs167"&gt;Check it on Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Head First Design Patterns
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FMXKvUKo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AkP1hr4PPKd4pNUsG.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FMXKvUKo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AkP1hr4PPKd4pNUsG.jpg" alt="Head First Design Patterns" width="432" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;At any given moment, someone struggles with the same software design problems you have. And, chances are, someone else has already solved your problem. This edition of Head First Design Patterns — now updated for Java 8 — shows you the tried-and-true, road-tested patterns used by developers to create functional, elegant, reusable, and flexible software. By the time you finish this book, you’ll be able to take advantage of the best design practices and experiences of those who have fought the beast of software design and triumphed.&lt;br&gt;
 We think your time is too valuable to spend struggling with new concepts. Using the latest research in cognitive science and learning theory to craft a multi-sensory learning experience, Head First Design Patterns uses a visually rich format designed for the way your brain works, not a text-heavy approach that puts you to sleep.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://amzn.to/2SUiUtA"&gt;Check it on Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Clean Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eA-sZY7X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AXeKWvlOG18jC6g3P.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eA-sZY7X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AXeKWvlOG18jC6g3P.jpg" alt="Clean Code" width="376" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This book is divided into three parts. The first describes the principles, patterns, and practices of writing clean code. The second part consists of several case studies of increasing complexity. Each case study is an exercise in cleaning up code — of transforming a code base that has some problems into one that is sound and efficient. The third part is the payoff: a single chapter containing a list of heuristics and “smells” gathered while creating the case studies. The result is a knowledge base that describes the way we think when we write, read, and clean code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://amzn.to/2Hy0n0U"&gt;Check it on Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The Pragmatic Programmer
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WmM9cXrp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2Al1wNScpO78Mi3Lbz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WmM9cXrp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2Al1wNScpO78Mi3Lbz.jpg" alt="The Pragmatic Programmer" width="382" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Pragmatic Programmer is one of those rare tech books you’ll read, re-read, and read again over the years. Whether you’re new to the field or an experienced practitioner, you’ll come away with fresh insights each and every time.&lt;br&gt;
 Dave Thomas and Andy Hunt wrote the first edition of this influential book in 1999 to help their clients create better software and rediscover the joy of coding. These lessons have helped a generation of programmers examine the very essence of software development, independent of any particular language, framework, or methodology, and the Pragmatic philosophy has spawned hundreds of books, screencasts, and audio books, as well as thousands of careers and success stories.&lt;br&gt;
 Now, twenty years later, this new edition re-examines what it means to be a modern programmer. Topics range from personal responsibility and career development to architectural techniques for keeping your code flexible and easy to adapt and reuse.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://amzn.to/3bO6Xyb"&gt;Check it on Amazon&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;That's it for today. I hope some of these books can help you start your journey with programming.&lt;/p&gt;

&lt;p&gt;Thanks for reading! Follow me in this platform to reed more developer content. Have a great day, see you soon! 👋&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>books</category>
    </item>
    <item>
      <title>What is GitHub and how to use it?</title>
      <dc:creator>Justin Graysen</dc:creator>
      <pubDate>Sun, 21 Aug 2022 19:57:00 +0000</pubDate>
      <link>https://dev.to/justin_graysen/what-is-github-and-how-to-use-it-5di4</link>
      <guid>https://dev.to/justin_graysen/what-is-github-and-how-to-use-it-5di4</guid>
      <description>&lt;p&gt;GitHub is a platform for hosting source code and files with version control using Git. It is similar to a collaborative social platform where programmers and businesses post their projects for code development.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IosbudXL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2560/0%2AZLfPdBuEy3SgJscw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IosbudXL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2560/0%2AZLfPdBuEy3SgJscw.jpg" alt="Github Logo" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do we need GitHub?
&lt;/h2&gt;

&lt;p&gt;The world of information technology is getting more and more crowded, new technologies are coming out in droves and at an impressive speed. People, to develop applications and programs capable of handling and controlling these technologies, are increasingly in demand.&lt;/p&gt;

&lt;p&gt;With all this competition and diversity, how do you stand out in this environment? In some professions, it is common for professionals to have a portfolio to promote their work.&lt;/p&gt;

&lt;p&gt;For example, musicians and singers promote their songs on SoundCloud or YouTube. &lt;strong&gt;But what about programmers? Where could they display their programs and code? That’s where GitHub comes in!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;However, there is no way to understand GitHub without talking about Git, so to understand where Git came from, from GitHub, let’s talk briefly about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Git?
&lt;/h2&gt;

&lt;p&gt;Git is a file version control repository, used for &lt;strong&gt;source code version control&lt;/strong&gt; and &lt;strong&gt;collaborative development.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It was created in 2005 by &lt;a href="https://en.wikipedia.org/wiki/Linus_Torvalds"&gt;Linus Torvalds&lt;/a&gt;, creator of the Linux kernel, to host the Linux source code and allow collaboration in its development, since the old company that hosted its code, BitKeeper, wanted to charge for its services.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to install Git?
&lt;/h2&gt;

&lt;p&gt;Git can be installed in Linux/Debian platforms using the following command:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get install git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;In other platforms like Windows or Mac, you can download through these links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://git-scm.com/download/win"&gt;Git for Windows&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://git-scm.com/download/mac"&gt;Git for Mac&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The importance of GitHub
&lt;/h2&gt;

&lt;p&gt;GitHub, launched in 2008, is a web version of Git.&lt;/p&gt;

&lt;p&gt;The projects on GitHub are mostly open source, but it is possible to make your code private, available only to a few people or by creating teams.&lt;/p&gt;

&lt;p&gt;GitHub has already become one of, if not the largest code store in the cloud.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is GitHub for?
&lt;/h2&gt;

&lt;p&gt;Never forget: &lt;strong&gt;Git and GitHub are different things.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can have Git for version control only on your local computer. GitHub is used when you want to share your code or put it in the cloud. GitHub has all the features of Git, and has &lt;strong&gt;many extra features&lt;/strong&gt; listed below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Documentation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Issue tracking&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wikis&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pull requests with commenting and code review&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Commit history&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Email notifications and emojis&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub Pages: small websites can be made.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to use GitHub?
&lt;/h2&gt;

&lt;p&gt;Let’s start tutorial on how to use GitHub. First, you need to create your personal account or a team account on the &lt;a href="https://github.com/"&gt;official GitHub page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It is completely free for personal and team repositories, with some more advanced paid plans for teams and companies. After creating your account, use the platform’s Hello World guide to learn how to create your first repository, open branches and open a pull request.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a repository?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xma0DndL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2ARvwYM4XgJ8hkLqYf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xma0DndL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2ARvwYM4XgJ8hkLqYf.png" alt="Github tutorial on how to create a repo" width="808" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A repository is a space in which all the files of a specific project are stored.&lt;/p&gt;

&lt;p&gt;Each project has its own repository and you can access it with a unique URL.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a fork?
&lt;/h3&gt;

&lt;p&gt;“Forking” is when you create a new project based on another project that already exists. This is a feature that greatly encourages the development of programs and projects among the community or among teams in general.&lt;/p&gt;

&lt;p&gt;Say you find a project on GitHub that you would like to contribute to, you can split the repository, make the desired changes, and release the revised project as a new repository.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a pull request?
&lt;/h3&gt;

&lt;p&gt;Imagine that you have forked a repository, done a good review on the project, and want it to be acknowledged by the original developers. You can do this by creating a Pull Request.&lt;/p&gt;

&lt;p&gt;The authors of the original repository can see your work and then choose whether or not to accept it into the official project. Whenever you make a pull request, GitHub provides an excellent way for you and the main project maintainer to communicate with each other.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub is also a social network
&lt;/h2&gt;

&lt;p&gt;GitHub also allows projects to grow exponentially with the social use of the tool. Each user on GitHub has their own profile as in any social network, ideal for showing their work and contributions in other projects.&lt;/p&gt;

&lt;p&gt;Project revisions can be discussed publicly, favoring public debate and knowledge sharing. GitHub favors networking among developers and can boost your career.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nothing gets a recruiter’s attention more than a GitHub that is popular and active with the community.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What to put in your GitHub?
&lt;/h2&gt;

&lt;p&gt;After creating your account, you have may this question: what to put there?&lt;/p&gt;

&lt;p&gt;To sum it up in one word: &lt;strong&gt;EVERYTHING!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That personal or college project that you think is useless may contain some programming concept or technique that a company is looking for.&lt;/p&gt;

&lt;p&gt;Did you take a complementary programming course where you had to develop a project? Post it on GitHub. Do you have a personal project under development, post it too.&lt;/p&gt;

&lt;p&gt;Not only will your code be visible to the world, but people can also help you develop it.&lt;/p&gt;

&lt;p&gt;If you are already a programmer and develop for a company, you will probably not be able to publish your code. In this case create simple projects with the technology and methodology you are using and post them on GitHub, describing everything you have done.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub's README
&lt;/h2&gt;

&lt;p&gt;An important element of your projects that does not always get enough attention is the README file.&lt;/p&gt;

&lt;p&gt;The README is the first impression of your work. Always have one at the root of the project. A good README is one that contains a good description of the purpose, where and how to use it, list of features, dependencies to work with. Examples of use will be a plus.&lt;/p&gt;

&lt;p&gt;Remember that the README is meant to be a summary, not a documentation of the project. For documentation, you can use GitHub’s own Wiki.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using licenses
&lt;/h2&gt;

&lt;p&gt;Don’t forget to set a license for your project. You may miss opportunities if you do not have a license defined. The &lt;a href="https://choosealicense.com/"&gt;Choose a License&lt;/a&gt; website can help you define which license to adopt.&lt;/p&gt;

&lt;p&gt;To apply a license to your project just create a file with the name LICENSE and paste the exact license content into it. Change it only if the license has spaces to be filled in with your data.&lt;/p&gt;

&lt;p&gt;GitHub will automatically identify the license and add a small icon of it at the top of your project. If this does not happen, please revise the file.&lt;/p&gt;

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

&lt;p&gt;That’s it for today. Now you know a little more about GitHub and how it works, don't forget to explore it and try things out on your own, because as the saying goes: &lt;em&gt;"practice makes perfect"&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Thanks for reading! Follow me in this platform to read more development content. Have a great day, see you soon! 👋&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
