Engineering Better Programs

15 Dec 2021

When I first learned about programming, I was only eight or nine years old. I learned about it though the robotics club at my elementary school where we built and programmed Lego robots. I had no real clue as to what I was doing, but the programming language used was so stupidly simple that eight-year-old me was able to brute force my way into understanding it enough to get our project to work. I continued with various robotics clubs all the way though high school, learning more and more about programming. Some of it was self-taught, other things were taught to me by mentors who I am very thankful for. All that being said, if I were able to look back at any of that code now, I wouldn’t be able to stop myself from laughing at all the mistakes and unnecessary loops that I made along the way.

Lego Mindstorm Robot

Having spent the last five months learning about software engineering, I now have many ideas and concepts that I can apply to my coding projects to make them more robust and something that eight-year-old Ian wishes he could do. The most important concept I’ve learned about is that of functional programming. This is the idea that code is written to fulfill a specific purpose or to do an explicit task, and that these functions should be treated as “first-class citizens”. This manifests itself as functions or methods within a program that can be used as values, as well as the ability to be passed and returned to and from other functions. Functional programming is extremely useful when working with large amounts of data because you can create specialized functions that iterate over or interact with the data in a certain way, then pass functions to those functions to define the conditions of the interaction. As someone interested in the field of data science, the concept of functional programming is a powerful tool for me to have.

Another interesting concept is that of the Agile Project Management system and specifically the Issue Driven aspect of it. The basic idea of this system is that a project can be broken down into specific tasks or issues that can be completed in a desired time frame. Usually tasks are created and assigned every 3-4 days and each task should be able to be completed within that time frame. This allows for each individual in a group to have short-term goals that they can accomplish independently while staying on the same page as everyone else. This process was very effective during the development of our Career Match website as we were all very busy with other classes and work, but breaking down tasks allowed us to all work whenever worked best for our own individual situations. Even in an individual context, I am going to use a similar process to this to help guide myself during longer projects. I have issues with getting distracted whenever a new complication comes up while coding, so having my plans broken down into bite-sized chunks can help me to reorient after going down the rabbit hole of bug fixing.

Agile Project Management Image

Overall, learning about software engineering concepts has helped me to look at programming as something that can be effectively accomplished as a large team, and not something that is purely individualistic. If everyone working on a project understands the same concepts such as functional programming, those concepts can be utilized and understood by everyone else. Tools such as Github make this collaboration aspect even easier by providing a platform that is tailor-made to allow for collaboration and good practices to be utilized. Everyone has their own style of coding and problem solving, but having foundations to support that individualism allows for stronger code to be written and amazing projects to be created.