<?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: Erin Schaffer</title>
    <description>The latest articles on DEV Community by Erin Schaffer (@erineducative).</description>
    <link>https://dev.to/erineducative</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%2F609684%2Fc0a9ddfa-0572-450d-832d-f72e57812b24.jpg</url>
      <title>DEV Community: Erin Schaffer</title>
      <link>https://dev.to/erineducative</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/erineducative"/>
    <language>en</language>
    <item>
      <title>Why a strategic coding interview prep plan matters</title>
      <dc:creator>Erin Schaffer</dc:creator>
      <pubDate>Thu, 06 Jan 2022 17:57:46 +0000</pubDate>
      <link>https://dev.to/educative/why-a-strategic-interview-prep-plan-matters-2o55</link>
      <guid>https://dev.to/educative/why-a-strategic-interview-prep-plan-matters-2o55</guid>
      <description>&lt;p&gt;Let’s face it: coding interviews are nerve-wracking. We go into interviews with the intention of impressing our interviewers and landing a new job. We know that when we interview, we show up to be evaluated and, in some ways, judged. It’s completely normal and acceptable to have pre-interview, mid-interview, and post-interview nerves. But how can we overcome our emotions to ensure we come across as prepared, confident, and desirable? Let’s talk about it!&lt;/p&gt;

&lt;p&gt;Today we’ll discuss one of the best things you can do to help ease those interview nerves: prepare strategically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We’ll cover&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to prepare for your interview&lt;/li&gt;
&lt;li&gt;Tips and resources to help you prepare&lt;/li&gt;
&lt;li&gt;Why strategic interview prep is important&lt;/li&gt;
&lt;li&gt;Wrapping up&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to prepare for your interview
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Determining your goals
&lt;/h3&gt;

&lt;p&gt;When interviewing gets put on your radar, there are some general best practices that will help you approach your interviews with more confidence. While searching for positions, I recommend &lt;strong&gt;establishing your goals first&lt;/strong&gt;. If in five years you want to be a TPM, consider roles and companies with leadership and growth opportunities. If you dream of being a technical architect, focus on roles and companies that emphasize system design. Ask yourself questions like &lt;em&gt;What is it I seek to accomplish in my career? What do I want to learn? What do I feel passionate about?&lt;/em&gt; Determining your answers to these questions will help you set your sights on the right positions with the right companies. &lt;/p&gt;

&lt;p&gt;It’s important to remember to &lt;strong&gt;apply to a company for the right reasons&lt;/strong&gt;. Many developers aspire to work for Big Tech companies (FAANG+), but remember that those companies aren’t the only ones where you can make an impact, earn a great salary, and grow as a developer. Start-ups and smaller companies offer a lot of flexibility, freedom, and corporate culture that will allow you to be successful &lt;em&gt;and&lt;/em&gt; fulfilled. &lt;/p&gt;

&lt;p&gt;When looking into various companies, you should turn to social media sites like Reddit and Quora and sites like Glassdoor to hear from current and former employees about company culture, interview tips, common interview questions, and more. levels.fyi is another popular place to find out your “worth” in tech across various companies. You should also look on LinkedIn and the company’s website to learn more about the position and job description.&lt;/p&gt;

&lt;h3&gt;
  
  
  Preparing for the coding interview
&lt;/h3&gt;

&lt;p&gt;While three months is a good amount of time for someone newer to the coding interview, 4-6 weeks can be enough time for a candidate who feels comfortable with certain concepts. The timeline could even get a bit shorter than that if you’ve interviewed recently. But &lt;strong&gt;interview prep is about more than just putting in the time, it’s also about doing it strategically&lt;/strong&gt;. &lt;br&gt;
If you’re looking for some guidance, check out the &lt;a href="https://www.codinginterview.com/interview-roadmap" rel="noopener noreferrer"&gt;Definitive Interview Prep Roadmap&lt;/a&gt;. This resource breaks down prep week by week in a 12-week timeline. If you feel confident about certain concepts, skip them! Just make sure you focus on concepts and subjects that will help boost your confidence and best prepare you for your interview. This interview roadmap also speaks to the behavioral interview, which is important to prepare for as well.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Because of the COVID-19 pandemic, video interviews (and remote work) have become commonplace. Making a good first impression virtually is just as important as making a good first impression in person. Make sure to adhere to an appropriate dress code, practice approachable body language, and make eye contact with your interviewer.&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tips and resources to help you prepare
&lt;/h2&gt;

&lt;p&gt;We’ve spent a lot of time talking about how to prepare. Now it’s time to give you some tips and resources to help you get started. &lt;/p&gt;

&lt;h3&gt;
  
  
  Interview prep tips
&lt;/h3&gt;

&lt;p&gt;A great hands-on way to prep for interviews is to work on some personal projects. You can &lt;strong&gt;tailor these projects to showcase relevant, in-demand skills&lt;/strong&gt; for your next job interview. If the job you want requires experience with a NoSQL data structure store, like Redis, create a project using a NoSQL data structure store! When you get to your interview, you’ll feel more confident and comfortable talking about NoSQL data structure stores because of your hands-on experience.&lt;/p&gt;

&lt;p&gt;Another way you can prepare for your interview is by setting up &lt;strong&gt;mock interviews&lt;/strong&gt; with friends or classmates. Mock interviews are a &lt;strong&gt;great way to practice demonstrating your soft skills&lt;/strong&gt;. In mock interviews, you can practice talking through common job interview questions, asking and answering questions, and showcasing your communication, collaboration, and leadership skills. &lt;/p&gt;

&lt;p&gt;You should even prepare for the possibility that you might not know how to solve the problem your interviewer asked you. Learning &lt;a href="https://www.educative.io/blog/ace-coding-interview" rel="noopener noreferrer"&gt;how to ace a coding interview even if you can’t solve the problem&lt;/a&gt; will help you work through roadblocks intentionally.&lt;/p&gt;

&lt;h3&gt;
  
  
  Interview prep resources
&lt;/h3&gt;

&lt;p&gt;Educative has tons of &lt;strong&gt;free interview prep content&lt;/strong&gt;, which can help you prepare for your next job interview. Some of our top interview prep blogs include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/crack-amazon-coding-interview-questions" rel="noopener noreferrer"&gt;Cracking the top Amazon coding interview questions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/google-coding-interview" rel="noopener noreferrer"&gt;Cracking the Google coding interview: The definitive prep guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/cracking-top-facebook-coding-interview-questions" rel="noopener noreferrer"&gt;Cracking the top 40 Facebook coding interview questions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.codinginterview.com/" rel="noopener noreferrer"&gt;CodingInterview.com&lt;/a&gt; is another great resource for interview prep. This site gives you all the information you need to maximize your chances of success at top companies with company-specific interview guides. CodingInterview offers over 20 interview guides for companies like Microsoft, Netflix, Twitter, Stripe, and more!&lt;/p&gt;

&lt;p&gt;If you’re looking for a more hands-on, comprehensive interview prep resource, Educative offers many different interview prep courses, ranging from the system design interview to the Python coding interview to the front-end interview. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why strategic interview prep is important
&lt;/h2&gt;

&lt;p&gt;The entire job search process can be tedious. You can apply to tons of jobs without hearing back from a single hiring manager or recruiter. Once you finally &lt;em&gt;do&lt;/em&gt; hear back and schedule an interview, you typically spend a decent amount of time in the interview process until you get to the point of a job offer. &lt;/p&gt;

&lt;p&gt;On top of that, the interview preparation process also takes time. When getting ready for your coding interview, it’s important to prepare strategically. We advise you to set aside &lt;strong&gt;up to three months&lt;/strong&gt; to fully prepare. While three months may seem like a long time, remember that coding interviews are filled with dense material and complex topics, so it’s important to give yourself enough time to study, practice, and understand each concept thoroughly. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It’s important to note that this time frame will decrease depending on certain factors, like whether you’ve interviewed recently or if you have ample experience with certain key topics.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When prepping, &lt;strong&gt;following a structure is critical to ensure you hold yourself accountable and have time to cover all your bases&lt;/strong&gt;. That way, when it’s finally time for your coding interview, your in-depth preparation will have helped alleviate some of those interview nerves and build your confidence as an interviewee. At a high level, a key takeaway for strategic interview prep is that you don’t need to get extremely specific on tactical execution. Everything you need to know is a high-level concept that you apply in your coding language of choice. &lt;/p&gt;

&lt;p&gt;Another aspect of prepping strategically is &lt;strong&gt;making sure you’re studying and practicing the right concepts&lt;/strong&gt; beforehand. Interviews at most tech companies cover the following concepts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Coding questions, problem-solving, and data structures and algorithms (DSA)&lt;/li&gt;
&lt;li&gt;Operating systems and concurrency&lt;/li&gt;
&lt;li&gt;System design&lt;/li&gt;
&lt;li&gt;Object-oriented programming&lt;/li&gt;
&lt;li&gt;Behavioral and culture fit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That being said, &lt;strong&gt;the coding interview process is constantly evolving in response to market and product needs&lt;/strong&gt;. Educative’s CEO, Fahim ul Haq, wrote an insightful piece about the last 25 years of the software engineering interview. He says, &lt;em&gt;“It’s important today for you to go back to the software engineering and interviewing basics: understanding data structures and algorithms, preparing general-purpose skills that can be applied to unique problems, and understanding how various components relate to each other in OOP and multi-entity systems.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you want to hear more about his experience and observations, I highly recommend reading Fahim’s full piece to hear his take on &lt;a href="https://www.fahim.dev/25-years-software-engineering-interview/" rel="noopener noreferrer"&gt;how software engineering interviews have changed in the last 25 years&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;To wrap up, remember that the hiring process at the end of an interview loop takes time. If you don’t hear back right away, that doesn’t mean you won’t get the offer! Think of your strategic job search like an engineering project: you put together components in a sequence to build a product you and your customer will love. &lt;br&gt;
So, go in with a plan and execute it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy learning!&lt;/em&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Continue learning about interview prep
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/coding-interivew-preparation-bootcamp" rel="noopener noreferrer"&gt;3-month coding interview preparation bootcamp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/5-tried-and-true-techniques-to-prepare-for-a-coding-interview#practice" rel="noopener noreferrer"&gt;5 tried and true techniques to prepare for a coding interview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/leetcode-interview-prep" rel="noopener noreferrer"&gt;Is LeetCode the best way to prepare for interviews?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>career</category>
      <category>discuss</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Tech trends to know for 2022</title>
      <dc:creator>Erin Schaffer</dc:creator>
      <pubDate>Thu, 30 Dec 2021 21:35:49 +0000</pubDate>
      <link>https://dev.to/educative/tech-trends-to-know-for-2022-el1</link>
      <guid>https://dev.to/educative/tech-trends-to-know-for-2022-el1</guid>
      <description>&lt;p&gt;We’re less than a month away from the new year, which means it’s a great time to begin investing in yourself and upskilling to prepare yourself for a successful career (or career switch!). Today, we want to spend some time outlining some popular tech trends that are projected to dominate the software development industry in 2022. Not only will we list and explain each trend, but we’ll also provide you with resources to help you get started on your learning journey. &lt;/p&gt;

&lt;p&gt;Let’s get started!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We’ll cover&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-cloud&lt;/li&gt;
&lt;li&gt;Swift&lt;/li&gt;
&lt;li&gt;CI/CD&lt;/li&gt;
&lt;li&gt;Hadoop&lt;/li&gt;
&lt;li&gt;Virtualization&lt;/li&gt;
&lt;li&gt;Wrapping up&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-cloud
&lt;/h2&gt;

&lt;p&gt;First on the list is multi-cloud, which is a cloud computing model that leverages two or more cloud platforms. Multi-cloud allows you to take advantage of the resources that different cloud providers offer and helps you lower your cloud cost. Gartner estimates that &lt;strong&gt;over 75% of cloud customers&lt;/strong&gt; will adopt multi-cloud by the end of 2022. &lt;/p&gt;

&lt;p&gt;Hands-on experience with multiple cloud providers will allow you to help an organization shift to a multi-cloud strategy. Cloud experience, in general, is &lt;strong&gt;highly valued in the software engineering industry&lt;/strong&gt;. Most companies currently take advantage of &lt;em&gt;at least one&lt;/em&gt; cloud provider, such as AWS, Microsoft Azure, or Google Cloud Platform. The job market for cloud engineers is vast, with thousands of opportunities to work with cloud architecture, cloud development, and cloud support. The multi-cloud strategy also works closely with container technologies, such as Kubernetes, to simplify the process of implementing a multi-cloud architecture. &lt;/p&gt;

&lt;p&gt;As the cloud continues to dominate the business landscape, the multi-cloud model will continue to increase in popularity. Getting familiar with the model will give you a leg up in your cloud computing journey.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Swift
&lt;/h2&gt;

&lt;p&gt;The second trend on the list is Swift, a multi-paradigm, general-purpose programming language for iOS development. Apple created this safe, expressive, and powerful language to replace C-based languages for iOS development. Swift has a reputation for being an easy language to learn. Apple created the language with new coders in mind, and they even created &lt;em&gt;Swift Playgrounds&lt;/em&gt;, which is an iPad app that makes it easy for new developers to get started coding with Swift. &lt;/p&gt;

&lt;p&gt;Just like the software industry as a whole, iOS development continues to quickly expand and change. In 2022, iOS development efforts will focus on areas such as machine learning, IoT, mobile payments, and chatbots to continue building newer and smarter applications for all users. &lt;/p&gt;

&lt;p&gt;If you want to get into iOS development, Swift is a great language to learn. If you do choose to get started with Swift, you’ll be in high demand. According to Apple, the company has created about &lt;strong&gt;two million jobs&lt;/strong&gt; in the United States alone, with the average salary sitting at around &lt;strong&gt;$116,804&lt;/strong&gt;.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  CI/CD
&lt;/h2&gt;

&lt;p&gt;CI/CD, or continuous integration/continuous delivery, is a &lt;strong&gt;fundamental DevOps and Agile best practice&lt;/strong&gt;. CI/CD enables software development teams to automate their software development lifecycle. With CI/CD your team can frequently deliver and deploy applications and accelerate your app development process. You can efficiently implement automation and monitor things like code changes, new features, and potential bug fixes.&lt;/p&gt;

&lt;p&gt;Cloud-native CI/CD pipelines are growing in popularity. They allow us to take full advantage of cloud computing services and features, like containerization, going serverless, and implementing a multi-cloud infrastructure. We explored the concept of multi-cloud earlier, and now we can see that it’s a widespread model that can apply to CI/CD and DevOps. &lt;/p&gt;

&lt;p&gt;Learning a CI/CD tool will help you become familiar with the CI/CD pipelines and processes. Popular tools include Jenkins, GitLab, Azure DevOps, and more.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Hadoop
&lt;/h2&gt;

&lt;p&gt;Hadoop is an open-source software framework developed by the Apache Software Foundation. Hadoop is built on &lt;strong&gt;Hadoop clusters&lt;/strong&gt;, which are collections of computers, or nodes, that work together to execute computations on data. It allows us to store any kind of data and handle multiple concurrent tasks. Hadoop is **widely used in data science and big data, so if you’re a data scientist (or an aspiring data scientist), Hadoop is a great tool to learn. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Virtualization
&lt;/h2&gt;

&lt;p&gt;The final trend we’ll explore is virtualization. Virtualization allows us to use the features of a physical machine across multiple virtual environments. There are many different types of virtualization, including cloud virtualization, network virtualization, and data virtualization, so depending on your team and organization, you may work with a few different types. &lt;/p&gt;

