Browse Source

Adding my initial software engineering study plan.

master
Charles Reid 5 years ago
commit
290ac1e708
  1. 168
      README.md

168
README.md

@ -0,0 +1,168 @@
# Study Plan
This repository contains checklists to prepare for
software engineering and machine learning interviews and jobs.
## Software Engineering
### Software Engineering: The Basics
Topics to review so you don't get weeded out.
[Five essential screening questions](https://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions):
* Coding - writing simple code with correct syntax (C, C++, Java).
* Object Oriented Design - basic concepts, class models, patterns.
* Scripting and Regular Expressions - know your Unix tooling.
* Data Structures - demonstrate basic knowledge of common data structures.
* Bits and Bytes - know about bits, bytes, and binary numbers.
Things you absolutely, positively **must** know:
* Algorithm complexity
* Sorting - know how to sort, know at least 2 O(n log n) sort methods (merge sort and quicksort)
* Hashtables - the most useful data structure known to humankind.
* Trees - this is basic stuff, BFS/DFS, so learn it.
* Graphs - twice as important as you think they are.
* Other Data Structures - fill up your brain with other data structures.
* Math - discrete math, combinatorics, probability.
* Systems - operating system level, concurrency, threads, processing, memory.
### Software Engineering: The Full Topics List
A much longer and fuller list of topics:
* Algorithm complexity
* Data structures
* Arrays
* Linked lists
* Stacks
* Queues
* Hash tables
* Trees
* Binary search trees
* Heap trees
* Priority queues
* Balanced search trees
* Tree traversal: preorder, inorder, postorder, BFS, DFS
* Graphs
* Directed
* Undirected
* Adjacency matrix
* Adjacency list
* BFS, DFS
* Built-In Data Structures
* Java Collections
* C++ Standard Library
* Sets
* Disjoint Sets
* Union Find
* Advanced Tree Structures
* Red-Black Trees
* Splay Trees
* AVL Trees
* k-D Trees
* Van Emde Boas Trees
* N-ary, K-ary, M-ary Trees
* Balanced Search Trees
* 2-3 Trees, 2-4 Trees
* Augmented Data Structures
* Algorithms
* NP, NP-Complete, Approximation Algorithms
* Searching
* Sequential search
* Binary search
* Sorting
* Selection
* Insertion
* Heapsort
* Quicksort
* Merge sort
* String algorithms
* String search methods
* String manipulation methos
* Recursion
* Dynamic programming
* Computational Geometry
* Convex Hull
* Object Oriented Programming
* Design patterns
* Bits and Bytes
* Mathematics
* Combinatorics
* Probability
* Linear Algebra
* FFT
* Bloom Filter
* HyperLogLog
* Crypto and Security
* Information Theory
* Parity and Hamming Code
* Entropy
* Hash Attacks
* Unix
* Kernel Basics
* Command Line Tools
* Emacs/Vim
* Systems Level Programming
* Processing and threads
* Caching
* Memory
* System routines
* Messaging Systems
* Serialization
* Queue Systems
* Scaling
* Parallel Programming
* Systems Deisng
* Scalability
* Data Handling
* Supplemental topics
* Unicode
* Endianness
* Networking
* Compilers
* Compression
* Garbage Collection
## Machine Learning
## Daily Plan
Each day:
- Pick one subject from the list.
- Watch videos on the topic.
- Implement the concept in Java or Python.
- Optionally, implement in C (and/or in C++, with or without the stdlib).
- Write tests to ensure code is correct.
- Practice until you are sick of it.
- Work within limited constraints (think interviews).
- Know the built-in types.
Code:
- [Java](https://git.charlesreid1.com/cs/java)
- [Python](https://git.charlesreid1.com/cs/python)
- [C](https://git.charlesreid1.com/cs/c)
- [C++](https://git.charlesreid1.com/cs/cpp)
Practice writing out on a whiteboard and/or on paper,
before implementing on computer.
Get a big drawing pad from the art store.
Loading…
Cancel
Save