In association with

This page was last updated September 1999

If you don't know how to program, you might start with some of these fine books:

  • Structure and Interpretation of Computer Programs (buy from Amazon) is the classic introduction to computer science, based on an MIT course. It teaches via the Scheme programming language, but the subject matter is not Scheme; it teaches you how to program, which is an entirely different thing.
    (The negative reader reviews on Amazon are misguided IMHO; I think they are mostly from kids who have to read this for their CS classes and think it isn't practical. It is practical if you want to be a good programmer. Yes, you can write "code" without knowing how to program... but you can also cook "food" without knowing how to cook...)
  • The Craft of Functional Programming (buy from Amazon) describes the Haskell programming language. This book is meant to be an introductory CS text - it doesn't have as many concepts as SICP, but it has the basics, and learning Haskell will teach you a lot more about programming than learning C. Haskell is neat. I wish it had a few more practical-minded people making the implementation usable on free UNIX clones (though the main Haskell compiler and interpreter (ghc and Hugs) are now under free licenses, which is encouraging). You can learn about Haskell here. Haskell is the least-broken programming language available today. C, C++, Perl, Python, Java, and all the other languages you've heard of are all much more broken, so debating their merits is pointless. :-) Unfortunately Real Life involves dealing with brokenness.
  • The C Programming Language (buy from Amazon) is a reference for C syntax and semantics. You should own this book to write C code, but you should also know how to program. This book will not teach you how to program. It will teach you C, though somewhat tersely.
  • The C++ Programming Language (buy from Amazon) is completely unreadable; it's hard to put a finger on exactly why, but it is definitely unreadable. Still, it is the definitive C++ reference, and it's extremely useful if you're writing C++ and need to look things up. You must have it to write C++. Just don't try to read it straight through.
  • Learning Python (buy from Amazon) is a nice little book for learning the Python programming language. Python is very simple and very easy to learn; it also has nice GTK+ and Gnome bindings. If C/C++ isn't your cup of tea, try Python for writing Gnome apps.
  • Effective C++ (buy from Amazon) is the best guide to what you should write in C++ (as opposed to the rather disturbing things that you can write).

You don't necessarily have to know about GNU/Linux or UNIX programming to read my book, but you do need to know it to write an application that does anything useful (I teach you to make a GUI, but normally your app will also have a functional, non-GUI component which will require you to use the UNIX API.)

  • Beginning Linux Programming (buy from Amazon) is a pretty good book about the UNIX API in a GNU/Linux context. It also has information about shell scripting and the like. It looks like a second edition is coming out next month, as well (buy second edition from Amazon).
  • Advanced Programming in the UNIX Environment (buy from Amazon) is the canonical guide to programming UNIX and just about everything it has to say will apply to Linux as well. If you want to write Linux applications, you must have this book, as well as the next one...
  • Linux Application Development (buy from Amazon) is the best book to learn about Linux-specific interfaces, and also introduces the general UNIX APIs. It assumes more knowledge than Beginning Linux Programming but is a lot more useful as a reference. It's worth owning both this book and Advanced Programming in the UNIX Environment. You almost have to own them, really.

Some assorted stuff you might be interested in...

  • Advanced CORBA Programming with C++ (buy from Amazon) is the CORBA book to get, according to Gnome's CORBA experts. Use this book in conjunction with the CORBA specification, in particular the chapter on the C language bindings.
  • Developing Linux Applications with GTK+ and GDK (buy from Amazon) is a more introductory guide to GTK+ programming than my book. It has lots of useful examples.