&lt;p&gt;If you’re looking to work in the cloud space, this is an &lt;strong&gt;important trend to stay on top of&lt;/strong&gt;. Additionally, if you haven’t already, it’s important to become familiar with two additional operating system fundamentals: concurrency and persistence. These three concepts lay the foundation for understanding how operating systems work.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;And there you have it! We explored some of the projected top tech trends for the upcoming year. There’s no better time than now to get started upskilling or learning a new skill to add to your resume. Learning any tool or technology on this list will take your learning to the next level and allow you to stand out to potential employers.&lt;br&gt;
Educative is committed to helping you expand your knowledge and skillset. &lt;/p&gt;

&lt;p&gt;Accelerate your learning and your career with our &lt;a href="https://www.educative.io/trial" rel="noopener noreferrer"&gt;&lt;strong&gt;free 7-day trial&lt;/strong&gt;&lt;/a&gt;. Our free trial grants you access to over 300 curated courses.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy learning!&lt;/em&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>career</category>
      <category>discuss</category>
    </item>
    <item>
      <title>What’s the best programming language to learn first?</title>
      <dc:creator>Erin Schaffer</dc:creator>
      <pubDate>Thu, 30 Dec 2021 21:30:39 +0000</pubDate>
      <link>https://dev.to/educative/whats-the-best-programming-language-to-learn-first-24oi</link>
      <guid>https://dev.to/educative/whats-the-best-programming-language-to-learn-first-24oi</guid>
      <description>&lt;p&gt;As a beginner programmer, it’s difficult to decide which programming language to learn first. The software development industry is fast-paced, and the market is constantly changing. There are over 700 programming languages in use, and each of those languages has its own advantages, disadvantages, and use cases. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;So, how do you decide where to begin?&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;Well, the good news is that learning &lt;em&gt;any&lt;/em&gt; language will open up doors and create new opportunities for you. In this article, we’ll explore the different types of programming languages, along with how to choose the best first language for your personal and professional goals. Then, we’ll give an overview of some of the most popular languages in use today.&lt;/p&gt;

&lt;p&gt;Let’s get started!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We’ll cover&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Different types of programming&lt;/li&gt;
&lt;li&gt;Choosing the right programming language&lt;/li&gt;
&lt;li&gt;Popular programming languages&lt;/li&gt;
&lt;li&gt;Wrapping up and next steps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Different types of programming
&lt;/h2&gt;

&lt;p&gt;Programming languages are used to connect instructions to computers or machines. There are so many different programming languages with different functions. These languages can be categorized based on their functionalities. Popular programming language types include:&lt;/p&gt;

&lt;h3&gt;
  
  
  High-level
&lt;/h3&gt;

&lt;p&gt;High-level programming languages have strong abstractions from the details of the computer. High-level languages are considered easier to understand and learn because they typically use simple syntax, have better readability, and automate areas of computing systems to make programming easier.&lt;/p&gt;

&lt;h3&gt;
  
  
  Low-level
&lt;/h3&gt;

&lt;p&gt;Low-level programming languages have little to no abstraction from the instruction set architecture of a computer. These languages are typically described as “closer to the hardware.” They can convert to machine code without an interpreter or compiler. They’re considered to have a steeper learning curve than high-level languages.&lt;/p&gt;

&lt;h3&gt;
  
  
  General-purpose
&lt;/h3&gt;

&lt;p&gt;General-purpose programming languages are designed to build software in a variety of application domains. These languages lack special features for particular domains.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scripting
&lt;/h3&gt;

&lt;p&gt;Scripting languages are programming languages that are interpreted. They’re typically interpreted at runtime rather than compiled. They use a series of commands that can be executed without being compiled. All scripting languages are programming languages, but not all programming languages are scripting languages. &lt;/p&gt;

&lt;h3&gt;
  
  
  Imperative
&lt;/h3&gt;

&lt;p&gt;Imperative programming uses statements to change the state of a program. Imperative programs give commands to the computer to execute. It focuses on explaining &lt;em&gt;how&lt;/em&gt; programs operate. Imperative languages can be broken down into the following subcategories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Procedural&lt;/strong&gt;: Procedural programming languages are based on the concept of procedural calls. These languages follow and carry out a set of ordered steps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Object-oriented&lt;/strong&gt;: Object-oriented programming languages are based on the concept of &lt;em&gt;objects&lt;/em&gt;, which contain data or code. Object-oriented programs are created by objects that interact with each other. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Parallel&lt;/strong&gt;: Parallel programming languages carry out processes simultaneously. With parallel programming, tasks are typically broken down into several sub-tasks that can be executed independently with all of the results combined afterward. Parallel programming is closely related to and frequently used alongside &lt;em&gt;concurrent programming&lt;/em&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Declarative
&lt;/h3&gt;

&lt;p&gt;Declarative programming is typically defined as “any style of programming that is &lt;em&gt;not&lt;/em&gt; imperative.” Declarative programs are non-imperative and describe their desired results without clearly defining commands or steps to be executed. They describe &lt;em&gt;what&lt;/em&gt; the program must accomplish, rather than &lt;em&gt;how&lt;/em&gt; to accomplish it. Declarative languages can be broken down into the following subcategories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Logic&lt;/strong&gt;: Logic programming languages are based on formal logic. Logical programs consist of a set of sentences in a logical order that expresses facts and rules about problem domains.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Functional&lt;/strong&gt;: Functional programming languages apply and compose functions. Function definitions are trees of expressions that map values to other values. In functional programming, functions can be bound to names, passed as arguments, and returned from other functions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Database&lt;/strong&gt;: Database programming languages define and access database information. With database programs, we can control access to data, define and update data, and search for information within our database management system (DBMS).&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing the right programming language
&lt;/h2&gt;

&lt;p&gt;There are a few things to take into consideration when choosing a language to learn, or even when deciding on which language to use for a new project. I think the first essential question to ask yourself is: &lt;em&gt;what am I learning a programming language for?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Are you interested in getting into programming? Are you wanting to learn programming as a hobby or just for fun? Are you trying to switch career paths? Do you want to build a website from the ground up? Do you want to design your own mobile application? Do you want to learn the most in-demand, popular language on the market? The questions are endless!&lt;/p&gt;

&lt;p&gt;In short, your personal reasons for learning a language will help guide which language is best for you to learn. &lt;/p&gt;

&lt;h3&gt;
  
  
  Can I choose the &lt;em&gt;wrong&lt;/em&gt; programming language?
&lt;/h3&gt;

&lt;p&gt;At the end of the day, learning &lt;em&gt;any&lt;/em&gt; programming language will teach you valuable and transferable skills in the software industry. While all programming languages have their differences, they share similar underlying principles. With any language, you’ll learn more about fundamental programming concepts, computer science, hardware, software, etc. &lt;/p&gt;

&lt;p&gt;It’s also important to remember that you can learn multiple programming languages. Many developers move between different languages throughout the course of their careers. If you end up not aligning with your first language, you can always move on to another one. Once you learn your first language, it’s typically a lot easier to learn another one. Don’t stress yourself out when trying to pick your first language. &lt;/p&gt;

&lt;p&gt;That being said, it’s important to consider what your goals are and what you’re working on when choosing a language. For example, if you want to build an iOS application, a good language option would be Swift, if you want to program a website, you’d want to learn languages like HTML and CSS, and so on.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Popular programming languages
&lt;/h2&gt;

&lt;p&gt;In this section, we’ll explore a compilation of some of the most popular programming languages to help you get an idea of what language would be best suited for you and your needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Java
&lt;/h3&gt;

&lt;p&gt;Java is a general-purpose, object-oriented, high-level programming language. It’s commonly used as the server-side language for back-end development tasks, including Android application development, big data applications, mobile app development, game development, and more. It’s a relatively simple language that uses automatic memory allocation and garbage collection. It offers class-based object-oriented programming (OOP) and enables reusable code. Java is platform-independent and multi-threaded.&lt;/p&gt;

&lt;h3&gt;
  
  
  JavaScript
&lt;/h3&gt;

&lt;p&gt;JavaScript is an interpreted, object-oriented, high-level language. Unlike Java, it’s not class-based. JavaScript is widely used in front-end web development alongside HTML and CSS to build dynamic web pages. JavaScript is a very fast language because it can be run in the client-side browser. It’s known for its simple syntax and rich libraries, frameworks, and technologies, including React, Angular, and Node.js.&lt;/p&gt;

&lt;h3&gt;
  
  
  Python
&lt;/h3&gt;

&lt;p&gt;​Python is an interpreted, object-oriented, high-level scripting language. It’s widely used in artificial intelligence, machine learning, data science and data analysis, and web development. Python provides rich libraries that include features such as web services tools, operating system interfaces, and more. These features add a lot of functionality to the language, which is one of the reasons why Python is so popular. Many developers recommend that beginner coders &lt;a href="https://www.educative.io/blog/how-to-learn-python-in-5-easy-steps" rel="noopener noreferrer"&gt;learn Python&lt;/a&gt; as their first programming language because of its simple syntax, readability, and extensivity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Swift
&lt;/h3&gt;

&lt;p&gt;Swift is an open-source, multi-paradigm language developed by Apple. It’s mainly used for iOS development and macOS development. It integrates Objective-C’s object-oriented model and includes a framework infrastructure, debugger, and an advanced compiler. Swift is known for its simple syntax, scalability, and safety features. Your Swift projects can be extended with new features whenever necessary, which makes them easy to scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  Golang
&lt;/h3&gt;

&lt;p&gt;Golang, or &lt;em&gt;Go&lt;/em&gt;, is an open-source, general-purpose, and compiled programming language created by Google. It’s a statically-typed and imperative language that includes features of object-oriented programming. Go is &lt;em&gt;hybrid&lt;/em&gt;, using the best features of many languages in a clear, expressive way. It’s used for all different types of software development solutions.&lt;/p&gt;

&lt;h3&gt;
  
  
  C
&lt;/h3&gt;

&lt;p&gt;The C programming language is general-purpose, imperative, and procedural. It’s widely used for scripting system apps and Windows, UNIX, and Linux operating systems. It’s also used for embedded systems, desktop applications, browsers, and databases. C is a low-level language, so it’s “closer to the hardware.” C is a base language for many other languages, so learning it will help you learn and understand other languages.&lt;/p&gt;

&lt;h3&gt;
  
  
  C++
&lt;/h3&gt;

&lt;p&gt;C++ is a general-purpose, generic, object-oriented language. Its portability allows you to easily run your programs on any interface or operating system. For example, if you write a program in Linux and want to switch to Windows, the transition will be smooth. It’s commonly used for video game development, back-end development, and graphical user interface (GUI) applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  SQL
&lt;/h3&gt;

&lt;p&gt;SQL, or &lt;em&gt;structured query language&lt;/em&gt;, is a domain-specific language used to manage data in relational databases. It’s the standard language for relational database management systems (RDMS) like MySQL, Postgres, and Microsoft SQL Server. It allows you to embed within other languages using SQL modules, libraries, and pre-compilers. It’s a valuable language for web developers, data scientists and analysts, and even some non-technical roles, such as business analysts, marketers, and more.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scala
&lt;/h3&gt;

&lt;p&gt;The Scala programming language combines functional programming and object-oriented programming into one language. It was designed to improve upon Java, so you can call Java methods, inherit from Java classes, and more. Scala is commonly used for strong static systems, machine learning, data science, finance applications, distributed applications, and more. It’s in high demand and is becoming increasingly popular.&lt;/p&gt;

&lt;h3&gt;
  
  
  PHP
&lt;/h3&gt;

&lt;p&gt;PHP is an open-source server-side scripting language that’s similar to C. It’s widely used for web development and to create dynamic web pages. It’s also used in command-side scripting and GUI design. PHP is known to be beginner-friendly and widely applicable, as it can be used on any operating system or database.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kotlin
&lt;/h3&gt;

&lt;p&gt;Kotlin is an open-source, statically-typed programming language that can transpile to Java bytecode to run on the Java Virtual Machine (JVM) or Android. Currently, Kotlin is most widely used for Android app development and server-side applications. It can also be used to write web applications by transpiling to JavaScript. Learning Kotlin can help you quickly learn other modern languages like TypeScript, Scala, and Swift because they share many common concepts.&lt;/p&gt;

&lt;h3&gt;
  
  
  HTML and CSS
&lt;/h3&gt;

&lt;p&gt;HTML and CSS are popular languages for front-end developers. HTML is a markup language that’s used to structure web pages and their content. CSS is a style sheet language used to describe the presentation of documents written in markup languages like HTML. The two languages work together alongside JavaScript to build interactive websites.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up and next steps
&lt;/h2&gt;

&lt;p&gt;Whether you’re just getting started or you’re just wanting to learn a new programming language, Educative is here to help. Our curated courses and tutorials help you master new coding languages and skills and prepare you for real-world software development. Our courses are hands-on, including interactive code widgets directly in your web browser. Get started with a new language today with one of our &lt;strong&gt;&lt;em&gt;From Scratch&lt;/em&gt;&lt;/strong&gt;  courses. Some options include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/courses/learn-java-from-scratch" rel="noopener noreferrer"&gt;Learn Java from Scratch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/courses/learn-cpp-from-scratch" rel="noopener noreferrer"&gt;Learn C++ from Scratch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/courses/learn-scala-from-scratch" rel="noopener noreferrer"&gt;Learn Scala from Scratch&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Happy learning!&lt;/em&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Continue learning about programming
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/algorithms-101-check-string-palindrome" rel="noopener noreferrer"&gt;Algorithms 101: How to check if a string is a palindrome&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/what-is-an-api" rel="noopener noreferrer"&gt;Beginner API deep dive: What is an API?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/hardware-vs-software-components-computer" rel="noopener noreferrer"&gt;Computer science 101: Hardware vs software components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/performance-testing-tutorial-gatling-jenkins" rel="noopener noreferrer"&gt;Performance testing tutorial: Automation, Gatling, and Jenkins&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>python</category>
    </item>
    <item>
      <title>A beginner's guide to the Elixir programming language</title>
      <dc:creator>Erin Schaffer</dc:creator>
      <pubDate>Thu, 30 Dec 2021 21:22:55 +0000</pubDate>
      <link>https://dev.to/educative/a-beginners-guide-to-the-elixir-programming-language-1p34</link>
      <guid>https://dev.to/educative/a-beginners-guide-to-the-elixir-programming-language-1p34</guid>
      <description>&lt;p&gt;If you're looking to learn a new programming language, I recommend checking out Elixir. Elixir is a process-oriented, functional programming language that runs on the Erlang virtual machine (BEAM). The language was influenced by Ruby. This inspiration can be seen and felt in Elixir's ecosystem and tooling options. Elixir is known to be easy to learn and widely applicable within the software development industry. &lt;/p&gt;

&lt;p&gt;In this beginner's tutorial, I'll walk you through the Elixir language and discuss its use cases, tools, syntax, and much more.&lt;/p&gt;

&lt;p&gt;Let's get started!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We’ll cover&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is Elixir?&lt;/li&gt;
&lt;li&gt;Elixir vs Erlang&lt;/li&gt;
&lt;li&gt;Elixir features, tools, and uses&lt;/li&gt;
&lt;li&gt;Intro to Elixir functional programming&lt;/li&gt;
&lt;li&gt;Let's look at some Elixir code!&lt;/li&gt;
&lt;li&gt;
Next steps

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Elixir is a general-purpose, functional, concurrent programming language created by José Valim. Valim worked on the Ruby on Rails team, and he decided to create Elixir after experiencing issues when trying to improve the performance of Ruby on Rails. His goal was to create a language that could &lt;strong&gt;run on top of Erlang’s VM&lt;/strong&gt;, BEAM, and that could be compatible with the Erlang ecosystem.&lt;/p&gt;

&lt;p&gt;The Elixir syntax &lt;strong&gt;shares many similarities with the Ruby syntax&lt;/strong&gt; and is widely used to build fault-tolerant, scalable, and maintainable applications. The language provides scalability, concurrency, fault tolerance, and low latency. &lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Elixir vs Erlang
&lt;/h3&gt;

