Let me say it right away: If you think software engineering is all about programming, algorithms design, and data structures, then you are wrong. If you are planning on starting a degree in Software Engineering with the expectation of doing much programming, then let me tell you that it will not be the case.
Nowadays anyone who builds a beautiful mobile app or creates a website claims to be a Software Engineer. Just because someone knows a programming language does not mean he/she is a software engineer. Moreover, you do not need to be a Software Engineer to learn how to build an app or website. Software engineering is more than programming!
My motivation for writing today's article arises from the fact that people frequently misuse the term "Software Engineering." It is common for students to pursue a degree in Software Engineering expecting to do much programming but end up disappointed about the reality. I did my bachelor's in Computer Science and my master's in Software Engineering, and I can tell you from first-hand experience that they are not the same thing.
What to expect from your SE Curriculum
Yes, you do take programming courses. As a Software engineer, you are expected to have good bases in computing and programming. That is why you take programming-related courses such as Object-Oriented Design, database design, algorithms analysis, and data structures. However, programming courses represent a minor portion of the curriculum.
As a Software Engineer, you do not have the mindset of "let's just make it work." Instead, your mindset is focused on understanding user requirements, validating and verifying requirements, project management, time constraints, stakeholder analysis, and more.
As mentioned before, I did my master's in SE. Let me share with you a little about my curriculum. To give you some context, the program had 9 mandatory courses, 2 elective courses, and the thesis. From all the 11 courses, only 4 involved programming. So what are some examples of non-programming courses?
- Requirements Engineering: This course is all about understanding the needs and problems of customers and the market. By the end of this course, students know a set of techniques for eliciting user requirements, identifying the key stakeholders of a project, and managing the conflicting and frequently changed requirements. Key concepts in this course include context diagrams, requirements document, requirement validation, requirement verification, data requirements, quality requirements, and technical requirements.
- Software Architecture: This course focuses on methods for quantitatively and qualitatively evaluating software architectures. The goal of the evaluation is to ensure that the chosen architecture complies with the quality requirements of the customer such as security, performance, modularity, reliability, etc. This course also focuses on the dependencies between internal quality attributes of software and analyzing how improving once quality attribute such as performance, may affect others such as security. Key concepts in this course include architectural models, domain models, quality attributes, data flow diagrams, and architectural patterns.
- Software Quality: This course is about learning technique for measuring the internal quality of software. This course studies the various standards (ISO & IEEE) and quality models used in the industry for measuring and defining software quality. Key concepts in this course include faults, defects, fault tolerance, bug visualization, quality measures, quality models, testing, internal quality, external quality, quality in use.
- Project Management: Just like any other project management course, it focuses on techniques for planning and managing projects. Depending on the university, this course can be focused on software projects. Key concepts in this course include project, critical path, project life cycle, stakeholders identification, stakeholder analysis, teamwork, risk management and analysis.
- Model-Driven Engineering: The purpose of this course is to learn about the creation, adaptation, and transformation of modeling languages. This course focuses on creating a DSL (Domain Specific Language). Key concepts in this course include domain models, metamodels, domain-specific language, model transformation, abstract syntax, and static semantics.
It is normal for the curriculum to vary from university to university but expect this type of courses wherever you study.
To be a successful software engineer, it is essential to have a good understanding of the software development process and ensure the software under development is built within the time and budget constraints. Moreover, it is essential to be able to elicit user requirements, manage the stakeholders of the project, and satisfy their needs.
Lastly, as a software engineer, you are interested in creating high-quality software by implementing appropriate architectures that facilitate the maintenance process.
My goal with this article is to illustrate that Software Engineering is not only about programming. In facts, programming is a small portion of the SE curriculum. Computer Science, on the other hand, is the field of computing that is more concern about implementing and analyzing algorithms. Therefore, programming is involved in a Computer Science degree.
Even if the Software Engineering degree does not involve much programming, it does not mean you cannot work at it. In fact, many SE graduates take jobs whose role involve mainly programming. Nevertheless, it is essential to keep in mind that if you are enrolling on an SE degree, it will not contain many programming courses.
How would you rate this article?