This repository will serve as an index of my Computer Science education. I decided to start keeping track of all the resources that I use to help document my growth as a Software Engineer, as well as to help serve as a Blueprint for others.
-
The Art of Unix Programming - Great introduction to fundamentals of UNIX design, as well as UNIX's history. A bit dated in some areas, but some of the design philosophies are timeless.
-
The Cathedral and the Bazaar - Great introduction to the history of Linux and the open-source community in general.
-
Hackers and Painters - Great thoughts on software design, as well as an introduction to the value of Lisp as a programming language.
-
The Elements of Computing Systems - Computer Science 101, from NAND gates and DFF's all the way through assemblers, compilers, and operating systems. Comes with a great built-in project where you implement your own computer system, starting with NAND gates and eventually reaching an implementation of Tetris. This repository represents my progress on that project so far.
- Brave Clojure - Best introductory text to Clojure that I could find. The author does an excellent job of explaining complex topics (like, what is a Lisp? What is a Macro? How do I think like a Lisp programmer?) in very simple and concrete terms.
- Combining Promises and Generators to Write Elegant Asynchronous Code in JavaScript - A blog post that I wrote.
- JavaScript Hidden Classes and Inline Caching in V8 - A blog post I wrote that covers how the V8 engine optimizes your code under the hood.
- Python's Innards: Objects 101 - Part 1 of a series that explains how Python works under the hood. A little difficult to follow (especially if you're unfamiliar with C or how virtual machines / compilers work), but an eye-opening read.
- 15 Minute Presentation I created that summarizes my research on these concepts.
- Concurrency is Not Parallelism - Fantastic 30 minute video that concretely explains what concurrency is, and how its different than parallelism.
- Consistent Hashing - Explains how consistent hashing can be used to reduce the amount of re-hashing that needs to be done when a hash table is resized. Particularly useful for building a distributed hash table (across multiple servers) where you want to be able to add and remove new nodes without rehashing every item.
- Regular Expression Match Can Be Simple and Fast - Great explanation of the main two algorithms for implementing regular expressions, as well as the tradeoffs between each of them.
This repository represents a simple regular expression engine I wrote in JavaScript to better understand the algorithms at work.
- Intro to Redis Data Structures - Reading about the basic data structures that Redis implements is a great way to quickly learn what typeof activities Redis is useful for.
-
Introduction to Microservices - Best introduction to microservices and how they can help you build scalable back-end services that I could find.
-
Amazon CTO on Eventual Consistency - Concise and articulate explanation of how eventual consistency works. The author also presents different models of eventual consistency, as well as a great mental model that can be used to reason about the topic.
-
The secret to 10 Million Concurrent Connections - The Kernel is the Problem, Not the Solution - Going from C10K to C10M
-
Unyielding - Why multi-threading causes such a headache when writing asynchronous servers
- 10 Things You Should Know About JSON Web Tokens and Cookies - Good introduction to the difference between using JWT's vs. Cookies. This website in general has a lot of great resources on JWTs.