Innocencia Ndembera
7 min readMay 4, 2023

Introduction to Software Engineering

Have you ever wondered how the apps on your phone, the websites you visit and the games you play are all created? Software Engineering answers this question. In today’s digital age, Software Engineering is becoming increasingly important, as we rely on software to power everything from our smartphones to our cars. But, Software Engineering is not just about writing code -it’s a complex and multifaceted field that requires a deep understanding of both technology and business. In this article, we’ll explore the world of software engineering and break b it’s principles and practices into simple, easy-to-understand concepts. By the end, you will have a better understanding of how software engineers turn ideas into reality and why their work is so essential in today’s era.

What is Software Engineering?

Before we look at the whole word, let’s break it down a bit.

Software is a a program or set of programs containing instructions that provide desired functionality. Engineering is the process of designing and building something that serves a particular purpose and finds a cost-effective solution to problems.

Therefore, Software Engineering means the process of designing, developing, testing and maintaining software. It combines knowledge from Computer Science, Mathematics, Engineering and Management.

We can think of software like baking a cake. Yes, you heard right, baking your favourite cake; vanilla or chocolate or any other flavours. For you to bake a delicious cake, you have to follow recipe, measure all ingredients carefully, mix them in the right order, and bake it in the oven for a certain amount of time. If you make a mistake, maybe forget an ingredient or put a lot of one ingredient, then the cake will not turn out the way you want it to. Similarly, Software Engineers follow certain steps to create computer programs. If they make a mistake or forget something, the program might not work or might work in a way that is not intended.

So, software engineering is a systematic and disciplined approach to software development that aims to create high-quality, reliable, and maintainable software.

Importance of Software Engineering

  1. Serves as a vital link between business and technology. Software engineering is important because it bridges the gap between business and technology. Business leaders may not have a deep understanding of the technology behind their operations, and software engineers can work closely with them to design, build, and maintain software systems that meet their needs. At the same time, software engineers have a deep understanding of the technology and can work with other tech professionals to ensure that the software systems are efficient, secure, and reliable. This helps businesses leverage technology to operate more effectively and stay ahead of the competition.
  2. Leads to a product that is efficient and reliable. Software engineering is important because it helps to create efficient and reliable software. When software is engineered properly, it is designed to perform its functions efficiently and reliably, which can save time, improve productivity, and increase user satisfaction. Software engineers use rigorous testing and quality assurance processes to catch bugs and other issues before the software is released to users, reducing the likelihood of crashes or other problems that can damage the user experience.
  3. Reduces complexity. Software engineering is important because it helps to reduce the complexity of software systems. By breaking down complex systems into simpler, more manageable parts, software engineers can make it easier to develop, test, and maintain software systems over time. This can improve the quality of the software, reduce costs, and make it more accessible to a wider range of users. Reducing complexity is a key aspect of software engineering that helps to make software more efficient and reliable.
  4. Handling big projects.

Software Engineering Principles and Practices.

These are guidelines that help to ensure that software products are of high quality. We will look at modularity, encapsulation, abstraction, cohesion and coupling

  1. Modularity
    This refers to breaking down software into smaller, independent components to make it easier to develop, test and maintain independently. These small components are called modules.

For example, suppose we are making a game that has different levels. We can break the game down into smaller modules like one module for each level. This way, we can work on each level separately and then put them together to create the complete game.

Another example, let’s assume we are creating a social media platform. We can break it down into smaller modules based on their functionality eg

  • User integration — handling the process of registering new user and creating accounts
  • User authentication -verifying user’s
  • User profile
  • News feed

By breaking the social media platform into these modules, we can work on each module separately, which makes it easier to manage and maintain the platform. For instance, if we want to make changes to user profile module, we can do so without affecting the other modules. Similarly, if we want to add a new module, we can do so without rewriting the entire platform.

Modularity makes it easier to work on a big project because we can focus on one piece at a time, and it also makes it easier to fix or change parts of the program without affecting the rest of the it. It’s life, if we break one puzzle piece, we only have to replace that one piece instead of starting the whole puzzle again.

2. Abstraction
This is hiding unnecessary details and exposing only the essential features of a system to simplify its complexity. It’s like looking at a bigger picture of a bird instead of looking at individual feather.

We can create a simplified version of something that has a lot of details, so that it’s easier for us to work with. A toy car is a simplified version of a real car in that it does what we want it to do (move from point A to point B) but it does not have all the parts of a real car. That’s how abstraction works.

Let’s say we want to create a social media platform where users post content, follow each other and receive notifications. we can use abstraction to create simplified versions of these features so that we can focus on what’s important.

We can create an abstraction of a “post" feature that includes details like text of the post, and who created it. Without abstraction, a post and notifications would include unnecessary details like the device (Samsung s23, iPhone 14, itel, Huawei, oppo etc), IP Addresses, password of user, ID number, just to mention a few. However these details would make it very complex and also prone to cyber attacks.

Overall, abstraction, makes it easier for us to work with complex systems like social media platforms, by simplifying them and allowing us to focus on what’s important.

3. Encapsulation.

In Software Engineering, encapsulation is when we group together different parts of a program/code and keep them safe inside something called an object, and use them as a single unit while protecting the internal state of the object from external modification.

We can think of encapsulation the same way women store their makeup. In a makeup kit, there are many different items such as powder, foundation, blushes, an eyeshadow. Each item has its own unique texture, colour and purpose. Instead of keeping them separately, they are all sorted in a single container such as makeup box it case. The container acts as an encapsulating object that keeps all of the makeup items together and organised. This makes it easy to find the items needed. Storing the makeup kit as a single unit also helps protecting them from damage or loss.

Similarly, in Software Engineering, encapsulation is used to group together related code and data into a single object, making it easier to manage and use. This helps keep the code organised, easy to understand and protected from accidental changes or error.

4. Cohesion
Cohesion is like having a team a team where everyone is working together towards the same goal. In Software Engineering it means that making sure that all the parts of a program are working together towards the same goal.

In soccer, there are many different players on a team, each with their own skills and strengths. But in order for the team to be successful, all of the players need to work together towards the same goal: scoring points and preventing the other team from scoring.

This means that players need to communicate with each other, pass the ball to each other, and be aware of each other's movements on the field. They need to be coordinated and in sync, working together to make sure that the ball gets to the right place at the right time.

Just like in software engineering, in soccer, cohesion is about making sure that all the different parts work together to achieve the same goal. The players on a soccer team need to be cohesive in order to succeed, just like the different parts of a software program need to be cohesive in order to work correctly.

5. Coupling
This refers to minimizing the dependencies between components to reduce the impact of changes on other parts of the system. That is, how much one part of the program depends on another part of the program.

Ideally, we want to minimize coupling in software engineering, because high coupling can make a program difficult to maintain and update. If one part of the program is changed or updated, it can cause problems in other parts of the program that depend on it.

In conclusion, software engineering is an important field that has revolutionized the way we live and work. The principles and practices of software engineering enable the development of efficient, reliable, and scalable software systems that are vital to the success of businesses and organizations in various industries. By reducing complexity, handling big projects, and providing a vital link between business and technology, software engineering has become an essential component of modern society. As technology continues to advance at a rapid pace, the need for skilled software engineers will only continue to grow. Therefore, it is important for aspiring software engineers to master the fundamentals of software engineering in order to thrive in this exciting field.

Innocencia Ndembera

As a software engineer and enthusiast, I share personal reflections and explore industry trends. Join me on this journey!