I spent 4 months of 2014 and 7 months of 2015 and then another full year in 2018 studying all of the subjects that go into a Computer Science degree. I looked at the curriculum for Stanford and MIT (and a few others) and dove in. Computation, Complexity Theory, Encryption, Blockchain, Algorithms and Data Structures, Lambda Calculus and more. I wrote it down and decided to share it all...
Instead of a wall of theoretical text, I did my best to make them as human as possible, with hand-drawn sketches of complex topics that took me days (and sometimes months) to figure out. I wanted to write a technical book for humans that would convey the magic of our industry.
Author(s): Rob Conery, Scott Hanselman
Edition: 1.0
Publisher: Big Machine, Inc
Year: 2018
Language: English
Pages: 375
Changelog
Preface
The Basics of Logic
The Abstraction Horizon
The Rabbit Hole
The Laws of Thought
Boolean Algebra
The Great Famine
Abstract Mathematics and Algebra
The Logic of Thought
The Source of It All
The basics of Boolean Algebra
Over, Above and Beyond
Summary
A Binary Primer
Mechanical Computers
A Mechanical Brain
Symbols and Circuits
Numbers Represented with 1s and 0s
The Half Adder
The Full Adder
In the Real World
Summary, and Some Dominos
Logic Gates
Primary Operations
Secondary Operations
Complementary Operations
Yay! Who Cares?
Logical Circuits
The Half Adder
A Full Adder in JavaScript
Logical Addition
Logical Multiplication
Bitwise Operations
Bitwise Operators in Javascript
Bit Shifting
A Bitwise Half Adder
Bitwise Addition Using JavaScript
The Obligatory One-liner
This Took Me Five Days to Figure Out!
Logical Negation and Subtraction
One’s Complement
Two’s Complement
Summary
Industrial Age Communication
Telegraphs Across the Atlantic
How Much Can That Cable Send?
Digression: Noisy Information
Harry Nyquist
Messages
Quantifying Information in a Message
The information Age Begins
Rethinking Entropy and Efficiency
Measuring Information In Terms of Surprise
The Shannon Entropy
A Good Password
A Real World Example
Cracking Simple Passwords
The Entropy of Passphrases
Shannon’s First Fundamental Theorem
Efficient Encoding
Removing Redundancy
Efficient Binary Encoding
The Shannon Point
The Kraft-McMillan Inequality
Huffman Coding
Yes, But…
Summary
Shannon’s Second Fundamental Theorem
Illustration of a Noisy Channel
Joint Entropy
Conditional Entropy
Mutual Information
Channel Capacity
Error Correction
The Lovebug Encoder/Decoder
Calculating The Hamming Distance
A Super Simple Error Corrector
Redundancy and Parity Bits
The Hamming (7,4) Binary Code
Handling Multiple Errors
Scaling a Hamming Code
Encryption Basics
The Essentials
Exploration: SSH Keys
Why Do I Have Two Keys?
Acting Foolish
Rethinking The Idea of The Key
The Asymmetric Key
The Diffie-Hellman-Merkle Key Exchange
One Way Functions
Modulus vs. Remainder
Modular Confusion
Mod In Your Favorite Languages
Martin Hellman’s Breakthrough
Diffie-Hellman in JavaScript
Summary
RSA Encryption
Public Keys and Primes
The Staggering Size of N
Creating an Encryption Key
Encrypting a Message with RSA
Eve Drops In
The RSA Decryption Key
Discussion: RSA and SSH Keys
Why Does My SSH Key Look Like This?
Tangent: SSL and Your Blog
RSA, ECDSA, ED25519 – What’s the Diff?
Mental Break – CrowdTesting Crypto with RSA 129
Sometimes It's The Only Way
Find The Primes of Successively Large Numbers
SQUEAMISH OSSIFRAGE
Common Encryption (and Hashing!) Algorithms
Introduction
What is SHA-256 and Why Should I Care
Hashing Basics
Why Are Hashes Useful?
Hash Algorithm Considerations
MD2, MD4 and MD5
SHA-1 and SHA-2
SHA-2 Algorithm Basics
Discussion
Cracking a Cipher
Frequency Analysis
Cracking Hashes The Hard Way
Tangent: Weak Passwords and Password123!
Tangent: You Are All Over the Internet
An Ounce of Prevention
Cracking Passwords The Easier Way: Rainbow Tables and Common Passwords
Another PINCH of Prevention: Salts
Summary
Cryptocurrency and Blockchain
What is a Blockchain?
The Byzantine Generals
Satoshi Makes It Happen
Why People Like The Blockchain Concept
Why People Hate The Blockchain Concept
The Race
Mental Break – Turning Bits into Bucks
How Is It Possible To Pay Someone In Bits?
Money is an Abstraction
Money Is Manipulation
Booting an Economy From Scratch
Growing a Virtual Economy
Stabilizing a Virtual Economy
Money In Your Pocket, Literally
Discussion With an Expert: Steve Beauregard
A Blockchain From Scratch
Chatty Nodes Must Chat
Step 2: Mining for Zeroes
Step 4: Tuning the Difficulty
Step 5: Finishing Up
Further Reading and Resources
In Which We Say Goodbye… For Now