Computer Science Why — aka ‘CS Why’ — is a book that presents a straightforward, curiosity-based approach to filling in the blanks around common, introductory material taught in Computer Science classes. If you have ever wondered “why is that?” about a programming phenomenon, historical tidbit, or common terminology, this book may have an answer that explains it.

Perfect for students, IT professionals, and the computer curious, this book provides the clear “why” to answer so many unstated CS questions. Take any example in the book, from base 2 to timezones, and you will have an answer that cements your insight on the “why” of the topic, reinforcing your rote memorization with deeper understanding and insight.
Some of the questions we answer:
- Why are topics like math, statistics, and formal logic featured so heavily in Computer Science education?
- What does 64 bit refer to?
- Why do base 2 number systems feature so prominently in Computer Science?
- Why does BIOS/UEFI exist and behave the way it does?
- Why is clock speed important in programming?
- How do debuggers “pause” programs? How do debuggers catch things like seg faults?
- Why is accurate disassembly so difficult? Given the difficulty, how do computers “know” how to run programs correctly?
- Why is it important to close a file when you’re finished with it?
- Why does POST happen?
- How do programs on the same machine interact with each other?
- Why do we have two types of physical memory (volatile and nonvolatile)?
- Why do we use ASCII layout? Why does the ASCII standard start with control characters? Why does the ASCII standard have the alphabet starting in the middle?
- Why is it called Bluetooth?
- Why do keyboards have a CAPS LOCK key?
- Why does pressing the key combination of control+g ring a bell?
- Why do monospaced or fixed fonts exist?
- Why do we use the QWERTY keyboard?
- Why is junk, voluminous or unsolicited email and messaging called spam?
- Why is the terminal labelled TTY?
- Why do many language arrays start at 0?
- How do compilers know where to find imported files and libraries?
- Why have different paradigms in programming languages, like imperative versus functional?
- Why can’t 0.1 be represented accurately in computing systems?
- When programming, why are floating point operations so tricky?
- How do garbage collectors in programs know which objects to delete?
- For arithmetic expressions, why do some programming languages not follow operator precedence unless you explicitly add parentheses to operations? Why does ordering vary somewhat across different languages?
- Why are time zones difficult to program?
- Why are languages that don’t have automatic memory management like C still so popular?
- Why don’t modifications to function parameters persist once the function returns? Why must they be passed in as pointers to be modified permanently?