<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Faith Mueni Kilonzi </title>
    <description>The latest articles on DEV Community by Faith Mueni Kilonzi  (@global_codess).</description>
    <link>https://dev.to/global_codess</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F313587%2F4b649efa-2852-4e88-b3fc-767c6a5d7e19.jpg</url>
      <title>DEV Community: Faith Mueni Kilonzi </title>
      <link>https://dev.to/global_codess</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/global_codess"/>
    <language>en</language>
    <item>
      <title>Think Like a Tester: A Developer’s Ultimate Guide to Software Testing and Writing Quality Code</title>
      <dc:creator>Faith Mueni Kilonzi </dc:creator>
      <pubDate>Fri, 07 Mar 2025 07:15:41 +0000</pubDate>
      <link>https://dev.to/global_codess/why-software-testing-isnt-just-for-qas-essential-tests-every-developer-should-master-2dhf</link>
      <guid>https://dev.to/global_codess/why-software-testing-isnt-just-for-qas-essential-tests-every-developer-should-master-2dhf</guid>
      <description>&lt;p&gt;For so long, software development has been like throwing code over a wall and hoping someone catches it. The "throw it over the wall" approach with developers on one side writing code, and QA on the other testing, often led to delays and frustration as bugs were discovered late in the process, making them time-consuming and expensive to fix. A better approach is long overdue.&lt;/p&gt;

&lt;p&gt;Modern methodologies like Agile and DevOps promote collaboration. Agile methodologies like Scrum and Kanban are based on short sprints, continuous feedback, and collaboration among all stakeholders including developers and QA testers. &lt;/p&gt;

&lt;p&gt;Continuous integration, a core principle of agile methodology, means that testing is no longer an afterthought or a final hurdle - it's proactively built into your development workflow through healthy collaboration. Shift-left testing, the &lt;a href="https://saucelabs.com/resources/blog/shift-left-testing" rel="noopener noreferrer"&gt;tech buzzword&lt;/a&gt; of the day (whether you love it or hate it), encourages developers to write unit tests (tests for individual code units) and integration tests (tests for how different code modules work together) as they code. This proactive approach allows them to spot bugs early, when they're easier and cheaper to fix. A Capgemini &lt;a href="https://www.microfocus.com/en-us/marketing/world-quality-report-2023-24" rel="noopener noreferrer"&gt;study&lt;/a&gt; revealed that a staggering 70% of defects are discovered during testing, stressing the value of earlier developer involvement.&lt;/p&gt;

&lt;p&gt;[Industry experts underscore the benefits of this integrated approach. Lisa Crispin, a leading agile testing expert, &lt;a href="https://lisacrispin.com/2024/02/08/what-devops-culture-means-to-me-and-how-you-can-help-it-grow/" rel="noopener noreferrer"&gt;emphasizes&lt;/a&gt; the importance of breaking down silos between developers and testers: "In the agile world, testers and developers work together as a team with a shared goal: delivering high-quality software that meets the needs of the business." Jez Humble, co-author of the DevOps Handbook, highlights the synergy: "Developers who understand testing can write better code, and testers who understand development can write better tests."  Developers are now more often involved in testing other than unit and integration tests, such as API, security, and performance testing, which we will cover in more detail in this post.]&lt;/p&gt;

&lt;h2&gt;
  
  
  Categories of software testing 
&lt;/h2&gt;

&lt;p&gt;Developers are increasingly taking an active role in software testing, and for good reason. Early involvement in the testing process provides early bug detection, improved code quality and reliability, faster iteration and feedback loops, and more frequent releases. &lt;/p&gt;

&lt;p&gt;At a high level, you can divide software types into three main categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Tests that assess technical application quality&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Performance and usability testing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security testing &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyqgexadyxd0vpir0gemz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyqgexadyxd0vpir0gemz.png" alt="Types of Software Testing" width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Essential tests for developers to know 
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Functional testing
&lt;/h3&gt;

&lt;p&gt;Unit testing ensures your code works, but functional testing takes it a step further. It focuses on the user experience, ensuring a smooth and bug-free journey. It catches usability issues and integration problems early in the development process. For example, a user might struggle to log in due to a typo in the URL configurations connecting the front-end and back-end. This issue could be missed by unit tests but caught by comprehensive functional testing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://saucelabs.com/resources/blog/making-the-case-for-functional-testing-and-test-automation" rel="noopener noreferrer"&gt;Functional testing&lt;/a&gt; ensures that an application works as intended according to the specified user requirements. It involves testing the application with valid and invalid input to verify the expected output. &lt;/p&gt;

&lt;p&gt;Mastering functional testing empowers you as a developer to build better applications more efficiently, with a clear focus on the end user. By simulating how users interact with the code, developers can identify and fix issues early. As an agile developer, you should execute exploratory and automated functional testing on new features to catch bugs early. Tools like &lt;a href="https://saucelabs.com/resources/topic-hub/selenium" rel="noopener noreferrer"&gt;Selenium&lt;/a&gt; and &lt;a href="https://saucelabs.com/resources/topic-hub/cypress" rel="noopener noreferrer"&gt;Cypress&lt;/a&gt; enable you to write automated functional tests across browsers and devices.&lt;/p&gt;

&lt;h3&gt;
  
  
  Unit testing
&lt;/h3&gt;

&lt;p&gt;As a developer, you strive to write clean, reliable code. Unit testing is your secret weapon in this quest. It involves meticulously checking individual code blocks such as functions, modules, and classes, to ensure they function flawlessly. &lt;/p&gt;

&lt;p&gt;Why are unit tests so crucial? Well, they ensure that every line of code gets covered, leaving no stone unturned in the quest for comprehensive code coverage. Unit tests detect issues early, improve code reliability, and give developers more confidence when refactoring code. &lt;/p&gt;

&lt;p&gt;Mastering unit testing empowers you as a developer to take ownership of code quality from the start. Frameworks like &lt;a href="https://saucelabs.com/resources/blog/nunit-vs-xunit-vs-mstest-with-examples" rel="noopener noreferrer"&gt;Jest, JUnit, xUnit, MSTest, and pytest&lt;/a&gt; simplify writing unit tests. Sauce Labs &lt;a href="https://saucelabs.com/products" rel="noopener noreferrer"&gt;offers&lt;/a&gt; frameworks and utilities to simplify unit testing across languages and frameworks. &lt;/p&gt;

&lt;h3&gt;
  
  
  Integration testing
&lt;/h3&gt;

&lt;p&gt;Integration testing is the assessment of how multiple units or modules of code function as a group. The primary purpose of unit testing is to ensure that newly developed code units can integrate effectively into an existing codebase without introducing compatibility or dependency issues.&lt;/p&gt;

&lt;p&gt;As such, integration testing is another type of test that usually happens quite early in the software development life cycle – usually right after unit testing is complete. Integration tests can also be automated in most cases. Some &lt;a href="https://saucelabs.com/resources/blog/top-test-automation-frameworks-in-2023" rel="noopener noreferrer"&gt;test automation frameworks&lt;/a&gt; that support unit testing, such as Jest, also enable integration tests. In addition, so-called end-to-end testing frameworks, which are designed to support a broad set of testing types, also usually facilitate integration tests. &lt;a href="https://saucelabs.com/resources/blog/getting-started-with-selenium" rel="noopener noreferrer"&gt;Selenium&lt;/a&gt; is an example of this type of framework.&lt;/p&gt;

