## 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 * Systems Level Programming * Processing and threads * Caching * Memory * System routines * Messaging Systems * Serialization * Queue Systems * Scaling * Parallel Programming * Systems Deisng * 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 * Garbage Collection * Networking * Compilers * Compression * Endianness