Understanding programming concepts for non-programmers
Tags: programming, learning, thinking, logic
Published: 2022-02-01 16:58:43

---
title: Understanding programming concepts for non-programmers
published: true
description: Understanding programming concepts for non-programmers
tags: programming, learning, thinking, logic
//cover_image: https://direct_url_to_image.jpg
---

> This article is written mostly for people who are just starting to learn programming. I'd love to hear from you, is it "clicking" or not? As my main goal as an educator is to constantly search for the new approaches working best on different types of learners all the feedback is hugely welcome 🖤

Through all the years of teaching web/mobile development at our JavaScript Full-Stack Bootcamp sometimes we've had students struggling to grasp the way programming works and computers operate on the fundamental level.

Abstraction of logic and data is often the main challenge to these students. We try different approaches in these cases and one of them is to explain programming concept with offline real-world examples from our lives.

In this article I am going to share these thoughts with you and hope it will help you to understand those concepts if you are struggling with them as well.

## Variables

Let's start with a variable. If we say that a variable is a named container which can store some data, how do we find an example of variable in our real life?

How about a name each one of us have? It can definitely contain known or unknown data. Virtually every person has a name and we can use it even without knowing what the actual name is.

Let's create a person and call this person Laura. Now the value of variable `name` would be Laura. Can we use this variable before we will know the actual name? Sure thing!

Imagine that we are about to meet this person for the first time. We are preparing our "logic" by getting ready to this dialogue:

	Me: Hi, my name is George, and you are?
	Person: Hi George, I am _name_, nice to meet you!
	Me: Nice to meet you too _name_!

So in a way we pre-write the script to run when we first will meet this person without knowing her name. Doesn't matter if her name would be Laura or Mike, it will follow the same scenario, only instead of _name_ we will have Laura, like this:

	Me: Hi, my name is George, and you are?
	Person: Hi George, I am Laura, nice to meet you!
	Me: Nice to meet you too Laura!

And this "meeting someone for the first time" scenario is an algorithm we create in our head before a certain situation.

Same happens in programming – we pre-write our code to run the same logic in the same situations but with different data. I can easily reuse this "meeting someone for the first time" scenario with another person and it could go like this:

	Me: Hi, my name is George, and you are?
	Person: Hi George, I am Antonello, nice to meet you!
	Me: Nice to meet you too Antonello!

So we can see that the logic didn't change, only the actual data, which is the person's name in this case.

## Arrays or lists

Now array is an ordered collection of several data items and we use them every day in our life when we are making… well, lists!

Imagine that you are writing a shopping list of groceries on the piece of paper. You have: 'bananas', 'kiwis', 'oranges' and if you write them down in a column you will have:

	1. bananas
	2. kiwis
	3. oranges

Every item in the grocery list has it's own number, even if you do not put them down, you still can tell immediately which one is the first, second and the last one! 

Same is with arrays in programming – they keep a list of items by default stored in the order of how they were being added.

The only big difference is that in programming we usually start counting with 0 so the first item will have position number (or index) 0, and the second item will have index 1, etc…

Now the most common way of getting the item from the list in programming would be by using index of an element, which in our example translates into something like "grocery list item number 0" and we get bananas.

If we have another list of let's say movies we want to watch and it goes like this:

	Batman
	Superman
	Nightman

To get the Superman movies we will need to tell computer: get me movies list item with index 1. One because we start counting from zero, remember?

## Objects/dictionaries

Now if we speak about an object we know that it is an unordered collection of key/value pairs where key represents the name of data and value holds the data itself. But what does it mean in real life? 

The answer is – many everyday things could be imagined as objects. For example a person could be seen as an object with many key/value pairs which are characteristics of any person like first name, last name, age, hair color, favorite coffee drink, pets owned, etc... 

All of these properties are describing the person since we all have more than one "variable" to define us. And we all share most of these properties – like first name and last name – but the values are different. 

For example person/object Laura has:

	firstName: Laura,
	lastName: Casa,
	petsOwned: cat, 
	favoriteCoffeeDrink: Latte

But person/object Antonello while sharing same properties has different values:

	firstName: Antonello,
	lastName: Sanna, 
	petsOwned: dog,
	favoriteCoffeeDrink: Espresso

To know second person's lastName we always say something like Antonello's last name which is essentially how we do in programming – name of the object followed by name of the key (property). 

Pretty much anything could be described as an object since most of the things/beings surrounding us can't be described with a single item of data like "variable". 

A book at least will have a title, author, number of pages, synopsis, price. A cat will have a name, age, color, breed, number of legs 😀, etc...

## Functions

Functions are named blocks of code which we can reuse by executing them, or calling them by name, and believe it or not we use functions every day in our lives!

Function `fill up your car with gas`, for example. It has a predefined algorithm of steps needed to achieve the goal and we repeat them or execute this "function" every time we need to pour more gas into the car.

It can go like this:

	fill up the car with gas:
		get in the _car_ 
		start it up
		drive to _gas station_
		fill it up
		pay
		drive away

As we can see, we do not mix data and logic here, we never mention a specific name or address of the gas station, we do not say which car we want to fill with gas, we only have logical steps we repeat for whatever data is incoming – it could be my own car and the gas station nearby or the rental car in some other country and the gas station I googled a moment ago. 

All these variable data, like which car and gas station, are coming into the function as arguments, so once we are actually "executing" this function and need to fill a car with gas it will look slightly different – our variables _car_ and _gas station_ will use actual data values like so:

	fill up the car with gas:
		get in the _rental car i've got on holidays_ 
		start it up
		drive to _the gas station hotel clerk suggested_
		fill it up
		pay
		drive away


As you can see, the logic will still work with actual data as well! 

## Loops 

Let's say we are having a party and making sandwiches for all. We need to make 5 of them and they all are the same - this is a perfect loop example. We need to repeat same sequence of action several times. 

We take toast, add ham, cheese, salad, another toast, done! And repeat so 5 times. So with pseudo code it will look like this:

	start loop, do 5 times
		take a toast
		add ham
		add cheese
		add salad
		put toast on top
	end loop


So we can not go to making next sandwich before we will finish the current one, and in programming loops work the same - we need to complete the current iteration before going to the next one. 

We are looping daily, even then reading a book – this loop will be done unknown number of times, since we do not know in advance until which page we are going to read this time, so in the loop we have two actions – turn page, read page - then repeat again. 


## Conditionals

Every day we have to make decisions, what to eat, what to wear, where to go, what to buy in the supermarket. Essentially it's a conditional logic in real life. It could be simple like: 

	if I am hungry in the morning
		I will have breakfast
	else
		Will only drink coffee

Or more complex with nested conditionals for more possibilities:

	Level A: eating at home
			Level B: do I have bread? 
						make a sandwich
			Level B: if not
						go buy bread
							Level C: do they have a baguette?
										buy one
							Level C: if not
										buy pita
	Level A: eating out
				go to a restaurant

So if we decide to eat at home we check if there is bread, if there is we make a sandwich but if there is not we go to a bakery where they might or might not have baguette and if they don't we buy pita.

In the very same way conditionals in the programming languages work - there is always only one of them being selected and executed – the one which gives us a logical "true". And if we have nested conditionals - like in case we are staying at home we want to check if we have bread – those nested conditionals will be checked only if parent condition is "true" – we are eating at home in this example. 

---

Hope this was helpful a bit, please share your thoughts with me, would be great to know how it settles. 

See you in school.

George

[First published at Barcelona Code School's website](https://barcelonacodeschool.com/understanding-programming-concepts-for-non-programmers)