Professional Documents
Culture Documents
very popular textbook covers not just the fundamentals in modern algorithms
data structures but also makes the leap for multithreading. However, some a
that in some places the material is presented without the explanation of ho
actually works. That should be an exercise for the reader IMNSHO.
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, ev
en though it is missing a few things such as SSA representation.
Linkers and Loaders by John R. Levine
If you've built your own compiler why not go all the way? To be honest, you shou
ld 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.
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 com
piler. Appel's name should say enough. Note that there is no C version for the s
econd edition.
Hardware
Computer Architecture: A Quantitative Approach by John L. Hennessy & David A. Pa
tterson, 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 p
eople 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 h
ave 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 understan
d when starting OS development for PCs. Apart from that, it talks at length abou
t a couple Cyrix CPUs - most people forget that Intel and AMD aren't the only x8
6 vendors. As a bonus, this book gives insight on some undocumented hardware fea
tures (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 prog
ramming. 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 nume
rous 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.
Programmer's Guide to the EGA, VGA, and Super VGA Cards by Richard F. Ferraro, 3
rd ed.
Ferraro's books were very well received back in the days when they were publishe
d. 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
The OpenGL Reference Manual: The Official Reference Document to OpenGL, Version
1.4, 4th ed. by Dave Shreiner
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 Shrei
ner
Not everyone is interested in hardcore graphics, some program for embedded devic
es. In this case, OpenGL ES is obviously the way to go.
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 sho
uld cover everything you need; it is the best one you can find at the present ti
me.
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 s
hould definitely read it as everything is beautifully described in a comprehensi
ble 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 mod
els. 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 abou
t this book by people just starting out with x86 assembly. Alas, over half of th
is 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 wh
o want to learn assembly language have used computers before. If they haven't, t
hey can surely consult the free documentation for the software they use and not
spend money on this book.
Mastering Turbo Assembler, 2nd ed. by Tom Swan
TASM's popularity decreased significantly ever since it stopped being a stand-al
one product. However, in addition to its less-than-Ideal syntax, it also provide
s 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 looki
ng 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 c
utting-edge optimizations. His focus is on Intel, AMD and VIA CPUs alike.
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 - howe
ver, 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.
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 wi
th more "fun" topics (e.g., working with files and GUI programming). However, it
doesn't go beyond a certain level.
Professional Assembly Language by Richard Blum
This book seems to have gained some popularity as of late so I thought I'd revie
w it: it's really nice... even though it too uses AT&T syntax. It's the only boo
k that I know to also cover more advanced topics such as MMX, SSE, SSE2 (SSE3 in
structions are also presented but not discussed at length) and even Hyperthreadi
ng.
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 an
noying 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 adva
ntage for you can focus your effort on learning x86 assembly rather than waste t
ime with bloated APIs - you won't even touch anything DOS-specific until the las
t chapters and when you do, you will learn about some privileged instructions th
at you don't get to use in the other OSes. Moreover, 32-bit instructions and reg
isters are also covered.
:!: The HTML version of the book doesn't contain any of the footnotes so I recom
mend reading it in PDF format.
The Waite Group's Microsoft Macro Assembler Bible, 2nd ed. by Randall Hyde & Nab
ajyoti 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). I
n 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!
:arrow: 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 focusi
ng on C89 when C1X is just around the corner, yet it's still the absolute best o
ne around: a short (but good) description for a small language. It even touches
subjects such as trees, recursivity, parsing and even implementing your own stan
dard 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 evol
ving field. The fact is that good programming will always be good.
:arrow: 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.
:arrow: 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 wa
s heavily used even by compiler writers. It's very dated today but you should re
ad it anyway; just keep in mind that the language has evolved a lot since the ti
me 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 proba
bly 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.
:arrow: Errata available online here and here (the latter link is for still unco
nfirmed 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 ou
r 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 th
e several case studies presented.
:arrow: 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 do
cumentation 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 u
nderstand how it works.
:arrow: 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 t
o 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 acclaime
d.
Operating systems
General
Distributed Systems: Principles and Paradigms by Andrew S. Tanenbaum & Maarten v
an Steen, 2nd ed.
:arrow: 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 p
rior 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 pu
t a book together. Nonetheless, it's a lot better than following a tutorial.
:arrow: 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 Syst
ems: Design and Implementation, which describes the implementation of MINIX (loo
k 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 th
e latter is that it contains more theory and is more up-to-date. Some of the mat
erial in the other book was stripped down in order to make room for the MINIX so
urce 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: o
ne 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 accura
tely reflect topics such as shared memory as Java really has no equivalent. On t
he 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.
:arrow: Errata available online for both C and Java.
Project Oberon by Niklaus Wirth & Jrg 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 l
egacy.
:arrow: 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 ar
en't many around. It describes the design and implementation of BeFS but a lot o