&lt;p&gt;Performance testing  &lt;/p&gt;

&lt;p&gt;As a developer, it is not enough to code and release software products, you have to care about their stability. At any point in the SDLC, you need to ask yourself a couple of questions: Does your app render quickly and flawlessly every time on every device and operating system? Are your page transitions fast and smooth? Are your users satisfied with the pace of their transactions on your site? Can it handle an increase in user traffic? That is the essence of &lt;a href="https://saucelabs.com/products/api-testing/load-testing-monitoring" rel="noopener noreferrer"&gt;performance testing&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Performance testing measures how an application handles load, stress, and volume. It evaluates an application’s responsiveness, speed, and stability under various conditions.  As a developer, you need to master how to implement performance tests to identify bottlenecks and ensure optimal performance under peak loads. Services like Sauce Labs allow you to execute automated &lt;a href="https://docs.saucelabs.com/performance/" rel="noopener noreferrer"&gt;performance tests&lt;/a&gt; at scale across geographic locations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accessibility testing
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://saucelabs.com/resources/blog/an-introduction-to-accessibility-testing" rel="noopener noreferrer"&gt;Accessibility testing&lt;/a&gt; is a type of testing that ensures that an application works well for different types of users, including those who face challenges that don't apply to a majority of users. For example, accessibility tests can validate whether an application performs well for users with hearing or visual impairments.&lt;/p&gt;

&lt;p&gt;Accessibility tests can be performed using a combination of automated and manual testing techniques. Some accessibility features, such as tools within an app that allow users to increase the size of fonts, can be assessed automatically, but collecting manual feedback from users with particular accessibility needs helps provide additional context and detect accessibility issues that automated tests may overlook. &lt;/p&gt;

&lt;p&gt;Visual/UI testing&lt;/p&gt;

&lt;p&gt;Visual/UI testing is a testing method designed to detect issues related to the appearance and layout of an application. For example, if an image inside a Web application appears in a distorted fashion on devices with small screens, visual/UI tests should surface the issue.&lt;/p&gt;

&lt;p&gt;Thus, it's important to understand that visual/UI tests don't typically collect feedback from actual users on whether they like an application's visual interface. This is instead a type of automated test that validates whether the application UI renders in the way developers intended. Determining whether users actually like the UI or not is a separate issue (which brings us to usability testing, discussed below).&lt;/p&gt;

&lt;h3&gt;
  
  
  Visual regression testing
&lt;/h3&gt;

&lt;p&gt;As a developer, you are constantly making code updates that may affect the user interface (UI) of the software you are building. Code updates may bring about UI and visual bugs in the software that end up affecting the usability of applications and websites. This is why &lt;a href="https://saucelabs.com/resources/blog/visual-regression-testing-basics" rel="noopener noreferrer"&gt;visual regression testing&lt;/a&gt;, part of visual testing, is crucial for developers to master. It ensures that any updates to the system, software, or code do not impact the product's user interface or usability.&lt;/p&gt;

&lt;p&gt;User interface (UI) and visual bugs in software products are often disregarded due to the focus on functional testing. Visual regression testing works in such a way that every time a code change occurs, it looks for any unexpected visual changes or visual “regression” defects by taking snapshots of the user interface and comparing them from one commit instance to another. For example, &lt;a href="https://saucelabs.com/products/visual-testing" rel="noopener noreferrer"&gt;Sauce Labs Visual Testing&lt;/a&gt; (formerly Screener.io) can be integrated into your pipeline for continuous integration to automate visual testing by continuously recording and running tests in the cloud. Sauce Labs Visual employs screenshots and DOM snapshots to detect visual bugs on app pages and ensure a platform-independent UI. Read on and &lt;a href="https://saucelabs.com/resources/blog/visual-regression-testing-basics" rel="noopener noreferrer"&gt;learn&lt;/a&gt; how to implement visual testing using Sauce Labs. &lt;/p&gt;

&lt;h3&gt;
  
  
  End-to-end testing
&lt;/h3&gt;

&lt;p&gt;End-to-end testing is a term that refers to all of the types of software tests that teams would normally perform during the software development life cycle. It's not a specific type of test as much as it's a catch-all phrase that encompasses all of the testing requirements of modern applications.&lt;br&gt;
The goal of end-to-end testing is to ensure that all aspects of an application meet all requirements to which they are subject. If you perform each type of software test described above, you're performing end-to-end testing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security Testing
&lt;/h3&gt;

&lt;p&gt;We are already experiencing too many cybersecurity software breaches in various sectors for developers not to care about security testing. It is your responsibility as a developer to ensure that your software solution addresses known security vulnerabilities because, after all, your &lt;a href="https://saucelabs.com/resources/blog/software-security-test-automation" rel="noopener noreferrer"&gt;software’s security is only as good as your last test&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Security testing detects vulnerabilities that could compromise an application. Security testing methods such as penetration testing, vulnerability scanning, and fuzzing help detect weaknesses in applications that could be exploited. Developers should conduct regular security testing, especially for applications handling sensitive data. Open-source tools like OWASP ZAP and commercial services offer support for automated security testing. Additionally, Sauce Labs integrates with leading &lt;a href="https://saucelabs.com/resources/blog/software-security-test-automation/" rel="noopener noreferrer"&gt;security testing tools&lt;/a&gt; to help developers remediate issues and build more robust software.&lt;/p&gt;

&lt;p&gt;There are other multiple types of security tests, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Software Composition Analysis (SCA), which assesses applications for insecure dependencies or components.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Static Application Security Testing (SAST), which scans source code for problems like injection vulnerabilities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dynamic Application Security Testing (DAST), which simulates malicious interactions with running applications to detect potential vulnerabilities.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because each type of security test reveals different types of risks, teams typically perform multiple types of security testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Additional testing practices for developers
&lt;/h2&gt;

&lt;p&gt;As developers take a more active role in testing, several additional best practices such as code reviews, static code analysis, and automated testing should be incorporated into the development workflow. These practices complement the essential tests discussed previously and further help to catch issues early, improve code quality, and streamline the development process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code Reviews
&lt;/h3&gt;

&lt;p&gt;Code reviews are a collaborative process where developers examine each other’s code to identify potential bugs, performance issues, adherence to best practices, security vulnerabilities, and opportunities for improvement before the code is merged into the main branch. It's important for developers to regularly review each other's code and give constructive feedback. This helps in creating high-quality software that's easy to maintain and also helps in sharing knowledge among team members. Code reviews play a crucial role in the software development process, making sure that developers work together and maintain the integrity of the code. This results in robust, reliable, and efficient software being released.&lt;/p&gt;

&lt;p&gt;Static Code Analysis&lt;/p&gt;

