https://thecomputersciencebook.com/book/ The Computer Science Book Overview [ ] Contents + Introduction + Theory of computation o Introduction o Automata theory o Computability o Algorithmic complexity o Conclusion o Further reading + Algorithms and data structures o Introduction o Data structures o Abstract data types o Algorithms o Conclusion o Further reading + Computer architecture o Introduction o Representing information o Circuits and computation o The processor o Memory o Performance optimisations o Conclusion o Further reading + Operating systems o Introduction o Common operating systems o The boot process o Interrupts: hardware support for software o The kernel o Managing the processor o Managing memory o Managing persistence o Conclusion o Further reading + Networking o Introduction o What is a network? o The networking stack model o The Internet Protocol o Transmission Control Protocol o Internet addressing and DNS o The web, hypertext and HTTP o Conclusion o Further reading + Concurrent programming o Introduction o Concurrency, parallelism and asynchrony o Determinacy and state o Threads and locks o JavaScript and the event loop o Communicating sequential processes in Go o Conclusion o Further reading + Distributed systems o Introduction o Why we need distributed systems o A theoretical model o Handling network partitions: the CAP theorem o Consistency models o Consistency protocols o Conclusion o Further reading + Programming languages o Introduction o Defining a programming language o Programming language concepts o Programming paradigms o Type systems o Conclusion o Further reading + Databases o Introduction o What does a database offer? o Relational algebra and SQL o Database architecture o B-trees o Indexes o Concurrency control in SQLite and Postgres o Conclusion o Further reading + Compilers o Introduction o Compilation and interpretation o The program life-cycle o Building a compiler o Who to trust? o Conclusion o Further reading Introduction Welcome to The Computer Science Book! This book contains ten chapters covering the main areas of a computer science degree. Together they will give you a comprehensive introduction to computer science. I learned to program through self-study and then attending a bootcamp. My bootcamp did a wonderful job of preparing me for work but there simply wasn't time to dig under the surface of web programming. When I started my first developer job I was painfully aware of how little I knew. There were things I'd heard of but had never had time to investigate properly. That was fine - at least I knew about them. Pausing to think more deeply, I realised I was programming this thing that was mostly a black box. Who knew what was in it? How did my code actually get to the processor and how did the processor know what to do with it? How did the server know when requests came and how did they get there? It felt like I was building a career on sand. Clearly, the solution was to study the computer science fundamentals I was missing. In some ways computer science is very easy to study independently. There is a huge wealth of resources freely available on the Internet. But that abundance can be paralysing if you don't know where to start. Which textbooks are the most useful? Do I really need to know everything they teach or are some bits not so relevant now? In what order should I study topics? The Computer Science Book is intended to guide you through the field of computer science. The ten chapters chart a sensible route through the subject, each one building on the concepts introduced in the preceding. Each chapter is focused on delivering the essential knowledge that will help you improve as a developer. I've generally erred on the side of the practical rather than the theoretical. Nevertheless in some places the abstract theory is unavoidable - but very interesting! Each chapter also includes a further reading section giving suggestions for independent study and introducing deeper topics that didn't fit in the chapter. Modern Operating Systems is 1136 pages long. Database Systems: The Complete Book is 1140. TCP Illustrated is 1060 (just the first volume!). This single volume can never match such textbooks in depth or comprehensiveness. To cover a full computer science course it must be very selective. I've chosen to focus on topics and concepts that I've encountered in my programming career - things that I know are important. My intention is not to cover absolutely everything you might need to know but to chart the unknown and give you the necessary knowledge and confidence to explore further as your curiosity desires. I hope you enjoy reading The Computer Science Book and that you find it useful. If you have any suggestions, find anything unclear or come across any errors please do let me know. Contents + Introduction + Theory of computation o Introduction o Automata theory o Computability o Algorithmic complexity o Conclusion o Further reading + Algorithms and data structures o Introduction o Data structures o Abstract data types o Algorithms o Conclusion o Further reading + Computer architecture o Introduction o Representing information o Circuits and computation o The processor o Memory o Performance optimisations o Conclusion o Further reading + Operating systems o Introduction o Common operating systems o The boot process o Interrupts: hardware support for software o The kernel o Managing the processor o Managing memory o Managing persistence o Conclusion o Further reading + Networking o Introduction o What is a network? o The networking stack model o The Internet Protocol o Transmission Control Protocol o Internet addressing and DNS o The web, hypertext and HTTP o Conclusion o Further reading + Concurrent programming o Introduction o Concurrency, parallelism and asynchrony o Determinacy and state o Threads and locks o JavaScript and the event loop o Communicating sequential processes in Go o Conclusion o Further reading + Distributed systems o Introduction o Why we need distributed systems o A theoretical model o Handling network partitions: the CAP theorem o Consistency models o Consistency protocols o Conclusion o Further reading + Programming languages o Introduction o Defining a programming language o Programming language concepts o Programming paradigms o Type systems o Conclusion o Further reading + Databases o Introduction o What does a database offer? o Relational algebra and SQL o Database architecture o B-trees o Indexes o Concurrency control in SQLite and Postgres o Conclusion o Further reading + Compilers o Introduction o Compilation and interpretation o The program life-cycle o Building a compiler o Who to trust? o Conclusion o Further reading Theory of computation >> Copyright (c) 2020-2022 Tom Johnson. All rights reserved.