Algorithm Design If you have ever baked brownies, you know

that you first have to gather the ingredients, then measure them, mix them together, prepare

the pan, heat the oven and cook them. If you forget the sugar they don’t taste good and

you have to start over. If the oven is too hot you may burn them. Determining the right

steps, following them correctly and completely and learning from mistakes are all part of

the process of algorithm design. Algorithms are step by step instructions to

get something done or the set of rules describing how something works. A recipe, or a set of

dance steps, or the storyboard for an animation are all algorithms. Throughout the three previous steps in the

Computational Thinking process—decomposition, pattern recognition and abstraction you have

been working toward the design of an algorithm, or “a set of instructions for completing

a task.” Algorithmic design moves the problem from the modelling phase, to the operation

stage. Algorithms take the form of a recipe or list of instructions that utilize efficiency

and are written in such a way that they could allow for automation, or use of computers

to execute tasks, or they could simply be followed by a human. This set of instructions

should be sequential, complete, accurate and have a clear end point. If written for a computer

the algorithm must be comprised of a series of tasks written in a way that a computer

is able to perform. In this video we will focus first on algorithms

that don’t necessarily involve computers, and secondly on some of the key understandings

necessary to prepare an algorithm so that it could be executed by a computer. Although the term “algorithm” might strike

fear into the hearts of some who last encountered it in high school or college math classes,

the definition of this term is simply “a set of rules for solving a problem in a finite

number of steps.” An algorithm is a set of instructions and may or may not involve

mathematics. For example, a simple, digestible algorithm

that we all use is a recipe. The sequence of steps in a recipe must be followed in a

certain order for the final product to taste good. You wouldn’t bake brownies before

you mix the ingredients together. Or grease the pan after the batter has been poured in. Another simple example is getting dressed

in the morning. If you put your jeans on before your underwear you might draw some funny looks! We have been working with this necklace example

problem throughout the course, one step at a time: A necklace is constructed from 20 blue beads

and 14 red beads. Each blue bead costs $0.22 while the red beads cost $0.33 each. The cost

of the thread is $0.14 per inch, and 24 inches are required. What is the total cost of materials

for the necklace? To create an algorithm, let’s write down all

the steps it takes to solve this problem: 1. Break the problem down into its components—blue

beads, red beads, thread, their costs and amounts

2. Identify subproblems that need to be solved. Determine the cost of each quantity of material

(cost of blue beads, cost of red beads, cost of thread.), then add the costs of all three

materials together. 3. Recognize patterns between subproblems–in

this case, the first three subproblems can be solved in parallel, they don’t have to

be solved in a particular order. The second subproblem is sequential–meaning the costs

for each material must be calculated before they are added together.

4. Set up an operation that can be used for the first subproblems. (material quantity

x material cost) 5. Calculate the cost for each type of material

using the appropriate variables 6. Add the costs for each of the three materials

together to determine the total cost of the necklace

Let’s return to and review the Make a Monster example. We first decomposed the monsters

into parts (eyes, nose, mouth, etc.) and then found similarities between the features of

the three monsters. We then used abstraction to replace the specific types of body parts

with blanks so that any type of feature could be inserted. We have now created a recipe

to use for our algorithm. We can use it to instruct other students to recreate the same

or design new monsters based on the feature types. For example, if you provide this algorithm,

you come up with this new monster. When we were discussing decomposition we took

some time to explore Bee-bot, the bee that moves a step at a time towards its destination.

We looked at how its overall path was broken down into steps. Now we will focus on Bee-bot

in terms of algorithms. Can you give Bee-bot the correct set of instructions to move from

the start to the flower for Level 3? How about for Level 5? Level 6? Similar to Bee-bot, write out a set of instructions

and have someone else follow your instructions exactly to complete a task. You can emulate

Bee-bot by finding a tiled floor or using chalk on pavement to draw a grid. Take turns

writing out instructions for each other to follow to move from square A to square B.

Students must enact instructions exactly as they are written to see if all steps are correct.

The person who wrote the instructions may need to revise them if they don’t work. Here is another similar activity, but in this

one the instructions are for building a structure rather than moving around. Students work in

groups to develop algorithms to recreate models made from plastic bricks. Algorithmic design is critical in the Computational

Thinking process. If a computer is not involved, algorithmic design provides a recipe or instructions

to solve the problem. If a computer is involved, a human has to be able to tell it, in a language

it can understand, how to solve the problem. For a computer to be able to aid in the efficiency

of solving your problem, the algorithm must be comprised of a series of tasks written

in a way that a computer is able to understand and perform. This involves a translation between

the language of humans and the high level language of computers. Humans speak languages

like English, Spanish, or Arabic. Computers speak in bits, the basic unit of information

in computing. You may have heard of the binary system, where the numbers 0 and 1 are used

to communicate information. These are bits. Without getting too deep into Computer Science,

suffice it to say that computers speak many different kinds of high level languages—such

as HTML or Javascript which are comprised of bits. Computer programmers work to create

instructions through coding that are born from human ideas but translated for a computer

to understand. WISIWYG (What You See Is What You Get) interfaces

can help you understand this concept–these are designed so that non-computer science

savvy people can use computers to build what they need in their human language, but see

how that translates to computer code. Here are a few necessary understandings when

thinking about designing algorithms for computing (or otherwise). Your instructions need to be unambiguous.

For example, when baking it is more clear to say bake until a toothpick comes out clean

rather than just bake until done. An example for a computer could be “choose a number

between 1000 and 2000” instead of just “choose a large number.” You need defined inputs and outputs. The input

for the Make a Monster example is one name for each feature. The output of the algorithm

is a new monster’s face. For the Bee-bot it is a series of directional steps using

forward, backward, left turn and right turn. The output is the motion performed by the

Bee-bot. You need to have a defined end point. Your

algorithm should answer a question or produce a result and be clear when it has finished. Your instructions must be

sequenced in the correct order to complete

the task at hand. Flowcharts can help identify

actions and the order in which they need to occur. You may find you have sets or pieces

of the instructions that need to happen over and over again. This is called a loop or iteration. You may have conditional statements that affect

the variables (if/then, yes/no, true/false). In these cases, the first condition dictates

the second. You need to be able to interpret the computer’s

results. When designing an algorithm, it may be difficult to know if it is working and

the outputs are correct. Different algorithms are developed to solve the same problems and

they can produce different results. This is why testing and revising algorithms is important.

You can’t depend on the computer or machine to do all the work–you have to interpret

the results you get, think critically and determine whether or not they make sense. You have now experienced all the steps involved

in Computational Thinking–you have decomposed problems, identified patterns, abstracted

information and designed algorithms or instructions to solve a problem–using a computer…or

not. But how do you know when the process is finished?

How do you know when you are done? It can be difficult to know if you have accounted

for all the important factors and if you are truly solving the problem. Steps and skills involved in Computational

Thinking can and should be iterated (repeated). Testing is the way to determine if it works

or needs refinement. More often than not a model that arises through Computational Thinking

that is put into operation through algorithmic design must be reevaluated and refined through

testing. If your solution doesn’t quite work or make sense, you have to return to

the earlier steps in the process and try to identify where a mistake may have occurred.

This process of testing and identifying and learning from mistakes is the key to solving

big problems. Just because you haven’t learned how to

write computer code doesn’t mean you can’t try creating algorithms for computers and

programming! Several free online platforms allow you and your students to manipulate

pre-written blocks of code that represent different tasks or actions. By sequencing,

grouping, copying, repeating code, disguised as colorful blocks, you are capable of creating

and playing your own unique computer animations and games! So you don’t have to know how

to program (write code) but you do have to understand algorithms (creating a logical

set of instructions). In fact, doing this is a fun way to introduce algorithms to your

students. Creating a game or animation in this way is an excellent method for learning

how algorithms work. We’ll use Scratch as an example of one of

these programs. You can play with Scratch without creating an account (via the Create

tab), or, if you set up a free account on the Scratch website you will be able to save

your projects. You are immediately able to start to experiment with creating algorithms.

You can choose a “sprite” (character) and and create and/or control its motion,

looks, sounds, and other variables by dragging and stacking coded boxes. Concepts such as

loops or iteration can be explored using the boxes in the “control” section. You can

access operators to create conditional clauses within your algorithms in both the “control”

and “operators” sections (operators are the conditional terms we talked about earlier).

As you or your student’s understanding advances, you can create and add in your own coded blocks

for any functionality you can dream up! Scratch is open source which means you can

see and share your creations and also explore, try out and remix the creations of others.

In fact, the Bee-bot online program we have been using during this PD was created in Scratch! The ultimate goal for using computational

power in solving problems is to solve seemingly unsolvable problems, and to solve them as

efficiently as possible. Figuring out what instructions to give a computer for it to

solve a problem efficiently means thinking creatively. Computational Thinking has led to many of

the incredible tools that have become indispensable in our everyday lives. Without Computational

Thinking today’s cars wouldn’t run and today’s planes wouldn’t fly as they are

controlled by computers. Computational Thinking has and continues to streamline and optimize

efficiency in manufacturing processes to provide you with the products you buy. Computational

Thinking has led to such useful inventions as Google Maps and virtual reality. We as humans can learn from our mistakes and

advance our understanding and knowledge to solve bigger and more difficult problems.

We can work together and it helps to have a systematic method like the steps of Computational

Thinking to help us tackle seemingly impossible problems. Now especially, when solving problems

can be greatly advanced by taking advantage of the efficiency of machines and computers

it is increasingly important to plan our problem solving methods to address their incorporation.

Today’s students are tomorrow’s problem solvers! Thank you for participating in this online

professional development course.

Very nice & systematically descibed with understandable examples.Thank you.

hola

Computers are "low level" compared to human language.