<?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: Ahmed Said-ahmed</title>
    <description>The latest articles on DEV Community by Ahmed Said-ahmed (@medsaad).</description>
    <link>https://dev.to/medsaad</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%2F501841%2F95752c51-e2d4-4ddf-b07f-40dabfabe02f.jpeg</url>
      <title>DEV Community: Ahmed Said-ahmed</title>
      <link>https://dev.to/medsaad</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/medsaad"/>
    <language>en</language>
    <item>
      <title>What happens when you create a class instance in Node.js?</title>
      <dc:creator>Ahmed Said-ahmed</dc:creator>
      <pubDate>Fri, 01 Apr 2022 08:20:37 +0000</pubDate>
      <link>https://dev.to/medsaad/what-happens-when-you-create-a-class-instance-in-nodejs-5bfo</link>
      <guid>https://dev.to/medsaad/what-happens-when-you-create-a-class-instance-in-nodejs-5bfo</guid>
      <description>&lt;p&gt;Starting from JavaScript ES6 and later, we became able to write classes the way we used to in other programming languages and as a result, we can also create instances the same way using the new keyword. Along with that, we got some of the OOP features like inheritance.&lt;/p&gt;

&lt;p&gt;That said, JavaScript still has a long way towards being a fully object-oriented language — we are talking about vanilla JavaScript, so TypeScript is out of the conversation.&lt;/p&gt;

&lt;p&gt;Now to understand what happens when you create a new instance. Let’s consider the following example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;species&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(){}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Dog&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;max&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Dog&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let’s have a close look at the example above and think for a while, what happens when new Dog() gets called?&lt;/p&gt;

&lt;p&gt;First, the class attributes get declared then the constructor of the class get called, and store the necessary values in the newly created instance variable max. Then, the function super() starts to go up in the inheritance line towards Animal class and run its constructor, but not the attributes and methods. That is the extends keyword’s job which is making sure that all attributes and methods of a parent class are accessible in the child class.&lt;/p&gt;

&lt;p&gt;That was just an overview of how it works. Let’s play around with it to gain a deeper understanding of what happens. For a starter, we will assign the value mammal to species and console.log it in the child class:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;species&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;species&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mammal&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Dog&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;species&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;max&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Dog&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If we run the program, you will find that it will print the word ‘mammal’ to the console. Which is what intended. Let’s see what happened:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dog attribute name is declared.&lt;/li&gt;
&lt;li&gt;Dog constructor gets initiated which calls super() that declares attribute species of the parent class Animal and initiates the parent constructor.&lt;/li&gt;
&lt;li&gt;The parent constructor assigns the value mammal to species.&lt;/li&gt;
&lt;li&gt;The Dog constructor continues and console log the value.
What would happen if we console log species before calling super:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;species&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you run the program, you will get a reference error telling you that you need to call the super() method before using this keyword or returning from the derived constructor. That makes sense because super() behaves as if you are initiating an instance but for whatever parent class is there. The super function:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Initiates a new parent instance, for example, new Animal().&lt;/li&gt;
&lt;li&gt;Attach this instance with this keyword that preserves the current instance.
Well, let’s get a bit crazier. We will assign a value ‘max’ to the attribute name in Dog class and then console.log it on the Animal class:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;species&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;species&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mammal&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Dog&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;max&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Species&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;species&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;max&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Dog&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before you run the above code, can you guess what the output will be?&lt;/p&gt;

&lt;p&gt;The program will not break when you run it. However, although the name attribute is assigned in Dog class, the output will be Name undefined. According to the behavior that we mentioned earlier, that would be considered weird, since we assigned the value on the class declaration which is a new feature in Node that only works on modern browsers only (just in case it broke on your machine, then you’ll know why).&lt;/p&gt;

&lt;p&gt;To understand what happened, we need to output this to the console using console.dir():&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;species&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mammal&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Object&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//this will show object details&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//output
'Object'
Name undefined
Dog { species: undefined, name: 'max' }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you run this, you will notice 2 things:&lt;/p&gt;

