

@ 3,6 +3,63 @@ 



This repository contains checklists to prepare for 



software engineering and machine learning interviews and jobs. 







## The Plan 







### Tracks 







We are following two tracks: 



* Software Engineering Track 



* Machine Learning Track 







Software engineering track: 



* Paper and pencil working out algorithms 



* Wiki: distilled, polished notes 



* Git: toto list for topics 



* Git: code practice 



* Flashcards 







Machine learning track: 



* Paper and pencil notes (rough), problems (working out), thinking 



* Note: following Alpaydin book, working through problems 



* Wiki: distilled, polished notes and learnings 



* Summary of major concepts 



* Answers/examples worked out more clearly 



* Fast notes, for studying, not presentation, so snap photos and upload 



* Git: todo list for topics 



* Git: code practice 



* Flashcards 







### 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. 



 Create flashcards 







After one week: 



 Revisit and review 







Long term strategy: 



 Practice coding until you are sick of it. 



 Add flashcards 



 Work within limited constraints (think interviews). 



 Know the builtin 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. 







See [checklist](#checklist) below for the checklist of completed tasks. 







## Software Engineering 







### Software Engineering: The Basics 


@ 99,17 +156,6 @@ A much longer and fuller list of topics: 



* 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 


@ 125,14 +171,91 @@ A much longer and fuller list of topics: 



* Scalability 



* Data Handling 







* Crypto and Security 



* Information Theory 



* Parity and Hamming Code 



* Entropy 



* Hash Attacks 







* Unix 



* Kernel Basics 



* Command Line Tools 



* Emacs/Vim 







* Supplemental topics 



* Unicode 



* Endianness 



* Garbage Collection 



* Networking 



* Compilers 



* Compression 



* Garbage Collection 



* Endianness 







### Software Engineering: The ToDo List 







 [ ] Arrays 



 [ ] Linked lists 



 [ ] Stacks 



 [ ] Queues 



 [ ] Hash tables 







 [ ] Trees: binary search trees 



 [ ] Trees: heap trees 



 [ ] Trees: priority queues 



 [ ] Trees: balanced search trees 



 [ ] trees: red black trees 



 [ ] Trees: tree traversal 







 [ ] Graphs: directed and undirected 



 [ ] Graphs: graph <> adjacency matrix/list 



 [ ] Graphs: BFS, DFS 







 [ ] Algorithms: NP, NPComplete, Approximation 



 [ ] Search Algorithms: Sequential search 



 [ ] Search Algorithms: Binary search 



 [ ] Algorithms: Selection sort 



 [ ] Algorithms: Merge sort 



 [ ] Algorithms: Quick sort 



 [ ] Algorithms: Heap sort 



 [ ] Algorithms: String search methods 



 [ ] Algorithms: Recursion 



 [ ] Algorithms: Dynamic programming 



 [ ] Algorithms: Convex hull 



 [ ] Algorithms: Computational geometry 







 [ ] Bits and Bytes 







 [ ] Mathematics: Combinatorics 



 [ ] Mathematics: Probability 



 [ ] Mathematics: Linear Algebra (computational) 



 [ ] Mathematics: FFT 







 [ ] Systems: Processing and Threads 



 [ ] Systems: Caching 



 [ ] Systems: Memory 



 [ ] Systems: System routines 



 [ ] Systems: Messaging systems 



 [ ] Systems: Serialization 



 [ ] Systems: Queue systems 







 [ ] Scaling: Systems design 



 [ ] Scaling: Scalability 



 [ ] Scaling: Data handling 







 [ ] Parallel programming: Basic concepts/algorithms 







 [ ] Crypto Security: Information Theory 



 [ ] Crypto Security: Parity and Hamming Code 



 [ ] Crypto Security: Entropy 



 [ ] Crypto Security: Birthday/Hash Attacks 



 [ ] Crypto Security: Public Key Cryptography Math 











 [ ] Supplemental: Unicode 



 [ ] Supplemental: Garbage Collection 



 [ ] Supplemental: Networking 



 [ ] Supplemental: Compilers 



 [ ] Supplemental: Compression 



 [ ] Supplemental: Endianness 











## Machine Learning 


@ 184,7 +307,7 @@ A longer, fuller list of topics: 



* Naive Bayes 



* Gaussian Naive Bayes 



* Multinomial Naive Bayes 



* Bayesian Netowrk 



* Bayesian Network 



* BBN (Bayesian Belief Network) 







* Clustering 


@ 240,39 +363,63 @@ A longer, fuller list of topics: 



* Stacked Generalization (Blending) 



* Gradient Boosted Regression Trees 







### Machine Learning: The ToDo List 







Have 1 repo, with a github pages. 







HTML landing page with info about each topic. 







Notebook for each overarching topic, 



split into multiple notebooks as needed. 



For exmaple, a notebook to compare ridge and lasso. 







 [ ] Regression: linear regression 



 [ ] Regression: logistic regression 



 [ ] Regression: OLS regression 



 [ ] Regression: Stepwise regressoin 



 [ ] Regression: MARS 



 [ ] Regression: LOESS 







 [ ] Instance: kNearest Neighbor 



 [ ] Instance: Learning Vector Quantization 



 [ ] Instance: SelfOrganizing Map 



 [ ] Instance: Locally Weighted Learning 







 [ ] Regularization: Ridge regression 



 [ ] Regularization: LASSO 



 [ ] Regularization: Elastic net 



 [ ] Regularization: LARS 







 [ ] Decision Tree: classification tree 



 [ ] Decision Tree: CHAID 



 [ ] Decision Tree: conditional decision trees 







 [ ] Bayesian: LARS 



 [ ] Bayesian: Naive Bayes 



 [ ] Bayesian: Gaussian Bayes 



 [ ] Bayesian: Multinomial Naive Bayes 



 [ ] Bayesian: Bayesian Network 



 [ ] Bayesian: Bayesian Belief Network 







 [ ] Clustering: kMeans 



 [ ] Clustering: kMedians 



 [ ] Clustering: Expectation Maximization 



 [ ] Clustering: Hierarchical Clustering 







 [ ] Dimensionality Reduction: PCA 



 [ ] Dimensionality Reduction: tSNE 



 [ ] Dimensionality Reduction: PLS 



 [ ] Dimensionality Reduction: Multidimensional Scaling 



 [ ] Dimensionality Reduction: Principal Component Regression 



 [ ] Dimensionality Reduction: Discriminant Analyses 







 [ ] Association Rule: Apriori algorithm 







 [ ] Deep Learning: CNN 



 [ ] Deep Learning: RNN 



 [ ] Deep Learning: LSTM 



 [ ] Deep Learning: DBM 



 [ ] Deep Learning: DBN 



 [ ] Deep Learning: Stacked AutoEncoders 



























































## 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 builtin 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. 






