Don’t Lose the Forest for the Binary Search Trees

14 May 2021

Admittingly, I thought of software engineering purely as a coding endeavour. A practice that taught you how to write cool code - and that was all there is to it. However as I have experienced: software engineering practices, or rather the process of learning to become a software engineer is nothing short of a metamorphosis. Throughout my semester-long tour of software engineering I have learned much about JavaScript and web development, but this experience undoubtedly extended beyond mere programming. My mental schema of the software engineering field has completely shifted and now extends beyond practices and has taken the form of it’s own mindset. Software engineering, afterall, is a mindset in its own regard and programming is an aspect.

If there’s one thing that I have learned, although I have certainly learned more than ‘one thing’, it is the temptation to perceive software engineering as the act of writing code. When writing programs to solve problems, it is only natural to assume that the highlight of coding practices should be on the code itself. While writing code is important, it only represents just a fraction of the overall process. This process that I keep talking about refers to the practices outside of writing code that extends into preparation and planning, group work, design, and ethical behavior. In set terms: If Software engineering were some arbitrary set; it is not equal to coding, but rather coding is an element of the set itself. Many people and myself included have stressed learning how to write code efficiently and effectively, however in doing so I lost sight of the overall idea that it is software engineering. I lost the forest for trees, or should I say binary search trees? Get it? Because…binary search trees are a data structure common in computer science…? No? Ok…

Bad puns aside, I’d like to stress that software engineering is a broad field that isn’t a stagnant collection of behaviors. It moves, it evolves. While I could spend hours (or perhaps pages) discussing the nuances and applications within software engineering, I will discuss two. These help to enforce the idea of ‘seeing the forest’. They answer the questions: ‘Why is software engineering important?’ and ‘What is software engineering trying to achieve?’. They are agile project management and ethics within software engineering. Now you might be thinking, ‘what the heck does that mean?’. Believe me they are simpler than their names suggest and more important than you might imagine.

Agile Project Management and Why it Matters

I will first discuss agile project management. It is a surprisingly simple and intuitive idea that has a fancy name. Essentially in software engineering there are ‘releases’. Think of Apple releasing iOS software updates. Each release builds upon the previous version, there are issues and functions that have been added, deleted, or altered. The premise of software is that it will serve a purpose to someone. If this purpose is not met in its entirety, then the software has room for improvement. The idea of agile project management is to continuously edit software so that it better fits its purpose.

In my software engineering class I have dealt with ‘Issue Driven Project Management’. This is a form of agile project management. What this means, is that each ‘release’ is broken down into individual tasks or issues. This is essentially breaking down a problem into serializable and more manageable steps. It can be extremely intimidating, and frustrating, to implement a brand new function to an app. Using issue driven project management such functions become manageable and even tangible. This process of handling problems also has a way of revealing logical flaws that were not present then you first started out.

As I have said earlier, agile project management is a very intuitive approach to solving software problems whose premise is understood by many people without them even knowing it. This experience in working with agile project management and specifically issue driven project management on platforms like GitHub have certainly inspired me to approach large and intimidating tasks more methodically. This will, hopefully, yield less anxiety and higher work output. What comes to mind as I am writing this, is baking (another passion of mine). How can you possibly start out to make a cake without breaking it into steps? Each step contributes to the finished product, you can’t simply throw your eggs and flour into the oven and hope for a miracle. You handle each problem at a time; breaking the eggs open, measuring the flour, etc. The same problem solving paradigm as agile project management.

Software engineering is about seeing the forest, you do need to write code but you can’t do it without a direction and you can’t bake a cake without knowing that you are making a cake.

Ethics Everywhere

Lastly, I will discuss the topic of ethics in software engineering. Ethics in software engineering pertains to the spoken and unspoken, and communally acknowledged set of practices and executions that all software engineers abide by. Or at least, should abide by. Some ethical principles include ‘Avoid harm’ and ‘Be honest and trustworthy’, both sound more like moral guidelines and not necessarily something you’d expect to hear in the field of software engineering. For more information on the Association for Computing Machinery ethical guidelines, visit this link.

On the other hand, it is important to acknowledge that software is ubiquitous. It affects people’s lives on the most basic and fundamental of levels every single day. Software serves as the core in many aspects of humanity’s achievements. It saves lives, facilitates learning, and puts people on the moon. It now makes sense to implement guidelines for programmers that deal with such sensitive and vital operations. To reiterate my point, software always serves a purpose. This purpose must be for the greater good, the only way to ascertain that software is always aligned with this goal in mind: all software engineers must conform to a universal standard.

While I do think that all humans should live by a moral code, this experience in software engineering has helped me realize that ethics involves everyone and everyone must do their part. Moving forwards, I plan to reflect on the ethical principles and try to reference and compare them against my personal ethical moral code. I believe that it is integral to the human experience to make informed and conscious decisions that are aligned with all facets of one’s value set. I believe that my experience in software engineering has prepared me with the toolset to critique and adjust my own ethical framework.

Software engineering, again, is about seeing the forest. One must see the purpose and the road to ethically achieve such purpose.

In conclusion, software engineering is a discipline that is so much more than writing code. It is a mindset, it is a behavior. Being a software engineer requires foresight and insight to see the broader picture to not lose the forest from the binary search trees.