Page 10 of 12
Re: Book Recommendations
Posted: Tue Sep 29, 2009 2:19 pm
by RJ
This is not specifically related to OS development, but it is an excellent read and i would recommend it to any software developer.
http://www.amazon.com/Mythical-Man-Mont ... 0201835959
Re: Book Recommendations
Posted: Tue Sep 29, 2009 9:42 pm
by terry
I would actually consider it to me more related to OS development than any other type of software engineering. The author of the book is using experiences gained from working on Multics to motivate his essays.
Re: Book Recommendations
Posted: Thu Apr 01, 2010 5:09 pm
by Love4Boobies
This thread getting is pretty big and a lot of the mentioned books are dated. I thought I'd make a summary of what I think are the best ones and contribute to that. If anything is missing from this list, it's because I haven't read it and thus cannot review it. Apart from that, I've also reviewed a couple of books which aren't very good IMNSHO but are instead popular.
However, a note of warning: do not be fooled into thinking that the material below is all you'll need: you will have to read specifications, standards, manuals, hardware datasheets and research papers all the time. All in all, I present to you what I think are
the best 65 books on programming:
- Algorithms
- Algorithms by S. Dasgupta & C. H. Papadimitriou & U. V. Vazirani
This is a good book on algorithms. It may not be a very big book but it does explain some rather important things. It also shows just how having a good grasp of math will help improve the quality of your code. At the very end, it has a nice introduction on quantum algorithms.
Penultimate draft available for download.
- Algorithms, 4th ed. by Robert Sedgewick & Kevin Wayne
This is a renowned book that will teach you how to use some of the best algorithms and data structures no matter what sort of software you're working on. It even has a chapter that highlights how everything connects to certain application areas.
Errata available here.
- Algorithms and Data Structures, Oberon version by N. Wirth
This is a classic written by the creator of the Pascal language. Although it does contain introductory material, a reasonable understanding of computers will make your life easier. This book teaches some nice algorithms and how to build good abstractions but it doesn't seem to me like the author is very experienced at writing books, which is why it's not particularly easy to read.
This book exists in 4 versions. The first one is called "Algorithms + Data Structures Programs," followed by "Algorithms and Data Structures," "Algorithms & Data Structures," and finally "Algorithms and Data Structures (Oberon version)," which has been updated in 2004. The latter is what I link to.
Available for download.
- Introduction to Algorithms, 3rd ed. by Thomas H. Cormen & Charles E. Leiserson & Ronald L. Rivest & Clifford Stein
This very popular textbook covers not just the fundamentals in modern algorithms and data structures but also makes the leap for multithreading. However, some argue that in some places the material is presented without the explanation of how it actually works. That should be an exercise for the reader IMNSHO.
Errata available here.
- Programming Pearls, 2nd ed. by Jon Bentley
This book is composed of a collection of the author's own essays that help beginners nail down all the quirks when they start writing more complex algorithms - the emphasis is on the D&C paradigm. It's a very good book.
Parts of the book are available online.
Errata available here.
- The Art of Computer Programming, vol. 1 & 2 @ 3rd ed. & vol. 1 fasc. 1 & vol. 3 @ 2nd ed. & vol. 4A by Donald E. Knuth
The is simply the book on sequential algorithms, no one can argue with that. In fact, at the end of 1999, this series was named among the best twelve physical-science monographs of the century by American Scientist. Better keep these volumes close and read what you need, when you need it.
Errata available here.
- The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit
Errata available for download.
- Compiler theory
- Compilers: Principles, Techniques, & Tools, 2nd ed. by Alfred V. Aho & Monica S. Lam & Ravi Sethi & Jeffrey D. Ullman
A.K.A. the Dragon Book, this is the greatest introduction to compiler theory, even though it is missing a few things such as SSA representation.
Errata available here and here.
- Linkers and Loaders by John R. Levine
If you've built your own compiler why not go all the way? To be honest, you should probably understand the theory behind linkers and loaders by now, but if you don't or just want to make sure you're an expert, read this book.
Early draft available for download.
Errata available here.
- Modern Compiler Implementation in Java by Andrew W. Appel, 2nd ed.
This will tell you everything you need in order to build a modern optimizing compiler. Appel's name should say enough. Note that there is no C version for the second edition.
- Hardware
- Computer Architecture: A Quantitative Approach by John L. Hennessy & David A. Patterson, 4th ed.
Most people think they know what they are doing when they are in fact clueless. The worst part is that they are clueless of how clueless they are. You are most likely one of them. Before doing systems programming you need to read this book; you will see that computers are not just a bunch of CPUs, buses and peripherals... There's also an undergraduate version of this book but who cares?
Don't forget to read the extra appendices on the accompanying CD.
- The Grid: Blueprint for a New Computing Infrastructure, 2nd ed. by Ian Foster & Carl Kesselman
Describes a type of distributed computing that is sometimes overlooked by many people around here.
- General
- The Indispensable PC Hardware Book by Hans-Peter Messmer, 4th ed.
This should be your hardware programming Bible when dealing with PCs. It covers almost everything an OS should have support for including PCI, AGP and USB. When you are done implementing drivers for everything in this book you will surely have more than just a hobby OS.
- The Undocumented PC by Frank van Gilluwe, 2nd ed.
This book covers all of the material that most of the people strive to understand when starting OS development for PCs. Apart from that, it talks at length about a couple Cyrix CPUs - most people forget that Intel and AMD aren't the only x86 vendors. As a bonus, this book gives insight on some undocumented hardware features (hence, the title).
- Graphics
- Graphics Programming Black Book by Michael Abrash, special ed.
This was once the holy grail of x86 assembly optimizations and VGA graphics programming. It's still an awesome resource even though the material is ageing daily (it's still relevant to the hardware in question, though). It contains material from 3 of his previous books, namely Zen of Assembly Code Optimization, Zen of Graphics Programming (2nd ed.), and Zen of Assembly Language, together with numerous articles that he has written over the years (some - if not all - printed in the DDJ columns). At the end, he details his experiences in the making of Quake. I strongly recommend that you read it.
Available for download.
- Programmer's Guide to the EGA, VGA, and Super VGA Cards by Richard F. Ferraro, 3rd ed.
Ferraro's books were very well received back in the days when they were published. This huge tree log of a book contains possibly all the details you will ever need on programming graphics cards like the ones mentioned in the book's title. It also includes some additional information about things like sound processing.
- The OpenGL Programming Guide: The Official Guide to Learning OpenGL Version 3.0 and 3.1, 7th ed. by Dave Shreiner
Fifth edition available for download.
Extra appendices available here.
- The OpenGL Reference Manual: The Official Reference Document to OpenGL, Version 1.4, 4th ed. by Dave Shreiner
First edition available online.
- The OpenGL Shading Language, 3rd ed. by Randi J. Rost & Bill Licea-Kane
- The OpenGL ES 2.0 Programming Guide by Aaftab Munshi & Dan Ginsburg & Dave Shreiner
Not everyone is interested in hardcore graphics, some program for embedded devices. In this case, OpenGL ES is obviously the way to go.
Extra chapter on iPhone available here.
Errata available online.
- Languages
- Assembly
- ARM Assembly Language: Fundamentals and Techniques by William Hohl
It seems like the embedded marked has simply exploded (not that it's a surprise or anything) and as a result, more and more people write ARM code. This book should cover everything you need; it is the best one you can find at the present time.
Errata available here.
- MIPS
- MIPS RISC Architecture by Gerry Kane, 2nd ed.
This is the classic textbook on RISC CPUs and MIPS. It's a superb book and you should definitely read it as everything is beautifully described in a comprehensible yet detailed manner.
- See MIPS Run by Dominic Sweetman, 2nd ed.
As an extension to the book above, this one covers some more modern MIPS CPU models. If you're going to write code for such processors this should be your next read.
- x86
- Assembly Language Step by Step: Programming with Linux by Jeff Duntemann, 3rd ed.
This book offers the best introduction to assembly language I have read so far; except for that it has pretty good coverage on handling strings. In fact, it was written for people who have never programmed before. I am frequently asked about this book by people just starting out with x86 assembly. Alas, over half of this book is sort of meaningless: a couple of chapters were probably taken from a story book (failed attempts at metaphors) and many others teach you how to be a Linux user (how to install and use certain programs) - I'm pretty sure people who want to learn assembly language have used computers before. If they haven't, they can surely consult the free documentation for the software they use and not spend money on this book.
Errata available here.
- Mastering Turbo Assembler, 2nd ed. by Tom Swan
TASM's popularity decreased significantly ever since it stopped being a stand-alone product. However, in addition to its less-than-Ideal syntax, it also provides compatibility for MASM source code and adds language support for OOP, which is a big advantage. This is probably the only reason for which TASM is worth looking into, in my opinion.
- Optimization manuals by By Agner Fog
Once you become a guru, be sure to check Agner's stuff, he's well-know for his cutting-edge optimizations. His focus is on Intel, AMD and VIA CPUs alike.
Available for download.
- PC Assembly Language by Paul A. Carter
This is more of an assembly tutorial than an actual book. Its C examples are not particularly good, but it does provide a few interesting assembly tricks - however, they seem to be based more on the author's own intuition rather than solid knowledge. It even covers the FPU stack to some extent, but is lacking the more modern usage of it.
Available for download.
- Programming from the Ground Up by Jonathan Bartlett, ver. 1.0
This too is a book for learning x86 assembly as your first programming language. It explains how interoperability with higher-level languages works and deals with more "fun" topics (e.g., working with files and GUI programming). However, it doesn't go beyond a certain level.
You shouldn't download this book in book-size format because in some places the text goes beyond the page.
Available for download.
- Professional Assembly Language by Richard Blum
This book seems to have gained some popularity as of late so I thought I'd review it: it's really nice... even though it too uses AT&T syntax. It's the only book that I know to also cover more advanced topics such as MMX, SSE, SSE2 (SSE3 instructions are also presented but not discussed at length) and even Hyperthreading.
Errata available here.
- The Art of Assembly Language, DOS 16 Bit ed.
This is probably the best text on x86 assembly ever written. People tend to skip the chapters they think they already know but that's not recommended. The first three chapters will help you more than you think, for instance. One slightly annoying issue with this book is that it jumps right in the middle of everything, or so it seems at first. Everything will come together a bit later on, it's okay to be confused for a little while. Some of the examples are a bit boring, too.
The first edition comes in 3 editions (32 Bit Windows, 32 Bit Linux, 16 Bit DOS) and the second edition comes in only one that covers only Windows and Linux (and it's not even free). There is a catch, however: the 32-bit versions of the book use HLA (High Level Assembly, a language invented by the author), which is not mainstream. Don't be disillusioned though, the simplicity of DOS is an advantage for you can focus your effort on learning x86 assembly rather than waste time with bloated APIs - you won't even touch anything DOS-specific until the last chapters and when you do, you will learn about some privileged instructions that you don't get to use in the other OSes. Moreover, 32-bit instructions and registers are also covered.
The HTML version of the book doesn't contain any of the footnotes so I recommend reading it in PDF format.
Available for download.
- The Waite Group's Microsoft Macro Assembler Bible, 2nd ed. by Randall Hyde & Nabajyoti Barkakati
The ultimate MASM reference manual.
- C
- C: A Reference Manual by Samuel P. Harbison III & Guy L. Steele Jr., 5th ed.
A.K.A. C:ARM, this book is on par with K&R and is the ultimate reference manual on the C programming language (dialects: traditional C, C89, C99 and clean C). In other words, it's the C standard (or several versions of it) written in a much more friendly manner. Better keep this close when doing serious C coding!
Errata available here and here.
- The C Programming language by Brian W. Kernighan and Dennis M. Ritchie, 2nd ed.
A.K.A. K&R; no comments should be needed. Unfortunately, it's an old book focusing on C89 when C1X is just around the corner, yet it's still the absolute best one around: a short (but good) description for a small language. It even touches subjects such as trees, recursivity, parsing and even implementing your own standard library. At the end, there's a handy language reference. Most beginners don't like the idea of reading such an old book as they know this is a rapidly evolving field. The fact is that good programming will always be good.
Errata available here.
- C++
- Accelerated C++ by by Andrew Koenig & Barbara E. Moo
Good book for learning C++, a lot of people are fond of it.
Errata available here.
- The Annotated C++ Reference Manual by Margaret A. Ellis & Bjarne Stroustrup
A.K.A. C++ARM, this was once considered the best book on C++ ever written and was heavily used even by compiler writers. It's very dated today but you should read it anyway; just keep in mind that the language has evolved a lot since the time of the book's writing. Unfortunately, Bjarne doesn't think he will ever have the time to work on a new edition.
- The C++ Programming Language by Bjarne Stroustrup, special ed.
This book was written by Bjarne Stroustrup, the creator of C++. You should probably read this book often if you want to learn/know C++ (this book can be easily consulted as a reference). In it, he puts great emphasis on portability and good coding practices. He also argues that it is easier to go from C++ to C than the other way around.
Errata available here.
- Thinking in C++ by Bruce Eckel, 2nd ed.
This is a very popular book on C++ that presents the proper C++ mindset by following just a few simple rules laid out by the author (who, like Bjarne, is a member of the C++ standards committee).
Not all the download mirrors contain the latest edition of the book (although the links provided here are fine).
Available for download: vol. 1 and vol. 2.
- Web programming
- JavaScript: The Definitive Guide, 6th ed. by David Flanagan
Usually used for client-side programming, which is why I included it under this category, JavaScript is a powerful language that can prove extremely useful in many situations outside its original purpose. This is the authoritative guide to learning the language.
- PHP Manual by the PHP Documentation Group
Chances are that if you're going to use PHP for server-side programming, you'll misuse it because you've been indoctrinated by the world at large. If you're going to do so, at least misuse it with high-quality code. If you're going to use it properly (i.e., in order to generate pages which should indeed be dynamically generated) then cuddles to you.
Available for download.
- The C# Programming Language by Andres Hejlsberg & Mads Torgersen & Scott Wiltamuth & Peter Golde, 4th ed.
You won't hear me talking about Java much (since I hate it with a passion) and I don't much like .NET either - luckly this book doesn't talk about it. A lot of people don't understand that .NET is god damned framework that can be used separately from C#. However, C# is really something. The book starts off with a quick description of the language after which an annotated reference follows.
- The Java Programming Language by Ken Arnold & James Gosling & David Holmes, 4th ed.
Apart from a few design flaws, I hate Java so much because C# is a lot better and I have a choice. You may not. Java is a good language, after all, it's a very high-level language that uses garbage collection and thus makes the programmer's life a whole lot easier. The easier the language, the less bugs.
- Smalltalk
- Smalltalk-80: Bits of History, Words of Adivce by Glen Krasner
Available for download.
- Smalltalk-80: The Language and its Implementation by Adele Goldberg & David Robson
Available for download.
- Smalltalk-80: The Interactive Programming Environment by Adele Goldberg
Available for download.
- Smalltalk-80: The Language by Adele Goldberg & David Robson
An updated language description (it was published after the blue book), without implementation details.
- XML Bible by Elliotte Rusty Harold, Gold ed.
Not that XML is complicated in any way but everything has quirks of some nature. This is your aid.
Errata available here.
- Miscellaneous
- Code Complete by Steve McConnell, 2nd ed.
Look over this one when you're on a train or something. Software practices, should be an easy read. However, do not underestimate its importance. Programming isn't all about coding - it's about designing as good as possible for the requirements at hand, implementing using good practices and skill and finally, testing.
Additional resources and updates available online.
- Learning the vi and Vim Editors, 7th ed. by Arnold Robbins & Elbert Hannah & Linda Lamb
There are probably no better editors than Vim and Emacs. vi is the standard UNIX editor and Vim is its successor (yes, it can be integrated with a debugger) - both are covered in this book. A lot of people today think that they are using good editors/IDEs but have no idea how flexible one can actually be.
Errata available online here and here (the latter link is for still unconfirmed errors).
- The Art of Unix Programming by Eric Steven Raymond, rev. 1.0
The UNIX great is a big part of our past and hopefully not a very big part of our distant future. This is a fun read because the author is opinionated (you are free to disagree with him, of course). The interesting stuff in this book are the several case studies presented.
Available online.
- The Chicago Manual of Style by the University of Chicago Press, 16th ed.
Perhaps this is not the right place for this book, perhaps it is. If you're a documentation freak like me, you might want to follow what has been established as the de facto standard in how to put together technical documentation. Don't be like the Linux douchebags, people should not read your source code in order to understand how it works.
Free 30-day trial available online.
- The Mythical Man Month by Frederick P. Brooks, Jr.
This book is more related to OS development than you might think. It just goes to show how people usually think they will be done much faster than they will and how working in teams is a very subtle problem. This book is critically acclaimed.
- Operating systems
- General
- Distributed Systems: Principles and Paradigms by Andrew S. Tanenbaum & Maarten van Steen, 2nd ed.
Errata available online.
- MMURTL V1.0 by Richard A. Burgess
This book gives me the impression that it was written by someone with not much prior experience in systems programming. As noted by someone earlier on this post, it looks to me like the author got excited about writing his first OS so he put a book together. Nonetheless, it's a lot better than following a tutorial.
Available for download.
- Modern Operating Systems by Andrew S. Tanenbaum, 3rd ed.
MOS was was written by Andrew Tanenbaum, who has also co-authored Operating Systems: Design and Implementation, which describes the implementation of MINIX (look for the 3rd ed. if you must) - his books are very popular and his name is well-known in the academia. The reason for which I'm recommeding former book over the latter is that it contains more theory and is more up-to-date. Some of the material in the other book was stripped down in order to make room for the MINIX source code listing. Learn programming from other books!
- Operating System Concepts (with Java) by Avi Silberschatz & Peter Baer Galvin & Greg Gagne, 8th ed.
There are three versions of this book but only two of them are relevant to us: one targeted at C and the other at Java. There are some minor differences between the two (other than the code snippets). For instance, the C one can more accurately reflect topics such as shared memory as Java really has no equivalent. On the other hand, the Java edition covers stuff such as Java thread scheduling and process synchronization. This texbook and MOS are the most used in universities at the moment.
Errata available online for both C and Java.
- Project Oberon by Niklaus Wirth & Jürg Gutknecht
This book presents building a non-toy multi-server OS and compiler to go with it. Even though unconventional, the material presented in this book is in no way legacy.
Available for download.
- Specialized
- Practical File System Design with the Be File System by Dominic Giampaolo
Rumours have it that this is the best book on the subject and there certainly aren't many around. It describes the design and implementation of BeFS but a lot of the information is universal across file systems.
Available for download.
- Task-Centered User Interface Design: A Practical Introduction by Clayton Lewis & John Rieman
More often than not, user interfaces suck badly. Add that to lack of documentation and you one big mess. Fortunately, there's a free book that talks at length about designing efficient user interfaces that the human mind will easily comprehend.
Available for download.
- TCP/IP Illustrated, vol. 1--3 by W. Richard Stevens
This is the absolute best book for learning about the subtle TCP/IP stack: not only detailed descriptions but also the protocols shown in action.
Errata available here, here and here.
- Paradigms
- Flow-Based Programming by J. Paul Morrison, 2nd ed.
First edition available for download.
- Structure and Interpretation of Computer Programs by Harold Abelson & Gerald Jay Sussman & Julie Sussman, 2nd ed.
Awesome, and only a bit dated, this will give useful insight on both functional languages and programming concepts.
Available for download.
- POSIX
- Advanced Programming in the UNIX Environment by W. Richard Stevens & Stephen A. Rago, 2nd ed.
This is probably the greatest book on the unfortunate subject of programming under UNIX.
Extra chapter available here.
Errata available here.
- The UNIX Programming Environment by Brian W. Kernighan and Rob Pike
This classic is certainly dated. Unlike the other programming books on this list, this one doesn't only focus on programming in but rather on brigning everything together - build systems, several tools, etc. Obviously, we're talking UNIX here.
Errata available here.
- UNIX Network Programming by W. Richard Stevens & Bill Fenner & Andy Rudoff, vol. 1 @ 3rd ed. & vol. 3 @ 2nd ed.
UNIX socket programming is described at length in this great book.
Errata available online for both vol. 1 and vol. 2.
EDIT: I'll try to find some time to update the wiki page on books.
Re: Book Recommendations
Posted: Fri Apr 02, 2010 2:24 am
by fronty
Love4Boobies wrote:- Compilers: Principles, Techniques, & Tools, 2nd ed. - A.K.A. the dragon book. Awesome introduction on compiler theory. After you're done with it, go for:
- Modern Compiler Implementation in Java, 2nd ed. - will tell you everything you need in order to build a modern optimizing compiler. Appel's name should say enough. Note that I mentioned the Java edition cause that's what I have, I'm not sure if it's actually more up-to-date (it was released a bit later).
Dragon book has its problems too. For example, it covers SSA in 2 pages. Some people like books like Modern Compiler Implementation in foo, but some don't. I don't like how book just throughs some tools at you and shows how to write compiler with them. I think a modern book which is heavy with compiler theory tells you everything you need in orderto build a modern optimizing compiler. But that's just my opinion.
One book I've found rather good introduction level book with its problems is Engineering a Compiler by Cooper and Torczon.
Re: Book Recommendations
Posted: Fri Apr 02, 2010 4:28 pm
by Combuster
I'd start with the basics:
Grammars and Parsing - it focuses mainly on theory but has a chapter on compilers. Batteries not included, some Haskell is required.
Re: Book Recommendations
Posted: Sat Apr 03, 2010 11:44 am
by Thomas
Hi,
I found these 2 books on compiler design quite good.These are just my personal opinions and not an ultimate word . They are
1) Modern Compiler Design
2) Compiler Design in C - Allen Holub ( out of print , still an excellent book and reference for programmers )
--Thomas
Re: Book Recommendations
Posted: Sat Jun 19, 2010 6:35 pm
by Nathan
There is any book in Portuguese Brazilian?
Re: Book Recommendations
Posted: Sun Jun 20, 2010 2:48 am
by Combuster
Don't count on it.
Re: Book Recommendations
Posted: Sun Jun 20, 2010 6:50 am
by Nathan
Combuster wrote:Don't count on it.
Why?
Re: Book Recommendations
Posted: Thu Jun 24, 2010 5:43 pm
by JackScott
It's a very small market. Writing a hobbyist-oriented operating systems book is a very small market already. The English market is bigger already, and then there's the fact that more (Brazilian) Portugese would be able to speak English than the other way around. I mean, you obviously speak English.
Much as I hate to say it, English is lingua franca for pretty much everything tech-related, simply because it has the required vocabulary and the largest readership.
Re: Book Recommendations
Posted: Fri Jul 16, 2010 2:35 am
by dvdouden
When it comes to C++ I recommend the following books:
- "Effective C++: 55 Specific Ways to Improve Your Programs and Designs (3rd Edition)" by Scott Meyers, this is an absolute must have for any C++ programmer
- "More Effective C++: 35 New Ways to Improve Your Programs and Designs " by Scott Meyers
- "Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library" by Scott Meyers, highly recommended if you're using the STL
- "The C++ Standard Library: A Tutorial and Reference" by Nicolai M. Josuttis, which is always handy to have nearby when working with the STL
- "C++ Coding Standards: 101 Rules, Guidelines, and Best Practices" by Herb Sutter and Andrei Alexandrescu
- "Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions" by Herb Sutter
The aforementioned books of Andrew S. Tanenbaum ("Operating Systems Design and Implementation", "Structured Computer Organization" and "Modern Operating Systems") are also highly recommended...
Re: Book Recommendations
Posted: Fri Jul 16, 2010 3:54 am
by Candy
I'll add to that C++ book list the following two:
- C++ templates by Josuttis - the authoritative book about templates. Learn 5 new things about templates in the introduction, and then there's a whole book of new stuff behind it.
- Modern C++ design by Andrei Alexandrescu - Book is written by a software developer that can keep structure over a chapter, but not a book. Read each chapter as a "this is how I made this part" and learn from his ways of thinking and how he solves problems. One of the most valuable books in terms of what you can learn from it, one of the most worthless from a spoonfed-reading.
Re: Book Recommendations
Posted: Sat Oct 16, 2010 1:56 am
by b.zaar
I found this book pretty helpful lately and its an open book so it can be downloaded for free. Its called 'Managing Projects with GNU Make' at
http://oreilly.com/catalog/make3/book/index.csp
Re: Book Recommendations
Posted: Sat Oct 16, 2010 7:13 am
by Combuster
And it promotes recursive make.
Bad idea..
Re: Book Recommendations
Posted: Sat Jan 01, 2011 5:41 am
by Love4Boobies
Combuster wrote:
And it promotes recursive make.
Bad idea..
I've glanced at the book and it presents the technique but also explains its dangers so I'd give it a chance.