/ComputerScienceCrashCourse

All the fun of a CS degree squeezed into the last 6 weeks of an iOS bootcamp (:

Primary LanguageSwift

DevMountain CS

What's the point?

Computer Science is the basis for everything you've learned at DevMountain. There are two main purposes to this additional series of classes. The first purpose is to make sure you are the most prepared and able job candidates that you can be. Knowing these principles will help you perform betting in challenging interviews and will help you be more confident in all potential job oportunities. If you don't get a job, then it will be much harder to put into practice everything that you've learned here at DevMountain. The second purpose of this course is to make sure when you do get your dream job that you will be as well prepared as possible to make well designed and efficient code. The better you understand these concepts the more clearly you will be able to think about your program in general and over time writing well designed code will become natural and instinctive. By well designed code we mean that the code is easily reusable, testable and maintainable.

Learning Objectives

Week 1 - Big O Notation

  • Monday - Define what Big O is, Recognize O(n), O(1), O(n²)
  • Tuesday - Define O(log n), O(2^n). Describe real life examples of O(n), O(1), O(n²)
  • Wednesday - Apply Big O to previous stretch problems. Describe real like examples of O(log n), O(2^n)
  • Thursday - Distinguish which Big O's are the fastest / most efficient. Distinguish between time and space complexity

Week 2 - Data Structures Part 1

  • Monday - Describe why data structures are useful in improving Big O. Distinguish between Array and Linked-List
  • Tuesday - Create a Queue and a Stack using an Array or Linked-List. Be able to analyze Big O of each
  • Wednesday - Compare and contrast Arrays vs Dictionaries. Describe 2 things you can do to avoid collisions
  • Thursday - Define what a Tree is, difference types of Trees. Be able to recognize different typs of trees

Week 3 - Data Structures Part 2

  • Monday - Operate on a Binary Search Tree. Explain why a balance Binary Search Tree is desirable. Be able to analyze the Big O of a Binary Search Tree
  • Tuesday - Define and explain when a heap is used and when a trie is used
  • Wednesday - Describe what a Set is, and be able to operate on a Set
  • Thursday - Define a Graph. Recognize a problem where Graphs may be needed

Week 4 - Interview Questions

  • Monday - Be able to list the steps for solving a technical question
  • Tuesday - Explain what B.U.D. Optimization is, solve a technical question using the B.U.D. technique
  • Wednesday - Explain what the D.I.Y. technique is, solve a technical question using the D.I.Y. technique. Do the same for Simplify and Generalize
  • Thursday - Explain what the Base Case and Build technique is, solve a technical question using the Base Case and Build technique. Do the same with DataStructure Brainstorm

Week 5 - Design Patterns Part 1

  • Monday - Describe what problem Strategy Pattern solves, and how exactly it solves that problem
  • Tuesday - Describe what problem Oberserver/Decorator pattern solves, and how exactly it solves that problem
  • Wednesday - Describe what problem Factory Method solves, and how exactly it solves that problem
  • Thursday - Describe what problem Abstract Factory Method solves, and how exactly it solves that problem. Be able to describe the difference between Factory Method and Abstract Factory Method

Week 6 - Design Patterns Part 2 + Review

  • Monday - Describe what problem Facade solves, and how exactly it solves that problem
  • Tuesday - Describe what problem Proxy solves, and how exactly it solves that problem. Be able to describe the difference between Proxy and Facade Methods
  • Wednesday - Describe the four steps of Object Oriented Design. be able to design a Deck of Cards data structure
  • Thursday - Be ready to teach any given topic we've gone over . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Week 1 - Big O

  1. Day 1 - Simple definition. What is big O - O(1) & O(n) & O(n^2) - O(ab) - What is Big O? Why is it important? How do you simplify Big O? • https://www.youtube.com/watch?v=v4cd1O4zkGw <— Big O overview https://www.youtube.com/watch?v=MyeV2_tGqvwhttps://www.youtube.com/watch?v=OMInLBKYAWg <— Linear Time • https://www.youtube.com/watch?v=1Md4Uo8LtHI <— Constant Time • https://www.youtube.com/watch?v=mIjuDg8ky4U <— Quadratic Time • https://www.youtube.com/watch?v=gHzZZYJENpo <— O(N)O(1) in Swift Brian Voong
  2. Day 2 - O(log n) & O(2^n) - What is the difference between FRANK • https://www.youtube.com/watch?v=Hatl0qrT0bI <— Logarithmic Time • https://www.youtube.com/watch?v=Hatl0qrT0bI <— Exponential Time
  3. Day 3 - O(n!) / O(sqrt(n)) / and other odd ones
  4. Day 4 - Time vs. Space/ Practice • https://www.youtube.com/watch?v=bNjMFtHLioA <— Time vs. Space

Week 2 - Data Structures Part 1

  1. Day 1 - Arrays/Linked List • https://www.youtube.com/watch?v=_jQhALI4ujg <— Linked Lists • https://www.youtube.com/watch?v=jiHuPbUGlBE <— Short video on Linked Lists and Arrays
  2. Day 2 - Queue/Priority Queue/Stack • https://www.youtube.com/watch?v=wjI1WNcIntg <— Queue / Stack
  3. Day 3 - Dictionaries/ HashMap -> The two main ways of dealing with collisions // Chaining and linear Probing • https://www.youtube.com/watch?v=wjI1WNcIntg <— Hash/Hash Map/Collisions
  4. Day 4 - Trees/Binary Trees -> Definitions, uses examples etc etc • https://www.youtube.com/watch?v=oSWTXtMglKE<— B.S.T.

Week 3 - Data Structures Part 2

  1. Day 5 - Binary Search Trees -> Definitions, uses examples etc etc • https://www.youtube.com/watch?v=oSWTXtMglKE<— B.S.T.
  2. Day 6 - Heap/Trie -> Two different use cases for a tree - mention how heap is a great example of priority queue.
  3. Day 7 - Set/Set Theory -> Set theory (Unions, )
  4. Day 8 - Graphs

Week 4 - Practice Interview Questions

  1. Day 1 -
  2. Day 2 -
  3. Day 3 -
  4. Day 4 -

Week 5 - Design Patterns

  1. Day 1 - Strategy Pattern • https://www.youtube.com/watch?v=v9ejT8FO-7I
  2. Day 2 - Observer Pattern/Decorator Pattern • https://www.youtube.com/watch?v=_BpmfnqjgzQ <— Observer Pattern • https://www.youtube.com/watch?v=GCraGHx6gso <— Decorator Pattern
  3. Day 3 - Factory Method • https://www.youtube.com/watch?v=EcFVTgRHJLM
  4. Day 4 - Abstract Factory • https://www.youtube.com/watch?v=v-GiuMmsXj4

Week 6 - Design Patterns/ Design Practice

  1. Day 1 - Facade • https://www.youtube.com/watch?v=K4FkHVO5iac
  2. Day 2 - Proxy • https://www.youtube.com/watch?v=NwaabHqPHeM
  3. Day 3 - Practice Design Interview Questions • https://courses.cs.washington.edu/courses/cse403/09sp/lectures/lecture07-uml.pdf <— This is an awesome slide show teaching UML
  4. Day 4 - Review and Practice