Books
Algorithms
Algorithms | |
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:
| |
Review: |
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:
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. | |
Review: |
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! | |
Review: |
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. | |
Review: |
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. | |
Review: |
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 | |
Review: |
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.
Features
| |
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
Theory
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. | |
Review: |
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:
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. | |
Review: |
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. | |
Review: |
Implementations
PC
Human-Computer Interaction
Networking
Theory
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. | |
Review: |
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 http://kuroseross.com | |
Review: |
Implementations
AppleTalk
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. | |
Review: |
OSI
TCP/IP
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. | |
Review: |
Peripherals
Implementations
USB
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:
| |
Review: https://www.amazon.com/dp/1717425364/#customerReviews |
Operating Systems
Theory
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:
Password-Protected Instructor Resources (Select the Resources Tab to View Downloadable Files):
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. | |
Review: |
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: | |
Review: |
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. | |
Review: |
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. | |
Review: |
Implementations
MMURTL V1.0 | |
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. | |
Review: |
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. | |
Review: |
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: |
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:
| |
Review: |
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. | |
Review: |
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:
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. | |
Review: |
Programming Languages
Theory
Implementations
C
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:
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. www.CAReferenceManual.com 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. | |
Review: |
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. | |
Review: |
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. | |
Review: |
Security
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
| |
Review: |
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.
| |
Review: |
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. | |
Review: |
Cryptology
Cryptanalysis
Cryptography
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. | |
Review: |
Software Development
Theory
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. | |
Review: |
Practice
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:
| |
Review: |
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 make full use of vim:
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. | |
Review: |
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. | |
Review: |
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. | |
Review: |
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:
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. | |
Review: |
UNIX
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. | |
Review: |
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:
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. | |
Review: |
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. | |
Review: |