What is Software Engineering?
Tags: software, career, computerscience, algorithms
Published: 2022-02-13 09:23:52

New technologies are reshaping industries, which increases the need for qualified professionals who are familiar with managing computer and software systems to adapt to business needs.
As these needs from businesses grow, specific skills such as programming, cloud computing, system security, and an array of other software technologies knowledge are necessary, supported by engineering methods to produce scalable and reliable solutions.
Engineers possess a variety of skills such as problem-solving, troubleshooting, and critical thinking in addition to their technical expertise. In place of creating a unique solution for every problem, an engineer can build a system, estimate and fix its errors, and analyze its performance.


## let’s dissect the term

**Software:** In general it’s a set of constructions that tells the hardware what to do. there are many types of software, the two main categories are the operating system and the programs running on that system.
**Engineering:** Is using scientific principles and math to design and build structures, Solve Problems, and test concepts and solutions.
**Software Engineering:** Systematically develop software through an engineering approach. The process of developing, analyzing, testing, and maintaining software using engineering principles.
To be a software engineer, you will need strong problem-solving and research skills, analytical and mathematical skills, and a deep understanding of coding languages.


## How is it different from other software disciplines?

**Computer science**
The main comparison is often made with computer science and how these two fields might be different from each other.
the main difference is that computer science is concerned with theories and fundamentals while software engineering is concerned with solving real problems and solving them practically covering everything regarding developing and testing new software solutions.
Both provide a comprehensive understanding of basic computer architecture and software systems. They cover topics such as programming languages, computer architecture, algorithms, databases, and artificial intelligence. Computer science focuses more on computation theory and covers more subjects pertaining to computers, whereas software is concerned more with mathematical knowledge and abstract computing skills.

**Systems Engineering**
A System Engineer deals with the overall management of engineering projects during their life cycle. They follow an interdisciplinary approach of being technical while focusing on managing the project and delivering solutions to requirements. They are concerned with a much wider range of topics that requires a broader background including computer systems, software systems, and process engineering.on the other hand, A software engineer is more hands-on in developing solutions for requirements, his/her’s main focus lies in the details regarding how to develop, deploy, maintain, and test to end up with good software.

**Computer Engineering**
The focus is on topics such as hardware, software, and electrical engineering. Computer engineering is a broad major that covers programming only as one aspect and requires mathematics, physics, and computer science. Basically, computer engineering focuses more on the physical hardware systems, whereas software engineering focuses more on implementing and maintaining software that involves more coding instead of knowing how computer parts work in detail.


## Fundamental activities of software engineering

**1- Specification**
This includes Communication, Requirement Gathering, and Feasibility Study. It is not a primary task for software engineers as there are usually teams dedicated to research.
**2- Development**
This includes System analysis and Design, and Rapid Development with itterative methods.
**3- Validation**
Is making sure the developed application works according to required functionalities and is performing as expected, in line with their design objectives. This step is important and done iteratively to ensure that the requirements are being met.
**4- Evaluation**
This includes Debugging and Testing the software using several testing methods like Unit Testing, System Testing, and others. Testing is a crucial part of Software Engineering as the end goal is always developing reliable and robust applications.
**5- Maintenance**
Which usually costs more than development, this also includes updating the software and fixing bugs that might occur.


## Challenges of Software Engineering

- Costs
- Heterogeneity
- Business and Social change
- Security and Trust
- Device diversity and Constant change
- Demands for reduced delivery times


## Software Applications types


**- Stand-alone:** which are applications that run on local computers, and sometimes do not need network to function, including all required functionalities needed from the software.

**- Interactive/Transaction-based:** They execute on remote computers, this includes web applications such as e-commerce.

**- Embedded/control systems:** Applications that control and manage hardware devices, this type is the most developed type of application.

**- Batch processing:** These are business systems , processes large number of individual inputs and data.

**- Entertainment systems:** Primarily apps designed for personal use, and intended to entertain the user like games and streaming services.

**- Modeling and simulation:** Developed by scientists and engineers to model a process. These include many separate interacting objects that are then used to model different types of data.

**- Data collection:** Apps that collect data using a set of hardware sensors and send them to a system for processing. In software, the data is collected and sent using several methods that are then processed in different ways to gather knowledge from the data.

**- Systems of systems:** Which are systems that manage or run several different other applications or subsystems.

Software engineering teaches you how to solve problems with code, it teaches you how to think like an engineer and how to approach problems in a methodical manner. Generally, software engineers specialize in one type of software and excel on one type of platform, as specializing means you have more expertise in one thing and can therefore provide better software.