&lt;p&gt;Although you output the object before the name field, first it will show object then the Name field will show up, and lastly, the instance details will show up at the end.&lt;br&gt;
The name is initialized inside this but it’s undefined when you call name.&lt;br&gt;
What we can learn from this is that console.dir waits until the inheritance tree is built then output its fields which means that the object is not completely built at this stage. And we can prove that by seeing this.name returning undefined.&lt;/p&gt;

&lt;p&gt;The point here is that you should not expect a child class to pass a value to its parent’s constructor. But, you can use it later in a method or from the new created instance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;max&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Dog&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;max&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Node.js’s OOP is very young. It’s still missing many features including interfaces and access modifiers which are pretty important in encapsulation. To explore all Node’s new features, I’ve built an npm package to reach its current limits and this article unraveled one of its weird parts. And I intend to share more whenever I get a chance.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What is the best time to join a startup as a software engineer?</title>
      <dc:creator>Ahmed Said-ahmed</dc:creator>
      <pubDate>Sat, 19 Mar 2022 16:33:43 +0000</pubDate>
      <link>https://dev.to/medsaad/what-is-the-best-time-to-join-a-startup-as-a-software-engineer-3ail</link>
      <guid>https://dev.to/medsaad/what-is-the-best-time-to-join-a-startup-as-a-software-engineer-3ail</guid>
      <description>&lt;p&gt;Everyday, someone, somewhere decides to build his or her own startup. And even if the product being built or the service provided is not mainly digital project, it still needs a website to promote the business and generate leads. In most cases, a developer will be needed.&lt;/p&gt;

&lt;p&gt;Assuming that you are a software engineer, you will be approached in many stages of your career by a startup to start working for them. In this article, we will deep dive into the stages of your career and the stages of a startup growth to find out which type of startup would suit best your current career level.&lt;/p&gt;

&lt;h2&gt;
  
  
  Junior Developer (Frontend or Backend)
&lt;/h2&gt;

&lt;p&gt;As a junior developer, who has just graduated from college, you need to keep learning to program. But not the theory, the practical skills that the market needs. You can satisfy this need for learning in 1 of 3 possible jobs:&lt;br&gt;
Working as a freelancer, building small basic websites and may be just adding features to existing websites or fix minor bugs.&lt;br&gt;
Get an internship in a medium to large tech company. Do not get an internship in a small startup. You won’t learn much and it won’t benefit your CV.&lt;br&gt;
Working in a software house. You will work on many projects, make many mistakes, get to understand many industries and how it gets digitized.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mid-Level Developer
&lt;/h2&gt;

&lt;p&gt;At this level, you have learned the basics. You have worked on multiple projects and you want to work on larger projects with a lot of features and get exposed to more advanced concepts. May be you want to become a full-stack developer instead of a specialized developer.&lt;br&gt;
At this stage, It’s better to work at a startup that has secured a large fund (series A at least) and can sustain for a long time. It has to reach a very advanced stages that qualifies it to hire a big technical team where you can find a lot of mentors and provided guidance.&lt;br&gt;
At this moment, you will be a part of something big. You will build cool features and will be exposed to concepts like Automation, CI/CD and most importantly Agile methodology.&lt;/p&gt;

&lt;h2&gt;
  
  
  Senior Developer
&lt;/h2&gt;

&lt;p&gt;As a senior developer, it will depend on if you chose to be a specialized developer or a full-stack developer. If you like to be specialized in one part of the development process, then that’s fine. However, I won’t lie to you, being a full-stack developer will give you a lot of options and a lot of career advancement chances that you may not get if you chose to be otherwise.&lt;br&gt;
As a senior, you may want to give a chance to big tech companies but this time as a software engineer not an intern. If you’re into that path, try to apply there and see where it leads you to.&lt;br&gt;
Another thing is to apply at a start that has just received a seed funding and just hired a tech lead or CTO and now they are expanding. They are building their big main product from scratch after their MVP proved to be valuable. You will learn a lot about the origins of this big apps and how it’s born.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lead Developer
&lt;/h2&gt;

&lt;p&gt;Well, at this point, you can do many things. But if you are willing to take the risk, it will be a good opportunity to join a young start up. Be a solo developer for a while and build them an MVP or a proof of concept (PoC). Later, you may be asked to hire your own team and start building their product.&lt;/p&gt;

