Description
An approachable, hands-on guide to understanding how computers work, from low-level circuits to high-level code.
How Computers Really Work is a hands-on guide to the computing ecosystem: everything from circuits to memory and clock signals, machine code, programming languages, operating systems, and the internet.
But you won't just read about these concepts, you'll test your knowledge with exercises, and practice what you learn with 41 optional hands-on projects. Build digital circuits, craft a guessing game, convert decimal numbers to binary, examine virtual memory usage, run your own web server, and more.
Explore concepts like how to:
Think like a software engineer as you use data to describe a real world conceptUse Ohm's and Kirchhoff's laws to analyze an electrical circuitThink like a computer as you practice binary addition and execute a program in your mind, step-by-stepThe book's projects will have you translate your learning into action, as you:
Learn how to use a multimeter to measure resistance, current, and voltageBuild a half adder to see how logical operations in hardware can be combined to perform useful functionsWrite a program in assembly language, then examine the resulting machine codeLearn to use a debugger, disassemble code, and hack a program to change its behavior without changing the source codeUse a port scanner to see which internet ports your computer has openRun your own server and get a solid crash course on how the web worksAnd since a picture is worth a thousand bytes, chapters are filled with detailed diagrams and illustrations to help clarify technical complexities.
Requirements: The projects require a variety of hardware - electronics projects need a breadboard, power supply, and various circuit components; software projects are performed on a Raspberry Pi. Appendix B contains a complete list. Even if you skip the projects, the book's major concepts are clearly presented in the main text.
About the Author
Matthew Justice, a software engineer, spent 17 years at Microsoft where his work included debugging the Windows kernel, developing automated fixes, and leading a team of engineers building diagnostic tools and services. He has worked on everything from low-level software to high-level web applications.