Text snippets
-
Describe or solve an algorithm in a formal manner. That is, write a proof, justify why it works, or its time complexity. This is rarely, needed, but having the ability to be able to read, understand, and sometimes derive these is important
-
There is a lot of cool techniques in papers, or tiny blogs, or GDC slides describing the applications from industry / academia
-
Multiple languages (including ones you would not think relevant). (C, Lisp, Prolog, Python, assembler, C++, and Smalltalk)
-
Multiple AI concepts
-
Deep explanation of the electrical part of computer (how the processor, the ram, the buses works with diagrams)
-
How to write a compiler (C) and an interpreter (Lisp)
-
Parallelism (not only multithreading but work on multiple machines in a network)
-
Networking concepts thoroughly
-
All the rather boring parts you would not spend too much time on your own but are actually useful (Data Structures, Big O notation)
-
Algorithms: Backtracking, width vs depth search and A*-style stuff, ordering algorithms, etc
-
Algorithm complexity (O(1), O(n), and the like), to understand why your stuff goes SO slowly
-
Design Patterns: They’re a must in OOP
-
Graph Theory may be handy in very specific situations. Also a decent knowledge in maths doesn’t hurt
-
Cryptography: The most obvious. Also it doesn’t hurt to know what a hashing function is, specially because you may use hash tables
-
Machine code and how everything works underneath the surface, the stack, local variables, dynamic memory allocation, etc
-
Graduate level statistics, machine learning algorithms, deep learning and a lot more. Theory heavy stuff
Key Points
-
Embedded Systems
-
Networking
-
Big Data
-
Debugging
-
Mobile Application Development
-
Game Development
-
Web Development
-
Reading Research Papers
-
Good Math (linear algebra, vectors, calculus, graph theory)
-
Cryptography
-
Low Level Mechanics (stack, local variables, dynamic memory allocation)
-
Design Patterns/Design AntiPatterns
-
Data Engineering
-
Scientific computing
-
Low level networking