This is a crash course in the hard and soft components of any computer system. In introductory-level computer science classes, it'll guide readers to understand computers at various layers of abstraction. Early chapters begin with the basics of the C programming language and the inner workings of operating systems. Later, how to optimize code for various architectures, how memory management works in multi-core CPUs and much more is also covered. Accessible and easy to follow, this book uses images and exercises to break down these complex topics.