Computer Science fundamentals are important because it's better to understand something based on first, basic principles. Before you dive in, you should know a few things:
- These are fascinating topics that I really hope you enjoy learning about. It's hard, but totally worth it!
- Most of this will be useful in the job interview process.
- You don't need a computer science degree to learn about computer science.
Finally, it's appropriate to take 10 minutes to explore the history of computer science and programming in general with the Art of Writing Software.
- Analyze an algorithm and identify the Big O
- Identify and diagram common data structures
- Implement common algorithms and describe more complex algorithms
- Implement, evaluate, and use some common data structures
- Identify and diagram common data structures
- Define and describe the purpose of Heap, Stack, Threads, Bits, Bytes, and Garbage Collection
- Represent "static" objects, arrays, functions, and variables in diagrams
- Explain the difference between mutable values and immutable values
- Interpret unsigned binary integers
- Describe UTF-8 and ASCII, including the differences between the two
- Intro To Memory
- Memory Diagrams
- Memory Diagrams Exercises
- Binary-ASCII-UTF8
- Object-Oriented Programming
- Analyze an algorithm and identify the Big O
- Define "Abstract Data Type" (ADT) and algorithm
- Discuss what Time Complexity and Space Complexity refer to and how they differ
- Describe Big O Notation and identify the complexity of any given function
- Describe what a pointer is
- Describe and implement recursive functions
- Implement common algorithms and describe more complex algorithms
- Describe and implement the following search algorithms:
- Linear Search
- Binary Search ( also should be able to implement )
- Describe and implement the following sorting algorithms:
- Bubble Sort ( also should be able to implement )
- Selection Sort
- Insertion Sort
- Quick Sort
- Merge Sort
- Implement common algorithms and describe more complex algorithms
- Implement, evaluate, and use some common data structures
- Describe and implement Singly & Doubly Linked Lists
- Describe and implement Stacks & Queues
- Describe the concepts of LIFO & FIFO and give real-life analogies
- Use stacks and queues to process data
- Describe the purpose of trees in programming and define:
- Binary Trees
- Binary Search Trees
- Depth First Search ( also should be able to implement )
- Breadth First Search
- Pre-order, In-order, and Post-order Traversal
- Implement common algorithms and describe more complex algorithms
- Implement, evaluate, and use some common data structures
- Define and describe the relationships depicted in a Graph
- Implement graphs using different representations
- Adjacency matrix
- Adjacency list
- Edge list
- Implement BFS and DFS on graphs
- Describe Dijkstra's algorithm and
A*
- Graphs
- Modeling Problems With Graphs
- Representing Graphs in Programs
- Searching in Graphs
- Advanced Graph Search
- Graph Review Questions
- Implement common algorithms and describe more complex algorithms
- Implement, evaluate, and use some common data structures
- Define a hash function
- Describe when to use hash tables instead of arrays
The exercises in this curriculum can be run individually, or as a large group. To get an idea of where you are in the overall curriculum, run them all by cd
ing into the Exercises/
directory and running mocha
. Note: you might have to make sure your node --version
is 6.0.0
or later.
cd Exercises
node --version
npm install
mocha
To run individual groups of exercises, you can type the name of the script after mocha
.
mocha test/linked-list
That command will run all the tests in the linked-list folder. To run a single test suite, you can use mocha with the file path:
mocha test/linked-list/singly_linked_list.test.js