&lt;p&gt;SonarQube, PMD, and Bandit are static code analysis tools that help developers spot errors in their source code without running it. These tools identify style violations, performance errors, or vulnerabilities, assisting developers in dealing with such issues at the early stages of development. Static code analysis improves and secures developers' code while facilitating development, making applications or software more reliable and maintainable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Automated Testing: Continuous Integration Continuous Deployment(CD/CD)
&lt;/h3&gt;

&lt;p&gt;Manual testing is tiresome. As a developer, speed is your superpower, and test automation is critical. This is why CI/CD should be your greatest friend, as it automates testing processes and ensures thorough testing for each code update. Leveraging CI/CD tools such as Jenkins, Travis CI, and GitLab CI helps to speed the process, whereas Sauce Labs supports comprehensive testing across several environments and browsers. This test automation detects errors earlier, speeds product releases, and reduces regression risks. Embracing CI/CD and employing these test automation tools allows developers to streamline workflows, focus on high-quality code, and deliver software rapidly and consistently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing in the Software Development Life Cycle (SDLC)
&lt;/h2&gt;

&lt;p&gt;You can perform most types of software tests on an ad hoc basis, or via processes that are not linked to other aspects of software development. But in most cases, software testing is faster and more efficient when it is integrated into the software development life cycle (SDLC) such that tests happen routinely and (to the extent possible) automatically.&lt;/p&gt;

&lt;p&gt;For example, running unit tests as part of the SDLC means that whenever developers write a new unit of code, a unit testing routine automatically begins. Likewise, performance testing as part of the SDLC would mean that as soon as a new application release candidate is compiled and deployed into a testing environment, automated performance tests occur.&lt;/p&gt;

&lt;h3&gt;
  
  
  Manual vs. Automated Testing
&lt;/h3&gt;

&lt;p&gt;As noted above, most types of software tests can be performed automatically using frameworks that let engineers define what they want to test using code, then execute tests automatically.&lt;/p&gt;

&lt;p&gt;In most cases, automated testing saves substantial amounts of time. It also keeps tests more consistent because tests that are based on the same code will be identical.&lt;/p&gt;

&lt;p&gt;However, as we saw above, certain types of tests, such as usability tests, are difficult to perform automatically. And even when you can automate tests, you may not have the development resources available to write testing code for every single test that you want to run. For these reasons, even highly efficient teams should expect to perform a certain amount of tests manually.&lt;/p&gt;

&lt;h3&gt;
  
  
  Automated vs. Comprehensive Testing
&lt;/h3&gt;

&lt;p&gt;Automated testing is also sometimes compared to comprehensive testing, but this comparison can be a bit misleading. Comprehensive testing refers to all types of tests that must take place to ensure an application works as required for all users – and also that it's secure.&lt;br&gt;
Thus, comprehensive testing is not the opposite of automated testing. On the contrary, automated tests are usually an important component of comprehensive testing, since running every type of test is easier when you automate them. That said, just because you automate some or most tests doesn't mean you're performing comprehensive testing. You need to be covering every key type of test for your testing routine to be comprehensive.&lt;/p&gt;

&lt;p&gt;Continuous Testing&lt;br&gt;
Continuous testing is another buzzword you may encounter in discussions about types of software tests. Continuous testing means running tests routinely and automatically as part of the software development process. It implies that tests are well integrated into the SDLC – often with the help of cloud-based test infrastructure that makes it possible to run a wide variety of tests on demand – and its goal is to ensure that tests are as efficient and comprehensive as possible.&lt;br&gt;
That said, continuous testing doesn't mean that testing happens on a literally continuous basis. There may be moments when no testing is taking place if you're waiting for new code to test. But as long as you test regularly, and provided that each step in the SDLC triggers relevant types of tests, you can say you're performing continuous testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quality software is thoroughly vetted software
&lt;/h2&gt;

&lt;p&gt;The world of software development is all about teamwork these days, and that includes testing too! &lt;/p&gt;

&lt;p&gt;Testing doesn’t have to be overwhelming, boring, or entirely manual. When you embrace testing as a shared responsibility between QA, software developer engineers in test (SDETs), and developers it helps empower all parties involved to quickly deliver high-quality and reliable software. Getting familiar with comprehensive automation tools like Sauce Labs, and becoming comfortable with all the right essential tests – including unit integration, functional, performance, and security testing – is critical to achieving continuous integration.&lt;/p&gt;

</description>
      <category>qualityassurance</category>
      <category>softwaredevelopment</category>
      <category>qualitycode</category>
      <category>whatissoftwaretesting</category>
    </item>
    <item>
      <title>Desperation in Interviews Will Never Land You a Job!</title>
      <dc:creator>Faith Mueni Kilonzi </dc:creator>
      <pubDate>Thu, 07 Sep 2023 06:14:25 +0000</pubDate>
      <link>https://dev.to/global_codess/desperation-in-interviews-will-never-land-you-a-job-5bhh</link>
      <guid>https://dev.to/global_codess/desperation-in-interviews-will-never-land-you-a-job-5bhh</guid>
      <description>&lt;p&gt;Hey there, job seekers! We get it—interviews can be super nerve-wracking. But here’s the deal: desperation during an interview is a big no-no. Trust me; I’ve been on both sides of the table, and I’ve learned that recruiters and HR managers can spot desperation from a mile away. And guess what? They might use it against you during salary negotiations.&lt;/p&gt;

&lt;p&gt;Read more &lt;a href="https://faithkilonzi.com/desperation-in-interviews-will-never-land-you-a-job/"&gt;here - ww.FaithKilonzi.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>interviewskills</category>
      <category>interviewtips</category>
      <category>jobsearchtips</category>
    </item>
    <item>
      <title>REASONS TO LEARN PYTHON WITH DJANGO IN 2022</title>
      <dc:creator>Faith Mueni Kilonzi </dc:creator>
      <pubDate>Fri, 14 Jan 2022 09:31:39 +0000</pubDate>
      <link>https://dev.to/global_codess/reasons-to-learn-python-with-django-in-2022-248m</link>
      <guid>https://dev.to/global_codess/reasons-to-learn-python-with-django-in-2022-248m</guid>
      <description>&lt;p&gt;It is that time of the year – the beginning- where everyone is giving their opinion on the booming tech stack. This year, I have resolved to focus on Python as my core language and sticking with that. When it comes to Python for web development, Django and Flask are the two go-to web frameworks. While Flask is an equally good framework, I am going with Django. I will be sharing my journey and the insights gotten thereof. &lt;br&gt;
This piece will discuss some of the golden reasons why you should start learning Django in 2022.&lt;/p&gt;

&lt;p&gt;The video version of this tutorial is available on &lt;a href="https://www.youtube.com/watch?v=Rv2S_nej2oc"&gt;Youtube&lt;/a&gt;&lt;/p&gt;

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

&lt;h1&gt;
  
  
  1 Open-Source Python Web Framework
&lt;/h1&gt;

&lt;p&gt;Django is a high-level open-source python framework that has neem escalating demands in the market ever since with assured growth.&lt;/p&gt;

&lt;h1&gt;
  
  
  2 Increasing Demand
&lt;/h1&gt;

&lt;p&gt;The demand for Django professional is increasing every single day with high demanding salary and career launches. &lt;br&gt;
The average salary of a Django developer is $120,000 per year. &lt;/p&gt;
&lt;h1&gt;
  
  
  3 New Interview Opportunities
