Books About Programming

Dot Net Perls
The C# Programming Language

It is critical to your skills to read the literature on programming. Many books have been written about many different topics related to programming, including the subject you are trying to gain experience in. For this reason, I review occasional books so you can find useful ones.

"What is the use of a book," thought Alice, "without pictures or conversation?" Alice's Adventures in Wonderland
One book is more than most programmers read each year (DeMarco and Lister 1999). McConnell, p. 824

SICP

The Structure and Interpretation of Computer Programs is one of the most important books written about computer programming. It is an MIT textbook from the 1980's. This is the kind of book that will keep you sitting in your basement by yourself on warm summer days, when everyone else is outside.

Structure and Interpretation of Computer Programs cons car cdr cadr Bituminous Coal Syntactic Sugar

Code Complete

Code Complete is a very useful book for programmers. The linked article contains my review of Code Complete and I poke some fun at the book, but do appreciate it overall.

Code Complete (Book Review)Refactoring

Refactoring

The book Refactoring by Martin Fowler really provides some useful examples of improving your code in such a way that it is easier to make future changes. This book is all about making your life easier.

Refactoring Book Review

Dragon book

The dragon book is not really about dragons, but it does have a dragon on the cover. This is a compiler theory textbook. It is really useful for gaining some understanding of how computer languages are really implemented and how programs are made.

Dragon Book (Compilers)

Expert .NET 2.0 IL Assembler

Question and answer

Do you want to know more about how the intermediate language (IL) is expressed and implemented than anyone in the world? If so, you are out of luck, because Serge Lidin will still know more than you after you read his book.

Expert .NET 2.0 IL Assembler Review

C# specification

I read the entire C# specification in printed form and this was a useful thing to do. There are a lot of interesting things to learn about this language, and the specification really gave me a deeper appreciation for the work that goes into the language and compiler.

The C# Programming Language (Specification)Programming Pearls

Programming Pearls

The book Programming Pearls by Jon Bentley will help you get excited about the craft of computer programming again. It shows us lots of interesting problems and solutions in code. One weakness of the book is that some of the problems are obsolete with today's computers.

Programming Pearls Review

CLI specification

There's much more to the .NET Framework than just how to write C# programs that compile! You can study the underlying platform, which includes the metadata and the method-level instructions, which are described in this book.

Common Language Infrastructure Annotated StandardFramework Design Guidelines

Framework design

This book shows us the underlying logic that went into designing the types in the .NET Framework. It mainly focuses on method signatures, types, and higher-level details, but also covers performance aspects of these choices.

Framework Design Guidelines

C++

The C++ language is used in many of the most important software programs in the world—which is exactly why you should consider reading this book by Bjarne Stroustrup. The book goes into way more detail than you need to know about, but that's the fun part.

The C++ Programming Language

C

This is a classic book about the C programming language. The C language predates C# and C++, but understanding how C works (and doesn't work) is useful for understanding the later versions of this language. The C language introduced "bracist tyranny" to the world, which is a funny way of saying the language uses curly braces in its syntax.

The C Programming Language

Illustrated C# 2008

This book uses diagrams to help people understand how the C# language works. It may be useful for you depending on how you learn best.

Illustrated C# 2008 (Review)

Website Optimization

There is also a review for a website optimization book here. The book was helpful for me and it was the first book review I posted on this site.

Website Optimization

Misc.

Miscellaneous

Here are some less complete reviews. Every book has value: some can be used to start fires or to defend yourself with in case someone tries to break into your home. The Amazon links do not earn me any money.

Hacker's Delight. This book describes interesting programming techniques for manipulating lower-level aspects of systems. For example, it describes in good detail how to do complex bitwise manipulations. The section that examines Gray codes, which are a different way of encoding integers, is particularly interesting. For people coding in managed languages, this is not very practical, but gives a different perspective on the task of programming a computer.

Amazon link

Essential .NET, Volume I: The Common Language Runtime. This is a fairly short book but provides excellent details on the internal implementation of the .NET Framework. For example, it shows the layout of arrays and also how polymorphic method calls are implemented (function pointers). The book is not written at the level of the best computer science books, but it has useful details and it is not a waste to purchase and read this.

Amazon link

.NET Framework Standard Library Annotated Reference, Volume 2: Networking Library, Reflection Library, and XML Library. This book covers very specific parts of the standard library used for the .NET Framework. Unfortunately, the topics in this book are not the most important ones to have documentation for, as they are very specific. The content is not particularly engaging or useful; it is not something I benefited from by purchasing.

Amazon link

The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition. This book analyzes the topic of software management as well as professional programming. It provides some insights into management of large teams, and also provides perspective on what programming is, as a profession, as well. This is a true classic in this field and is worth reading for all people who spend time in the programming field or working with programmers.

Amazon link

Concurrent Programming on Windows. Currently, I have only read fairly short samples from this book. However, the content seems fairly useful for the topic. It is likely that the material in this book is more well-researched than many of the treading materials you can find elsewhere.

Amazon link

Accelerated C# 2008. This is an advanced book that has some interesting content, such as a section about writing exception-neutral code. It contains some topics that are not covered in many other books, so likely will add something new to your library. In other words, this is a good one to purchase for people looking to improve their understanding of the C# language.

Amazon link

