<?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[ Sophia Iroegbu - 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[ Sophia Iroegbu - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Wed, 27 May 2026 16:21:00 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/author/Sophyia/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ How to Secure Your Django App – Best Practices and Code Examples ]]>
                </title>
                <description>
                    <![CDATA[ As a software developer or engineer, it's not enough to know how to build useful solutions – you must also ensure that they are secure. Prioritizing your users is crucial when developing and deploying your software because if users can't use your app... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-secure-your-django-app/</link>
                <guid isPermaLink="false">66c4c64499f22436b71945da</guid>
                
                    <category>
                        <![CDATA[ Django ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Security ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sophia Iroegbu ]]>
                </dc:creator>
                <pubDate>Wed, 22 May 2024 15:05:47 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2024/05/Blog-Banner---Template--2-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>As a software developer or engineer, it's not enough to know how to build useful solutions – you must also ensure that they are secure. Prioritizing your users is crucial when developing and deploying your software because if users can't use your app, it becomes useless.</p>
<p>In this guide, we will discuss some best security measures for a secure Django project before your next deployment. </p>
<p>Let's learn! </p>
<h2 id="heading-security-measures-for-authentication-and-authorization">Security Measures for Authentication and Authorization</h2>
<p>When building a Django application, user management requires prioritizing authentication and authorization as key security measures.</p>
<p>Here are some security practices when working on authentication and authorization features:</p>
<ol>
<li>When dealing with authenticating users, it is best to implement a secure user authentication like password-based, token-based, or multi-factor authentication. This ensures you verify your users more than once and when they want to use your application. </li>
<li>If you use a password-based authentication, ensure you are using a strong hashing algorithm like the Django's <a target="_blank" href="https://docs.djangoproject.com/en/5.0/ref/contrib/auth/"><code>make_password</code></a> function to avoid storing the password as plain text. </li>
<li>When hashing user passwords, ensure you implement salt generation. Generate a unique random data (salt) to strengthen the hashing process of the password and prevent pre-computed attacks. </li>
<li>Consider using token-based authentication and set an expiration timer to add another layer of security. This lets the user's access token expire after a certain time and they will need to verify their identify again to continue using your application. Note that when implementing this, ensure that you don't set the timer to expire every 5 minutes, 30 minutes or one hour so it doesn't negatively affect user experience.  </li>
<li>When dealing with users, always implement a Role-Based Access Control (RBAC) to assign roles to each user. That is, users can only access user features and admins can access user and other extended features. </li>
<li>After hashing the password and having an access control, implement appropriate access control and encryption measures so that only authorized users can access their passwords. </li>
</ol>
<h2 id="heading-security-measures-against-sql-injection-attacks">Security Measures Against SQL Injection Attacks</h2>
<p>SQL injection attacks are one of the most web vulnerabilities, and Django projects can be exploited through such attacks, especially when the data moving from client-side to server-side is vulnerable. </p>
<p>An excellent way for you to nip these attacks in the bud in your Django projects is to use parameterized queries. <a target="_blank" href="https://sophyia.me/secure-your-django-app-with-parameterized-queries">Parameterized queries</a> are an easy way in separating the SQL code from the user input, ensuring that user data is not part of the SQL command using Django ORMs.</p>
<p>Here is how it works. You can directly query the data in your database like this:</p>
<pre><code><span class="hljs-keyword">from</span> .models <span class="hljs-keyword">import</span> User  

def user_search(request):
    username = request.GET.get(<span class="hljs-string">'username'</span>)

    # Vulnerable query construction
    query = <span class="hljs-string">"SELECT * FROM users WHERE username = '"</span> + username + <span class="hljs-string">"'"</span>

    # Return a response
    <span class="hljs-keyword">return</span> HttpResponse(<span class="hljs-string">"User search query: "</span> + query)
</code></pre><p>You can use the Django QuerySet <code>filter()</code> method to filter the data and sanitize it, like this:</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> .models <span class="hljs-keyword">import</span> User

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">user_search</span>(<span class="hljs-params">request</span>):</span>
    username = request.GET.get(<span class="hljs-string">'username'</span>)

    <span class="hljs-comment"># Safe query using parameterized query</span>
    users = User.objects.filter(username=username)

    <span class="hljs-comment"># Return a response</span>
    <span class="hljs-keyword">return</span> HttpResponse(<span class="hljs-string">"User search executed securely."</span>)
</code></pre>
<h2 id="heading-security-measures-against-cross-site-scripting-xss">Security Measures Against Cross-Site Scripting (XSS)</h2>
<p>Cross-site scripting or XSS attack happen by injecting malicious scripts in a web page or application accessed by other users. These attacks could be exploited in your Django projects if you forget to validate user data, prevent browsers from interpreting your web content or omit a content security policy. </p>
<p>Here are some security practices when avoiding XSS attacks:</p>
<h3 id="heading-validate-user-data">Validate User Data</h3>
<p>When dealing with user-generated data, ensure you always validate the data. You can use built-in validation tools like the <code>[django.core.validators](https://docs.djangoproject.com/en/1.8/_modules/django/core/validators/)</code> function. </p>
<p>Here is an example of validating an email address gotten from the client-side:</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> django.core.validators <span class="hljs-keyword">import</span> validate_email

email = request.GET.get(<span class="hljs-string">'email'</span>)

<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> validate_email(email):
    <span class="hljs-keyword">raise</span> ValueError(<span class="hljs-string">"Invalid email address."</span>)
</code></pre>
<p>Here is another example of validating a URL gotten from the user:</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> django.core.validators <span class="hljs-keyword">import</span> URLValidator
<span class="hljs-keyword">from</span> django.core.exceptions <span class="hljs-keyword">import</span> ValidationError

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">validate_url</span>(<span class="hljs-params">url</span>):</span>
    validator = URLValidator()
    <span class="hljs-keyword">try</span>:
        validator(url)
    <span class="hljs-keyword">except</span> ValidationError <span class="hljs-keyword">as</span> e:
        <span class="hljs-keyword">return</span> e.message
    <span class="hljs-keyword">return</span> <span class="hljs-literal">None</span>
</code></pre>
<h3 id="heading-always-encode-user-data-when-displaying-it">Always Encode User Data When Displaying It</h3>
<p>If your project takes user data and display it, ensure that you properly encode the data using <a target="_blank" href="https://www.w3schools.com/django/ref_tags_autoescape.php">Django auto-escaping template</a>, <code>{% autoescape %}</code>. The <code>autoescape</code> tag is used to check if the <code>autoescape</code> is on or off. If it is on, it ensures the HTML code in your variables are escaped. </p>
<p>Here is an example:</p>
<pre><code class="lang-python">{% autoescape on %}
    {{ user_input }}
{% endautoescape %}
</code></pre>
<h3 id="heading-use-the-correct-http-headers">Use the Correct HTTP Headers</h3>
<p>In your Django project, always set appropriate HTTP headers to prevent browsers from interpreting the content as executable scripts. This may be minor, but it will prevent browsers from guessing the type of your response. </p>
<p>Here are two HTTP headers you can implement:</p>
<ol>
<li><code>X-Content-Type-Options</code>: This configuration ensures browsers don't sniff or guess the Multipurpose Internet Mail Extensions (MIME) type of a response. MIME is used to specify format of internet messages. </li>
<li><code>Content-Type: text/html: charset=UTF-8</code>: This configuration ensures your web content is treated as a HTML and properly encoded as one. </li>
</ol>
<p>You can define these headers in your template files to avoid XSS attacks. </p>
<h3 id="heading-always-use-content-security-policy">Always Use Content Security Policy</h3>
<p>Content Security Policy (CSP) is a security measure used in web browsers to prevent malicious attacks, XSS attacks and data injections. This policy lets web developers define trusted sources like images, scripts, CSS styles, and so on, on their projects. </p>
<p>Content Security Policies are usually delivered through HTTP headers or HTML meta tags to enhance security of your web applications. </p>
<p>In your Django project, you can implement CSP like this:</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> django.http <span class="hljs-keyword">import</span> HttpResponse

response = HttpResponse(<span class="hljs-string">"Your content here"</span>)
response[<span class="hljs-string">'Content-Security-Policy'</span>] = <span class="hljs-string">"default-src 'self'; script-src 'self' https://trusted-cdn.com;"</span>
</code></pre>
<h2 id="heading-security-measures-against-cross-site-request-forgery-csrf">Security Measures Against Cross-Site Request Forgery (CSRF)</h2>
<p>Cross-Site Request Forgery (CSRF) is a vulnerability that attacks by tricking users into carrying out actions against their knowledge or consent. These attacks use a request to trick the user into submitting a link or form on a different website or web application and since the request comes from the user's authenticated session, it pulls through, and the attacker has access to either perform a data manipulation or do any unauthorized action. </p>
<p>To prevent such attacks in your Django project, you can implement these practices:</p>
<h3 id="heading-use-middleware-based-rate-limiting">Use Middleware-Based Rate-Limiting</h3>
<p>Rate-limiting is used for controlling the frequency of requests made by a server, API or user. This works by having a limit on the number of requests that can be made within a certain period of time. </p>
<p>In your Django project, it is good practice to create or implement a custom middleware to track and limit user's request based on a user's IP address. If you can't create a custom middleware, you can use <a target="_blank" href="https://django-ratelimit.readthedocs.io/en/stable/">django-rate limiting</a> package. </p>
<h3 id="heading-enable-csrf-middleware">Enable CSRF Middleware</h3>
<p>Cross-Site Request Forgery (CSRF) middleware in Django is a built-in security tool that protects against CSRF attacks by validating CRSF token when making requests, such as when a user wants to log in. </p>
<p>It is a good idea to enable Django's CRSF middleware in your <strong>settings.py</strong>. </p>
<pre><code class="lang-python">MIDDLEWARE = [
 ...
 <span class="hljs-string">'django.middleware.csrf.CsrfViewMiddleware'</span>
 ...
]
</code></pre>
<h3 id="heading-always-use-crsf-tokens">Always Use CRSF Tokens</h3>
<p>Cross-Site Request Forgery (CSRF) tokens are random data generated by your server and included as hidden fields in your HTML forms or added to AJAX requests. </p>
<p>CRSF tokens work with CRSF middleware, you can't use one without the other. When using CRSF tokens, Django automatically handles the tokens for you when you use the <code>{% crsf token %}</code> template tag. </p>
<pre><code class="lang-html"><span class="hljs-symbol">&amp;lt;</span>form method="post"&gt;
    {% csrf_token %}
    ...
<span class="hljs-symbol">&amp;lt;</span>/form&gt;
</code></pre>
<h2 id="heading-built-in-django-security-checklist">Built-in Django Security Checklist</h2>
<p>Not many developers know this, but Django has a built-in security checklist to ensure you deploy a tightly secured project. </p>
<p>It is a command that scans your <strong>settings.py</strong> and checks if you pass Django security guidelines or if you have any vulnerabilities hackers could exploit. The command is <code>python manage.py check --deploy</code></p>
<p>When you run the command, you should see all the warnings and may see some project errors (if you have any), something like this:</p>
<p><img src="https://lh7-us.googleusercontent.com/TJJQfxXbJaC4e9Jnwdu16ESNJa4rr6Ju84ltFfc9cIY_CtCUzNtY7ovh1k-fv9HamrY-dPVUn1izNw5_0siyuCSlP3dQNIN4YU57L1TNTj2e5ZLc2LIKx-WQV2yTCPNZcC8CWwcbYmW5MD5-z0oe-zRPmNo0x_hy=s2048" alt="preencoded.png" width="600" height="400" loading="lazy">
<em>Screenshot showing results of the command</em></p>
<h2 id="heading-other-security-practices">Other Security Practices</h2>
<p>In addition to security practices targeted at specific web vulnerabilities, implementing minor practices can also enhance the overall security strength of your application.</p>
<ol>
<li>Implement a way to continuously monitor your deployed Django application to detect and respond to security incidents or vulnerabilities in real-time. </li>
<li>Update your Django framework, dependencies and third-party libraries every 2-4 months so your project is up to date and uses the latest security patches and is bug-free. </li>
<li>You can also implement logging to monitor and record security-related changes or activities happening in your projects. It can also take note of possible security incidents. </li>
</ol>
<h2 id="heading-conclusion">Conclusion</h2>
<p>In conclusion, securing a Django application needs so much attention and a multi-layered strategy. This includes implementing secure authentication, validating user input, ensuring encrypted end-to-end communication (whether client-to-server or user-to-user), and applying rate-limiting measures. </p>
<p>These practices contribute to a more robust and secure project.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Set Up GitHub OAuth in a Django App for User Authentication ]]>
                </title>
                <description>
                    <![CDATA[ Maintaining safe and frictionless user authentication is paramount in today's fast-changing web application landscape.  Among the many authentication methods available, GitHub OAuth has emerged as a useful tool for improving user login experience whi... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/set-up-github-oauth-on-django-for-user-authentication/</link>
                <guid isPermaLink="false">66c4c64d1b22d2d8d9040ec6</guid>
                
                    <category>
                        <![CDATA[ authentication ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Django ]]>
                    </category>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                    <category>
                        <![CDATA[ oauth ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sophia Iroegbu ]]>
                </dc:creator>
                <pubDate>Tue, 05 Dec 2023 21:19:14 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/11/Blog-Banner---Template.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Maintaining safe and frictionless user authentication is paramount in today's fast-changing web application landscape. </p>
<p>Among the many authentication methods available, GitHub OAuth has emerged as a useful tool for improving user login experience while strengthening security measures. </p>
<p><a target="_blank" href="https://docs.djangoproject.com/en/4.2/">Django</a>, a Python web framework, has recently gained popularity in web development due to its efficiency and versatility. Adding GitHub OAuth to your Django projects helps improve the authentication process. </p>
<p>Django developers can use GitHub OAuth to access a user's GitHub profile and (with permission) their repositories to personalize the user experience and tailor application services.</p>
<p>This article will walk you through how to implement GitHub OAuth. You'll see the benefits to your Django projects as we go. By embracing this technology, you can give users a seamless login experience while adhering to strict security standards.</p>
<h2 id="heading-prerequisites">Prerequisites</h2>
<p>If you wish to follow this guide, you need to have a basic understanding of these tools or have them installed on your PC: </p>
<ul>
<li><a target="_blank" href="https://github.com/">GitHub</a></li>
<li><a target="_blank" href="https://docs.djangoproject.com/en/4.2/">Django</a></li>
<li><a target="_blank" href="https://www.django-rest-framework.org/">Django Rest Framework</a></li>
</ul>
<h2 id="heading-how-to-create-a-github-oauth-application">How to Create a GitHub OAuth Application</h2>
<p>You must sign into your GitHub account to create a GitHub OAuth application. </p>
<p>First, login to your GitHub account, click on your GitHub profile picture, and select Settings.</p>
<p><img src="https://lh7-us.googleusercontent.com/tLIRoSttp2_c3XAlLPzt_TbxCrGT70wcAubnY3ilywK9kxiGJ-z_5pzX3rDECRpTxKpXx61esK_NL5t1Jkg0kQNfMnvU6hhvfa7TRr9wVX0WyhQWhcvWivDbEQOqtehc87MPXzinHvY_da3IkORxFy8" alt="Image" width="532" height="1223" loading="lazy">
<em>Login to GitHub and select "Settings" from the sidebar menu</em></p>
<p>Then, once the new page comes up, scroll to the bottom and select Developer Settings.</p>
<p><img src="https://lh7-us.googleusercontent.com/jmWCI4fxgLc34a7tZhqXA1hvD6QnBTF1_ERfsq7VwleIuv21frXVxFyoeuIVPz-0SwAD3fJK8hTqIc8pTGaijVQrFUAUptYfGcUmljisdqjAlhQgElkXRb8iO4OeW9YyZ_DOYal-6bkDhL-5RYcvifY" alt="Image" width="1600" height="1149" loading="lazy">
<em>Scroll to the bottom and select "Develop Settings"</em></p>
<p>Select OAuth Apps and click on New OAuth App.</p>
<p><img src="https://lh7-us.googleusercontent.com/2loAs8jJILhusyITEk6v2XUher8kP5jBZWEWuUszfD0_C1vD56L6hlIsAwXL7gMV_8gR28T1Mthv_VrSZwqWo2MuIVKdH0SfGsFWBZcK1M3FbMD6JTdszf1v56sKQHcpDYDsu7VSbfg0DFeQCPI6Af8" alt="Image" width="1600" height="317" loading="lazy">
<em>Creating a new OAuth app</em></p>
<p>Define your OAuth application by naming it.</p>
<ul>
<li>The Homepage URL should be the URL that leads to the homepage of your website.</li>
<li>The Authorization callback URL should be a site, or a page users view after their GitHub account has been authenticated. </li>
</ul>
<p>Once you are done defining it, click Register application.</p>
<p><img src="https://lh7-us.googleusercontent.com/2jEfTNBil-Z5qCakfh8HkptyMm4Z8WOxsUfoN6T9nclv9soRmR4akgJJxuc52Xqzo2f3uBPZ6a_UMGJR8eukFdZk6HxSwPSdrPLG5m2n5NLRJXroCvr8_56DwWvHjtmi7KqZvga48RFbpry--FJq9zg" alt="Image" width="992" height="1101" loading="lazy">
<em>Register your application once all the info has been filled in</em></p>
<p>Next, you'll need a client secret and a client ID key to access your GitHub OAuth app on your Django project.</p>
<p>The Client ID is already defined once you create an application. Click Generate a new client secret to create a client secret key.</p>
<p><img src="https://lh7-us.googleusercontent.com/Fl2B2iqfYUejqWlb04TRUgN6XNP3m4IswS2JptoS-cVkQ4ft3SElu8xV0cF04buhrLdl3zRo6OEtvpg7rGnJ0Yj22KbmONEz0HWbjRRRk6R0H-XIN-hoaBQUjyQl_XPzcCAPCBFPEhcet7WcDwTrBoU" alt="Image" width="1600" height="819" loading="lazy">
<em>Creating a client secret key</em></p>
<p>You might be prompted to sign in. Do so to continue. </p>
<p><img src="https://lh7-us.googleusercontent.com/ceMI0FXuKACvZeA_S-RWYs2qjlCgkPzK9DbJtA6vIH6Nh5GvVHA66_rb9bHmtdxrM5VIzA3S6rpWbsCXURbrRjPrs4yHCLPttCC_9g1vNfQV5qeUN-eKAueE4EqKAmcvSThhJcav-53Jz1PsC7z4JMI" alt="Image" width="677" height="835" loading="lazy">
<em>Sign in to continue</em></p>
<p>Once you log in, your client's secret key will be generated. Copy and save it on your .env file.</p>
<p><img src="https://lh7-us.googleusercontent.com/Y0trI-EIYeKVBT_s3TSA7A-5FEkONt4fNfdUKqHXdBqsfxyxfnl5E9_DL02eynpj87i-cBworbxusUIRdNaH_qU_2TaKRDM1afpuBjVZBsaq-2GZyf4dz4sE43hjx24hknJwkHwkaiZOTDLBZvjxbHk" alt="Image" width="1477" height="818" loading="lazy">
<em>Copy your secret key to your .env file</em></p>
<p>Now that you’ve set up your GitHub OAuth application, let’s connect it to your Django project.</p>
<h2 id="heading-how-to-integrate-github-oauth-with-django">How to Integrate GitHub OAuth with Django</h2>
<p>This part will link your Django project's GitHub OAuth application to it using the social-auth app package. </p>
<p>First, install the <a target="_blank" href="https://dj-rest-auth.readthedocs.io/en/latest/">dj-rest-auth</a> package and define it on your settings.py.</p>
<pre><code class="lang-python">pip install dj-rest-auth
</code></pre>
<p>Then configure dj-rest-auth package on your settings.py.</p>
<pre><code class="lang-python"><span class="hljs-comment"># Application definition</span>
INSTALLED_APPS = [
    <span class="hljs-string">"django.contrib.admin"</span>,
    <span class="hljs-string">"django.contrib.auth"</span>,
    <span class="hljs-string">"django.contrib.contenttypes"</span>,
    <span class="hljs-string">"django.contrib.sessions"</span>,
    <span class="hljs-string">"django.contrib.messages"</span>,
    <span class="hljs-string">"django.contrib.staticfiles"</span>,
    <span class="hljs-string">"django.contrib.sites"</span>,
    <span class="hljs-string">"rest_framework"</span>,
    <span class="hljs-string">"rest_framework.authtoken"</span>,
    <span class="hljs-string">"dj_rest_auth"</span>,
    <span class="hljs-string">"allauth"</span>,
    <span class="hljs-string">"allauth.account"</span>,
    <span class="hljs-string">"allauth.socialaccount"</span>,
    <span class="hljs-string">"allauth.socialaccount.providers.github"</span>,
    <span class="hljs-string">"oauth2_provider"</span>,
    <span class="hljs-string">"users"</span>,
]
</code></pre>
<p>You'll need to enable the authentication classes for dj-rest-auth by updating REST_FRAMEWORK and AUTHENTICATION_BACKENDS on your settings.py.</p>
<p>Optionally, you can configure <code>allauth</code> if you intend to use templates. Do this on your settings.py file. </p>
<pre><code class="lang-python">AUTHENTICATION_BACKENDS = (<span class="hljs-string">"allauth.account.auth_backends.AuthenticationBackend"</span>,)

REST_USE_JWT = <span class="hljs-literal">True</span>  <span class="hljs-comment"># Use JWT for authentication with dj-rest-auth</span>
SITE_ID = <span class="hljs-number">1</span> <span class="hljs-comment">#Set site ID</span>

SITE_ID = <span class="hljs-number">1</span>  <span class="hljs-comment"># Set the site ID</span>

<span class="hljs-comment"># Disable email verification for simplicity</span>
ACCOUNT_EMAIL_VERIFICATION = <span class="hljs-string">"none"</span>
LOGIN_REDIRECT_URL = <span class="hljs-string">"/"</span>  <span class="hljs-comment"># Redirect URL after successful login</span>
LOGOUT_REDIRECT_URL = <span class="hljs-string">"/"</span>  <span class="hljs-comment"># Redirect URL after logout</span>

SOCIALACCOUNT_PROVIDERS = {
    <span class="hljs-string">"github"</span>: {
        <span class="hljs-string">"APP"</span>: {
            <span class="hljs-string">"client_id"</span>: <span class="hljs-string">"YOUR_GITHUB_CLIENT_ID"</span>,
            <span class="hljs-string">"secret"</span>: <span class="hljs-string">"YOUR_GITHUB_SECRET_KEY"</span>,
            <span class="hljs-string">"key"</span>: <span class="hljs-string">""</span>,
            <span class="hljs-string">"redirect_uri"</span>: <span class="hljs-string">"http://localhost:8000/accounts/github/login/callback/"</span>,
        }
    }
}
</code></pre>
<p>A Django app is required for this guide. Let's call it users. Head over to the views of the Django app and define the following code:</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> allauth.socialaccount.providers.github.views <span class="hljs-keyword">import</span> GitHubOAuth2Adapter
<span class="hljs-keyword">from</span> allauth.socialaccount.providers.oauth2.client <span class="hljs-keyword">import</span> OAuth2Client
<span class="hljs-keyword">from</span> dj_rest_auth.registration.views <span class="hljs-keyword">import</span> SocialLoginView

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">GitHubLogin</span>(<span class="hljs-params">SocialLoginView</span>):</span>
    adapter_class = GitHubOAuth2Adapter
    callback_url = CALLBACK_URL_YOU_SET_ON_GITHUB
    client_class = OAuth2Client

<span class="hljs-comment"># Define the urls.py on the Django app</span>
urlpatterns += [
    path(<span class="hljs-string">'github/'</span>, GitHubLogin.as_view(), name=<span class="hljs-string">'github_login'</span>)
    ]
</code></pre>
<h2 id="heading-how-to-set-up-a-new-application">How to Set Up a New Application</h2>
<p>To specify the GitHub OAuth credentials, you'll need to log into the Django social application model. This will provide your Django project with an additional degree of protection. Because of this, changing the OAuth credentials will be simple and won't damage your existing code.</p>
<p>Start by logging into your Django admin, clicking Social Applications, and selecting Add Application. This will prompt you to create a new application.</p>
<p><img src="https://lh7-us.googleusercontent.com/9XQcRYZfLG8NOw-2ODor7Zgn-6x5Voq9F4ToVdp0eVLdnLnbWVkbB4PUEh68p3DJk9yjkKQf592_kDjipQQqHnpn7jeneWfu2X7Z4I2_n0wsltX5rGvbFSmyQteuDaXLUjWnNTBzDDJic6XQ8goBSd8" alt="Image" width="1600" height="812" loading="lazy">
<em>On Django admin, select "Social applications"</em></p>
<p>You will be prompted to enter information on the new page.</p>
<ul>
<li>Select GitHub as the provider.</li>
<li>Give your social app a name.</li>
<li>Enter the Client Secret and Client ID created from your GitHub OAuth app.</li>
<li>Select the site on Available sites and move it to Chosen sites. Once done, click Save. This will create a new application.</li>
</ul>
<p><img src="https://lh7-us.googleusercontent.com/pStq_1opKb7rkVNCqO2ouCfd2ZBLHFEwoxfWuHabFG12nT5v35NkXYSOH6Su2d_fISvwmO7LpCTfPsDK0EmmLUUvNYynoAgjuvsogP4Ee0xNBfIU_ai4TtXzzHZPFq2U0C3eFQfNCfXSuIoWup6PeCo" alt="Image" width="1600" height="1028" loading="lazy">
<em>Create/Add a Social application</em></p>
<p>Change your site domain to localhost since this is still the development phase.</p>
<p><img src="https://lh7-us.googleusercontent.com/pRKpPs06V2j5ciPCLZRCd5weyc3X5HOGgWXhen_GS9-DhItBkkVJFYe6jBd3QmWMRwfBPagYxh6r1PRXHVeM_M3X6xWeq0lRKYM0GbVKDMlZS7hIVz4oAF6M6lMxYUGF5ZuuPwQyUF-1lfidzJPw79E" alt="Image" width="1600" height="968" loading="lazy">
<em>Select, "Site" to change the existing the site domain</em></p>
<p>Select example.com and change it to http://127.0.0.1:8000/ then Save.</p>
<p><img src="https://lh7-us.googleusercontent.com/ikQ9_lhABi-avsKcoIqH98znI3aJKN4RkZqGfYQwio8nujR0M1kEewfBYdekhVkQMqYQi5APqsqxqpEkbX78wFS8dw76tGH11eEQ2qqTzCuabzgx5qD85SPBgkVtyJVEUui4RAKR_y2Dr65dEiyh7P4" alt="Image" width="1600" height="551" loading="lazy">
<em>Change your site domain from example.com to http://127.0.0.1:8000/</em></p>
<h2 id="heading-how-to-test-the-defined-social-app">How to Test the Defined Social App</h2>
<p>Once you are done defining and setting up the social Django app on your project, you will need to test it and make sure that it works. </p>
<p>If you open the route http://127.0.0.1:8000/auth/github/, you'll need to enter some information such as Access token, ID token, and code. </p>
<p>We'll manually get this information, as the front end is meant to get and parse this information.</p>
<p><img src="https://lh7-us.googleusercontent.com/eLkjj3nueZUf26fcORK9iJSvSyKNiO_ZgvfD9vFbF2momnDka6dVxngCQSKY9VwWcHJDduKDhGXhYsbimtSGZL5uzjrherU6bDXUFDfu5Bys1wylda6WZCOZsotH7ENkZAsHEYbhbImbx9JmbRKCtYM" alt="Image" width="1600" height="791" loading="lazy">
<em>Go to the GitHub registration page to test the defined social app</em></p>
<p>To do this, head over to https://github.com/settings/apps and select Personal access tokens then select Generate new token. Use the second option, Generate new token (classic), since this guide is focused on authenticating users just to get their GitHub user info.</p>
<p><img src="https://lh7-us.googleusercontent.com/E8bb0KrJ0IwoTqCf2f2WVMoycUNad3YuqQZnG6heWwpNh3euYesNjx_ipRAOxYZyGfT-DShM1OyIOznVByQCWqsFrllTXO-FQEUIYPKLbjcbCBrp6vsN_XLlZJhaB3ZaxyBmWGiTMfWD5vjq0VWEq5g" alt="Image" width="1600" height="434" loading="lazy">
<em>On GitHub settings, select "Personal access tokens" then select "Generate new token".</em></p>
<p>Give the token a name and select scopes. Ensure you check all the user scopes.  Then generate a new token.</p>
<p><img src="https://lh7-us.googleusercontent.com/ZLkgWxuIQ1y-jZ3Pere1I-cmDIlwS032kQ0i5bvYufflVfnjhezcgNRqY-UpnJMPbJZY1RcdKApbTz579_DqR-Cs2M6ba3gTcaS6H2utA9JVkW2KVVXqsDjGwItruyBKpktd8TvlIDzVvlgQqh-RqUE" alt="Image" width="1600" height="942" loading="lazy">
<em>Define your new token</em></p>
<p>Your new token should look like this. Ensure you store it somewhere safe. </p>
<p><img src="https://lh7-us.googleusercontent.com/ywiFWxHFRJQwVZpGS-ePV7qR6YNIVi7gh3OoL9HgJvHc7TWHiSevr_Hmc8TRXbNxv0VAwwdt71O3PVchsLuRIlM9nbvhzj8X4IWBtgAjx17M8yYGApqxgBlU1lKeQYg8xwdwCg1PchuqiLuyj8YRCAg" alt="Image" width="1484" height="723" loading="lazy">
<em>Copy the generated personal access token generated by GitHub.</em></p>
<p>Head over to http://127.0.0.1:8000/auth/github/. Enter the access token generated and voilà!  Your user access token and GitHub username will be sent as a response on the body. </p>
<p><img src="https://lh7-us.googleusercontent.com/jd736d5yvsSPhvXCNX21CGHEzTdMhUerN4HVst57iOVqisAejH_T35D7AwKGGHgkJCtkzfkn4ut0YP2vxpYZgSa7ITEqaR2Wqw0J4qxWeIug0ciCEFM4GnDK-DjfooYRzg1sbU1z8cyFMtwRmgMG_bs" alt="Image" width="1600" height="855" loading="lazy">
<em>Using your token and GitHub username ensure the backend system works</em></p>
<h2 id="heading-how-to-implement-oauth-authentication-flow">How to Implement OAuth Authentication Flow</h2>
<p>You have successfully installed and tested the dj-rest-auth package. Next, you will learn how to test the OAuth flow and how it obtains user data from GitHub.</p>
<p>To test the GitHub OAuth authentication flow, you'll need to send a request to https://github.com/login/oauth/authorize.</p>
<p>You can do so by either using curl:</p>
<pre><code class="lang-python"><span class="hljs-string">"https://github.com/login/oauth/authorize?client_id=YOUR_CLIENT_ID&amp;amp;redirect_uri=http://127.0.0.1:8000/auth/callback/&amp;amp;scope=user"</span>
</code></pre>
<p>(and making sure you use the same redirect URI defined in your GitHub OAuth application) or opening https://github.com/login/oauth/authorize?client_id=YOUR_CLIENT_ID&amp;redirect_uri=http://127.0.0.1:8000/auth/callback/&amp;scope=user on your browser. It will redirect you to an authorization page. </p>
<p><img src="https://lh7-us.googleusercontent.com/rJbNTlLFz8h-dMJNgeeMCX-kT-Y_Ofv-1Po0wNp2qZQVH_e6syyabIasdrjWzDDdtF6NQ-2o2oDxv_KX2wYmoUb7OiYcZGz66sbzNjfpfB0P3asAFh4oPV7OvybcQ4OYtiGKAUNYYvqAUt7H1-sn7mM" alt="Image" width="919" height="1164" loading="lazy">
<em>Send a request to GitHub OAuth authentication flow</em></p>
<p>Click Authorize YOUR USERNAME to authorize the user.</p>
<p><img src="https://lh7-us.googleusercontent.com/8GaW8izjQgcqd-9IbCeyDZcdnajXKBDETOIiZ5P2s3iziZQMUvROKmJQuJBDvmPdpAEEhSCCB_xdy1NSkgEEqU2o18lmwsbo8Eay8IYzKL-HJCKoB40ySLE9-vl3g5CLtMyuzmSwQy9u_fyI2iqfuwg" alt="Image" width="991" height="307" loading="lazy">
<em>Click "Authorize" to authorize your GitHub user</em></p>
<p>You will be redirected to a URL showing the code. With the code, you can generate the access token needed to authenticate the user.</p>
<p><img src="https://lh7-us.googleusercontent.com/_RO4IqpLY0-zg8SiW7SXKk1gTCkJq_bVqIrDzH4_tzqWSzHUArqsQlDYSqzFHiGfxdyPpSXW5psYKnZVyHPgnDbETBncgpIrWxZAWc1RjQvcGmi5QRN5XpOyOxuy5n5DqiJkSJO8c0VizOFh3h-tqy4" alt="Image" width="1523" height="159" loading="lazy">
<em>Use the code from GitHub to generate an access token for your auth</em></p>
<p>To get the access token, send a request to this URL: https://github.com/login/oauth/access_token?client_id=YOUR_CLIENT_ID&amp;client_secret=YOUR_CLIENT_SECRET&amp;code=CODE </p>
<p>Or you can choose to use curl to send the request. </p>
<pre><code class="lang-curl">"https://github.com/login/oauth/access_token?client_id=YOUR_CLIENT_ID&amp;amp;client_secret=YOUR_CLIENT_SECRET&amp;amp;code=CODE"
</code></pre>
<p>This should either download the access token for you or return it as a response body depending on how you defined it. The response should look like this:</p>
<p><img src="https://lh7-us.googleusercontent.com/ZIn4u5kqdW3P7o27ReEsAyc-X9R2O28Bm2qfjDh0saywx7vpso41OLoOldHzii4AbnQe-jfqT__4aELgchdXUSQPIR6I86-KdOyZL4hrcFI38YBOjX27IbH2NNtS7SWS7hAFNTroZfVF17s8xoI0lBk" alt="Image" width="1336" height="213" loading="lazy">
<em>Your response from your backend authentication system</em></p>
<p>Now, with this token, you can authenticate your user when they make any request. </p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>In conclusion, setting up GitHub OAuth on Django is a helpful way to enable users to log in to your web applications using their GitHub credentials. </p>
<p>By following this guide, you can enhance your application's security and access your users' data which improves the user experience of your Django app.   </p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ A Project Maintainer's Guide to Hacktoberfest ]]>
                </title>
                <description>
                    <![CDATA[ Hacktoberfest is a month-long event that promotes open-source contributions, collaboration, and projects.  Participating in this event as either a project maintainer or a contributor gives new perspectives to either your project or your career. You a... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/project-maintainer-guide-to-hacktoberfest/</link>
                <guid isPermaLink="false">66c4c647bd556981b1bdc455</guid>
                
                    <category>
                        <![CDATA[ hacktoberfest ]]>
                    </category>
                
                    <category>
                        <![CDATA[ open source ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sophia Iroegbu ]]>
                </dc:creator>
                <pubDate>Thu, 28 Sep 2023 07:02:33 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/09/Blog-Banner---Template--10-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Hacktoberfest is a month-long event that promotes open-source contributions, collaboration, and projects. </p>
<p>Participating in this event as either a project maintainer or a contributor gives new perspectives to either your project or your career. You also get to meet fun people.</p>
<p>This article will walk you through how to become a great, successful project maintainer. </p>
<h2 id="heading-project-preparation">Project Preparation</h2>
<p>Ensuring that your project meets the guidelines of the Hacktoberfest team and is easy for your contributors to contribute to is essential.</p>
<p>You need to define the goals you want to achieve during the event. It would be helpful if you jot it down on a post-it note.</p>
<p>Your goal might be to draw more attention to your project or to give new contributors a safe place to make small changes that would help their careers.</p>
<h2 id="heading-readme-files-and-contribution-guidelines">README Files and Contribution Guidelines</h2>
<p>Documentation is a huge part of your project preparation. But before you document, you need to define your goals for the project.</p>
<p>Your documentation should be focused on helping new contributors get started.</p>
<p>Create a good <a target="_blank" href="https://www.freecodecamp.org/news/how-to-write-a-good-readme-file/">README file</a> that explains your project’s usage, how to set it up, and how to contribute.</p>
<p>Besides having a README file, your projects should also have guidelines that new contributors need to follow.</p>
<p>Create a clear guide on how contributors can get involved in your project and what kinds of contributions they can make, and outline the coding standards or guidelines for the project.</p>
<h2 id="heading-licensing-and-code-of-conduct">Licensing and Code of Conduct</h2>
<p>Before anyone can contribute to your project, ensure it has an open-source license. The license is there to protect you and your contributors.</p>
<p>An open-source project without the proper licensing file could sue contributors for copy and paste and patent rights infringement. To avoid this, select an open-source license that aligns with your project's goals.</p>
<p>Next, you would need to define a code of conduct to ensure that during the Hacktoberfest event, the contributors are respectful of others and inclusive.</p>
<h2 id="heading-projects-github-repository">Project’s GitHub Repository</h2>
<p>Hacktoberfest projects are usually on GitHub. Setting up a Git repository should get you started. </p>
<p>If you have an account, ensure the repository is up to date. If you don’t have an account, create one. </p>
<p>Make sure your project’s source code and documentation are on the Git repository.</p>
<p>According to <a target="_blank" href="https://hacktoberfest.com/participation/#maintainers">Hacktoberfest guidelines,</a> add the <strong>"hacktoberfest"</strong> topic to your repository to opt-in to Hacktoberfest and indicate you’re looking for contributions.</p>
<h2 id="heading-setting-up-issues">Setting Up Issues</h2>
<p>Issues are like a To-do list for your contributors. They can use it to track the bugs, features, or upgrades they need to get involved in. </p>
<p>Setting up an issue template helps your contributors to propose changes to your project. </p>
<h2 id="heading-promoting-your-project">Promoting Your Project</h2>
<p>Once you are done setting up your project and its guidelines, you need to promote your project to reach the target audience. </p>
<p>This is where you use social media platforms like Twitter (X), Facebook, Reddit, and  LinkedIn  to reach a wider audience of people. </p>
<p>You would need compelling project descriptions that engage contributors to get involved. </p>
<p>If possible, consider hosting a Twitter space or webinar to talk about your projects, the solution to a real-world problem, and how contributors to get started.</p>
<h2 id="heading-contributor-engagements">Contributor Engagements</h2>
<p>Once the event begins and you get contributors working on issues, you would need to engage your contributors by doing the following:</p>
<ul>
<li>Review and merge Pull Requests. Ensure you only merge valuable contributions.</li>
<li>Give clear feedback to your contributors to improve their work.</li>
<li>Appreciate your contributors. You can do this by either doing a shout-out on social media or sending thank you messages.</li>
<li>Ensure they remember the code of conduct and let them know the consequences of violating the conduct.</li>
</ul>
<p>You can also create a <a target="_blank" href="https://docs.github.com/en/discussions">GitHub discussion</a> platform where you get to interact with the project contributors. This way you can easily manage the contribution during the event time period. </p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>This guide walked through the needed steps for project maintainers to make the most of the Hacktoberfest event. </p>
<p>By joining as a maintainer, you get the opportunity to meet people, get new ideas, and grow your project. These collaborations or contributions could make a long-lasting impact to your project. </p>
<p>Preparing your project, engaging with your project’s contributors, staying committed to your goals, and creating an inclusive space for all contributions could enhance your project. </p>
<p>Besides being a maintainer, embrace the spirit of open-source and collaboration and have fun during the event.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Deploy a Django App on Render ]]>
                </title>
                <description>
                    <![CDATA[ Render is a hosting platform that helps you deploy your apps easily. Whether you're building web servers, static websites, cron jobs, or containers, this tool can help you streamline the process. If you're a developer early in your career and you nee... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/deploying-a-django-app-to-render/</link>
                <guid isPermaLink="false">66c4c637d788a9c53d88d2e0</guid>
                
                    <category>
                        <![CDATA[ Django ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Hosting ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sophia Iroegbu ]]>
                </dc:creator>
                <pubDate>Wed, 09 Aug 2023 14:13:39 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/08/Blog-Banner---Template--6-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Render is a hosting platform that helps you deploy your apps easily. Whether you're building web servers, static websites, cron jobs, or containers, this tool can help you streamline the process.</p>
<p>If you're a developer early in your career and you need to build a compelling CV, résumé, or portfolio, Render provides a free tier that offers 1GB of storage capacity. </p>
<p>In this guide, we'll explore how to deploy a Django app on the Render platform. The project we create will help you showcase your coding skills and projects effectively while learning about deployment.</p>
<h2 id="heading-prerequisites">Prerequisites</h2>
<p>To follow along with this guide, you'll need to have a few things set up:</p>
<ul>
<li>An account on the <a target="_blank" href="https://render.com/">Render</a> platform</li>
<li>A <a target="_blank" href="https://www.freecodecamp.org/news/introduction-to-git-and-github/">Git</a> account</li>
<li><a target="_blank" href="https://www.postgresql.org/docs/">PostgreSQL</a> installed </li>
<li>A <a target="_blank" href="https://github.com/">GitHub</a> account</li>
</ul>
<p>Now let's learn how to deploy a Django web server for free. 🚀</p>
<h2 id="heading-how-to-set-up-a-postgresql-database">How to Set Up a PostgreSQL Database</h2>
<p>First, head over to your Render dashboard and create a PostgreSQL database. Click the <strong>New +</strong> button, hover over PostgreSQL, and click it. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/07/SmOWvHI.png" alt="Image" width="600" height="400" loading="lazy">
<em>Render Dashboard – creating a PostgreSQL database</em></p>
<p>Next, define your database settings by giving your database instance a name. You can choose to either let Render to define a name for a database and a user or define it yourself. </p>
<p>This guide is for beginners, we'll only define the instance name.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/07/Screenshot-2023-07-28-070509.png" alt="Image" width="600" height="400" loading="lazy">
<em>Creating a new PostgreSQL database</em></p>
<p>Select the free tier and click on <strong>Create Database.</strong> </p>
<p>Note: Every free database created on Render expires 90 days after creation. So just take note of this and upgrade if it's an important project. You can see the pricing <a target="_blank" href="https://render.com/pricing">here</a>. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/07/V4O1Sin.png" alt="Image" width="600" height="400" loading="lazy">
<em>Creating a new PostgreSQL database</em></p>
<p>Once the status on your database shows <strong>Available</strong>, it means the database has been successfully created and is ready to use. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/07/Utirlzn.png" alt="Image" width="600" height="400" loading="lazy">
<em>Checking the status of a newly created PostgreSQL DB</em></p>
<p>Scroll down this page to see your database settings. You'll use these settings to set up your Django app. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/07/GKfYcUX.png" alt="Image" width="600" height="400" loading="lazy">
<em>Database information</em></p>
<p>Next, access control lets you choose an IP address to access your database. </p>
<p>Once your database is created, it comes with a pre-defined access control route that allows you to access it from anywhere in the world using a single (1) IP address. Although, you can't set another route since you are using a free plan on Render. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/07/Screenshot-2023-07-28-072323.png" alt="Image" width="600" height="400" loading="lazy">
<em>PostgreSQL access control information</em></p>
<p>You can choose to change this or leave it as the default. </p>
<p>Now that we've created a database, let's set it up on a Django project.</p>
<h2 id="heading-how-to-connect-your-database">How to Connect Your Database</h2>
<p>Once the database is set up, you need to connect it to your Django project in the <code>settings.py</code> file. </p>
<p>Head over to your codebase and connect it. </p>
<p>First, Install dj-database-url </p>
<pre><code class="lang-python">pip install dj-database-url
</code></pre>
<p>There are different ways to connect your database to your app's project. This guide uses the external connection URL. </p>
<p>Head over to your database settings on Render and copy the <strong>External Database URL</strong>. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/07/dJqwIy4.png" alt="Image" width="600" height="400" loading="lazy">
<em>Getting External DB URL</em></p>
<p>Next, import <a target="_blank" href="https://pypi.org/project/dj-database-url/"><em>dj-database-url</em></a> in your <code>settings.py</code> and define the database URL (from Render) as your database. </p>
<p>Note: It is always wise to add sensitive information to an .env file for security reasons. </p>
<pre><code class="lang-python"><span class="hljs-keyword">import</span> dj-database-url
<span class="hljs-keyword">import</span> os

DATABASES = {
    <span class="hljs-string">"default"</span>: dj_database_url.parse(os.environ.get(<span class="hljs-string">"DATABASE_URL"</span>))
}
</code></pre>
<p>Next, migrate your tables to your new database to ensure the connection was successful. </p>
<p>If you haven't made any migrations to any db.sqlite locally, ensure you make migrations first or you won't create tables when you run <code>python manage.py migrate</code>. </p>
<pre><code class="lang-python"><span class="hljs-comment"># To make migrations if this is your first time connecting to a database </span>
python manage.py makemigrations

<span class="hljs-comment">#To migrate tables set on your migrations folders</span>
python manage.py migrate
</code></pre>
<p>If the connection was successful and you migrate all your tables, your terminal output should look like this:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/07/nXVd604.png" alt="Image" width="600" height="400" loading="lazy">
<em>Successful migration</em></p>
<p>You are now one step away from deploying your Django project! 🎉</p>
<p>Don't forget to push your codebase to a Git repo with meaningful commits. </p>
<h2 id="heading-how-to-create-a-web-service">How to Create A Web Service</h2>
<p>This is the last step to getting your project live.</p>
<p>Head over to your Render dashboard. Click <strong>New +</strong> and Select <strong>Web Service</strong>. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/07/wbse.png" alt="Image" width="600" height="400" loading="lazy">
<em>Creating a new web service</em></p>
<p>Connect your GitHub if you haven't already. It should look like this once it's connected:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/07/MMk3GWX.png" alt="Image" width="600" height="400" loading="lazy">
<em>Connecting your Git to render platform</em></p>
<p>Search for the repo you want to deploy and click the <strong>Connect</strong> button. It should work seamlessly. </p>
<p>Then, define your repo's settings. Give your app a name and ensure you are connecting to the right branch. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/07/deploy.png" alt="Image" width="600" height="400" loading="lazy">
<em>Setting Django web server</em></p>
<p>Install gunicorn and change your requirements.txt in your Django project. By performing <strong>pip freeze &gt; requirements.txt</strong>, you can update installed packages in your requirements.txt. This automatically changes your project's list of required files.</p>
<p>Gunicorn is a lightweight Python web server that acts as a gateway between a web application and the internet. It is designed for deployment since it manages incoming web requests effectively.</p>
<p>Then, push your changes to Git. Remember, you connected Git to your web service, so Render monitors the repo and auto deploys when it detects any changes. </p>
<pre><code class="lang-python">pip install gunicorn

pip freeze &gt; requirements.txt <span class="hljs-comment"># To update your requirements.txt file</span>
</code></pre>
<p>Ensure you add your Render web service to <strong>ALLOWED_HOSTS</strong> in your settings.py. </p>
<p>Next, ensure that you set the right <code>requirements.txt</code> as you can see in the image below. Also, make sure you use the right Python runtime and define your project's gunicorn settings on Render platform.</p>
<p>Once done, scroll down and select <strong>Create Web Service</strong>. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/07/req-1.png" alt="Image" width="600" height="400" loading="lazy">
<em>Creating a web service</em></p>
<p>Go back to the Render Dashboard and click on the Deployed Web Service to view your live link.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/07/final.png" alt="Image" width="600" height="400" loading="lazy">
<em>Deployed web service and database</em></p>
<p>That's it! You've deployed your first Django app on a free platform. Enjoy your web server for the next 90 days. 😎</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>To sum up, deploying a Django app/server or any server on Render is easy and efficient. </p>
<p>By leveraging Render's features like continuous integration and built-in monitoring, developers can focus more on building the app and its features rather than stressing over the app's infrastructure and management. </p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Set Up AWS Simple Email Service ]]>
                </title>
                <description>
                    <![CDATA[ If you're looking for a reliable and cost-effective way to send emails, AWS Simple Email Service (SES) is a great option. It's a cloud-based email platform that helps you send and receive emails quickly and easily.  With SES, you don't have to worry ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/set-up-aws-simple-email-service/</link>
                <guid isPermaLink="false">66c4c64a26a77d9936ef0a6b</guid>
                
                    <category>
                        <![CDATA[ AWS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Cloud ]]>
                    </category>
                
                    <category>
                        <![CDATA[ email ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sophia Iroegbu ]]>
                </dc:creator>
                <pubDate>Mon, 27 Mar 2023 15:44:03 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/03/Blog-Banner---Template--3-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>If you're looking for a reliable and cost-effective way to send emails, AWS Simple Email Service (SES) is a great option. It's a cloud-based email platform that helps you send and receive emails quickly and easily. </p>
<p>With SES, you don't have to worry about managing your mail server, and you can benefit from the scalability and reliability of Amazon's cloud infrastructure. </p>
<p>There are a few steps to setting up SES, such as verifying your domain, verifying your email address, and setting up MX records. This short guide will walk you through each step to get your SES up and running in no time.  </p>
<p><strong>Prerequisites:</strong> This tutorial will be a hands-on demonstration. To follow along, be sure you have an active <a target="_blank" href="https://aws.amazon.com/free/">AWS account</a>.</p>
<h2 id="heading-how-to-configure-aws-ses">How to Configure AWS SES</h2>
<h3 id="heading-step-1-verify-identities">Step 1 – Verify Identities</h3>
<p>First, login into your AWS Management Console account and search for Simple Email Service. Select the <strong>Amazon Simple Email Service.</strong></p>
<p><img src="https://i.imgur.com/8ZjaAKn.png" alt="Image" width="2397" height="1262" loading="lazy">
<em>Searching for AWS SES</em></p>
<p>This will lead you to an SES Console.</p>
<p>To start sending emails, you'll need to create an identity. This involves verifying the email address you would use to send emails. If you do not verify the email address, you can't use the email to perform any action on SES. </p>
<p>Note you can add a domain as an identity, but we'll use an email address for this guide. Click <strong>Create identity</strong> to verify an email address.</p>
<p><img src="https://i.imgur.com/8xrgwvL.png" alt="Image" width="2390" height="1158" loading="lazy">
<em>Creating an Identity</em></p>
<p>Next, select the <strong>Email address</strong> option and enter the email address you wish to use.</p>
<p>In Amazon SES, you can use a domain, subdomain, or email address as a <em>verified</em> identity. You may use whatever suits you best.</p>
<p><img src="https://i.imgur.com/apfMPNY.png" alt="Image" width="2321" height="1004" loading="lazy">
<em>Verifying an Identity</em></p>
<p>We use tags to manage identities on Amazon SES. We'll skip this here, but if you wish, you can define a tag. Once you're done, click <strong>Create identity</strong> to create an identity for your SES account.</p>
<p><img src="https://i.imgur.com/8e6swKE.png" alt="Image" width="1495" height="493" loading="lazy">
<em>Creating an Identity for Amazon SES</em></p>
<p>Now, an email will be sent to the email address you used to create the identity. Click the link in the email to verify your email.</p>
<p><img src="https://paper-attachments.dropboxusercontent.com/s_8C16BB81FDF5129198CC129A07A220ADD326C1D4AD8E16A42ED5864426B31F5B_1670344969240_6DeFvpt.png" alt="Image" width="1266" height="1008" loading="lazy">
<em>Verifying your email address</em></p>
<p>Once you've done that, you will see your email address on your SES account's list of verified identities.</p>
<p><img src="https://i.imgur.com/22Q4jrr.png" alt="Image" width="1838" height="1021" loading="lazy">
<em>List of verified identities</em></p>
<h2 id="heading-how-to-create-smtp-credentials">How to Create SMTP Credentials</h2>
<p>A Simple Mail Transfer Protocol (SMTP) sends and receives messages through a mail server. In this section, you will learn how to create credentials that grant you access to the SES mail server to send and receive mail. </p>
<p>First, log in to your <a target="_blank" href="https://us-east-1.console.aws.amazon.com/ses/home?region=us-east-1#/account">Amazon SES dashboard</a>. Click on <strong>SMTP settings.</strong></p>
<p><img src="https://i.imgur.com/1LsYmUe.png" alt="Image" width="2344" height="1142" loading="lazy">
<em>Amazon SES Dashboard</em></p>
<p>Then click on <strong>Create SMTP</strong> <strong>credentials</strong> to create login details to your SMTP account under Amazon SES.</p>
<p><img src="https://i.imgur.com/M4e6D2p.png" alt="Image" width="2344" height="1070" loading="lazy">
<em>Creating SMTP Credentials</em></p>
<p>You can choose to define an IAM username or use the default. Once you've done that, click <strong>Create</strong>.</p>
<p><img src="https://i.imgur.com/pI1OI2R.png" alt="Image" width="2381" height="1131" loading="lazy">
<em>Creating IAM user for SMTP</em></p>
<p>Once you create an IAM user, your SMTP details will be displayed alongside your IAM username.</p>
<p>A notification telling you your user has been created will be displayed at the top. Make sure you download the credentials since it is a One-Time display detail. You can download them by clicking on <strong>Download Credentials</strong>.</p>
<p><img src="https://i.imgur.com/uc8Pxta.png" alt="Image" width="2386" height="1141" loading="lazy">
<em>Created SMTP Credentials</em></p>
<p>Great! You have access to AWS Simple Email Service SMTP credentials. You can use the credentials to connect your backend to the Amazon SES server to send emails. </p>
<h1 id="heading-conclusion">Conclusion</h1>
<p>Amazon Simple Email Service (SES) is a powerful and reliable tool for quickly sending marketing, notification, and transactional emails. Setting up Amazon SES is straightforward and you can do it in just a few simple steps. </p>
<p>After signing up for an AWS account and accessing the Amazon SES console, you can verify and set a default email address and start sending emails using the service. </p>
<p>With Amazon SES, you can enjoy the benefits of cloud-based email sending, including improved deliverability, scalability, and security.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ TailwindCSS vs NextUI – How to Choose a UI Framework ]]>
                </title>
                <description>
                    <![CDATA[ If you're a developer, choosing the proper UI framework can be tough. This is partly because there are so many options to choose from, each with its strengths and weaknesses.  In this guide, I will discuss the differences between two popular framewor... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/tailwindcss-vs-nextui-how-to-choose-a-ui-framework/</link>
                <guid isPermaLink="false">66c4c65399f22436b71945dc</guid>
                
                    <category>
                        <![CDATA[ UI Design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ User Interface ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sophia Iroegbu ]]>
                </dc:creator>
                <pubDate>Tue, 28 Feb 2023 01:20:44 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/02/pexels-xxss-is-back-777001--2-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>If you're a developer, choosing the proper UI framework can be tough. This is partly because there are so many options to choose from, each with its strengths and weaknesses. </p>
<p>In this guide, I will discuss the differences between two popular frameworks: Tailwind CSS and NextUI. </p>
<p>Tailwind CSS is a framework that has gained a large following among developers due to its simplicity, flexibility, and ease of use. NextUI, on the other hand, is popular because of its scalability, performance, and flexibility. </p>
<p>This article will compare the critical features of the two frameworks, their pros and cons, and their suitability for different project types. </p>
<p>Whether you are a developer looking to select the best framework for your project or you're just curious about these tools, this article is for you. </p>
<h3 id="heading-heres-what-well-cover">Here's what we'll cover:</h3>
<ul>
<li>What is Tailwind CSS and what are its pros and cons?</li>
<li>What is NextUI and what are its pros and cons?</li>
<li>How to decide between Tailwind and NextUI</li>
</ul>
<p>Let’s dive in! 🚀</p>
<h1 id="heading-what-is-tailwind-css">What is Tailwind CSS?</h1>
<p><a target="_blank" href="https://tailwindcss.com/">Tailwind CSS</a> is a utility-first CSS framework – that is, it's a framework that focuses on functionality rather than its looks or UI. <a target="_blank" href="https://adamwathan.me/">Adam Wathan</a>, a Canadian Software developer and entrepreneur, built Tailwind CSS. </p>
<p>Tailwind allows you to completely customize your utility classes without leaving the HTML. Tailwind CSS offers a fast and easy way to style your websites. </p>
<p>Tailwind CSS is highly customizable. This means as a user, you can modify the fonts, colors and other design elements to match your web design preferences. </p>
<p>This framework also has faster load time because of <a target="_blank" href="https://purgecss.com/">PurgeCSS</a> (which removes unused or unwanted CSS styles from your final build resulting in smaller file sizes). </p>
<h3 id="heading-pros-of-using-tailwind-css">Pros of using Tailwind CSS:</h3>
<p>Just as everything has advantages and disadvantages, here are the advantages of using tailwind CSS:</p>
<ul>
<li>Tailwind is easy to learn and use for first-time developers.</li>
<li>Tailwind uses a few lines of code to create flexible designs.</li>
<li>Tailwind can easily convert a design to reusable components since it is a utility-first framework.</li>
<li>Tailwind is a guide and avoids using unfamiliar names for CSS classes and ids.</li>
<li>Tailwind can effortlessly be customized to suit the developer’s needs.</li>
</ul>
<h3 id="heading-cons-of-using-tailwind-css">Cons of using Tailwind CSS:</h3>
<p>And now here are the disadvantages of using Tailwind CSS:</p>
<ul>
<li>Tailwind contains large CSS files because it provides low-level CSS classes, so when styling, the files may be too large and complex to maintain over time. This also affects the performance of the website or application.</li>
<li>Tailwind may have many low-level classes, but it is hard to override the styles of specific elements when changing designs or styling specific elements.</li>
<li>Tailwind is not always the best framework for some projects. It is undoubtedly a powerful tool, but specific design requirements may not be achievable using the available classes when working on a project. Tailwind is best for projects that involves a lot of styling UI and customizing design elements such as Prototyping, Dashboards, E-commerce websites and lots more.   </li>
</ul>
<h1 id="heading-what-is-nextui">What is NextUI?</h1>
<p><a target="_blank" href="https://nextui.org/">NextUI</a> is a component-based CSS framework, which means it provides a set of pre-designed components you can use at any time. Examples include buttons, forms, navigation bars, navigation menus, and more. </p>
<p>NextUI is built and maintained by the <a target="_blank" href="https://vercel.com/">Vercel</a> team. The beauty of NextUI is that it gives you a customizable template, so you don’t have to write much CSS code to create a responsive website. </p>
<p>The downside of using this framework is that developers won’t have 100% control of the design as the components are limited by NextUI. </p>
<p>In addition to its core UI components, NextUI offers developer tools such as automatic code splitting, server-side rendering, and built-in support for libraries like <a target="_blank" href="https://graphql.org/">GraphQL</a> and <a target="_blank" href="https://www.apollographql.com/">Apollo</a>.  </p>
<h3 id="heading-pros-of-using-nextui">Pros of using NextUI:</h3>
<p>Just as everything has advantages and disadvantages, here are the advantages of using NextUI:</p>
<ul>
<li>NextUI is highly scalable when handling large and complex applications if the application grows. It doesn’t slow down when handling such large files.</li>
<li>NextUI is very flexible and built to suit the user’s needs or tastes.</li>
<li>NextUI has a large, reliable <a target="_blank" href="https://discord.gg/9b6yyZKmH4">community</a> so getting help when using the tool is stress-free.</li>
<li>NextUI has an extensive range of pre-built components and features, which saves the developer's time when building.</li>
<li>NextUI is built on React, making it user-friendly to build a JavaScript application.</li>
</ul>
<h3 id="heading-cons-of-using-nextui">Cons of using NextUI:</h3>
<p>And now here are the disadvantages of using NextUI:</p>
<ul>
<li>NextUI has a large footprint compared to other frameworks despite being built on ReactJS. This can also affect its performance if the developer does not fully understand how to navigate NextUI.</li>
<li>NextUI may not be the best option when building an application that does not involve or use ReactJS.</li>
<li>NextUI may be relatively easy to use but has a learning curve that may be difficult to understand for those who don’t use React.</li>
<li>NextUI requires more attention in setting up and configuration because it offers a range of developer tools for customization.</li>
</ul>
<h1 id="heading-how-to-decide-between-nextui-and-tailwind">How to Decide Between NextUI and Tailwind</h1>
<table>
  <tbody><tr>
    <th>NextUI</th>
    <th>Tailwind CSS</th>
  </tr>
  <tr>
   <td>NextUI was built for rendering React applications.</td>
   <td>Tailwind aims at styling any website or web application easily. </td>
  </tr>
  <tr>
    <td>NextUI CSS is customizable and provides a wide range of developer tools and features to customize the pre-built components to the developer’s needs. </td>
    <td>Tailwind CSS is customizable but the only additional developer tool it provides is PurgeCSS. It doesn't provide tools for querying such as GraphQL.</td>
  </tr>
  <tr>
    <td>NextUI CSS is designed to help developers focus on the performance and scalability of their applications. </td>
    <td>Tailwind CSS is designed to help developers build user interfaces quickly and efficiently. </td>
 </tr>
  <tr>
    <td>NextUI is ideal for large React applications</td>
    <td>Tailwind CSS is ideal for small-scale React appplications</td>
 </tr>
  <tr>
    <td>NextUI CSS provides pre-built UI components and features that can be used to build websites and applications. </td>
    <td>Tailwind CSS provides a wide range of low-level CSS classes. This means tailwind gives the developers chance to build the UI components themselves. </td>
 </tr>
  <tr>
    <td>NextUI CSS may take more time in setting up and configuring.</td>
    <td>Tailwind CSS takes less time in setting up and configuring.</td>
 </tr>
</tbody></table>

<p>If you are working on a React application for a large-scale project, NextUI is the best choice as a CSS framework. But if you are working on an application that requires you to focus on specific functionality or design requirements, Tailwind is the best choice for you.   </p>
<h1 id="heading-conclusion">Conclusion</h1>
<p>In conclusion, Tailwind CSS and Next UI are different tools for developing web and mobile applications. </p>
<p>Tailwind CSS is a utility-first CSS framework designed to help developers build a custom user interface quickly. NextUI is a component-based framework designed to help developers improve the performance and scalability of the application. </p>
<p>Tailwind and NextUI each have strengths and weaknesses, and the best choice for your project depends entirely on the application’s design requirements, needs, and goals. </p>
<p>Tailwind CSS best suits developers looking for a simple solution to build a custom user interface. In contrast, NextUI is best suited for developers looking for CSS templates, so they can focus on other parts of the application, like scalability.</p>
<p>In the end, pick the best framework for you based on your preferences and skills as a developer. Before choosing, carefully evaluate the pros and cons of each tool to make an informed decision when building the best possible application for your users.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What is Software Testing? A Beginner's Guide ]]>
                </title>
                <description>
                    <![CDATA[ Software testing is essential to development. It saves you time and money in production mode.  But software testing is a complex topic and can be a bit difficult to understand. In this article, I'll explain the major topics in software testing and ho... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/software-testing-beginners-guide/</link>
                <guid isPermaLink="false">66c4c6501b22d2d8d9040ec8</guid>
                
                    <category>
                        <![CDATA[ beginner ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Software Testing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Testing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ unit testing ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sophia Iroegbu ]]>
                </dc:creator>
                <pubDate>Wed, 21 Sep 2022 16:03:49 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/09/Tech-Blog-Cover--4-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Software testing is essential to development. It saves you time and money in production mode. </p>
<p>But software testing is a complex topic and can be a bit difficult to understand.</p>
<p>In this article, I'll explain the major topics in software testing and how this practice can help you. </p>
<h3 id="heading-table-of-contents">Table of Contents:</h3>
<ul>
<li><a class="post-section-overview" href="#heading-what-is-software-testing">What is Software Testing?</a></li>
<li><a class="post-section-overview" href="#heading-types-of-software-testing">Types of Software Testing</a></li>
<li><a class="post-section-overview" href="#heading-different-types-of-functional-software-testing">Different Types of Functional Software Testing</a></li>
<li><a class="post-section-overview" href="#heading-software-testing-principles">Software Testing Principles</a></li>
<li><a class="post-section-overview" href="#heading-why-is-software-testing-needed">Why is Software Testing needed?</a></li>
<li><a class="post-section-overview" href="#heading-conclusion">Conclusion</a></li>
</ul>
<h2 id="heading-what-is-software-testing">What is Software Testing?</h2>
<p>Software testing is the process of making sure your software/app works as it should. There are various methods you can use to test your code, and each testing method has different requirements. </p>
<p>For instance, unit testing involves writing test cases to ensure the code works as it should, and Beta testing consists of testing the preview version of the software or app to make sure users can use the product.</p>
<p>Software testing is integral to the process of building good software that works as it should. It also helps improve productivity and performance. Testing is an important part of the <em>Software Development Life Cycle</em> (SDLC). </p>
<p>Other benefits of testing your code include preventing bugs, reducing cost, and reducing time of development.</p>
<h2 id="heading-types-of-software-testing">Types of Software Testing</h2>
<p>There are two general types of software testing:</p>
<h3 id="heading-functional-testing">Functional Testing:</h3>
<p>Functional Testing is a software testing method that validates the system against the customer's requirements or specifications. </p>
<p>This type of testing aims to test each function of the software by providing the correct input and ensuring the output is right. </p>
<p>For examples, let's say you write a test case to test creating a user. The test case provides the correct input (email, first name, last name and password) and ensures the output (success message) is accurate, as well.</p>
<p>Functional testing checks that everything is functioning properly by emulating business scenarios based on applicable requirements.</p>
<h3 id="heading-non-functional-testing">Non-functional Testing:</h3>
<p>Non-functional testing is a software testing method that tests for end-user experiences, such as performance and reliability under load. This could either make or break a user experience. </p>
<p>When your code fails at non-functional testing, it may not cause an issue that user would note but it can flag a problem in the system.</p>
<p>Non-functional testing is just about testing the software to know how it responds to load on the system.</p>
<p>In this guide, we will focus on Functional Software Testing.</p>
<h2 id="heading-different-types-of-functional-software-testing">Different Types of Functional Software Testing</h2>
<p>There are different types of software testing, and each has a specific aim. We'll look at each one quickly now. </p>
<h3 id="heading-unit-testing">Unit Testing:</h3>
<p>Unit testing is a type of software testing that validates how each software unit performs and whether that specific piece of code does what it should. A unit is the smallest testable component of an application.</p>
<p>The aim is to confirm that each unit of software code works as expected. You do unit testing during the coding (development) stage or phase. Developers write these tests as they go. </p>
<p>Unit tests isolate possible bugs in your code and help you correct them. A unit could be a single function, method, procedure, module, or object.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/09/image-404.png" alt="Image" width="600" height="400" loading="lazy">
<em>Code Snippet of a unit test case in Python</em></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/09/image-403.png" alt="Image" width="600" height="400" loading="lazy">
<em>Code Snippet of a unit test case in Java</em></p>
<h3 id="heading-integration-testing">Integration Testing:</h3>
<p>Integration Testing is software testing which helps ensure that software components or functions work together properly. This is the second phase of the software testing process that comes after unit testing.</p>
<p>In this type of testing, units or individual software components are tested in groups. This testing method mainly focuses on exposing defects in interactions between integrated components and units.</p>
<h3 id="heading-system-testing">System Testing:</h3>
<p>System testing involves the process of testing integrated software. The aim is to evaluate the system's compliance with specify requirements. </p>
<p>In system testing, the quality assurance team evaluates how each component of the application or software work together in a full, integrated environment.</p>
<h3 id="heading-acceptance-testing">Acceptance Testing:</h3>
<p>Acceptance testing is a software testing method where a system is tested or checked for acceptability. It evaluates the system's compatibility with the business requirements and assesses whether it is acceptable for delivery.</p>
<p>It is also known as formal testing performed to fit user needs, requirements, and business processes. It determines if a system satisfies the standard business criteria and if users or customers will be able to accept it. </p>
<p>Acceptance testing is the last stage of software testing done after system testing and before making the system available for public use.</p>
<h3 id="heading-regression-testing">Regression Testing:</h3>
<p>Regression testing ensures that a component continues working as it should, after including additional components in the program. You perform regression testing when something changes, such as adding a new module to the program.</p>
<p>This type of testing represents the complete testing of executed test cases that are re-executed to ensure the current functionalities still work just fine.</p>
<h3 id="heading-alpha-testing-and-beta-testing">Alpha Testing and Beta Testing:</h3>
<p>Alpha testing is also known as initial validation testing. It is an aspect of acceptance testing done before the product is given to the consumers or users. QA (Quality Assurance) testers usually do this. Alpha testing is done internally by the QA team.</p>
<p>Beta testing is also known as second phase of validation testing. But this type of testing is done externally, which means the public does it. </p>
<p>The version of the code/software for this phase of testing is released to a limited number of users for testing in a real-time scenario. For instance, freeCodeCamp's math curriculum is available for beta testing <a target="_blank" href="https://www.freecodecamp.org/news/freecodecamp-foundational-math-curriculum/">here</a>.</p>
<h2 id="heading-software-testing-principles">Software Testing Principles</h2>
<p>Everything in tech has principles. These are guidelines to help you build better software and avoid errors.</p>
<p>Here are some software testing principles you should follow when writing tests for your code:</p>
<h3 id="heading-testing-aims-to-show-the-presence-of-defects-not-the-absence">Testing aims to show the presence of defects, not the absence:</h3>
<p>Software testing aims to spot software failures. This reduces the presence of faults and errors. </p>
<p>Software testing ensures defects are visible to the developer but doesn't guarantee defect-free software. Multiple types of testing can't even ensure error-free software. Testing can only decrease the number of errors.</p>
<h3 id="heading-exhaustive-testing-is-not-possible">Exhaustive testing is not possible:</h3>
<p>Exhaustive Testing is the process of testing software for all valid and invalid inputs and pre-conditions. </p>
<p>This method of testing is not realistic because test cases presume that the software is correct and it produces the correct output in every test case. If you truly try to test every aspect and test case in your software, it will take too much time and effort, and it's not practical.</p>
<h3 id="heading-perform-early-testing">Perform early testing:</h3>
<p>Testing your software at an early phase helps avoid minor bugs or errors. When you can spot errors at an early stage of the Software Development Life Cycle(SDLC), it's always less expensive. It is best to start software testing from the beginning of the project.</p>
<h3 id="heading-defect-clustering">Defect clustering:</h3>
<p>Defect clustering refers to when most of the problems you find occur in just a few parts of the application or software. If you can identify the modules or areas where these defects occur, you can focus most of your testing efforts on them. </p>
<p>Keep the Pareto Principle in mind when testing your code: 80% of software defects tend to come from 20% of the modules.</p>
<h3 id="heading-beware-of-the-pesticide-paradox">Beware of the Pesticide paradox:</h3>
<p>This principle is based on a theory – "the more you use pesticide on a crop, the more immune the crop will eventually grow, and the pesticide will not be effective." </p>
<p>When you repeat particular test cases over and over, you will see fewer and fewer new bugs. So to find new bugs, update your test cases and run them once you add new test cases.</p>
<h3 id="heading-testing-is-context-dependent">Testing is context-dependent:</h3>
<p>Testing is context-dependent, which means that you should test your software based on its needs, functionalities, and requirements.</p>
<p>Your test approach should depend on what your software does. Not every software needs the same type/method of testing because every application has its unique functionalities.</p>
<p>For instance, when testing an eCommerce web app, you will focus on its functionality to display products, so you will test how it shows products to end-users. When dealing with an API, you will focus on the response the API returns when an endpoint is called. </p>
<p>You wouldn't necessarily use the same test cases for both – that is what it means that testing is context-dependent.</p>
<h3 id="heading-the-absence-of-errors-is-a-fallacy">The absence of errors is a fallacy:</h3>
<p>If you build software that is 99% bug-free, but it doesn't follow user requirements, it is not usable for end-users. </p>
<p>Know that it is very much necessary that your 99% bug-free software still meets or fulfills your user requirements. It is important to write test cases to find errors in the code, but you also need to test your software for your end-users (with them and how they'll use it in mind). The best way to do this is to carry out beta testing.</p>
<h2 id="heading-why-is-software-testing-needed">Why is Software Testing Needed?</h2>
<p>Besides making sure your software is bug-free and meets user requirements, software testing has other advantages. </p>
<h3 id="heading-software-testing-improves-security">Software testing improves security:</h3>
<p>When building software, security is a crucial part of your planning. This is because vulnerable software could jeopardize you users and their information, as hackers can use stolen info for malicious purposes.</p>
<p>As a product undergoes testing, the end-user can count on the fact that they will be getting a reliable product and their details will be secured and safe. So users are more likely to get a product that is free from vulnerabilities with the help of software testing.</p>
<h3 id="heading-software-testing-improves-product-quality">Software testing improves product quality:</h3>
<p>You want your software or product to be bug-free, low-risk, and effective at what it should do. And you can achieve this by including test cases and other testing methods when building out the code.</p>
<p>In addition, you won't know how good your product is until you test it. This helps you provide the best product version before it gets released (and discover any inconsistencies or pain points along the way – so you can improve them).</p>
<h3 id="heading-software-testing-improves-customer-satisfaction">Software testing improves customer satisfaction:</h3>
<p>For instance, let's say you download a new app and try to use some of its functionality – but it shows an error. This will probably frustrate you, and you might not want to use the app again, right?</p>
<p>This is exactly why software testing is important. It can help you discover such errors and detect them before you release the product to the user, and gives the developers a chance to prevent the error. </p>
<p>By investing in software testing early in the development stage, you are letting the users know that you care about their experience. It could also help you create a solid long-term customer relationship.</p>
<h3 id="heading-software-testing-saves-money">Software testing saves money:</h3>
<p>Software testing can save you a lot of money – but how?</p>
<p>Each stage of development involves many things, such as clear communication and coordination between multiple teams, and each step has a laundry list of things that could go awry.</p>
<p>Catching those errors when the product is live is a horrible experience because you may have to handle PR, retasking fixes, and trying to sort the problem in real time.</p>
<p>In addition, your users won't be able to access the app while you're fixing it, which defeats the app's purpose and provides a bad user experience in the meantime. Software testing helps resolve this stress, and once live, your user can enjoy your app/product to the fullest.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>In conclusion, software testing is a crucial part of development. It can help save your team a lot of trouble, and it feels great to create a usable, bug-free product that users enjoy and recommend.</p>
<p>If software testing interests you, you can check freeCodeCamp's QA certificate course <a target="_blank" href="https://www.freecodecamp.org/learn/quality-assurance/#quality-assurance-and-testing-with-chai">here</a> to learn more about QA testing. QA testers are techies that focus on testing softwares and apps for errors. </p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Choose a Tech Career – A Career Changer's Guide ]]>
                </title>
                <description>
                    <![CDATA[ Choosing a tech career can be tricky because there are many possible paths to choose from. There's Web Development, Machine Learning, Data Science, DevOps, and many more. But the good news is you don't necessarily have to be a developer to be in the ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-choose-a-tech-career/</link>
                <guid isPermaLink="false">66c4c640034a1005e6c59646</guid>
                
                    <category>
                        <![CDATA[ career advice ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Career Change ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sophia Iroegbu ]]>
                </dc:creator>
                <pubDate>Fri, 29 Jul 2022 16:43:31 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/07/Tech-Blog-Cover--3-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Choosing a tech career can be tricky because there are many possible paths to choose from. There's Web Development, Machine Learning, Data Science, DevOps, and many more.</p>
<p>But the good news is you don't necessarily have to be a <strong>developer</strong> to be in the world of tech.</p>
<p>This article is a guide for people struggling with the transition to tech. It will explain various careers in tech that you can consider. We'll also discuss how to know whether a particular path suits you or your personality.</p>
<p>This is based on my views and experience, but I hope my insights will prove helpful.</p>
<h2 id="heading-table-of-contents">Table of Contents</h2>
<ul>
<li><p><a class="post-section-overview" href="#heading-what-is-uiux-design">UI/UX Design Path</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-frontend-development">Frontend Path</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-backend-development">Backend Path</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-data-analysis-and-data-science">Data Analysis &amp; Data Science Path</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-cybersecurity">Cyber security Path</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-graphic-design">Graphic Design Path</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-program-management">Program Management Path</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-human-resources">Human Resources Path</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-growth-manager">Growth Management Path</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-business-development">Business Development Path</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-community-manager">Community Management Path</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-developer-relations-devrel">Developer Relations Path</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-technical-writer">Technical Writer Path</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-quality-assurance-testing">Quality Assurance Path</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-motion-designer">Motion Designing Path</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-digital-marketing">Digital Marketing Path</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-mobile-app-developer">Mobile Development Path</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-devops">Developer Operations Path</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-game-development">Game Development Path</a></p>
</li>
</ul>
<h1 id="heading-possible-careers-in-tech">Possible Careers in Tech</h1>
<h2 id="heading-uiux-design">UI/UX Design</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/Whats-the-Difference-Between-them.png" alt="UI/UX Illustration" width="600" height="400" loading="lazy"></p>
<p><em>UI/UX Illustration</em></p>
<p>If you love aesthetics and enjoy styling things, then UI/UX design might be your career.</p>
<h3 id="heading-what-is-uiux-design">What is UI/UX Design?</h3>
<p><strong>UI</strong> stands for User Interface and refers to the screens, pages, and visual icons that users interact with on a webpage or in an app (buttons, icons, and so on). A well-designed UI helps non-techies and all end-users interact with a product or a service online.</p>
<p><strong>UX</strong> stands for User Experience and involves helping a product or service improve its customer's service. A good UX can also help grow followers for the brand.</p>
<p>As a UI/UX developer, your job is to design and build out a user's experience for a brand or company.</p>
<p>A UI/UX developer must know and understand how to use the following:</p>
<ul>
<li><p><a target="_blank" href="https://www.freecodecamp.org/news/designing-a-website-ui-with-prototyping/"><strong>Wireframing</strong></a>: A wireframe is a webpage layout stripped of visual design. You use it to prioritize page elements based on user needs.</p>
</li>
<li><p><a target="_blank" href="https://www.freecodecamp.org/news/designing-a-website-ui-with-prototyping/"><strong>Prototyping</strong></a>: A prototype is a sample or simulation of a final product used to test and gather feedback. Low-fidelity prototypes might be sketched on paper and don't allow user interaction. High-fidelity prototypes are typically computer-based and allow for mouse and keyboard interaction.</p>
</li>
<li><p><strong>Mockup</strong>: A mockup allows designers to get an idea of a realistic visual model of a final webpage or application.</p>
</li>
<li><p><strong>User flow</strong>: A user flow is a way to map out each user's steps when using a product or service. This helps improve the user experience.</p>
</li>
</ul>
<h3 id="heading-what-tools-do-i-need-to-become-a-uiux-developer">What tools do I need to become a UI/UX Developer?</h3>
<p>If you're working as a UI/UX developer, you'll likely use tools like:</p>
<ul>
<li><p><a target="_blank" href="https://www.adobe.com/products/xd.html">Adobe XD</a></p>
</li>
<li><p><a target="_blank" href="https://www.figma.com/">Figma</a></p>
</li>
<li><p><a target="_blank" href="https://www.adobe.com/products/photoshopfamily.html">Photoshop</a></p>
</li>
<li><p><a target="_blank" href="https://www.sketch.com/">Sketch</a></p>
</li>
</ul>
<p>There are lots of tools, but these are the most popular.</p>
<p>A UI/UX developer designs websites and web apps and helps improve user experience with the need-to-knows mentioned above. You can get inspiration from Behance or dribble if you wish to go down this path.</p>
<h3 id="heading-here-are-some-resources-to-help-you-get-started-as-a-uiux-designer">Here are some resources to help you get started as a UI/UX designer:</h3>
<ul>
<li><p><a target="_blank" href="https://youtu.be/jwCmIBJ8Jtc">Figma Tutorial for UI Design - Course for Beginners</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/c9Wg6Cb_YlU">UI / UX Design Tutorial – Wireframe, Mockup &amp; Design in Figma</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/I0-vBdh4sZ8">UX Design Tutorial for Beginners</a></p>
</li>
</ul>
<h2 id="heading-frontend-development">Frontend Development</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/frontend-development-tools.png" alt="Frontend Tools Ilustration" width="600" height="400" loading="lazy"></p>
<p><em>Frontend Tools Illustration</em></p>
<p>If you love creating websites, you should consider frontend development.</p>
<p>A frontend developer ensures that a visitor can easily interact with a webpage. They use design tools, various frameworks and libraries, and coding to build websites.</p>
<p>Frontend devs are also client-side developers because they directly build the elements on websites and applications with which users and clients interact.</p>
<p>The leading web technologies used by frontend developers are:</p>
<ul>
<li>HTML (HyperText Markup Language):</li>
</ul>
<p><strong>HTML</strong> lets you build the skeleton of webpages and websites. The markup language defines the web. You can think about it as the structure of a house because it holds all the text and defines every header 0n a website.</p>
<ul>
<li>CSS (Cascading Style Sheets):</li>
</ul>
<p><strong>CSS</strong> is responsible for making the website beautiful. You can think of it like the decor of a house. You use it to give your pages color, animations, and more after the HTML has displayed the text.</p>
<ul>
<li>JavaScript:</li>
</ul>
<p><strong>JavaScript</strong> handles the responsiveness of the website. It gives life to a website, helps make it look fabulous on every device, and makes it more interactive.</p>
<p>You will need basic knowledge of these languages to build a unique and interactive website successfully. Knowing only one of the mentioned tech skills won't be enough to build production-quality applications because you will just be able to create a half-useful website.</p>
<p>Sometimes, frontend developers work hand-in-hand with UI/UX developers.</p>
<h3 id="heading-what-tools-do-i-need-to-know-to-become-a-frontend-developer">What tools do I need to know to become a Frontend Developer?</h3>
<h4 id="heading-a-code-editor-or-an-ide-integrated-development-environment">A code editor or an IDE (Integrated Development Environment)</h4>
<p>A code editor/IDE is where you'll write your code, debug it, and preview written code.</p>
<p>There are many editors/IDE to choose from, but the most popular ones are <a target="_blank" href="https://code.visualstudio.com/">Visual Studio Code</a>, <a target="_blank" href="https://atom.io/">Atom</a>, and <a target="_blank" href="https://www.sublimetext.com/">Sublime text editor</a>.</p>
<h4 id="heading-chrome-developer-toolshttpsdeveloperchromecomdocsdevtools"><a target="_blank" href="https://developer.chrome.com/docs/devtools/">Chrome Developer Tools</a></h4>
<p>You use Chrome DevTools to debug real-time applications on Chrome. It gives you an understanding of and access to important internal information of a web application. DevTools also helps you understand how to optimize the loading flow and what the browser is doing now.</p>
<h4 id="heading-git-and-githubhttpsgithubcom-for-version-control"><a target="_blank" href="https://github.com/">Git and GitHub</a> for version control</h4>
<p>I know what you are thinking – <a target="_blank" href="https://www.freecodecamp.org/news/git-and-github-for-beginners/">what is a version control system</a>? It is a system that helps you review your code in stages and keep track of your (and others') revisions. Git is a version control system, and GitHub is an online hosting service for Git repositories.</p>
<p>Say you are working on a landing page, and you messed up the footer, and in the codebase, it seems hard to debug. You can quickly go back to previously committed code on your repository and see your last change(s). Although, you can only see your previous commit when you commit to your repo.</p>
<p>GitHub helps team members work together more efficiently, and you can use it to contribute to open source projects.</p>
<h3 id="heading-here-are-some-resources-to-help-you-get-started-in-frontend-development">Here are some resources to help you get started in Frontend Development:</h3>
<ul>
<li><p><a target="_blank" href="https://youtu.be/NrVf8XEihCA">Frontend Developer Guide for 2022</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/xV7S8BhIeBo">Frontend Development with HTML, CSS, JavaScript</a></p>
</li>
<li><p><a target="_blank" href="https://www.freecodecamp.org/learn/2022/responsive-web-design/">Responsive Web Design Course</a></p>
</li>
</ul>
<h2 id="heading-backend-development">Backend Development</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/pexels-photo-276452-1.jpg" alt="Backend Tools Ilustration" width="600" height="400" loading="lazy"></p>
<p><em>Backend Tools Illustration</em></p>
<p>If you love working with and building things that depend on you, you should be a backend developer.</p>
<p>A backend developer builds and maintains technologies or software necessary to power client-side development components. They are also called server-side developers.</p>
<p>Their work includes:</p>
<ul>
<li><p>Building/maintaining databases</p>
</li>
<li><p>Working with data and application integration</p>
</li>
<li><p>Working with APIs</p>
</li>
<li><p>Building out the core application logic</p>
</li>
</ul>
<h3 id="heading-what-tools-do-i-need-to-become-a-backend-developer">What tools do I need to become a Backend developer?</h3>
<p>Backend devs use almost the same tools as Frontend developers. Here's what you'll find helpful:</p>
<ul>
<li><p>Code editor/IDE: This is used for writing code, debugging, and previewing codebases.</p>
</li>
<li><p><a target="_blank" href="https://developer.chrome.com/docs/devtools/">Chrome developer tools</a>: This helps you debug your code.</p>
</li>
<li><p><a target="_blank" href="https://github.com/">Git and GitHub</a>: This helps you review your code in stages and makes team-building, collaboration, and open source contributing easier. Any developer can contribute to your project if the repository is public.</p>
</li>
<li><p>SQL or NoSQL server: SQL stands for Structured Query Language. This helps you query databases and interact with them while building an application.</p>
</li>
<li><p>Knowledge of a database</p>
</li>
</ul>
<h3 id="heading-here-are-some-resources-to-help-you-get-started-in-backend-development">Here are some resources to help you get started in Backend Development:</h3>
<ul>
<li><p><a target="_blank" href="https://www.freecodecamp.org/learn/back-end-development-and-apis/">Backend Development and APIs certification</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/Q0prVO3DCtU">Backend Roadmap</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/hHLmb3OD7Mo">Back-end Development and APIs - FreeCodeCamp Tutorial</a></p>
</li>
</ul>
<h2 id="heading-data-analysis-and-data-science">Data Analysis and Data Science</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/pexels-photo-265087.jpg" alt="Data Science/Analysis Skills Ilustration" width="600" height="400" loading="lazy"></p>
<p><em>Data Science/Analysis Skills Illustration</em></p>
<p>Consider a data analyst career if you love calculating, mathematics, or statistics.</p>
<p>Data analysis involves examining, transforming, and arranging a given data set in specific ways to study its parts and extract useful information. It deals with interpreting, analyzing, and visualizing data.</p>
<p>In layperson's terms, data analysis involves gathering insights from data to aid business decisions.</p>
<p>Data science handles data using machine learning, algorithms, and statistics. It is the statistical part of the data field. Data scientists collect, clean, and interpret data sets for surveys. So data science involves statistically analyzing data.</p>
<p>It's always better to start as a data analyst and then transition to data science because data analysis is the foundation of data science. Although they may be on the same path, there is a fine line between data science and data analysis.</p>
<p>Data is present in every industry, so data scientists and analysts are needed everywhere.</p>
<h4 id="heading-essential-technical-skills-to-have-for-data-science">Essential technical skills to have for Data Science:</h4>
<ul>
<li><p><a target="_blank" href="https://www.mysql.com/">MySQL</a></p>
</li>
<li><p><a target="_blank" href="https://www.python.org/">Python programming language</a></p>
</li>
<li><p>Mathematics</p>
</li>
<li><p>Statistics</p>
</li>
<li><p><a target="_blank" href="https://www.r-project.org/about.html">R programming language</a></p>
</li>
</ul>
<h3 id="heading-what-tools-you-would-use-in-this-field">What tools you would use in this field:</h3>
<ul>
<li><p><a target="_blank" href="https://www.microsoft.com/en-us/microsoft-365/excel">Microsoft Excel</a></p>
</li>
<li><p><a target="_blank" href="https://www.google.com/sheets/about/">Google Spreadsheets</a></p>
</li>
<li><p><a target="_blank" href="https://www.tableau.com/">Tableau</a></p>
</li>
<li><p><a target="_blank" href="https://www.sqlservertutorial.net/getting-started/what-is-sql-server/">SQL Server</a></p>
</li>
<li><p><a target="_blank" href="https://powerbi.microsoft.com/en/">PowerBI</a></p>
</li>
</ul>
<h3 id="heading-here-are-some-resources-to-help-you-get-started-in-data-analysis-and-data-science">Here are some resources to help you get started in Data Analysis and Data Science:</h3>
<ul>
<li><p><a target="_blank" href="https://docs.microsoft.com/en-us/learn/modules/data-analytics-microsoft/">Discover Data Analysis</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/ua-CiDNNj30">Data Science For Beginners</a></p>
</li>
<li><p><a target="_blank" href="https://www.freecodecamp.org/learn/data-analysis-with-python/">Data Analysis certification</a></p>
</li>
</ul>
<h2 id="heading-product-management">Product Management</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/pexels-photo-416405.jpeg" alt="Product Management Skills Ilustration" width="600" height="400" loading="lazy"></p>
<p><em>Product Management Skills Illustration</em></p>
<p>This is for you if you are great at organizing products and teams.</p>
<p>A product manager manages and coordinates product development projects. The product manager is the voice of the customer on the team.</p>
<p>They ensure that the product being built contains the features and requirements needed to satisfy the customer. They're also in charge of drafting out a roadmap for that product, from imagination, all the way to launch. And they are the ones who decide what feature to include in v1 or V2.</p>
<p>Their responsibilities include:</p>
<ul>
<li><p>Understanding user needs,</p>
</li>
<li><p>Drafting out roadmaps for the product being built.</p>
</li>
<li><p>Defining a vision for the products</p>
</li>
<li><p>Developing competitive analyses</p>
</li>
<li><p>Prioritizing product features</p>
</li>
</ul>
<p>And lots more.</p>
<h3 id="heading-common-tools-product-managers-use">Common tools product managers use:</h3>
<ul>
<li><p>There are many tools for user tracking and analysis such as <a target="_blank" href="https://www.pendo.io/">Pendo</a> or <a target="_blank" href="https://amplitude.com/">Amplitude</a>. These apps give insight into users' activity on the software or website.</p>
</li>
<li><p><a target="_blank" href="https://www.productplan.com/">Product Plan</a> is a road mapping software to draft out and manage the product plan. They can also handle version-control issues that can slow your product's progress.</p>
</li>
<li><p>Survey Tools such as <a target="_blank" href="https://www.typeform.com/surveys/">Typeform</a> are very handy. PMs use them to carry out customer or user surveys to help improve the product to users' needs. A product manager can easily track and analyze the results using these tools.</p>
</li>
<li><p>Feature flagging tools such as <a target="_blank" href="https://www.split.io/">Split.io</a> help teams quickly turn specific features when users have flagged them. This is useful during a notable feature or product launch or testing process.</p>
</li>
<li><p>Flowcharting tools such as <a target="_blank" href="https://www.microsoft.com/en-us/microsoft-365/visio/flowchart-software">Visio</a> help create product development workflow and help the product manager structure the user journey on the product.</p>
</li>
</ul>
<h3 id="heading-here-are-some-resources-to-get-started-in-product-management">Here are some resources to get started in Product Management:</h3>
<ul>
<li><p><a target="_blank" href="https://youtu.be/lF70OuNWdrM">Product Management Fundamentals</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/ravLfnYuqmA">Introduction to Product Management</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/NsqyFcycBTw">Product Management Tutorial for Beginners</a></p>
</li>
</ul>
<h2 id="heading-cybersecurity">Cybersecurity</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/pexels-photo-5380664.jpeg" alt="Cyber Security Skills Ilustration" width="600" height="400" loading="lazy"></p>
<p><em>Cyber Security Skills Illustration</em></p>
<p>If you are passionate about security, consider a career in cybersecurity.</p>
<p>Cybersecurity involves everything from encryption to finding and protecting against malware or viruses to hacking to find security vulnerabilities in a system so they can be fixed.</p>
<p>A cybersecurity specialist protects digital information for individuals, companies, firms, and the government.</p>
<p>Their tasks include:</p>
<ul>
<li><p>Testing, analyzing, and implementing security system developments</p>
</li>
<li><p>Managing system vulnerabilities</p>
</li>
<li><p>Responding to security threats and attacks</p>
</li>
<li><p>Developing threat prevention strategies</p>
</li>
<li><p>Reporting directly to administrators and executives</p>
</li>
</ul>
<h3 id="heading-tools-cyber-security-analysts-use">Tools cyber security analysts use:</h3>
<ul>
<li><p>Network security monitoring tools such as <a target="_blank" href="https://www.splunk.com/">Splunk</a> or <a target="_blank" href="https://argus-sec.com/">Argus</a>. These tools keep track of network threats and analyze network data.</p>
</li>
<li><p>Encryption tools such as <a target="_blank" href="https://www.veracrypt.fr/code/VeraCrypt/">VeraCrypt</a> and <a target="_blank" href="http://truecrypt.sourceforge.net/">TrueCrypt</a>. These tools are used for encryption by scrambling plain text to code that is not accessible to unauthorized users.</p>
</li>
<li><p>Vulnerability scanners such as <a target="_blank" href="https://cirt.net/Nikto2">Nikto</a> and <a target="_blank" href="https://portswigger.net/burp">Burp Suite</a>. These tools scan software to identify security vulnerabilities using <a target="_blank" href="https://www.freecodecamp.org/news/what-is-sql-injection-how-to-prevent-it/">SQL Injection</a> and cross-site scripting.</p>
</li>
</ul>
<h3 id="heading-here-are-some-resources-to-get-started-in-cyber-security">Here are some resources to get started in Cyber Security:</h3>
<ul>
<li><p><a target="_blank" href="https://youtu.be/3Kq1MIfTWCE">Complete Ethical Hacking Course - Network Penetration Testing for Beginners</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/U_P23SqJaDc">Cyber Security Full Course for Beginner</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=nzZkKoREEGo&amp;list=PL9ooVrP1hQOGPQVeapGsJCktzIO4DtI4_">Cyber Security Training Course</a></p>
</li>
</ul>
<h2 id="heading-graphic-design">Graphic Design</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/pexels-photo-196644.jpg" alt="Graphic Design Skills Ilustration" width="600" height="400" loading="lazy"></p>
<p><em>Graphic Design Skills Illustration</em></p>
<p>If you love designing flyers, logos, and other graphic elements, consider a career in graphic design. Many people will argue that graphic design is not a technical career, but it is because it helps bring ideas to life, like UI/UX designing.</p>
<p>A graphic designer is in charge of digitally beautifying a company's brand, assembling images that tell consumers about the brand, and creating motion graphics for a brand.</p>
<h3 id="heading-graphic-design-as-a-tech-career-involves">Graphic design as a tech career involves:</h3>
<ul>
<li><p>Creating layouts</p>
</li>
<li><p>Digital editing</p>
</li>
<li><p>Typesetting</p>
</li>
<li><p>Presenting design products</p>
</li>
</ul>
<h3 id="heading-some-graphic-designer-tools-you-should-know">Some Graphic Designer tools you should know:</h3>
<ul>
<li><p><a target="_blank" href="https://www.adobe.com/products/illustrator.html">Adobe Illustrator</a></p>
</li>
<li><p><a target="_blank" href="https://procreate.art/">Procreate</a></p>
</li>
<li><p><a target="_blank" href="https://www.adobe.com/products/photoshop.html">Adobe Photoshop</a></p>
</li>
<li><p><a target="_blank" href="https://affinity.serif.com/en-us/photo/">Affinity</a></p>
</li>
<li><p><a target="_blank" href="https://www.canva.com/">Canva</a></p>
</li>
</ul>
<p>These tools will help you get the most out of your designs, and they're used by designers all over the world.</p>
<h3 id="heading-here-are-some-resources-to-get-started-in-graphic-design">Here are some resources to get started in Graphic Design:</h3>
<ul>
<li><p><a target="_blank" href="https://youtu.be/9QTCvayLhCA">Graphic Design Tutorial For Beginners</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/IyR_uYsRdPs">Photoshop for Beginners</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=pz-lwONtVmM&amp;list=PLlz0muypSBNZ02BPF227DXRGBsK5QjcUV">Graphic Design Crash Course</a></p>
</li>
</ul>
<h2 id="heading-program-management">Program Management</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/pexels-photo-8190804.jpeg" alt="Program Management Skills Ilustration" width="600" height="400" loading="lazy"></p>
<p><em>Program Management Skills Illustration</em></p>
<p>If you love creating and managing structures, consider being a program manager.</p>
<p>A program manager oversees the fulfillment of company goals. They manage the practical programs and coordinate activities between multiple projects without executing them. They also focus on implementing programs, program strategies, and delegating tasks.</p>
<p>They are involved in:</p>
<ul>
<li><p>Sales process</p>
</li>
<li><p>Employee training</p>
</li>
<li><p>Creating marketing plans</p>
</li>
<li><p>Opening new facilities</p>
</li>
<li><p>Product launches</p>
</li>
</ul>
<h3 id="heading-tools-used-in-program-management">Tools used in Program Management:</h3>
<ul>
<li>Agile tools such as <a target="_blank" href="https://trello.com/">Trello</a> and <a target="_blank" href="https://www.atlassian.com/software/jira">Jira</a>.</li>
</ul>
<h3 id="heading-here-are-some-resources-to-get-started-as-a-project-manager">Here are some resources to get started as a Project Manager:</h3>
<ul>
<li><p><a target="_blank" href="https://youtu.be/CESfWcOO_fs">Program Management Standard Summary &amp; Introduction to PgMP</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/dPrvOWRI5WQ">Everything About PgMP (Program Management Professional)</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/RiZRA08KMWA">Overview of Program Manager</a></p>
</li>
</ul>
<h2 id="heading-human-resources">Human Resources</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/pexels-photo-5989935.jpeg" alt="Human Resources Skills Ilustration" width="600" height="400" loading="lazy"></p>
<p><em>Human Resources Skills Illustration</em></p>
<p>If you are good with people and enjoy helping them resolve conflicts and issues, you might consider becoming an HR specialist. <strong>HR</strong> stands for Human Resources.</p>
<p>Human resources management is recruiting talents and developing a solid company's workforce. The HR department identifies skills or human resources in a company, evaluates potential candidates, and hires talent. They are also in charge of advertising a position for a company.</p>
<p>An HR specialist screens, recruits, interviews, and places new employees.</p>
<h3 id="heading-other-hr-responsibilities-include">Other HR responsibilities include:</h3>
<ul>
<li><p>Handling employee relations</p>
</li>
<li><p>Handling payroll</p>
</li>
<li><p>Managing benefits and training for employees</p>
</li>
<li><p>Consulting with executives on strategic planning</p>
</li>
</ul>
<h3 id="heading-tools-and-techniques-used-by-hr-personnel">Tools and techniques used by HR Personnel:</h3>
<ul>
<li><p><a target="_blank" href="https://www.selectsoftwarereviews.com/buyer-guide/programmatic-job-advertising-software">Programmatic Job Advertising Tools</a></p>
</li>
<li><p><a target="_blank" href="https://geekflare.com/pre-employment-assessment-tools/">Pre-employment Assessment Tools</a></p>
</li>
<li><p><a target="_blank" href="https://peoplemanagingpeople.com/tools/talent-management-system/">Talent Management Solutions</a></p>
</li>
<li><p><a target="_blank" href="https://www.wrike.com/project-management-guide/faq/what-is-expert-judgment-in-project-management/#:~:text=Expert%20judgment%20is%20a%20technique,knowledge%20of%20the%20product%2Fmarket.">Expert Judgement</a></p>
</li>
<li><p>Networking - they use a platform like <a target="_blank" href="https://www.freecodecamp.org/news/p/ead99504-cbb6-4218-bb71-9ecc48fc291a/linkedin.com">LinkedIn</a> to reach out to talents.</p>
</li>
</ul>
<h3 id="heading-here-are-some-resources-to-get-started-with-human-resources">Here are some resources to get started with Human Resources:</h3>
<ul>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=A2HFusWQIeE&amp;list=PLdinyWzDfipPVYqpTc8EhWNDvEx14Nc1E">HR Basics</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/hhIVo27PaQg">Complete HR Generalist Tutorial for Beginners</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=w_wIMveGlrI&amp;list=PLPjSqITyvDeXSqZIgYD2XKKLGZtjrhDtl">Principles of Human Resources</a></p>
</li>
</ul>
<h2 id="heading-growth-manager">Growth Manager</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/7-Ways-to-Increase-Sales-Using-SEO-blog.jpg" alt="Growth Skills Ilustration" width="600" height="400" loading="lazy"></p>
<p><em>Growth Skills Illustration</em></p>
<p>If you are passionate about making things better or bigger, a career as a growth manager might be for you.</p>
<p>A growth manager handles the execution of growth strategy for a business's product to direct consumers. Also, they coordinate initiatives with key financial partners.</p>
<p>Growth managers handle the company's financial growth from sales and marketing to networking and business stakeholder management to people management and work with almost every department. They set goals for workers of every department.</p>
<h3 id="heading-tools-used-in-growth-management">Tools used in Growth Management:</h3>
<ul>
<li><p>Expand</p>
</li>
<li><p><a target="_blank" href="https://zapier.com/">Zapier</a></p>
</li>
<li><p><a target="_blank" href="https://www.growthbarseo.com/">GrowthBar</a></p>
</li>
<li><p>Colibri</p>
</li>
<li><p><a target="_blank" href="https://www.airtable.com/">Airtable</a></p>
</li>
</ul>
<p>These tools are all used to track the activity growth in a company or a product.</p>
<h3 id="heading-how-to-get-started-as-a-growth-manager">How to get started as a Growth Manager:</h3>
<ul>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=JnD_m10cjo0">Growth Manager course</a></p>
</li>
<li><p><a target="_blank" href="https://www.classcentral.com/course/youtube-growth-hacking-for-beginners-53179">Growth Hacking for Beginners</a></p>
</li>
<li><p><a target="_blank" href="https://www.hubspot.com/resources/courses/growth-marketing">Growth Management courses</a></p>
</li>
</ul>
<h2 id="heading-business-development">Business Development</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/Business-Development-Words.jpg" alt="Business Developer Skills Ilustration" width="600" height="400" loading="lazy"></p>
<p><em>Business Developer Skills Illustration</em></p>
<p>This career is for you if you are great at building relationships and are 100% business-oriented.</p>
<p>A business developer or business development analyst is in charge of helping organizations gain better brand recognition and financial growth.</p>
<p>They bring up ideas, initiatives, and activities that help improve a business, including increasing revenues, growth terms of business expansion, and profitability by building strategic partnerships and making decisions for business strategy.</p>
<h3 id="heading-other-business-development-job-responsibilities-include">Other business development job responsibilities include:</h3>
<ul>
<li><p>Coordinating events with company executives</p>
</li>
<li><p>Reviewing current market trends</p>
</li>
<li><p>Proposing new business ideas to improve revenue</p>
</li>
<li><p>Building relationships with potential partners</p>
</li>
</ul>
<p>At a large tech company, a business developer works with the non-technical teams and the CEO or board to help grow the business.</p>
<h3 id="heading-tools-used-for-business-development">Tools used for business development:</h3>
<ul>
<li><p>Social Management Tools</p>
</li>
<li><p>Email Lists</p>
</li>
<li><p><a target="_blank" href="https://www.pcmag.com/picks/the-best-crm-software">Customer Relationship Software (CRM)</a></p>
</li>
<li><p>Project Management Tools such as <a target="_blank" href="https://www.atlassian.com/software/jira">Jira</a> or <a target="_blank" href="https://www.accelo.com/">Accelo</a></p>
</li>
<li><p>SEO (Search Engine Optimization) Tools</p>
</li>
</ul>
<h3 id="heading-here-are-some-resources-to-get-started-with-business-development">Here are some resources to get started with Business Development:</h3>
<ul>
<li><p><a target="_blank" href="https://youtu.be/f9DzS6NdgwU">Business Analyst Full Course In 2 Hours</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/b3NNk7G658k">Business Development Course</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=_Dcmk9mEP9s">Business Analytics Course</a></p>
</li>
</ul>
<h2 id="heading-community-manager">Community Manager</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/community-manager--1-.jpg" alt="Community Manager Skills Ilustration" width="600" height="400" loading="lazy"></p>
<p><em>Community Manager Skills Illustration</em></p>
<p>If you are good with people, can drive conversations in a group, and are good at motivating people, this is for you. Every tech community needs a community manager, and if you are great at communicating with people, this is definitely for you!</p>
<p>A community manager handles communication and serves as the face of the company. They act as the voice, face, and tone of the community. Also, they are responsible for the digital engagement to build the community's presence and trust online and in person. They are the liaison between the community and its users.</p>
<h3 id="heading-community-managers-are-involved-in">Community managers are involved in:</h3>
<ul>
<li><p>Communication</p>
</li>
<li><p>PR (Public Relations)</p>
</li>
<li><p>Social media management</p>
</li>
<li><p>Events</p>
</li>
<li><p>Content creation</p>
</li>
</ul>
<h3 id="heading-tools-used-in-community-management">Tools used in Community Management:</h3>
<ul>
<li><p><a target="_blank" href="https://www.notion.so/">Notion</a></p>
</li>
<li><p><a target="_blank" href="https://trello.com/en">Trello</a></p>
</li>
<li><p><a target="_blank" href="https://www.ahoyconnect.com/">AhoyConnect</a></p>
</li>
<li><p><a target="_blank" href="https://orbitapp.io/">Orbit</a></p>
</li>
</ul>
<h3 id="heading-here-are-some-resources-to-get-started-with-community-management">Here are some resources to get started with Community Management:</h3>
<ul>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=NmdKaNAX0uo&amp;list=PL0P8AylSU5frSxUCe-Pxq9Cq8awvvIqeO">Community Management Masterclass</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/a7U0YWIpHCM">Community Management course for an engaging an audience</a></p>
</li>
<li><p><a target="_blank" href="https://www.facebookblueprint.com/student/path/205897-facebook-community-manager-online-courses">Meta Community Manager Online Courses</a></p>
</li>
</ul>
<h2 id="heading-developer-relations-devrel">Developer Relations (DevRel)</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/pexels-photo-1181263.png" alt="Devrel Ilustration" width="600" height="400" loading="lazy"></p>
<p><em>Devrel Illustration</em></p>
<p>If you love marketing, DevRel is a career path for you.</p>
<p>Developer Relations has job responsibilities similar to a Community Manager, Tech Author, Developer Evangelist, Developer Advocate, and sometimes even Growth Hackers and Marketers.</p>
<p>Their prime responsibility revolves around building a positive relationship with the developers on their team. They work between product, engineering, and marketing teams.</p>
<h3 id="heading-to-work-in-the-devrel-tech-space-youll-need-to">To work in the DevRel tech space, you'll need to:</h3>
<ul>
<li><p>Be part of a community</p>
</li>
<li><p>Build a presence in the community</p>
</li>
<li><p>Learn how to interact with the community members</p>
</li>
<li><p>Create content such as blog posts, articles, or videos</p>
</li>
</ul>
<p>There are no specific tools developer advocates use because their roles are similar to other fields, so I will mention some essential tools:</p>
<ul>
<li><p><a target="_blank" href="https://www.notion.so/">Notion</a></p>
</li>
<li><p><a target="_blank" href="https://trello.com/en">Trello</a></p>
</li>
<li><p>Code editor - because they often code as well.</p>
</li>
</ul>
<h3 id="heading-here-are-some-resources-to-get-started-in-developer-relations">Here are some resources to get started in Developer Relations:</h3>
<ul>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=LKvkd7m2wBY">Intro to DevRel</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=CN4Zzdg49VI">A complete guide to DevRel</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=rO3WTfPIM5M">Prototyping your career in Developer Relations</a></p>
</li>
</ul>
<h2 id="heading-technical-writer">Technical Writer</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/5-intro.jpg" alt="Tech Writer Skills Ilustration" width="600" height="400" loading="lazy"></p>
<p><em>Tech Writer Skills Illustration</em></p>
<p>This is the best fit for you if you love writing and sharing your knowledge about various tech-related topics.</p>
<p>A technical writer generates innovative ideas for content (or works on assignments) while working as a team. They research products, services, technologies, and concepts and document/explain them clearly and concisely so anyone reading can understand how the product or tool works. A technical skill such as programming is needed to excel in this field.</p>
<h3 id="heading-job-responsibilities-of-a-technical-writer-include">Job responsibilities of a technical writer include:</h3>
<ul>
<li><p>Generating ideas for content and workflow solutions</p>
</li>
<li><p>Meeting with experts to ensure they appropriately cover and understand specialized topics</p>
</li>
<li><p>Analyzing and explaining information about products, tools, policies, form documentation, and procedures.</p>
</li>
<li><p>Also, they review and edit content developed by other team members.</p>
</li>
</ul>
<h3 id="heading-tools-used-by-technical-writers">Tools used by technical writers:</h3>
<ul>
<li><p>Markdown editors such as <a target="_blank" href="https://stackedit.io/">StackEdit</a>, <a target="_blank" href="https://typora.io/">Typora</a>, <a target="_blank" href="https://dillinger.io/">Dillinger</a>, and <a target="_blank" href="https://ia.net/writer">IA</a>.</p>
</li>
<li><p>API Documentation tools such as <a target="_blank" href="https://bump.sh/">Bump</a>, <a target="_blank" href="https://redocly.com/">Redocly</a>, <a target="_blank" href="https://www.postman.com/api-documentation-tool/">Postman</a>, and <a target="_blank" href="https://www.gitbook.com/">GitBook</a>.</p>
</li>
<li><p>Publishing Tools such as <a target="_blank" href="https://document360.com/">Document360</a> and <a target="_blank" href="https://www.adobe.com/products/robohelp.html">Adobe Robohelp</a>.</p>
</li>
<li><p>Editing tools include <a target="_blank" href="https://www.grammarly.com/">Grammarly</a>, <a target="_blank" href="https://www.copy.ai/">Copy.Ai</a>, <a target="_blank" href="https://acrobat.adobe.com/us/en/acrobat.html">Adobe Acrobat</a>, <a target="_blank" href="https://www.dropbox.com/">Dropbox</a>, <a target="_blank" href="https://docs.google.com/">Google Docs</a>, and <a target="_blank" href="https://evernote.com/">Evernote</a>.</p>
</li>
<li><p>Media management tools such as <a target="_blank" href="https://www.snipaste.com/">Snipaste</a>, <a target="_blank" href="https://www.loom.com/">Loom</a>, and <a target="_blank" href="https://www.techsmith.com/video-editor.html">Camtasia</a>.</p>
</li>
</ul>
<p>Note that different organizations use different tools, but those mentioned above are the most common tools for each category.</p>
<h3 id="heading-here-are-some-resources-to-get-started-with-technical-writing">Here are some resources to get started with Technical Writing:</h3>
<ul>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=LTDsgd0ytbE&amp;list=PL9RLbEIB-lv-bRTz14iEK4YSxRzxLQfdx">Technical Writing Course</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=pMXLm18lFks">Tech Writing Workshop</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=biocrCx5T_k&amp;list=PLoynTxuTLXaDtAmzbqdsc7JZMWcIt3nnP">A guide to Technical Writing</a></p>
</li>
<li><p><a target="_blank" href="https://www.freecodecamp.org/news/technical-writing-for-beginners/">Technical Writing for Beginners</a></p>
</li>
</ul>
<h2 id="heading-quality-assurance-testing">Quality Assurance Testing</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/quality-assurance-1.png" alt="QA Skills Ilustration" width="600" height="400" loading="lazy"></p>
<p><em>QA Skills Illustration</em></p>
<p>If you love writing and testing code, this is for you.</p>
<p>Quality Assurance (QA) testers are critical in delivering consumers high-quality, functioning software and web applications. They test and evaluate new and existing programs and help identify and remove bugs, glitches, and other user experience issues.</p>
<h3 id="heading-tools-qa-testers-use">Tools QA Testers use:</h3>
<ul>
<li><p><a target="_blank" href="https://testrigor.com/">TestRigor</a></p>
</li>
<li><p><a target="_blank" href="https://www.testim.io/">Testim</a></p>
</li>
<li><p><a target="_blank" href="https://www.kobiton.com/">Kobiton</a></p>
</li>
<li><p><a target="_blank" href="https://www.kualitee.com/">Kualitee</a></p>
</li>
</ul>
<h3 id="heading-here-are-some-resources-to-get-started-as-a-qa-tester">Here are some resources to get started as a QA Tester:</h3>
<ul>
<li><p><a target="_blank" href="https://www.freecodecamp.org/learn/quality-assurance/">Quality Assurance Certification</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/sO8eGL6SFsA">Software Testing Full Course</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=QJqNYhiHysM">QA Manual Testing Course</a></p>
</li>
</ul>
<h2 id="heading-motion-designer">Motion Designer</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/istockphoto-1190673226-612x612.jpg" alt="Motion Skills Ilustration" width="600" height="400" loading="lazy"></p>
<p><em>Motion Skills Illustration</em></p>
<p>If you love CGI, this is for you.</p>
<p>A motion designer creates artwork for the web, television, and films, which include movie clips, trailers, commercials, and so on.</p>
<p>They use special effects called visual effects, animation, and other cinematic techniques to bring life to their created works.</p>
<h3 id="heading-tools-used-in-motion-designing">Tools used in motion designing:</h3>
<ul>
<li><p><a target="_blank" href="https://www.adobe.com/africa/products/aftereffects.html">Adobe After Effects</a></p>
</li>
<li><p><a target="_blank" href="https://www.blender.org/">3D Blender</a></p>
</li>
<li><p><a target="_blank" href="https://www.maxon.net/en/cinema-4d">Cinema4D</a></p>
</li>
<li><p><a target="_blank" href="https://play.google.com/store/apps/details?id=com.paymaya&amp;hl=en&amp;gl=US">Maya</a></p>
</li>
</ul>
<h3 id="heading-here-are-some-resources-to-get-started-as-a-motion-designer">Here are some resources to get started as a Motion Designer:</h3>
<ul>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=5PNotJrwkYY&amp;list=PLWYr0cX0QTLCzRlSioyNG90GgvblR33j7">Motion Graphics Tutorial</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=ZR2n3Gd-SqU">Intro to Motion Design</a></p>
</li>
<li><p><a target="_blank" href="https://www.skillshare.com/browse/motion-design">Motion Design Courses</a></p>
</li>
</ul>
<h2 id="heading-digital-marketing">Digital Marketing</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/DIGITAL-1.jpg" alt="Digital Marketer Skills Ilustration" width="600" height="400" loading="lazy"></p>
<p><em>Digital Marketer Skills Illustration</em></p>
<p>If you love selling products online, this is for you!</p>
<p>A digital marketer helps maintain a brand by working on marketing campaigns. It is online marketing because it promotes brands and connects potential users or consumers to the product through the internet.</p>
<p>Digital marketing is another form of digital communication. This is not limited to email, social media, and web-based advertising but also includes text and multimedia messages as a marketing channel for marketing.</p>
<h3 id="heading-digital-marketers-duties-include">Digital marketers' duties include:</h3>
<ul>
<li><p>Creating content to help marketing campaigns</p>
</li>
<li><p>Doing market research</p>
</li>
<li><p>Strategizing with the marketing team</p>
</li>
</ul>
<h3 id="heading-tools-used-for-digital-marketing">Tools used for digital marketing:</h3>
<ul>
<li><p><a target="_blank" href="https://sproutsocial.com/">Sprout Social</a></p>
</li>
<li><p><a target="_blank" href="https://www.loomly.com/">Loomly</a></p>
</li>
<li><p><a target="_blank" href="https://audiense.com/">Audiense</a></p>
</li>
<li><p><a target="_blank" href="https://sendgrid.com/">SendGrid</a></p>
</li>
<li><p><a target="_blank" href="https://ahrefs.com/">Ahrefs</a></p>
</li>
</ul>
<h3 id="heading-here-are-some-resources-to-get-started-as-a-digital-marketer">Here are some resources to get started as a Digital Marketer:</h3>
<ul>
<li><p><a target="_blank" href="https://youtu.be/rchKaSMQ__8">Digital Marketing Tutorial For Beginners</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/hiEb1m7CXH4">Digital Marketing Course in 7 Hours</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=wfOp0lsCXAY&amp;list=PLifnQOsGyOSRMYndHku6pNlLYckbBuOGU">Free Digital Marketing Course</a></p>
</li>
</ul>
<h2 id="heading-mobile-app-developer">Mobile App Developer</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/software-testing.png" alt="Mobile Developer Skills Ilustration" width="600" height="400" loading="lazy"></p>
<p><em>Mobile Developer Skills Illustration</em></p>
<p>If you love creating apps, this is for you.</p>
<p>The mobile development tech space is vast, and the tools and technologies you would use would depend on what area you chose to specialize in – Andriod app development and iOS development.</p>
<p>A mobile developer converts code into user-friendly applications. They work with other developers to develop functional mobile applications in a fast-paced environment.</p>
<h3 id="heading-tools-used-for-android-development">Tools used for android development:</h3>
<ul>
<li><p><a target="_blank" href="https://developer.android.com/studio">Android Studio</a></p>
</li>
<li><p><a target="_blank" href="https://www.eclipse.org/downloads/packages/">Eclipse</a></p>
</li>
<li><p><a target="_blank" href="https://instabug.com/">Instabug</a></p>
</li>
</ul>
<h3 id="heading-tools-used-for-ios-development">Tools used for iOS development:</h3>
<ul>
<li><p><a target="_blank" href="https://developer.apple.com/xcode/">Xcode</a> or <a target="_blank" href="https://www.jetbrains.com/objc/">App code</a></p>
</li>
<li><p><a target="_blank" href="https://apps.apple.com/us/app/transporter/id1450874784?mt=12">Transporter</a></p>
</li>
<li><p><a target="_blank" href="https://cocoapods.org/pods/Fabric">Fabric</a></p>
</li>
</ul>
<h3 id="heading-some-key-responsibilities-of-app-developers">Some key responsibilities of app developers:</h3>
<ul>
<li><p>Design the application,</p>
</li>
<li><p>Test the application,</p>
</li>
<li><p>Release the application</p>
</li>
<li><p>Support the application.</p>
</li>
</ul>
<h3 id="heading-here-are-some-resources-to-get-started-as-a-mobile-developer">Here are some resources to get started as a mobile developer:</h3>
<ul>
<li><p><a target="_blank" href="https://youtu.be/fis26HvvDII">Android Development for Beginners - Full Course</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/09TeUXjzpKs">iOS Development Tutorial For Beginners</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/VPvVD8t02U8">Flutter Course for Beginners</a></p>
</li>
</ul>
<h2 id="heading-devops">DevOps</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/7602.1513404277.png" alt="DevOps Skills Ilustration" width="600" height="400" loading="lazy"></p>
<p><em>DevOps Skills Illustration</em></p>
<p>This is for you if you love working with infrastructure and cloud technologies.</p>
<p>A DevOps engineer works directly with developers and IT staff to supervise the release of code and brainstorm ideas for engineering and coding.</p>
<p>Their responsibilities include:</p>
<ul>
<li><p>Implementing automation tools and frameworks for automatic code deployment,</p>
</li>
<li><p>Quality control and management of the code base,</p>
</li>
<li><p>Designing procedures for system troubleshooting and maintenance and</p>
</li>
<li><p>Writing scripts for service quality analysis, monitoring, and operation.</p>
</li>
</ul>
<h3 id="heading-skills-you-need-as-a-devops-engineer">Skills you need as a DevOps engineer:</h3>
<ul>
<li><p><a target="_blank" href="https://www.linux.org/">Linux</a></p>
</li>
<li><p>Basic knowledge of <a target="_blank" href="https://www.python.org/">Python</a> programming language</p>
</li>
<li><p>Knowledge of cloud platforms.</p>
</li>
</ul>
<h3 id="heading-tools-used-as-a-devops-engineer">Tools used as a DevOps engineer:</h3>
<ul>
<li><p>Build tools such as <a target="_blank" href="https://gradle.org/">Gradle</a> and <a target="_blank" href="https://www.apache.org/">Apache</a>.</p>
</li>
<li><p>Package managers such as <a target="_blank" href="https://www.npmjs.com/">Npm</a> and <a target="_blank" href="https://maven.apache.org/">Mache</a></p>
</li>
<li><p>CI/CD tools such as <a target="_blank" href="https://www.jenkins.io/">Jenkins</a>.</p>
</li>
</ul>
<h3 id="heading-here-are-some-resources-to-get-started-as-a-devops-engineer">Here are some resources to get started as a DevOps engineer:</h3>
<ul>
<li><p><a target="_blank" href="https://youtu.be/hQcFE0RD0cQ">DevOps Tutorial for Beginners</a></p>
</li>
<li><p><a target="_blank" href="https://docs.microsoft.com/en-us/learn/certifications/azure-fundamentals/">Microsoft Certified: Azure Fundamentals</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/j5Zsa_eOXeY">DevOps Engineering Course for Beginners</a></p>
</li>
</ul>
<h2 id="heading-game-development">Game Development</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/07/image-blog-vcs-cross-platform-game-dev.jpg" alt="Game Design Ilustration" width="600" height="400" loading="lazy"></p>
<p><em>Game Design Illustration</em></p>
<p>If you love games, this is a tech path for you.</p>
<p>Game designers translate design ideas into a functional game code. They create web games, mobile games, and iOS games.</p>
<p>Their responsibilities include:</p>
<ul>
<li><p>Coding the base engine of the game,</p>
</li>
<li><p>Generating game scripts and storyboards,</p>
</li>
<li><p>"Polishing" the game, maintaining the code, fixing bugs, and ironing out reoccurring problems</p>
</li>
<li><p>Contributing to audio and animation design, and</p>
</li>
<li><p>Creating game specifications and designing expansion packs.</p>
</li>
</ul>
<h3 id="heading-tools-used-as-a-game-developer">Tools used as a game developer:</h3>
<ul>
<li><p><a target="_blank" href="https://blog.sagipl.com/game-development-tools/#GameFroot">GameFroot</a></p>
</li>
<li><p><a target="_blank" href="https://blog.sagipl.com/game-development-tools/#Flowlab">Flowlab</a></p>
</li>
<li><p><a target="_blank" href="https://blog.sagipl.com/game-development-tools/#Sploder">Splender</a></p>
</li>
<li><p><a target="_blank" href="https://blog.sagipl.com/game-development-tools/#Construct_2">Construct</a></p>
</li>
</ul>
<h3 id="heading-here-are-some-resources-to-get-started-in-game-development">Here are some resources to get started in game development:</h3>
<ul>
<li><p><a target="_blank" href="https://youtu.be/gB1F9G0JXOo">Learn Unity - Beginner's Game Development Tutorial</a></p>
</li>
<li><p><a target="_blank" href="https://youtu.be/G8AT01tuyrk">Basic Principles of Game Design</a></p>
</li>
<li><p><a target="_blank" href="https://www.udemy.com/course/introduction-to-game-development-with-unity/">Introduction to Game Development with Unity</a></p>
</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Now that you have different options to get started in the world of tech, I hope you become less confused.</p>
<p>Choose a path and get started – the tech space is vast, so roles are constantly opening up. Don't fret because learning can be challenging. And remember – even senior techies suffer imposter syndrome.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Design an API – Application Programming Interface Best Practices ]]>
                </title>
                <description>
                    <![CDATA[ API stands for Application Programming Interface. An API communicates with two applications using requests and responses. It is exposed to external users. How Does an API Work? How an API works Imagine you are in a store and want to buy a soda. But ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/design-an-api-application-program-interface/</link>
                <guid isPermaLink="false">66c4c63a1b22d2d8d9040ec3</guid>
                
                    <category>
                        <![CDATA[ api ]]>
                    </category>
                
                    <category>
                        <![CDATA[ best practices ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sophia Iroegbu ]]>
                </dc:creator>
                <pubDate>Wed, 29 Jun 2022 18:04:39 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/06/Tech-Blog-Cover--2-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong>API</strong> stands for Application Programming Interface. An API communicates with two applications using requests and responses. It is exposed to external users.</p>
<h2 id="heading-how-does-an-api-work">How Does an API Work?</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/06/What-are-APIs-Learn-How-API-Works.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>How an API works</em></p>
<p>Imagine you are in a store and want to buy a soda. But you can't just walk in and take one because you are an outsider – an external user – so you need a link (talking to someone and paying for your soda) to get what you want.</p>
<p>You can't link to the shelves – the database – because they can't move or talk. So this is where the seller – the API – comes in. The seller serves as an intermediary between you and the item – the data (soda) – you want.</p>
<p>Now, you have a link to communicate to the items on the shelves, so you request the soda. Then the seller searches for the soda brand and the flavor you want and gives it to you. You pay, take it, and leave.</p>
<h3 id="heading-what-just-happened">What just happened?</h3>
<p>The seller (acting as the API) queried the shelves (the database) for the requested data. </p>
<p>As you may know, data sets come in different forms. The API queried the database for a table and then searched the table for detailed data. Finally, the API sent you the data you needed.</p>
<p>Let's say you request a Fanta soda.</p>
<p><strong>Your request:</strong> </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/06/image-184.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><strong>Your Response:</strong></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/06/image-185.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>The response is always in JSON (JavaScript Object Notation) format. This is how an API works.</p>
<h2 id="heading-how-to-design-an-api">How to Design an API</h2>
<p>When designing an API, you should consider some best practices which can help you optimize your APIs and their response times.</p>
<h3 id="heading-name-the-api-properly">Name the API Properly</h3>
<p>Suppose you are creating an API that sends you the data of a particular user. It wouldn't be wise to name the API simply <strong>GetUsers</strong> because it means you want to get all users on the database, and the external user that will call this API will be expecting a response from what you want to give.</p>
<h4 id="heading-examples-of-a-good-name-for-an-api">Examples of a Good Name for an API</h4>
<ul>
<li>Use a clear, concise name:</li>
</ul>
<p>If you want to query a database of apples, it wouldn't make sense for you to name the API <strong>"api/fruits/."</strong></p>
<p>Although Apple is a fruit, it isn't what the end-user wants. The end-user wants a particular fruit, so name it <strong>"api/apples/".</strong></p>
<ul>
<li>Use words that explain the query:</li>
</ul>
<p>Use words like nouns that represent the resource's contents in the API, for example <strong>"api/stationery/pens"</strong>. This explains the API queries for all pens in the stationery database.</p>
<p>This would be instead of, for example, <strong>"api/stationery/write".</strong></p>
<ul>
<li>Avoid special characters:</li>
</ul>
<p>This may confuse the end-user if they see an API like <strong>"api/fruits%20?/apple".</strong> They will not understand what this API does or how it queries, or what information it will get. </p>
<h3 id="heading-define-parameters-when-necessary">Define Parameters When Necessary</h3>
<p>Try as much as possible to avoid using additional parameters unless you need them. Some examples of required parameters when creating a RestFul API are:</p>
<ul>
<li><strong>Request headers and cookies</strong>: This parameter uses a small piece of data that a server sends to a user's web browser.</li>
<li><strong>URL query string</strong>: These parameter elements are inserted in your URLs to help you filter and organize content or track information on your website.</li>
<li><strong>URL paths</strong>: This is a required parameter that gives the end-user or whoever calls the API a way to get the right information, such as: <strong>"/users/"</strong>, <strong>"/users//", "package/"</strong>.</li>
<li><strong>Body query string/multipart</strong>: This parameter sets the HTTP method for the question or API, such as <strong>POST</strong> – for sending data, or <strong>PUT</strong> – for updating the data in an API.</li>
</ul>
<p>So when do you need parameters? Let's say external users are making multiple queries on an API service, and the API will query other services to get users' desired data.</p>
<p>This will slow the API service, but additional parameters are helpful in this case.</p>
<h3 id="heading-define-response-objects">Define Response Objects</h3>
<p>In layperson's terms, Response Objects are properties of a response when an API is triggered or called. Some response objects are:</p>
<ul>
<li><strong>Title</strong>: This is the display title of the response, such as <strong>User</strong> if the object is returning some user information. This is a required response object.</li>
<li><strong>Subject</strong>: This is the subject of the response, such as the user and any other user-related information the API is meant to relate.</li>
<li><strong>Sender_id</strong>: This is the ID of the sender or user created. This is an option response object, meaning you can choose not to add it to the response object if it isn't needed.</li>
<li><strong>Categories</strong>: This is the category of the response object. If the API returns a user's information, the category will be <strong>Users</strong>.</li>
</ul>
<p>Many developers create a response object that contains everything from the API service – even unnecessary information – in the hope of not changing the response object when the user asks for more details (as this takes more network requirements).</p>
<p>Unfortunately, this is a terrible API design practice. When creating a response object, it is wise only to return what the external user will need because building a large microservice will affect the performance and more.</p>
<h3 id="heading-define-error-objects">Define Error Objects</h3>
<p>When you're returning an error message when an external user queries the database, the message should be clear and concise – not just a generic error message like "<strong>Error Found"</strong> or <strong>"Error occurred."</strong> </p>
<p>This should be the title of the response, and the data or subject section should explain what sort of error occurred.</p>
<p>This is my personal take when creating an API error message. Do not return an unnecessary error message. Let's say some user data has a maximum character length of 5, and an external user queries the API for user data with a character length of 8.</p>
<p>Instead of doing this:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/06/image-224.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Do this: </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/06/image-225.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>This explains what the end user did wrong and the formatting shows the end user that this error is a client error. </p>
<h3 id="heading-use-correct-https-request-methods">Use Correct HTTPS Request Methods</h3>
<p>When defining an <a target="_blank" href="https://doc.oroinc.com/api/http-methods/#:~:text=The%20primary%20or%20most%20commonly,or%20CRUD">HTTP method</a>%20operations%2C%20respectively.) for an API service, you must use the correct method to let users query the right way. Some HTTPS methods are:</p>
<ul>
<li><strong>POST</strong>: Use this method if the end-user is to send data to the API.</li>
<li><strong>GET</strong>: Use this method if the end-user is to retrieve data after the API queries the database.</li>
<li><strong>PUT</strong>: Use this method if the end-user updates existing data in the database.</li>
<li><strong>PATCH</strong>: Use this method if the end-user needs to correct or replace existing data in the database.</li>
<li><strong>DELETE</strong>: Use this method if the end-user deletes any information or data from the database.</li>
</ul>
<p>Imagine an external user wants to query the user table by sending an ID, and the API method you designed uses the <strong>POST</strong> method. This will limit the users' queries as the end-user isn't adding or creating data, and the user can not query the way they should be able to.</p>
<p>Instead, using the <strong>GET</strong> method with an ID as a parameter would be best, and it should go this way:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/06/users-path.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>This will give users the option to query using an ID and get specific data.</p>
<p>I suggest knowing all the HTTP request methods before defining a method and returning the correct ID when requested.</p>
<p>Make sure the routing is crystal clear so users can quickly call the API service I showed earlier.</p>
<h3 id="heading-dont-create-side-effects-on-the-api">Don't Create Side Effects on the API</h3>
<p>A side effect is, for example, when an external user queries an API for the user's first name but it returns the ID and full name.</p>
<p>When creating an API, try not to define everything in one function as much as possible. If the API sets many flags or does many tasks simultaneously, it should be split into multiple APIs. That's where atomicity comes to play. </p>
<p><a target="_blank" href="https://docs.oracle.com/cd/E17275_01/html/programmer_reference/transapp_atomicity.html#:~:text=Atomicity%20means%20that%20multiple%20operations,or%20none%20of%20the%20changes.">Atomicity</a> is when multiple operations are grouped into a single logical entity. Atomicity is important when creating an API. When using atomicity, poorly naming a function is just a terrible idea.</p>
<h4 id="heading-when-is-atomicity-needed">When is atomicity needed?</h4>
<p>Imagine we want a user to be created as an admin under the admins' group table. Still, we haven't yet created the admin group table, so our logic is to create a user as an admin, create the admin group table, then add the admin user to the admin group table.</p>
<p><em>But what if it fails?</em> Let's say the user isn't created as an admin, but the admin table is created or vice versa. That is where atomicity comes in play.</p>
<p>When using atomicity to call an action, try to call the right action instead of a generic action. Otherwise it makes a massive mess of the API, and there will be confusion when using the API.</p>
<h3 id="heading-implement-pagination">Implement Pagination</h3>
<p>When creating a huge microservice and the response body or object becomes too large, pagination makes it easier for the API to return a small amount of information.</p>
<p>Pagination is a method of separating digital content into different pages on a website or a response object.</p>
<p>Imagine a database with seventy users. The API calls <strong>getUsers</strong> instead of sending the response of all the users at once and making it slow.</p>
<p>You can break the response down, like return the first thirty users, the subsequent thirty users, and the following ten users. The paginated response is faster, though.</p>
<p>But this violates the property of stateless APIs, which is when an external user handles the storing of session-related information on their end.</p>
<h3 id="heading-use-fragmentationhttpswwwibmcomdocsssgu8g1410comibmddidocidsddi084htmtextfragmentation20is20a20database20serverto20some20algorithm20or20scheme20">Use <a target="_blank" href="https://www.ibm.com/docs/SSGU8G_14.1.0/com.ibm.ddi.doc/ids_ddi_084.htm#:~:text=Fragmentation%20is%20a%20database%20server,to%20some%20algorithm%20or%20scheme%20.">Fragmentation</a></h3>
<p>When an API communicates internally, the response is usually short. But when it is a large response, it is an exception, and when it is an exception, there is a problem.</p>
<p>This occurs when the response surpasses its limit ( 10kb or 15kb per response). The solution here is to break the response down and give it to another service bit by bit.</p>
<p>It is like breaking the TCP (Transmission Control Protocol) number into fragments and giving it out so the service will not be overloaded. </p>
<p>It will know that more details are yet to come, and it will also have an end packet, like a break command, that says the protocol is ending when the fragments are about to end.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Here are some major takeaways from this article:</p>
<ul>
<li>Avoid strange character and use words that represent the contents of the API response. </li>
<li>Pagination and fragmentation are essential when the response object is vast.</li>
<li>You should cache your requests if you have a lot of load on your database.</li>
<li>If you have a lot of load, reduce your response time instead of passing the full information to the user. Just pass in the essential or critical data. That is called <strong>service degradation</strong>. It involves giving the essentials and still responding without crashing the API service.</li>
<li>When designing an API and you want a perfect data consistency, cache your responses.</li>
</ul>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Horizontal vs. Vertical Scaling – How to Scale a Database ]]>
                </title>
                <description>
                    <![CDATA[ Data Scalability Data scalability refers to the ability of a database to manipulate changing demands by adding and removing data. In this way, the database grows at the same pace as the software.  Via scaling, the database can expand or contract the ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/horizontal-vs-vertical-scaling-in-database/</link>
                <guid isPermaLink="false">66c4c63e034a1005e6c59644</guid>
                
                    <category>
                        <![CDATA[ vertical ]]>
                    </category>
                
                    <category>
                        <![CDATA[ database ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Horizontal ]]>
                    </category>
                
                    <category>
                        <![CDATA[ scalability ]]>
                    </category>
                
                    <category>
                        <![CDATA[ scaling ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sophia Iroegbu ]]>
                </dc:creator>
                <pubDate>Thu, 09 Jun 2022 15:26:24 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/06/Tech-Blog-Cover.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <h2 id="heading-data-scalability">Data Scalability</h2>
<p>Data scalability refers to the ability of a database to manipulate changing demands by adding and removing data. In this way, the database grows at the same pace as the software. </p>
<p>Via scaling, the database can expand or contract the capacity of the system's resources to support the application's frequently changing usage.</p>
<p><strong>There are two ways a database can be scaled:</strong></p>
<ul>
<li>Horizontal scaling (scale-out)</li>
<li>Vertical scaling (scale-up)</li>
</ul>
<p>In this article, we'll look at both methods of scaling and discuss the advantages and disadvantages of each to help you choose.</p>
<h2 id="heading-horizontal-scaling">Horizontal Scaling</h2>
<p>This scaling approach adds more database nodes to handle the increased workload. It decreases the load on the server rather than expanding the individual servers. </p>
<p>When you need more capacity, you can add more servers to the cluster. Another name for this scaling method is <strong>Scaling out</strong>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/06/scaling-out.jpg" alt="Image" width="600" height="400" loading="lazy"></p>
<h3 id="heading-advantages-of-horizontal-scaling">Advantages of Horizontal Scaling:</h3>
<ul>
<li>It is easy to upgrade</li>
<li>It is simple to implement and costs less</li>
<li>It offers flexible, scalable tools</li>
<li>It has limitless scaling with unlimited addition of server instances</li>
<li>Upgrading a horizontally scaled database is easy – just add a node to the server</li>
</ul>
<h3 id="heading-disadvantages-of-horizontal-scaling">Disadvantages of Horizontal Scaling:</h3>
<ul>
<li>Any bugs in the code will become more complex to debug and understand</li>
<li>The licensing fee is expensive as you will have more nodes that are licensed</li>
<li>The cost of the data center will increase significantly because of the increased space, cooling, and power required</li>
</ul>
<h3 id="heading-when-to-use-horizontal-scaling">When to use horizontal scaling:</h3>
<p>If you are dealing with more than a thousand users, it is best to use this scaling system because when the servers receive multiple user requests, everything will scale well.</p>
<p>It will also not crash because there are multiple servers.</p>
<h2 id="heading-vertical-scaling">Vertical Scaling</h2>
<p>The vertical scaling approach increases the capacity of a single machine by increasing the resources in the same logical server. This involves adding resources like memory, storage, and processing power to existing software, enhancing its performance. </p>
<p>This is the traditional method of scaling a database. Another name for this approach is <strong>Scale-up</strong>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/06/02vertical-scaling-software-scalability.jpg" alt="Image" width="600" height="400" loading="lazy"></p>
<h3 id="heading-advantages-of-vertical-scaling">Advantages of Vertical Scaling:</h3>
<ul>
<li>The cost of the data center for the space, cooling, and power will be smaller</li>
<li>It is a cost-efficient software</li>
<li>It is easy to use and implement – the administrator can easily manage and maintain the software</li>
<li>The resources for this approach are flexible</li>
</ul>
<h3 id="heading-disadvantages-of-vertical-scaling">Disadvantages of Vertical Scaling:</h3>
<ul>
<li>The cost may be low, but you will need to pay for a license each time you scale up</li>
<li>The hardware costs more because of high-end servers</li>
<li>There is a limit to the amount you can upgrade</li>
<li>You are restricted to a single database vendor, and migration is challenging, or you may need to start over</li>
</ul>
<h3 id="heading-when-to-use-vertical-scaling">When to use vertical scaling:</h3>
<p>The vertical scaling approach is for you if you need a system with unique data consistency.</p>
<p>If you don't want to worry about balancing the server's workload, vertical scaling is the best option.</p>
<h2 id="heading-differences-between-vertical-and-horizontal-scaling">Differences Between Vertical and Horizontal Scaling</h2>
<table>
<thead>
<tr>
<th>Vertical</th>
<th>Horizontal</th>
</tr>
</thead>
<tbody>
<tr>
<td>The license costs less</td>
<td>The license costs more</td>
</tr>
<tr>
<td>This method increases the power of the server with additional individual servers</td>
<td>This method increases the power of the server with the existing server</td>
</tr>
<tr>
<td>This data is present on one single node, and it is scaled through a multicore</td>
<td>This is based on partitioning each node that contains a single part of data</td>
</tr>
</tbody>
</table>

<h2 id="heading-which-scaling-method-is-best-for-your-app">Which scaling method is best for your app?</h2>
<p>When choosing how to scale your database, you must consider what's at stake when you scale up and out. </p>
<p>Now we'll take a look at some factors to consider so you can choose which scaling system is best for your app:</p>
<h3 id="heading-load-balancing">Load balancing</h3>
<p>The vertical scaling system is best for balancing loads because you have a single server (vertical scaling), and there is no need to balance your load. Horizontal scaling requires you to balance the workload evenly.</p>
<h3 id="heading-point-of-failure">Point of failure</h3>
<p>The horizontal scaling system has more than one server, so when one server crashes, the next one picks up the slack. This means that there is no <em>single point of failure</em> which makes the system resilient.</p>
<p>But in the vertical scaling system, there is only one server, so once the server crashes, everything goes offline.</p>
<h3 id="heading-speed">Speed</h3>
<p>In terms of speed, the vertical scaling system is faster because, since it runs on one server, the vertical scaling system has an <em>interprocess communication</em> – that is, the server communicates within itself and it's fast. </p>
<p>The horizontal scaling system has network calls between two or more servers. This is also known as <em>Remote Procedure Calls (RPC).</em> RPCs are slow, though.</p>
<h3 id="heading-data-consistency">Data consistency</h3>
<p>When dealing with servers, you'll need to make sure that the data stored in them is consistent when end users send a request. </p>
<p>The vertical scaling system is data consistent because all information is on a single server. But the horizontal scaling system is scaled out with multiple servers, so data consistency can be a huge issue.</p>
<h3 id="heading-hardware-limitations">Hardware limitations</h3>
<p>The horizontal scaling system scales well because the number of servers you throw at a request is linear to the number of users in the database or server. The vertical scaling system, on the other hand, has a limitation because everything runs on a single server.</p>
<p>When choosing a system to scale your database, make sure to make a pros and cons list of the information in this article. It will help you decide which to use.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>A cloud computing model's scalability is the ability to quickly and instantly increase or decrease an IT capacity. Knowing how the two types of scaling work is crucial as this plays a massive role in your database or server management.</p>
<p>Quick recap...</p>
<ul>
<li>A server's role is to enhance its capacity to handle the increased workload, called <strong>Vertical scaling.</strong></li>
<li>A system's job is to add new nodes to manage the distributed workload, termed <strong>Horizontal scaling.</strong></li>
<li>The horizontal scaling system scales well as the number of users increases.</li>
<li>The vertical scaling system is faster due to its ability to inter-process communication.</li>
</ul>
<p>Thanks for reading!</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
