Back to Basics: Learning a New Language, Software Edition (Obviously)
March 13, 2024
Story
Software surrounds us everyday, but for many of us, it’s a nebulous concept. Lots of people probably think of The Matrix with its scrolling green text, or of hackers in dark basements creating mysterious series of zeroes and ones to be used for whatever nefarious purposes.
Welcome to Back to Basics, a series where we’re going to be reviewing basic engineering concepts that may require a more complex explanation than a quick Google search could provide.
The average software developer will look at these tropes and laugh, knowing that these stereotypes barely reflect the actual coding experience.
Many people go into the field of software thinking that it’s similar to learning a foreign language. Unfortunately, it’s simultaneously simpler and harder than that. Today, we’re going to look at two key principles that will allow us to better understand what software is, and how we learn it.
‘Rithm Isn’t Just for Dancing
The first principle to consider when learning your first software language is thinking algorithmically.
Software is made up of sets of sequential instructions that perform basic tasks. These sets of instructions that run in order are called algorithms. A simple example of an algorithm you may already use is that of averaging a set of numbers.
To accomplish this, the first task is to add all the numbers together. Once this is done, you count up how many numbers you added together. When you have your tally, you divide the sum by this tally to get the average. All the same steps that we learned in elementary school — but instead of looking at it as one task, you’re creating those sequential instructions to make the computer do the math for you.
When writing software, this mentality of taking tasks and breaking them down into sets of instructions is more important than anything else. When learning a new spoken language, the overarching goal of what you’re doing is still the same: communicating with humans. When we move into the realm of software, we have to switch to an algorithmic thought process, since we are now communicating with computers.
It’s not all dissimilar, though. Just like how spoken languages all have their own special words and grammatical rules, software does too. The nice thing with software is that almost all those words are in english. Look at this piece of code.
if(myDogIsHungry=false){ takeHimForAWalk(); }else{ feedDog(kibble); }
This is pretty readable, right? Software is made so that we can understand what we’re doing without having to actually learn a whole new way of speaking. We use words, not binary, to write code, because writing code in binary is a royal pain! The larger change is the mental process of breaking problems down into algorithms, and algorithms down into instructions.
The Method to the Madness
The second essential concept is the scientific method — if you’ve been following along with this Back to Basics series, you might remember talking about this in previous articles.
You’ll probably also remember learning about the process of going from observation to hypothesis, testing to theory to law, but it’s likely that you’ve never really used it outside elementary/middle school science fair projects.
In software, any time your code stops working, the scientific method becomes invaluable. You start with an observation that something is wrong, move to a hypothesis of what’s causing it, and then create a test to see if that hypothesis is correct. If it is, then you can try to fix the problem. If it isn’t, you go back and form another hypothesis. Rinse and repeat until you find and fix the source of your woes.
Seems simple enough, right? Believe it or not, thinking in this way is actually difficult for many of us, since it’s not often that we encounter a need to exercise our scientific method skills. In the end, learning software is learning. It takes time to learn any new thing — especially a language. So be patient with yourself, and of course, practice!
ADDITIONAL RESOURCES