Lesson
Materials

Software engineering I

Concepts

successful software engineer knows and uses design patterns, actively refactors code, writes unit tests and religiously seeks simplicity. Beyond the basic methods, there are concepts that good software engineers know about. These transcend programming languages and projects – they are not design patterns, but rather broad areas that you need to be familiar with. The top 10 concepts are:

  1. Interfaces
  2. Conventions and Templates
  3. Layering
  4. Algorithmic Complexity
  5. Hashing
  6. Caching
  7. Concurrency
  8. Cloud Computing
  9. Security
  10. Relational Databases

Definitions

What does Software Engineering mean?

Software engineering is the process of analyzing user needs and designing, constructing, and testing end-user applications that will satisfy these needs through the use of software programming languages. It is the application of engineering principles to software development.

In contrast to simple programming, software engineering is used for larger and more complex software systems, which are used as critical systems for businesses and organizations.

Software Engineering

Software engineering is an engineering discipline that’s applied to the development of software in a systematic approach (called a software process).

It’s the application of theories, methods, and tools to design-build a software that meets the specifications efficiently, cost-effectively, and ensuring quality.

It’s not only concerned with the technical process of building software, it also includes activities to manage the project, develop tools, methods and theories that support the software production.

Not applying software engineering methods results in more expensive, less reliable software, and it can be vital on the long term, as the changes come in, the costs will dramatically increase.

In this course, we try to explain Different methods and techniques of software engineering that are appropriate for different types of systems. For example, a software app should be developed using a series of prototypes, while critical control systems require a complete analyzable specification to be developed.