&lt;p&gt;May be after a period of time, your risk will pay off very well and they will give you shares in the company to keep you with them. Especially, if you proved yourself at the early stages.&lt;/p&gt;

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

&lt;p&gt;Choosing which company to join depending on your career level is tricky, yet crucial and may have huge consequences if done wrong. The lack of proper guidance in early stages of your career, may leads to you catching a lot of bad programming practices that will scar you for a long time of your career.&lt;br&gt;
That’s why I shared this article since I believe it’s an important thing, yet no body is mentioning this topic as much as it should be.&lt;/p&gt;

&lt;p&gt;Originally published it at &lt;a href="https://automated-programmer.medium.com/what-is-the-best-time-to-join-a-startup-as-a-software-engineer-bc3d774c1eae"&gt;Medium&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>career</category>
      <category>discuss</category>
    </item>
    <item>
      <title>5 CV don'ts for software engineers</title>
      <dc:creator>Ahmed Said-ahmed</dc:creator>
      <pubDate>Sun, 07 Feb 2021 13:46:01 +0000</pubDate>
      <link>https://dev.to/medsaad/5-cv-don-ts-for-software-engineers-19p0</link>
      <guid>https://dev.to/medsaad/5-cv-don-ts-for-software-engineers-19p0</guid>
      <description>&lt;p&gt;In this video, you will be introduced to some bad practices that many software engineers do when they are writing or designing their CV.&lt;/p&gt;

&lt;p&gt;Notice that many of this practices could be needed or critical for other job positions. However, it's not favorable for software engineers.&lt;/p&gt;

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

&lt;p&gt;Check out previous bash tutorials:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/-JY9DDLHaD8"&gt;Bash commands for beginners&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/UXM8KNTC3aY"&gt;Bash commands chaining, redirecting and nesting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/H_bU7u2dvT8"&gt;Bash shell file walk-through&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/BdU5SflFHKk"&gt;Bash scripting: If conditions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>discuss</category>
      <category>tutorial</category>
      <category>career</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Building a React Directory Structure Generator CLI Tool With Bash</title>
      <dc:creator>Ahmed Said-ahmed</dc:creator>
      <pubDate>Mon, 11 Jan 2021 14:21:56 +0000</pubDate>
      <link>https://dev.to/medsaad/building-a-react-directory-structure-generator-cli-tool-with-bash-4cbo</link>
      <guid>https://dev.to/medsaad/building-a-react-directory-structure-generator-cli-tool-with-bash-4cbo</guid>
      <description>&lt;p&gt;I had quite a journey learning bash scripting and sharing what I've learned with you in the process, from basic commands to bash files and conditionals (I'll share the list of these tutorial at the end of this thread below).&lt;/p&gt;

&lt;p&gt;There are a lot still that we can learn but I'll dedicate an intermediate series for this separate from the first one. Currently, It's time to create a project .. a real world project that can be used in actual situations. That's why I've learned bash in the first place, simply &lt;strong&gt;to automate tasks&lt;/strong&gt; and be more productive.&lt;/p&gt;

&lt;p&gt;The project that I'll be building is a React directory structure generator following the &lt;a href="https://andela.com/insights/structuring-your-react-application-atomic-design-principles/"&gt;atomic pattern&lt;/a&gt;. Each part of the project will build a functional tool and then we will pile up feature and make some refactoring each time.&lt;/p&gt;

