What is a Software Program

When I talk to people who have never programmed before, the topic can be very foreign and often intimidating. As a result, writing a software program could just as well be black magic. However, the concept of programming doesn’t have to be as intimidating as it appears. It is a complex topic, but the fundamental concept of programming is relatable to a lot of people.

When I was in elementary school, I had my first brush with programming concepts without even realizing it. My second-grade teacher had the class participate in a group exercise. She had us pretend that we had encountered an alien species and had to provide a recipe on how to make a PB&J sandwich. This sounded like a relatively simple task. The problem was that the aliens knew nothing about human culture, so you had to be very explicit with your instructions. Simple phrases could be very confusing to an alien. If a student said, “Take two pieces of bread. Put peanut butter on one slice of bread, and jelly on the other”, the teacher would respond with clarification questions. “How do you get the bread out of a bag? The peanut butter jar is closed, how do I open the jar? What do you use to put the peanut butter on the bread? Does the peanut butter go on the flat side of the bread or on the edge? How much peanut butter do I use?” All the inferred knowledge that goes along with making a PB&J sandwich had to be listed out. The instructions had to be in a logical order with incredible detail.

The PB&J activity is very similar to how a program works. Computers are dumb and they follow the instructions exactly as they are written. If the instructions are bad, the program runs into problems.

Imagine you need to write a program that creates a new document on your computer. What should you name it? What if there is another document with the same name? Should it create a new document, or append information to the existing document? If these questions are not addressed, the program will not function as intended. The unintended output might be similar to the alien species using an entire jar of peanut butter to create a PB&J sandwich because you didn’t specify how much peanut butter to use.

Now imagine the outer space alien needs a recipe for a more complicated dish like spaghetti. The alien has never used a stove or boiled water before. This recipe will have more places where the alien can make mistakes, so the instructions should be more detailed. What happens if the alien spills the entire pot of water on the floor? Your instructions must include information on how to clean water up with a mop. What if the stove causes a kitchen towel to catch fire? The recipe must include instructions on how to put out a fire. Accounting for these possible scenarios is the reason it takes time to write a program.

Creating explicitly detailed instructions is the fundamental idea behind writing a software program. I have been writing programs for over 6 years and even I struggle with finding all the scenarios where my program could break. It is difficult to know what you don’t know. As a result, it takes time to create a program. A developer must design, write, and test their code. A single feature of code could take weeks, or even months to create.

The exciting part about programming is that if you can create organized instructions, you already have the capability to write your own program. Additionally, if you have a computer with internet access, you have all the resources you need at your fingertips to begin learning.

The difficult part of developing software is learning your first programming language. Learning a programming language is very similar to learning a foreign language. It takes time, practice, and diligence. Programmers must simply learn how to translate their recipe of instructions into code.

Before I fully learned my first programming language, I would always write out the steps of my instructions in English. Then I would translate the instructions into code. This practice is called writing pseudocode, and I still use it when I program today. This technique helps organize the logical steps of the program without a solid understanding of a programming language.

I love to watch the world learn, and I strongly encourage everyone to further pursue a deeper level of technological understanding. There is an infinite amount of creative applications for software, and your unique background might result in a revolutionary program. You might create a program that saves lives or simply make a small program to make your own everyday life easier.

If you are interested in learning how to program, there are plenty of resources online. In the golden age of technology, it can be very helpful to have a basic understanding of how programs work.

  • If you would simply like to dabble in programming, a great place to start is with gamified learning apps for your phone. I would also recommend trying out a visual programming application that allows you to drag and drop the logic for your program. These applications are a great way to learn how to think in a logical manner without having the overhead of learning the programming syntax.

  • For an intermediate level, I would highly recommend websites that teach you how to develop in a free online sandbox, where you don’t have to install/set up anything in order to begin programming.

  • If you are more serious about diving into programming, there are paid online tutorial classes that walk you through writing your first program, as well as free online college-level courses from MIT. There are even programming support forums to help you debug your code.

Needless to say, there is no shortage of programming resources for any level of experience or interest. You simply need to reach out and find what level of learning best suits your interest!

With all the available resources for building software, the amount of information can be overwhelming. There are a plethora of programming languages, designs, and processes for building software. Keep an eye out for more of my upcoming articles, as I break down these complicated topics into easily relatable formats.