Ajax: Your visual blueprint for creating rich Internet applications. This book provides a less-technical overview of AJAX and what it can do. It doesn't cover the advanced topics, so might be helpful for getting an introduction to AJAX for web developers. I don't recommend this book for people looking for an advanced understanding of AJAX.

Amazon link

Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching. This is a textbook about algorithms that has some useful information about hashtables. It helped me develop my own hash algorithms, which I use constantly in development. It uses code samples in C++ but this does not impair its usefulness for C# or Java developers. You should have an algorithms textbook in your library for when you need to do something unusual or advanced.

Amazon link

C# 3.0 Cookbook. This is an excellent guide to solving common programming problems. It helped point me in the right direction about how to write technical problem/solution articles as well. It contains many example solutions to problems such as file IO, collections, and strings. Highly recommended as a practical reference for when you need help solving a problem.

Amazon link

C# 3.0 Design Patterns. This book covers design patterns in the C# language. I think that the classic books on design patterns are likely more useful overall, but this one can complement them and provide tips for implementing design patterns in C#.

Amazon link

C# in Depth: What you need to master C# 2 and 3. This book has some interesting content regarding expression trees in C# and LINQ queries. When I started to read this book, I had already read other books on the subject matter so it wasn't useful as introductory material; this colors my perception here.

Amazon link

CLR via C#. This is an excellent book that helped me grasp the internals and low-level details of the CLR, which is the platform C# runs on. The section on garbage collection is the best I have found, but the section involving how the stack and heap work was somewhat confusing. It contains tons of hints on optimizations.

Amazon link

Don't Make Me Think: A Common Sense Approach to Web Usability. This is a famous book on web usability, and it contains useful studies of how people use web pages. However, I found most of the content is available on sites such as useit.com. The content is intuitive, and can help frame how people use web pages for developers. My copy of the book fell apart, and half of it is hanging out, despite taking care of it. That probably diminishes my opinion of the content, which is not fair.

Amazon link

Expert SQL Server 2005 Development. This book contains interesting approaches to using SQL Server in advanced ways. I saw how you can embed C# code and the CLR into SQL Server. Additionally, there are chapters on storing tree structures in databases, and using distance calculations. It has lots of tips for advanced optimizations of SQL Server 2005. I recommend it not for its practical value but for understanding the types of things you can do with SQL Server.

Amazon link

High Performance Web Sites: Essential Knowledge for Front-End Engineers. This is probably the top book for optimizing the HTML/JavaScript/CSS of your website. However, the tips in the book are almost exactly duplicated on Yahoo's Exceptional Performance website, which greatly diminished the usefulness of this book for me. The writing style in the book is not worth the price alone, and the tips are now commonplace on the Internet. For a practical way of advancing your website, it is not highly useful for these reasons.

Amazon link

Information Architecture for the World Wide Web: Designing Large-Scale Web Sites. I did not benefit greatly from this book, and it contains little practical information for developing sitemaps and search engines for sites. The author seemed focused on establishing information architecture as an elite field. I ended up joking about the writing style, as I felt it was quite arrogant. I do not recommend this book for anything practical.

Amazon link

Mastering Algorithms with Perl. This is one of the first books I purchased, and also one of the least practical and useful. It combines convoluted Perl syntax with advanced algorithm design, and I do not recommend it if you have a standard algorithm textbook, such as the one by Sedgewick. Additionally, the code samples are not useful for Perl development due to the nature of Perl as an interpreted language. For this reason, the algorithms will most likely slow down your Perl programs, even though they are meant to be optimizations.

Amazon link

Pro ASP.NET 3.5 in C# 2008, Second Edition. This is a typical yet competent book on ASP.NET. I don't think it is any better or worse than its competitors, but anyone trying to learn ASP.NET will benefit from it. I don't think it would be advantageous to buy more than one of this topic of book, or to upgrade older books. The tips are practical and actionable, but are more beginner level than advanced level.

Amazon link

Professional C# 2005 with .NET 3.0. This was the first C# book I read and I found it very useful as an introduction to the language. It is something you should read before ever writing a line of C# code. Specifically, memorize the sections on data types and simple collections before getting started. Some of the chapters, such as remoting and Silverlight, have not been useful or relevant to my work. I don't think this is an exceptional book, but it is competent and useful. You should acquire the newer versions focused on .NET 3.5 instead of this version.

Amazon link

SQL Cookbook. This is a practical guide to using SQL in different databases. One useful part is it helps frame the many differences between different database implementations. It also helped me better understand the concept of SQL Join clauses. I consider this a worthwhile purchase, but not a critically important one.

Amazon link

Art of Computer Programming

This is a classic series that helps frame the approach to computing. I do not understand all the technical details, but the process of computation, such as figuring out more advanced topics regarding bits, is useful to be familiar with. It has tons of information on low-level anagram logic, which I found interesting but not practical.

Amazon link [1] Amazon link [2]
Titles (Donald Knuth)

The Art of Computer Programming, Volume 4, Fascicle 1:
Bitwise Tricks & Techniques; Binary Decision Diagrams.

The Art of Computer Programming, Volume 4, Fascicle 2:
Generating All Tuples.

Summary

Happy reading! Over time I hope to expand this section. I am trying to be careful not to say anything too venomous here. The knowledge contained in some of these books is many times more valuable than the retail cost.