&lt;p&gt;After this 14 minutes video, you will be able to run the following commands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;structg.sh generate atomic&lt;/code&gt;
generates the new folder structure&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;structg.sh generate &amp;lt;page|atom|molecule|organism&amp;gt;&lt;/code&gt;
generates new component &amp;amp; style file in its respective folder and adds boilerplate code in the component file.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Check out previous bash tutorials:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/-JY9DDLHaD8"&gt;Bash commands for beginners&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/UXM8KNTC3aY"&gt;Bash commands chaining, redirecting and nesting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/H_bU7u2dvT8"&gt;Bash shell file walk-through&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/H_bU7u2dvT8"&gt;Bash scripting: passing arguments &amp;amp; user input&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/GuX72I8f71g"&gt;Bash scripting: variables &amp;amp; string manipulation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/BdU5SflFHKk"&gt;Bash scripting: If conditions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>bash</category>
      <category>react</category>
      <category>tooling</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Bash Scripting: If Conditions &amp; the difference from other programming languages</title>
      <dc:creator>Ahmed Said-ahmed</dc:creator>
      <pubDate>Tue, 29 Dec 2020 13:01:30 +0000</pubDate>
      <link>https://dev.to/medsaad/how-if-conditions-are-the-weird-part-of-bash-36ea</link>
      <guid>https://dev.to/medsaad/how-if-conditions-are-the-weird-part-of-bash-36ea</guid>
      <description>&lt;p&gt;Previously, we talked about &lt;a href="https://dev.to/medsaad/8-bash-commands-with-options-for-beginner-developers-3g7i"&gt;bash commands&lt;/a&gt;, then saw &lt;a href="https://dev.to/medsaad/writing-complex-bash-commands-using-redirecting-chaining-nesting-51l"&gt;how to use them in a more complex ways&lt;/a&gt; and finally, we had a &lt;a href="https://dev.to/medsaad/bash-scripting-fundamentals-shell-file-walkthrough-2aob"&gt;shell file walk-through&lt;/a&gt; and got introduced to &lt;a href="https://dev.to/medsaad/bash-scripting-command-arguments-user-inputs-5-mins-4agf"&gt;arguments, user inputs&lt;/a&gt;  and &lt;a href="https://dev.to/medsaad/bash-scripting-variables-string-manipulation-5hh"&gt;variables&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the next 5 minutes, we will discuss the weird part of bash. Bash if conditions structure does not look different than any other if statement structures in other programming languages. However, how the test condition is written and get tested is a bit confusing at the beginning.&lt;/p&gt;

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

</description>
      <category>beginners</category>
      <category>tutorial</category>
      <category>linux</category>
      <category>bash</category>
    </item>
    <item>
      <title>Bash Scripting: Variables &amp; String Manipulation</title>
      <dc:creator>Ahmed Said-ahmed</dc:creator>
      <pubDate>Sat, 05 Dec 2020 15:44:17 +0000</pubDate>
      <link>https://dev.to/medsaad/bash-scripting-variables-string-manipulation-5hh</link>
      <guid>https://dev.to/medsaad/bash-scripting-variables-string-manipulation-5hh</guid>
      <description>&lt;p&gt;Today we will start work with variables in bash. If you already are a programmer or a developer, then you know about variables. It's a medium to store values in computer memory in order to use it later in the program.&lt;/p&gt;

&lt;p&gt;Check out previous bash tutorials:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/-JY9DDLHaD8"&gt;Bash commands for beginners&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/UXM8KNTC3aY"&gt;Bash commands chaining, redirecting and nesting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/H_bU7u2dvT8"&gt;Bash shell file walk-through&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/H_bU7u2dvT8"&gt;Bash scripting: passing arguments &amp;amp; user input&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bash variables are dynamically typed. We already used them before. However, in this tutorial we will deep dive into how to assign a variable, how to call it, assign a variable from a command directly.&lt;/p&gt;

&lt;p&gt;Also, you will learn about string manipulation in bash which could get a bit tricky since we are using special characters to perform such manipulation instead of built-in functions in other languages.&lt;/p&gt;

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

</description>
      <category>bash</category>
      <category>linux</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Bash Scripting: Command Arguments &amp; User Inputs (5 mins)</title>
      <dc:creator>Ahmed Said-ahmed</dc:creator>
      <pubDate>Tue, 01 Dec 2020 14:54:32 +0000</pubDate>
      <link>https://dev.to/medsaad/bash-scripting-command-arguments-user-inputs-5-mins-4agf</link>
      <guid>https://dev.to/medsaad/bash-scripting-command-arguments-user-inputs-5-mins-4agf</guid>
      <description>&lt;p&gt;Last time, we &lt;a href="https://dev.to/medsaad/bash-scripting-fundamentals-shell-file-walkthrough-2aob"&gt;created the first shell file&lt;/a&gt;. Today, let's start passing arguments and user inputs.&lt;/p&gt;

