Software Development 101: From Programmer to Software Engineer

Nick Soetaert
3 min readFeb 11, 2023

--

Photo by Jason Goodman on Unsplash

In my years of experience in software development, I’ve had the opportunity to work with several brilliant researchers and engineers from other fields. Often they end up using their expertise to write some very clever code that eventually becomes an unmaintainable mess as requirements change and the project grows.

Despite their technical expertise and ability to write code, I’ve noticed a common gap in their understanding of fundamental software engineering concepts and design patterns. This series of articles, “Software Development 1XX”, aims to bridge this gap and act a guide for those who have a basic understanding of programming, and aspire to expand their skill set to include software development. Resources and book recommendations will be left for those who wish to delve deeper.

Programmer vs Software Engineer: What’s the difference?

Software engineering is the process of designing, developing, testing, and maintaining software systems. Software engineering has as much to do with people as it does with code.

The key fundamentals of software engineering that I will go over in this series include:

  1. Testing: Software testing is a vital aspect of writing good software. It includes techniques such as unit testing, integration testing, acceptance testing, and Test Driven Development (TDD).
  2. Design patterns: Design patterns are reusable solutions to common software design problems. Examples of design patterns include Model-View-Controller (MVC), Singleton, and Factory Method.
  3. Maintainability and Documentation: Maintainability is the ability of software to be easily modified and updated over time to meet changing requirements. Documentation is an important aspect of maintainability.
  4. Collaboration and version control: Version control is a system that records changes to a file or set of files over time, allowing developers to recall specific versions and track changes made by multiple contributors.
  5. Software architecture: Software architecture refers to “big picture” structure and organization of a software system. It includes the high-level design decisions that impact the software’s maintainability, scalability, and performance.
  6. Packaging and Deployment: Packaging is the process of creating a distribution package of software that includes all the necessary components, libraries, and dependencies required for the software to run on your intended platform. Packaging helps to ensure that software is easily distributable, and is easy to maintain and update.
  7. The Software development process: The software development process involves a series of steps that software developers follow to create high-quality software. This process includes requirements gathering, design, development, testing, deployment, and maintenance. The software development process also includes practices such as code reviews and pull requests to ensure that code is of high quality and meets the standards set by the development team.

Note that this list does not contain a bullet point called “programming.” If you follow the above attributes, good, clean code that is easy to work with or optimize will naturally follow.

--

--

Nick Soetaert

Software developer working with lots of IoT solar data. Follow me as I document problems I solve on the job.