&lt;/h1&gt;

&lt;p&gt;Getting a job is nice but getting an interview might change your life. This is because an interview offers you the opportunity to promote yourself and negotiate. Django Framework is used by most big tech companies, including Instagram, National Geographic, Mozilla, Spotify, Pinterest, Disqus, Bitbucket, Eventbrite, and Prezi.&lt;/p&gt;
&lt;h1&gt;
  
  
  4 High Job Market Share
&lt;/h1&gt;

&lt;p&gt;The market share and demand for Django developers is high, with over 70,000 vacancies and a market share of over 28% since 2021.&lt;/p&gt;
&lt;h1&gt;
  
  
  5 Industry Opportunities
&lt;/h1&gt;

&lt;p&gt;Learning Django will provide you a huge advantage in the industry, opening you new doors and allowing you to develop a variety of skills. This ensures that Django professionals will have plenty of career opportunities.&lt;/p&gt;

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

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

&lt;p&gt;With so many new languages, frameworks, and technologies being released on a regular basis, deciding which stack to use is a personal choice. The above discussion, on the other hand, is a guidance for individuals who are unsure about their path in Python, Django, and even Flask.&lt;/p&gt;

</description>
      <category>python</category>
      <category>django</category>
      <category>technologies</category>
      <category>2022</category>
    </item>
    <item>
      <title>API Performance Monitoring for product managers</title>
      <dc:creator>Faith Mueni Kilonzi </dc:creator>
      <pubDate>Sun, 28 Mar 2021 09:47:36 +0000</pubDate>
      <link>https://dev.to/global_codess/api-performance-monitoring-for-product-managers-3oj2</link>
      <guid>https://dev.to/global_codess/api-performance-monitoring-for-product-managers-3oj2</guid>
      <description>&lt;p&gt;APIs have become very useful in most SaaS products. There is still a gap, however, when it comes to understanding how they work; particularly for the purpose of monitoring them. Some developers do not realize that APIs fail. And when they fail, users usually blame the application’s poor performance on the product owners rather than the third-party APIs used in the app. The developers also waste a lot of time debugging their app trying to “solve” what was just but a network issue. &lt;/p&gt;

&lt;p&gt;This post was first published here: &lt;a href="https://sweetcode.io/api-performance-monitoring-an-introduction/"&gt;https://sweetcode.io/api-performance-monitoring-an-introduction/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>apimonitoring</category>
      <category>apidevelopment</category>
      <category>softwaredevelopment</category>
      <category>productmanagers</category>
    </item>
    <item>
      <title>The reverse of a number using python</title>
      <dc:creator>Faith Mueni Kilonzi </dc:creator>
      <pubDate>Thu, 15 Oct 2020 07:51:18 +0000</pubDate>
      <link>https://dev.to/global_codess/the-reverse-of-a-number-using-python-4kca</link>
      <guid>https://dev.to/global_codess/the-reverse-of-a-number-using-python-4kca</guid>
      <description>&lt;p&gt;Given a number, reverse its digits and print the new number. &lt;br&gt;
     For example:&lt;br&gt;
           Input : num = 8972&lt;br&gt;
           Output: 2798&lt;/p&gt;

&lt;p&gt;There are a couple of ways to solve this: &lt;/p&gt;

&lt;h1&gt;1. Reverse Number using String slicing&lt;/h1&gt;

&lt;p&gt;We convert the given number to string using str() &lt;br&gt;
Reverse it using string slicing&lt;br&gt;
Convert the reversed string to int and return the int.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;reverseNumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;reversed_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)[::&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;reversed_number&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;h1&gt; 2. Reverse Number using While Loop 

&lt;/h1&gt;
&lt;p&gt;Using a while loop, iterate through the list of the digits from the last one and append the digits into a new number.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;reverseNumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;reversed_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;reversed_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;reversed_number&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;
        &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                    
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;reversed_number&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>python</category>
      <category>softwareengineering</category>
      <category>scripting</category>
      <category>computerscience</category>
    </item>
    <item>
      <title>Sorting Algorithms in Python</title>
      <dc:creator>Faith Mueni Kilonzi </dc:creator>
      <pubDate>Sun, 15 Mar 2020 17:31:00 +0000</pubDate>
      <link>https://dev.to/global_codess/sorting-algorithms-in-python-1n98</link>
      <guid>https://dev.to/global_codess/sorting-algorithms-in-python-1n98</guid>
      <description>&lt;h2&gt;What is Sorting &lt;/h2&gt;

&lt;p&gt;Sorting - ordering a list of data items in a pre-defined sequence&lt;br&gt;
Sorting algorithms are a set of instructions that take an array or list as an input and arrange the items into a particular order.&lt;br&gt;
Sorts are most commonly in numerical or a form of alphabetical (called lexicographical) order, and can be in ascending (A-Z, 0-9) or descending (Z-A, 9-0) order.&lt;br&gt;
There are many types of sorting algorithms: quick sort, bubble sort, balloon sort, radix sort, merge&lt;br&gt;
sort, quick sort, insertion sort, selection sort, etc. Not one can be considered the fastest because each algorithm is designed for a particular data structure and data set. It would depend on the data set that you would want to sort.&lt;br&gt;
In this post, I will focus on the 5 most commonly used sorting algorithms in Python. &lt;/p&gt;

&lt;h3&gt;1. Insertion Sort &lt;/h3&gt;

&lt;p&gt;In Insertion sort, you compare the  key  element with the previous elements. If the previous elements are greater than the  key  element, then you move the previous element to the next position.&lt;br&gt;
Usually, start from index 1 of the input array.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def insertion_sort(arr):
    '''
    insertion sort function that takes an array to be sorted as an input.
    With your key element at the index 1 of the input array,
    traverse the array comparing the key element with the previous elements.
    If the previous element is greater than the key element,
    then move the previous element to the next position
    '''
    l = len(arr)
    i=1 #key element index
    while i&amp;lt;l:
        key_element=arr[i] 
        j=i-1 #previous element index
        while j&amp;gt;=0 and arr[j]&amp;gt;key_element:
             # Move elements of arr[0..i-1], that are 
        # greater than key, to one position ahead 
        # of their current position 
            arr[j+1] = arr[j]
            j=j-1  

        arr[j+1]=key_element 
        i=i+1

    return arr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;h4&gt;Properties of Insertion Sort &lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Space Complexity: O(1)&lt;/li&gt;
&lt;li&gt;Time Complexity: O(n), O(n* n), O(n* n) for Best, Average, Worst cases respectively.&lt;/li&gt;
&lt;li&gt;Sorting In Place: Yes&lt;/li&gt;
&lt;li&gt;Stable: Yes
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sDBk3vvq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.w3resource.com/w3r_images/insertion-sort.png" alt="insertion sort"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h3&gt;2. Selection Sort &lt;/h3&gt;

&lt;p&gt;Selection Sort selects the current smallest element and swaps it into place.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Here's how it works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Find the smallest element in the array and swap it with the first element. &amp;gt;2. Find the second smallest element and swap with the second element in the array. &lt;/li&gt;
&lt;li&gt;Find the third smallest element and swap wit with the third element in the array.&lt;/li&gt;
&lt;li&gt;Repeat the process of finding the next smallest element and swapping it into the correct position until the entire array is sorted.
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def selection_sort(alist):
    for i in range(0, len(alist) - 1):
        smallest = i
        for j in range(i + 1, len(alist)):
            if alist[j] &amp;lt; alist[smallest]:
                smallest = j
        alist[i], alist[smallest] = alist[smallest], alist[i]

    return alist
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;h4&gt;Selection sort Properties &lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Space Complexity:  O(n)&lt;/li&gt;
&lt;li&gt;Time Complexity:  O(n2)&lt;/li&gt;
&lt;li&gt;Sorting in Place:  Yes&lt;/li&gt;
&lt;li&gt;Stable:  No
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HMFtIGpt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.w3resource.com/w3r_images/selection-short.png" alt="selection sort"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h3&gt;3. Bubble Sort &lt;/h3&gt;

&lt;p&gt;The algorithm traverses a list and compares adjacent values, swapping them if they are not in the correct order.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def bubble_sort(alist):
    n=len(alist)
    for i in range(n):
        for j in range(i):
            if alist[j]&amp;gt;alist[j+1]:
                temp = alist[j]
                alist[j] = alist[j+1]
                alist[j+1] = temp

    return alist 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;It is one of the easiest sorting algorithms to understand and code from scratch.&lt;/li&gt;
&lt;li&gt;From technical perspective, bubble sort is reasonable for sorting small-sized arrays or specially when executing sort algorithms on computers with remarkably limited memory resources.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Because the time complexity is Ο(n2), it is not suitable for large set of data.&lt;/li&gt;
&lt;li&gt;bubble sort is very slow compared to other sorting algorithms like quicksort. &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;h4&gt;Selection sort Properties &lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Space complexity: O(1)&lt;/li&gt;
&lt;li&gt;Best case performance: O(n)&lt;/li&gt;
&lt;li&gt;Average case performance: O(n*n)&lt;/li&gt;
&lt;li&gt;Worst case performance: O(n*n)&lt;/li&gt;
&lt;li&gt;Stable: Yes&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GVZ2u1Ni--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.w3resource.com/w3r_images/bubble-short.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GVZ2u1Ni--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.w3resource.com/w3r_images/bubble-short.png" alt="Bubble sort"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;4. Quick Sort &lt;/h3&gt;

&lt;p&gt;Quick sort uses divide and conquer approach. It divides the list in smaller 'partitions' using 'pivot'. The values which are smaller than the pivot are arranged in the left partition and greater values are arranged in the right partition. Each partition is recursively sorted using quick sort.&lt;br&gt;
The pivot can be the first, the last, the medium or any random element on the array.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The steps involved in Quick Sort are:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Choose an element to serve as a pivot.&lt;/li&gt;
&lt;li&gt;Partitioning: Sort the array in such a manner that all elements less than the pivot are to the left, and all elements greater than the pivot are to the right.&lt;/li&gt;
&lt;li&gt;Call Quicksort recursively, taking into account the previous pivot to properly subdivide the left and right arrays.
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def quicksort(z):
    if(len(z)&amp;gt;1):        
        piv=int(len(z)/2)
        val=z[piv] 
        lft=[i for i in z if i&amp;lt;val]
        mid=[i for i in z if i==val]
        rgt=[i for i in z if i&amp;gt;val]

        res=quicksort(lft)+mid+quicksort(rgt)
        return res
    else:
        return z
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;h4&gt;Quick sort Properties &lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Space complexity: O(n)&lt;/li&gt;
&lt;li&gt;Not stable&lt;/li&gt;
&lt;li&gt;Time Complexity: Best case – nlog(n)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;part 1&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hQaC4IN---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.w3resource.com/w3r_images/quick-sort-part-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hQaC4IN---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.w3resource.com/w3r_images/quick-sort-part-1.png" alt="Quick sort"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;part 2&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LiJzVcDV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.w3resource.com/w3r_images/quick-sort-part-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LiJzVcDV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.w3resource.com/w3r_images/quick-sort-part-2.png" alt="Quick sort"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;5. Merge Sort &lt;/h3&gt;

&lt;p&gt;Merge sort is a sorting algorithm based on divide and conquer programming approach. It keeps on dividing the list into smaller sub-list until all sub-list has only 1 element. And then it merges them in a sorted way until all sub-lists are consumed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def merge(left,right,compare):
    result = [] 
    i,j = 0,0
    while (i &amp;lt; len(left) and j &amp;lt; len(right)):
        if compare(left[i],right[j]):
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
    while (i &amp;lt; len(left)):
        result.append(left[i])
        i += 1
    while (j &amp;lt; len(right)):
        result.append(right[j])
        j += 1
    return result



def merge_sort(arr, compare = lambda x, y: x &amp;lt; y):
     #Used lambda function to sort array in both(increasing and decresing) order.
     #By default it sorts array in increasing order
    if len(arr) &amp;lt; 2:
        return arr[:]
    else:
        middle = len(arr) // 2
        left = merge_sort(arr[:middle], compare)
        right = merge_sort(arr[middle:], compare)
        return merge(left, right, compare)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;h4&gt;Merge sort Properties &lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Space Complexity: O(n) &lt;/li&gt;
&lt;li&gt;Time Complexity: O(nlog(n)). &lt;/li&gt;
&lt;li&gt;Stable: Yes&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fPQrG0ib--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.w3resource.com/w3r_images/merge_sort.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fPQrG0ib--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.w3resource.com/w3r_images/merge_sort.png" alt="Merge sort"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt; Complexities Summary of Sorting Algorithms &lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5E3zGZnu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://he-s3.s3.amazonaws.com/media/uploads/c950295.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5E3zGZnu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://he-s3.s3.amazonaws.com/media/uploads/c950295.png" alt="Merge sort"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br&gt;
Image illustrations adapted from:&lt;br&gt;
&lt;a href="https://www.w3resource.com/"&gt;https://www.w3resource.com/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.freecodecamp.org/"&gt;https://www.freecodecamp.org/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.geeksforgeeks.org/"&gt;https://www.geeksforgeeks.org/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sorting</category>
      <category>python</category>
      <category>algorithms</category>
      <category>datastructures</category>
    </item>
    <item>
      <title>Nevertheless, Faith Kilonzi Coded</title>
      <dc:creator>Faith Mueni Kilonzi </dc:creator>
      <pubDate>Sat, 07 Mar 2020 16:55:41 +0000</pubDate>
      <link>https://dev.to/global_codess/nevertheless-faith-kilonzi-coded-k2p</link>
      <guid>https://dev.to/global_codess/nevertheless-faith-kilonzi-coded-k2p</guid>
      <description>&lt;p&gt;✨✨&lt;/p&gt;

&lt;h1&gt;Equality in Tech &lt;/h1&gt;

&lt;p&gt;I envision a tech industry where everybody is treated equally regardless of their gender. I would like to see everyone being given equal chances and paid what they are worth.&lt;br&gt;
More specifically, I would like to see ZERO gender discrimination which usually comes off as: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Negative or sexist jokes being passed in the workplace&lt;/li&gt;
&lt;li&gt;Less support for women from their senior leaders than a man who was doing the same job&lt;/li&gt;
&lt;li&gt;Women in tech jobs are being paid less than a man doing the same job&lt;/li&gt;
&lt;li&gt;Someone treating a women in tech as if they are not competent because of their gender&lt;/li&gt;
&lt;li&gt;The gender biases in recruitment processes and the assumption that women are not technical enough&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;My expertise&lt;/h1&gt;

&lt;p&gt;I am passionate about problem-solving through implementation of high-quality software products especially back-end and web-applications using a variety of programming languages and technologies.I hold a bachelor’s degree in computer science from Ashesi University. I have experience working in academia, fin-tech, healthcare, research, technology and consultancy industries both in Kenya and Ghana. &lt;br&gt;
Driven by intellectual curiosity, I combine my passion for tutoring,software development, data science and technical writing to create digital content through my online blog. I am also fascinated by community development through problem-solving to make the world a better place.&lt;/p&gt;

&lt;h1&gt;My advice&lt;/h1&gt; 

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flyrc95235hiwtf36tiay.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flyrc95235hiwtf36tiay.jpg" alt="Alt Text" width="227" height="222"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"There is a danger in letting people misname you; if you are a fire, do not answer when they call you a spark"&lt;br&gt;
                 -Upile Chisala&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Dear codess, give up the self-doubt, show up and do what you do best. It is time! Happy international Women's Day!  &lt;/p&gt;

</description>
      <category>wecoded</category>
      <category>globalcodess</category>
      <category>equality</category>
      <category>womeninetech</category>
    </item>
    <item>
      <title>Time Complexities Of Python Data Structures</title>
      <dc:creator>Faith Mueni Kilonzi </dc:creator>
      <pubDate>Wed, 19 Feb 2020 08:27:12 +0000</pubDate>
      <link>https://dev.to/global_codess/time-complexities-of-python-data-structures-3bja</link>
      <guid>https://dev.to/global_codess/time-complexities-of-python-data-structures-3bja</guid>
      <description>&lt;p&gt;Every data structure performs various operations when implementing an algorithm. Some of the key and general operations include iterating over a collection, inserting an item at a point in the collection, deleting, updating or creating a copy of an item or the entire collection. In programming, the choice of the data structure is very important as it affects the performance of the application. This is because the operations of the data structures have different time and space complexities. &lt;/p&gt;

&lt;h4&gt;Space Complexity &lt;/h4&gt;

&lt;p&gt;Space Complexity is generally used to refer to the measure of how much space an algorithm takes. It includes both auxiliary space and space used by input.&lt;br&gt;
Auxiliary Space is the extra space or temporary space used by an algorithm.&lt;br&gt;
Space Complexity of an algorithm is total space taken by the algorithm with respect to the input size. &lt;/p&gt;

&lt;h4&gt;Time Complexity &lt;/h4&gt;

&lt;p&gt;Time Complexity is the the measure of how long it takes for the algorithm to compute the required operation. Time complexity is measured using the Big-O notation. &lt;br&gt;
Big-O notation is a way to measure performance of an operation based on the input size,n.&lt;/p&gt;

&lt;h5&gt;Run-time Complexity Types (BIG-O Notation Types)&lt;/h5&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Constant time O(1)&lt;br&gt;
An algorithm is said to have a constant time when it’s run-time not dependent on the input data(n). No matter how big your collection is, the time it takes to perform an operation is constant.  This means that the algorithm/operation will always take the same amount of time regardless of the number of elements we’re working with. For example, accessing the first element of a list is always O(1) regardless of how big the list is. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Logarithmic time O(log n)&lt;br&gt;
Algorithms with logarithmic time complexity reduce the input data size in each step of the operation. Usually, Binary trees and Binary search operations  have O(log n ) as their time complexity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Linear time O(n)&lt;br&gt;
An algorithm is said to have a linear time complexity when the run-time is directly and linearly proportional to the size of the input data. This is the best possible time complexity when the algorithm has to examine all the items in the input data. For example:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;for value in data:&lt;br&gt;
    print(value)&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example of such operations would be linear search hence the iteration over the list is O(n).

4. Quasilinear time(n log n)
Where each operation in the input data have a logarithm time complexity. Commonly seen in optimized sorting algorithms such as mergesort, timsort, heapsort. 
In mergesort, the input data is broken down into several sub-lists until each sublist consitsts of a single element and then the sublists are  merged into a sorted list. This gives us a time complexity of O(nlogn)

5. Quadratic time  O(n^2): 
An algorithm is said to have a quadratic time complexity when the time it takes to perform an operation is proportional to the square of the items in the collection. This occurs when the algorithm needs to perform a linear time operation for each item in the input data. Bubble sort has O(n^2) .For example, a loop within a loop:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for x in data:&lt;br&gt;
     for y in data:&lt;br&gt;
          print(x, y)&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
6. Exponential time O(2^n) 
An algorithm is said to have an exponential time complexity when the growth doubles with each addition to the input data set. This kind of time complexity is usually seen in brute-force algorithms. For example, the recursive Fibonacci algorithm has O(2^n) time complexity. 

7. Factorial time (n!)
An algorithm is said to have a factorial time complexity when every single permutation of a collection is computed in an operation and hence the time it takes to perform an operation is factorial of the size of the items in the collection. The Travelling Salesman Problem and the Heap’s algorithm(generating all possible permutations of n objects) have O(n!) time complexity.
Disadvantage:It is very slow.

&amp;lt;h5&amp;gt;Big-O notation Summary Graph&amp;lt;/h5&amp;gt;

![Image alt text](https://www.geeksforgeeks.org/wp-content/uploads/mypic.png)


&amp;lt;h5&amp;gt;Best, Average and Worst Cases&amp;lt;/h5&amp;gt;

1. Best case scenario
In the best-case analysis, we calculate lower bound on running time of an algorithm. Best-case scenario occurs when the data structures and the items in the collection along with the parameters are at their optimum state . This causes the minimum number of operations to be executed. For example, in linear search problem, the best case occurs when x(the item we are searching for) is present at the beginning of the list. The number of operations in the best case is constant (not dependent on n). So time complexity in the best case would be O(1)

2. Average case scenario 
Occurs when we define the complexity based on the uniform distribution of the values of the input. 
In average case analysis, we take all possible inputs and calculate computing time for all of the inputs. Sum all the calculated values and divide the sum by total number of inputs. We must know (or predict) distribution of cases. For the linear search problem, let us assume that all cases are uniformly distributed (including the case of x not being present in array). So we sum all the cases and divide the sum by (n+1).  

3. Worst Case Scenario
Worst case scenario could be an operation that requires finding an item that is positioned as the last item in a large-sized collection such as a list and the algorithm iterates over the collection from the very first item. For example, a linear search’s worst case occurs when x is not present in the list so the iteration compares x with all the elements.This would give us a run-time of O(n) 


&amp;lt;h5&amp;gt;Time Complexities of Python Data structures&amp;lt;/h5&amp;gt;

1. List
Insert: O(n)
Get Item: O(1)
Delete Item:O(n)
Iteration: O(n)
Get Length:  O(1)

2. Dictionary
Get Item:  O(1)
Set Item:  O(1)
Delete Item:  O(1)
Iterate Over Dictionary: O(n

3. Set
Check for item in set: O(1)
Difference of set A from B: O(length of A)
Intersection of set A and B: O(minimum of the length of either A or B)
Union of set A and B: O(N) with respect to length(A) + length(B)

4. Tuples
Tuples support all operations that do not mutate the data structure (and they
have the same complexity classes).














&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>python</category>
      <category>computerscience</category>
      <category>datastructures</category>
      <category>timecomplexity</category>
    </item>
    <item>
      <title>Data Structures in Python</title>
      <dc:creator>Faith Mueni Kilonzi </dc:creator>
      <pubDate>Sun, 16 Feb 2020 15:10:53 +0000</pubDate>
      <link>https://dev.to/global_codess/data-structures-in-python-1l8j</link>
      <guid>https://dev.to/global_codess/data-structures-in-python-1l8j</guid>
      <description>&lt;p&gt;DATA STRUCTURES IN PYTHON &lt;br&gt;
You can never be an efficient programmer without mastering data structures and algorithms. Problem solving in programming is impossible without the basics. Regardless of which aspect of python programming you want to focus on, you can’t ignore data, its organization and the algorithms you need to find solutions to their manipulation and data analysis. &lt;br&gt;
Data structures are a way of organizing data in such a way that you can store collections of data, relate the, and perform operations on them.  Data structures are derived from the term: data abstraction which is the use of data structures to solve problems by focusing on the main picture without getting lost in the details of meta-data and data access. They ease the process of problem-solving and ensure efficiency. &lt;br&gt;
In other words, data structures are an actual implementation of the Abstract Data Types (ADT). This implementation requires you to have a physical view (how data collections are stored and organized) in a particular programming language’s constructs and basic data types. &lt;br&gt;
There are two ways of grouping data structures in python: &lt;br&gt;
(i) Built-in and User-Defined Data Structures&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bDw19yCr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6supvcnizvnpc3kf0ibj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bDw19yCr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6supvcnizvnpc3kf0ibj.png" alt="Data Structures in Python" title="Data Structures in Python"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(ii) Primitive and Non-Primitive Data Structures &lt;br&gt;
 &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ULW51Hfd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://res.cloudinary.com/dyd911kmh/image/upload/c_scale%2Cf_auto%2Cq_auto:best%2Cw_700/v1512740202/Template_2_oxrskq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ULW51Hfd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://res.cloudinary.com/dyd911kmh/image/upload/c_scale%2Cf_auto%2Cq_auto:best%2Cw_700/v1512740202/Template_2_oxrskq.png" alt="Primitive and Non-Primitive Data Structures"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Primitive Data Structures&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Integers&lt;/strong&gt; : Used to represent numeric data, more specifically whole numbers from negative infinity to infinity, like 2,3, -100000, 10000.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Float&lt;/strong&gt; : ‘Float’ stands for floating point number. It is used for rational numbers usually ending with decimal figure such as 1.1,2.3,9.3 etc.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;String&lt;/strong&gt; : Strings are a collection of alphabets, words or other characters.  In Python, strings are created by enclosing a sequence of characters within a pair of double or single quotes. x= “Hello World”. &lt;a href="https://docs.python.org/3/library/stdtypes.html#string-methods"&gt;Explore the different string operations here&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Boolean&lt;/strong&gt; : It is a built-in data type that can take the values TRUE or FALSE&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Non-Primitive Data Structures&lt;/h3&gt;

&lt;p&gt;This section covers some of the primitive (and built-in) Python Data Structures. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lists&lt;/strong&gt;&lt;br&gt;
Stores indexed elements that are changeable and can contain duplicate items.&lt;br&gt;
Mutable, ordered series, traditionally of the same type of object.&lt;br&gt;
Advantages: Mutable and ordered. Easy to understand. Relatively efficient memory usage.&lt;br&gt;
Disadvantages: Searching is O(n).&lt;br&gt;
To create a list, use square brackets:&lt;br&gt;
                 mylist = [ ]&lt;br&gt;
                 mylist = [1,2,3]&lt;br&gt;
                 mylist = ['a', 'b', 'c', [1,2,3] ] # 4 elements&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tuples&lt;/strong&gt;&lt;br&gt;
Stores indexed, unchangeable elements that can have duplicate copies.&lt;br&gt;
Immutable, ordered series traditionally containing different objects&lt;br&gt;
Advantages: Immutable and ordered. Relatively efficient memory usage (more than lists).&lt;br&gt;
Disadvantages: Searching is O(n). Hard to understand for many Python newcomers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dictionaries&lt;/strong&gt;&lt;br&gt;
Mutable, unordered pairs (keys and values) of objects. Keys must be hashable.&lt;br&gt;
Advantages: O(1) searching for keys. Makes it easy to create trees and other hierarchical data structures. Can be used to create self-documenting code. Many problems can be described in terms of key-value pairs.&lt;br&gt;
Disadvantages: Only lookup by key. Uses more memory than lists and tuples. Keys must be hashable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sets&lt;/strong&gt;&lt;br&gt;
A set is a collection which is unordered and unindexed. In Python sets are written with curly brackets.&lt;br&gt;
Once a set is created, you cannot change its items, but you can add new items.&lt;br&gt;
Advantages:Relatively efficient memory usage (more than lists).&lt;br&gt;
Disadvantages: Sets are unordered, so you cannot be sure in which order the items will appear.Searching is O(n). &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We will cover each of the data structures in the next tutorials. Thank you for reading!&lt;/p&gt;

</description>
      <category>python</category>
      <category>datastructures</category>
      <category>algorithms</category>
      <category>computerscience</category>
    </item>
    <item>
      <title>What you need to know before you include Python in your software stack in 2020</title>
      <dc:creator>Faith Mueni Kilonzi </dc:creator>
      <pubDate>Sun, 19 Jan 2020 12:53:41 +0000</pubDate>
      <link>https://dev.to/global_codess/what-you-need-to-know-before-you-include-python-in-your-software-stack-in-2020-55k9</link>
      <guid>https://dev.to/global_codess/what-you-need-to-know-before-you-include-python-in-your-software-stack-in-2020-55k9</guid>
      <description>&lt;p&gt;It’s the year 2020 and as usual, you will see a lot of blogs and conversations around ‘top 20 programming languages to master in 2020, what a full stack software engineer needs to know in 2020… how to earn the 6-figure salary in 2020… etc., I am not bringing a different message too 😉 I am just here to share my piece of cake too. Python. &lt;br&gt;
I fell in love with Python right from my introductory course to Computer Science not only because it is arguably the best language for beginners, but it’s also extremely powerful. &lt;/p&gt;

&lt;p&gt;Why Python? &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The underlying principles of the design of the python language focuses on clarity and simplicity.&lt;/p&gt;

&lt;p&gt;Python’s rapid and robust development capabilities can be applied in projects of any size- from the start-ups to already established corporations. &lt;/p&gt;

&lt;p&gt;The use of python saves on time and money; you can quickly build MVP, do fast iterations, implement new features when necessary, integrate with other software and build a scalable business with a varying number of team members. PS: when working with python, you just need a small but strong team size for fast and efficient collaborations.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What can you do with Python?&lt;br&gt;
Some the world’s biggest corporations such as Facebook, Google, Spotify, Netflix, Instagram, IBM and Quora have placed a bet on python. &lt;/p&gt;

&lt;p&gt;There are 3 major applications of Python in the real world: web and app development, scripting, and data science. &lt;/p&gt;

&lt;p&gt;(i) Python for Scripting&lt;br&gt;
Python has been designed with modules that help scripting basic functionalities quite easy. You can use python scripts to build email automation services, SMS features, data extraction from excel sheets, decrypting pdf files, reading and writing files, web scraping, etc. &lt;br&gt;
I recently discovered a book by  AL Sweigart, Automate the Boring Stuff with Python which is very good for practical scripting for both beginners and intermediate developers. &lt;/p&gt;

&lt;p&gt;(ii) Python for Web and app development &lt;br&gt;
The two most popular python frameworks, Django and Flask are quite useful when developing web and apps. Django has a more general use while Flask is mostly useful in relatively smaller projects.&lt;/p&gt;

&lt;p&gt;(iii) Python for Data Science&lt;br&gt;
Python is a very crucial language when it comes to AI development, in this case Data Science which includes machine learning, data visualization, and data analysis. Python has been supported by a number of libraries and frameworks such as TensorFlow, scikit-learn, matplotlib, seaborn, which are powered by machine learning algorithms to build smart systems. Most of the AI-powered applications such as recommender systems and business intelligence analytics have a great improvement on customer behavior and results in businesses. &lt;/p&gt;

&lt;p&gt;In conclusion…&lt;/p&gt;

&lt;p&gt;If you want to python to be part of your software stack in 2020, you could decide on which aspect you want to focus on either as a scripting language, web development or data science. It wouldn’t take much to focus on all the 3 too if you are up for the task 😉 Whichever path you choose, I wish you a safe ride 😊 &lt;/p&gt;

</description>
      <category>python</category>
      <category>scripting</category>
      <category>django</category>
      <category>flask</category>
    </item>
    <item>
      <title>What you need to know about OOP in Python</title>
      <dc:creator>Faith Mueni Kilonzi </dc:creator>
      <pubDate>Fri, 10 Jan 2020 09:52:00 +0000</pubDate>
      <link>https://dev.to/global_codess/what-you-need-to-know-about-oop-in-python-16kn</link>
      <guid>https://dev.to/global_codess/what-you-need-to-know-about-oop-in-python-16kn</guid>
      <description>&lt;p&gt;Understanding Python Classes&lt;br&gt;
Python is an Object-oriented programming language. This means that everything is an object in python, with properties and methods which define the object. &lt;br&gt;
A class in python, is a blueprint or a prototype for creating objects. For instance, if you want to build a house, you will first need a blueprint containing basic properties (characteristics) and methods(functionalities) of what a general house would look like. Using the class, you can now create instances (different examples) of the same house. A class is therefore an object constructor that defines the object. &lt;br&gt;
For example, to create an object Student, we represent a student with properties such as name, course, age, student number, etc., and behaviors such as reading, attending class, programming, etc. Another object could be an animal whose properties include number of legs, habitat, name, type of food, etc. and functionalities such as walking, eating, living, etc.&lt;br&gt;
Simply put, OOP is an approach used to model real-life entities which have data associated with them and can perform certain functions. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;         Creating the class
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Use a class keyword. &lt;br&gt;
   Class Animal(object):&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The python constructor: &lt;strong&gt;init&lt;/strong&gt; ()&lt;/p&gt;

&lt;p&gt;Every python class starts with a function called &lt;strong&gt;init&lt;/strong&gt; () which is used to initialize the object’s attributes by assigning to them their default values. This function has at least one argument(parameter) called self which references the object itself e.g. Animal.&lt;/p&gt;

&lt;p&gt;class Animal:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Initializer / constructor
def __init__ (self, name, habitat):
    self.name = name        
    self. Habitat = habitat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Instantiating Objects&lt;br&gt;
To instantiate an object means to create a new, unique instance of a class. You call the class name by giving it real values to model an example of the class. &lt;br&gt;
class Animal:&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Initializer / constructor&lt;br&gt;
def &lt;strong&gt;init&lt;/strong&gt; (self, name, habitat):&lt;br&gt;
    self.name = name&lt;br&gt;&lt;br&gt;
    self. habitat = habitat&lt;br&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h1&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Instantiate the Animal object&lt;br&gt;
&lt;/h1&gt;

&lt;p&gt;Animal_object = Animal(“Dog”, “home”);&lt;/p&gt;

&lt;h1&gt;
  
  
  Access an instance attributes
&lt;/h1&gt;

&lt;p&gt;print(animal_object.name)&lt;br&gt;
print(animal_object.habitat)&lt;/p&gt;

&lt;p&gt;Instance Methods&lt;br&gt;
Instance methods are functions that belong to the object and are defined inside a class to get contents of an instance. They are used to perform operations with the object attributes. For example, a getName method is used to get the name of the object instantiated by the class. Like the &lt;strong&gt;init&lt;/strong&gt; method, the first argument is always self.&lt;/p&gt;

&lt;p&gt;class Animal:&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Initializer / constructor&lt;br&gt;
def &lt;strong&gt;init&lt;/strong&gt;(self, name, habitat):&lt;br&gt;
    self.name = name&lt;br&gt;&lt;br&gt;
    self.habitat = habitat&lt;br&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h1&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  instance method&lt;br&gt;
&lt;/h1&gt;
&lt;br&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def getName(self, name):&lt;br&gt;
    return self.name&lt;br&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h1&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  instance method&lt;br&gt;
&lt;/h1&gt;
&lt;br&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def description(self):&lt;br&gt;
    return "my name is a {} and I live in the {}".format(self.name,   self. habitat)&lt;br&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h1&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Instantiate the Animal object&lt;br&gt;
&lt;/h1&gt;

&lt;p&gt;animal_object = Animal(“Dog”, “home”);&lt;/p&gt;

&lt;h1&gt;
  
  
  Calling an instance method
&lt;/h1&gt;

&lt;p&gt;animal_object.getName(“Puppy”)&lt;br&gt;
animal_object.description() &lt;/p&gt;

&lt;p&gt;Save the animal.py file and run it. The output you see should be:&lt;br&gt;
Puppy&lt;br&gt;
My name is a dog and I live in the home.&lt;br&gt;
Modify Object Properties&lt;br&gt;
You can change the value of the object properties. &lt;br&gt;
To change the name of the object:&lt;br&gt;
animal_object.name= ‘Mikey’&lt;/p&gt;

&lt;h1&gt;
  
  
  this sets the name from ‘dog’ to ‘Mikey’
&lt;/h1&gt;

&lt;p&gt;To delete the property attribute:&lt;/p&gt;

&lt;p&gt;del animal_object.name&lt;/p&gt;

</description>
      <category>python</category>
      <category>oop</category>
      <category>classes</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