&lt;p&gt;Arguments gives the bash program more details about what you need to do. Sometimes, it comes as a form of sub-command like &lt;code&gt;yarn add &amp;lt;packageName&amp;gt;&lt;/code&gt; where "add" tells the program more about what to do, and the packageName is what you data that you what to pass the program.&lt;/p&gt;

&lt;p&gt;You can also pass inputs in the middle of the working program. It could be asking for confirmation, authentication, etc.&lt;/p&gt;

&lt;p&gt;In this video, we will discuss the how to of this:&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/4bcUii6HDYo"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Check out previous videos in this series:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/medsaad/writing-complex-bash-commands-using-redirecting-chaining-nesting-51l"&gt;Bash commands chaining, redirecting &amp;amp; nesting.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/medsaad/8-bash-commands-with-options-for-beginner-developers-3g7i"&gt;Bash commands with options for beginner developers.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>bash</category>
      <category>linux</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Bash scripting fundamentals: shell file walkthrough</title>
      <dc:creator>Ahmed Said-ahmed</dc:creator>
      <pubDate>Tue, 24 Nov 2020 14:06:26 +0000</pubDate>
      <link>https://dev.to/medsaad/bash-scripting-fundamentals-shell-file-walkthrough-2aob</link>
      <guid>https://dev.to/medsaad/bash-scripting-fundamentals-shell-file-walkthrough-2aob</guid>
      <description>&lt;p&gt;Previously, we talked about &lt;a href="https://dev.to/medsaad/8-bash-commands-with-options-for-beginner-developers-3g7i"&gt;8 basic bash commands&lt;/a&gt; and then saw &lt;a href="https://dev.to/medsaad/writing-complex-bash-commands-using-redirecting-chaining-nesting-51l"&gt;how to use them in a more complex ways&lt;/a&gt;. Today, we will learn how to execute bulk of these commands by adding them inside a shell file.&lt;/p&gt;

&lt;p&gt;Shell scripting is not just good for multiple commands grouping, it also can help you control the flow based on some input from user. You can pretty much build a program with it.&lt;/p&gt;

&lt;p&gt;We will discuss how to create a file, the structure of a shell file and create a file duplicator program, then finally learn how to execute it like any other Linux command.&lt;/p&gt;

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

&lt;p&gt;What's next?&lt;br&gt;
Learn about &lt;a href="https://youtu.be/4bcUii6HDYo"&gt;bash command arguments and user input&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>bash</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Writing complex bash commands using redirecting, chaining &amp; nesting</title>
      <dc:creator>Ahmed Said-ahmed</dc:creator>
      <pubDate>Mon, 16 Nov 2020 15:39:00 +0000</pubDate>
      <link>https://dev.to/medsaad/writing-complex-bash-commands-using-redirecting-chaining-nesting-51l</link>
      <guid>https://dev.to/medsaad/writing-complex-bash-commands-using-redirecting-chaining-nesting-51l</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.to/medsaad/8-bash-commands-with-options-for-beginner-developers-3g7i"&gt;In previous submission&lt;/a&gt;, we discussed 8 fundamental bash commands and their options as an overview of this scripting language.&lt;/p&gt;

&lt;p&gt;Today, we will deep dive into a bit advanced concepts, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chaining: execute multiple commands sequentially.&lt;/li&gt;
&lt;li&gt;Pipelines: send the output of a command as an input of the next one.&lt;/li&gt;
&lt;li&gt;Redirecting: channeling data out of or into a command.&lt;/li&gt;
&lt;li&gt;Nesting: calling a command inside another command while sending the output of the inner command as an argument of the outer command.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check in 7 minutes, the step by step video with examples below:&lt;/p&gt;

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

&lt;p&gt;In future videos, we will discuss bash scripting in a shell file fundamentals and best practices.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>bash</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>8 bash commands with options for beginner developers</title>
      <dc:creator>Ahmed Said-ahmed</dc:creator>
      <pubDate>Mon, 09 Nov 2020 12:19:26 +0000</pubDate>
      <link>https://dev.to/medsaad/8-bash-commands-with-options-for-beginner-developers-3g7i</link>
      <guid>https://dev.to/medsaad/8-bash-commands-with-options-for-beginner-developers-3g7i</guid>
      <description>&lt;p&gt;How do you list the files and directories in your working directory? Well, we use &lt;code&gt;ls&lt;/code&gt;, right? &lt;/p&gt;