&lt;p&gt;Elixir is built on top of Erlang and runs on the Erlang VM. The two languages do share certain similarities, but they also have some different applications and use cases. &lt;/p&gt;

&lt;p&gt;Both languages support &lt;strong&gt;concurrency and fault tolerance&lt;/strong&gt;. You could safely choose &lt;em&gt;either&lt;/em&gt; language to build a large distributed system with high availability, but Elixir has a reputation for running faster than Erlang. Elixir gets the Open Telecom Platform (OTP) from Erlang, which is Erlang’s standard library used for concurrent programming.&lt;/p&gt;

&lt;p&gt;If you want the freedom to work with different databases and frameworks, Erlang may be the better choice. Elixir is limited in database and framework support. However, if you want the &lt;strong&gt;flexibility to work with different cloud platforms&lt;/strong&gt;, Elixir is the better option. Elixir supports many cloud platforms, while Erlang only supports a few.&lt;/p&gt;

&lt;p&gt;There are also some &lt;strong&gt;notable syntax differences&lt;/strong&gt; between Elixir and Erlang:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Erlang has certain operators that Elixir does not. In Erlang, logical &lt;code&gt;and&lt;/code&gt; and &lt;code&gt;or&lt;/code&gt; operators are available, but they aren’t available in Elixir. &lt;/li&gt;
&lt;li&gt;In Erlang, we use a colon &lt;code&gt;:&lt;/code&gt; to invoke a function using the respective module, and in Elixir we use &lt;code&gt;.&lt;/code&gt; to invoke a function.&lt;/li&gt;
&lt;li&gt;In Elixir, we can assign variables more than once, but in Erlang, we can’t assign variables more than once. Doing so would result in an error during execution.&lt;/li&gt;
&lt;li&gt;In Elixir, default values for arguments are always defined, but in Erlang, they aren’t.
Overall, both languages are reliable and maintainable. In recent years, Elixir has become the preferred language of the two due to its advanced support, simple syntax, and scalability.

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Elixir features, tools, and uses
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Elixir features and tools
&lt;/h3&gt;

&lt;p&gt;Elixir has many great features such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Elixir compiles to bytecode for the Erlang VM&lt;/li&gt;
&lt;li&gt;Metaprogramming with macros and polymorphism via protocols&lt;/li&gt;
&lt;li&gt;Emphasis on higher-order functions and recursion&lt;/li&gt;
&lt;li&gt;Lazy and async collections with streams&lt;/li&gt;
&lt;li&gt;Pattern matching&lt;/li&gt;
&lt;li&gt;Built-in tooling for things like remote debugging, dependency management, code compilation, and more&lt;/li&gt;
&lt;li&gt;Elixir is dynamically typed, so all types are checked at runtime rather than at compilation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The language also has a solid set of web development tools such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mix&lt;/strong&gt;: Mix is a build tool that allows you to create projects, run tests, manage tasks, and much more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IEx&lt;/strong&gt;: IEx, Elixir’s interactive shell, provides you with many features like auto-complete, debugging, code reloading, and more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Phoenix&lt;/strong&gt;: Phoenix is known to be one of the best web frameworks. It’s based on the MVC architecture just like Ruby on Rails.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Elixir uses
&lt;/h3&gt;

&lt;p&gt;Elixir is great for web applications of any size, web APIs (such as JSON or GraphQL), event-driven systems, distributed systems, internet of things, embedded systems, and much more. Many top companies use Elixir:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Discord&lt;/strong&gt;: Discord used Elixir to build their service and in 2017 successfully handled five million concurrent users and millions of events per second.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Moz&lt;/strong&gt;: Moz used Elixir on their backend to decrease their disk space and improve the speed of their API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pinterest&lt;/strong&gt;: Pinterest uses Elixir for its notification system to minimize the number of servers they use and clean up their code. Elixir helped them improve the performance of their notification system to deliver 14,000 per second.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adobe&lt;/strong&gt;: Adobe used Elixir to build a client/cloud app for collaborative photography workflows.

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Intro to Elixir functional programming
&lt;/h2&gt;

&lt;p&gt;Elixir is a functional programming language. With functional languages like Elixir, we can make better use of our CPU multi-cores and write shorter and more explicit code. To better understand functional programming, I should first introduce the following fundamental principles: &lt;strong&gt;immutability&lt;/strong&gt;, &lt;strong&gt;functions&lt;/strong&gt;, and &lt;strong&gt;declarative code&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In functional programming, all values created in the program are immutable. By default, each function has a stable value, which means that lock mechanisms aren’t needed. This simplifies parallel work. Immutability is showing up more in conventional programming languages. These languages typically provide the immutable mechanism by giving an immutable data type alternative or a method to turn a value immutable. &lt;/p&gt;

&lt;p&gt;Next, let’s talk about functions. In functional programming, functions are the &lt;strong&gt;primary tools for building programs&lt;/strong&gt;. It decreases the complexity of building large apps when functions have the following properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Immutable values&lt;/li&gt;
&lt;li&gt;The result of the function is only affected by the function’s arguments&lt;/li&gt;
&lt;li&gt;The function doesn’t generate effects beyond the returned values&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These functions are also known as &lt;strong&gt;pure functions&lt;/strong&gt;. There are more complex and unpredictable functions, which are known as &lt;strong&gt;impure functions&lt;/strong&gt;. In functional programming, values are always passed explicitly between functions, which makes the inputs and outputs clear. Functions can also be used in arguments and results of functions.&lt;/p&gt;

&lt;p&gt;Finally, let’s take a quick look at declarative code. Declarative programming focuses on &lt;strong&gt;&lt;em&gt;what&lt;/em&gt; is necessary to solve a problem&lt;/strong&gt;, instead of &lt;em&gt;how&lt;/em&gt; to solve a problem (which is what we see with imperative programming). In general, declarative code is typically more clear and concise than imperative code. With more clear and concise code, we run into fewer problems (like bugs!).&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Let's look at some Elixir code!
&lt;/h3&gt;

&lt;p&gt;Now, we’ll take some time to look at some very basic Elixir code from the &lt;a href="https://elixir-lang.org/getting-started/introduction.html" rel="noopener noreferrer"&gt;elixir-lang official documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;
  
  
  Strings
&lt;/h4&gt;

&lt;p&gt;Elixir &lt;strong&gt;uses UTF-8 to encode strings&lt;/strong&gt;. UTF-8 is a variable-width character encoding that uses one to four eight-bit bytes to store each code point. Strings are surrounded by double quotes, like &lt;code&gt;”this”&lt;/code&gt;. Let’s take a look at a simple &lt;code&gt;Hello, World!&lt;/code&gt; in Elixir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IO.puts("Hello, World!")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Atoms
&lt;/h4&gt;

&lt;p&gt;Atoms are constants whose values are their own names. In other languages, they are called &lt;em&gt;symbols&lt;/em&gt;. They’re typically used to enumerate over distinct values:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;iex&amp;gt; :cat
:cat
iex&amp;gt; :dog
:dog
iex&amp;gt; :fish
:fish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Booleans
&lt;/h4&gt;

&lt;p&gt;Elixir supports the booleans &lt;code&gt;true&lt;/code&gt; and &lt;code&gt;false&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;iex&amp;gt; true
true
iex&amp;gt; true == false
false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Arithmetic operations
&lt;/h4&gt;

&lt;p&gt;Let’s take a look at a couple of arithmetic operations in Elixir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;iex&amp;gt; 2 + 2
4
iex&amp;gt; 10 * 2
20
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In Elixir, the divide operator &lt;code&gt;/&lt;/code&gt; always returns as a float:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;iex&amp;gt; 8 / 2
4.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Keyword lists
&lt;/h4&gt;

&lt;p&gt;When we have a list of tuples and the first item of the tuple is an atom, we can call it a &lt;em&gt;keyword list&lt;/em&gt;. Here’s an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;iex&amp;gt; list = [{:c, 1}, {:d, 2}]
[c: 1, d: 2]
iex&amp;gt; list == [c: 1, d: 2]
true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Modules and functions
&lt;/h4&gt;

&lt;p&gt;In Elixir, functions are grouped into modules. An example of a module is the &lt;code&gt;String&lt;/code&gt; module. Here’s an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;iex&amp;gt; String.length("elixir")
6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Other modules include compilation, scripted mode, function capturing, default arguments, and more.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Next steps
&lt;/h2&gt;

&lt;p&gt;Congrats on taking your first steps with Elixir! It’s a functional and dynamic language used for building scalable and maintainable web applications. Elixir has a reputation for being fun and easy to learn, and there’s an active Elixir community where you can interact with other Elixir programmers. There are many companies looking for Elixir developers, meaning there are plenty of job opportunities available if you want to pick up this exciting language. There’s still so much to learn about Elixir programming, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recursion&lt;/li&gt;
&lt;li&gt;Higher-order functions&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/introduction-metaprogramming-elixir" rel="noopener noreferrer"&gt;Metaprogramming&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To get started learning Elixir, check out Educative’s course &lt;a href="https://www.educative.io/courses/functional-programming-elixir" rel="noopener noreferrer"&gt;&lt;strong&gt;Learn Functional Programming with Elixir&lt;/strong&gt;&lt;/a&gt;. In this curated course, you’ll learn the fundamentals of Elixir, advanced concepts, and how to design an app using Elixir and functional programming principles. &lt;br&gt;
&lt;em&gt;Happy learning!&lt;/em&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Learn about other popular programming languages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/web-development-in-python" rel="noopener noreferrer"&gt;A complete guide to web development in Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/learn-java-from-scratch" rel="noopener noreferrer"&gt;Learn Java from scratch with these easy steps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/level-up-javascript-coding-challenges" rel="noopener noreferrer"&gt;Level up your JavaScript skills with 10 coding challenges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
      <category>elixir</category>
    </item>
    <item>
      <title>Is C++ still a good language to learn for 2022?</title>
      <dc:creator>Erin Schaffer</dc:creator>
      <pubDate>Fri, 10 Dec 2021 00:33:38 +0000</pubDate>
      <link>https://dev.to/educative/is-c-still-a-good-language-to-learn-for-2022-41gd</link>
      <guid>https://dev.to/educative/is-c-still-a-good-language-to-learn-for-2022-41gd</guid>
      <description>&lt;p&gt;C++ is a general-purpose programming language created by Bjarne Stroustrup as an extension of the C programming language. It’s widely used for game and web development, machine learning and data mining applications, and much more. In recent years, high-level languages, such as Python, Java, and JavaScript, have seemed to surpass C++ in popularity and usage. This leads developers to ask the question: &lt;strong&gt;&lt;em&gt;Is C++ a good language to learn for 2022?&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;The short answer is yes! But in this article, we’ll dive into a longer answer and get more specific. We’ll explore what C++ is used for, ways to start learning C++, and what kinds of career opportunities C++ experience can bring you.&lt;/p&gt;

&lt;p&gt;Let’s get started!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We’ll cover&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is C++ used for?&lt;/li&gt;
&lt;li&gt;C++ features and advantages&lt;/li&gt;
&lt;li&gt;Should I learn C++ for 2022?&lt;/li&gt;
&lt;li&gt;How can I start learning C++?&lt;/li&gt;
&lt;li&gt;C++ career opportunities&lt;/li&gt;
&lt;li&gt;Wrapping up and next steps&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is C++ used for?
&lt;/h2&gt;

&lt;p&gt;C++ has &lt;strong&gt;many real-world applications&lt;/strong&gt;, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Video game development&lt;/li&gt;
&lt;li&gt;GUI-based applications&lt;/li&gt;
&lt;li&gt;Databases&lt;/li&gt;
&lt;li&gt;Operating systems&lt;/li&gt;
&lt;li&gt;Web browsers&lt;/li&gt;
&lt;li&gt;Computation and graphics&lt;/li&gt;
&lt;li&gt;Banking&lt;/li&gt;
&lt;li&gt;The cloud&lt;/li&gt;
&lt;li&gt;Distributed systems&lt;/li&gt;
&lt;li&gt;Compilers&lt;/li&gt;
&lt;li&gt;Embedded systems&lt;/li&gt;
&lt;li&gt;Enterprise software&lt;/li&gt;
&lt;li&gt;Libraries&lt;/li&gt;
&lt;li&gt;Large-scale server applications&lt;/li&gt;
&lt;li&gt;Code compilers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;C++ is also used to create many popular services, such as MySQL, Microsoft Windows and Office, macOS, and more. It’s a go-to language for &lt;strong&gt;large embedded systems&lt;/strong&gt;. It’s often used for system programming and building applications with resource constraints. C++ is a great language to use whenever you have a large buffer and in cases where you have &lt;strong&gt;high concurrency&lt;/strong&gt; and need &lt;strong&gt;minimum latency&lt;/strong&gt;. This applies to server applications and games. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  C++ features and advantages
&lt;/h2&gt;

