Jump to navigation Jump to search

Author(s): Sanjoy Dasgupta, Christos Papadimitriou, Umesh Vazirani
Year: 2006
Supplementary material and/or errata: Penultimate draft, Errata, Link
Official Description: This text, extensively class-tested over a decade at UC Berkeley and UC San Diego, explains the fundamentals of algorithms in a story line that makes the material enjoyable and easy to digest.

Emphasis is placed on understanding the crisp mathematical idea behind each algorithm, in a manner that is intuitive and rigorous without being unduly formal.

Features include:

  • The use of boxes to strengthen the narrative: pieces that provide historical context, descriptions of how the algorithms are used in practice, and excursions for the mathematically sophisticated.
  • Carefully chosen advanced topics which can be skipped in a standard one-semester course, but can be covered in an advanced algorithms course or in a more leisurely two-semester sequence.
  • An accessible treatment of linear programming introduces students to one of the greatest achievements in algorithms. An optional chapter on the quantum algorithm for factoring provides an unique peephole into this exciting topic.
Algorithms and Data Structures
Author(s): Niklaus Wirth
Year: 1985
Supplementary material and/or errata: Oberon Version 2004
Official Description: The classical textbook on algorithms and data structures. Citing the amazon review of "oversteer": The book goes over practically important algorithms and data structures. It may not include the latest and greatest advances, but it is still very relevant in today's practical applications.

To me, the highest value of the book is not the particular methods explained, but the good style and the way of thinking about programs that the book teaches. There are very few books that can actually teach good style, and this is probably one of the best. This book is a must read for anyone wishing to become a great programmer, not merely an average one.

Review: Wikipedia
Algorithms, 4th ed.
Author(s): Kevin Wayne, and Robert Sedgewick
Year: 2011
Supplementary material and/or errata: Link
Official Description: The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne [ Amazon · Pearson · InformIT ] surveys the most important algorithms and data structures in use today. The textbook is organized into six chapters:
  • Chapter 1: Fundamentals introduces a scientific and engineering basis for comparing algorithms and making predictions. It also includes our programming model.
  • Chapter 2: Sorting considers several classic sorting algorithms, including insertion sort, mergesort, and quicksort. It also includes a binary heap implementation of a priority queue.
  • Chapter 3: Searching describes several classic symbol table implementations, including binary search trees, red-black trees, and hash tables.
  • Chapter 4: Graphs surveys the most important graph processing problems, including depth-first search, breadth-first search, minimum spanning trees, and shortest paths.
  • Chapter 5: Strings investigates specialized algorithms for string processing, including radix sorting, substring search, tries, regular expressions, and data compression.
  • Chapter 6: Context highlights connections to systems programming, scientific computing, commercial applications, operations research, and intractability.

Applications to science, engineering, and industry are a key feature of the text. We motivate each algorithm that we address by examining its impact on specific applications.


The Art of Computer Programming
Author(s): Donald E. Knuth
Year: 2011
Supplementary material and/or errata: Link
Official Description: At the end of 1999, these books were named among the best twelve physical-science monographs of the century by American Scientist , along with: Dirac on quantum mechanics, Einstein on relativity, Mandelbrot on fractals, Pauling on the chemical bond, Russell and Whitehead on foundations of mathematics, von Neumann and Morgenstern on game theory, Wiener on cybernetics, Woodward and Hoffmann on orbital symmetry, Feynman on quantum electrodynamics, Smith on the search for structure, and Einstein's collected papers. Wow!
Introduction to Algorithms, 3rd ed.
Author(s): Thomas H. Cormen, Charles E. Leiserson, Ronald L Rivest, Clifford Stein
Year: 2009
Supplementary material and/or errata: Link
Official Description: Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.

The first edition became a widely used text in universities worldwide as well as the standard reference for professionals. The second edition featured new chapters on the role of algorithms, probabilistic analysis and randomized algorithms, and linear programming. The third edition has been revised and updated throughout. It includes two completely new chapters, on van Emde Boas trees and multithreaded algorithms, and substantial additions to the chapter on recurrences (now called "Divide-and-Conquer"). It features improved treatment of dynamic programming and greedy algorithms and a new notion of edge-based flow in the material on flow networks. Many new exercises and problems have been added for this edition.

As of the third edition, this textbook is published exclusively by the MIT Press.


Compiler Theory
Assemblers and Loaders
Author(s): David Salomon
Year: 1993
Supplementary material and/or errata: Freely available
Official Description: Written during 1985--1992, the book developed from class notes on computer organization. It includes numerous exercises with answers provided, and review questions following each chapter. The book is bound as a paperback with a colorful cover.
Compilers: Principles, Techniques, & Tools
Author(s): Alfred V. Aho, Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman
Year: 2006
Supplementary material and/or errata: Link
Official Description: Compilers: Principles, Techniques and Tools, known to professors, students, and developers worldwide as the "Dragon Book," is available in a new edition. Every chapter has been completely revised to reflect developments in software engineering, programming languages, and computer architecture that have occurred since 1986, when the last edition published. The authors, recognizing that few readers will ever go on to construct a compiler, retain their focus on the broader set of problems faced in software design and software development.

New chapters include:

Chapter 10 Instruction-Level Parallelism
Chapter 11 Optimizing for Parallelism and Locality
Chapter 12 Interprocedural Analysis

Linkers and Loaders
Author(s): John R. Levine
Year: 1999
Supplementary material and/or errata: Free manuscript, Errata and code
Official Description: Whatever your programming language, whatever your platform, you probably tap into linker and loader functions all the time. But do you know how to use them to their greatest possible advantage? Only now, with the publication of Linkers and Loaders, is there an authoritative book devoted entirely to these deep-seated compile-time and run-time processes. The book begins with a detailed and comparative account of linking and loading that illustrates the differences among various compilers and operating systems. On top of this foundation, the author presents clear practical advice to help you create faster, cleaner code. You'll learn to avoid the pitfalls associated with Windows DLLs, take advantage of the space-saving, performance-improving techniques supported by many modern linkers, make the best use of the UNIX ELF library scheme, and much more. If you're serious about programming, you'll devour this unique guide to one of the field's least understood topics. Linkers & Loaders is also an ideal supplementary text for compiler and operating systems courses.


  • Includes a linker construction project written in Perl, with project files available for download.
  • Covers dynamic linking in Windows, UNIX, Linux, BeOS, and other operating systems.
  • Explains the Java linking model and how it figures in network applets and extensible Java code.
  • Helps you write more elegant and effective code, and build applications that compile, load, and run more efficiently.
Review: Excellently written and easy to read, yet thorough and informative. It has just enough whimsy to make what most readers find a dry topic entertaining. While the current edition is now somewhat dated, it covers the majority of what one needs to understand how both linkage editors and program loaders work. - User:Schol-r-lea

Computer Architecture

Computer Architecture: A Quantitative Approach, 5th ed.
Author(s): John L. Hennessy, and David A. Patterson
Year: 2011
Supplementary material and/or errata: Link
Official Description: The computing world today is in the middle of a revolution: mobile clients and cloud computing have emerged as the dominant paradigms driving programming and hardware innovation today. The Fifth Edition of Computer Architecture focuses on this dramatic shift, exploring the ways in which software and technology in the cloud are accessed by cell phones, tablets, laptops, and other mobile computing devices. Each chapter includes two real-world examples, one mobile and one datacenter, to illustrate this revolutionary change.
Computer Systems: A Programmer's Perspective, 2nd ed.
Author(s): Randal E. Bryant, and David R. O'Hallaron
Year: 2010
Supplementary material and/or errata: Manuscript, Web asides, errata, Link, Blog
Official Description: This book (CS:APP2e) is the second edition of a book that stems from the introductory computer systems course we developed at Carnegie Mellon University, starting in the Fall of 1998, called "Introduction to Computer Systems" (ICS). The presentation is based on the following principles, which aim to help the students become better programmers and to help prepare them for upper-level systems courses:
  • Students should be introduced to computer systems from the perspective of a programmer, rather from the more traditional perspective of a system implementer. What does this mean?
  • Students should get a view of the complete system, comprising the hardware, operating system, compiler, and network.
  • Students learn best by developing and evaluating real programs that run on real machines.

We cover data representations, machine level representations of C programs, processor architecture, program optimizations, the memory hierarchy, linking, exceptional control flow (exceptions, interrupts, processes, and Unix signals), virtual memory and memory management, system-level I/O, basic network programming, and concurrent programming. These concepts are supported by series of fun and hands-on lab assignments. See the manuscript Preface for more details.

Structured Computer Organization, 6th ed.
Author(s): Andrew S. Tanenbaum, and Todd Austin
Year: 2012
Supplementary material and/or errata: Link
Official Description: Structured Computer Organization, specifically written for undergraduate students, is a best-selling guide that provides an accessible introduction to computer hardware and architecture. This text will also serve as a useful resource for all computer professionals and engineers who need an overview or introduction to computer architecture.

This book takes a modern structured, layered approach to understanding computer systems. It's highly accessible - and it's been thoroughly updated to reflect today's most critical new technologies and the latest developments in computer organization and architecture. Tanenbaum’s renowned writing style and painstaking research make this one of the most accessible and accurate books available, maintaining the author’s popular method of presenting a computer as a series of layers, each one built upon the ones below it, and understandable as a separate entity.



The Indispensable PC Hardware Book, 4th ed.
Author(s): Hans-Peter Messmer
Year: 2001
Supplementary material and/or errata: N/A
Official Description: This fully revised and popular book is now up-to-date and even more comprehensive than before. The Indispensable PC Hardware Book 4/e will be 'indispensable' to anyone who wants to know more about the inner workings of a personal computer: from programmers who want access to hardware components; professionals and home-users who wants to or has to understand the structure and functioning of a personal computer; to users who want to up-grade their PC's, and dealers who wish to advise their customers--this book will provide the solution to all your hardware questions. Even beginners should not shy away as this book begins with an easy introduction to the subject area.

Key highlights:

  • CPU's from the 8086/8088 to the Pentium III and Athlon
  • Real, protected and virtual models
  • Windows and plug&play devices
  • CPU Clones from all major manufacturers
  • Chipsets and support chips
  • Timers, interrupts and DMA
  • I/O programming and PCI bus programming
  • AGP variants and graphic systems
  • Universal serial bus
  • Local storage from the diskette to DVD
  • Memory systems, SDRAM, EDO, flas, RAM bus, and modules
  • Extensive glossary which explains most of the terms and concepts related to personal computer hardware.
  • Appendices brimming with practical advice, especially for programmers.
The Undocumented PC, 2nd ed.
Author(s): Frank van Gilluwe
Year: 1996
Supplementary material and/or errata: N/A
Official Description: The Undocumented PC is your technical guide into the inner workings of the PC. At over 1100 pages, The Undocumented PC is the standard that programmers around the world rely on to create powerful programs and to better understand all areas of the PC. Get the competitive advantage of knowing how to utilize and connect to PC firmware and hardware.

Human-Computer Interaction


Computer Networks, 5th ed.
Author(s): Andrew S. Tanenbaum, and David J. Wetherall
Year: 2010
Supplementary material and/or errata: Link
Official Description: Computer Networks, 5/e is appropriate for Computer Networking or Introduction to Networking courses at both the undergraduate and graduate level in Computer Science, Electrical Engineering, CIS, MIS, and Business Departments.

Tanenbaum takes a structured approach to explaining how networks work from the inside out. He starts with an explanation of the physical layer of networking, computer hardware and transmission systems; then works his way up to network applications. Tanenbaum's in-depth application coverage includes email; the domain name system; the World Wide Web (both client- and server-side); and multimedia (including voice over IP, Internet radio video on demand, video conferencing, and streaming media. Each chapter follows a consistent approach: Tanenbaum presents key principles, then illustrates them utilizing real-world example networks that run through the entire book—the Internet, and wireless networks, including Wireless LANs, broadband wireless and Bluetooth. The Fifth Edition includes a chapter devoted exclusively to network security. The textbook is supplemented by a Solutions Manual, as well as a Website containing PowerPoint slides, art in various forms, and other tools for instruction, including a protocol simulator whereby students can develop and test their own network protocols.

Computer Networking: A Top-Down Approach, 6th ed.
Author(s): James F. Kurose, Keith W. Ross
Year: 2012
Supplementary material and/or errata: Link
Official Description: Computer Networking continues with an early emphasis on application-layer paradigms and application programming interfaces (the top layer), encouraging a hands-on experience with protocols and networking concepts, before working down the protocol stack to more abstract layers.

This book has become the dominant book for this course because of the authors’ reputations, the precision of explanation, the quality of the art program, and the value of their own supplements.

Visit the authors’ blog for information and resources to discuss the newest edition, as well as valuable insights, teaching tips, and discussion about the field of Computer Networking



Inside AppleTalk, 2nd ed.
Author(s): Gursharan S. Sidhu, Richard F. Andrews, and Alan B. Oppenheimer
Year: 1990
Supplementary material and/or errata: Free book
Official Description: Written by Gursharan S. Sidhu, technical director of Network Systems Development at Apple Computer, and two of Apple's senior staff engineers - Richard F. Andrews and Alan B. Oppenheimer - "Inside AppleTalk" provides an in-depth discussion of the protocol architecture of the AppleTalk network system. This Second Edition features completely updated, detailed descriptions of the AppleTalk protocols, including the enhancements of AppleTalk Phase 2, as well as a fundamental overview by Mr. Sidhu.

The Little Black Book: Mail Bonding with OSI Directory Services
Author(s): Marshall T. Rose
Year: 1991
Supplementary material and/or errata: N/A
Official Description: From the author of the bestselling The Open Book and The Simple Book, this comprehensive guide to directory services technology provides the underlying infrastructure to a variety of communication services. The guide explores protocols and protocol suites, giving the reader techniques on simplified message handling and routing over electronic networks. It discusses the network model message handling, user agents, message transfer, gateway, and more used in electronic communications. The handbook introduces such topics as X.500 directory, and will be of interest to those involved with electronic mail, network communications, and other electronic networks.
The Open Book: A Practical Perspective on OSI
Author(s): Marshall T. Rose
Year: 1990
Supplementary material and/or errata: N/A
Official Description: The OSI protocol suite (an internationally standardized set of rules for computer communications) offers a unique promise: it has the potential to provide a political and technical solution to world-wide networking. Computers--from supers to workstations and PCs, from the executive suite to the laboratory, and from Palo Alto to London, or anywhere--can all share a common set of rules for communicating. But, with any emerging technology, there are numerous questions to be answered and issues to be addressed. The Open Book is designed to examine those complex questions and issues and provide a balanced set of perspectives.


TCP/IP Illustrated
Author(s): Gary R. Wright, Kevin R. Fall, and W. Richard Stevens
Year: 2011 (Vol1), 1995 (Vol2), 1996 (Vol3)
Supplementary material and/or errata: Volume 2, Volume 3
Official Description: The TCP/IP Illustrated books are praised for their highly effective visual approach to the essential TCP/IP topics facing today's networking professionals. The word 'illustrated' distinguishes this book from the rest. By forcing conditions to occur, and then displaying the results, TCP/IP Illustrated gives readers a much greater understanding of the concepts than words alone can provide. The books are noted for their diagrams and clear and readable writing style.



USB: The Universal Serial Bus
Author(s): Benjamin David Lunt
Year: 2018
Supplementary material and/or errata: Link
Official Description: This book is for those who are building an operating system, writing embedded code, or just want to learn how to communicate with the USB hardware and attached devices directly through hardware programming.

This book will show you how to find and initialize each of the four major USB Host Controllers, set up USB stacks, and communicate with attached devices. It has detailed information and examples of each step required to accomplish this. Detailed information for the UHCI, OHCI, EHCI, and the new Super Speed xHCI controller is easy to follow and understand.

Resources Included:

  • Source code - Shows how to detect a controller and send/receive data to/from the attached device(s).

Operating Systems

Modern Operating Systems, 3rd ed.
Author(s): Andrew S. Tanenbaum
Year: 2007
Supplementary material and/or errata: Link
Official Description: For Introductory Courses in Operating Systems in Computer Science, Computer Engineering, and Electrical Engineering programs.

The widely anticipated revision of this worldwide best-seller incorporates the latest developments in operating systems (OS)technologies. The Third Edition includes up-to-date materials on relevant OS such as Linux, Windows, and embedded real-time and multimedia systems. Tanenbaum also provides information on current research based on his experience as an operating systems researcher.

Student Resources Include:

  • Online Exercises - Provide hands-on experience with building as well as analyzing the performance of OS. In particular, these exercises have been designed to provide experience with analyzing the resource consumptions in Windows and Linux.
  • Simulation Exercises - Designed to provide experience with building some key components of an OS, including process scheduling, main memory allocation, paging algorithms and virtual memory, and file systems.
  • Lab Experiments
  • Please note, GOAL is no longer available with this book.

Password-Protected Instructor Resources (Select the Resources Tab to View Downloadable Files):

  • Power Point Lecture Slides
  • Figures in both .jpeg and .eps file format
  • Solutions to Exercises
  • Please note, GOAL is no longer available with this book.

Modern Operating Systems, 3e is the recipient of the Text and Authors Association (TAA) 2010 McGuffey Longevity Award. The McGuffey Longevity Award recognizes textbooks whose excellence has been demonstrated over time.

Operating System Concepts, 9th ed.
Author(s): Avi Silberschatz, Peter Baer Galvin, and Greg Gagne
Year: 2012
Supplementary material and/or errata: Link
Official Description:
Operating systems: Internals and Design Principles, 7th ed.
Author(s): William Stallings
Year: 2011
Supplementary material and/or errata: Link 1, Link 2
Official Description: A state-of-the art survey of operating system principles. Covers fundamental technology as well as contemporary design issues, such as threads, microkernels, SMPs, real-time systems, multiprocessor scheduling, embedded OSs, distributed systems, clusters, security, and object-oriented design. Third and fourth editions received the TAA award for the best Computer Science and Engineering Textbook of the year.
Operating Systems: Three Easy Pieces
Author(s): Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau
Year: 2015
Supplementary material and/or errata: Website
Official Description: A free book discussing operating system theory an implementation. The book is centered around three conceptual pieces that are fundamental to operating systems: virtualization, concurrency, and persistence. In understanding the conceptual, you will also learn the practical, including how an operating system does things like schedule the CPU, manage memory, and store files persistently.

Author(s): Richard A. Burgess
Year: 2000
Supplementary material and/or errata: Book, code
Official Description: MMURTL-V1.0 - is a book that is very popular among computer programmers interested in the internal workings of a computer operating system. Shown to the left as originally printed, it was previously titled "Developing Your own 32 Bit Operating System" (ISBN 0-672-30655-7) and was published by SAMS/MacMillan. We have renamed the book MMURTL-V1.0 (ISBN 1-58853-000-0) and the printed version is a "Perfect Bind" soft cover (see the additional picture at very bottom of page). It was renamed because this is the name that the author had originally intended. MMURTL is a bad acronym for Message based MUltitasking Real Time kerneL (to quote the author: "Hey.. all the good acronyms were taken!").

This is literally a "how to book" on writing a computer operating system, and includes the assembler and C language code to build one. In fact, it contains the complete operating system source code, an assembler and C compiler, along with their source code, on the accompanying CD! This is the exact text of the original book except where the author has made very minor corrections where the original text was incorrect (editing mistakes, typos, etc.). You may view the first chapter which is an overview of the book, and the author's goals with the link in the table below.

The PDF ebook is approximately 2.7 Mb. Total size of all files to download is approximately 8.5 Mb. The printed version is approximately 604 pages, while the PDF version is 667 pages. The printed version also contains a complete index generated by the author.

Operating Systems: Design and Implementation, 3rd ed.
Author(s): Andrew S. Tanenbaum, and Albert S. Woodhull
Year: 2006
Supplementary material and/or errata: Link
Official Description: Operating Systems Design and Implementation, 3e, is ideal for introductory courses on computer operating systems. Written by the creator of Minix, professional programmers will now have the most up-to-date tutorial and reference available today.

Revised to address the latest version of MINIX (MINIX 3), this streamlined, simplified new edition remains the only operating systems text to first explain relevant principles, then demonstrate their applications using a Unix-like operating system as a detailed example. It has been especially designed for high reliability, for use in embedded systems, and for ease of teaching.

Practical File System Design with the Be File System
Author(s): Dominic Giampaolo
Year: 1998
Supplementary material and/or errata: Free book and code
Official Description: This is the new guide to the design and implementation of file systems in general, and the Be File System (BFS) in particular. This book covers all topics related to file systems, going into considerable depth where traditional operating systems books often stop. Advanced topics are covered in detail such as journaling, attributes, indexing and query processing. Built from scratch as a modern 64 bit, journaled file system, BFS is the primary file system for the Be Operating System (BeOS), which was designed for high performance multimedia applications.

You do not have to be a kernel architect or file system engineer to use Practical File System Design. Neither do you have to be a BeOS developer or user. Only basic knowledge of C is required. If you have ever wondered about how file systems work, how to implement one, or want to learn more about the Be File System, this book is all you will need.

  • Review of other file systems, including Linux ext2, BSD FFS, Macintosh HFS, NTFS and SGI's XFS.
  • Allocation policies for placing data on disks and discussion of on-disk data structures used by BFS
  • How to implement journaling
  • How a disk cache works, including cache interactions with the file system journal
  • File system performance tuning and benchmarks comparing BFS, NTFS, XFS, and ext2
  • A file system construction kit that allows the user to experiment and create their own file systems
Project Oberon: The Design of an Operating System and Compiler
Author(s): Niklaus Wirth, and Jürg Gutknecht
Year: 1992
Supplementary material and/or errata: New, updated edition 2013, with processor in FPGA, the first edition of 1992 is available here with the original code.
Official Description: In 1985 Niklaus Wirth and Juerg Gutknecht embarked on a project to build a new workstation from scratch. The quote from Einstein: 'Make it as simple as possible, but not simpler' served as a signpost for their approach resulting in a system of exemplary lucidity, efficiency and compactness. Wirth was fascinated by the accuracy and reliability of the Voyager space probe then passing Oberon, one of the moons of Uranus. The project was christened Oberon in its honor.

This is the first-hand account of the design, develoment and implementation of Oberon. It provides a facinating insight into the theory and practice of workstation development for all those eager to learn from the experience of two world class software engineers.

Project Oberon includes:

  • The complete set of program listings for the Oberon system, together with detailed explanations of how the system was developed
  • A demonstration of how economical software engineering can produce a powerful, efficient and flexible system requiring a fraction of the computer power and storage capacity of current commercial operating systems
  • An in-depth account of the Oberon System as the basis for a multi-server workstation, including file distribution, printing and electronic mail facilities.
The Design and Implementation of the FreeBSD Operating System, 2nd ed.
Author(s): Marshall Kirk McKusick, George V. Neville-Neil, and Robert N.M. Watson
Year: 2014
Supplementary material and/or errata: Link
Official Description: The most complete, authoritative technical guide to the FreeBSD kernel's internal structure has now been extensively updated to cover all major improvements between Versions 5 and 11. Approximately one-third of this edition's content is completely new, and another one-third has been extensively rewritten.

Three long-time FreeBSD project leaders begin with a concise overview of the FreeBSD kernel's current design and implementation. Next, they cover the FreeBSD kernel from the system-call level down–from the interface to the kernel to the hardware. Explaining key design decisions, they detail the concepts, data structures, and algorithms used in implementing each significant system facility, including process management, security, virtual memory, the I/O system, filesystems, socket IPC, and networking.


Windows Internals, 6th ed.
Author(s): Mark Russinovich, David A. Solomon, and Alex Ionescu
Year: 2012
Supplementary material and/or errata: Link
Official Description: Windows Internals, 6th edition covers the internals of the core kernel components of the Windows 7 and Windows Server 2008 R2 operating systems. This classic book will help you:
  • Understand how the core system and management mechanisms work—from the object manager to services to the registry
  • Explore internal system data structures using tools like the kernel debugger
  • Grasp the scheduler’s priority and CPU placement algorithms
  • Go inside the Windows security model to see how it authorizes access to data
  • Understand how Windows manages physical and virtual memory
  • Tour the Windows networking stack from top to bottom—including APIs, protocol drivers, and network adapter drivers
  • Troubleshoot file-system access problems and system boot problems
  • Learn how to analyze crashes
  • Sixth in the series, this edition was again written by Mark Russinovich, a Technical Fellow in Microsoft’s Azure Group, David Solomon, an operating systems expert and Windows internals teacher, and Alex Ionescu, Chief Architect at CrowdStrike and specializing in OS internals and security. Besides updates for changes in Windows, there are many new experiments and examples that highlight the use of both existing and new Sysinternals tools.

The sixth edition is being released in two parts: Part 1 is available now and Part 2 will be available in September. The reason for the split was to get the content into readers’ hands as soon as possible.


Programming Languages



C: A Reference Manual, 5th ed.
Author(s): Samuel P. Harbison III, and Guy L. Steele Jr.
Year: 2002
Supplementary material and/or errata: Link
Official Description: This best-selling, authoritative reference manual provides a complete description of the C language, the run-time libraries, and a style of C programming that empha_sizes correctness, portability, and maintainability.

Describing the C language more clearly and in more detail than any other book, authors Samuel P. Harbison and Guy L. Steele Jr. provide in a single manual:

  • Standard C (1999) - the new revison of the C Standard supports complex and Boolean types, variable length arrays, precise floating-point programming, and new libraries for portability and internationalization.
  • Standard C (1989)- the version of C used by most of today's programmers.
  • Traditional C-common practice before 1990, with millions of lines of code in use every day.
  • C++ compatible C-code that can be used as C or C++.
  • The complete C run-time libraries for all C versions.
  • C: A Reference Manual is the only book that describes all the details of C-past and present. It is the single must-have reference for all C programmers and implementors.

Thoroughly revised and updated, the expanded Fifth Edition includes a complete description of the latest C Standard, ISO/IEC 9899:1999, with its powerful language extensions and new libraries.

New! Visit the Web site. contains source code for the longer examples in the book, expanded discussions on language issues, the latest ISO/IEC language corrigenda, and links to other C resources.

The C Programming Language, 2nd ed.
Author(s): Brian W. Kernighan, and Dennis M. Ritchie
Year: 1988
Supplementary material and/or errata: Link
Official Description: This book is meant to help the reader learn how to program in C. It is the definitive reference guide, now in a second edition. Although the first edition was written in 1978, it continues to be a worldwide best-seller. This second edition brings the classic original up to date to include the ANSI standard.

From the Preface:

We have tried to retain the brevity of the first edition. C is not a big language, and it is not well served by a big book. We have improved the exposition of critical features, such as pointers, that are central to C programming. We have refined the original examples, and have added new examples in several chapters. For instance, the treatment of complicated declarations is augmented by programs that convert declarations into words and vice versa. As before, all examples have been tested directly from the text, which is in machine-readable form.

As we said in the first preface to the first edition, C "wears well as one's experience with it grows." With a decade more experience, we still feel that way. We hope that this book will help you to learn C and use it well.

The CERT C Secure Coding Standard
Author(s): Robert C. Seacord
Year: 2008
Supplementary material and/or errata: Freely available
Official Description: Software security has major implications for the operations and assets of organizations, as well as for the welfare of individuals. To create secure software, developers must know where the dangers lie. Secure programming in C can be more difficult than even many experienced programmers believe.

This book is an essential desktop reference documenting the first official release of The CERT® C Secure Coding Standard. The standard itemizes those coding errors that are the root causes of software vulnerabilities in C and prioritizes them by severity, likelihood of exploitation, and remediation costs. Each guideline provides examples of insecure code as well as secure, alternative implementations. If uniformly applied, these guidelines will eliminate the critical coding errors that lead to buffer overflows, format string vulnerabilities, integer overflow, and other common software vulnerabilities.


The Art of Computer Virus Research and Defense
Author(s): Peter Szor
Year: 2005
Supplementary material and/or errata: Link
Official Description: Symantec's chief antivirus researcher has written the definitive guide to contemporary virus threats, defense techniques, and analysis tools. Unlike most books on computer viruses, The Art of Computer Virus Research and Defense is a reference written strictly for white hats: IT and security professionals responsible for protecting their organizations against malware. Peter Szor systematically covers everything you need to know, including virus behavior and classification, protection strategies, antivirus and worm-blocking techniques, and much more.

Szor presents the state-of-the-art in both malware and protection, providing the full technical detail that professionals need to handle increasingly complex attacks. Along the way, he provides extensive information on code metamorphism and other emerging techniques, so you can anticipate and prepare for future threats.

Szor also offers the most thorough and practical primer on virus analysis ever published—addressing everything from creating your own personal laboratory to automating the analysis process. This book's coverage includes

  • Discovering how malicious code attacks on a variety of platforms
  • Classifying malware strategies for infection, in-memory operation, self-protection, payload delivery, exploitation, and more
  • Identifying and responding to code obfuscation threats: encrypted, polymorphic, and metamorphic
  • Mastering empirical methods for analyzing malicious code—and what to do with what you learn
  • Reverse-engineering malicious code with disassemblers, debuggers, emulators, and virtual machines
  • Implementing technical defenses: scanning, code emulation, disinfection, inoculation, integrity checking, sandboxing, honeypots, behavior blocking, and much more
  • Using worm blocking, host-based intrusion prevention, and network-level defense strategies
Reversing: Secrets of Reverse Engineering
Author(s): Eldad Eilam
Year: 2005
Supplementary material and/or errata: Link
Official Description: Beginning with a basic primer on reverse engineering-including computer internals, operating systems, and assembly language-and then discussing the various

applications of reverse engineering, this book provides readers with practical, in-depth techniques for software reverse engineering. The book is broken into two parts, the first deals with security-related reverse engineering and the second explores the more practical aspects of reverse engineering. In addition, the author explains how to reverse engineer a third-party software library to improve interfacing and how to reverse engineer a competitor's software to build a better product.

  • The first popular book to show how software reverse engineering can help defend against security threats, speed up development, and unlock the secrets of competitive products
  • Helps developers plug security holes by demonstrating how hackers exploit reverse engineering techniques to crack copy-protection schemes and identify software targets for viruses and other malware
  • Offers a primer on advanced reverse-engineering, delving into "disassembly"-code-level reverse engineering-and explaining how to decipher assembly language
Security Engineering, 2nd ed.
Author(s): Ross Anderson
Year: 2008
Supplementary material and/or errata: Link
Official Description: The world has changed radically since the first edition of this book was published in 2001. Spammers, virus writers, phishermen, money launderers, and spies now trade busily with each other in a lively online criminal economy and as they specialize, they get better. In this indispensable, fully updated guide, Ross Anderson reveals how to build systems that stay dependable whether faced with error or malice. Here s straight talk on critical topics such as technical engineering basics, types of attack, specialized protection mechanisms, security psychology, policy, and more.



Applied Cryptography, 2nd ed.
Author(s): Bruce Schneier
Year: 1996
Supplementary material and/or errata: Link
Official Description: This new edition of the cryptography classic provides you with a comprehensive survey of modern cryptography. The book details how programmers and electronic communications professionals can use cryptography -- the technique of enciphering and deciphering messages -- to maintain the privacy of computer data. It describes dozens of cryptography algorithms, gives practical advice on how to implement them in cryptographic software, and shows how they can be used to solve security problems. Covering the latest developments in practical cryptographic techniques, this new edition shows programmers who design computer applications, networks, and storage systems how they can build security into their software and systems.

What's New in the Second Edition?

The second edition of Applied Cryptography is a major rewrite of the first edition: 50% more words, 7 more chapters, and over 1600 new references. Not only did I make corrections to the first edition and add developments since it was published, but I also included topics left out of the first edition. The second edition has lots of new algorithms (including GOST, Blowfish, RC4, and A5), more information on the Clipper Chip and key escrow, dozens of new protocols, more information on how PGP works, detailed information on key management and modes of operation, and new source code.


Software Development

Code Complete, 2nd ed.
Author(s): Steve McConnell
Year: 2004
Supplementary material and/or errata: Link
Official Description: For more than a decade, Steve McConnell, one of the premier authors and voices in the software community, has helped change the way developers write code--and produce better software. Now his classic book, CODE COMPLETE, has been fully updated and revised with best practices in the art and science of constructing software. Whether you're a new developer seeking a sound introduction to the practice of software development or a veteran exploring strategic new approaches to problem solving, you'll find a wealth of practical suggestions and methods for strengthening your skills. Topics include design, applying good techniques to construction, eliminating errors, planning, managing construction activities, and relating personal character to superior software. This new edition features fully updated information on programming techniques, including the emergence of Web-style programming, and integrated coverage of object-oriented design. You'll also find new code examples--both good and bad--in C++, Microsoft(r) Visual Basic(r), C#, and Java, though the focus is squarely on techniques and practices.
The Mythical Man-Month: Essays on Software Engineering, 20th Anniversary Edition
Author(s): Frederick P. Brooks, Jr.
Year: 1995
Supplementary material and/or errata: N/A
Official Description: Few books on software project management have been as influential and timeless as The Mythical Man-Month. With a blend of software engineering facts and thought-provoking opinions, Fred Brooks offers insight for anyone managing complex projects. These essays draw from his experience as project manager for the IBM System/360 computer family and then for OS/360, its massive software system. Now, 20 years after the initial publication of his book, Brooks has revisited his original ideas and added new thoughts and advice, both for readers already familiar with his work and for readers discovering it for the first time.

The added chapters contain (1) a crisp condensation of all the propositions asserted in the original book, including Brooks' central argument in The Mythical Man-Month: that large programming projects suffer management problems different from small ones due to the division of labor; that the conceptual integrity of the product is therefore critical; and that it is difficult but possible to achieve this unity; (2) Brooks' view of these propositions a generation later; (3) a reprint of his classic 1986 paper "No Silver Bullet"; and (4) today's thoughts on the 1986 assertion, "There will be no silver bullet within ten years."


Design Patterns: Elements of Reusable Object-Oriented Software
Author(s): Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides
Year: 1994
Supplementary material and/or errata:
Official Description: Capturing a wealth of experience about the design of object-oriented software, four top-notch designers present a catalog of simple and succinct solutions to commonly occurring design problems. Previously undocumented, these 23 patterns allow designers to create more flexible, elegant, and ultimately reusable designs without having to rediscover the design solutions themselves.

The authors begin by describing what patterns are and how they can help you design object-oriented software. They then go on to systematically name, explain, evaluate, and catalog recurring designs in object-oriented systems. With Design Patterns as your guide, you will learn how these important patterns fit into the software development process, and how you can leverage them to solve your own design problems most efficiently.

Each pattern describes the circumstances in which it is applicable, when it can be applied in view of other design constraints, and the consequences and trade-offs of using the pattern within a larger design. All patterns are compiled from real systems and are based on real-world examples. Each pattern also includes code that demonstrates how it may be implemented in object-oriented programming languages like C++ or Smalltalk.

Learning the bash Shell, 3rd ed.
Author(s): Cameron Newham, and Bill Rosenblatt
Year: 2005
Supplementary material and/or errata: Free book, errata, and code, more errata
Official Description: O'Reilly's bestselling book on Linux's bash shell is at it again. Now that Linux is an established player both as a server and on the desktop Learning the bash Shell has been updated and refreshed to account for all the latest changes. Indeed, this third edition serves as the most valuable guide yet to the bash shell.

As any good programmer knows, the first thing users of the Linux operating system come face to face with is the shell the UNIX term for a user interface to the system. In other words, it's what lets you communicate with the computer via the keyboard and display. Mastering the bash shell might sound fairly simple but it isn't. In truth, there are many complexities that need careful explanation, which is just what Learning the bash Shell provides.

If you are new to shell programming, the book provides an excellent introduction, covering everything from the most basic to the most advanced features. And if you've been writing shell scripts for years, it offers a great way to find out what the new shell offers. Learning the bash Shell is also full of practical examples of shell commands and programs that will make everyday use of Linux that much easier. With this book, programmers will learn:

  • How to install bash as your login shell
  • The basics of interactive shell use, including UNIX file and directory structures, standard I/O, and background jobs
  • Command line editing, history substitution, and key bindings
  • How to customize your shell environment without programming
  • The nuts and bolts of basic shell programming, flow control structures, command-line options and typed variables
  • Process handling, from job control to processes, coroutines and subshells
  • Debugging techniques, such as trace and verbose modes
  • Techniques for implementing system-wide shell customization and features related to system security
Learning the vi and Vim Editors, 7th ed.
Author(s): Arnold Robbins, Elbert Hannah, and Linda Lamb
Year: 2008
Supplementary material and/or errata: Link
Official Description: There's nothing that hard-core Unix and Linux users are more fanatical about than their text editor. Editors are the subject of adoration and worship, or of scorn and ridicule, depending upon whether the topic of discussion is your editor or someone else's.

vi has been the standard editor for close to 30 years. Popular on Unix and Linux, it has a growing following on Windows systems, too. Most experienced system administrators cite vi as their tool of choice. And since 1986, this book has been the guide for vi.

However, Unix systems are not what they were 30 years ago, and neither is this book. While retaining all the valuable features of previous editions, the 7th edition of Learning the vi and vim Editors has been expanded to include detailed information on vim, the leading vi clone. vim is the default version of vi on most Linux systems and on Mac OS X, and is available for many other operating systems too.

With this guide, you learn text editing basics and advanced tools for both editors, such as multi-window editing, how to write both interactive macros and scripts to extend the editor, and power tools for programmers -- all in the easy-to-follow style that has made this book a classic.

Learning the vi and vim Editors includes:

A complete introduction to text editing with vi:

  • How to move around vi in a hurry
  • Beyond the basics, such as using buffers
  • vi's global search and replacement
  • Advanced editing, including customizing vi and executing Unix commands

How to make full use of vim:

  • Extended text objects and more powerful regular expressions
  • Multi-window editing and powerful vim scripts
  • How to make full use of the GUI version of vim, called gvim
  • vim's enhancements for programmers, such as syntax highlighting, folding and extended tags

Coverage of three other popular vi clones -- nvi, elvis, and vile -- is also included. You'll find several valuable appendixes, including an alphabetical quick reference to both vi and ex mode commands for regular vi and for vim, plus an updated appendix on vi and the Internet.

Learning either vi or vim is required knowledge if you use Linux or Unix, and in either case, reading this book is essential. After reading this book, the choice of editor will be obvious for you too.

Managing Projects with GNU Make, 3rd ed.
Author(s): Robert Mecklenburg
Year: 2004
Supplementary material and/or errata: Free book, errata, and code, more errata
Official Description: The utility simply known as make is one of the most enduring features of both Unix and other operating systems. First invented in the 1970s, make still turns up to this day as the central engine in most programming projects; it even builds the Linux kernel. In the third edition of the classic Managing Projects with GNU make, readers will learn why this utility continues to hold its top position in project build software, despite many younger competitors.

The premise behind make is simple: after you change source files and want to rebuild your program or other output files, make checks timestamps to see what has changed and rebuilds just what you need, without wasting time rebuilding other files. But on top of this simple principle, make layers a rich collection of options that lets you manipulate multiple directories, build different versions of programs for different platforms, and customize your builds in other ways.

This edition focuses on the GNU version of make, which has deservedly become the industry standard. GNU make contains powerful extensions that are explored in this book. It is also popular because it is free software and provides a version for almost every platform, including a version for Microsoft Windows as part of the free Cygwin project. Managing Projects with GNU make, 3rd Edition provides guidelines on meeting the needs of large, modern projects. Also added are a number of interesting advanced topics such as portability, parallelism, and use with Java.

Robert Mecklenburg, author of the third edition, has used make for decades with a variety of platforms and languages. In this book he zealously lays forth how to get your builds to be as efficient as possible, reduce maintenance, avoid errors, and thoroughly understand what make is doing. Chapters on C++ and Java provide makefile entries optimized for projects in those languages. The author even includes a discussion of the makefile used to build the book.

Source File Management with SCCS
Author(s): Israel Silverberg
Year: 1991
Supplementary material and/or errata: N/A
Official Description: Oriented towards the needs of senior software engineers, software managers, system administrators, and configuration managers, this volume focuses on the building and maintenance of a source file library in the UNIX System V environment. The book gives an explanation of the concept of the UNIX source code control system, describes in detail the utilities that constitute SCCS, and shows how to use these tools to build and maintain a source file library. It also shows how to place all applications in a single library and how that library can be used by different departments. Techniques and additional tools for maintaining source files at the product level are explained with a view to allowing readers to establish a source file management system that will trace versions of an entire application instead of a single source file. The book then explains how to establish a secure source library where access to read and/or change is strictly controlled. Finally, the book provides source code for the special utilities needed to implement the concepts described. A disk of source codes is available separately.

Theory of Computation
Introduction to the Theory of Computation, 3rd ed.
Author(s): Michael Sipser
Year: 2012
Supplementary material and/or errata: Link, Errata
Official Description: Now you can clearly present even the most complex computational theory topics to your students with Sipser's distinct, market-leading INTRODUCTION TO THE THEORY OF COMPUTATION, 3E. The number one choice for today's computational theory course, this highly anticipated revision retains the unmatched clarity and thorough coverage that make it a leading text for upper-level undergraduate and introductory graduate students. This edition continues author Michael Sipser's well-known, approachable style with timely revisions, additional exercises, and more memorable examples in key areas. A new first-of-its-kind theoretical treatment of deterministic context-free languages is ideal for a better understanding of parsing and LR(k) grammars. This edition's refined presentation ensures a trusted accuracy and clarity that make the challenging study of computational theory accessible and intuitive to students while maintaining the subject's rigor and formalism. Readers gain a solid understanding of the fundamental mathematical properties of computer hardware, software, and applications with a blend of practical and philosophical coverage and mathematical treatments, including advanced theorems and proofs. INTRODUCTION TO THE THEORY OF COMPUTATION, 3E's comprehensive coverage makes this an ideal ongoing reference tool for those studying theoretical computing.

The Language of Machines: An Introduction to Computability and Formal Languages
Author(s): Robert W Floyd, and Richard Beigel
Year: 1994
Supplementary material and/or errata: Link
Official Description: In The Language of Machines, Robert Floyd and Richard Beigel revolutionize the teaching of computability and languages. They propose nothing less than redefinition of the building blocks of automata theory: their unified model of computation clarifies the subject as never before. Floyd and Beigel's single model encompasses all the traditional types of computing machines and even "real world" electronic computers.

Using an approach that has been successfully class tested at Stanford, Yale, and Johns Hopkins, Floyd and Beigel offer valuable innovations:

  • Unified definitions that yield insight into the capabilities of a wide variety of machines
  • The perfect combination of simplicity and rigor---their new approach makes formerly obscure results accessible.
  • Ideas and examples from practical computer science bring theory to life
  • A mechanism to combine programs, akin to pipes in UNIX(tm)
  • The first formal definition of simulation that permits modularized proofs
  • A general system of standardization of programs, which streamlines proofs

Floyd an Beigel's bold reformulation of computability and formal language theory provides a firm foundation on which students can build a rich and enduring body of knowledge.


Advanced Programming in the UNIX Environment, 3rd ed.
Author(s): Stephen A. Rago, and W. Richard Stevens
Year: 2013
Supplementary material and/or errata: Link
Official Description: Master the system calls at the heart of today's UNIX and Linux systems: the programming interfaces that drive the UNIX and Linux kernels and run everything from filesystems and multitasking to interprocess communication. A thorough knowledge of system calls is essential for every UNIX and Linux programmer -- and for 20 years, W. Richard Stevens' Advanced Programming in the Unix Environment has delivered that. Now, Stephen Rago has completely updated this classic to reflect modern distributions including Red Hat 2.6.x, Solaris 10 3, OS X 10.5.4, FreeBSD 7.0.5 -- and for the first time, Ubuntu. As in previous editions, Rago begins with essentials such as file and process control, carefully laying the groundwork for more advanced techniques. He supports his crystal-clear explanations with nearly 10,000 lines of code, all carefully tested on each of these leading versions and distributions. Rago begins with an up-to-date overview of the UNIX System, its standardization processes, and its diverse implementations. Next, he introduces file I/O, files, directories, and the Standard I/O Library. You'll walk through working with UNIX/Linux system data files and information… controlling the process environment and its relationships… using signals, threads, and daemon processes… mastering advanced I/O techniques, interprocess communication, sockets, and advanced IPC… using Terminal I/O and Pseudo Terminals… working with database libraries, communicating with network printers, and much more. Appendices provide essential information on function prototypes, miscellaneous source code, and solutions to many of this guide's exercises. For all intermediate-to-advanced level UNIX programmers and software engineers.
UNIX Curses Explained
Author(s): Berny Goodheart
Year: 1991
Supplementary material and/or errata: N/A
Official Description: Fully documents Curses library and provides a detailed explanation of UNIX Curses. Contains a full alphabetical reference section and many clear examples using Curses, Windows, color manipulation, alternative character sets, pads, and terminals.

UNIX Network Programming
Author(s): Andrew M. Rudoff, Bill Fenner, and W. Richard Stevens
Year: 2003 (Vol1), 1998 (Vol2)
Supplementary material and/or errata: Volume 1, Volume 2
Official Description: This book is for people who want to write programs that communicate with each other using an application program interface (API) known as sockets. Some readers may be very familiar with sockets already, as that model has become synonymous with network programming. Others may need an introduction to sockets from the ground up. The goal of this book is to offer guidance on network programming for beginners as well as professionals, for those developing new network-aware applications as well as those maintaining existing code, and for people who simply want to understand how the networking components of their system function.

All the examples in this text are actual, runnable code tested on Unix systems. However, many non-Unix systems support the sockets API and the examples are largely operating system-independent, as are the general concepts we present. Virtually every operating system (OS) provides numerous network-aware applications such as Web browsers, email clients, and file-sharing servers. We discuss the usual partitioning of these applications into client and server and write our own small examples of these many times throughout the text.

Well-implemented interprocess communications (IPC) are key to the performance of virtually every non-trivial UNIX program. In UNIX Network Programming, Volume 2, Second Edition, legendary UNIX expert W. Richard Stevens presents a comprehensive guide to every form of IPC, including message passing, synchronization, shared memory, and Remote Procedure Calls (RPC).

Stevens begins with a basic introduction to IPC and the problems it is intended to solve. Step-by-step you'll learn how to maximize both System V IPC and the new Posix standards, which offer dramatic improvements in convenience and performance. You'll find extensive coverage of Pthreads, with many examples reflecting multiple threads instead of multiple processes. Along the way, you'll master every current IPC technique and technology, including:

  • Pipes and FIFOs.
  • Posix and System V Message Queues
  • Mutexes and Condition Variables
  • Read-Write Locks
  • Record Locking
  • Posix and System V Semaphores
  • Posix and System V Shared Memory
  • Solaris Doors and Sun RPC
  • Performance Measurements of IPC Techniques

If you've read Stevens' best-selling first edition of UNIX Network Programming, this book expands its IPC coverage by a factor of five! You won't just learn about IPC "from the outside." You'll actually create implementations of Posix message queues, read-write locks, and semaphores, gaining an in-depth understanding of these capabilities you simply can't get anywhere else.

The book contains extensive new source code-all carefully optimized and available on the Web. You'll even find a complete guide to measuring IPC performance with message passing bandwidth and latency programs, and thread and process synchronization programs.

The better you understand IPC, the better your UNIX software will run. One book contains all you need to know: UNIX Network Programming, Volume 2, Second Edition.

The Unix Programming Environment
Author(s): Brian W. Kernighan, and Rob Pike
Year: 1983
Supplementary material and/or errata: Link
Official Description: Designed for first-time and experienced users, this book describes the UNIX® programming environment and philosophy in detail. Readers will gain an understanding not only of how to use the system, its components, and the programs, but also how these fit into the total environment.
UNIX: A History and a Memoir
Author(s): Brian W. Kernighan
Year: 2019
Supplementary material and/or errata:
Official Description: The fascinating story of how Unix began and how it took over the world. Brian Kernighan was a member of the original group of Unix developers, the creator of several fundamental Unix programs, and the co-author of classic books like "The C Programming Language" and "The Unix Programming Environment."

See also