Lesson Weekend

Over the next five weeks, we'll be covering key computer science concepts that are taught in computer science programs and elsewhere. In Cracking the Coding Interview, Gayle Laakmann McDowell includes a list of basic, must-have knowledge for coding interviews. Our computer science curriculum is modeled around covering these recommended concepts because they provide an excellent structure for learning computer science and improving your coding interview skills.

Up to this point, we've focused on our programming skills. Computer science, on the other hand, tends to be more theoretical. It is the study of computers and computing in general. Computer science incorporates a broad range of disciplines including mathematics and logic - but you do not need to be a mathematician to learn key computer science concepts. In fact, these key computer science concepts are essential for improving your programming skills - and they will give you a deeper understanding of what exactly it is we are doing when we are programming. Think of it as being a bit like a musician that plays only by ear learning music theory, which then would give that musician more insights on everything from composing music to improvisation.

Here's an overview of what we'll cover in this course:

### Section 1: Big O Notation and Binary Trees

• Big O Notation
• Trees
• Binary Trees
• Binary Search Trees

### Section 2: Graph Theory

• Graphs
• Representing Graphs with Code
• Building Graphs
• Stacks and Queues
• Depth First Search Algorithms
• Breadth First Search Algorithms

### Section 3: Bit Manipulation and Hashing

• ASCII
• Bits, Bytes, and Binary Numbers
• Manipulating Bits
• Hash Tables
• Hash Algorithms

### Section 4: Algorithms

• Binary Search
• Insertion Sort
• Selection Sort
• Bubble Sort
• Merge Sort
• Quicksort