What is Software Engineering?

Slide Deck: What is Software Engineering?

Computer Science vs. Software Engineering?

It’s important to differentiate, at least a little, between the fields of computer science and software engineering. When a student says to me that they really want to major in computer science, most of them are saying that because they are interested in a software engineer-type position in industry. They want to make software that does something amazing, something that helps people, something that interests them.

Which is fantastic! I want students to be able to take what they learn from their university experience and apply it to their future career!

But students need to understand that software engineering, while it is a subfield of the larger field of computer science, almost has more to do with business, psychology, human resources, project management, leadership, etc. than it does with a course in data structures or algorithms. Sure, a student absolutely needs the courses in data structures so they can apply those lessons to the software they build, but software engineering is separate from all that to a degree.

Software engineering focuses on the skills and techniques needed to build a working software system on-time, within budget, and meets the needs of the customers. While the concepts someone learns in other CS courses are needed to build such a system, we will focus on the management aspects of development in software engineering.

Is building software hard?

Yes and no.

The best thing about building software is that anyone with access to a computer can do it! The tools for building a lot of different types of software are free with tons of tutorials and examples available. It is not uncommon for someone without a CS degree to pick up programming as a part of their career, part of a new career, or just as a hobby.

The hard part is that once you start building software for other people, you start to realize that half of the difficulty of building software isn’t actually the coding. It’s figuring out what it is you actually need to build for the customer, making sure it works, and then making sure it keeps working for likely years after you have finished building it.

Because software is “malleable” - it’s often patched, updated, etc. - developers and customers both see this as an opportunity to:

  • deliver something unfinished because it can be “patched later”
  • change requirements while you are building the system because it’s just code… how hard could that be?
  • change requirements after you have delivered the system because… again… it’s just code - you can just patch it!
  • try out new and untested features/frameworks because why not!

Further, there is a lack of understand from both customers and developers regarding just how long it takes to build good software.

And when you release bad software, the results can vary from simply losing some customers to ruining your company’s reputation to potentially loss of life.

So software engineering is all about how we build good software efficiently and effectively as a team so that we meet our customers needs, now and in the future.


Previous submodule:
Next submodule: