Update

We have updated the content of our program. To access the current Software Engineering curriculum visit curriculum.turing.edu.

Whiteboarding and Pseudocoding

Learning Goals

  • Understand the relationship between problem-solving, programming, and algorithmic thinking
  • Identify and implement different strategies for solving problems
  • Identify common roadblocks to effective problem-solving

Warm Up

  • In your journal, draw out the process of how you make toast. You must start with a clean sheet of paper and you are not allowed to write/use any words.

Problem Solving

When you are presented with a problem… whether it is a complex mathematical problem or a broken printer, how do you solve it? Generally speaking, the first step in finding a solution to a problem is to be sure that you have clearly identified the problem itself. To solve problems, we can utilize the UPS strategy:

  • Understand: Read the problem. Restate the problem by writing it down in your own words. What do you know? What do you not know?
  • Plan: What problem strategy will you try? You might also draw a picture/representation of how you plan to approach the problem
  • Solve: Use your plan to implement your solution

Possible Problem Solving Strategies

Method Description Example
Trial and Error Continue trying different solutions until problem is solved Restarting phone, turning off WiFi, turning off bluetooth in order to determine why your phone is malfunctioning
Heuristic General problem-solving framework Working backwards, breaking a task into steps
Algorithm Step-by-step problem solving formula Instruction manual for installing new software on your computer

Journal/Reflection

Think about how you currently solve problems when you are programming. Has that changed since you were in Mod 1? What are some of the possible pros and cons of the methods listed above?

Whiteboarding

In the context of building out programs, whiteboarding is a useful tool to utilize in solving complex problems. If we rush into coding out the solution immediately, we completely skip over the Planning part of the process… and its likely that we don’t fully Understand the problem at hand.

In the context of interviewing for a job, being able to whiteboard is important because it shows you can think through/discuss a problem without having to actually code it first - which can be a difficult skill to learn.

Things to remember

  • Ask for feedback
  • Talk as you write
  • Pay attention to the amount of space you have to write
  • DON’T WIPE THE WHITEBOARD WITH YOUR HAND WHEN YOU ERASE THINGS
  • High level vs low level
  • Develop a shorthand for writing code:
if (foo === 'bar') {
  this.changeFoo('baz')
} else if (foo === 'baz') {
  this.changeFoo('bar');
} else {
  this.changeFoo('caw caw');
}

Could be written as shorthand:

foo = baz?
  changeFoo(bar)
foo = bar?
  changeFoo(baz)
else 
  changeFoo(caw caw)

Pseudocoding

Pseudocode is an artificial and informal language that helps programmers develop algorithms to solve problems. A key thing to remember is that pseudocode is not code. It is a way to force yourself to slow down and think about how to solve problems at a high-level, using natural language.

Pseudocode:

  • gives you a fallback
  • gives people 👀 the chance to intervene
  • demonstrates your logic
  • takes syntax errors out of the equation

Basic Structure for Pseudocoding

Sequences: Sequences are the most straightforward part of structuring pseudocode. At the most basic level, a sequence is made up of commands or steps that must be followed. Any commands in a sequence are generally written as a list.

Here’s an IRL example of a sequence for feeding my dogs:

// Pick up dog bowls from the floor
// Bring bowls to pantry
// Open up big dog food bag
// Fill big bowl
// Open up small dog food bag
// Fill small bowl
// Call dogs by name
// Place both bowls on the floor

Choices: Choices give us the option to take different paths based on certain conditions. You may find that you have just one path based on a condition, two paths, or multiple paths.

Here’s another IRL example of how I may choose a certain path (based on the weather) when dressing myself in the morning:

// Check the weather forecast
// If snow is expected, put on boots
// Otherwise, put on flip flops

Iterations: Iterations allow us to repeat steps until a certain condition is met. They always begin with a choice. Here’s another IRL example of preheating my oven:

// While the oven is not 350 degrees, wait

Which could also be written like this:

// Until the oven is 350 degrees, wait

Solving a JS Problem with Pseudocode

Imagine you were given the following prompt on a technical interview:

Create a function that determines if a string is a palindrome or not. Your function should return a boolean (true if the given word is a palindrome, false if it is not).

  1. Try writing some pseudocode that will lead you to an answer in JavaScript
  2. Use your pseudocode to write a solution – if it doesn’t lead you to one, where did your pseudocode go wrong? Was it too vague? Was it inaccurate? Was it out of order?
  3. Compare your solution, or lack thereof, to the one here
  4. Write a new draft of pseudocode that would have more easily led you to the solution above

PIA (Pseudocoding in action)

Task: Create your own filter function (on Array.prototype) to really understand/see how filter is working under the hood. You should implement a filter function that is like the <Array>.filter() in JavaScript.

[1,2,3,4].filter((num)=>{ return num > 3}) // Should return [4]

Turn and Code:

In pairs, you will be working through two problems. Be sure that you are actively switching between being the driver and the navigator role.

Problem I
Problem II

Phase I => (Understand and Plan) Break out the way that you would solve this problem in pseudocode. Remember, pseudocode is not code… but a way to work through the logic of the problem without worrying about syntax.

Person A: Driver
Person B: Navigator

Phase II => (Solve) Using your pseudocode as a guide (feeling free to make adjustments as necessary) to start to implement your solution in code.

Person B: Navigator
Person A: Driver

Some possible pitfalls to problem solving

  • Mental set - Persist in approaching a problem in a way that has worked in the past but is clearly not working now
  • Anchoring bias - Tendency to focus on one particular piece of information when making decisions or problem-solving
  • Availability bias - Decision is based upon either an available precedent or an example that may be faulty

Summary

In your journal, answer the following:

  • What kind of pitfalls/biases do you recognize in your own problem solving process?
  • How can you use your awareness of this to improve your problem-solving skills during your time as a developer?
  • Why are problem-solving strategies important?

Lesson Search Results

Showing top 10 results