# Computational Thinking and Problem Solving

## Summary

Programming is a creative process that can be separated into two steps:

• Understand the problem to be solved, and build a mental model that can solve the problem abstractly
• Implement the model and code it in a formal programming language

This course focuses on the first step of the process. The main goal of this course is to help beginners learn to think logically and computationally, and to supply them with a set of problem-solving patterns. We have to choose a language, however, and JavaScript serves as an excellent vehicle to express logical solutions to problems.

This course covers:

• Thinking logically: analyzing the problem and solutions paths, the center and edge cases
• Thinking procedurally and the bottom up, imperative solution expressions
• Thinking abstractly and the top down, declarative solution expressions
• Common problem-solving patterns

The course comes with a rich set of practice problems that focus on training computational thinking skills and using the abstractions provided by JavaScript.

## Phase

Front-end Development

## Detailed Syllabus

#### List Processing and Functional Abstractions

• Passing Function as Arguments
• Declarative Programming with Abstractions
• List Processing Patterns and Abstractions
• Iteration
• Filtering / Selection
• Transformation
• Reducing / Folding
• Interrogation
• Combining Abstractions
• Exercise: Total Square Area
• Exercise: Processing Releases
• Exercise: Octal
• Exercise: Anagrams
• Exercise: Formatting Bands
• Don't Be Afraid to Use Low Level Abstractions
• You've Already Known Some Functional Programming

#### String and Text Processing

• String Processing Patterns
• String Methods
• Exercises: Strings
• Regular Expressions
• Reverse a String
• Acronym
• Email Validation
• Matching Parentheses
• Sentiment Analysis 1
• Sentiment Analysis 2
• Longest Sentence

#### A General Problem Solving Approach

• The "PEDAC" Problem Solving Process
• Understanding the Problem and Writing Test Cases
• An Example Problem: Comparing Version Numbers
• Understand the Problem and Requirements (1)
• Understand the Problem and Requirements (2)
• FAQ on the First Two Steps of the PEDAC Process
• Create Examples / Test Cases
• Work with Data Structure and Algorithm
• Translate Algorithm Steps Into Code
• Run Test Cases To Verify and Debug Code
• Watch Others Code Series
• Practice Problems