&lt;p&gt;There’s a reason why C++ remains one of the most popular programming languages. The language has many solid features and advantages, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Exception handling&lt;/strong&gt;: Exception handling is built into C++. It’s a tool that separates code that detects and handles exceptional circumstances that arise while running programs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Function overloading&lt;/strong&gt;: Function overloading is the process of having two or more functions with the same name but with different parameters. This C++ feature allows you to define more than one definition for a function name or an operator in the same scope.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory management&lt;/strong&gt;: C++ supports dynamic memory allocation (DMA), which helps free up and allocate memory. Its memory manipulation capabilities allow you to customize things and access hardware data directly and write highly performant code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;C++ standard library&lt;/strong&gt;: The C++ standard template library (STL) is filled with templates of ready-to-use libraries for various data structures, arithmetic operations, and algorithms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Object-oriented&lt;/strong&gt;: Object-oriented programming (OOP) concepts allow you to treat data as objects and classes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-paradigm&lt;/strong&gt;: C++ is a multi-paradigm language. This allows you to choose a single approach or mix aspects of different programming paradigms (such as &lt;em&gt;generic&lt;/em&gt;, &lt;em&gt;imperative&lt;/em&gt;, and &lt;em&gt;object-oriented&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Highly portable&lt;/strong&gt;: C++ is highly portable and is used for scripting systems apps which make up a significant portion of Windows, Linux, and Unix operating systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Versatile&lt;/strong&gt;: C++ is versatile and has a large job market. It’s used in many different industries, such as finance, game development, machine learning, and more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalable&lt;/strong&gt;: C++ is great for resource-intensive applications because of its scalability and performance capabilities.

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Should I learn C++ for 2022?
&lt;/h2&gt;

&lt;p&gt;Right now, C++ ranks as the &lt;strong&gt;4th most popular language in the world&lt;/strong&gt; according to the TIOBE index and the IEEE spectrum. C++ is one of the standard languages within back-end development. It’s an extremely fast and efficient language. Many tools and frameworks rely on the speed and efficiency of C++. It’s in high demand now, and it will remain in high demand in 2022 because of its reliability, performance, and efficiency. &lt;/p&gt;

&lt;p&gt;C++ is a great language to learn if you’re a programmer who wants a &lt;strong&gt;deep understanding of how computers work&lt;/strong&gt;. C++ lets you get hands-on with low-level programming concepts, and it helps you understand how computers think and operate. Other languages and programming concepts might make more sense to you after you learn C++.&lt;/p&gt;

&lt;p&gt;Whether or not you want to learn C++ for 2022 depends on your personal and career goals. In general, learning C++ will &lt;strong&gt;open up more opportunities&lt;/strong&gt; for you as a developer. &lt;/p&gt;

&lt;h3&gt;
  
  
  Is C++ hard to learn?
&lt;/h3&gt;

&lt;p&gt;C++ is known to be one of the most difficult programming languages to learn over other popular languages like Python and Java. C++ is hard to learn because of its multi-paradigm nature and more &lt;strong&gt;advanced syntax&lt;/strong&gt;. While it’s known to be especially difficult for beginners to learn, it’s also difficult for programmers with no experience with low-level languages. While it &lt;em&gt;does&lt;/em&gt; take more time to write C++ code, the language has been modernized to present &lt;strong&gt;high-level abstractions&lt;/strong&gt;. These abstractions can be used to code very efficiently. You can write code quickly with C++ 14, C++ 17, and C++ 20.&lt;/p&gt;

&lt;p&gt;While some developers suggest learning C before C++, others argue that if you’re interested in working with C++ in your career or in personal projects, there’s no need to dedicate time to learning C (unless you want to, of course!). If you’re completely new to programming, it’s important to learn &lt;em&gt;computer programming&lt;/em&gt; in a language-agnostic way. There are many fundamental concepts that are critical to software development as a whole. You can set yourself up for success by learning those fundamentals first, so you can dive into a language feeling prepared and confident.&lt;/p&gt;

&lt;p&gt;Many developers believe that learning C++ can help you learn &lt;em&gt;some&lt;/em&gt; other languages, like Java, C#, Python, or Go, a lot more easily.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How can I start learning C++?
&lt;/h2&gt;

&lt;p&gt;The best way to learn a programming language is to jump right in. As mentioned before, the way in which you start learning C++ &lt;strong&gt;will depend on where you’re at as a developer&lt;/strong&gt;. If you’re completely new to programming, we suggest that you take the time to familiarize yourself with fundamental programming concepts so that you can approach a new language with a more solid foundation. When you’re ready to dive into C++, there are many resources available to you. &lt;/p&gt;

&lt;p&gt;There’s no shortage of C++ tutorials and C++ courses you can take to further your learning. If you’re starting from scratch, you’ll want to begin with C++ basics, such as arrays, constructors, and iterators. This &lt;a href="https://www.educative.io/blog/how-to-learn-cpp-the-guide-for-beginners" rel="noopener noreferrer"&gt;C++ beginners tutorial&lt;/a&gt; will help you get started with the fundamentals. If you’ve already learned the basics, this &lt;a href="https://www.educative.io/blog/intermediate-cpp-tutorial" rel="noopener noreferrer"&gt;intermediate C++ tutorial&lt;/a&gt; explores intermediate concepts such as pointers, vectors, and maps. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  C++ career opportunities
&lt;/h2&gt;

&lt;p&gt;As a C++ programmer, you’ll have many different job opportunities to choose from. Many &lt;strong&gt;top tech companies&lt;/strong&gt; are looking for C++ developers. Let’s take a look at some of the job opportunities offered by those companies, along with the average salary for those positions (in Seattle, WA). The following companies are all hiring for software engineers with C++ experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft&lt;/strong&gt;: $126,341&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google&lt;/strong&gt;: $141,591&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Facebook&lt;/strong&gt;: $133,322&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon&lt;/strong&gt;: $126,341&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Boeing&lt;/strong&gt;: $104,827&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Salesforce&lt;/strong&gt;: $118,131&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up and next steps
&lt;/h2&gt;

&lt;p&gt;The C++ programming language remains one of the most popular languages in software engineering and computer science. While it’s known to have a steep learning curve, it’s a widely used low-level programming language used to build many relevant applications. There are many benefits to learning a language that’s close to bare metal because it helps you better understand how computers work. &lt;/p&gt;

&lt;p&gt;There’s no better time than now to get started on your C++ programming journey. Get started learning fundamental C++ programming concepts with Educative’s curated learning path &lt;a href="https://www.educative.io/path/cpp-for-programmers" rel="noopener noreferrer"&gt;&lt;strong&gt;C++ for Programmers&lt;/strong&gt;&lt;/a&gt;. This learning path explores topics such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data types&lt;/li&gt;
&lt;li&gt;Namespaces&lt;/li&gt;
&lt;li&gt;Conditionals&lt;/li&gt;
&lt;li&gt;Polymorphism&lt;/li&gt;
&lt;li&gt;And much more!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The path will get you up to speed with C++. You’ll be taken from basic to advanced C++ concepts, all with hands-on practice, in-browser coding environments, and quizzes to test your understanding. By the end, you’ll have enough experience to confidently solve real-world problems using C++.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy learning!&lt;/em&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Continue learning about C++
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/best-cpp-ides-code-editors" rel="noopener noreferrer"&gt;The 11 best C++ integrated development environments (IDEs) for 2022&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/c-is-a-good-first-language-to-learn" rel="noopener noreferrer"&gt;Why C++ is a good first language to learn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/guide-competitive-programming-cpp" rel="noopener noreferrer"&gt;Introductory guide to competitive programming with C++&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cpp</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>System design fundamentals: What is the CAP theorem?</title>
      <dc:creator>Erin Schaffer</dc:creator>
      <pubDate>Thu, 04 Nov 2021 20:27:48 +0000</pubDate>
      <link>https://dev.to/educative/system-design-fundamentals-what-is-the-cap-theorem-2458</link>
      <guid>https://dev.to/educative/system-design-fundamentals-what-is-the-cap-theorem-2458</guid>
      <description>&lt;p&gt;As you progress through your career as a developer, you’ll be required to think more and more about software architecture and system design. It’s important to be able to design efficient systems and make tradeoffs at scale. System design is a vast field that incorporates many important concepts. A fundamental concept within system design is the CAP theorem. Understanding the CAP theorem is key to understanding how to design strong distributed systems. Today, we’ll dive deeper into the CAP theorem, explaining its meaning, its components, and more.&lt;/p&gt;

&lt;p&gt;Let’s get started!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We’ll cover&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is the CAP theorem?&lt;/li&gt;
&lt;li&gt;Consistency, availability, and partition tolerance&lt;/li&gt;
&lt;li&gt;CAP theorem NoSQL databases&lt;/li&gt;
&lt;li&gt;CAP theorem and microservices&lt;/li&gt;
&lt;li&gt;Wrapping up and next steps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the CAP theorem?
&lt;/h2&gt;

&lt;p&gt;The CAP theorem, or Brewer’s theorem, is a fundamental theorem within the field of system design. It was first presented in 2000 by Eric Brewer, a computer science professor at U.C. Berkeley, during a talk on principles of distributed computing. In 2002, MIT professors Nancy Lynch and Seth Gilbert published a proof of Brewer’s Conjecture. The CAP theorem states that a distributed system can only provide two of three properties simultaneously: &lt;strong&gt;consistency&lt;/strong&gt;, &lt;strong&gt;availability&lt;/strong&gt;, and &lt;strong&gt;partition tolerance&lt;/strong&gt;. The theorem formalizes the tradeoff between consistency and availability when there’s a partition.&lt;/p&gt;

&lt;p&gt;A distributed system is a collection of computers that work together to form a single computer for end users. All of the distributed machines have one shared state and operate concurrently. With distributed systems, users must be able to communicate with any of the distributed machines without knowing it’s only one machine. The distributed system network stores its data on more than just a single node, using multiple physical or virtual machines at the same time.&lt;/p&gt;

&lt;h3&gt;
  
  
  CAP theorem proof
&lt;/h3&gt;

&lt;p&gt;Let’s look at a simple proof of the CAP theorem. Imagine a distributed system consisting of two nodes:&lt;/p&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%2Fwpyt1cq601oqta2cyogu.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%2Fwpyt1cq601oqta2cyogu.png" alt="Image description" width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The distributed system acts as a plain register with the value of variable &lt;em&gt;X&lt;/em&gt;. There’s a network failure that results in a network partition between the two nodes in the system. An end-user performs a write request, and then a read request. Let’s examine a case where a different node of the system processes each request. In this case, our system has two options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It can fail at one of the requests, breaking the system’s &lt;em&gt;availability&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;It can execute both requests, returning a stale value from the read request and breaking the system’s &lt;em&gt;consistency&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system can’t process both requests successfully while also ensuring that the read returns the latest value written by the write. This is because the results of the write operation can’t be propagated from node A to node B because of the network partition. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Consistency, availability, and partition tolerance explained
&lt;/h2&gt;

&lt;p&gt;Now that we have a basic understanding of the CAP theorem, let’s break down the acronym and discuss the meanings of consistency, availability, and partition tolerance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Consistency
&lt;/h3&gt;

&lt;p&gt;In a consistent system, all &lt;strong&gt;nodes see the same data simultaneously&lt;/strong&gt;. If we perform a read operation on a consistent system, it should return the value of the most recent write operation. The read should cause all nodes to return the same data. All users see the same data at the same time, regardless of the node they connect to. When data is written to a single node, it is then replicated across the other nodes in the system.&lt;/p&gt;

&lt;h3&gt;
  
  
  Availability
&lt;/h3&gt;

&lt;p&gt;When availability is present in a distributed system, it means that the &lt;strong&gt;system remains operational all of the time&lt;/strong&gt;. Every request will get a response regardless of the individual state of the nodes. This means that the system will operate even if there are multiple nodes down. Unlike a consistent system, there’s &lt;strong&gt;no guarantee that the response will be the most recent write operation&lt;/strong&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Partition tolerance
&lt;/h3&gt;

&lt;p&gt;When a distributed system encounters a partition, it means that there’s a &lt;strong&gt;break in communication between nodes&lt;/strong&gt;. If a system is partition-tolerant, the system does not fail, regardless of whether messages are dropped or delayed between nodes within the system. To have partition tolerance, the system must replicate records across combinations of nodes and networks.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  CAP theorem NoSQL databases
&lt;/h2&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%2F2q9k7mlybj968bzoow55.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%2F2q9k7mlybj968bzoow55.png" alt="Image description" width="638" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;NoSQL databases are great for distributed networks. They allow for &lt;strong&gt;horizontal scaling&lt;/strong&gt;, and they can quickly scale across multiple nodes. When deciding which NoSQL database to use, it’s important to keep the CAP theorem in mind. NoSQL databases can be classified based on the two CAP features they support:&lt;/p&gt;

&lt;h3&gt;
  
  
  CA databases
&lt;/h3&gt;

&lt;p&gt;CA databases enable consistency and availability across all nodes. Unfortunately, CA databases &lt;strong&gt;can’t deliver fault tolerance&lt;/strong&gt;. In any distributed system, partitions are bound to happen, which means this type of database isn’t a very practical choice. That being said, you still can find a CA database if you need one. Some &lt;strong&gt;relational databases&lt;/strong&gt;, such as PostgreSQL, allow for consistency and availability. You can deploy them to nodes using replication.&lt;/p&gt;

&lt;h3&gt;
  
  
  CP databases
&lt;/h3&gt;

&lt;p&gt;CP databases enable consistency and partition tolerance, but not availability. When a partition occurs, the system has to &lt;strong&gt;turn off inconsistent nodes until the partition can be fixed&lt;/strong&gt;. MongoDB is an example of a CP database. It’s a NoSQL database management system (DBMS) that uses documents for data storage. It’s considered schema-less, which means that it doesn’t require a defined database schema. It’s commonly used in big data and applications running in different locations. The CP system is structured so that there’s only one primary node that receives all of the write requests in a given replica set. Secondary nodes replicate the data in the primary nodes, so if the primary node fails, a secondary node can stand-in.&lt;/p&gt;

&lt;h3&gt;
  
  
  AP databases
&lt;/h3&gt;

&lt;p&gt;AP databases enable availability and partition tolerance, but not consistency. In the event of a partition, all nodes are available, but they’re not all updated. For example, if a user tries to access data from a bad node, they &lt;strong&gt;won’t receive the most up-to-date version of the data&lt;/strong&gt;. When the partition is eventually resolved, most AP databases will sync the nodes to ensure consistency across them. Apache Cassandra is an example of an AP database. It’s a NoSQL database with no primary node, meaning that all of the nodes remain available. Cassandra allows for eventual consistency because users can resync their data right after a partition is resolved.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  CAP theorem and microservices
&lt;/h2&gt;

&lt;p&gt;Microservices are defined as loosely coupled services that can be independently developed, deployed, and maintained. They include their own stack, database, and database model, and communicate with each other through a network. Microservices have become &lt;strong&gt;especially popular in hybrid cloud and multi-cloud environments&lt;/strong&gt;, and they are also widely used in on-premises data centers. If you want to create a microservices application, you can use the CAP theorem to help you determine a database that will best fit your needs.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up and next steps
&lt;/h2&gt;

&lt;p&gt;Congrats on taking your first step with the CAP theorem and distributed systems! Distributed systems allow for lower latency, scalability, increased interconnectivity, and more. The CAP theorem is very important within distributed systems and system design as a whole. While we covered a lot today, there’s still so much more to learn about distributed systems. Some recommended topics to learn next include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Distributed data stores&lt;/li&gt;
&lt;li&gt;Distributed system algorithms&lt;/li&gt;
&lt;li&gt;Atomicity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To get started learning these concepts and more, check out Educative’s course &lt;a href="https://www.educative.io/courses/distributed-systems-practitioners" rel="noopener noreferrer"&gt;&lt;strong&gt;Distributed Systems for Practitioners&lt;/strong&gt;&lt;/a&gt;. In this hands-on course, you’ll explore the design of real-world distributed systems, how to efficiently design large-scale systems, and what concepts you need to know to get the most out of your distributed system.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy learning!&lt;/em&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Continue learning about system design
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/anatomy-machine-learning-system-design-interview" rel="noopener noreferrer"&gt;Anatomy of a machine learning system design interview question&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/top-10-system-design-interview-questions" rel="noopener noreferrer"&gt;Top 10 system design interview questions for software engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/distributed-system-design-patterns" rel="noopener noreferrer"&gt;Top 5 distributed system design patterns&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tutorial</category>
      <category>programming</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>What is multi-cloud?</title>
      <dc:creator>Erin Schaffer</dc:creator>
      <pubDate>Thu, 28 Oct 2021 18:04:52 +0000</pubDate>
      <link>https://dev.to/educative/what-is-multi-cloud-51ap</link>
      <guid>https://dev.to/educative/what-is-multi-cloud-51ap</guid>
      <description>&lt;p&gt;We’re only a couple of months away from the new year, which means it’s time to start looking ahead to the tech trends that will dominate the software industry in 2022. As the new year approaches, we want to help you get familiar with upcoming trends so you can be prepared and start taking your skills to the next level.&lt;/p&gt;

&lt;p&gt;Today, we’ll discuss &lt;strong&gt;&lt;em&gt;multi-cloud&lt;/em&gt;&lt;/strong&gt;. Multi-cloud is a cloud computing model that leverages two or more cloud platforms, allowing you to take advantage of the resources different cloud providers offer. Multi-cloud can help organizations lower their cloud cost, increase resiliency and flexibility, and much more. Gartner estimates that over 75% of cloud customers will adopt a multi-cloud strategy by the end of 2022. With its increase in popularity, it’s an important concept to know!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We’ll cover&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is a multi-cloud environment?&lt;/li&gt;
&lt;li&gt;Advantages of a multi-cloud environment&lt;/li&gt;
&lt;li&gt;Multi-cloud vs hybrid cloud&lt;/li&gt;
&lt;li&gt;Multi-cloud Kubernetes&lt;/li&gt;
&lt;li&gt;Wrapping up and next steps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a multi-cloud environment?
&lt;/h2&gt;

&lt;p&gt;The multi-cloud cloud computing model &lt;strong&gt;leverages two or more cloud platforms&lt;/strong&gt;. Instead of relying on a single cloud provider, the multi-cloud strategy relies on different cloud providers to take advantage of the various cloud services those providers offer. Multi-cloud can refer to combinations of software as a service (SaaS), infrastructure as a service (IaaS), and platform as a service (PaaS) models. Commonly used cloud providers include Google Cloud Platform (GCP), Amazon Web Services (AWS), Microsoft Azure, IBM Cloud, and VMware.&lt;/p&gt;

&lt;p&gt;Different cloud providers offer different cloud resources, such as cloud storage, machine learning, big data analytics, serverless computing, databases, and more. Most businesses that move to the cloud implement some form of a multi-cloud model. A &lt;strong&gt;multi-cloud solution&lt;/strong&gt; is a solution that’s transferable across many different cloud infrastructures. These solutions typically leverage &lt;strong&gt;cloud-native technologies&lt;/strong&gt; and help manage workloads across many different clouds.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What is a cloud-native technology?&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Cloud-native is an approach to app development that leverages the cloud computing delivery model. Cloud-native technologies use tools like containerization, service meshes, declarative APIs, and microservices to allow you to build, deploy, and manage high-impact applications. According to the Cloud Native Computing Foundation (CNCF), these technologies “empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  What is multi-cloud management?
&lt;/h3&gt;

&lt;p&gt;Multi-cloud management is a set of &lt;strong&gt;procedures and tools&lt;/strong&gt; we can use to manage and secure various applications across multiple clouds. Multi-cloud management platforms can be difficult to implement. It can be hard to consistently maintain cloud security across different platforms, deploy apps across various environments, and visualize information from various clouds on a single interface. An effective multi-cloud management solution does the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manages multiple clouds from a single interface&lt;/li&gt;
&lt;li&gt;Supports multiple cloud providers or platforms&lt;/li&gt;
&lt;li&gt;Supports containerization tools like Kubernetes&lt;/li&gt;
&lt;li&gt;Provides visibility into cloud resources&lt;/li&gt;
&lt;li&gt;Provides artificial intelligence and analytics resources

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Advantages of a multi-cloud environment
&lt;/h2&gt;

&lt;p&gt;There are many advantages to adopting a multi-cloud strategy. Let’s take a look at some of the top benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Freedom and flexibility&lt;/strong&gt;: A single provider might not have all the cloud services that you want. Multi-cloud allows you to take advantage of a wide range of resources, and it also prevents vendor lock-in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disaster recovery&lt;/strong&gt;: When leveraging resources from multiple cloud vendors, there’s a small chance that you’ll experience concurrent downtime or outages. Many top cloud providers offer service-level agreements that protect you against downtime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ROI optimization&lt;/strong&gt;: With a multi-cloud infrastructure, you can be selective with the solutions you want to use within your organization. You can allocate your resources effectively and pay only for what you use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reliability&lt;/strong&gt;: Multi-cloud lowers the chances of an unexpected failure shutting down your entire enterprise. You can create redundancies to reduce the risk of failure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shadow IT&lt;/strong&gt;: Shadow IT is the use of IT services, technologies, infrastructures, and projects without receiving formal authorization. Multi-cloud allows you to gain visibility into all cloud services in use, identify breaches, and enforce security policies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portability&lt;/strong&gt;: Containerization technologies and microservices enable easy portability between different cloud providers, which helps decrease integration issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resiliency&lt;/strong&gt;: Multi-cloud allows you to allocate your resources appropriately and build an infrastructure that ensures everything runs smoothly and that the business can quickly bounce back in the event of a disturbance.

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-cloud vs hybrid cloud
&lt;/h2&gt;

&lt;p&gt;The hybrid cloud approach is often confused with the multi-cloud approach, but the two have key differences. A hybrid cloud environment &lt;strong&gt;uses both public cloud and private cloud&lt;/strong&gt;. This allows you to maintain the security of private data within an on-premises cloud solution or within a private cloud. Hybrid cloud solutions leverage private data centers while taking advantage of the resources available from public cloud providers.&lt;/p&gt;

&lt;p&gt;Multi-cloud doesn’t require the use of a private cloud or coordinated operations to work between the different cloud environments. That being said, a multi-cloud infrastructure can implement hybridization, which is sometimes called &lt;strong&gt;&lt;em&gt;hybrid multi-cloud&lt;/em&gt;&lt;/strong&gt;. This means that they use both public and private cloud, and these different cloud environments have some level of coordination between the two, allowing you to work within a single cloud IT infrastructure. A hybrid multi-cloud environment allows you to easily integrate Agile and DevOps best practices, securely and consistently deploy and scale data across various environments, and fully control your workloads.&lt;/p&gt;

&lt;h3&gt;
  
  
  Public cloud and private cloud
&lt;/h3&gt;

&lt;p&gt;Public cloud is a cloud deployment model where &lt;strong&gt;resources are hosted by a cloud service provider&lt;/strong&gt; and shared across multiple organizations. Public clouds allow organizations to scale their resources without adding more physical resources, and only use cloud resources when necessary. This also means that the organization saves money, because the organization is only paying for resources when they need them, and they aren’t spending money on as much physical hardware or software packages.&lt;/p&gt;

&lt;p&gt;Private cloud is a cloud deployment model where &lt;strong&gt;resources are hosted by an organization’s own infrastructure&lt;/strong&gt;. The private cloud is typically hosted at either the organization’s own data center or at a third-party facility. This environment is usually physically secured and protected. The organization using the cloud service usually manages the private cloud, including performing maintenance, upgrades, software and cloud data management, and more. Private clouds allow organizations to have the same level of control and safety as a normal on-premises environment at a lower cost.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-cloud Kubernetes
&lt;/h2&gt;

&lt;p&gt;Container orchestration technologies, such as Kubernetes, play a major role in an effective multi-cloud architecture. Multi-cloud can be difficult to implement because the more clouds you have, the more difficult it is to consistently manage them. Kubernetes can help &lt;strong&gt;reduce some of the complications&lt;/strong&gt; of implementing a multi-cloud architecture. &lt;/p&gt;

&lt;p&gt;A major complication in multi-cloud is provisioning. With Kubernetes, you can &lt;strong&gt;host all of your workloads&lt;/strong&gt; on it and use the same configurations for all of your clouds in your multi-cloud architecture. If you &lt;strong&gt;organize your workloads to run in Kubernetes&lt;/strong&gt;, you only need to configure your monitoring tools to monitor Kubernetes, which takes a lot of the stress out of monitoring your entire infrastructure. Kubernetes also helps &lt;strong&gt;strengthen security&lt;/strong&gt; because you can standardize configurations to reduce the chance of oversights. Kubernetes also has its own security features that you can leverage to secure your infrastructure. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up and next steps
&lt;/h2&gt;

&lt;p&gt;Congrats on taking your first steps with multi-cloud! The multi-cloud model will continue to increase in popularity, as the cloud continues to take over the business landscape. Adopting a multi-cloud architecture has many benefits and use cases, allowing better business continuity, disaster recovery, flexibility, and resiliency. Combining containerization technology, like Kubernetes, with multi-cloud allows you to move your contained apps between different clouds and still have full functionality. It’s a key piece of multi-cloud deployment.&lt;br&gt;
There’s still so much more to learn about the cloud. Some recommended topics to cover next include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Increasing network latency with Kubernetes&lt;/li&gt;
&lt;li&gt;Deployment automation&lt;/li&gt;
&lt;li&gt;AWS and Azure connectivity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To get started learning these concepts and more, check out Educative’s learning path &lt;a href="https://www.educative.io/path/devops-for-developers" rel="noopener noreferrer"&gt;&lt;strong&gt;DevOps for Developers&lt;/strong&gt;&lt;/a&gt;. In this hands-on learning path, you’ll master DevOps fundamentals, such as Kubernetes and Docker, app deployment, and AWS Terraform. By the end, you’ll have the cutting-edge skills you need to help implement effective cloud infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy learning!&lt;/em&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Continue learning about the cloud
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/what-is-virtualization" rel="noopener noreferrer"&gt;What is virtualization?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/roadmap-to-cloud-engineer-jobs" rel="noopener noreferrer"&gt;Roadmap to cloud jobs: How and why to become a cloud engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/crack-aws-certification-exam" rel="noopener noreferrer"&gt;Cracking the AWS certification exams: How to prepare&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>programming</category>
      <category>codenewbie</category>
      <category>beginners</category>
      <category>cloud</category>
    </item>
    <item>
      <title>What is Swift? Features, advantages, and syntax basics</title>
      <dc:creator>Erin Schaffer</dc:creator>
      <pubDate>Wed, 27 Oct 2021 18:27:27 +0000</pubDate>
      <link>https://dev.to/educative/what-is-swift-features-advantages-and-syntax-basics-46gj</link>
      <guid>https://dev.to/educative/what-is-swift-features-advantages-and-syntax-basics-46gj</guid>
      <description>&lt;p&gt;We’re only a couple of months away from the new year, which means it’s time to start looking ahead to the tech trends that will dominate the software industry in 2022. As the new year approaches, we want to help you get familiar with upcoming trends so you can be prepared and start taking your skills to the next level. Today, we’ll discuss &lt;strong&gt;&lt;em&gt;Swift&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The Swift programming language is a general-purpose, open-source programming language designed by Apple. The language is influenced by Python, making it fast and intuitive. Swift is mainly used for native iOS and macOS development. Many popular apps including LinkedIn, Lyft, and WordPress are written in Swift. If you’re interested in iOS development, Swift is a great language to learn. Let’s learn more about this popular language!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We’ll cover&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is Swift?&lt;/li&gt;
&lt;li&gt;Why should I learn Swift?&lt;/li&gt;
&lt;li&gt;Swift vs Objective-C&lt;/li&gt;
&lt;li&gt;Introduction to Swift syntax&lt;/li&gt;
&lt;li&gt;Wrapping up and next steps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Swift is a multi-paradigm, general-purpose, open-source programming language for iPadOS, macOS, tvOS, watchOS, and &lt;strong&gt;iOS development&lt;/strong&gt;. It was created by Apple in 2014 to give developers a powerful language to develop iOS apps. According to swift.org, the language was designed to be &lt;strong&gt;safe, fast, and expressive&lt;/strong&gt;. It’s intended to be a replacement for C-based languages. The Swift language is constantly evolving, and the community continues to grow. Swift source code can be found on GitHub, making it easy for anyone to access the code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Swift features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Powerful generics&lt;/strong&gt;: Generics allow you to write flexible, reusable functions and types that can work with any type. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native error handling&lt;/strong&gt;: Swift provides support for throwing, catching, propagating, and manipulating errors at runtime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structs and classes&lt;/strong&gt;: Swift allows you to define a structure or class in a single file, and the external interface is made available for other code to use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol extensions&lt;/strong&gt;: Swift allows you to define behavior on protocols themselves, rather than in global functions or individual conformances.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory safety&lt;/strong&gt;: Swift automatically manages memory and prevents unsafe behavior from happening in your code. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory management&lt;/strong&gt;: With Automatic Reference Counting (ARC), Swift tracks and manages our app’s memory usage. This means we don’t need to worry about memory management ourselves.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible enumerations&lt;/strong&gt;: Swift enums support pattern matching and can have payloads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Package manager&lt;/strong&gt;: The Swift package manager is a cross-platform tool we can use to build, run, test, and package Swift libraries and executables.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debugging&lt;/strong&gt;: Swift uses the LLDB debugger, which provides you with a REPL and debugger to enable integrated debugging, consistent formatting, failure recovery, and expression evaluation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source and binary compatibility&lt;/strong&gt;: The latest version of Swift has binary compatibility for apps. Swift libraries are included in every operating system release, so your apps will use the latest version of the library in the OS, and your code can run without recompiling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tuples&lt;/strong&gt;: Tuples allow us to create and share value groupings. We can use tuples to return multiple values as a single value.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Closure syntax&lt;/strong&gt;: Swift has a lightweight closure syntax, which has optimizations to enable a clutter-free syntax and clear style.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why should I learn Swift?
&lt;/h2&gt;

&lt;p&gt;Swift was designed to be &lt;strong&gt;easy to learn&lt;/strong&gt; and easy to use. Apple created the language with new coders in mind. Whether you’re still in school, exploring a new career path, or wanting to learn how to code, Swift was created to be a simple and &lt;strong&gt;intuitive&lt;/strong&gt; first language to learn. If you’re new to coding, Swift Playgrounds is an iPad app that makes it easy to get started with Swift coding.&lt;/p&gt;

&lt;p&gt;Once you learn Swift, you’ll be an appealing candidate for potential employers. Swift developers are in &lt;strong&gt;high demand&lt;/strong&gt;. According to Apple, the company has created around &lt;strong&gt;two million jobs&lt;/strong&gt; in the United States. According to Indeed, the average salary for an iOS developer in the U.S. is &lt;strong&gt;$116,804&lt;/strong&gt;. If you want to get into app development, Swift is a smart language to learn.&lt;/p&gt;

&lt;p&gt;Let’s take a look at some of the pros and cons of the Swift programming language.&lt;/p&gt;

&lt;h3&gt;
  
  
  Swift pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fast and powerful&lt;/strong&gt;: Swift uses LLVM compiler technology and its standard library makes writing code intuitive and efficient.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern&lt;/strong&gt;: Swift APIs are easy to read and maintain. Inferred types make your code cleaner and less error-prone. Modules eliminate headers and provide namespaces.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easy to learn&lt;/strong&gt;: Swift was designed with beginner programmers in mind. You can use Swift Playgrounds for iPad to get started with Swift code, and you can access courses to learn how to build Xcode apps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safe&lt;/strong&gt;: Swift has a variety of safety features, such as automatic memory management, value types, and variable initialization. In Swift, objects can never be &lt;code&gt;nil&lt;/code&gt;, and the Swift compiler will stop you if you try to use a &lt;code&gt;nil&lt;/code&gt; object. These features help prevent runtime crashes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-platform&lt;/strong&gt;: Swift supports all Apple platforms, Linux, Windows, and Ubuntu.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic libraries&lt;/strong&gt;: Dynamic libraries exist outside of your code and are uploaded when needed. Libraries are integrated into every device release.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Large community&lt;/strong&gt;: Swift has one of the most active and rich open-source communities. Also, there are a lot of resources to help you learn the language.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Swift cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Relatively new language&lt;/strong&gt;: Swift is still a young language. This means that some of its capabilities and resources aren’t as robust as other programming languages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weak cross-platform support&lt;/strong&gt;: While Swift does support all Apple platforms, Linux, and Windows, it works best for native iOS development.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frequent updates&lt;/strong&gt;: Swift is a newer language and has frequent updates. This can make it hard to find the right tools to help with certain tasks. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IDE support&lt;/strong&gt;: Xcode, the official Apple IDE, falls short in certain support areas, including syntax highlighting, autocomplete, refactoring, and compiling.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Swift vs Objective-C
&lt;/h2&gt;

&lt;p&gt;Objective-C is a general-purpose, object-oriented programming language. It was the primary programming language used for OS X and iOS development before Swift came along in 2014. It combines &lt;strong&gt;features of C and Smalltalk&lt;/strong&gt;. After the creation of Swift, Objective-C began to decline in use and popularity, although existing apps written in Objective-C will still need to be maintained.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;So, what makes Swift the better choice?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;First, it’s important to note that Swift is not the direct successor to Objective-C. Both languages have different capabilities and can be used together for mobile app development. Let’s look at a comparison of the two languages.&lt;/p&gt;

&lt;h3&gt;
  
  
  Swift
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;With Swift, you can develop in Xcode, Swift Playgrounds, Cocoa Touch, and more.&lt;/li&gt;
&lt;li&gt;As of now, Swift requires at least iOS 7. This means that iPhones and iPads developed before 2014 won’t be compatible with your apps. &lt;/li&gt;
&lt;li&gt;Swift is a modern, human-friendly language with a simple syntax, which means that the speed of coding is faster.&lt;/li&gt;
&lt;li&gt;According to Apple, Swift is 2.6 times faster than Objective-C.&lt;/li&gt;
&lt;li&gt;Swift has rich documentation that is constantly updated.&lt;/li&gt;
&lt;li&gt;The demand for Swift developers is increasing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Objective-C
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;With Objective-C, you mainly develop in Xcode.&lt;/li&gt;
&lt;li&gt;Your apps will run on any available version of iOS.&lt;/li&gt;
&lt;li&gt;Using Objective-C typically results in a decreased speed of coding because the language isn’t as intuitive and human-friendly.&lt;/li&gt;
&lt;li&gt;Objective-C is 2.6 times slower than Swift, and it takes longer to write because of its more complex syntax.&lt;/li&gt;
&lt;li&gt;Objective-C has rich documentation that isn’t updated frequently.&lt;/li&gt;
&lt;li&gt;The demand for Objective-C developers is decreasing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Overall, Swift is a more desirable language to choose because it’s safer, faster, more intuitive, and interactive. Swift has &lt;strong&gt;Objective-C interoperability&lt;/strong&gt;, which means that Swift code can live alongside existing Objective-C files. With Swift, you’ll also have complete access to Objective-C APIs.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Introduction to Swift syntax
&lt;/h2&gt;

&lt;p&gt;Swift is known for its simple and intuitive syntax. Let’s take a look at some of the Swift syntax basics:&lt;/p&gt;
&lt;h3&gt;
  
  
  Hello World
&lt;/h3&gt;

&lt;p&gt;In Swift, a &lt;code&gt;Hello World!&lt;/code&gt; program is simple. It can be done in one line, and you don’t need to import any libraries or additional functionalities. Swift also doesn’t require semicolons at the end of statements.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;print("Hello World!)

=&amp;gt; Hello World!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Variables and constants
&lt;/h3&gt;

&lt;p&gt;In Swift, you use &lt;code&gt;var&lt;/code&gt; to make a variable and &lt;code&gt;let&lt;/code&gt; to make a constant. Variables and constants need to have the same type as the value you want to assign to them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var myVariable = 10

let myConstant = 10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You don’t have to explicitly write the type. If you provide a value when creating a variable or a constant, the compiler can infer what type it is. For example, the compiler will infer that &lt;code&gt;ourVariable&lt;/code&gt; is an integer because its value is set to an integer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ourVariable = 25
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want to convert a value to a different type, make an explicit instance of the desired type.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let age = 3

let myCatIs = "My cat is " + String(age)

print(myCatIs)

=&amp;gt; My cat is 3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There’s an easier way to include an integer in a string. You put the value in parentheses, and then put a backslash before the parentheses.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let cats = 5

let dogs = 10

let catsAmount = "I have \(cats) cats."

let dogsAmount = "I have \(dogs) dogs."

let petsAmount = "I have \(cats + dogs) pets."

print(petsAmount)

=&amp;gt; I have 15 pets.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Arrays and dictionaries
&lt;/h3&gt;

&lt;p&gt;You can create arrays and dictionaries using brackets. You access elements by putting the index or key in the brackets. Your array will grow automatically as you add new elements.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var groceryList = ["eggs", "yogurt", "cheese"]

groceryList[1] = "bread"

groceryList.append("coffee")

print(groceryList)

=&amp;gt; ["eggs", "bread", "cheese", "coffee"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up and next steps
&lt;/h2&gt;

&lt;p&gt;Congrats on taking your first step with Swift! Swift is a general-purpose, open-source programming language mainly used for native iOS and macOS development. Many of the apps on the app store are written in Swift. Swift is growing in popularity, so it’s a good time to learn the language. We covered some of the basics today, but there’s still so much more to learn about Swift programming, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Property wrappers&lt;/li&gt;
&lt;li&gt;Constants&lt;/li&gt;
&lt;li&gt;SwiftUI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To get started learning these concepts and more, check out Educative’s course &lt;a href="https://www.educative.io/courses/swift-programming-mobile-app" rel="noopener noreferrer"&gt;&lt;strong&gt;Swift Programming for Mobile App Development&lt;/strong&gt;&lt;/a&gt;. In this hands-on course, you’ll cover topics ranging from arrays, dictionaries, integers, object-oriented programming, error handling, and more. By the end, you’ll have the foundational knowledge you need to begin diving deeper into Apple-based app development.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy learning!&lt;/em&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Continue learning about app development
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/android-development-app-kotlin" rel="noopener noreferrer"&gt;How to develop your first Android app with Kotlin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/java-vs-javascript" rel="noopener noreferrer"&gt;Java vs JavaScript: What’s the difference?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/build-modern-apps-progressive-web-apps" rel="noopener noreferrer"&gt;Build modern, offline apps with Progressive Web Apps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>programming</category>
      <category>ios</category>
      <category>development</category>
      <category>swift</category>
    </item>
    <item>
      <title>What is CI/CD in DevOps?</title>
      <dc:creator>Erin Schaffer</dc:creator>
      <pubDate>Thu, 21 Oct 2021 22:09:43 +0000</pubDate>
      <link>https://dev.to/educative/what-is-cicd-in-devops-3lg4</link>
      <guid>https://dev.to/educative/what-is-cicd-in-devops-3lg4</guid>
      <description>&lt;p&gt;We’re only a couple of months away from the new year, which means it’s time to start looking ahead to the tech trends that will dominate the software industry in 2022. As the new year approaches, we want to help you get familiar with upcoming trends so you can be prepared and start taking your skills to the next level. Today, we’ll discuss &lt;strong&gt;&lt;em&gt;CI/CD&lt;/em&gt;&lt;/strong&gt;. CI/CD is a DevOps practice that enables software development teams to automate their software development lifecycle. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We’ll cover&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is CI/CD?&lt;/li&gt;
&lt;li&gt;What is continuous integration?&lt;/li&gt;
&lt;li&gt;What is continuous delivery?&lt;/li&gt;
&lt;li&gt;What is continuous deployment?&lt;/li&gt;
&lt;li&gt;CI/CD tools&lt;/li&gt;
&lt;li&gt;Wrapping up and next steps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is CI/CD?
&lt;/h2&gt;

&lt;p&gt;CI/CD is an important &lt;strong&gt;DevOps practice&lt;/strong&gt; and an &lt;strong&gt;Agile methodology best practice&lt;/strong&gt;. This practice allows development teams to frequently deliver and deploy applications and accelerate the application development process. Introducing a CI/CD pipeline into our software development lifecycle allows us to efficiently &lt;strong&gt;implement automation&lt;/strong&gt; and monitor code changes, new features, potential bug fixes, and more.&lt;/p&gt;

&lt;p&gt;CI/CD typically refers to continuous integration and continuous delivery, but the “CD” can also stand for continuous deployment. Continuous delivery and continuous deployment both refer to automating stages of the CI/CD pipeline, but continuous deployment goes a step further. The purpose of continuous delivery is to make it easy to deploy new code. The purpose of continuous deployment is to allow teams to be &lt;strong&gt;“hands-off”&lt;/strong&gt; in the process by automating the deployment stage.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Cloud-native CI/CD&lt;/strong&gt;: A cloud-native CI/CD pipeline allows us to take full advantage of cloud computing services and features, such as containerization, going serverless, and implementing a multi-cloud infrastructure. A cloud-native app is built to run in the cloud. The cloud-native CI/CD process supports cloud services throughout the software development lifecycle.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Benefits of CI/CD
&lt;/h3&gt;

&lt;p&gt;There are many benefits of implementing CI/CD into your software development lifecycle. Let’s take a look at some of them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Increased speed&lt;/strong&gt;: With an automated CI/CD pipeline, teams can ship changes every hour, day, week, month, etc., and we can optimize each stage of the process. New changes and features can be launched quickly, which allows you to respond to new trends and address any issues that come up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easy maintenance&lt;/strong&gt;: When it’s time to perform routine maintenance, you don’t want all of the system to shut down at once. To address this problem, you can create microservices in the architecture of your code so that individual areas of the system are taken down for maintenance instead of the entire system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved collaboration and visibility&lt;/strong&gt;: A CI/CD pipeline allows many people to get involved in the process, which promotes visibility and collaboration across different teams and orgs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time feedback&lt;/strong&gt;: Shipping regular updates allows you to receive more immediate feedback from users. It also allows you to experiment with different features and fixes, and then hear about their performance shortly after deployment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continuous reliability and continuous testing&lt;/strong&gt;: &lt;em&gt;Continuous reliability&lt;/em&gt;, or test reliability, improves in a CI/CD pipeline. This is because incremental changes are implemented one at a time, which allows for more precise and accurate tests to be conducted continuously.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-quality code&lt;/strong&gt;: With CI/CD, your code is tested regularly. This means that you’ll discover bugs sooner and fix them more quickly. &lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is continuous integration?
&lt;/h2&gt;

&lt;p&gt;Continuous integration refers to the build / integration stage of the software release process. It’s a stage where developers &lt;strong&gt;consistently merge their changes into the main repository&lt;/strong&gt; of a version control system (like Git). After these changes are merged into the main repository, automated builds and tests are run. Before code changes are committed, you can run unit tests to verify the code before integrating it into the main repository. If you don’t run the tests yourself, the CI service performs automated tests and builds on any new code changes. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is continuous delivery?
&lt;/h2&gt;

&lt;p&gt;Continuous delivery expands upon continuous integration. It is a delivery process that allows us to &lt;strong&gt;automatically test and upload code changes to a repository&lt;/strong&gt; (like GitHub), and then deploy all code changes to a testing environment or a production environment. With a continuous delivery pipeline, we can further &lt;strong&gt;automate testing&lt;/strong&gt; beyond just unit tests and perform UI tests, integration tests, load tests, and more. When we thoroughly test the codebase, we can verify that the application is error-free and ready for deployment. With continuous delivery, the operations team triggers the deployment instead of it happening automatically (this is where continuous deployment comes in).&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is continuous deployment?
&lt;/h2&gt;

&lt;p&gt;It’s common to mistake continuous deployment for continuous delivery. Continuous deployment goes a step beyond continuous delivery. It’s a software release process that refers to the &lt;strong&gt;automatic deployment of applications&lt;/strong&gt; into production. Continuous deployment releases the application from the repository to production, which eliminates the need for human interference. Since tests are still implemented throughout the process, problematic code will not be deployed to production. Development teams are notified when tests fail so they can take the necessary steps to fix the problem before deployment.&lt;/p&gt;

&lt;p&gt;Continuous deployment is beneficial because it &lt;strong&gt;speeds up the delivery&lt;/strong&gt; of the application and the feedback loop with users. It allows teams to increase productivity and efficiency and rapidly push their software to the market. Verified and tested applications can be instantaneously deployed, which allows developers to focus on other tasks, including new features, updates, bug fixes, and more. While there are many advantages to implementing continuous deployment, the initial implementation itself can be expensive. The continuous deployment pipeline may require ongoing maintenance and updates to ensure it runs as smoothly as possible.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  CI/CD tools
&lt;/h2&gt;

&lt;p&gt;A good CI/CD tool can help you create a strong CI/CD pipeline. Popular CI/CD tools include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Jenkins&lt;/strong&gt;: Jenkins is an open-source, Java-based automation server that supports building, deploying, and automating software development processes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CircleCI&lt;/strong&gt;: CircleCI supports software development and publishing. It allows you to automate the entire pipeline, and integrate with services like GitHub, GitHub Enterprise, and Bitbucket to perform builds when code is committed. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitLab&lt;/strong&gt;: GitLab provides a suite of tools for managing the software development lifecycle. You can perform builds, run tests, and deploy code. It also allows you to build jobs in a VM, Docker container, or a different server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Major cloud providers, such as Microsoft, Amazon, and Google, also offer CI/CD process tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Azure DevOps&lt;/strong&gt;: Azure DevOps provides a variety of CI/CD tools, like Git repo management, testing, reporting, and more. It provides support for Azure, Kubernetes, and VM-based resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS CodePipeline&lt;/strong&gt;: AWS CodePipeline is a continuous delivery service that allows you to automate release pipelines. It easily integrates with third-party services like GitHub.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Build from Google Cloud Platform (GCP)&lt;/strong&gt;: Cloud Build from GCP is a serverless CI/CD platform that allows you to build software across all languages, such as Java and Go, deploy across multiple environments, and access cloud-hosted CI/CD workflows within your own private network.

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up and next steps
&lt;/h2&gt;

&lt;p&gt;Congrats on taking your first step with CI/CD! It’s an important DevOps practice that enforces automation in the building, testing, and deployment of applications. CI/CD is just one part of DevOps. There’s still so much more to learn about DevOps, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Split API pods&lt;/li&gt;
&lt;li&gt;Collecting and querying metrics&lt;/li&gt;
&lt;li&gt;Creating a remote development environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To get started learning these concepts and more, check out Educative’s learning path &lt;a href="https://www.educative.io/path/devops-for-developers" rel="noopener noreferrer"&gt;&lt;strong&gt;DevOps for Developers&lt;/strong&gt;&lt;/a&gt;. In this hands-on learning path, you’ll work with popular DevOps tools like Docker and Kubernetes. You’ll learn how to work with Docker containers, the fundamentals of Kubernetes, and more about CI/CD. By the end, you’ll have the skills to excel in any DevOps role.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy learning!&lt;/em&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Continue learning about DevOps
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/ansible-for-beginners" rel="noopener noreferrer"&gt;Ansible for beginners: Get started with IT automation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/chaos-engineering-process-principles" rel="noopener noreferrer"&gt;Chaos engineering 101: Principles, process, and examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/yaml-tutorial" rel="noopener noreferrer"&gt;YAML tutorial: Get started in 5 minutes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
      <category>git</category>
      <category>github</category>
      <category>testing</category>
    </item>
    <item>
      <title>What is Hadoop?</title>
      <dc:creator>Erin Schaffer</dc:creator>
      <pubDate>Wed, 20 Oct 2021 22:25:06 +0000</pubDate>
      <link>https://dev.to/educative/what-is-hadoop-3fni</link>
      <guid>https://dev.to/educative/what-is-hadoop-3fni</guid>
      <description>&lt;p&gt;The Hadoop framework provides an open-source platform to process large amounts of data across clusters of computers. Because of its powerful features, it has become extremely popular in the big data field. Hadoop allows us to store any kind of data and handle multiple concurrent tasks. Today, we’re going to learn more about this platform and discuss the Hadoop ecosystem, how Hadoop works, its pros and cons, and much more.&lt;/p&gt;

&lt;p&gt;Let’s get started!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We’ll cover&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is Apache Hadoop?&lt;/li&gt;
&lt;li&gt;Hadoop ecosystem&lt;/li&gt;
&lt;li&gt;How does Hadoop work?&lt;/li&gt;
&lt;li&gt;Hadoop pros, cons, and use cases&lt;/li&gt;
&lt;li&gt;Hadoop vs Spark&lt;/li&gt;
&lt;li&gt;
Wrapping up and next steps

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Apache Hadoop?
&lt;/h2&gt;

&lt;p&gt;Hadoop is an open-source software framework developed by the Apache Software Foundation. It uses programming models to &lt;strong&gt;process large data sets&lt;/strong&gt;. Hadoop is written in Java, and it’s built on &lt;strong&gt;Hadoop clusters&lt;/strong&gt;. These clusters are collections of computers, or nodes, that work together to execute computations on data. Apache has other software projects that integrate with Hadoop, including ones to perform data storage, manage Hadoop jobs, analyze data, and much more. We can use Hadoop with cloud services such as Amazon AWS, Microsoft Azure, and Cloudera to manage and organize our &lt;strong&gt;big data efforts&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  History of Hadoop
&lt;/h3&gt;

&lt;p&gt;Apache Hadoop started in 2002 when Doug Cutting and Mike Cafarella were working on Apache Nutch. They learned that Nutch wasn’t fully capable of handling large amounts of data, so they began brainstorming for a solution. They learned about the architecture of the Google File System (GFS) and the MapReduce technique, which processes large data sets. They started implementing &lt;strong&gt;GFS and MapReduce techniques&lt;/strong&gt; into their open-source Nutch project, but Nutch still didn’t fully meet their needs.&lt;/p&gt;

&lt;p&gt;When Cutting joined Yahoo in 2006, he formed a new project called Hadoop. He separated the distributed computing parts from Apache Nutch and worked with Yahoo to design Hadoop so that it could &lt;strong&gt;handle thousands of nodes&lt;/strong&gt;. In 2007, Yahoo tested Hadoop on a 1,000 node cluster and began using it internally. In early 2008, Hadoop was released as an open-source project at the Apache Software Foundation. Later that year, they successfully tested Hadoop on a 4,000 node cluster.&lt;/p&gt;

&lt;p&gt;In 2009, Hadoop was capable of &lt;strong&gt;handling billions of searches and indexing millions of web pages&lt;/strong&gt;. At this time, Cutting joined the Cloudera team to help spread Hadoop into the cloud industry. Finally, in 2011, version 1.0 of Hadoop was released. The latest version (3.3.1) was released in 2021.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Hadoop ecosystem
&lt;/h2&gt;

&lt;p&gt;The Hadoop ecosystem is a &lt;strong&gt;suite of services&lt;/strong&gt; we can use to work with big data initiatives. The four main elements of the ecosystem include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MapReduce&lt;/li&gt;
&lt;li&gt;Hadoop Distributed File System (HDFS)&lt;/li&gt;
&lt;li&gt;Yet Another Resource Negotiator (YARN)&lt;/li&gt;
&lt;li&gt;Hadoop Common
Let’s take a closer look at each of these services.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  MapReduce
&lt;/h3&gt;

&lt;p&gt;Hadoop MapReduce is a &lt;strong&gt;programming model&lt;/strong&gt; used for distributed computing. With this model, we can process large amounts of data in parallel on large clusters of commodity hardware. With MapReduce, we can use &lt;em&gt;Map&lt;/em&gt; and &lt;em&gt;Reduce&lt;/em&gt;. With Map, we can convert a set of data into tuples (key/value pairs). Reduce takes the output of Map as input and combines the tuples into smaller sets of tuples. MapReduce makes it easy to &lt;strong&gt;scale data processing&lt;/strong&gt; to run tens of thousands of machines in a cluster.&lt;/p&gt;

&lt;p&gt;During MapReduce jobs, Hadoop sends the tasks to their respective servers in the cluster. When the tasks are completed, the clusters collect and reduce data into a result and send the result back to the Hadoop server.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hadoop Distributed File System (HDFS)
&lt;/h3&gt;

&lt;p&gt;As the name suggests, HDFS is a &lt;strong&gt;distributed file system&lt;/strong&gt;. It handles large sets of data and runs on commodity hardware. HDFS helps us scale single Hadoop clusters to multiple nodes, and it helps us perform &lt;strong&gt;parallel processing&lt;/strong&gt;. The built-in servers, &lt;em&gt;NameNode&lt;/em&gt; and &lt;em&gt;DataNode&lt;/em&gt;, help us check the status of our clusters. HDFS is designed to be highly fault-tolerant, portable, and cost-effective.&lt;/p&gt;

&lt;h3&gt;
  
  
  Yet Another Resource Negotiator (YARN)
&lt;/h3&gt;

&lt;p&gt;Hadoop YARN is a &lt;strong&gt;cluster resource management&lt;/strong&gt; and job scheduling tool. YARN also works with the data we store in HDFS, allowing us to perform tasks such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Graph processing&lt;/li&gt;
&lt;li&gt;Interactive processing&lt;/li&gt;
&lt;li&gt;Stream processing&lt;/li&gt;
&lt;li&gt;Batch processing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It dynamically allocates resources and schedules application processing. YARN supports MapReduce, along with multiple other processing models. It efficiently utilizes resources and is &lt;strong&gt;backward compatible&lt;/strong&gt;, meaning that it can run on previous Hadoop versions without any issues. &lt;/p&gt;

&lt;h3&gt;
  
  
  Hadoop Common
&lt;/h3&gt;

&lt;p&gt;Hadoop Common, also known as Hadoop Core, provides &lt;strong&gt;Java libraries&lt;/strong&gt; that we can use across all of our Hadoop modules.&lt;/p&gt;

&lt;h3&gt;
  
  
  Other components include:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cassandra&lt;/strong&gt;: Cassandra is a wide-column store NoSQL database management system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flume&lt;/strong&gt;: Flume aggregates, collects, and moves large amounts of log data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pig&lt;/strong&gt;: Pig is a high-level programming language used to analyze large data sets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HBase&lt;/strong&gt; - HBase is a non-relational database management system that runs on top of HDFS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hive&lt;/strong&gt;: Apache Hive is a fault-tolerant and SQL-like data warehouse software that handles reading, writing, and managing data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lucene&lt;/strong&gt;: Lucene is an open-source search engine software library written in Java. It provides robust search and indexing features. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mahout&lt;/strong&gt;: Apache Mahout is an open-source project used to create scalable machine learning algorithms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Oozie&lt;/strong&gt;: Oozie is a workload scheduling system used to handle Hadoop jobs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spark MLib&lt;/strong&gt;: MLlib is a scalable machine learning library with Java, Scala, R, and Python APIs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solr&lt;/strong&gt;: Solr is an enterprise-search platform built on Lucene.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sqoop&lt;/strong&gt;: Sqoop is a CLI application used to transfer data between relational databases and Hadoop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Submarine&lt;/strong&gt;: Submarine is a cloud-native machine learning and deep learning platform. It supports data processing, algorithm development, ML frameworks, and containerization efforts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zookeeper&lt;/strong&gt;: Zookeeper is a centralized server for reliable distributed cloud application coordination.

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How does Hadoop work?
&lt;/h2&gt;

&lt;p&gt;In the previous section, we discussed a large amount of the services that integrate with Hadoop. We now know that the Hadoop ecosystem is large and extensible. It allows us to perform many tasks, such as collecting, storing, analyzing, processing, and managing big data. Hadoop provides us with a platform in which we can build other services and applications. &lt;/p&gt;

&lt;p&gt;Applications can use &lt;strong&gt;API operations&lt;/strong&gt; to connect to NameNode and place data in Hadoop clusters. &lt;code&gt;NameNode&lt;/code&gt; replicates this data in chunks across DataNodes. We can use MapReduce to run jobs, query data, and reduce tasks in HDFS. Map tasks run on each node against the files we supply, and reduce tasks, or reducers, aggregate and organize our output. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Hadoop pros, cons, and use cases
&lt;/h2&gt;

&lt;p&gt;Hadoop is a popular platform that comes with its pros and cons. Let’s take a look at them, and then we’ll discuss a handful of use cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost-effective&lt;/strong&gt;: Traditionally, it costs a lot of money to store large amounts of data. Hadoop solves this problem, and it also stores all raw data so it can be accessed whenever needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High availability&lt;/strong&gt;: The HDFS high availability feature allows us to run two or more redundant NameNodes in the same cluster, which allows for a fast failover in case a machine crashes or in case there’s a failure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: Storage and processing power can be easily increased by adding more nodes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Systematic&lt;/strong&gt;: The HDFS thoughtfully processes all components and programs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility&lt;/strong&gt;: Hadoop can handle structured data and unstructured data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Active community&lt;/strong&gt;: Hadoop has a large user base, so it’s easy to find helpful documentation or help relating to any problem you encounter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MapReduce&lt;/strong&gt;: MapReduce is powerful and can be leveraged through Java or Apache Pig.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rich ecosystem&lt;/strong&gt;: Hadoop has so many companion tools and services that easily integrate into the platform. These services allow us to perform many different tasks related to our data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parallel processing&lt;/strong&gt;: Hadoop efficiently executes parallel processing and can even process petabytes of data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data formatting&lt;/strong&gt;: Changing between different types of data formats can sometimes cause data loss, but formats don’t need to be changed in Hadoop.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Small files&lt;/strong&gt;: HDFS lacks the ability to support small files because it’s designed to handle high-capacity situations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No real-time processing&lt;/strong&gt;: Hadoop is not suitable for real-time data processing. Apache Spark or Apache Flink are great resources to help speed up the process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt;: Hadoops lacks encryption at storage and network levels, which means your data may be at risk. Spark provides security bonuses to help overcome the limitations of Hadoop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Response time&lt;/strong&gt;: The MapReduce programming framework tends to run slowly at times.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learning curve&lt;/strong&gt;: There are a lot of different modules and services available to use with Hadoop, and those can take a lot of time to learn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complex interface&lt;/strong&gt;: The interface isn’t extremely intuitive, so it may take some time to get acquainted with the platform.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Use cases
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Data-driven decisions&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;We can integrate structured and unstructured data not used in a data warehouse or relational database. This allows us to make more precise decisions that are based on broad data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Big data analytics and access&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hadoop is great for data scientists and ML engineers because it allows us to perform advanced analytics to find patterns and develop accurate and effective predictive models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data lakes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hadoop governance solutions can help us with data integration, security, and quality for data lakes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Financial services&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hadoop can help us build and run applications to assess risk, design investment models, and create trading algorithms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Healthcare&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hadoop helps us track large-scale health indexes and keep track of patient records.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sales prediction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hadoop is used in retail companies to help predict sales and increase profits by studying historical data.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Hadoop vs Spark
&lt;/h2&gt;

&lt;p&gt;Apache Hadoop and Apache Spark are commonly compared to one another because they’re both open-source frameworks for big data processing. Spark is a newer project, which was initially developed in 2012. It focuses on the parallel processing of data across a cluster, and it &lt;strong&gt;works in memory&lt;/strong&gt;. This means that it’s a lot faster than MapReduce.&lt;/p&gt;

&lt;p&gt;Hadoop is the better platform if you’re working with batch processing large amounts of data. Spark is the better platform if you’re streaming data, creating graph computations, or doing machine learning. Spark supports &lt;strong&gt;real-time&lt;/strong&gt; data processing and batch processing as well. There are a lot of different libraries that you can use with Spark, including ones for machine learning, SQL tasks, streaming data, and graphing. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up and next steps
&lt;/h2&gt;

&lt;p&gt;Congrats on taking your first steps with Apache Hadoop! The Hadoop ecosystem is powerful and extensive, and there’s still so much more to learn about Hadoop. Some recommended concepts to cover next include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resilient distributed data sets (RDDs)&lt;/li&gt;
&lt;li&gt;Hadoop data management&lt;/li&gt;
&lt;li&gt;Avro and Parquet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To get started learning these concepts and more, check out Educative’s course &lt;a href="https://www.educative.io/courses/introduction-to-big-data-and-hadoop" rel="noopener noreferrer"&gt;&lt;strong&gt;Introduction to Big Data and Hadoop&lt;/strong&gt;&lt;/a&gt;. In this hands-on course, you’ll learn the fundamentals of big data and work closely with functioning Hadoop clusters. By the end of the course, you’ll have the foundational knowledge to begin working in the big data field.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy learning!&lt;/em&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Continue learning about data operations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/intro-apache-airflow" rel="noopener noreferrer"&gt;Introduction to Apache Airflow: Get started in 5 minutes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/what-is-data-cleaning" rel="noopener noreferrer"&gt;Data science in 5 minutes: What is data cleaning?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/database-design-tutorial" rel="noopener noreferrer"&gt;Database design tutorial&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>programming</category>
      <category>algorithms</category>
      <category>computerscience</category>
      <category>learning</category>
    </item>
    <item>
      <title>What is virtualization?</title>
      <dc:creator>Erin Schaffer</dc:creator>
      <pubDate>Fri, 15 Oct 2021 20:46:38 +0000</pubDate>
      <link>https://dev.to/educative/top-tech-trends-of-2022-virtualization-4n13</link>
      <guid>https://dev.to/educative/top-tech-trends-of-2022-virtualization-4n13</guid>
      <description>&lt;p&gt;We’re only a couple of months away from the new year, which means it’s time to start looking ahead to the tech trends that will dominate the software industry in 2022. As the new year approaches, we want to help you get familiar with upcoming trends so you can be prepared and start taking your skills to the next level. Today, we’ll discuss &lt;em&gt;virtualization&lt;/em&gt;. If you’re looking to get into the cloud space, it’s important to get on top of this trend! We’ll discuss what virtualization is, why it’s important, how it works, and much more.&lt;/p&gt;

&lt;p&gt;Let’s get started!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We’ll cover&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is virtualization?&lt;/li&gt;
&lt;li&gt;Virtual machines and hypervisors&lt;/li&gt;
&lt;li&gt;How does virtualization work?&lt;/li&gt;
&lt;li&gt;Different types of virtualization&lt;/li&gt;
&lt;li&gt;Wrapping up and next steps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Virtualization is a fundamental aspect of cloud computing. Virtualization technology allows us to &lt;strong&gt;use the features of a physical machine across multiple virtual environments&lt;/strong&gt;, or virtual machines (VMs). Virtualization software creates an abstraction layer over computer hardware. The hardware elements of a physical computer, such as memory, storage, and processors, can then be partitioned into different VMs. VMs operate just like regular computers, and each VM has its own operating system. &lt;/p&gt;

&lt;p&gt;Cloud providers take advantage of the powerful features of virtualization to best serve their customers. You can buy the computing resources that you need when you need them, and you can scale them when your workload increases or decreases. There are a lot of &lt;strong&gt;different virtualization tools&lt;/strong&gt; and software on the market from big tech companies such as Microsoft, IBM, Red Hat, Intel, AWS, and VMware. There are open-source offerings, along with public, private, or hybrid cloud services available, so we can choose the tools that best fit our needs. &lt;/p&gt;

&lt;h3&gt;
  
  
  Benefits of virtualization
&lt;/h3&gt;

&lt;p&gt;Some of the main benefits of virtualization include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;: We can use virtual firewalls to secure data and isolate our apps so they’re protected from various threats. Virtualization enables automated provisioning, which allows for more security and visibility across physical or virtual applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reliability&lt;/strong&gt;: We can rely on our virtual environments to efficiently handle disaster recovery operations and perform any necessary backups or retrieval operations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cost savings&lt;/strong&gt;: Virtualization software is less expensive and requires less hardware to run. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Testing&lt;/strong&gt;: With virtualization, our environment is split into various VMs. We can replicate those VMs to perform any necessary testing without affecting the actual production environment. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Efficiency&lt;/strong&gt;: Since we have fewer physical servers, we don’t have to spend as much time maintaining physical machines. We can perform any operations we need to within our virtual environment, which boosts productivity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scalability&lt;/strong&gt;: With virtualization, it’s easy to scale our virtual cloud environment. We can automate scaling as needed to accommodate for growth to ensure that the appropriate resources are available.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Disaster recovery and downtime&lt;/strong&gt;: We can replicate VMs in case of a disaster, which enhances resiliency and reduces downtime.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Virtual machines and hypervisors
&lt;/h2&gt;

&lt;p&gt;Virtual machines and hypervisors are two important concepts in virtualization. They both play a major role in how virtualization works. Let’s discuss what virtual machines and hypervisors are, and then we’ll dive deeper into how virtualization works.&lt;/p&gt;

&lt;h3&gt;
  
  
  Virtual machines
&lt;/h3&gt;

&lt;p&gt;A virtual machine is a virtual environment that acts as a &lt;strong&gt;virtual computer system&lt;/strong&gt;. It has its own memory, network interface, storage, operating system, and CPU. Instead of using physical hardware to manage, run, and deploy programs and applications, it uses virtual hardware. To create a virtualized environment, we have a physical &lt;em&gt;host&lt;/em&gt; machine, and we can run multiple virtual &lt;em&gt;guest&lt;/em&gt; machines on the host machine. Since each VM has its own operating system, the guest machines function separately from each other even though they run on the same host machine. VMs are very portable, and they allow us to easily scale our applications to distribute heavy workloads.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hypervisors
&lt;/h3&gt;

&lt;p&gt;A hypervisor, or virtual machine monitor (VMM), is a &lt;strong&gt;software we can use to create and run VMs&lt;/strong&gt;. Hypervisors use physical resources to allow us to virtually use and share system resources to support multiple guest VMs. When we use a hypervisor, we can run different operating systems side by side and still share the same virtualized hardware resources. They allow us to separate physical resources from virtual environments. There are two main types of hypervisors: &lt;strong&gt;bare metal&lt;/strong&gt; and &lt;strong&gt;hosted&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Bare metal hypervisors are installed &lt;strong&gt;directly on the physical server&lt;/strong&gt; where the operating system is normally installed. They act as lightweight operating systems, and they’re mainly used in virtual server situations. Hosted hypervisors &lt;strong&gt;run on top of the operating system&lt;/strong&gt; of the host machine. They run as a software layer on top of an operating system just like other programs.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How does virtualization work?
&lt;/h2&gt;

&lt;p&gt;As we discussed in the previous section, we use hypervisors to &lt;strong&gt;separate physical resources for our virtual environments&lt;/strong&gt;. We can use a bare-metal hypervisor or a hosted hypervisor depending on our needs. Our hypervisor can either sit on top of an operating system or be installed right onto hardware. After setting up hypervisors, we can use them to divide resources across our virtual environments. Then, we can access and use these resources on our guest VMs.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Different types of virtualization
&lt;/h2&gt;

&lt;p&gt;There are multiple types of virtualization that allow us to execute various tasks. Let’s take a look at some of the different types:&lt;/p&gt;

&lt;h3&gt;
  
  
  Desktop virtualization
&lt;/h3&gt;

&lt;p&gt;With desktop virtualization, we can &lt;strong&gt;deploy simulated desktop environments&lt;/strong&gt; to multiple physical machines simultaneously. This means that we can execute updates and configurations on all of our virtual desktops at the same time. There are two types of desktop virtualization: local desktop virtualization and virtual desktop infrastructure (VDI).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Local desktop virtualization&lt;/strong&gt; creates a virtual desktop environment and operating system that is separate from the user’s device. This means that we can access our desktop environment from any other device. A &lt;strong&gt;virtual desktop infrastructure (VDI)&lt;/strong&gt; allows us to host multiple desktop environments on a single server. This means that we can access various operating systems from a single device without having to install multiple operating systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Network virtualization
&lt;/h3&gt;

&lt;p&gt;Network virtualization simplifies network management because it allows us to &lt;strong&gt;abstract our hardware elements&lt;/strong&gt; into software and manipulate them without affecting any underlying physical hardware. We can use network virtualization to create things like virtual networks, firewalls, and load balancing features.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data virtualization
&lt;/h3&gt;

&lt;p&gt;Data virtualization tools allow us to &lt;strong&gt;consolidate all of our data&lt;/strong&gt; into one source. It also allows our applications to access data from various sources, with different formats, in multiple locations, whether that’s in the cloud or in on-premises systems. Data virtualization enables us to successfully manage, deliver, and integrate data in real-time. &lt;/p&gt;

&lt;h3&gt;
  
  
  Operating system virtualization
&lt;/h3&gt;

&lt;p&gt;Operating system virtualization allows us to &lt;strong&gt;separate applications from the operating system&lt;/strong&gt;. Our system hardware runs multiple instances of various operating systems at the same time, which allows us to run applications with different operating systems on a single computer. It’s also a great way to run Linux and Windows environments side-by-side if needed. &lt;/p&gt;

&lt;h3&gt;
  
  
  Application virtualization
&lt;/h3&gt;

&lt;p&gt;Application virtualization allows us to &lt;strong&gt;set up remote applications on a server&lt;/strong&gt; and then send them to a user’s device. With application virtualization, we can access applications from devices other than the one on which the application is installed. We can run our application software without it being directly installed on the operating system of our device. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Other types of virtualization include&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Server virtualization&lt;/li&gt;
&lt;li&gt;Storage virtualization&lt;/li&gt;
&lt;li&gt;CPU virtualization&lt;/li&gt;
&lt;li&gt;GPU virtualization&lt;/li&gt;
&lt;li&gt;Linux virtualization&lt;/li&gt;
&lt;li&gt;Cloud virtualization&lt;/li&gt;
&lt;li&gt;Data center virtualization

&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up and next steps
&lt;/h2&gt;

&lt;p&gt;Congrats on taking your first steps with virtualization! Virtualization is a fundamental concept in the cloud computing world, and it continues to grow in popularity. Virtualization software allows us to efficiently use and divide physical computer hardware across multiple virtual environments, so we can get the resources we need when we need them. We’ve only scratched the surface on this fundamental cloud computing concept. There’s still so much more to learn about operating systems and virtualization, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Process API&lt;/li&gt;
&lt;li&gt;Direct execution&lt;/li&gt;
&lt;li&gt;Address translation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To get started learning these concepts and more, check out Educative’s course &lt;a href="https://www.educative.io/courses/operating-systems-virtualization-concurrency-persistence" rel="noopener noreferrer"&gt;&lt;strong&gt;Operating Systems: Virtualization, Concurrency &amp;amp; Persistence&lt;/strong&gt;&lt;/a&gt;. In this course, you’ll cover the three main concepts of operating systems: virtualization, concurrency, and persistence. You’ll also get hands-on practice with I/O devices and file systems. By the end, you’ll have mastered everything you need to know about operating systems, and you’ll be ready to take on this tech trend in 2022.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy learning!&lt;/em&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Continue learning about cloud concepts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/roadmap-to-cloud-engineer-jobs" rel="noopener noreferrer"&gt;Roadmap to cloud jobs: How and why to become a cloud engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/cloud-native-interview" rel="noopener noreferrer"&gt;What is cloud-native? What to know for your interview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/beginners-guide-cloud-computation" rel="noopener noreferrer"&gt;What is the cloud? Beginner's guide to cloud computing concepts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>programming</category>
      <category>career</category>
      <category>cloud</category>
      <category>computerscience</category>
    </item>
    <item>
      <title>Front-end vs back-end development: What's the difference?</title>
      <dc:creator>Erin Schaffer</dc:creator>
      <pubDate>Fri, 08 Oct 2021 23:31:13 +0000</pubDate>
      <link>https://dev.to/educative/front-end-vs-back-end-development-what-s-the-difference-l63</link>
      <guid>https://dev.to/educative/front-end-vs-back-end-development-what-s-the-difference-l63</guid>
      <description>&lt;p&gt;Front-end development and back-end development are two very important pieces of the software development world. These two components work together to improve the functionality of websites and web applications. While the front end and back end work closely together in web development, these two development types involve different things. Today, we’re going to dive deeper into both types of development and discuss skills you need to excel in both areas, along with their respective tools, languages, and potential job opportunities.&lt;/p&gt;

&lt;p&gt;Let’s get started!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We’ll cover&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is front-end web development?&lt;/li&gt;
&lt;li&gt;What is back-end web development?&lt;/li&gt;
&lt;li&gt;What is full-stack development?&lt;/li&gt;
&lt;li&gt;
Wrapping up and next steps

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is front-end web development?
&lt;/h2&gt;

&lt;p&gt;Front-end development focuses on the &lt;strong&gt;client-facing&lt;/strong&gt; aspects of a website or web application. This includes designing and optimizing the user interface, working on important &lt;strong&gt;visual aspects&lt;/strong&gt; of web pages, and taking care of any website debugging issues. Front-end code and front-end languages help developers implement complex and effective web design. In order to become a successful front-end developer, there are certain languages, tools, and frameworks that you need to become familiar with. &lt;/p&gt;

&lt;p&gt;Let’s take a look at some of the fundamental tools of front-end web development:&lt;/p&gt;

&lt;h3&gt;
  
  
  Front-end languages
&lt;/h3&gt;

&lt;p&gt;Front-end developers primarily use [Hyper Text Markup Language (HTML), Cascading Style Sheets (CSS), and JavaScript to code websites and web applications. We use &lt;strong&gt;HTML and CSS&lt;/strong&gt; to create and format web pages. These two languages allow us to build basic websites and web applications. HTML is the first layer of the website, and it renders the framework for our sites. CSS is in charge of dictating the presentation of the HTML on a given page.&lt;/p&gt;

&lt;p&gt;JavaScript allows us to &lt;strong&gt;add more functionality&lt;/strong&gt; to our web pages. It’s a runtime language for web browsers, and it allows our web pages to interact with and respond to user activity in real-time. With JavaScript, we can add &lt;strong&gt;interactive elements&lt;/strong&gt; to our sites, such as pop-ups, tabs, image sliders, and much more.&lt;/p&gt;

&lt;h3&gt;
  
  
  Front-end frameworks and JavaScript libraries
&lt;/h3&gt;

&lt;p&gt;Front-end frameworks give us a &lt;strong&gt;prepared template&lt;/strong&gt; or structure to use for our JavaScript code. They group together JavaScript libraries to make the coding process more efficient. There are many different frameworks to choose from. Popular frameworks include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AngularJS&lt;/li&gt;
&lt;li&gt;Vue.js&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Backbone&lt;/li&gt;
&lt;li&gt;Ember&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;JavaScript libraries, such as jQuery, allow us to plug the library’s code into our front-end website code. &lt;/p&gt;

&lt;h3&gt;
  
  
  CSS preprocessors
&lt;/h3&gt;

&lt;p&gt;CSS preprocessors are scripting languages that take one type of data and convert it into another type of data. They allow us to efficiently write clean, clear, organized, and stable code. Syntactically Awesome Style Sheets (SASS), is a popular scripting language and CSS preprocessor that adds new features and tools on top of default CSS to help us write more &lt;strong&gt;maintainable&lt;/strong&gt; CSS code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Front-end development job outlook and average salary
&lt;/h3&gt;

&lt;p&gt;The demand for front-end developers is high, and the demand is projected to continue growing. Top tech companies such as Facebook, Amazon, Google, and Lyft are looking for skilled front-end developers to join their teams. The national average salary of a front-end engineer in the United States is around &lt;strong&gt;$125,501&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is back-end web development?
&lt;/h2&gt;

&lt;p&gt;Back-end development focuses on the &lt;strong&gt;server-side&lt;/strong&gt; aspects of a website or web application. This type of development is concerned with website architecture, scripting, and &lt;strong&gt;communication with databases&lt;/strong&gt;. Back-end code enables the communication between browsers and information from databases. Back-end developers focus on how a website functions, which means they might work with APIs, code that interacts with databases, libraries, data architecture, and more. Back-end development works together with front-end development to provide users with a functional and interactive experience.&lt;/p&gt;

&lt;p&gt;Let’s take a look at some of the fundamental tools of back-end web development:&lt;/p&gt;

&lt;h3&gt;
  
  
  Back-end programming and scripting languages
&lt;/h3&gt;

&lt;p&gt;There are two different kinds of back-end programming languages: &lt;strong&gt;functional languages&lt;/strong&gt; and &lt;strong&gt;object-oriented (OOP) languages&lt;/strong&gt;. Functional languages use declarative syntax, and they have an emphasis on expression. They create pure functions and avoid shared states and mutable data. Object-oriented languages use classes and objects. This allows us to structure our programs into simple, reusable pieces of code. We can use those pieces of code to create individual instances of objects.&lt;/p&gt;

&lt;p&gt;Popular back-end languages include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;Ruby &lt;/li&gt;
&lt;li&gt;.NET&lt;/li&gt;
&lt;li&gt;PHP&lt;/li&gt;
&lt;li&gt;R&lt;/li&gt;
&lt;li&gt;Haskell&lt;/li&gt;
&lt;li&gt;SQL&lt;/li&gt;
&lt;li&gt;Clojure&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Back-end frameworks
&lt;/h3&gt;

&lt;p&gt;Back-end frameworks make it easier and more convenient to build &lt;strong&gt;consistent and stable&lt;/strong&gt; back ends. Popular frameworks include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Django&lt;/li&gt;
&lt;li&gt;Ruby on Rails&lt;/li&gt;
&lt;li&gt;Flask&lt;/li&gt;
&lt;li&gt;Asp .NET&lt;/li&gt;
&lt;li&gt;Spring Boot&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Back-end databases
&lt;/h3&gt;

&lt;p&gt;The back end of a website consists of servers, applications, and databases. Databases are important because they allow websites and applications to &lt;strong&gt;handle user data&lt;/strong&gt;. Database management systems (DBMS) acts as an interface between the database and its users. A DBMS allows users to access, update, and manage information. There are two main types of databases: &lt;strong&gt;SQL&lt;/strong&gt; and &lt;strong&gt;NoSQL&lt;/strong&gt;. SQL databases are structured, and NoSQL databases are not structured. Popular databases include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MySQL&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;li&gt;Redis&lt;/li&gt;
&lt;li&gt;PostgresSQL&lt;/li&gt;
&lt;li&gt;Oracle&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Back-end development job outlook and average salary
&lt;/h3&gt;

&lt;p&gt;Similar to front-end developers, back-end developers are in high demand. Top tech companies like Salesforce, Apple, Twitter, and Stripe are looking for talented back-end developers. In general, back-end developers can expect a slightly higher salary than front-end developers due to the complex nature of the work. The national average salary of a back-end engineer in the United States is around &lt;strong&gt;$126,880&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is full-stack development?
&lt;/h2&gt;

&lt;p&gt;Full-stack development &lt;strong&gt;combines front-end and back-end&lt;/strong&gt; development. This means that full-stack developers can create entire websites and web applications. They work on client-side, server-side, debugging, and database work. Full-stack web developers can program browsers, servers, and databases. &lt;/p&gt;

&lt;p&gt;As a full-stack developer, you need to have solid experience with front-end and back-end development tools. Full-stack developers work with &lt;strong&gt;web development stacks&lt;/strong&gt;. These stacks include all of the essential parts of a modern web application or website, including front-end tools, back-end tools, and the database. Some stacks include application frameworks or state management tools. Popular stacks include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LAMP&lt;/strong&gt;: JavaScript, Linux, Apache, MySQL, PHP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LEMP&lt;/strong&gt;: JavaScript, Linux, Nginx, MySQL, PHP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MEAN&lt;/strong&gt;: JavaScript, MongoDB, Express, AngularJS, Node.js&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Django&lt;/strong&gt;: JavaScript, Python, Django, MySQL&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ruby on Rails&lt;/strong&gt;: JavaScript, Ruby, SQLite, Rails&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Full-end development job outlook and average salary
&lt;/h3&gt;

&lt;p&gt;The demand for full-stack developers is very high because a developer that can do both client-side and server-side work is a valuable asset to any company. Companies such as Amazon, Walmart, Boeing, and Deloitte are looking for full-stack developers. The national average salary of a full-stack engineer in the United States is around &lt;strong&gt;$106,274&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up and next steps
&lt;/h2&gt;

&lt;p&gt;While the two are very different, front-end development and back-end development work closely together to help create accessible, functional, and efficient websites and applications. Front-end developers work more closely with client-side components, while back-end developers work more closely with server-side components. Both types of development are highly important in the world of software engineering. While we covered a lot today, there’s still much more to learn about web development, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data structures and algorithms&lt;/li&gt;
&lt;li&gt;Font stacks&lt;/li&gt;
&lt;li&gt;Network fundamentals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To get started learning these concepts and more, check out Educative’s learning path &lt;a href="https://www.educative.io/path/fundamentals-web-programming" rel="noopener noreferrer"&gt;&lt;strong&gt;Fundamentals of Web Programming&lt;/strong&gt;&lt;/a&gt;. In this hands-on learning path, you’ll learn about front-end tools such as HTML, CSS, and JavaScript, along with back-end fundamentals. By the end, you’ll be ready to advance your learning and tackle more in-depth web development topics.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy learning!&lt;/em&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Continue learning web development
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/ruby-on-rails" rel="noopener noreferrer"&gt;Getting started with Ruby on Rails: Build a web app with Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/react-bootstrap-tutorial" rel="noopener noreferrer"&gt;React Bootstrap tutorial: Upgrade React apps with a CSS framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/blog/react-angular-vue-comparison" rel="noopener noreferrer"&gt;Angular vs Vue vs React: Choose the best framework&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