&lt;p&gt;Then, what if we want to list the files and directories and the files inside each directory?&lt;/p&gt;

&lt;p&gt;Until very recently, I was thinking that I have to install a package called &lt;code&gt;tree&lt;/code&gt; and that this was the only way. Until, I actually found out that ls command has an option -R that do exactly the same thing, and even sometimes better if combined with other flags and options.&lt;/p&gt;

&lt;p&gt;In the video below, I am sharing flags and options for basic linux commands like this that will increase your terminal mastery and sometimes save you some time and space (compared to downloading other solutions).&lt;/p&gt;

&lt;p&gt;Check this out and let me know if you had been in this situation and if so what was your solutions?!&lt;/p&gt;

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

&lt;p&gt;Check the next part of the series:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=UXM8KNTC3aY"&gt;Writing complex bash commands using redirecting, chaining &amp;amp; nesting&lt;/a&gt;  &lt;/p&gt;

</description>
      <category>beginners</category>
      <category>bash</category>
      <category>linux</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Redis CLI: Configurations, databases, and pubsub commands</title>
      <dc:creator>Ahmed Said-ahmed</dc:creator>
      <pubDate>Sat, 31 Oct 2020 14:48:21 +0000</pubDate>
      <link>https://dev.to/medsaad/redis-cli-configurations-databases-and-pubsub-commands-21j2</link>
      <guid>https://dev.to/medsaad/redis-cli-configurations-databases-and-pubsub-commands-21j2</guid>
      <description>&lt;p&gt;In the video below, you will learn the following skills:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;important configs for redis to secure and gain control over your redis server.&lt;/li&gt;
&lt;li&gt;redis databases and how to switch between them.&lt;/li&gt;
&lt;li&gt;redis as a messaging broker and how to use it for pubsub. &lt;/li&gt;
&lt;li&gt;Finally, We will see how you can explore redis cli further on your own.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;[YT Video: Redis cli config, databases, &amp;amp; pubsub]&lt;/em&gt;&lt;br&gt;
&lt;a href="https://youtu.be/jTmqOrfXrzI"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jgmdEoRy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i9.ytimg.com/vi/jVJPQ33-1eI/maxresdefault.jpg%3Ftime%3D1603994400000%26sqp%3DCKCG7PwF%26rs%3DAOn4CLDmHCgnOLQubmOR6lwerzjs0A_8ng" alt="Redis CLI - Installation &amp;amp; Data manipulation" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can also check pervious part: &lt;a href="https://youtu.be/jVJPQ33-1eI"&gt;https://youtu.be/jVJPQ33-1eI&lt;/a&gt;&lt;/p&gt;

</description>
      <category>pubsub</category>
      <category>redis</category>
      <category>database</category>
    </item>
    <item>
      <title>Redis CLI: Installation &amp; Data manipulation</title>
      <dc:creator>Ahmed Said-ahmed</dc:creator>
      <pubDate>Thu, 29 Oct 2020 18:13:46 +0000</pubDate>
      <link>https://dev.to/medsaad/redis-cli-installation-data-manipulation-2bn6</link>
      <guid>https://dev.to/medsaad/redis-cli-installation-data-manipulation-2bn6</guid>
      <description>&lt;p&gt;In this youtube video, we walk though: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how to install redis on linux system and other OSs.&lt;/li&gt;
&lt;li&gt;How to create, read, update, and manipulate data on a redis database.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://youtu.be/jVJPQ33-1eI"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jgmdEoRy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i9.ytimg.com/vi/jVJPQ33-1eI/maxresdefault.jpg%3Ftime%3D1603994400000%26sqp%3DCKCG7PwF%26rs%3DAOn4CLDmHCgnOLQubmOR6lwerzjs0A_8ng" alt="Redis CLI - Installation &amp;amp; Data manipulation" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Stay tuned for part 2. I'll update this post when I publish it.&lt;/p&gt;

</description>
      <category>redis</category>
      <category>devops</category>
      <category>caching</category>
    </item>
  </channel>
</rss>
