plan.txt 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502
  1. ##########################################################################################
  2. ## How to read this
  3. ##########################################################################################
  4. Everything below is an outline, and you should tackle the items in order from top to bottom.
  5. I put an asterisk * at the beginning of a line when I'm done with it. When all sub-items are done,
  6. I put a * at the top level, meaning the entire block is done. Sorry you have to remove all my *
  7. to use this the same way. If you search/replace, there are a couple of places to look out for.
  8. ##########################################################################################
  9. ## Interview Prep:
  10. ##########################################################################################
  11. * - Videos:
  12. * - https://www.youtube.com/watch?v=oWbUtlUhwa8&feature=youtu.be
  13. * - https://www.youtube.com/watch?v=qc1owf2-220&feature=youtu.be
  14. * - https://www.youtube.com/watch?v=8npJLXkcmu8
  15. * - Articles:
  16. * - http://www.google.com/about/careers/lifeatgoogle/hiringprocess/
  17. * - http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html
  18. - all the things he mentions that you need to know are listed below
  19. * - (very dated) http://dondodge.typepad.com/the_next_big_thing/2010/09/how-to-get-a-job-at-google-interview-questions-hiring-process.html
  20. * - http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions
  21. Additional (not suggested by Google but I added):
  22. * - https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4
  23. * - https://medium.com/always-be-coding/four-steps-to-google-without-a-degree-8f381aa6bd5e#.asalo1vfx
  24. * - https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1
  25. * - http://www.kpcb.com/blog/lessons-learned-how-google-thinks-about-hiring-management-and-culture
  26. * - http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/
  27. - Gayle L McDowell - Cracking The Coding Interview: https://www.youtube.com/watch?v=rEJzOhC5ZtQ
  28. - Cracking the Coding Interview: https://www.youtube.com/watch?v=aClxtDcdpsQ
  29. * - How to Get a Job at the Big 4: https://www.youtube.com/watch?v=YJZCUhxNCv8
  30. ##########################################################################################
  31. ## Knowledge:
  32. ##########################################################################################
  33. You need to know C, C++, or Java to do the coding part of the interview.
  34. They will sometimes make an exception and let you use Python or some other language, but the language
  35. must be mainstream and allow you write your code low-level enough to solve the problems.
  36. You'll see some C, C++ learning included below.
  37. There are a few books involved, see the bottom
  38. * - how computers process a program:
  39. * - https://www.youtube.com/watch?v=42KTvGYQYnA
  40. * - https://www.youtube.com/watch?v=Mv2XQgpbTNE
  41. * - Computer Arch Intro:
  42. (first video only - interesting but not required) https://www.youtube.com/watch?v=zLP_X4wyHbY&list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq&index=1
  43. * - Parity & Hamming Code:
  44. Parity:
  45. https://www.youtube.com/watch?v=DdMcAUlxh1M
  46. Hamming Code:
  47. https://www.youtube.com/watch?v=1A_NcXxdoCc
  48. https://www.youtube.com/watch?v=JAMLuxdHH8o
  49. Error Checking:
  50. https://www.youtube.com/watch?v=wbH2VxzmoZk
  51. * - C
  52. * - K&R C book (ANSI C)
  53. - C++
  54. * - basics
  55. * - pointers
  56. * - functions
  57. * - references
  58. * - templates
  59. * - compilation
  60. * - scope & linkage
  61. * - namespaces
  62. * - OOP
  63. * - STL
  64. * - functors: http://www.cprogramming.com/tutorial/functors-function-objects-in-c++.html
  65. * - C++ at Google: https://www.youtube.com/watch?v=NOCElcMcFik
  66. * - Google C++ Style Guide: https://google.github.io/styleguide/cppguide.html
  67. - Google uses clang-format (Google setting)
  68. - C++ Core Guidelines: http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines
  69. * - Efficiency with Algorithms, Performance with Data Structures: https://youtu.be/fHNmRkzxHWs
  70. - review of C++ concepts: https://www.youtube.com/watch?v=Rub-JsjMhWY
  71. * - compilers:
  72. * - https://class.coursera.org/compilers-004/lecture/1
  73. * - https://class.coursera.org/compilers-004/lecture/2
  74. * - C++: https://www.youtube.com/watch?v=twodd1KFfGk
  75. * - Understanding Compiler Optimization (C++): https://www.youtube.com/watch?v=FnGCDLhaxKU
  76. ----------------------------------------------------------------
  77. The Gauntlet:
  78. Each day I take one subject from the list below, watch videos about that subject, and write an implementation in:
  79. C - using structs and functions that take a struct * and something else as args.
  80. C++ - without using built-in types
  81. C++ - using built-in types, like STL's std::list for a linked list
  82. Python - without using built-in types
  83. and write tests to ensure I'm doing it right, keep it simple with just assert() statements
  84. Each subject does not require a whole day to be able to understand it fully.
  85. Why code in all of these?
  86. Practice, practice, practice, until I'm sick of it, and can do it with no problem (some have many edge cases and bookkeeping details to remember)
  87. Work within the raw constraints (allocating/freeing memory without help of garbage collection (except Python))
  88. Make use of built-in types so I have experience using the built-in tools for real-world use (not going to write my own linked list implementation in production)
  89. ----------------------------------------------------------------
  90. arrays
  91. No need to spend a whole day on this.
  92. * - Description:
  93. - https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays
  94. - https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays
  95. - Implement:
  96. - Practice coding using arrays and pointers, and pointer math to jump to an index instead of using indexing.
  97. * - new raw data array with allocated memory (can allocate int array under the hood, just not use its features)
  98. * - size() - number of items
  99. * - capacity() - number of items it can hold
  100. * - is_empty()
  101. - at(index) - returns item at given index
  102. - cannot append or move if full - will not tackle allocating and copying to new memory
  103. - append(item)
  104. - insert(index, item)
  105. - prepend(item) - can use insert above at index 0
  106. - delete(index)
  107. - remove(item)
  108. - find(item)
  109. - Time
  110. - O(1) to add/remove at end (amortized for allocations for more space), index, or update
  111. - O(n) to insert/remove elsewhere
  112. - Space
  113. - contiguous in memory, so proximity helps performance
  114. - space needed = size of object * number of items to store
  115. linked lists
  116. - singly-linked
  117. * - Description: https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists
  118. * - Lynda.com:
  119. - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Introduction-lists/149042/177115-4.html
  120. - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Understanding-basic-list-implementations/149042/177116-4.html
  121. - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-singly-doubly-linked-lists/149042/177117-4.html
  122. - https://www.lynda.com/Developer-Programming-Foundations-tutorials/List-support-across-languages/149042/177118-4.html
  123. * - C Code: https://www.youtube.com/watch?v=QN6FPiD0Gzo
  124. - not the whole video, just portions about Node struct and memory allocation.
  125. * - why you should avoid linked lists:
  126. - https://www.youtube.com/watch?v=YQs6IC-vgmo
  127. - implement (with tail pointer), item is the data item in a node:
  128. - push_front
  129. - get_front
  130. - pop_front
  131. - push_back
  132. - get_back
  133. - pop_back
  134. - insert_before(node, item)
  135. - insert_after(node, item)
  136. - size()
  137. - is_empty()
  138. - find(item) - assume each item is unique
  139. - remove(item) - assume each item is unique
  140. - doubly-linked list
  141. - Description: https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists
  142. - reverse a singly-linked list
  143. stacks
  144. - see: https://class.coursera.org/algs4partI-010/lecture
  145. - https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks
  146. queues
  147. - see: https://class.coursera.org/algs4partI-010/lecture
  148. - https://www.coursera.org/learn/data-structures/lecture/EShpq/queues
  149. Vectors
  150. - Vector calculus ?
  151. heaps
  152. - https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees
  153. - min heap
  154. - max heap
  155. Priority Queue
  156. - https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction
  157. - see: https://class.coursera.org/algs4partI-010/lecture
  158. - https://class.coursera.org/algs4partI-010/lecture/39
  159. - https://en.wikipedia.org/wiki/Priority_queue
  160. Disjoint Sets:
  161. - https://www.coursera.org/learn/data-structures/lecture/JssSY/overview
  162. - https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees
  163. hashtables
  164. - https://www.youtube.com/watch?v=C4Kc8xzcA68
  165. - https://class.coursera.org/algs4partI-010/lecture/52
  166. - https://www.coursera.org/learn/data-structures/home/week/3
  167. - see: https://class.coursera.org/algs4partI-010/lecture
  168. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables
  169. - test: implement with only arrays
  170. tries
  171. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries
  172. Circular buffer/FIFO:
  173. - https://en.wikipedia.org/wiki/Circular_buffer
  174. Bit operations
  175. - count on bits
  176. - https://youtu.be/Hzuzo9NJrlc
  177. - max run of off bits
  178. - bit shifting
  179. binary search
  180. Sorting
  181. - no bubble sort - it's terrible
  182. - at least one n*log(n) sorting algorithm, preferably two (say, quicksort and merge sort)
  183. - Which algorithms can be used on lists? Which on arrays? Which on both? Is Quicksort stable?
  184. - algos:
  185. - mergesort
  186. - quicksort
  187. Caches
  188. - LRU cache
  189. Trees
  190. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees
  191. - see: https://class.coursera.org/algs4partI-010/lecture
  192. - basic tree construction
  193. - traversal
  194. - manipulation algorithms
  195. - binary search trees BSTs
  196. - https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction
  197. - applications:
  198. - https://class.coursera.org/algs4partI-010/lecture/57
  199. - n-ary trees
  200. - trie-trees
  201. - at least one type of balanced binary tree (and know how it's implemented):
  202. - red/black tree
  203. - https://class.coursera.org/algs4partI-010/lecture/50
  204. - splay trees
  205. - https://www.coursera.org/learn/data-structures/lecture/O9nZ6/splay-trees
  206. - AVL trees
  207. - https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees
  208. - https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation
  209. - https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge
  210. - 2-3 Search Trees
  211. - https://class.coursera.org/algs4partI-010/lecture/49
  212. - B-Trees:
  213. - https://class.coursera.org/algs4partI-010/lecture/51
  214. - BFS (breadth-first search)
  215. - DFS (depth-first search)
  216. - know the difference between
  217. - inorder
  218. - postorder
  219. - preorder
  220. Graphs:
  221. There are three basic ways to represent a graph in memory:
  222. - objects and pointers
  223. - matrix
  224. - adjacency list
  225. - familiarize yourself with each representation and its pros & cons
  226. - BFS and DFS - know their computational complexity, their tradeoffs, and how to implement them in real code
  227. - If you get a chance, try to study up on fancier algorithms:
  228. - Dijkstra
  229. - A*
  230. - when asked a question, look for a graph-based solution first, then move on if none.
  231. Other data structures:
  232. - You should study up on as many other data structures and algorithms as possible
  233. - You should especially know about the most famous classes of NP-complete problems, such as traveling salesman and the knapsack problem, and be able to recognize them when an interviewer asks you them in disguise.
  234. - Know what NP-complete means.
  235. Recursion
  236. - when it is appropriate to use it
  237. Algorithmic complexity
  238. open-ended problems
  239. - manipulate strings
  240. - manipulate patterns
  241. design patterns:
  242. - strategy
  243. - singleton
  244. - adapter
  245. - prototype
  246. - decorator
  247. - visitor
  248. - factory
  249. Combinatorics (n choose k)
  250. Probability
  251. Dynamic Programming
  252. Processes, Threads, Concurrency issues
  253. - difference: https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread
  254. - threads: https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M
  255. - stopped here: https://www.youtube.com/watch?v=_N0B5ua7oN8&list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M&index=4
  256. - locks
  257. - mutexes
  258. - semaphores
  259. - monitors
  260. - how they work
  261. - deadlock
  262. - livelock
  263. Process resource needs
  264. Thread resource needs
  265. Modern concurrency constructs with multicore processors
  266. Context switching
  267. - How context switching is initiated by the operating system and underlying hardware
  268. Scheduling
  269. Weighted random sampling
  270. Implement system routines
  271. Distill large data sets to single values
  272. Transform one data set to another
  273. Handling obscenely large amounts of data
  274. System design:
  275. - features sets
  276. - interfaces
  277. - class hierarchies
  278. - designing a system under certain constraints
  279. - simplicity and robustness
  280. - tradeoffs
  281. Performance analysis and optimization
  282. Familiarize yourself with unix-based souped-up code editor: emacs & vi(m)
  283. vi(m):
  284. - https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr
  285. - set of 4:
  286. - https://www.youtube.com/watch?v=SI8TeVMX8pk
  287. - https://www.youtube.com/watch?v=F3OO7ZIOaJE
  288. - https://www.youtube.com/watch?v=ZYEccA_nMaI
  289. - https://www.youtube.com/watch?v=1lYD5gwgZIA
  290. emacs:
  291. - https://www.youtube.com/watch?v=hbmV1bnQ-i0
  292. - set of 3:
  293. - https://www.youtube.com/watch?v=ujODL7MD04Q
  294. - https://www.youtube.com/watch?v=XWpsRupJ4II
  295. - https://www.youtube.com/watch?v=paSgzPso-yc
  296. - https://www.youtube.com/watch?v=JWD1Fpdd4Pc
  297. Testing
  298. -------------------------------------------------------------------
  299. Extras that can't hurt:
  300. Information theory:
  301. - Markov processes:
  302. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation
  303. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation
  304. - https://www.khanacademy.org/computing/computer-science/informationtheory/moderninfotheory/v/symbol-rate-information-theory
  305. - includes Markov chain
  306. Bloom Filter
  307. - https://www.youtube.com/watch?v=-SuTGoFYjZs
  308. - http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/
  309. Fast Fourier Transform
  310. - http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/
  311. C (for basis of C)
  312. C++ (for interview answers)
  313. Machine Learning:
  314. - http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/
  315. - review videos
  316. - intro in Goodreader on iPad
  317. - http://www.dataschool.io/
  318. ---
  319. Be thinking of for when the interview comes:
  320. Think of about 20 interview questions you'll get, along the lines of the items below:
  321. have 2-3 answers for each
  322. Have a story, not just data, about something you accomplished
  323. Why do you want this job?
  324. What's a tough problem you've solved?
  325. Biggest challenges faced
  326. Best/worst designs seen
  327. Ideas for improving an existing Google product
  328. How do you work best, as an individual and as part of a team?
  329. Which of your skills or experiences would be assets in the role and why?
  330. ##########################################################################################
  331. ## Videos:
  332. ##########################################################################################
  333. 6.042: Math for CS (25 videos):
  334. - https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B
  335. 6.006: Intro to Algorithms (47 videos):
  336. - https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False
  337. 6.033: Computer System Engineering (22 videos):
  338. - https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484
  339. 6.046: Design and Analysis of Algorithms (34 videos):
  340. - https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp
  341. 6.851: Advanced Data Structures (22 videos):
  342. - https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf
  343. Stanford: Programming Paradigms (17 videos)
  344. - https://www.youtube.com/watch?v=jTSvthW34GU&list=PLC0B8B318B7394B6F&nohtml5=False
  345. ##########################################################################################
  346. ## Articles:
  347. ##########################################################################################
  348. - https://www.topcoder.com/community/data-science/data-science-tutorials/the-importance-of-algorithms/
  349. - http://highscalability.com/blog/2016/4/4/how-to-remove-duplicates-in-a-large-dataset-reducing-memory.html
  350. - http://highscalability.com/blog/2016/3/23/what-does-etsys-architecture-look-like-today.html
  351. - http://highscalability.com/blog/2016/3/21/to-compress-or-not-to-compress-that-was-ubers-question.html
  352. - http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html
  353. - http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html
  354. - http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html
  355. - http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html
  356. - http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html
  357. - http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html
  358. - http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html
  359. - http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html
  360. - http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html
  361. - http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html
  362. - http://highscalability.com/blog/2015/12/14/does-amp-counter-an-existential-threat-to-google.html
  363. - http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html
  364. ##########################################################################################
  365. ## Papers:
  366. ##########################################################################################
  367. Computing Weak Consistency in Polynomial Time
  368. - http://delivery.acm.org/10.1145/2770000/2767407/p395-golab.pdf?ip=104.200.154.80&id=2767407&acc=OA&key=4D4702B0C3E38B35%2E4D4702B0C3E38B35%2E4D4702B0C3E38B35%2E5945DC2EABF3343C&CFID=769944592&CFTOKEN=71654301&__acm__=1460506755_42d28e3f230cc8e733e2e9ed1ebe3605
  369. How Developers Search for Code: A Case Study
  370. - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf
  371. Borg, Omega, and Kubernetes
  372. - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf
  373. Continuous Pipelines at Google
  374. - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf
  375. AddressSanitizer: A Fast Address Sanity Checker
  376. - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf
  377. ##########################################################################################
  378. ## Books:
  379. ##########################################################################################
  380. Mentioned in Coaching:
  381. The Algorithm Design Manual
  382. http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202
  383. Algorithms and Programming: Problems and Solutions:
  384. http://www.amazon.com/Algorithms-Programming-Solutions-Alexander-Shen/dp/0817638474
  385. Read first:
  386. Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition:
  387. http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html
  388. Read second:
  389. Cracking the Coding Interview, Fourth Edition:
  390. - http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/
  391. Additional (not suggested by Google but I added):
  392. * - C Programming Language, Vol 2
  393. * - C++ Primer Plus, 6th Edition
  394. Programming Pearls:
  395. - http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880
  396. If you see people reference "The Google Resume", it was replaced by "Cracking the Coding Interview".
  397. Clean Code
  398. Code Complete
  399. Introduction to Algorithms
  400. ##########################################################################################
  401. ## Coding exercises/challenges:
  402. ##########################################################################################
  403. - https://courses.csail.mit.edu/iap/interview/materials.php
  404. Recommended: LeetCode: https://leetcode.com/
  405. TopCoder: https://www.topcoder.com/
  406. More:
  407. HackerRank: https://www.hackerrank.com/
  408. Codility: https://codility.com/programmers/
  409. Project Euler: https://projecteuler.net/index.php?section=problems
  410. InterviewCake: https://www.interviewcake.com/
  411. InterviewBit: https://www.interviewbit.com/invite/icjf
  412. ##########################################################################################
  413. ## Code References:
  414. ##########################################################################################
  415. For review questions in C book:
  416. https://github.com/lekkas/c-algorithms
  417. ##########################################################################################
  418. ## Once you've got the job (this is mainly for me):
  419. ##########################################################################################
  420. C++ Talks at CPPCon:
  421. - https://www.youtube.com/watch?v=hEx5DNLWGgA&index=2&list=PLHTh1InhhwT75gykhs7pqcR_uSiG601oh
  422. Compilers:
  423. - https://class.coursera.org/compilers-004/lecture
  424. Computer and processor architecture:
  425. - https://class.coursera.org/comparch-003/lecture
  426. Long series of C++ videos:
  427. - https://www.youtube.com/playlist?list=PLfVsf4Bjg79Cu5MYkyJ-u4SyQmMhFeC1C
  428. ##########################################################################################
  429. ## Done. ##
  430. ##########################################################################################