<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ code newbie - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ code newbie - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Wed, 17 Jun 2026 20:48:38 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/code-newbie/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Software Engineers Are Made Not Born – How to Become a Great Developer ]]>
                </title>
                <description>
                    <![CDATA[ By Pramono Winata As technology increasingly permeates our everyday lives, jobs in the tech industry are growing ever more popular. Many companies and industries are searching for qualified developers to help them stay competitive. Many people believ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-become-a-great-developer/</link>
                <guid isPermaLink="false">66d46091c7632f8bfbf1e481</guid>
                
                    <category>
                        <![CDATA[ code newbie ]]>
                    </category>
                
                    <category>
                        <![CDATA[ self-improvement  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ software development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Software Engineering ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Tue, 01 Dec 2020 21:17:58 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/5fbe720349c47664ed8257c2.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Pramono Winata</p>
<p>As technology increasingly permeates our everyday lives, jobs in the tech industry are growing ever more popular. Many companies and industries are searching for qualified developers to help them stay competitive.</p>
<p>Many people believe that to become a Software Engineer you have to be super smart or you just have to be born with certain talents. </p>
<p>But in my opinion, this is a very common misconception. Being a Software Engineer is not just a matter of talent – it's a matter of choice.</p>
<p>There are several qualities that will help you out immensely if you want to become a Software Engineer. You might not have these traits yet, but I believe they're skills that can be learned.</p>
<p>So let's see how you can develop these skills and carve out your path to becoming a Software Engineer.</p>
<h2 id="heading-you-have-to-have-grit">You Have to Have Grit</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-271.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@margobr?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;Margo Brodowicz / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p>Grit is a strong word, and it is also one of the most important points I'll discuss here. </p>
<p>If you have a goal in your mind, you've gotta commit to it and persevere until the end. The road to becoming a Software Engineer is often a thorny path, but whatever happens, try to see it through to the end.</p>
<p>Sure the journey is hard, but keep in mind that it's not just hard for you – it's also hard for pretty much everyone else. </p>
<p>Because of this, it's important that you have a goal. The goal doesn't have to be long term, like a 5 or 10 year goal. A simple goal that defines what you want to accomplish within one or two years is good enough to start.</p>
<p>When you have a goal, you need to put your mind to it and whatever happens, do your best. </p>
<p>Doing your best doesn't mean having a do or die attitude, though. Everyone has a different learning process and sometimes your progress might not match your goals. But just remember – <strong>do your best</strong> and keep pushing.</p>
<p>Failing doesn't mean it's the end of everything, it just means you need to try again.</p>
<p>This might sound scary, but in time you will <strong>appreciate the journey</strong> you've been on. And when you looked back you will say to yourself "<strong>That was quite an adventure</strong>".</p>
<h2 id="heading-cultivate-your-curiosity">Cultivate Your Curiosity</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-272.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@catherineheath?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;Catherine Heath / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p>You might have heard that "Curiosity killed the cat". But as a Software Engineer, you need to train your curiosity. This world is full of unknown and peculiar things you'll want to explore. </p>
<p>There will be times when things doesn't come out as expected. But instead of getting frustrated, we can commit some of our time to finding out why things went wrong.</p>
<p>In the field of technology, there are a lot of things to learn and consider. Every day there are new libraries coming out, it's impossible to play around with all of them. </p>
<p>But you can always start with simple things that you use everyday. Maybe something like how <a target="_blank" href="https://en.wikipedia.org/wiki/Printf_format_string">print formatting</a> works in your favorite language. It's a simple concept, and often used, but many of you might not even be aware of how it works.</p>
<p>Be curious like a child, and be in awe of the things you don't yet know. Then, one by one, take those things and explore them.</p>
<h2 id="heading-understand-that-you-dont-know-everything-and-thats-ok">Understand that You Don't Know Everything – and That's Ok</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-273.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@earbiscuits?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;Juan Rumimpunu / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p>There is so much technology around us. And not only are there many things to learn, but much of that tech is also very dynamic. Things keep changing everyday and old technology often becomes obsolete. </p>
<p>Even if you dedicate your whole lifetime to studying all of it, you probably won't even get through half.</p>
<p>The thing is, you need to accept that you don't know all of it. Not because you are not trying hard enough, but it's just that you can't learn it all. There is just too much out there.</p>
<p>But if you want to start, one thing you need to learn is how to ask good questions. There is a quote in my country that says "<strong>Embarrassed to ask, astray on the road</strong>". So don't let yourself stay lost – just ask whenever you need to ask.</p>
<p>After all, knowledge is there to be shared. So why should you be scared to ask?<br>Once you've done your due diligence and researched the problem yourself, you can turn to someone else to help you solve the problem.</p>
<h2 id="heading-become-a-life-long-learner">Become a Life-Long Learner</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-274.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@aaronburden?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;Aaron Burden / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p>For some people, learning might have finished when they completed high school or college. But this isn't the case for a Software Engineer. Your entire career is like one big school where you'll learn everything from hard-skills to soft skills. </p>
<p>If you're passionate about learning, you'll find that coding is not all that different. After all, what does a Software Engineer do all day anyway? They solve problems! And from that they learn new things.</p>
<p>Sure, finding the motivation to study isn't always easy. The first step might be to find out which study method suits you best. Some people might prefer reading books or articles (like you are currently doing), others might like watching tutorials or learning by doing.</p>
<p>There are tons of materials out there on the internet – tutorials, books, videos, everything. When you find out which way you learn best, work to develop a study habit and remember that <strong>grit</strong> will help you push through.</p>
<p>Engineers grow from solving new problems. So keep learning, because once you stop learning, you stop growing.</p>
<h2 id="heading-final-thoughts">Final Thoughts</h2>
<p>Some of these things might sounds scary or difficult to you – but in reality, most of it is just part of life, and part of growing. </p>
<p>Things might be hard especially at the starting point, but you will get used to it. Treat it as a long and exciting journey, but always try to <strong>appreciate the journey and stop worrying about the destination</strong>. </p>
<p>And every now and then, don't forget to give yourself a break, because you need to <strong>appreciate yourself</strong> too.</p>
<p>As always, thanks for reading my article. I hope that it has helped you out. I wish you good luck, whether you are on a route to becoming a Software Engineer or you are one already, trying to improve yourself to become a better Engineer. </p>
<p>The journey doesn't stop when you have became a Software Engineer. The journey is never ending.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ The CSS Position Property Explained with Examples ]]>
                </title>
                <description>
                    <![CDATA[ By Sarah Chima Atuonwu Before you can be really good at CSS you need to understand the basics. You have to understand CSS properties and their values.  In this article, we'll focus on the CSS position property. We are going to learn the various value... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/learn-the-basics-the-css-position-property/</link>
                <guid isPermaLink="false">66d460f8ffe6b1f641b5fa8d</guid>
                
                    <category>
                        <![CDATA[ 100DaysOfCode ]]>
                    </category>
                
                    <category>
                        <![CDATA[ code newbie ]]>
                    </category>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Tue, 16 Jun 2020 13:00:00 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/5f9c9a3e740569d1a4ca247b.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Sarah Chima Atuonwu</p>
<p>Before you can be really good at CSS you need to understand the basics. You have to understand CSS properties and their values. </p>
<p>In this article, we'll focus on the CSS position property. We are going to learn the various values of the CSS position property and how they work. Let's do this!</p>
<h2 id="heading-what-is-the-css-position-property">What is the CSS position property?</h2>
<p>The CSS position property defines the position of an element in a document. This property works with the left, right, top, bottom and z-index properties to determine the final position of an element on a page.</p>
<p>There are five values the position property can take. They are:</p>
<ol>
<li>static</li>
<li>relative</li>
<li>absolute</li>
<li>fixed</li>
<li>sticky</li>
</ol>
<p>Let's discuss each one of them.</p>
<h3 id="heading-static">Static</h3>
<p>This is the default value for elements. The element is positioned according to the normal flow of the document. The left, right, top, bottom and z-index properties do not affect an element with <code>position: static</code>.</p>
<p>Let's use an example to show that <code>position: static</code> has no effect on the position of an element. We have three divs placed in a parent container. We'll use this example throughout this article.</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"parent-element"</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"sibling-element"</span>&gt;</span>
                I'm the other sibling element.
            <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>

            <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"main-element"</span>&gt;</span>
                All eyes on me. I am the main element.
            <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>

            <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"sibling-element"</span>&gt;</span>
                I'm the other sibling element.
            <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span>
</code></pre>
<p>Let's add <code>position: static</code> to the div with the class <code>main-element</code> and left, top values to it. We also add some styles to the other divs to differentiate them from the element in focus.</p>
<pre><code class="lang-css"><span class="hljs-selector-class">.main-element</span> {
    <span class="hljs-attribute">position</span>: static;
    <span class="hljs-attribute">left</span>: <span class="hljs-number">10px</span>;
    <span class="hljs-attribute">bottom</span>: <span class="hljs-number">10px</span>;
    <span class="hljs-attribute">background-color</span>: yellow;
    <span class="hljs-attribute">padding</span>: <span class="hljs-number">10px</span>;
}

<span class="hljs-selector-class">.sibling-element</span> {
    <span class="hljs-attribute">padding</span>: <span class="hljs-number">10px</span>;
    <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#f2f2f2</span>;
}
</code></pre>
<p>This is the result.</p>
<div class="embed-wrapper"><iframe width="100%" height="300" src="//jsfiddle.net/sarahchima/4vsm3o1d/5/embedded/result,css/" title="Embedded content" loading="lazy"></iframe></div>

<p>Did you notice that it there's no change? This confirms the fact that the left and bottom properties do not affect an element with <code>position: static</code>.</p>
<p>Let's move to the next value.</p>
<h3 id="heading-relative">Relative</h3>
<p>Elements with <code>position: relative</code> remain in the normal flow of the document. But, unlike static elements, the left, right, top, bottom and z-index properties affect the position of the element. An offset, based on the values of left, right, top and bottom properties, is applied to the element relative to itself.</p>
<p>Let's replace <code>position: static</code> with <code>position: relative</code> in our example.</p>
<pre><code class="lang-css"><span class="hljs-selector-class">.main-element</span> {
    <span class="hljs-attribute">position</span>: relative;
    <span class="hljs-attribute">left</span>: <span class="hljs-number">10px</span>;
    <span class="hljs-attribute">bottom</span>: <span class="hljs-number">10px</span>;
    <span class="hljs-attribute">background-color</span>: yellow;
    <span class="hljs-attribute">padding</span>: <span class="hljs-number">10px</span>;
}
</code></pre>
<div class="embed-wrapper"><iframe width="100%" height="300" src="//jsfiddle.net/sarahchima/78tbavnu/14/embedded/result,css/" title="Embedded content" loading="lazy"></iframe></div>

<p>Notice that the left and bottom properties now affect the position of the element. Also notice that the element remains in the normal flow of the document and the offset is applied relative to itself. Take note of this as we move on to other values.</p>
<h3 id="heading-absolute">Absolute</h3>
<p>Elements with <code>position: absolute</code> are positioned relative to their parent elements. In this case, the element is removed from the normal document flow. The other elements will behave as if that element is not in the document. No space is created for the element in the page layout. The values of left, top, bottom and right determine the final position of the element.</p>
<p>One thing to note is that an element with <code>position: absolute</code> is positioned relative to its closest positioned ancestor. That means that the parent element has to have a position value other than <code>position: static</code>. </p>
<p>If the closest parent element is not positioned, it is positioned relative to the next parent element that is positioned. If there's no positioned ancestor element, it is positioned relative to the <code>&lt;html&gt;</code> element.</p>
<p>Let's get back to our example. In this case, we change the position of the main element to <code>position: absolute</code>. We will also give its parent element a relative position so that it does not get positioned relative to the <code>&lt;html&gt;</code> element.</p>
<pre><code class="lang-css"><span class="hljs-selector-class">.main-element</span> {
    <span class="hljs-attribute">position</span>: absolute;
    <span class="hljs-attribute">left</span>: <span class="hljs-number">10px</span>;
    <span class="hljs-attribute">bottom</span>: <span class="hljs-number">10px</span>;
    <span class="hljs-attribute">background-color</span>: yellow;
    <span class="hljs-attribute">padding</span>: <span class="hljs-number">10px</span>;
}

<span class="hljs-selector-class">.parent-element</span> {
    <span class="hljs-attribute">position</span>: relative;
    <span class="hljs-attribute">height</span>: <span class="hljs-number">100px</span>;
    <span class="hljs-attribute">padding</span>: <span class="hljs-number">10px</span>;
    <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#81adc8</span>;
}

<span class="hljs-selector-class">.sibling-element</span> {
    <span class="hljs-attribute">background</span>: <span class="hljs-number">#f2f2f2</span>;
    <span class="hljs-attribute">padding</span>: <span class="hljs-number">10px</span>;
    <span class="hljs-attribute">border</span>: <span class="hljs-number">1px</span> solid <span class="hljs-number">#81adc8</span>;
}
</code></pre>
<p>Here's the result.</p>
<div class="embed-wrapper"><iframe width="100%" height="300" src="//jsfiddle.net/sarahchima/5qyp4m2z/5/embedded/result,css/" title="Embedded content" loading="lazy"></iframe></div>

<p>Notice that no space was created in the document for the element. The element is now positioned relative to the parent element. Take note of this as we move on to the next value.</p>
<h3 id="heading-fixed">Fixed</h3>
<p>Fixed position elements are similar to absolutely positioned elements. They are also removed from the normal flow of the document. But unlike absolutely positioned element, they are always positioned relative to the <code>&lt;html&gt;</code> element. </p>
<p>One thing to note is that fixed elements are not affected by scrolling. They always stay in the same position on the screen.</p>
<pre><code class="lang-css"><span class="hljs-selector-class">.main-element</span> {
    <span class="hljs-attribute">position</span>: fixed;
    <span class="hljs-attribute">bottom</span>: <span class="hljs-number">10px</span>;
    <span class="hljs-attribute">left</span>: <span class="hljs-number">10px</span>;
    <span class="hljs-attribute">background-color</span>: yellow;
    <span class="hljs-attribute">padding</span>: <span class="hljs-number">10px</span>;
}

<span class="hljs-selector-tag">html</span> {
    <span class="hljs-attribute">height</span>: <span class="hljs-number">800px</span>;
}
</code></pre>
<div class="embed-wrapper"><iframe width="100%" height="300" src="//jsfiddle.net/sarahchima/L4gsxwft/2/embedded/result,css/" title="Embedded content" loading="lazy"></iframe></div>

<p>In this case, the element is positioned relative to the <code>&lt;html&gt;</code> element. Try scrolling to see that the element gets fixed on the screen.</p>
<p>Let's move to the final value.</p>
<h3 id="heading-sticky">Sticky</h3>
<p><code>position: sticky</code> is a mix of <code>position: relative</code> and <code>position: fixed</code>. It acts like a relatively positioned element until a certain scroll point and then it acts like a fixed element. Have no fear if you don't understand what this means, the example will help you to understand it better.</p>
<pre><code class="lang-css"><span class="hljs-selector-class">.main-element</span> {
    <span class="hljs-attribute">position</span>: sticky;
    <span class="hljs-attribute">top</span>: <span class="hljs-number">10px</span>;
    <span class="hljs-attribute">background-color</span>: yellow;
    <span class="hljs-attribute">padding</span>: <span class="hljs-number">10px</span>;
}

<span class="hljs-selector-class">.parent-element</span> {
    <span class="hljs-attribute">position</span>: relative;
    <span class="hljs-attribute">height</span>: <span class="hljs-number">800px</span>;
    <span class="hljs-attribute">padding</span>: <span class="hljs-number">50px</span> <span class="hljs-number">10px</span>;
    <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#81adc8</span>;
}
</code></pre>
<div class="embed-wrapper"><iframe width="100%" height="300" src="//jsfiddle.net/sarahchima/f3m0qxgn/8/embedded/result,css/" title="Embedded content" loading="lazy"></iframe></div>

<p>Scroll on the result tab to see the result. You see it acts as a relative element until it gets to a certain point on the screen, <code>top: 10px</code> and then it gets there just like a fixed element.</p>
<h2 id="heading-summary">Summary</h2>
<p>Whoops! That has been quite a ride. But I really hope this article helped you understand the CSS position property and how it works. </p>
<p>Feel free to play around with the fiddles if you don't fully understand any of them. You can change the values and notice the difference or better still, try to use the position property to work on a personal project.</p>
<p>Remember that getting better at CSS takes constant practice. So keep practicing and you'll get better.</p>
<p><em>Want to get notified when I publish a new article? <a target="_blank" href="https://mailchi.mp/69ea601a3f64/join-sarahs-mailing-list">Click here</a>.</em></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python Crash Course for Non-Python Programmers - How to Get Started Quickly ]]>
                </title>
                <description>
                    <![CDATA[ By Srebalaji Thirumalai This article is for people who already have experience in programming and want to learn Python quickly. I created this resource out of frustration when I couldn't find an online course or any other resource that taught Python ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/python-crash-course/</link>
                <guid isPermaLink="false">66d4614d706b9fb1c166b9b5</guid>
                
                    <category>
                        <![CDATA[ 100DaysOfCode ]]>
                    </category>
                
                    <category>
                        <![CDATA[ beginners guide ]]>
                    </category>
                
                    <category>
                        <![CDATA[ code newbie ]]>
                    </category>
                
                    <category>
                        <![CDATA[ coding ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python 3 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Tutorial ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Thu, 28 May 2020 14:44:27 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2020/05/Python-language.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Srebalaji Thirumalai</p>
<p>This article is for people who already have experience in programming and want to learn Python quickly.</p>
<p>I created this resource out of frustration when I couldn't find an online course or any other resource that taught Python to programmers who already knew other programming languages.</p>
<p>In this course, I will be covering all the basics of Python (in-depth lessons will be added later on) so that you can get started with the language very quickly.</p>
<h2 id="heading-table-of-contents">Table of contents</h2>
<ul>
<li>Setting up the environment</li>
<li>Hello World</li>
<li>Strings</li>
<li>Numbers</li>
<li>Float</li>
<li>Bool</li>
<li>List</li>
<li>Tuple</li>
<li>Sets</li>
<li>Dictionary</li>
<li>if..else</li>
<li>Loops</li>
<li>Functions</li>
<li>Classes</li>
<li>Modules</li>
<li>Truthy and Falsy values</li>
<li>Exception handling</li>
</ul>
<h2 id="heading-setting-up-the-environment">Setting up the environment</h2>
<p>To get started, install Python 3. I recommend using VSCode as your editor. It has lots of extensions to configure so that you can setup your environment in just a few minutes.</p>
<h2 id="heading-hello-world">Hello world</h2>
<pre><code>print(<span class="hljs-string">"Hello world"</span>)
</code></pre><p>If you already know programming basics, you'll probably know how to run this program :P. Save the program with the <code>.py</code> extension. Then run <code>python hello.py</code> or <code>python3 hello.py</code>.</p>
<p>In this whole tutorial, we will follow <code>python3</code>. <code>python2</code> will be discontinued by 2020. So I think it’s good to go with the latest version.</p>
<h2 id="heading-variables-and-data-types">Variables and data types</h2>
<p>Variables can contain letters, numbers, and underscores.</p>
<h3 id="heading-strings">Strings</h3>
<pre><code class="lang-python"><span class="hljs-comment"># This is comment in Python</span>
msg_from_computer = <span class="hljs-string">"Hello"</span> <span class="hljs-comment"># String</span>
another_msg =<span class="hljs-string">'Hello in single quote'</span> <span class="hljs-comment"># This is also a String.</span>

print(msg_from_computer + <span class="hljs-string">" World..!"</span>)

<span class="hljs-comment"># Type will return the data type.</span>
print(type(msg_from_computer)) <span class="hljs-comment"># &lt;type 'str'&gt;. We will see the explanation of this later.</span>
</code></pre>
<h3 id="heading-numbers">Numbers</h3>
<pre><code class="lang-python"><span class="hljs-number">2</span>
<span class="hljs-number">2</span> * <span class="hljs-number">3</span>
<span class="hljs-number">2</span> ** <span class="hljs-number">7</span>
(<span class="hljs-number">2</span> + <span class="hljs-number">3</span>) * <span class="hljs-number">4</span>
</code></pre>
<h3 id="heading-floats">Floats</h3>
<pre><code class="lang-python"><span class="hljs-number">2.7</span>

<span class="hljs-number">0.1</span> + <span class="hljs-number">0.2</span> <span class="hljs-comment"># 0.3</span>
<span class="hljs-number">2</span> * <span class="hljs-number">0.1</span> <span class="hljs-comment"># 0.2</span>
</code></pre>
<p>Be careful in Concatenation:</p>
<pre><code class="lang-python">count = <span class="hljs-number">5</span>

print(<span class="hljs-string">"I need"</span> + count + <span class="hljs-string">"chocolates"</span>) <span class="hljs-comment"># This line will throw error. As count is a integer, you have to type cast it.</span>

print(<span class="hljs-string">"I need"</span> + str(count) + <span class="hljs-string">"chocolates"</span>) <span class="hljs-comment"># This will work</span>
</code></pre>
<h3 id="heading-bool">Bool</h3>
<pre><code class="lang-python"><span class="hljs-literal">True</span> <span class="hljs-comment"># First letter is caps</span>

<span class="hljs-literal">False</span>

bool(<span class="hljs-string">"some value"</span>) <span class="hljs-comment"># Returns True</span>

bool(<span class="hljs-string">""</span>) <span class="hljs-comment"># Returns False</span>

bool(<span class="hljs-number">1</span>) <span class="hljs-comment"># Returns True</span>
</code></pre>
<h3 id="heading-list">List</h3>
<p>Lists are basically like arrays. In the Python world, they call them <code>List</code>. And they are ordered.</p>
<pre><code class="lang-python">numbers = [<span class="hljs-string">"one"</span>, <span class="hljs-string">"two"</span>, <span class="hljs-string">"three"</span>]

numbers[<span class="hljs-number">0</span>] <span class="hljs-comment"># one</span>

numbers[<span class="hljs-number">-1</span>] <span class="hljs-comment"># three. This is awesome. If we pass negative value Python will start from the end.</span>

numbers[<span class="hljs-number">-2</span>] <span class="hljs-comment"># two</span>

len(numbers) <span class="hljs-comment"># 3. It just returns the length</span>

numbers.append(<span class="hljs-string">"four"</span>) <span class="hljs-comment"># Append will add the element to the last. ["one", "two", "three", "four"]</span>

numbers.insert(<span class="hljs-number">1</span>, <span class="hljs-string">"wrong_one"</span>) <span class="hljs-comment"># Insert will insert the particular value to the appropiate position. ["one", "wrong_one", "two", "three", "four"]</span>

<span class="hljs-comment"># Deleting a value is somewhat weird</span>
<span class="hljs-keyword">del</span> numbers[<span class="hljs-number">1</span>] <span class="hljs-comment"># Will delete the value in the appropiate position. "one", "two", "three", "four"]</span>

<span class="hljs-comment"># Pop will help you to remove the last element of an array</span>
popped_element = numbers.pop()

print(popped_element) <span class="hljs-comment"># four</span>
print(numbers) <span class="hljs-comment"># ["one", "two", "three"]</span>

<span class="hljs-comment"># Remove elements by value</span>
numbers.remove(<span class="hljs-string">"two"</span>) <span class="hljs-comment"># ["one", "three"]. This will remove only the first occurence of an array.</span>

<span class="hljs-comment"># Sorting</span>
alpha = [<span class="hljs-string">"z"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-string">"a"</span>]
alpha.sort()
print(alpha) <span class="hljs-comment"># ["a", "c", "z"] Sorting is permanent. now `alpha` is sorted permanently</span>

alpha.sort(reverse=<span class="hljs-literal">True</span>)
print(alpha) <span class="hljs-comment">#["z", "c" , "a"] Reverse sorting.</span>

alpha = [<span class="hljs-string">"z"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-string">"a"</span>]
print(sorted(alpha)) <span class="hljs-comment"># ["a", "c", "z"] This will just return the sorted array. It wont save the sorted array to the variable itself.</span>

print(alpha) <span class="hljs-comment"># ["z", "c", "a"] As you can see, it's not sorted</span>

<span class="hljs-comment"># Reversing an array</span>
nums = [<span class="hljs-number">10</span>, <span class="hljs-number">1</span>, <span class="hljs-number">5</span>]
nums.reverse()
print(nums) <span class="hljs-comment"># [5, 1, 10] It just reverses an array. It means it reads from last. It's not sorting it. It's just changing the chronological order.</span>

<span class="hljs-comment"># Slicing elements</span>
alpha = [<span class="hljs-string">'a'</span>, <span class="hljs-string">'b'</span>, <span class="hljs-string">'c'</span>, <span class="hljs-string">'d'</span>, <span class="hljs-string">'e'</span>]
alpha[<span class="hljs-number">1</span>:<span class="hljs-number">3</span>] <span class="hljs-comment"># ['b', 'c']. The first element is the starting index. And Python stops in the item before the second index.</span>
alpha[<span class="hljs-number">2</span>:<span class="hljs-number">5</span>] <span class="hljs-comment"># ['c', 'd', 'e']</span>

alpha[:<span class="hljs-number">4</span>] <span class="hljs-comment"># [ 'a', 'b', 'c', 'd'] In this case, the first index is not present, so Python startes from the beginning.</span>

alpha[:<span class="hljs-number">3</span>] <span class="hljs-comment"># ['a', 'b', 'c']</span>

alpha[<span class="hljs-number">3</span>:] <span class="hljs-comment"># ['d', 'e'] In this case, last index is not present. So it travels till the end of the list.</span>

alpha[:] <span class="hljs-comment"># ['a', 'b', 'c', 'd', 'e'] There is no starting or ending index. So you know what happens. And this helps you in copying the entire array. I think I don't have to explain that if you copy the array, then any changes in the original array won't affect the copied array.</span>

another_alpha = alpha <span class="hljs-comment"># This is not copying the array. Any changes in alpha will affect another_alpha too.</span>
</code></pre>
<h3 id="heading-tuples">Tuples</h3>
<p>Tuples are just like lists but they are <strong>immutable.</strong> This means you can’t add or update them. You can just read elements. And remember, like lists, Tuples are also sequential.</p>
<pre><code class="lang-python">nums = (<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>)

print(nums) <span class="hljs-comment"># (1, 2, 3)</span>

print(nums[<span class="hljs-number">0</span>]) <span class="hljs-comment"># 1</span>

print(len(nums)) <span class="hljs-comment"># 3</span>

empty_tuple = () <span class="hljs-comment"># empty tuple. Length is zero.</span>

num = (<span class="hljs-number">1</span>, ) <span class="hljs-comment"># Note the trailing comma. When defining a single element in the tuple, consider adding a trailing comma.</span>

num = (<span class="hljs-number">1</span>)
print(type(num)) <span class="hljs-comment"># &lt;type 'int'&gt; It won't return a tuple. Because there is no trailing comma.</span>

<span class="hljs-comment"># Creating a new tuple from the existing tuple</span>
nums = (<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>)
char = (<span class="hljs-string">'a'</span>, )
new_tuple = nums + char
print(new_tuple) <span class="hljs-comment"># (1, 2, 3, 'a')</span>
</code></pre>
<h3 id="heading-sets">Sets</h3>
<p>Sets are unordered collections with no duplicate elements.</p>
<pre><code class="lang-python">alpha = {<span class="hljs-string">'a'</span>, <span class="hljs-string">'b'</span>, <span class="hljs-string">'c'</span>, <span class="hljs-string">'a'</span>}

print(alpha) <span class="hljs-comment"># set(['a', 'c', 'b']) As you can see, duplicates are removed in sets. And also the output is not ordered.</span>

<span class="hljs-comment"># Accessing items in set</span>
<span class="hljs-comment"># You can't access by index because Sets are unordered. You can access it only by loop. Don't worry about the for loop, we will get that in-depth in the following section.</span>
<span class="hljs-keyword">for</span> ele <span class="hljs-keyword">in</span> alpha:
  print(ele)

<span class="hljs-comment"># To add element into the set</span>
alpha.add(<span class="hljs-string">'s'</span>)

<span class="hljs-comment"># add can be used to insert only one element. If you want multiple elements, then update will be handy</span>
alpha.update([<span class="hljs-string">'a'</span>, <span class="hljs-string">'x'</span>, <span class="hljs-string">'z'</span>]) <span class="hljs-comment"># set(['a', 'c', 'b', 'x', 'z']) Remember duplicated are removed.</span>

<span class="hljs-comment"># Length of the alpha</span>
len(alpha) <span class="hljs-comment"># 5</span>

<span class="hljs-comment"># Remove the element from the set</span>
alpha.remove(<span class="hljs-string">'a'</span>)
alpha.discard(<span class="hljs-string">'a'</span>) <span class="hljs-comment"># It's safer to use discard than remove. Discard will never throw an error even if the element is not present in the set but remove will do.</span>
</code></pre>
<h3 id="heading-dictionaries">Dictionaries</h3>
<p>Dictionaries are key-value maps in Python. They're unordered.</p>
<pre><code class="lang-python">user = {<span class="hljs-string">'id'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'name'</span>: <span class="hljs-string">'John wick'</span>, <span class="hljs-string">'email'</span>: <span class="hljs-string">'john@gmail.com'</span>}

user[<span class="hljs-string">'id'</span>] <span class="hljs-comment"># 1</span>
user[<span class="hljs-string">'name'</span>] <span class="hljs-comment"># John wick</span>

<span class="hljs-comment"># Length of the dict</span>
len(user) <span class="hljs-comment"># 3</span>

<span class="hljs-comment"># Add new key-value pair</span>
user[<span class="hljs-string">'age'</span>] = <span class="hljs-number">35</span>

<span class="hljs-comment"># To get all the keys</span>
keys = user.keys() <span class="hljs-comment"># ['id', 'name', 'email', 'age']. This will return a list.</span>

<span class="hljs-comment"># To get all the values</span>
values = user.values() <span class="hljs-comment"># [1, 'John wick', 'john@gmail.com']</span>

<span class="hljs-comment"># To delete a key</span>
<span class="hljs-keyword">del</span> user[<span class="hljs-string">'age'</span>]

<span class="hljs-comment"># Example of nested dict.</span>
user = {
  <span class="hljs-string">'id'</span>: <span class="hljs-number">1</span>,
  <span class="hljs-string">'name'</span>: <span class="hljs-string">'John wick'</span>,
  <span class="hljs-string">'cars'</span>: [<span class="hljs-string">'audi'</span>, <span class="hljs-string">'bmw'</span>, <span class="hljs-string">'tesla'</span>],
  <span class="hljs-string">'projects'</span>: [
    {
      <span class="hljs-string">'id'</span>: <span class="hljs-number">10</span>,
      <span class="hljs-string">'name'</span>: <span class="hljs-string">'Project 1'</span>
    },
    {
      <span class="hljs-string">'id'</span>: <span class="hljs-number">11</span>,
      <span class="hljs-string">'name'</span>: <span class="hljs-string">'Project 2'</span>
    }
  ]
}

<span class="hljs-comment"># We will see, how to loop through the dict in for loop section.</span>
</code></pre>
<h2 id="heading-ifelse">if..else</h2>
<p>You likely already know how the <code>if..else</code> statement works. But let's see an example here:</p>
<pre><code class="lang-python">a = <span class="hljs-number">5</span>
b = <span class="hljs-number">10</span>

<span class="hljs-comment"># See for the indentation. Indentations are very important in Python. Python will throw error if indentations are proper.</span>
<span class="hljs-keyword">if</span> a == <span class="hljs-number">5</span>:
  print(<span class="hljs-string">'Awesome'</span>)

<span class="hljs-comment"># and is equivalent to &amp;&amp; </span>
<span class="hljs-keyword">if</span> a == <span class="hljs-number">5</span> <span class="hljs-keyword">and</span> b == <span class="hljs-number">10</span>:
  print(<span class="hljs-string">'A is five and b is ten'</span>)

<span class="hljs-comment"># if else statement. This is same as most of the languages.</span>
<span class="hljs-keyword">if</span> a == <span class="hljs-number">5</span>:
  print(<span class="hljs-string">'A is five'</span>)
<span class="hljs-keyword">elif</span> a == <span class="hljs-number">6</span>:
  print(<span class="hljs-string">'A is six'</span>)
<span class="hljs-keyword">elif</span> a == <span class="hljs-number">7</span>:
  print(<span class="hljs-string">'A is seven'</span>)
<span class="hljs-keyword">else</span>:
  print(<span class="hljs-string">'A is some number'</span>)

<span class="hljs-comment"># or is equivalent to ||</span>
<span class="hljs-keyword">if</span> a &lt; <span class="hljs-number">6</span> <span class="hljs-keyword">or</span> a == <span class="hljs-number">10</span>:
  print(<span class="hljs-string">'A should be less than 6 or should be equal to ten'</span>)

<span class="hljs-comment"># not is equivalent to !</span>
<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> a == <span class="hljs-number">10</span>:
  print(<span class="hljs-string">'A is not equal to 10'</span>)

<span class="hljs-comment"># This is the short-hand notation of if statement.</span>
<span class="hljs-keyword">if</span> a == <span class="hljs-number">5</span>: print(<span class="hljs-string">'A is five'</span>)

<span class="hljs-comment"># Short-hand for if-else statement.</span>
print(<span class="hljs-string">'A is five'</span>) <span class="hljs-keyword">if</span> a == <span class="hljs-number">5</span> <span class="hljs-keyword">else</span> print(<span class="hljs-string">'A is not five'</span>)
</code></pre>
<h2 id="heading-loops">Loops</h2>
<p>Python has two types of loops:</p>
<ol>
<li>For</li>
<li>While</li>
</ol>
<h3 id="heading-while-loops">while loops</h3>
<pre><code class="lang-python"><span class="hljs-comment"># The following while print till 5. Remember the indentation.</span>
i = <span class="hljs-number">0</span>
<span class="hljs-keyword">while</span> i &lt;= <span class="hljs-number">5</span>:
  print(i)
  i += <span class="hljs-number">1</span>

<span class="hljs-comment"># Using brake or continue in while loop</span>
i = <span class="hljs-number">0</span>
<span class="hljs-keyword">while</span> i &lt;= <span class="hljs-number">5</span>:
  print(i)
  i += <span class="hljs-number">1</span>
  <span class="hljs-keyword">if</span> i == <span class="hljs-number">2</span>:
    <span class="hljs-keyword">break</span> <span class="hljs-comment"># You can try using continue here</span>

<span class="hljs-comment"># Here comes the interesting part. While loop has else part. Else part will execute once the entire loop is completed.</span>
i = <span class="hljs-number">10</span>
<span class="hljs-keyword">while</span> i &lt;= <span class="hljs-number">15</span>:
  print(i)
  i += <span class="hljs-number">1</span>
<span class="hljs-keyword">else</span>:
  print(<span class="hljs-string">'Completed'</span>)

<span class="hljs-comment"># Output</span>
<span class="hljs-number">10</span>
<span class="hljs-number">11</span>
<span class="hljs-number">12</span>
<span class="hljs-number">13</span>
<span class="hljs-number">14</span>
<span class="hljs-number">15</span>
Completed

<span class="hljs-comment"># But if you are using break in the loop, then Python will break out of the entire loop and it won't execute else part.</span>
i = <span class="hljs-number">10</span>
<span class="hljs-keyword">while</span> i &lt;= <span class="hljs-number">15</span>:
  print(i)
  i += <span class="hljs-number">1</span>
  <span class="hljs-keyword">if</span> i == <span class="hljs-number">13</span>:
    <span class="hljs-keyword">break</span>
<span class="hljs-keyword">else</span>:
  print(<span class="hljs-string">'Completed'</span>)

<span class="hljs-comment"># Output</span>
<span class="hljs-number">10</span>
<span class="hljs-number">11</span>
<span class="hljs-number">12</span>
</code></pre>
<h3 id="heading-for-loops">For loops</h3>
<pre><code class="lang-python"><span class="hljs-comment"># For loops like for(i=0; i&lt;5; i++) are not mostly used in Python. Instead, Python insists on iterating over items</span>

arr = [<span class="hljs-string">'a'</span>, <span class="hljs-string">'b'</span>, <span class="hljs-string">'c'</span>, <span class="hljs-string">'d'</span>, <span class="hljs-string">'e'</span>]
<span class="hljs-keyword">for</span> ele <span class="hljs-keyword">in</span> arr: <span class="hljs-comment"># Prints every element in an array</span>
  print(ele)

word = <span class="hljs-string">"python"</span>
<span class="hljs-keyword">for</span> char <span class="hljs-keyword">in</span> word: <span class="hljs-comment"># Prints every char in the word</span>
  print(char)

<span class="hljs-comment"># You can use break, continue and else part in for-loop also.</span>

<span class="hljs-comment"># When talking about for loops, I noticed that most resources have also mentioned about range() function. (We will deal with functions later part of this article.)</span>

<span class="hljs-comment"># range() function will generates a sequence of numbers.</span>

<span class="hljs-comment"># range(start, stop, step)</span>
<span class="hljs-comment"># start - optional, the starting number. Default is 0. This number is included in the sequence</span>
<span class="hljs-comment"># stop - mandatory, the ending number. This number is excluded in the sequence</span>
<span class="hljs-comment"># step - optional, increments by. Default is 1.</span>

range(<span class="hljs-number">3</span>) <span class="hljs-comment"># This code generates a sequences from 0 to 2.</span>
range(<span class="hljs-number">1</span>, <span class="hljs-number">4</span>) <span class="hljs-comment"># This code generates a sequence from 1 to 3.</span>
range(<span class="hljs-number">1</span>, <span class="hljs-number">8</span>, <span class="hljs-number">2</span>) <span class="hljs-comment"># This code generates a sequence with 1, 3, 5, 7</span>

<span class="hljs-keyword">for</span> ele <span class="hljs-keyword">in</span> range(<span class="hljs-number">3</span>): <span class="hljs-comment"># Prints from 0 to 2. </span>
  print(ele)

<span class="hljs-comment"># In the below example, you can see I have used range to iterate through an array with index.</span>
<span class="hljs-keyword">for</span> index <span class="hljs-keyword">in</span> range(<span class="hljs-number">0</span>, len(arr)):
  print(arr[index])

dict = {<span class="hljs-string">'name'</span>: <span class="hljs-string">'John wick'</span>}

<span class="hljs-comment"># You can iterate through a dictionary. items() will return both keys and values. You can also use keys() and values() if needed. </span>
<span class="hljs-keyword">for</span> key, value <span class="hljs-keyword">in</span> dict.items():
  print(key + <span class="hljs-string">" is "</span> + value)

<span class="hljs-comment"># You can also use a built-in function enumerate(). enumurate() will return a tuple with index. It is mostly used to add a counter to the iterable objects in Python.</span>
<span class="hljs-keyword">for</span> index, value <span class="hljs-keyword">in</span> enumerate(arr):
  print(value + <span class="hljs-string">" is present in "</span> + str(index))
</code></pre>
<h2 id="heading-functions">Functions</h2>
<pre><code class="lang-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">prints_hello_world</span>():</span>
  print(<span class="hljs-string">'Hello world from Python'</span>)

prints_hello_world()

<span class="hljs-comment"># Return statement</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">prints_something</span>(<span class="hljs-params">something</span>):</span>
  <span class="hljs-keyword">return</span> something + <span class="hljs-string">' from Python'</span>

print(prints_something(<span class="hljs-string">'Hello world'</span>))

<span class="hljs-comment"># If you pass wrong number of arguments like two or three arguments to this function then Python will throw an error.</span>
print(prints_something())

<span class="hljs-comment"># Default parameter. I think its common in most languages now.</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">prints_something</span>(<span class="hljs-params">something = <span class="hljs-string">'Hello world'</span></span>):</span>
  print(something + <span class="hljs-string">' from Python'</span>)

<span class="hljs-comment"># keyword arguments. You can pass explicitly which parameter should be matched. In this way, you don't have to send the arguments in order just explicitly mention the parameter name.</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">movie_info</span>(<span class="hljs-params">title, director_name, ratings</span>):</span>
  print(title + <span class="hljs-string">" - "</span> + director_name + <span class="hljs-string">" - "</span> + ratings)

movie_info(ratings=<span class="hljs-string">'9/10'</span>, director_name=<span class="hljs-string">'David Fincher'</span>, title=<span class="hljs-string">'Fight Club'</span>)


<span class="hljs-comment"># Arbitrary number of arguments</span>
<span class="hljs-comment"># Sometimes, you dont know how many arguments are passed. In that case, you have ask Python to accept as many arguments as possible.</span>

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">languages</span>(<span class="hljs-params">*names</span>):</span>
  print(names) <span class="hljs-comment"># ('Python', 'Ruby', 'JavaScript', 'Go'). This is a tuple.</span>
  <span class="hljs-keyword">return</span> <span class="hljs-string">'You have mentioned '</span>+ str(len(names))+ <span class="hljs-string">' languages'</span>

print(languages(<span class="hljs-string">'Python'</span>, <span class="hljs-string">'Ruby'</span>, <span class="hljs-string">'JavaScript'</span>, <span class="hljs-string">'Go'</span>)) <span class="hljs-comment"># You have mentioned 4 languages</span>

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">languages</span>(<span class="hljs-params">fav_language, *names</span>):</span>
  print(names) <span class="hljs-comment"># ('Ruby', 'JavaScript', 'Go')</span>
  <span class="hljs-keyword">return</span> <span class="hljs-string">'My favorite language is '</span> + fav_language+ <span class="hljs-string">'. And Im planning to learn other '</span>+ str(len(names))+ <span class="hljs-string">' languages too'</span>

print(languages(<span class="hljs-string">'Python'</span>, <span class="hljs-string">'Ruby'</span>, <span class="hljs-string">'JavaScript'</span>, <span class="hljs-string">'Go'</span>)) <span class="hljs-comment"># My favorite language is Python. And Im planning to learn other 3 languages too</span>


<span class="hljs-comment"># Arbitrary keyword arguments</span>
<span class="hljs-comment"># These types of arguments are useful when you don't know what kind of parameters are passed. In the previous case, it's useful when you don't know how many number of parameters are passed but in this case, you don't know what type of information will be passed.</span>

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">user_info</span>(<span class="hljs-params">**info</span>):</span>
  print(info) <span class="hljs-comment"># {'id': 1, 'name': 'Srebalaji', 'fav_language': ['Python', 'Ruby']} This is a dictionary</span>

<span class="hljs-comment"># Arbitrary keyword args will always expect to mention the parameters explicitly</span>
user_info(id=<span class="hljs-number">1</span>, name=<span class="hljs-string">'Srebalaji'</span>, fav_language=[<span class="hljs-string">'Python'</span>, <span class="hljs-string">'Ruby'</span>])

<span class="hljs-comment"># The below code will throw error. There is no keyword arguments.</span>
user_info(<span class="hljs-number">1</span>, <span class="hljs-string">'Srebalaji'</span>)

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">user_info</span>(<span class="hljs-params">id, name, **info</span>):</span>
  print(info) <span class="hljs-comment"># {'fav_language': ['Python', 'Ruby'], 'twitter_handle': '@srebalaji'}</span>

user_info(<span class="hljs-number">1</span>, <span class="hljs-string">'Srebalaji'</span>, fav_language=[<span class="hljs-string">'Python'</span>, <span class="hljs-string">'Ruby'</span>], twitter_handle=<span class="hljs-string">'@srebalaji'</span>)
</code></pre>
<h2 id="heading-classes">Classes</h2>
<pre><code class="lang-python"><span class="hljs-comment"># Python is general purpose and also object oriented language.</span>

<span class="hljs-comment"># It's a convention that the class name starts with caps. But Python doesn't throw any error if you are not following it.</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Animal</span>():</span>
  <span class="hljs-comment"># This is the constructor.</span>
  <span class="hljs-comment"># As you can see in every method of the class I have passed 'self' as the first parameter. The first parameter is always expected to be the current instance of the class and it is mandatory to pass the instance in the first parameter. And you can name that variable whatever you like.</span>
  <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span>(<span class="hljs-params">self, name</span>):</span> 
    self.name = name

  <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">eat</span>(<span class="hljs-params">self</span>):</span>
    print(self.name +<span class="hljs-string">' eats'</span>)

  <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">sleep</span>(<span class="hljs-params">self</span>):</span>
    print(self.name+<span class="hljs-string">' sleeps'</span>)

<span class="hljs-comment"># Initiating a class</span>
dog = Animal(<span class="hljs-string">'harry'</span>)
dog.eat()

print(dog.name) <span class="hljs-comment"># As you can see, 'name' attribute is also avaiable in public. </span>

<span class="hljs-comment"># It can even be modified.</span>
dog.name = <span class="hljs-string">'Rosie'</span>
print(dog.name) <span class="hljs-comment"># 'Rosie'</span>

<span class="hljs-comment"># Technically there is no way to make private attrbiutes in Python. But there are some techniques Python devs are using it. I will try to list out some.</span>

<span class="hljs-comment"># Protected attributes.</span>
<span class="hljs-comment"># These attributes can only be accessed within the class and also by the sub-class.</span>

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Person</span>():</span>
  <span class="hljs-comment"># You can see that I have used different name for the first parameter.</span>
  <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span>(<span class="hljs-params">my_instance, name</span>):</span>
    <span class="hljs-comment"># 'name' attribute is protected.</span>
    my_instance._name = name

  <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">reads</span>(<span class="hljs-params">my_instance</span>):</span>
    print(my_instance._name + <span class="hljs-string">' reads'</span>)

  <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">writes</span>(<span class="hljs-params">my_object</span>):</span>
    print(my_object._name + <span class="hljs-string">' writes'</span>)


person1 = Person(<span class="hljs-string">'Ram'</span>)

person1.reads()

<span class="hljs-comment"># But the worst part is that instance of the class can still access and change it :P</span>

print(person1._name) <span class="hljs-comment"># 'Ram'</span>

person1._name = <span class="hljs-string">'I can still change.'</span>
print(person1._name) <span class="hljs-comment"># I can still change</span>

<span class="hljs-comment"># Protected can useful sometimes. Let's see how private attributes works. That can be a life saver sometimes.</span>

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Person</span>():</span>
  <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span>(<span class="hljs-params">self, name</span>):</span>
    <span class="hljs-comment"># 'name' attribute is private.</span>
    self.__name = name

  <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">reads</span>(<span class="hljs-params">self</span>):</span>
    print(self.__name + <span class="hljs-string">' reads'</span>)

  <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">writes</span>(<span class="hljs-params">self</span>):</span>
    print(self.__name + <span class="hljs-string">' writes'</span>)

  <span class="hljs-comment"># This is a private method. This can't be accessed outside the class.</span>
  <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__some_helper_method</span>():</span>
      print(<span class="hljs-string">'Some helper method.'</span>)


person1 = Person(<span class="hljs-string">'Ram'</span>)
person1.reads() <span class="hljs-comment"># Ram reads</span>

print(person1.name) <span class="hljs-comment"># Will throw an error. 'Person' object has no attribute 'name'</span>

print(person1.__name) <span class="hljs-comment"># Will throw an error. 'Person' object has no attribute '__name'</span>

<span class="hljs-comment"># Private attributes can only be accessed within the class. So it's safe. But still there is a catch :P</span>

print(person1._Person__name) <span class="hljs-comment"># Ram.</span>

<span class="hljs-comment"># You can even change the value</span>
person1._Person__name = <span class="hljs-string">'Hari'</span>

print(person1._Person__name) <span class="hljs-comment"># Hari.</span>

<span class="hljs-comment"># But every dev know that accessing and modifying the private attributes is a bad practice. And Python doesn't really have a clear restriction to avoid it. So you got to trust your peers on this.</span>

<span class="hljs-comment"># Inheritance</span>

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Animal</span>():</span>
  <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span>(<span class="hljs-params">self, name</span>):</span>
    self.name = name

  <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">eat</span>(<span class="hljs-params">self</span>):</span>
    print(<span class="hljs-string">'Animal eats'</span>)

  <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">sleep</span>(<span class="hljs-params">self</span>):</span>
    print(<span class="hljs-string">'Animal sleeps'</span>)

<span class="hljs-comment"># Dog is a sub class of Animal</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Dog</span>(<span class="hljs-params">Animal</span>):</span>
  <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span>(<span class="hljs-params">self, name</span>):</span>
    self.name = name

  <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">eat</span>(<span class="hljs-params">self</span>):</span>
    print(<span class="hljs-string">'Dog eats'</span>)


dog1 = Dog(<span class="hljs-string">'harry'</span>)
dog1.eat() <span class="hljs-comment"># Dog eats</span>
dog1.sleep() <span class="hljs-comment"># Animal sleeps</span>
</code></pre>
<h2 id="heading-modules">Modules</h2>
<pre><code class="lang-python"><span class="hljs-comment"># Modules helps us to organise code in Python. You can split code in different files and in folders and can access them when you wanted.</span>

<span class="hljs-comment"># Consider the below file. It has two functions.</span>
<span class="hljs-comment"># calculations.py</span>

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">add</span>(<span class="hljs-params">a, b</span>):</span>
  <span class="hljs-keyword">return</span> a + b

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">substract</span>(<span class="hljs-params">a, b</span>):</span>
  <span class="hljs-keyword">return</span> a - b

<span class="hljs-comment"># consider another file which we consider as a main file.</span>
<span class="hljs-comment"># main.py</span>
<span class="hljs-keyword">import</span> calculations

calculations.add(<span class="hljs-number">5</span>, <span class="hljs-number">10</span>) <span class="hljs-comment"># 15</span>
calculations.substract(<span class="hljs-number">10</span>, <span class="hljs-number">3</span>) <span class="hljs-comment"># 7</span>

<span class="hljs-comment"># In the above example, you have imported the file and have accessed the functions in that.</span>

<span class="hljs-comment"># There are other ways of importing.</span>

<span class="hljs-comment"># You can change the method name if you want</span>
<span class="hljs-keyword">import</span> calculations <span class="hljs-keyword">as</span> calc
calc.add(<span class="hljs-number">5</span>, <span class="hljs-number">10</span>) <span class="hljs-comment"># 15</span>

<span class="hljs-comment"># You can import specific functions you need.</span>
<span class="hljs-comment"># You can access the function directly. You don't want to mention the module.</span>
<span class="hljs-keyword">from</span> calculations <span class="hljs-keyword">import</span> add
add(<span class="hljs-number">5</span>, <span class="hljs-number">10</span>) <span class="hljs-comment"># 15</span>

<span class="hljs-comment"># You can also import multiple functions</span>
<span class="hljs-keyword">from</span> calculations <span class="hljs-keyword">import</span> add, multiple, divide

<span class="hljs-comment"># You can import all the functions</span>
<span class="hljs-keyword">from</span> calculations <span class="hljs-keyword">import</span> *
add(<span class="hljs-number">10</span>, <span class="hljs-number">15</span>)
multiple(<span class="hljs-number">4</span>, <span class="hljs-number">5</span>)
divide(<span class="hljs-number">10</span>, <span class="hljs-number">3</span>)

<span class="hljs-comment"># These will work for classes and variables too.</span>
</code></pre>
<h2 id="heading-truthy-and-falsy-values">Truthy and Falsy values</h2>
<pre><code class="lang-python"><span class="hljs-comment"># According to Python docs, any object can be tested truthy or falsy.</span>

<span class="hljs-comment"># Below are the Truthy values</span>
<span class="hljs-literal">True</span>
<span class="hljs-number">2</span> <span class="hljs-comment"># Any numeric values other than 0</span>
[<span class="hljs-number">1</span>] <span class="hljs-comment"># non-empty list</span>
{<span class="hljs-string">'a'</span>: <span class="hljs-number">1</span>} <span class="hljs-comment"># non-empty dict</span>
<span class="hljs-string">'a'</span> <span class="hljs-comment"># non-empty string</span>
{<span class="hljs-string">'a'</span>} <span class="hljs-comment"># non-empty Set</span>

<span class="hljs-comment"># Below are the Falsy values</span>
<span class="hljs-literal">False</span>
<span class="hljs-literal">None</span>
<span class="hljs-number">0</span> 
<span class="hljs-number">0.0</span>
[] <span class="hljs-comment"># empty list</span>
{} <span class="hljs-comment"># empty dict</span>
() <span class="hljs-comment"># empty tuple</span>
<span class="hljs-string">""</span> <span class="hljs-comment"># empty string</span>
range(<span class="hljs-number">0</span>) <span class="hljs-comment"># empty set</span>

<span class="hljs-comment"># You can evaluate any object to bool using</span>
bool(any_object) <span class="hljs-comment"># returns True or False</span>
</code></pre>
<h2 id="heading-exception-handling">Exception handling</h2>
<pre><code class="lang-python"><span class="hljs-comment"># The code which can raise exceptions can be wrapped in 'try' statement. 'except' will handle that exception.</span>
<span class="hljs-keyword">try</span>:
  some_error_raised
<span class="hljs-keyword">except</span>:
  print(<span class="hljs-string">'Exception handled'</span>)

<span class="hljs-comment"># Every exception in Python will inherit from 'exception' class. </span>

<span class="hljs-comment"># In the below example, you can see that the 'NameError' is the exception class derived from the main 'Exception' class.</span>
<span class="hljs-keyword">try</span>:
  some_error_raised
<span class="hljs-keyword">except</span> Exception <span class="hljs-keyword">as</span> e:
  print(<span class="hljs-string">'Exception raised'</span>)
  print(e.__class__) <span class="hljs-comment"># &lt;class 'NameError'&gt;</span>

<span class="hljs-comment"># 'else' block will execute if the code in the 'try' block has raised no exception. This will be useful in many situations.</span>

<span class="hljs-keyword">try</span>:
  some_error_raised
<span class="hljs-keyword">except</span>:
  print(<span class="hljs-string">'Exception handled'</span>)
<span class="hljs-keyword">else</span>:
  print(<span class="hljs-string">'No error raised. You can resume your operation here'</span>) <span class="hljs-comment"># this code will execute if no error is raised in the 'try' block</span>

<span class="hljs-comment"># final block</span>
<span class="hljs-comment"># Code in 'finally' block will execute no matter whether the exception is raised or not.</span>
<span class="hljs-keyword">try</span>:
  some_error_raised
<span class="hljs-keyword">except</span> Exception <span class="hljs-keyword">as</span> e:
  print(<span class="hljs-string">'Exception raised'</span>)
<span class="hljs-keyword">else</span>:
  print(<span class="hljs-string">'This will execute if no error is raised in try'</span>)
<span class="hljs-keyword">finally</span>:
  print(<span class="hljs-string">'This code will run whether the code has error or not.'</span>)


<span class="hljs-comment"># Raise your own exception. You can also create your own exception class inherited from Exception class.</span>
<span class="hljs-keyword">try</span>:
  <span class="hljs-keyword">raise</span> ZeroDivisionError <span class="hljs-comment"># Python built-in exception class</span>
<span class="hljs-keyword">except</span> Exception <span class="hljs-keyword">as</span> e:
  print(e.__class__) <span class="hljs-comment"># &lt;class 'ZeroDivisionError'&gt;</span>

<span class="hljs-comment"># Catch a specific exception.</span>
<span class="hljs-keyword">try</span>:
  <span class="hljs-keyword">raise</span> ZeroDivisionError <span class="hljs-comment"># Python built-in exception class</span>
<span class="hljs-keyword">except</span> TypeError <span class="hljs-keyword">as</span> e:
  print(<span class="hljs-string">'Only type error exception is captured'</span>)
<span class="hljs-keyword">except</span> ZeroDivisionError <span class="hljs-keyword">as</span> e:
  print(<span class="hljs-string">'Only zero division exception is captured'</span>)
<span class="hljs-keyword">except</span> Exception <span class="hljs-keyword">as</span> e:
  print(<span class="hljs-string">'Other execeptions'</span>)
</code></pre>
<p>Thank you for reading :)</p>
<p>Originally posted in this Github repo: <a target="_blank" href="https://github.com/srebalaji/python-crash-course">Python crash course</a> </p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What Is a Senior Developer and How Can I Become One? ]]>
                </title>
                <description>
                    <![CDATA[ Becoming a Senior Developer is something many of us strive for as we continue our code journey and build our career. But what does it actually mean to be a "Senior" Developer? What being a Senior Developer is not Before we start, let's get this out o... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/what-does-it-mean-to-be-a-senior-developer-and-how-can-we-become-one/</link>
                <guid isPermaLink="false">66bee969bc07dbcebef938e6</guid>
                
                    <category>
                        <![CDATA[ Code Journey ]]>
                    </category>
                
                    <category>
                        <![CDATA[ career advice ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Career development  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ code newbie ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Developer ]]>
                    </category>
                
                    <category>
                        <![CDATA[ developers ]]>
                    </category>
                
                    <category>
                        <![CDATA[ development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Junior developer  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ learn to code ]]>
                    </category>
                
                    <category>
                        <![CDATA[ personal development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ professional development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Self Development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ self-improvement  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ software development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Colby Fayock ]]>
                </dc:creator>
                <pubDate>Thu, 07 May 2020 16:11:39 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2020/05/senior-developer.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Becoming a Senior Developer is something many of us strive for as we continue our code journey and build our career. But what does it actually mean to be a "Senior" Developer?</p>
<h2 id="heading-what-being-a-senior-developer-is-not">What being a Senior Developer is not</h2>
<p>Before we start, let's get this out of the way. Contradictory to what you'll see on 95%+ of the job postings online, a Senior Developer is not strictly correlated to only the number of years on your resume.</p>
<p>It's true, more often than not, that many years on the job typically bring with them a lot of experience. And with some companies you can get by with just that. But it's not the only quality that rightfully proves that someone is at a Senior level.</p>
<p>This is a common problem in the software world and can lead to high expectations with low delivery. It can also lead to conflict within the team when your new 15 year 10x Senior Developer refuses to work with others.</p>
<p>So what can we do to prepare ourselves for that role?</p>
<h2 id="heading-what-makes-a-senior-developer">What makes a Senior Developer?</h2>
<p>Looking back through my career at the developers on my team that I've admired and respected the most, it's really come down to four qualities:</p>
<ul>
<li>Experience</li>
<li>Leadership</li>
<li>Mentorship</li>
<li>Technical Ability</li>
</ul>
<p>It's not good enough to look at any one of these as the sole representation of how someone will perform on a team. Each developer is unique and may be stronger with one quality than another. But it's important to see how those qualities come together to determine how someone will help your team grow.</p>
<p>Let's break these each down a little bit.</p>
<h2 id="heading-experience">Experience</h2>
<p>Experience is typically thought of as years on the job, and while it's not completely inaccurate, it doesn't tell the whole story.</p>
<p>Just as every developer is unique, so is their experience. While one developer might have spent five years in an intensive position where they worked to solve hard technical challenges every day. And another might have been kicking their feet up at a local shop where their only responsibility was to update the website every week.</p>
<p>And that's not necessarily a bad thing! We each have our own journey and need to balance our lives to fit it. But it's not realistic to say those 5 years were the same.</p>
<p>Then what does experience really mean?</p>
<h3 id="heading-recognizing-patterns-from-previous-work">Recognizing patterns from previous work</h3>
<p>Every developer has a story (whether they remember it or not) of a random error they stumbled into through their development experience. This could be something dealing with Javascript, webpack, or even your operating system, and it just doesn't make any sense!</p>
<p>But whether through a peer or by searching on Google, you figure it out. And three months later when you're working on another project and run into the same thing, you don't even have to Google it, or you already know what to Google. You already know what the issue is and can get past it quickly and move on.</p>
<p>This is the kind of experience that makes a difference. Being able to recognize patterns whether because of an error or because it was super successful is what helps each of us grow. These are the experiences that help a team grow when others are stuck and you can get them out of a bind.</p>
<h3 id="heading-recognizing-what-you-dont-know">Recognizing what you don't know</h3>
<p>It's also important to understand what you don't know. I think part of what contributes to my own <a target="_blank" href="https://www.colbyfayock.com/2020/04/overcoming-your-fear-of-writing-and-how-you-can-find-motivation/">personal struggle with imposter syndrome</a> is that the more I learn the more I realize I don't know.</p>
<p>But this shouldn't be looked upon as a bad or scary thing. This should be inspirational. That means that your craft that you've been working on has that much more cool stuff to explore!</p>
<div class="embed-wrapper">
        <blockquote class="twitter-tweet">
          <a href="https://twitter.com/DavidKPiano/status/1255495988661420034"></a>
        </blockquote>
        <script defer="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
<p>It's important to realize how this impacts your work and the rest of the team. For example, it doesn't help anybody if you act like you know everything and commit to huge amounts of work. When you commit to that work and actually don't understand it, it could knock your sprint off track which can frustrate the entire team (and the client).</p>
<p>Whether it's when you're planning or during development, don't be afraid to ask for help. Come up for air and throw your hands up! Just because you're the only Senior Developer, doesn't mean you can't learn something from a Junior team member.</p>
<p>Try to take a good look at where you've been, what you understand, and where you could benefit to dig in more.</p>
<h2 id="heading-leadership">Leadership</h2>
<p>As a senior member of a team, I would expect a developer to have a natural tendency to lead. While this doesn't mean you have to be an actual Tech Lead on a project or make any of the final decisions, this does mean that you should have a basic level of being able to help push the project forward</p>
<h3 id="heading-understanding-the-bigger-picture">Understanding the bigger picture</h3>
<p>If you've worked on projects with team members, you should know that each project or feature typically comes with a bunch of stories to work through to get it done. Each story should be a focused piece that helps accomplish a larger goal.</p>
<p>Where this becomes challenging is if no one on the team understands how each of these stories help to accomplish that bigger goal. As a Senior Developer, you should be able to see how each piece fits into the puzzle and why the story is written with the specific acceptance criteria. And if you don't know, you'll know how to get the answers and make sure it's communicated to the team.</p>
<p>If you're unsure of the direction, try to take a step back. Try to see where it fits in. Help to lead the project team to that ultimate goal.</p>
<h3 id="heading-helping-direct-less-experienced-team-members">Helping direct less experienced team members</h3>
<p>This comes naturally in the ability to help guide those on our team who are more junior or less experienced. It's common for developers to lose focus on the big picture. But as we just discussed, a Senior Developer should be able to continuously have a good idea of the overall project and where the different stories fit into the bigger epic.</p>
<p>Help guide others on your team to get them on the right path. While it would be beneficial for everyone to understand how everything fits in to the bigger picture, sometimes it makes more sense to help an individual focus on how their specific task fits in.</p>
<p>Try to recognize this struggle when working with others whether by encouraging them to ask more questions or helping to guide them if they're not quite on the right path as you're reviewing their code.</p>
<h2 id="heading-mentorship">Mentorship</h2>
<p>It's often more convenient to be heads down on your work and not have to worry about what anybody else is doing, but is that really benefiting anyone?</p>
<h3 id="heading-helping-to-build-up-other-team-members">Helping to build up other team members</h3>
<p>You might be the so-called <a target="_blank" href="https://www.techopedia.com/definition/31673/10x-developer">10x developer</a>, but doing everything yourself and not helping others can only slow down the overall team. Often you'll be stuck picking up the pieces that you could have easily caught if you spent an extra second pairing up with someone else on your team.</p>
<p>It's also bad for morale. No one wants to feel alone on a project and even more so as a junior. Software is a big scary world, a little guidance can go a long way to helping others to become more productive and subsequently encouraging a happier, less stressful environment.</p>
<p>It's easy to forget that we were all a junior team member at one time. While you might take things for granted, the concepts might be really challenging for others to grasp.</p>
<p>Keep in mind that we're all in this together. Celebrate the wins whether big or small. If somebody's struggling, reach out to help.</p>
<h3 id="heading-knowledge-sharing">Knowledge sharing</h3>
<p>Sharing knowledge is something many teams struggle with. While we're all usually hopeful that there's a way to accomplish it, most of the time it just goes unsolved. So what can we do?</p>
<p>Take it upon yourself to share what you know. Did you just rework the core business logic? Offer 30 minutes to walk everyone through the code. Pair up and screen share with your code reviewer if they're having a hard time understanding it.</p>
<p>This is something we can encourage everyone to do. You'll naturally learn more by presenting your work by reinforcing what you just worked on. This is helpful whether you're a Senior or it's your first time opening up a code editor.</p>
<h2 id="heading-technical-ability">Technical Ability</h2>
<p>I intentionally wanted to leave this until the end. This is because, while it's important, there are more aspects to your journey to becoming a Senior Developer than just being really, really good at something.</p>
<h3 id="heading-ability-to-get-moving-quickly">Ability to get moving quickly</h3>
<p>As a Senior Developer, I would expect another Senior Developer to become productive in something quicker than a Junior Developer. If they're an expert with Javascript, I would expect them to understand the core principles and patterns of the language.</p>
<p>But back to the idea of recognizing what you don't know, it's not reasonable to expect all Senior Developers to know everything. I wouldn't consider an expert in Ruby any less of a Senior Developer because they don't know Javascript, but I would expect them to understand how to apply what they know when building in and learning another language.</p>
<h3 id="heading-promoting-software-patterns">Promoting software patterns</h3>
<p>More often than not, the code pattern you just came up with isn't new. And that's okay! The goal of building great software isn't necessarily to be unique with every solution.</p>
<p>And because of that, we can learn from past work by seeing what's succeeded and what's maybe not gone over so well to find patterns that work for you and your team.</p>
<p>Patterns like <a target="_blank" href="https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller">MVC (Model View Controller)</a> didn't become popular without reason. Developers learned from the past and have learned from their peers who have solved big software challenges. With that knowledge, they can apply the solutions to their own work. It's not about reinventing the wheel, it's about solving challenges and making a good product.</p>
<h2 id="heading-we-all-have-our-own-unique-journeys-ahead">We all have our own unique journeys ahead</h2>
<p>No matter what anyone tells you, we all have our own unique code journeys. This is meant to encourage you and inspire you to become a better overall developer and understand how your work impacts the rest of the team.</p>
<p>While you certainly might succeed without taking these things into consideration, you could be missing out on core traits that could make people not want to work with you from a human being perspective.</p>
<p>Whatever your journey, keep these things in mind as you grow into becoming a better developer!</p>
<h2 id="heading-what-do-you-think-makes-a-good-senior-developer">What do you think makes a good Senior Developer?</h2>
<p>Do you think I'm spot on or way off? Share with me on <a target="_blank" href="https://twitter.com/colbyfayock">Twitter</a>!</p>
<div id="colbyfayock-author-card">
  <p>
    <a href="https://twitter.com/colbyfayock">
      <img src="https://res.cloudinary.com/fay/image/upload/w_2000,h_400,c_fill,q_auto,f_auto/w_1020,c_fit,co_rgb:007079,g_north_west,x_635,y_70,l_text:Source%20Sans%20Pro_64_line_spacing_-10_bold:Colby%20Fayock/w_1020,c_fit,co_rgb:383f43,g_west,x_635,y_6,l_text:Source%20Sans%20Pro_44_line_spacing_0_normal:Follow%20me%20for%20more%20JavaScript%252c%20UX%252c%20and%20other%20interesting%20things!/w_1020,c_fit,co_rgb:007079,g_south_west,x_635,y_70,l_text:Source%20Sans%20Pro_40_line_spacing_-10_semibold:colbyfayock.com/w_300,c_fit,co_rgb:7c848a,g_north_west,x_1725,y_68,l_text:Source%20Sans%20Pro_40_line_spacing_-10_normal:colbyfayock/w_300,c_fit,co_rgb:7c848a,g_north_west,x_1725,y_145,l_text:Source%20Sans%20Pro_40_line_spacing_-10_normal:colbyfayock/w_300,c_fit,co_rgb:7c848a,g_north_west,x_1725,y_222,l_text:Source%20Sans%20Pro_40_line_spacing_-10_normal:colbyfayock/w_300,c_fit,co_rgb:7c848a,g_north_west,x_1725,y_295,l_text:Source%20Sans%20Pro_40_line_spacing_-10_normal:colbyfayock/v1/social-footer-card" alt="Follow me for more Javascript, UX, and other interesting things!" width="2000" height="400" loading="lazy">
    </a>
  </p>
  <ul>
    <li>
      <a href="https://twitter.com/colbyfayock">? Follow Me On Twitter</a>
    </li>
    <li>
      <a href="https://youtube.com/colbyfayock">?️ Subscribe To My Youtube</a>
    </li>
    <li>
      <a href="https://www.colbyfayock.com/newsletter/">✉️ Sign Up For My Newsletter</a>
    </li>
  </ul>
</div>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ The Best Developer Communities to Join in 2020 ]]>
                </title>
                <description>
                    <![CDATA[ If you want to grow as a developer, I can't over-emphasize the benefits of joining a developer community. There are many advantages, from peer-programming to sharing knowledge, mentorship, sharing support, sharing tools, code reviews, answering quest... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/best-developer-communities-to-be-part-of-in-2020/</link>
                <guid isPermaLink="false">66d84e0b7211ea6be29e1b3f</guid>
                
                    <category>
                        <![CDATA[ 100DaysOfCode ]]>
                    </category>
                
                    <category>
                        <![CDATA[ code newbie ]]>
                    </category>
                
                    <category>
                        <![CDATA[ community ]]>
                    </category>
                
                    <category>
                        <![CDATA[ community building ]]>
                    </category>
                
                    <category>
                        <![CDATA[ developers ]]>
                    </category>
                
                    <category>
                        <![CDATA[ mentorship ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Bolaji Ayodeji ]]>
                </dc:creator>
                <pubDate>Wed, 11 Mar 2020 11:23:26 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2020/03/banner-dev-community-high-res-v5.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>If you want to grow as a developer, I can't over-emphasize the benefits of joining a developer community. There are many advantages, from peer-programming to sharing knowledge, mentorship, sharing support, sharing tools, code reviews, answering questions, and much more.</p>
<p>Communities are usually built on shared struggles of individuals learning in a particular region, and the goals of each community differ per the individual's collective needs.</p>
<p>Over the years, these developer communities have grown across the world with different goals and missions but still with the general aim of providing a platform for developers to learn, interact, share ideas, support each other and grow.</p>
<p>"If you want to go quickly, go alone. If you want to go far, go together." – African Proverb</p>
<p>To better help those looking out for communities to join, I have put together a list of 20 best communities in no particular order ranging from Engineering, Design, Data Science, Machine Learning, Developer Relations, Technical Writing, and more.</p>
<p>If you know any more communities you have found helpful, please share them in the comments section for the benefit of all :).</p>
<h2 id="heading-1-women-who-codehttpswwwwomenwhocodecom">1. <a target="_blank" href="https://www.womenwhocode.com">Women Who Code</a></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1583767022913/Bl9cmrbm3.png" alt="Screen Shot 2020-03-09 at 8.17.55 PM.png" width="3104" height="1978" loading="lazy"></p>
<p>Women Who Code is an international nonprofit organization that provides a global community for women in tech with events, coding resources, jobs, mentorship, and more. They aim to inspire, support, and help women develop technical skills and excel in their careers.</p>
<p>Join now to get exclusive access to their community, events, scholarships, free event tickets, job boards, and more.</p>
<h2 id="heading-2-hashnodehttphashnodecom">2. <a target="_blank" href="http://hashnode.com/">Hashnode</a></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1583767029246/Wc8I44ICK.png" alt="Screen Shot 2020-03-09 at 8.18.13 PM.png" width="3104" height="1978" loading="lazy"></p>
<p>Hashnode is an online community where developers share knowledge and grow their careers. Developers from around the world participate in consequential discussions on Hashnode. You can write stories, ask open-ended questions as well as technical questions, ask questions anonymously, and start polls. You can also <a target="_blank" href="https://hashnode.com/amas">ask popular tech teams and developer influencers questions</a> or learn from <a target="_blank" href="https://hashnode.com/series/she-inspires-cjt0d02lq001e7ps2wo420g15">stories of awesome women in tech</a>.</p>
<p><a target="_blank" href="https://hashnode.com/devblog">Hashnode's Devblog</a> platform enables you to create your personal blog on your custom domain in a few simple steps with everything you need to grow as a blogger. (No Paywall, Free domain, SSL, Automatic backup of posts, Markdown, AMP Support and more). <a target="_blank" href="https://hashnode.com/post/hey-developers-own-your-canonical-ck1ggpmgs000cd9s1323ltbo7">Own your canonical</a>, make your contents independent and build your domain authority.</p>
<h2 id="heading-3-freecodecamphttpswwwfreecodecamporg">3. <a target="_blank" href="https://www.freecodecamp.org/">Freecodecamp</a></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1583767049767/y7Zt2QlNH.png" alt="Screen Shot 2020-03-09 at 8.18.25 PM.png" width="3104" height="1978" loading="lazy"></p>
<p>freeCodeCamp is a nonprofit organization that helps people learn to code for free through <a target="_blank" href="https://youtube.com/freecodecamp">thousands of videos</a>, <a target="_blank" href="https://www.freecodecamp.org/news/">articles</a>, <a target="_blank" href="https://www.freecodecamp.org/learn">interactive coding lessons</a> and thousands of freeCodeCamp study groups around the world.</p>
<p>You learn by completing coding challenges and building projects alongside verified certifications.</p>
<h2 id="heading-4-stackoverflowhttpsstackoverflowcom">4. <a target="_blank" href="https://stackoverflow.com">StackOverflow</a></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1583822554757/loF0gg6C_.png" alt="Screen Shot 2020-03-10 at 11.54.48 AM.png" width="3104" height="1978" loading="lazy"></p>
<p>Stack Overflow is a question and answer site for programmers with tons of questions and answers on a wide range of topics in computer programming.</p>
<p>You can learn from already asked and answered questions, share your programming knowledge by answering asked questions or share your issues/bugs here.</p>
<h2 id="heading-5-hackernewshttpsnewsycombinatorcom">5. <a target="_blank" href="https://news.ycombinator.com/">HackerNews</a></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1583767082088/Q0YqW1SYH.png" alt="Screen Shot 2020-03-09 at 8.18.37 PM.png" width="3104" height="1978" loading="lazy"></p>
<p>Hacker News is a social news website focusing on computer science and entrepreneurship, where you can submit a link to technical content.</p>
<p>This is a great place to promote your contents to a wide range of viewers and find amazing contents from other technical geeks.</p>
<h2 id="heading-6-hackernoonhttpshackernooncom">6. <a target="_blank" href="https://hackernoon.com/">Hackernoon</a></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1583767188926/VJpYpPvXb.png" alt="Screen Shot 2020-03-09 at 8.19.24 PM.png" width="3104" height="1978" loading="lazy"></p>
<p>Hackernoon is a tech media site that delivers stories and opinions written by real tech professionals and read by Technologists, Software Developers, Bitcoiners, Blockchain Enthusiasts.</p>
<p>You can write technical articles here and learn from a wide range of available unfettered technical contents.</p>
<h2 id="heading-7-sitepoint-communityhttpswwwsitepointcomcommunity">7. <a target="_blank" href="https://www.sitepoint.com/community/">SitePoint Community</a></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1583767313026/icmkWaWra.png" alt="Screen Shot 2020-03-09 at 8.20.43 PM.png" width="3104" height="1978" loading="lazy"></p>
<p>SitePoint community is a community for web designers and developers to discuss everything web development from HTML, CSS, JavaScript, PHP, Photoshop, SEO, and more.</p>
<p>Similar to StackOverflow, you can ask and answer all web development questions here.</p>
<h2 id="heading-8-kagglehttpswwwkagglecom">8. <a target="_blank" href="https://www.kaggle.com/">Kaggle</a></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1583770714229/a2TMmsGxG.png" alt="Screen Shot 2020-03-09 at 8.21.33 PM.png" width="3104" height="1978" loading="lazy"></p>
<p>Kaggle is an online community of data scientists and machine learning practitioners with a vast repository of community published data and code with over 19,000 public datasets and 200,000 open notebooks. Kaggle also offers courses on Machine Learning, Pandas, Python, Deep Learning, Data Visualization, SQL alongside competitions, and discussions to help you grow.</p>
<h2 id="heading-9-indie-hackershttpswwwindiehackerscom">9. <a target="_blank" href="https://www.indiehackers.com/">Indie Hackers</a></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1583770977312/nts0ka4KJ.png" alt="Screen Shot 2020-03-09 at 8.21.51 PM.png" width="3104" height="1978" loading="lazy"></p>
<p>An Indie hacker is "a person building an online project that can generate revenue." Indie Hackers is a global community of developers who are sharing their projects, strategies, and revenue statistics behind their companies and side projects.</p>
<p>You get to learn from the founders behind hundreds of successful online businesses and connect with others who are starting and growing their own companies through their global meetups, discussions, articles, and more.</p>
<h2 id="heading-10-code-newbiehttpswwwcodenewbieorg">10. <a target="_blank" href="https://www.codenewbie.org/">Code Newbie</a></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1583771054882/r0_JMdQwj.png" alt="Screen Shot 2020-03-09 at 8.22.04 PM.png" width="3104" height="1978" loading="lazy"></p>
<p>Code Newbie is the most supportive community of programmers and people learning to code. It started as a weekly Twitter chat made to provide much-needed support to people learning to code. It has since grown into a supportive, international community of people learning to code.</p>
<h2 id="heading-11-digital-ocean-communityhttpswwwdigitaloceancomcommunity">11. <a target="_blank" href="https://www.digitalocean.com/community">Digital Ocean Community</a></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1583772555970/XEc8qjO3o.png" alt="Screen Shot 2020-03-09 at 8.22.24 PM.png" width="3104" height="1978" loading="lazy"></p>
<p>This is an inclusive place where developers can find or lend support and contribute to the community of DevOps and cloud computing enthusiasts. The community provides comprehensive guides, tutorials, trends for developers, Q/A sessions, and much more.</p>
<h2 id="heading-12-product-hunthttpswwwproducthuntcom">12. <a target="_blank" href="https://www.producthunt.com/">Product Hunt</a></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1583772958688/KokPlSTVo.png" alt="Screen Shot 2020-03-09 at 8.22.39 PM.png" width="3104" height="1978" loading="lazy"></p>
<p>Product Hunt is an exciting community of featured amazing products launched every day. It's a place for product-loving enthusiasts to share and find out about the latest mobile applications, websites, hardware projects, and tech creations.</p>
<h2 id="heading-13-reddithttpsredditcom">13. <a target="_blank" href="https://reddit.com">Reddit</a></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1583773710321/fw0VeFcpX.png" alt="Screen Shot 2020-03-09 at 8.23.05 PM.png" width="3104" height="1978" loading="lazy"></p>
<p>Reddit is global community of thousands sub communities, endless conversations, and authentic networking with tons of never-ending streams for developers like <a target="_blank" href="https://www.reddit.com/r/reactjs">r/reactjs</a>, <a target="_blank" href="https://www.reddit.com/r/vuejs/">r/vuejs</a>, <a target="_blank" href="https://www.reddit.com/r/JAMstack_dev/">r/JAMstack_dev</a>, <a target="_blank" href="https://www.reddit.com/r/Python/">r/Python</a> and more.</p>
<h2 id="heading-14-devcareershttpsdevcareerio">14. <a target="_blank" href="https://devcareer.io/">DevCareers</a></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1583773250536/xZ3rsqt_7.png" alt="Screen Shot 2020-03-09 at 8.23.24 PM.png" width="3104" height="1978" loading="lazy"></p>
<p>DevCareer is a nonprofit organization that is focused on supporting upcoming developers with mentorship and resources to enable them to become world-class developers. They provide laptops, co-working space, resources, mentorship, and job placements for software developers in Africa who pass through the program.</p>
<h2 id="heading-15-the-interaction-design-foundation-communityhttpswwwinteraction-designorgcommunity">15. <a target="_blank" href="https://www.interaction-design.org/community">The Interaction Design Foundation Community</a></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1583773574041/SE2sSQD65.png" alt="Screen Shot 2020-03-09 at 8.23.47 PM.png" width="3104" height="1978" loading="lazy"></p>
<p>The Interaction Design Foundation Community provides an exciting opportunity for designers to create and hone their portfolio while getting ready for a new User Experience job. They offer courses from UX experts, local UX Design Meet-ups in cities across the world, UX discussions, collaboration, and much more.</p>
<h2 id="heading-16-daily-uihttpswwwdailyuico">16. <a target="_blank" href="https://www.dailyui.co/">Daily UI</a></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1583773673814/PHOWpfSjm.png" alt="Screen Shot 2020-03-09 at 8.24.01 PM.png" width="3104" height="1978" loading="lazy"></p>
<p>Daily UI is a free series of daily UI design challenges, design inspiration, and surprise rewards to make you become a better designer in 100 days. Their amazing daily reminders will motivate you to keep learning.</p>
<h2 id="heading-17-devtohttpsdevto">17. <a target="_blank" href="https://dev.to/">Dev.to</a></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1583800152076/8iPX4fMzG.png" alt="Screen Shot 2020-03-09 at 8.24.23 PM.png" width="3104" height="1978" loading="lazy"></p>
<p>DEV is a community of software developers helping one another out. DEV provides a place for developers to collaborate and network while learning and sharing their knowledge.</p>
<h2 id="heading-18-devrel-collectivehttpsdevrelcollectivefun">18. <a target="_blank" href="https://devrelcollective.fun/">DevRel Collective</a></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1583800172125/BB1LuPI5q.png" alt="Screen Shot 2020-03-09 at 8.24.39 PM.png" width="3104" height="1978" loading="lazy"></p>
<p>DevRel Collective is a community of developer relations enthusiasts that exists to facilitate sharing information, resources, and encouragement among the DevRel community.</p>
<p>If you are actively involved in developer communities, advocacy, or event management, you should join this community.</p>
<h2 id="heading-19-facebook-developer-circleshttpsdevelopersfacebookcomdevelopercircles">19. <a target="_blank" href="https://developers.facebook.com/developercircles/">Facebook Developer Circles</a></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1583800225775/y_xlf62k8.png" alt="Screen Shot 2020-03-09 at 8.25.54 PM.png" width="3104" height="1978" loading="lazy"></p>
<p>Developer Circles from Facebook is a program designed to create locally organized communities for developers. These communities educate and provide a forum for discussion and knowledge sharing around topics that are top-of-mind for developers in a particular market.</p>
<p><a target="_blank" href="https://developers.facebook.com/developercircles/find">Find a local Developer Circle nearest to you here</a>.</p>
<h2 id="heading-20-google-developers-groupshttpsdevelopersgooglecomcommunitygdg">20. <a target="_blank" href="https://developers.google.com/community/gdg">Google Developers Groups</a></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1583800247570/gnodVTzig.png" alt="Screen Shot 2020-03-09 at 8.26.13 PM.png" width="3104" height="1978" loading="lazy"></p>
<p>GDG brings software developers with similar interests together to meet through meetups and hands-on workshops. The community welcomes everyone and anyone interested in tech from beginners to experienced professionals.``</p>
<p><a target="_blank" href="https://developers.google.com/community/gdg/groups">Find a GDG chapter nearest to you here</a></p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>"There is no power for change greater than a community discovering what it cares about." – Margaret J. Wheatley</p>
<p>The bond in developer communities has grown from just "technical groups" to "family groups" where everyone is passionate about sharing knowledge, giving back, and helping everyone reach higher heights.</p>
<p>Isn't this just amazing? Cheers to the new age where sharing knowledge and togetherness become the order of the day. ??</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How I became a web developer in under 7 months – and how you can too ]]>
                </title>
                <description>
                    <![CDATA[ By Niamh McCooey Around this time last year I started learning the basics of code in my spare time, and sure enough found myself working as a professional developer just 7 months later – with no CS degree, no bootcamp, and no clue. So if you’re readi... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-i-became-a-web-developer-in-under-7-months-and-how-you-can-too/</link>
                <guid isPermaLink="false">66d460409208fb118cc6cff4</guid>
                
                    <category>
                        <![CDATA[ code newbie ]]>
                    </category>
                
                    <category>
                        <![CDATA[ coding ]]>
                    </category>
                
                    <category>
                        <![CDATA[ community ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Developer ]]>
                    </category>
                
                    <category>
                        <![CDATA[ development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ diversity in tech ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Front-end Development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Junior developer  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ learning to code ]]>
                    </category>
                
                    <category>
                        <![CDATA[ motivation ]]>
                    </category>
                
                    <category>
                        <![CDATA[ professional development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ self-improvement  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ woman in tech ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Women Who Code ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 21 Oct 2019 06:59:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2019/10/ninetofive-1.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Niamh McCooey</p>
<p>Around this time last year I started learning the basics of code in my spare time, and sure enough found myself working as a professional developer just 7 months later – with no CS degree, no bootcamp, and no clue.</p>
<p>So if you’re reading this you’re probably thinking: how on earth did that happen?</p>
<p>Well, my thoughts exactly.</p>
<p>In this article I’ll share what I did in those initial 7 months leading up to my first ever dev job. I’ll also include lots of resources I found helpful along the way, and bits of advice that I wish I had taken on sooner.</p>
<p>If you’re a fellow coding beginner aiming to make a similar career change into web development, my hope is that this article offers you some guidance… </p>
<p><em>(If you haven’t started coding yet but want to find ways to begin, you might find</em> <a target="_blank" href="https://www.freecodecamp.org/news/the-first-step-towards-learning-to-code-2e4c31e86630/"><em><strong>my previous article</strong></em></a> <em>a little more helpful, which includes lots of insights on how to take that first step towards learning to code.)</em> </p>
<p>So, lesson number 1: </p>
<h2 id="heading-share-your-interest-early">? Share your interest early.</h2>
<p>When I seriously started thinking about programming, the first thing I did was <em>talk about it</em>.</p>
<p>I asked my friends and family if anyone knew any developers who’d be willing to chat about their jobs, and ended up meeting so many smart and creative people who gave genuine, practical and (most importantly) varying insights.</p>
<p>The key here is to try and meet as many different kinds of developers as possible. If you can, speak to people with all sorts of interests and specialties at various stages in their careers. This kind of access can unveil the variety involved in programming, and you can use it to demystify the idea of coding as this big, scary thing. </p>
<p>Another good habit to pick up early is to constantly:</p>
<h2 id="heading-ask">? Ask.</h2>
<p>I asked developers some of the most basic things like:   </p>
<ul>
<li>What the hell is GitHub?</li>
<li>Do you really not need a computer science degree?</li>
<li>Why is everyone always talking about React?</li>
<li>What kind of tech jobs do you think there’ll be in 10 years time?</li>
</ul>
<h2 id="heading-and-go-to-meetups">? And go to meetups.</h2>
<p>If you’re lucky enough to live in a place like London where there are plenty of meetups happening – go!</p>
<p>This is great practice early on not only because you might get to have human beings guide you through coding problems, but because it lets you meet with organisers, coaches, bootcamp students, etc. etc. </p>
<p>By going to meetups you can also build up your network in the industry and hear about potential job opportunities suited to your skill level. </p>
<p>Some of my favourite beginner-friendly and inclusive meetups include:  </p>
<ul>
<li><strong><a target="_blank" href="https://codebar.io/">Codebar</a>.</strong> This is an amazing weekly meetup with over 20 chapters worldwide, where you can work with coaches and really get stuck into your code (they also run virtual meetups for those who can’t make it to events).</li>
<li><strong><a target="_blank" href="https://www.adaslist.co/">Ada’s List</a>.</strong> This organisation runs friendly monthly meetups in London alongside a virtual community online, offering women a great way to meet other women in tech (and not just coders).</li>
<li><strong><a target="_blank" href="https://24pullrequests.com/">24 Pull Requests</a>.</strong> This annual event (also in London) is a lovely place to contribute to open source projects, and includes an introduction to Github – very handy for beginners.</li>
<li><strong><a target="_blank" href="https://nodegirls.com/">Node Girls</a>.</strong> This group organises meetups a couple of times a year in multiple locations, and is a great place for newbies to learn Javascript and Node.js.</li>
</ul>
<h2 id="heading-next-play-the-field">?‍♀️ Next: Play the field.</h2>
<p>For ages, I thought the first thing I had to know about code was what language I wanted to learn. But not only is it ok not to know where to start, I actually think it’s a huge advantage.</p>
<p>There are so many languages and topics out there, and while this can definitely be overwhelming as a beginner, you can also make the most of your naivete and just try it all out without getting too preoccupied with all the surrounding jargon (for instance, you don’t need to know the entire history of CSS to just play around with it) – which leads me to my favourite bit of advice from those initial 7 months...</p>
<h2 id="heading-be-bad">? Be bad.</h2>
<p>When I first started I was so scared of how bad I was going to be. And one of my biggest revelations since then was: <em>nobody cares.</em> </p>
<p>Of course you’re going to be bad at it! You’ll be terrible. But, having a beginner status gives you license to suck at everything, so use it while the stakes are low. Enjoy being terrible – it’s fun, and freeing.</p>
<h2 id="heading-do-the-tutorials">?‍? Do the tutorials.</h2>
<p>When you’re trying to level up from total beginner, tutorials are great because their format eliminates the problem of having to figure out what you want to learn and how you want to learn it (while you’re actually just trying to learn it).</p>
<p>Some of my favourites include:  </p>
<ul>
<li>Any of the <a target="_blank" href="http://tutorials.codebar.io/"><strong>Codebar tutorials</strong></a> (great for learning different languages from scratch)</li>
<li>Rachel Andrew’s <a target="_blank" href="https://gridbyexample.com/"><strong>video tutorials</strong></a> (awesome for learning CSS grid)</li>
<li>NodeGirls <a target="_blank" href="https://nodegirls.com/resources"><strong>workshop tutorials</strong></a> (nicely paced walkthroughs that introduce you to Javascript &amp; Node.js)</li>
</ul>
<p>When it comes to tutorials though, try and understand how you learn best and don’t get bogged down in one method or approach just because it’s the most popular or it was suggested to you. </p>
<p><strong>You might not know much about coding at this stage, but what you do know is how you learn best. So trust your own judgement here.</strong></p>
<p>Here are some different learning methods that have worked well for me:  </p>
<ul>
<li><strong><a target="_blank" href="https://learn.freecodecamp.org/">freeCodeCamp curriculum</a>.</strong> Byte sized exercises for different languages, great for when you need a break from heavy tutorials and want to play around with something a little lighter.</li>
<li><a target="_blank" href="https://flukeout.github.io/"><strong>CSS Diner</strong></a> &amp; <strong><a target="_blank" href="https://flexboxfroggy.com/">Flexbox Froggy</a>.</strong> Two fun games that are great for helping you get to grips with CSS selectors and practicing flexbox layouts.</li>
<li><strong><a target="_blank" href="https://codepen.io/">Codepen</a>.</strong> A coding playground where you can look at people’s projects alongside their code, letting you to connect the dots between the two.</li>
<li><strong><a target="_blank" href="https://grasshopper.codes/">Grasshopper</a>.</strong> A sweet, beginner-friendly mobile app that introduces you to Javascript fundamentals.</li>
<li><strong><a target="_blank" href="https://eloquentjavascript.net/">Eloquent Javascript</a>.</strong> This digital book pairs really well with freeCodeCamp exercises, giving a thorough and foundational understanding of Javascript.</li>
</ul>
<h2 id="heading-be-a-copycat">? Be a copycat.</h2>
<p>Soon enough, you’ll feel like it’s time to build something a bit more substantial. And a really fun way to do this without feeling overwhelmed is by trying to replicate cool stuff you’ve already seen (you can <a target="_blank" href="https://www.awwwards.com/"><strong>browse some cool looking website here</strong></a>). And as you do this:</p>
<h2 id="heading-know-why">? Know why.</h2>
<p>If you’re building your first ever website, before you even get to writing any code remember to ask yourself <em>why</em>. Are you doing it to:  </p>
<ul>
<li>Just fill up your portfolio?</li>
<li>Learn a particular language?</li>
<li>Try out different hacks you’ve heard about?</li>
</ul>
<p>As a beginner, your main reason for building something is probably to learn by doing so your website or app is just a means to an end. It’s the byproduct, not the goal. Remember that.</p>
<p>Knowing this distinction is crucial to learning effectively, especially if you’re teaching yourself because as you’ll quickly learn: everyone’s got their own way of doing things. For instance if you’re building a website as a way to learn flexbox, then don’t let someone talk you into using Bootstrap.</p>
<p>If someone tells you there’s a quicker way to achieve a goal they may be right, but they might not have clarity on what the real aim is.</p>
<h2 id="heading-so-articulate-it">? So articulate it.</h2>
<p>First to yourself, then to others, and then make your own decision about how you want to go about it. This part might seem super obvious, but in the midst of soaking up all that information, it’s all too easy to forget.</p>
<h2 id="heading-then-chill">? Then chill.</h2>
<p>The great thing about self-directed learning is that you decide the whats and the hows right? Well, another great thing is that your deadlines are made up by you, and if you don’t meet them, nobody cares. So give yourself a break!</p>
<h2 id="heading-stay-inspired">⚡️ Stay inspired.</h2>
<p>This learning process is twofold: on one hand you need to spend time figuring out the technical minutiae in your code, and on the other you need to look around every now and again and see what other people are doing.</p>
<p>Blending these two approaches gives a great holistic perspective on your learning, and helps mitigate the stress of getting caught up in all the details. Here are some tips I found useful in my first 7 months:</p>
<h2 id="heading-go-to-conferences">? Go to conferences.</h2>
<ul>
<li><strong><a target="_blank" href="https://2020.yougotthis.io/">You Got This</a>.</strong> This is a UK-based event specifically for developers in the early stages of their careers. I went to it without ever having worked as a developer, felt totally comfortable there and left ready to get stuck into some code.</li>
<li><strong><a target="_blank" href="https://newadventuresconf.com/2020/">New Adventures</a>.</strong> This Nottingham-based conference provides a less technical, more meta approach to tech and where it fits into the world these days. With varied speakers and far-reaching topics, it’s super inspiring.</li>
</ul>
<h2 id="heading-read-up">? Read up.</h2>
<ul>
<li><a target="_blank" href="https://www.freecodecamp.org/news/"><strong>freeCodeCamp</strong></a> (of course)</li>
<li><a target="_blank" href="https://medium.com/@codebar"><strong>Codebar</strong></a> (they run a great series of interviews with self-taught developers)</li>
<li><a target="_blank" href="https://alistapart.com/"><strong>A List Apart</strong></a> (publishes a huge range of topics from design to coding to career progression)</li>
<li><a target="_blank" href="https://www.smashingmagazine.com/"><strong>Smashing Magazine</strong></a> (features articles, books, events, jobs – you name it)</li>
</ul>
<h2 id="heading-follow-people">? Follow people.</h2>
<ul>
<li><a target="_blank" href="http://batmandy.com/"><strong>Mandy Michael</strong></a> – has a lot of seriously cool stuff on Copeden.</li>
<li><a target="_blank" href="https://rachelandrew.co.uk/"><strong>Rachel Andrew</strong></a> – gives loads of inspiring and practical talks, many of which you can find online.</li>
<li><a target="_blank" href="https://jensimmons.com/"><strong>Jen Simmons</strong></a> – has a rich Youtube channel full of insights on design and developing.</li>
<li><a target="_blank" href="https://saron.io/"><strong>Saron Yitbarek</strong></a> – founder &amp; CEO of <a target="_blank" href="https://www.codenewbie.org/"><strong>CodeNewbie</strong></a> – total boss.  </li>
</ul>
<p>And that’s essentially it. Looking back over the last year, I’ve come to realise that these core lessons were what sustained me as I went from being a copywriter who had never looked at a single line of code, to working as a full time developer.</p>
<p>So if you’re thinking about switching careers but are worried about committing to such a big change, try breaking it down into these smaller goals and challenges. </p>
<p>If it can work for a woman who had absolutely no clue what she was doing at the time, it can surely work for you. So please: use these lessons learned, tailor them to your own learning style, and get after it. </p>
<p><img src="https://lh3.googleusercontent.com/KfVMbmrEhlwPoXAeg53mgHOLeXylklhprf77qdkNe9WJI8LdpyUheCHArRc_4xUIDQnjtiZYJOIZErtgp6TDIAXeLavMXUvPzMobLjSWhLWmLfK055ydSVYyj-9DGhjhybiMznIn" alt="Image" width="480" height="270" loading="lazy"></p>
<hr>
<p><em>If you want to get in touch or keep up to date on future articles, talks and events, you can follow me on twitter here:</em> <a target="_blank" href="https://twitter.com/niamhmccoo"><em><strong>https://twitter.com/niamhmccoo</strong></em></a></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How Developers Think: A Walkthrough of the Planning and Design Behind a Simple Web App ]]>
                </title>
                <description>
                    <![CDATA[ I love the number of awesome tutorials there are on how to make different web apps. As great as these are, though, I often felt stuck when it came to starting my own web apps.  So I wrote this article to walk you through my thought process. This is ]]>
                </description>
                <link>https://www.freecodecamp.org/news/a-walk-through-the-developer-thought-process/</link>
                <guid isPermaLink="false">66c8c8c485ffc69fd028a824</guid>
                
                    <category>
                        <![CDATA[ 100DaysOfCode ]]>
                    </category>
                
                    <category>
                        <![CDATA[ code newbie ]]>
                    </category>
                
                    <category>
                        <![CDATA[ coding ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Junior developer  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ programing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Chris Blakely ]]>
                </dc:creator>
                <pubDate>Thu, 29 Aug 2019 15:01:34 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2019/08/alvaro-reyes-qWwpHwip31M-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>I love the number of awesome tutorials there are on how to make different web apps. As great as these are, though, I often felt stuck when it came to starting my own web apps. </p>
<p>So I wrote this article to walk you through my thought process. This is how I plan and develop my own projects.</p>
<p>A quick note before we start: this article is not a "silver bullet" guide on how to create ANY project. This is just how I personally approach my projects. It may work for you, it may not.</p>
<p>There is no "right" way to create any app. Remember: there are many roads that will get you to the end of your journey. (Unless, you're taking a shiny ring to Mordor, in which case there is only 1 road, unfortunately).</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/09/39rblx.jpg" alt="Image" width="600" height="400" loading="lazy"></p>
<p>I'm going to use React.js to code the example app. I've included a Code Sandbox with the finished app at the end of this article. </p>
<p>So you'll also need to have basic familiarity with setting up a React project. Don't worry though, the principles in this article still apply regardless of the language you use to code the app.</p>
<p>OK let's get started. Today we're going to design a... TODO-LIST!</p>
<p>Only joking. We're going to make a simple calculator.</p>
<h2 id="heading-what-does-it-do">"What does it do?"</h2>
<p>This is the first question I ask myself before starting any side project. I want my calculator to be able to:</p>
<ul>
<li>Add, subtract, divide and multiply numbers</li>
<li>Show the result of the calculation </li>
<li>Reset the display</li>
</ul>
<p>This should be plenty for now. Planning out the features in this way gives you an idea of your app will do, and starts putting you "in the zone" as it were. </p>
<p>This approach also gives you a solid goal to work towards. Once you have implemented all the features, you're finished, and you can start thinking about your next side project - Huzzah! </p>
<p>Otherwise, you risk ending up trying to add too many features, and seeing calculators in your sleep. Of course, you can keep adding features if you want. But make sure to have an end goal to work towards.</p>
<p>In the real world - depending on your role - there may be a client or product owner who defines the "what does it do" part for you. Your job as a the developer will be break up these requirements into more detailed tasks, which we'll get into later.</p>
<h2 id="heading-what-does-it-look-like">"What does it look like?"</h2>
<p>Now that I have an idea of the features, I will start to think about what it's going to look like. </p>
<p>If you're struggling to come up with designs, there are a number of ways you can do this:</p>
<ul>
<li>look at examples of similar apps</li>
<li>browse CSS frameworks for elements you can use</li>
<li>or use your imagination. (Not every side project you do has to look "incredible.")</li>
</ul>
<p>I am feeling particularly artsy today so I am going to make a quick wireframe with how I want my calculator to look:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/08/Screenshot-2019-08-17-at-20.39.55.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Ah! Marvelous! I should become an artist. </p>
<p>So I have my features, and I have my sketch that Van Gogh himself would be proud of.</p>
<p>In the real world, when you're working as part of a team, a designer may come up with something like this for you. Or, even better, you might be given a working prototype, which you can play with.</p>
<h2 id="heading-how-do-i-position-and-style-the-elements">"How do I position and style the elements?"</h2>
<p>I'm starting to get a good feel for what my app should do, and what it looks like. Now it's time to get a bit more technical.</p>
<p>At this point I'm thinking, "OK, I've got some buttons, and a big ole' display. How will I position everything?"</p>
<p>I like to think that implementing a design is a bit like building a house. Lay the foundation (<strong>the layout</strong>), build the outer structure (<strong>buttons, inputs</strong>), and add the finishing touches later (<strong>colours, icons, styles</strong>). </p>
<p>When talking about layout, the first things that come to my mind are <strong>CSS Grid, Flexbox</strong>, or a framework (such as <strong>Bootstrap</strong>). I'm going to use Flexbox, since it is responsive, makes it super easy to arrange items within a row, and well, because I feel like it. This saves me having to install extra dependencies we don't need.</p>
<h2 id="heading-how-does-it-behave">"How does it behave?"</h2>
<p>Now it's time to think about how the app will behave. This is basically breaking down our features into more detail to help <strong><em>design the code</em></strong>. </p>
<p>When I ask myself this, I am thinking about things like:</p>
<ul>
<li>What does the app look like when it loads?</li>
<li>What happens when a user clicks a button? Does the style change? </li>
<li>How does the UI react to various user actions?</li>
</ul>
<p>Another way to answer this question is to play with an existing example. </p>
<p>A small task for you: try to open up the calculator on your computer, and start doing some stuff. Adding, multiplying, whatever. </p>
<p>When you perform an action, see if you <strong>can capture in as much detail as possible</strong>, what happens.</p>
<p>Here's what I found:</p>
<ul>
<li>When the app loads, the display is set to "0" and all the buttons are in an "inactive" state</li>
<li>When the user clicks a number, the display will update with the new value.  The clicked button will change style to indicate to the user that the click was successful.</li>
<li>When the user clicks an operator, the selected operator will indicate in some way that it has been selected.</li>
<li>If an operator button has been clicked, and the user then clicks a number button, the display will firstly reset to zero before displaying the next numbers the user clicks.</li>
<li>When the equals button is clicked, a calculation is performed using the initial number, the selected operator, and the next number that was entered.</li>
<li>When the user clicks the clear button, the display will reset to zero, and the app will reset.</li>
</ul>
<p>In the real world, we won't always have the luxury of an example or a prototype to play with. But as your experience grows, it becomes easier to do this based on a wireframe or mockup. This is why I like to suggest to beginners to <strong>replicate existing apps</strong>, as that gives you an example to practice this critical thinking and analysis with.</p>
<p>But why do we have to go into such nitty-gritty detail? Good question. And the answer is because computers are incredibly smart, but also incredibly dumb. (Don't believe me? Try removing a random curly brace from your code and watch all hell break loose.)</p>
<p>The instructions we give to computers have to be <strong>extremely specific<em>.</em></strong> For example, looking back at our behaviours above, clicking a number will act differently depending on if an operator was clicked or not. </p>
<p>We as humans know how a calculator works, but a computer doesn't until we tell it how.</p>
<h2 id="heading-what-will-my-code-look-like">"What will my code look like?"</h2>
<p>Just like I spent some time designing the UI, I like to do the same with the code. There's many benefits to this:</p>
<ul>
<li>Makes me think in detail about what components I need</li>
<li>Makes me think about the workflows</li>
<li>It means writing the code will be easier/faster, since I have a plan </li>
<li>Catches issues and problem areas early </li>
</ul>
<p>I mentioned earlier that for this project I'll aim to keep things simple, so I'll stick to this approach. In the beginning, I'll keep everything in one component. However I'll start to refactor and split into components when:</p>
<ul>
<li>That the code grows to the point where it's hard to manage or reason about</li>
<li>There is a lot of duplicated code</li>
<li>A single element on the page requires it's own functions and state</li>
</ul>
<p>Have you ever got towards the end of a project and thought "sh*t! I forgot something now I have to redesign all this stuff?" By planning in advance, you'll avoid this trap. With that in mind, here's the stuff I think I'll need. Don't spend all day thinking about it, find a balance between planning and just getting started. Let's break our UI mockup into it's individual parts and think of what code will be needed.</p>
<h3 id="heading-the-display">The Display</h3>
<p>My display shows the user the current number, so I'm going to need some sort of <strong>state value</strong> for this. Nothing happens when I click it, so I don't need anything there.</p>
<h3 id="heading-the-number-buttons">The number buttons</h3>
<p>Since the number buttons affect the number shown in the display, I'm going to need a <strong>function</strong> that gets called by an <strong>onClick</strong> event to manage this. No need to store the selected number in state right now.</p>
<h3 id="heading-the-operator-buttons">The operator buttons</h3>
<p>The operator button is an interesting one - as different things happen (remember our, "how does it behave?" notes above?). Since <em>I'll need to know the currently selected operator</em>, I'll store that as a <strong>state value</strong>  as well.</p>
<h3 id="heading-the-equals-buttons">The equals buttons</h3>
<p>The equal button should take the display value, the operator, the previously entered value and calculate the result. Easy!</p>
<p>Not quite, we've hit our first problem! Let's look back to our behaviours</p>
<blockquote>
<p>If an operator button has been clicked, and the user then clicks a number button, the display will firstly reset before display the numbers the user clicked</p>
</blockquote>
<p>The first number the user enters into the display gets <strong>reset</strong> when they click an operator and starts entering the next number - which means our app has no idea what the first number was when the user clicks equals (I told you computers were dumb)! Let's have a think about this:</p>
<p>When the operator button is clicked, this is the point where the display resets, and updates with the next number the user enters. Logically then, <em>it makes sense to store the previous display value when an operator is clicked.</em> For this to work, I'll need a <strong>function</strong> and a <strong>state value</strong> that stores the display value when an operator is clicked.</p>
<h3 id="heading-the-clear-button">The clear button</h3>
<p>This is an easy one - reset our <strong>state values to zero</strong>, allowing the user to start again. I'll need a simple <strong>onClick</strong> function attached to the button to handle this.</p>
<h2 id="heading-what-do-i-need-to-test-and-what-can-go-wrong">"What do I need to test? And what can go wrong?"</h2>
<p>Depending on who you talk to, there can be different ways to approach testing. Some like to do TDD (which is writing the tests first) and others write them at the end. I do both depending on the project. <strong>But the main thing is you write them at some point.</strong> </p>
<p>When I think about my tests, I look at the requirements. The first requirement (or feature) is:</p>
<ul>
<li>Add, subtract, divide and multiply numbers</li>
</ul>
<p>So I'll need to test that the app can do these things. I won't go into detail about how to write tests, but a good test suite should cover:</p>
<ul>
<li>The requirements and common use cases</li>
<li>The edge cases (e.g user enters 99999999999999999999 + 9999999999999999999999) </li>
<li>The error cases and where things can break (e.g user tries to divide by zero)</li>
</ul>
<p>"How many tests should I write?", is probably your next question. Unfortunately there is no hard and fast number for this. There are endless amount of inputs you can have. If you follow the points above, you'll have a solid test suite for any project.</p>
<p>Thinking about your tests early will help you think about where errors can occur in your code, and allow you cater for it earlier in your designs.</p>
<h2 id="heading-lets-look-at-the-code">Let's look at the code</h2>
<p>This isn't a coding tutorial as such, so I'm not going to go into the nitty gritty of each step in this article. <strong>See the code sandbox at the end to see a working example, including the code/walkthrough for each step outlined below.</strong> Feel free to fork the code and play, destroy and experiment to your hearts content! </p>
<p>When writing code, we'll stick to the plan:</p>
<ul>
<li>Focus on getting the UI layout and elements in place first, using our wireframe as reference</li>
<li>Implement the logic (JS, event handlers etc) </li>
<li>Final touchups  </li>
<li>Remember to do the simplest thing to get everything working - no need to worry about refactoring and performance at the start!</li>
</ul>
<h3 id="heading-step-1-layout-and-basic-ui-elements">Step 1 - Layout and Basic UI elements</h3>
<p>(In the Code Sandbox linked below, click <code>Step 1</code> button to see the working example, see <code>app-step-1.js</code>  to view the code!)</p>
<p>Remember, we are going to start with the layout, and get the "scaffolding" of our app together. This will include adding the HTML and using Flexbox, to position our display and buttons. They won't do anything yet, but they will look nice. Sort of.</p>
<h3 id="heading-step-2-adding-the-logic">Step 2 - Adding the logic</h3>
<p>(In the Code Sandbox linked below, click <code>Step 2</code> button to see the working example, see <code>app-step-2.js</code> to view the code!)</p>
<p>We've done our planning for this part, so let's refer back to that. In our "What does my code look like" notes, we have to create a bunch of different state objects and functions to handle the events. </p>
<p>For this I take one item from our "What will my code look like?" list at a time, and reference back to the "How does it behave?" notes to piece everything together. I implement the functionality, and test that it's working (usually automated but manually will do). Example:</p>
<p>The first element in the list is the <strong>display.</strong> So I will add the state variables and logic for that. Test that it's working, and move onto the <strong>number buttons</strong>, and repeat. This is where writing your tests early is helpful - you can run the suite every so often to make sure nothing has broken.</p>
<h3 id="heading-step-3-adding-the-bells-and-whistles">Step 3 - Adding the bells and whistles</h3>
<p>(In the Code Sandbox linked below, click <code>Step 3</code> button to see the working example, see <code>app-step-3.js</code> to view the code!)</p>
<p>Awesome we're nearly done! Now that the logic is working, we will now go and add some of the finer touches (rounded buttons, borders, bigger display etc) to the app, and we're done! Our very basic calculator now does stuff! </p>
<h3 id="heading-step-4-over-to-you">Step 4 - Over to you!</h3>
<p>I've purposely left some things out that you can go ahead and try if you feel like it. Use the approaches we learned so far - thinking about the behaviors, what function/state objects you'll need etc.</p>
<ul>
<li>Our calculator doesn't <em>quite</em> match the wireframe - can you add some color to the buttons? What about changing the colour of a selected button when it's clicked?</li>
<li>No tests! Oh dear!  See if you can add some </li>
<li>Some duplicate code exists - can you find a way to render the buttons so we don't need to hard code 16 <code>button</code> elements?</li>
<li>Error handling - there is none! This is bad. What happens if you try to divide by zero? Or if you have a number that is wider than the display?</li>
<li>When the user starts to input numbers, any preceding zero's are added to the display, for example <code>000003</code> this isn't good UX, can you fix it?</li>
</ul>
<hr>
<h3 id="heading-thanks-for-reading-want-more-articles-like-this">Thanks for reading! Want more articles like this?</h3>
<p>Hopefully this has given you an insight into one approach into coding apps. If you'd like to be updated when I release more articles like this, feel free to join the mailing list over at <a target="_blank" href="https://www.chrisblakely.dev#sign-up">chrisblakely.dev</a>! Or reach me over at <a target="_blank" href="https://twitter.com/chrisblakely01">Twitter</a> if you fancy a chat :)</p>
<hr>
<h2 id="heading-codesandbox-finished-example">CodeSandbox - Finished Example</h2>
<div class="embed-wrapper">
        <iframe width="100%" height="350" src="https://codesandbox.io/embed/code-thought-process-2imft" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="CodeSandbox embed" allow="geolocation; microphone; camera; midi; vr; accelerometer; gyroscope; payment; ambient-light-sensor; encrypted-media; usb" sandbox="allow-modals allow-forms allow-popups allow-scripts allow-same-origin" loading="lazy"></iframe></div>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ The Practical Checklist for Getting a Job ]]>
                </title>
                <description>
                    <![CDATA[ By JavaScript Joe Maybe you're someone who doesn't have a computer science degree or maybe you don't come from a "technical" background. Maybe you're self-taught or you did a coding bootcamp. Or maybe you've been a software engineer for a few years a... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/the-practical-checklist-for-getting-a-job/</link>
                <guid isPermaLink="false">66d45f6e38f2dc3808b790c9</guid>
                
                    <category>
                        <![CDATA[ code newbie ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Job Hunting ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Tue, 09 Jul 2019 13:35:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2019/07/andrew-neel-cckf4TsHAuw-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By JavaScript Joe</p>
<p>Maybe you're someone who doesn't have a computer science degree or maybe you don't come from a "technical" background. Maybe you're self-taught or you did a coding bootcamp. Or maybe you've been a software engineer for a few years and you've having trouble landing interviews.</p>
<p>Either way, you're finding it hard to land your first or next job. Here are practical things you can do to make it happen:</p>
<h2 id="heading-get-real-experience">? Get Real Experience</h2>
<p>"<em>Entry-level Front End Developer. Minimum 1-year of experience with React"</em>. This is a catch-22. How are you supposed to get your first job if all of them require previous experience? Here's what you can do:</p>
<ul>
<li>☐ Reach out to 3 companies asking if you can do an internship</li>
<li>☐ Look for contract positions on Upwork, Craigslist or in a local tech community</li>
<li>☐ Reach out to a local business and offer to redo their website</li>
<li>☐ Contribute to an open source project</li>
</ul>
<p>✅ <strong>Goal:</strong> to get <em>something</em> on your resume. This will help you get through the first gate as a new developer.</p>
<h2 id="heading-network">?️ Network</h2>
<p>Network, network, network. Meet people. People lead to connections. Connections open the door for jobs. The more people you know and the more people you help, the more likely you are to find that next job. Do these things:</p>
<ul>
<li>☐ DM 3 people on Twitter who do what you want to do. Learn from them.</li>
<li>☐ Go to 3 local meetups and talk to people</li>
<li>☐ Speak at 1 meetup. Give a lightening talk. Get your name out there. Mingle with meetup organizers</li>
</ul>
<p>✅ <strong>Goal:</strong> to make connections and <em>establish yourself</em> in the industry. If you help others, good things will happen. Being known in the industry means opportunities will come to <em>you</em>, rather than you seeking them out.</p>
<h2 id="heading-share-what-you-learn">✍️ Share What You Learn</h2>
<p>It's very easy to silo yourself and learn in a "cave" but share with the world what you're doing! It might inspire others, you might teach someone something new, and it's a good way for potential employers to see what you're doing</p>
<ul>
<li>☐ Start your own blog and write a weekly post</li>
<li>☐ Write 1 blog post about something you built. Get it published on a well-known blog.</li>
<li>☐ Tweet about what you learn via #100DaysOfCode</li>
</ul>
<p>✅ <strong>Goal:</strong> to share publicly what you're doing as a developer to further your knowledge and skills. Plus the way you explain something might click for someone in ways other articles weren't able to do.</p>
<h2 id="heading-build-projects">? Build Projects</h2>
<p>If your portfolio and GitHub do not have projects in them, you are not going to get an interview. The projects you showcase speak to your technical ability. This is especially important if you don't have a CS degree.</p>
<ul>
<li>☐ Build 1 project that solves an everyday problem for you</li>
<li>☐ Pin 4 projects to your GitHub profile page</li>
<li>☐ Write friendly READMEs with information about each project</li>
</ul>
<p>✅ <strong>Goal:</strong> to have substantial websites/apps that demonstrate what you can do. These will help you stand out among applicants and be good talking points during your interview.</p>
<p>If you do <strong>all of these things</strong> and you still can't get an interview, <a target="_blank" href="https://twitter.com/jsjoeio">let me know.</a> I will do my best to help you figure out what more you can do. However, I'm fairly confident this will put you on the right path ?</p>
<p>### </p>
<p>Photo by <a target="_blank" href="https://unsplash.com/@andrewtneel?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Andrew Neel</a> on <a target="_blank" href="https://unsplash.com/@andrewtneel?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>
<p><em>This post was first published on <a target="_blank" href="https://dev.to/jsjoeio/the-practical-checklist-for-getting-a-job-150n">DEV</a>.</em></p>
<p>? Shameless Plug: if you'd like to see more content like this, subscribe to my newsletter: <a target="_blank" href="https://buttondown.email/jsjoeio">https://buttondown.email/jsjoeio</a> </p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How I crushed my fear of open source and started my own project — and how you can, too. ]]>
                </title>
                <description>
                    <![CDATA[ By Linea Brink Andersen A week ago, I started an Open Source project. I had never done a pull request or merged anything on GitHub. Suddenly I was an Open Source maintainer. In my search for an easily approachable Open Source project, I ended up cre... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-i-crushed-my-fear-of-open-source-and-started-my-own-project-and-how-you-can-too-ddcfed041a2f/</link>
                <guid isPermaLink="false">66c34d8930aba6677fb9f9e4</guid>
                
                    <category>
                        <![CDATA[ code newbie ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Collaboration ]]>
                    </category>
                
                    <category>
                        <![CDATA[ open source ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Tue, 01 May 2018 15:03:30 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*oRTSo7V_0sXvX_ZYijbvoQ.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Linea Brink Andersen</p>
<p>A week ago, I started an Open Source project. I had never done a pull request or merged anything on GitHub. Suddenly I was an Open Source maintainer.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/JlOX-ukpDRHiGoACk5VDM3kHoFSkZGq9R4Dz" alt="Image" width="800" height="533" loading="lazy">
<em>In my search for an easily approachable Open Source project, I ended up creating my own.</em></p>
<p>I had always wanted to contribute to Open Source. Every time I was looking for a project, I gave up. I was overwhelmed by the source code of a project, or it looked too complicated. I didn’t know whom to reach out to for information and help. I was doubting my skills, and convinced myself that my contributions wouldn’t be useful.</p>
<p>It was ironic. I wanted to contribute to Open Source, to gain experience. But I felt that I needed more experience before I could start. It was an endless spiral, and I realized I needed to do something about it.</p>
<h3 id="heading-breaking-through-the-barrier">Breaking through the barrier</h3>
<p>I wanted an Open Source project for beginners. I dreamed of a project where I could feel confident. Where other contributors were also learning to code, or contributed to help beginners. I figured out that there were probably other people like me looking for the same opportunity.</p>
<p>Then, it finally hit me. I could start an open source project myself. I spent 14 hours on it that day, and in the early morning I had a project on Github. Then I tweeted out for others to join me.</p>
<p>If you have been curious about open source for a while, but haven’t gotten started, I encourage you to do the same. I have captured my process in this post. If you create the type of project you would feel good about contributing to, it will be much easier to get started. As an added bonus, you will help other people who have been hesitant to contribute for the same reasons as you. Try it out — you will learn a lot.</p>
<p><strong>Side note:</strong> I said above I started my project in 14 hours. To be completely fair, I started on step 3 (see below) that day. I already had my idea, and I had written my baseline code a couple of weeks before. If you have some small project you have already started, you can use that. But if not, no worries, you do not need to do it in one day.</p>
<p>So without further ado, here are my five steps to create your own Open Source project.</p>
<h3 id="heading-step-1-get-an-idea"><strong>Step 1 - Get an idea</strong></h3>
<p>This might sound very hard, but it doesn’t have to be. After all, you only need the beginning of an idea. Your future contributors and potential users will be full of ideas to build on top of yours.</p>
<p>A lot of technologies like Google and YouTube started out <a target="_blank" href="https://blog.bufferapp.com/the-humble-beginnings-of-google-tumblr-youtube-and-more-and-what-they-can-teach-us-about-starting-small">very simple</a>, and so should your project. Remind yourself that this is a learning experience. Your idea doesn’t have to feel like a genius invention. If you’re still stuck, maybe <a target="_blank" href="https://appideagenerator.com">this silly site</a> can help you.</p>
<h3 id="heading-step-2-create-a-baseline"><strong>Step 2 - Create a baseline</strong></h3>
<p>It is easier to start collaborating if there is some minimal code to start from. It is up to you to decide how much code your project should include to begin with. But it will be easier for your contributors to begin if there are at least a few lines of code that they can modify or add to.</p>
<p>Don’t worry if your baseline seems too simple. This is exactly what you want. Other beginners will be able to contribute, because the project is simple and the code is easy to read.</p>
<h3 id="heading-step-3-set-up-your-repository"><strong>Step 3 - Set up your repository</strong></h3>
<p>The repository is where it all happens. It is also where we beginners lack a bit of experience, compared to seasoned developers. Use your experience as an Open Source “newbie” to create a simple and encouraging project that other beginners can join.</p>
<p>You know exactly what was hard for you. Make sure that your project makes it easier. Create the type of project you wish you could have joined yourself.</p>
<p>When I was looking to join an Open Source project, I really wanted to ask the maintainers how I could contribute. I made sure that there was plenty of ways for people looking at my repository to reach out to me. I provided information on how to open an issue and introduce yourself. If someone does that, we can figure out together how they can start contributing.</p>
<p>There are people out there who have the same struggles as you. If you build your version of a welcoming open source project, they will have an easier time joining you. Together, you can learn and develop your project.</p>
<p>There are many guides on how to start a GitHub repository, for example <a target="_blank" href="https://guides.github.com/activities/hello-world/">here</a>. Learning by doing is what works best for me.</p>
<p>I followed free interactive guides on <a target="_blank" href="https://lab.github.com/">GitHub learning lab</a>. If you are new to Github or want to brush up, you can start with an “<a target="_blank" href="https://lab.github.com/courses/introduction-to-github">Introduction to Github</a>” as I did.</p>
<p>Then move on to “<a target="_blank" href="https://lab.github.com/courses/moving-your-project-to-github">Moving your project to Github</a>”. This guide will walk you through setting up an Open Source repository step by step. Feel free to skip any step that you don’t think is relevant to your project, or that you want to save for later. When you finish, you can change the name of your repository, make it public, and voila! You have an open source project.</p>
<p>Remember that open source doesn’t just mean a collaborative project. It also means having an open source license. The GitHub guide will help you in adding that to your repository, too.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/LX2pSm7q4KrNJyHcj7GVZN-5dmLt1Rsuf4eF" alt="Image" width="800" height="534" loading="lazy">
<em>If you build a welcoming Open Source project, people will join you. Hold each other’s hand as you learn together.</em></p>
<h3 id="heading-step-4-invite-people-to-collaborate-with-you"><strong>Step 4 - Invite people to collaborate with you</strong></h3>
<p>This was the step that scared me the most. I didn’t have any friends who were coding that I could invite to join my project. I had less than 20 followers on Twitter, so I wasn’t even sure my tweets would have much reach. But I tweeted out an invitation to join, and added some hashtags that I hoped would reach other beginners.</p>
<p>And then, <strong>Nothing Happened!</strong></p>
<p>For more than 24 hours, no one liked my tweet. The only retweet was from a twitter bot. Worst of all, nobody was active on the repository. I was disappointed. My expectations weren’t high, but I had hoped that at least one or two people would check it out.</p>
<p>But the following morning, there had been some twitter activity. Two people had been working on the repository. The project had its first pull request. I was so excited. Now, less than a week later, there are 8 active collaborators on the project, none of whom I have ever met.</p>
<h3 id="heading-step-5-crush-the-open-source-game"><strong>Step 5 - Crush the Open Source game</strong></h3>
<p>This step is learning by doing. You will be facing many challenges as you start working on the project with your contributors. My first big challenge was a merge conflict. Google was a great help at that moment, and I was lucky that I could ask for help at my weekly meetup.</p>
<p>Remember that you have built a space for learning. Your contributors understand that you don’t know how to do everything from the get-go. Treat every new challenge as a learning opportunity. Don’t fear asking your contributors for help or advice. The beauty of Open Source is combining the forces of the entire team. You can all share your individual expertise.</p>
<h3 id="heading-now-go-do-it"><strong>Now go do it</strong></h3>
<p>The moral of the story is that anyone can start an open source project — that means you, too. It doesn’t matter that you don’t have a huge, complicated idea for a giant project. It doesn’t matter that you haven’t been using GitHub for long, or ever. It doesn’t even matter that you don’t have any friends who code with whom you can collaborate. You can do it, and I really hope you will. You will learn so much, and you will help make open source more approachable for other beginners.</p>
<p>If you have any questions, or you want to talk, feel free to reach me on twitter <a target="_blank" href="https://twitter.com/lineal">@lineal</a> and join my <a target="_blank" href="https://github.com/lineaba/prog-o-meter">Prog-o-meter</a> open source project.</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
