Site Contents

Intro & News

Development

Miscellaneous

Projects


Developer Books

This page contains short reviews of programming books I consider worthwhile, and also of some high-profile books I bought and found lacking. Please see Developer Links for general programming information and Developer Tools for free and commercial software.

The entries in each section are sorted alphabetically by authors. Each review contains a rating according to the following scheme:

  • Four stars (****) – required reading for the subject matter
  • Three stars (***) – recommended reading if you have the time
  • Two stars (**) – sometimes useful but not generally recommended
  • One star (*) – useless by any standard, find another book

General Books

  • Harold Abelson and Gerald Jay Sussman with Julie Sussman, Structure and Interpretation of Computer Programs, The MIT Press 1996 (2nd ed.), ISBN 0-262-51087-1 — (**) My university didn’t use Lisp as a teaching language, so my experience in this area is limited to some dabbling with PC-Scheme. Impressed by the propaganda of Lisp weenies, I eventually picked up this classic introductory text anyway, expecting some sort of mind-altering out-of-body experience. What I found instead was the mathematically amusing but ultimately pointless exercise of building a usable programming language out of primitive operations and many parentheses. Very cute, but I’d rather use a language that doesn’t require me to design my own type system…
  • Federico Biancuzzi and Shane Warden, Masterminds of Programming, O’Reilly 2009, ISBN 978-0-596-51517-1 — (**) This is a collection of interviews with the creators of 17 programming languages, ranging from APL to C#. Many important languages are missing – Fortran, Cobol, Lisp, Ada, Pascal – so you should not expect a comprehensive historical overview. What the title and back cover suggest, however, are first-hand insights into the design process of each language and its influence of modern computing. Sadly, only a few sections live up to this claim. While all interviewees share some historical anecdotes, many have never looked beyond their narrow niche, and some have left the field altogether. Others merely snipe at their competitors rather than acknowledging tradeoffs. Still, there is enough interesting material here that you might want to get the book at a discount.
  • Frederick P. Brooks, Jr., The Mythical Man-Month, Addison Wesley 1995 (Anniversary ed.), ISBN 0-201-83595-9 — (****) The original 1975 edition is one of the oldest classics in the field of software engineering. The title refers to one of its fundamental tenets: software development cannot be arbitrarily spliced into smaller tasks and assigned to a greater number of workers in order to save time. The 20th Anniversary Edition adds the 1986 essay No Silver Bullet, and a 1995 retrospective on the essay and on the original book. While outdated in many technical details, The Mythical Man-Month is still thought-provoking and valuable for anyone seeking a broader and longer view on our discipline.
  • Merrill R. Chapman, In Search of Stupidity, Springer-Verlag 2006 (2nd ed.), ISBN-13 978-1-59059-721-7 — (***) This amusing book covers “over 20 years of high-tech marketing disasters”, as the subtitle says. The author himself had worked at MicroPro when the company self-destructed as WordStar 3.3 and WordStar 2000 cannibalized each other’s sales. Chapman’s copious anecdotes provide great entertainment to anyone who remembers the days of CP/M, dBase, and OS/2, and the second edition has been enhanced with some practical advice on avoiding stupidity. Recommended reading for all nostalgic hackers who still can’t believe how Microsoft emerged as the world’s biggest software company!
  • Martin Fowler, UML Distilled, Addison-Wesley 2004 (3rd ed.), ISBN 0-321-19368-7 — (****) The Unified Modelling Language (UML) is a fairly comprehensive collection of diagramming methods for object-oriented software systems. Fowler clearly and concisely describes which diagram types are available, what they are good for, and how they should be used in practice. This book is an excellent antidote to the mountain of hype and scams the UML has spawned, and highly recommended as an introduction for all developers who are experienced in object-oriented languages. The revised 3rd edition covers version 2.0 of the UML.
  • Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, Design Patterns, Addison-Wesley 1995, ISBN 0-20-163361-2 — (***) Many years after its original publication, this book by the so-called “Gang of Four” remains the standard reference to basic OOP design patterns such as singletons and object factories. Not particularly well-written, encumbered by poorly chosen examples, and muddled by the idiosyncrasies of C++ and the then-popular Smalltalk, Design Patterns is still recommended until somebody has mercy on OOP developers and writes a better presentation of the subject matter.
  • Robert L. Glass, Facts and Fallacies of Software Engineering, Addison-Wesley 2003, ISBN 0-321-11742-5 — (***) Glass presents 55 “facts” that developers and managers should know about software engineering, and ten fallacies that should be avoided. Each entry is annotated with possibly differing opinions, sources and references. Most of the topics are discussed in greater detail elsewhere, e.g. in Code Complete or The Mythical Man-Month, but that does not detract from the value of this book as a concise overview of the tricky parts of software engineering.
  • Steve McConnell, Code Complete, Microsoft Press 2004 (2nd ed.), ISBN 0-7356-1967-0 — (****) The eagerly anticipated update to this classic book (first published in 1993) finally covers object-oriented design. If you (like me) didn’t read the original Code Complete until recently and thought it outdated and overrated, you should still take a look at the new edition. Much of McConnell’s advice may seem obvious to experienced developers, but even so – seeing it all neatly written up is most helpful in keeping a clear mind and making the right decisions.
  • James D. Murray and William van Ryper, Encyclopedia of Graphics File Formats, O’Reilly 1996 (2nd ed.), ISBN 1-56592-161-5 — (***) Although rather outdated and now unfortunately out of print, the Encyclopedia is still the only comprehensive printed work on graphics file formats. Over one hundred formats are described in great detail, and the 230 pages devoted to graphics file fundamentals should prove useful even if the format you’re looking for is not in the book. Check the O’Reilly website for a list of errata.
  • Chuck Musciano and Bill Kennedy, HTML & XHTML, O’Reilly 2000 (4th ed.), ISBN 0-596-00026-X — (****) The subtitle calls it “The Definitive Guide,” and for once the hype is right. Musciano and Kennedy cover not only the standards in great depth and clarity but also many popular Microsoft and Netscape extensions. Other extras include a brief overview of XML, a table of HTML character codes, and a cardboard pocket reference. The excellent index rounds out the only HTML guide you’ll ever need.
  • Dan Pilone with Neil Pitman, UML 2.0 in a Nutshell, O’Reilly 2005, ISBN 0-596-00795-7. — (****) This very useful quick reference describes all the important diagram types and elements in the current UML revision. The text is concise (sometimes a bit too much so), well-organized, and illustrated with numerous sample diagrams as one might expect. Newbies might want to start with an introductory book such as UML Distilled, though.
  • Aaron Skonnard and Martin Gudgin, Essential XML Quick Reference, Addison-Wesley 2002, ISBN 0-201-74095-8 — (****) This 400-page “quick” reference is actually quite thorough in its description of many important XML concepts and standards. Topics covered include XML basics and namespaces, DTDs, XPath/XPointer/XInclude, XML Base, XSL transformations, SAX/DOM, XML schemas, and SOAP. A great index completes this very useful book.

Windows Books

  • Raymond Chen, The Old New Thing, Addison-Wesley 2007, ISBN 0-321-44030-7 — (****) An enhanced compilation of material that had previously appeared on Chen’s eponymous weblog, this book contains a cornucopia of amusing and enlightening factoids about the design of Microsoft Windows. Some chapters deal with peculiar low-level APIs that are of little relevance to users of modern programming languages, but every curious geek should delight in Chen’s tales about reserved file names inherited from MS-DOS, the strange behavior of the Windows desktop, or the mind-boggling efforts Microsoft spent on backward compatibility.
  • Joe Duffy, Concurrent Programming on Windows, Addison-Wesley 2008, ISBN 0-321-43482-X — (****) Duffy is Microsoft’s resident concurrency expert and maintains an excellent weblog on the subject. This monumental 1,000-page book covers virtually everything you could possibly want to know about multithreading and synchronization, from general principles to the relevant Win32 and .NET APIs. Duffy’s treatment of individual topics within this vast scope is often surprisingly detailed, and always boasts liberal amounts of sample code. The only significant downside is the terrible, or rather nonexistent, editing. Awkward phrases and obvious misprints abound, often distorting the meaning of text and code. Make sure to obtain the (non-exhaustive) list of errata! Regardless, the book is strongly recommended for all Windows developers.
  • Sara Ford, Microsoft Visual Studio Tips, Microsoft Press 2008, ISBN 0-7356-2640-5 — (***) As the subtitle says, this relatively thin book contains over 250 tips for Visual Studio 2005 and 2008, not specific to any programming language. All entries are virtually unedited reprints of Ford’s weblog articles, conveniently indexed and grouped by functionality. While certainly not an exhaustive Visual Studio manual, this collection should teach most readers at least a few useful tips they had not known (or already forgotten).
  • Lee Holmes, Windows PowerShell Cookbook, O’Reilly 2007, ISBN 978-0-596-52849-2 — (****) “Cookbooks” are categorized repositories of useful code snippets. Usually I’m not a big fan of such books as the snippets tend to be obvious or redundant, assuming you know the language and have Internet access. PowerShell is not a usual language, however. Combining a terse and cryptic syntax with numerous built-in keywords, even more library functions, and full access to the .NET Framework, PowerShell offers a multitude of non-obvious approaches to most tasks. That’s why this particular Cookbook makes a great companion to Bruce Payette’s Windows PowerShell in Action.
  • Mark Michaelis, COM+ Programming from the Ground Up, Osborne/McGraw-Hill 2000, ISBN 0-07-212045-2 — (***) This book is edited by Herbert Schildt, so you know what to expect: lots and lots of code snippets with the occasional paragraph of text in-between. As a tutorial, COM+ Programming is clearly inferior to Dale Rogerson’s Inside COM (see below). However, I know of no other book that shows how to use the built-in COM support of MS Visual C++ (_com_error and _com_ptr_t). Another strong point is Michaelis’ comprehensive treatment of COM error handling and variant types, making the book a useful reference for specific implementation issues if not a good introduction.
  • Bruce Payette, Windows PowerShell in Action, Manning 2007, ISBN 1-932394-90-7 — (****) Payette worked on Unix shells before he went on to co-design Windows PowerShell, Microsoft’s new command-line and scripting environment. As good as PowerShell is, this book is even better. Payette describes a myriad of features without confusing the reader. He writes clearly and entertainingly, provides lots of sensible examples, and his frequent sidenotes on the evolution of the shell’s design contribute greatly to a better understanding of the final result. Mandatory reading for all PowerShell users.
  • Charles Petzold, Programming Windows, Microsoft Press 1999 (5th ed.), ISBN 1-57231-995-X — (****) The standard guide to the Win32 API used to be every Windows programmer’s starting point, although raw beginners might prefer a gentler introduction. Today, the majority of new Windows developers will want to use a .NET language, and indeed Petzold’s later books cover .NET technologies exclusively. If you do wish to learn the basic structure of a Windows program written in plain C, Programming Windows should serve as well as ever. However, you should keep the book’s venerable age in mind, and check whether any specific APIs have received updates or replacements in recent Windows versions.
  • Jeffrey Richter and Christophe Nasarre, Windows via C/C++, Microsoft Press 2008 (5th ed.), ISBN-13 978-0-7356-2424-5 — (****) The once more retitled successor to Advanced Windows and Programming Applications for Windows is Microsoft’s second standard guide to the Win32 API and continues where Petzold left off. Richter and Nasarre cover OS fundamentals such as processes and threads, device I/O, memory management, DLL creation, and structured exception handling in great detail. Those who are still using C/C++ today likely want to get closer to the system than the .NET Framework allows, and they should find this book invaluable.
  • Dale Rogerson, Inside COM, Microsoft Press 1996, ISBN 1-57231-349-8 — (****) This insightful and well-written book is a great introduction to Microsoft’s “Component Object Model.” Rogerson covers the fundamental concepts behind COM as well as important mechanisms such as class factories and dispatch interfaces. He does not go into great detail but he does offer plenty of example code. By and large, Inside COM is probably the best way to get started with COM programming.

.NET 3.0/3.5 Books

Note: The versioning of these two releases caused some confusion. .NET 3.0 equals .NET 2.0 (C# 2 and VB 8) plus several big “Foundation” libraries (WCF, WPF, etc.) whereas .NET 3.5 introduced new language versions (C# 3 and VB 9) and the smaller LINQ library. I’ve put both releases in the same section since .NET 3.0 did not get a dedicated Visual Studio version (VS2008 jumped from 2.0 to 3.5), so I don’t expect many people to use .NET 3.0 libraries without .NET 3.5 languages. Just keep in mind that books on “Foundation” libraries often use the older language versions, C# 2 and VB 8.

  • Brad Abrams and Krzysztof Cwalina, Framework Design Guidelines, Addison-Wesley 2008 (2nd ed.), ISBN 0-321-54561-3 — (****) This book collects the design guidelines that are used internally by Microsoft’s .NET Framework team, but its real value lies in the frequently interspersed comments. Usually once or twice per page, the authors and many of their colleagues (Chris Brumme, Chris Sells, Rico Mariani, Jeff Richter, et al.) describe the intentions behind a guideline, its implications, possible exceptions, and even the team’s internal debates and disagreements. Highly recommended if you want to know why the CLR looks the way it does, and for improving your own .NET coding style.
  • Joseph Albahari & Ben Albahari, C# 3.0 in a Nutshell, O’Reilly 2007 (3rd ed.), ISBN 0-596-52757-8 — (****) Covering not only the entire C# 3 language but also many fundamental Framework concepts and classes, this 800-page “Desktop Quick Reference” requires a rather sturdy desk! Not particularly suitable for sequential reading due to its small print and terse style, C# 3.0 in a Nutshell provides an excellent reference to almost any task that might occur during practical C# development. Naturally, the book excludes those large self-contained libraries that are well-documented elsewhere, such as ASP.NET, Windows Forms, WCF and WPF. Still, it is amazing just how many technologies the Albahari brothers do cover – besides the C# language proper, the list includes LINQ, XML, stream I/O, basic networking, serialization, reflection, security, threading, interoperation, and regular expressions. These chapters are no mere MSDN Library excerpts, either – they are carefully organized around typical use cases and contain a wealth of practical examples and useful tips. While you could find such information elsewhere, having it all in one place is very convenient.
  • Sayed Ibrahim Hashimi and William Bartholomew, Using MSBuild and Team Foundation Build, Microsoft Press 2009, ISBN-13 978-0-7356-2628-7 — (****) Finally, a good introduction to Microsoft’s new build engine! Only about a third of this book is specific to Visual Studio Team System, which is fortunate for those of us who don’t use it. The greater part covers the regular MSBuild 3.5 which comes with the free .NET Framework SDK and all Visual Studio editions. Lots of examples, lots of information, and strongly recommended to anyone who wants to read or edit MSBuild files.
  • Anders Hejlsberg, Mads Torgersen, Scott Wiltamuth, and Peter Golde, The C# Programming Language, Addison-Wesley 2008 (3rd ed.), ISBN 0-321-56299-2 — (**) As with previous editions, this book is mostly a printed version of language specification found in subdirectory VC#\Specifications\1033 of every Visual Studio 2008 installation. Both documents have been reorganized to remove the annoying split between language versions that encumbered the second edition. Moreover, the book is now a “Special Annotated Edition” that intersperses comments by various C# experts among the reference text. Unfortunately, these comments are not nearly as numerous or interesting as those in the similarly structured Framework Design Guidelines, and I was rather surprised to find that none of the book’s four principal authors had contributed to them. While somewhat more useful than previous editions, the printed version remains non-essential for most developers.
  • Adam Nathan, Windows Presentation Foundation Unleashed, Sams 2007, ISBN 0-672-32891-7 — (****) You wouldn’t expect such a high-quality publication from Sams, otherwise notorious for an endless stream of “Teach Yourself X in Y Minutes” titles. Nathan is a veteran CLR engineer at Microsoft who does occasionally slip into Microsoftish, a dialect of English that loves to dress up simple concepts in pompous terms, such as “leverage” instead of “use” or “reveal” instead of “show”. However, this is really the only criticism I can make – practically everything else about WPF Unleashed is fantastic! The book covers most of WPF and XAML, the new printing API and multithreading being the only notable omissions. Nathan has a deep knowledge of and a great enthusiasm for his subject, and easily imparts both to the reader with his concise and crystal-clear writing. The book also profits from a phenomenal use of layout and color that highlights each detail without impeding the coherence of the whole. The pages might look busy at first, but you will soon come to appreciate the skilful interweaving of text paragraphs, syntax-colored code samples, output illustrations, and various sidebars. WPF Unleashed is highly informative and downright exciting to read – the best introduction to WPF and XAML you can buy.
  • Charles Petzold, Applications = Code + Markup, Microsoft Press 2006, ISBN 0-7356-1957-3 — (**) Together with its 3D companion (see below), this eagerly awaited book marks the end of Petzold’s long career as an authority on practical programming. Announcing his shift to historical and theoretical subjects, Petzold blamed rampant piracy and stingy developers. Those who waste their money on this dreary tome will suspect another reason: Petzold no longer cares about ordinary application programming, and is unable or unwilling to properly explain new technologies in this area.
  • Charles Petzold, 3D Programming for Windows, Microsoft Press 2008, ISBN 0-7356-2394-5 — (***) This companion book to Applications = Code + Markup exclusively covers 3D graphics via WPF and XAML. Fortunately, all the problems that plagued the earlier title are absent here: XAML is used extensively right from the start; there’s a wealth of illustrations instead of repetitive code blocks; and the lively writing testifies to Petzold’s active interest in the subject matter. Most programmers won’t need to know about 3D graphics in such depth, but if you do this book should serve you well.
  • Chris Sells & Ian Griffiths, Programming WPF, O’Reilly 2007 (2nd ed.), ISBN 0-596-51037-3 — (***) Sells and Griffiths are both veteran Windows Forms developers and writers, and their new WPF title measures up to expectations. This book would be my recommendation for developers using WPF and XAML – except that Adam Nathan’s WPF Unleashed is still a good deal better in nearly every respect. Sells and Griffiths do have the advantage of a higher page count which they put to good use. Many topics are covered in somewhat greater detail, and several chapters have no counterpart at all in Nathan’s book: two chapters cover printing and multithreading, two more provide concise references to XAML and WPF, and there is even an introduction to Silverlight. Although you should definitely get started with WPF Unleashed, you might want to consider Programming WPF as a complementary resource once you know the basics.
  • Jon Skeet, C# in Depth, Manning 2008, ISBN 1-9339-8836-3 — (****) After many excellent web articles on C#, Skeet’s first print publication turns out every bit as good as one could hope for. There’s one big drawback that potential readers should be aware of: C# in Depth does not offer a complete introduction to the C# language, but merely points out a few tricky issues with C# 1 before launching into a comprehensive discussion of the new features in C# 2 and 3. Frankly, this is a shame because it prevents an otherwise well-deserved recommendation as the best available guide to the C# language. Top-notch in every respect, this book matches Skeet’s pleasant writing and thorough technical understanding with a clear logical structure and impeccable layout. Once you know the basics of C# 1, you should turn to C# in Depth for the best presentation of advanced features such as generics, iterators, or lambda expressions.

.NET 2.0 Books

Note: If you’re using .NET 3.0 or later you should also check the .NET 3.0/3.5 section. These Framework releases introduced several important new libraries and language enhancements, respectively.

  • Brad Abrams and Krzysztof Cwalina, Framework Design Guidelines, Addison-Wesley 2005, ISBN 0-321-24675-6 — (****) Superseded by the enhanced second edition, reviewed under .NET 3.0/3.5 Books.
  • Joe Duffy, Professional .NET Framework 2.0, Wrox (Wiley Publishing) 2006, ISBN 0-7645-7135-4 — (**) Wrox has a reputation for oversized tomes of dubious quality, but I was swayed by the name of Joe Duffy, concurrency expert at Microsoft and prolific blogger. Duffy certainly knows his stuff and gives a competent overview of the CLR and selected parts of the BCL. Unfortunately, he tries to do too much with too little direction. CLR fundamentals are still better explained by Jeff Richter (whose books are curiously missing from Duffy’s copious references), and the BCL chapters are simply too brief to provide any valuable insights. The book may be somewhat useful as a handy one-volume reference to .NET topics, however.
  • Eric Gunnerson and Nick Wienholt, A Programmer’s Introduction to C# 2.0, Apress (Springer-Verlag) 2005 (3rd ed.), ISBN 1-59059-501-7 — (***) One of the first .NET 2.0 titles rushed to the market, this poorly edited book is an enhanced revision of Gunnerson’s original introduction to C# 1.0. The most obvious goof is the frequent use of obsolete non-generic collection classes in the code examples, even though the authors explicitly state that generic collections should be preferred. Other errors are rampant throughout the book, ranging from typos to botched grammar, incorrect program data, and entire repeated phrases. Sadly, no corrected edition was published to date.
  • Sayed Y. Hashimi and Sayed Ibrahim Hashimi, Deploying .NET Applications, Apress (Springer-Verlag) 2006, ISBN-13 978-1-59059-652-4 — (***) MSBuild is now more extensively covered by Using MSBuild and Team Foundation Build,, written by Sayed Ibrahim Hashimi with a different co-author and reviewed under .NET 3.0/3.5 Books. (I can’t comment on the ClickOnce coverage since I don’t use that technology.)
  • Jeffrey Richter, Applied Microsoft .NET Framework Programming, Microsoft Press 2002, ISBN 0-7356-1422-9 — (****) Superseded by the renamed second edition, CLR via C#, reviewed under .NET 2.0 Books.
  • Anders Hejlsberg, Scott Wiltamuth, and Peter Golde, The C# Programming Language, Addison-Wesley 2006 (2nd ed.), ISBN 0-321-33443-4 — (**) This language reference is the equivalent of Stroustrup’s The C++ Programming Language and just as unsuitable for beginners. Moreover, the book is merely a printed version of the Word files that come with every Visual Studio 2005 installation (look in subdirectory VC#\Specifications\1033). Indeed, the C# 2.0 addenda (a separate file in that folder) weren’t even merged into the C# 1.0 chapters, so you still have to page back and forth to get the full description of any given language feature. Only buy this book if you find yourself using the electronic reference a lot.
  • Matthew MacDonald, Pro .NET 2.0 Windows Forms and Custom Controls, Apress (Springer-Verlag) 2006, ISBN 1-59059-439-8 — (*) This hefty tome covers most, but not all, Windows Forms topics (printing is notably absent) but does so in a rather shallow fashion. Whenever I need concrete information on a Windows Forms task that isn’t adequately covered in the MSDN Library, MacDonald merely seems to reiterate the MSDN documentation while Petzold and Sells give me the extra details and practical advice I need. Pro .NET 2.0 Windows Forms isn’t downright bad, it’s just not very useful – except as a printed overview of the System.Windows.Forms namespace.
  • Charles Petzold, Programming Microsoft Windows Forms (2005 Edition), Microsoft Press 2005, ISBN 0-7356-2153-5 — (****) This relatively slim book (382 pages) is intended as an addendum to Petzold’s earlier standard work, Programming Microsoft Windows with C#, which covered version 1.0 of the .NET Framework and Windows Forms. After a rather pointless introduction to .NET programming and a rundown of commonly used controls, Petzold covers the most important new features (dynamic layout panels, tool strips) and some topics that were missing from his earlier book (custom controls, data binding). Well-written as usual, this book is recommended for all Windows Forms programmers, but note that you do need Programming Microsoft Windows with C# as a foundation.
  • Steven Pratschner, Customizing the Microsoft .NET Framework Common Language Runtime, Microsoft Press 2005, ISBN 0-7356-1988-3 — (***) The lengthy title reveals little about the surprisingly diverse topics covered in this book. Pratschner explains how to start the CLR from unmanaged code, how to create and use application domains, how to load assemblies into extensible applications, how to customize memory management and the CLR security system, and how to encapsulate unmanaged resources (critical finalization, safe handles, CERs). – As of spring 2006, the last subject is also covered in Jeff Richter’s CLR via C# which somewhat limits the usefulness of Pratschner’s book to the average developer. Still, it remains a valuable resource concerning its other fairly esoteric topics.
  • Jeffrey Richter, CLR via C#, Microsoft Press 2006, ISBN 0-7356-2163-2 — (****) This is the standard guide to the .NET Framework and required reading for all developers, regardless of programming language or application type. Unlike Programming Applications for Windows, this book lays the indispensable groundwork needed to understand its subject matter and rarely if ever wanders off into obscure corners. If you haven’t read this book you might still function as a .NET code monkey for a while, but you won’t understand what you’re doing, you’ll feel lost and confused in the vast Framework library, and you’ll constantly be baffled by unexpected behavior. You must read this book!
  • Chris Sells and Michael Weinhardt, Windows Forms 2.0 Programming, Addison-Wesley 2006, ISBN 0-3212-6796-6 — (****) Like its .NET 1.0 predecessor, this book emphasizes the role of Visual Studio’s automatic code creation facilities for Windows Forms development. Fortunately for those of us who prefer the Petzold style of manual coding, Sells and Weinhardt continue to show and explain the generated code. An additional 300 pages in this massively enhanced edition have been put to good use, too. The authors carefully note any important changes in Windows Forms 2.0 and provide very helpful discussions of related subjects such as localized resources and user settings. Strongly recommended for all Windows Forms developers, even including Petzold fans.

.NET 1.0/1.1 Books

Note: If you’re using .NET 2.0 or later you should first check the .NET 3.0/3.5 and .NET 2.0 sections. Much of the material written for .NET 1.0/1.1 has been updated for, or obsoleted by, the newer Framework releases.

  • Tom Archer and Andrew Whitechapel, Inside C#, Microsoft Press 2002 (2nd ed.), ISBN 0-7356-1648-5 — (*) The book’s outdated first edition, based on a prerelease version of C#, was quite handy as a concise language reference. Unfortunately, Archer and his new co-author Whitechapel decided to “improve” upon this style by padding out their text with lengthy ramblings and misleading examples while ignoring many language details that one would expect to find discussed here. Suffering from poor writing and worse editing, Inside C# is only marginally worthwhile for its treatment of some advanced topics such as “unsafe” code and COM interoperation. Make sure to consult other books on .NET and C# so that your code won’t suffer from the errors and omissions in this one!
  • Don Box with Chris Sells, Essential .NET Vol. 1: The Common Language Runtime, Addison-Wesley 2003, ISBN 0-201-73411-7 — (**) This highly anticipated book by COM veteran Don Box, here in cooperation with .NET guru Chris Sells, turned out rather disappointing. The style is atrocious, with the clumsy “one” as the subject of far too many sentences (“one does,” “one sees,” etc.). Box and Sells do cover the CLR thoroughly, but in doing so mostly reiterate Jeff Richter’s better-written Applied Microsoft .NET. However, Essential .NET Vol. 1 provides greater detail on advanced topics such as security, unmanaged code, COM interoperation, and domain & thread control, and is recommended on that basis.
  • Siva Challa and Artur Laksberg, Essential Guide to Managed Extensions for C++, Apress (Springer-Verlag) 2002, ISBN 1-893115-28-3 — (****) As the name implies, Challa and Laksberg present Microsoft’s C++ language extensions known as “Managed C++” that let you write C++ programs for the .NET Framework 1.0 and 1.1. Both authors are members of the Visual C++ compiler team at Microsoft, and while they can’t make MC++ any prettier they do give a clear and thorough description of its many ugly features. Required reading for anyone unfortunate enough to work on MC++ code.
  • Dino Esposito, Applied XML Programming for Microsoft .NET, Microsoft Press 2003, ISBN 0-7356-1801-1 — (***) This is an overview of the numerous XML programming interfaces provided by the .NET Framework, ranging from DOM and ADO.NET to XmlReader/Writer, attribute-controlled serialization, web services, and so on. Esposito provides quite a few useful tips, although he spends a little too much time explaining basic XML concepts and elaborating on trivial examples. Regardless, the sheer breadth of its subject range – essentially anything related to XML – makes this book a valuable aid for deciding if and how to use XML in your applications.
  • Serge Lidin, Inside Microsoft .NET IL Assembler, Microsoft Press 2002, ISBN 0-7356-1547-0 — (***) Lidin, a member of Microsoft’s Common Language Runtime team, presents a thorough and well-written reference to the CLR and its object-oriented assembly language. Not essential for programmers other than compiler developers, this book is a fascinating look behind the curtain nonetheless. Besides, the ability to write IL programs may come in handy at times, as there is currently no high-level language – not even C# – that can use all CLR features.
  • Charles Petzold, Programming Microsoft Windows with C#, Microsoft Press 2002, ISBN 0-7356-1370-2 — (****) Basically the C#/.NET version of the standard guide, there are two noteworthy differences besides the obvious change of programming language and API. While the earlier book served as a general reference to the Win32 API, this one explores only the System.Windows.Forms namespace in any depth and just briefly touches other parts of the .NET Framework. You will definitely need a more general guide (e.g. Jeff Richter’s Applied Microsoft .NET) to go along with this one. On the other hand, Petzold’s subject treatment is considerably more accessible now, making the new edition a good tutorial even for beginning .NET programmers.
  • Jeffrey Richter, Applied Microsoft .NET Framework Programming, Microsoft Press 2002, ISBN 0-7356-1422-9 — (****) Superseded by the renamed second edition, CLR via C#, reviewed under .NET 2.0 Books.
  • Chris Sells, Windows Forms Programming in C#, Addison-Wesley 2004, ISBN 0-3211-1620-8 — (***) Covering mostly the same ground as Petzold’s Programming Microsoft Windows with C#, Sells’ book differs chiefly in two aspects: there is little space devoted to .NET fundamentals, which is good; and Sells relies on the Visual Studio .NET “designer” for automatic code creation, which is bad. Fortunately, Sells always explains the generated code and generally concentrates on tasks that the “designer” cannot do. He also goes into many details that Petzold skimmed over – inevitably so, given the scope and complexity of the subject matter – and is therefore recommended in addition to Programming Windows, despite the large amount of overlap.
  • Mickey Williams, Microsoft Visual C# .NET, Microsoft Press 2002, ISBN 0-7356-1290-0 — (****) Intended as a general introduction to the C# part of Visual Studio .NET, this book greatly profits from Williams’ clear and concise writing and his amazing attention to detail. The first 300 pages offer the best description of the C# language I’ve yet seen, and the tutorial chapters on broad topics such as Windows Forms, ADO.NET, and XML are packed with useful hints despite their brevity. MS Visual C# .NET is a great way to get started with C#, especially if you’re using Visual Studio .NET – or even if you don’t, as Williams focuses on writing code and treats the powerful VS.NET IDE strictly as an optional aid.

C/C++ Books

Note: Since I am no longer actively using these languages, the reviews in this section only cover publications up to 2001.

  • Marshall Cline, Greg Lomow, and Mike Girou, C++ FAQs, Addison-Wesley, May 2000 (2nd edition, 4th printing), ISBN 0-201-30983-1 — (****) The C++ FAQs originated on the comp.lang.c++ newsgroup, but the book version is more detailed and comprehensive than the free text file. Like most C++ literature, C++ FAQs was written with large-scale development in mind; but unlike many other authors, Cline et al. are keenly aware that this mindset isn’t somehow inborn or natural. They clearly explain the projects and situations C++ was created to handle and show why a language feature was introduced rather than just describing it. (FAQ 39.08 even compares small projects to large projects, and points out that both may require different tools and methods.)
  • Samuel P. Harbison and Guy L. Steele Jr., C: A Reference Manual, Prentice-Hall 1995 (4th ed.), ISBN 0-13-326224-3 — (****) The best reference manual for C89, far superior to Kernighan/Ritchie’s The C Programming Language in my opinion. The 5th edition, published in 2002, also covers the new C99 standard – just in case you find a compiler that actually supports it.
  • Nicolai M. Josuttis, The C++ Standard Library, Addison-Wesley 1999, ISBN 0-201-37926-0 — (****) The subtitle says “A Tutorial and Reference,” and indeed Josuttis’ book offers not just a comprehensive description of the Standard Library (including the STL) but also a host of invaluable usage hints and snippets of example code. A great desktop reference, only slightly tainted by occasional stylistic hiccups. Make sure to get a recent printing (5th or up) as early printings were full of errors! The author’s website has a list of corrections for each printing.
  • Andrew Koenig and Barbara E. Moo, Accelerated C++, Addison-Wesley, August 2000 (1st printing), ISBN 0-201-70353-X — (****) Most introductions to the C++ language slavishly follow the chapter sequence of Stroustrup’s The C++ Programming Language: start out with elements inherited from C, then proceed to new features such as classes and templates. Accelerated C++ inverts this order so as to better explain the use of the C++ language, rather than its lexical properties. For example, Koenig and Moo introduce the use of template functions and classes (from the Standard Library) early on, saving only their creation for later chapters. This means that the reader has already learned why and how these features should be used before he gets to design his own templates and containers.
  • Peter van der Linden, Expert C Programming, Prentice Hall (SunSoft Press) 1994, ISBN 0-13-177429-8 — (****) This is the best programming book I’ve ever read. Van der Linden explores the depths of C with equally great insight and humor. This book will tell you everything you ever wanted to know about C, from unscrambling obscure declarations to the exact relationship between pointers and arrays. In addition, a quick overview of C++ explains how the two languages differ in concept and implementation, in spite of their superficial similarities. Despite all the claims made about C++ being a “better” C, many of the criticisms and warnings aimed at C remain unresolved in C++ and still require careful attention. Expert C Programming is only outdated in a few places discussing MS-DOS specifics. Every developer using either C or C++ should own a copy of this extraordinary book.
  • Scott Meyers, Effective C++, Addison-Wesley 1998 (2nd ed.), ISBN 0-201-92488-9, and More Effective C++, Addison-Wesley 1996, ISBN 0-201-63371-X — (****) Meyers’ books describe many advanced techniques and dark corners of the C++ language, from initialization order to smart pointers to redefining new/delete. Beginners should note that due to the arcane nature of many topics and Meyers’ rather dense writing style, (More) Effective C++ is not as accessible as Accelerated C++ or C++ FAQs. Also, some recommendations smack of zealotry rather than sound advice, such as Meyers’ dislike of the preprocessor and C-style comments. Nevertheless, both books contain a wealth of in-depth information that every C++ programmer should find useful.
  • Scott Meyers, Effective STL, Addison-Wesley 2001, ISBN 0-201-74962-9 — (****) An even better book than (More) Effective C++, Effective STL is both more readable and more relevant to actual programming. C++ is a complex language in its own right, and STL stretches it to the limits. While very convenient when it works, this combination can cause maddening bugs when it doesn’t. Meyers shows how to avoid nasty pitfalls from parsing errors to pointer problems, and even teaches how to decipher STL-related compiler diagnostics. Unless all of your STL programs work at first try, you need this book.
  • Bjarne Stroustrup, The C++ Programming Language, AT&T 2000 (special ed.), ISBN 0-201-70073-5 — (***) The “special edition” is the 3rd edition with two new appendices (Locales, Standard Library Exception Safety) and a hardcover binding so that it stays open on your desk. The C++ Programming Language is a necessary reference manual but definitely not recommended as an introduction to the C++ language. See Accelerated C++ for a good introductory book.
  • Herb Sutter, Exceptional C++, Addison-Wesley 1999 (1st printing), ISBN 0-201-61562-2 — (***) In his foreword, Scott Meyers calls Exceptional C++ “the first book ever written for people who are already familiar with […] all of C++,” and that’ s not an exaggeration. Sutter’s book is a compilation of C++ programming puzzles and solutions based on the regular “Guru of the Week” feature on Usenet group comp.lang.c++.moderated. Some topics are just too obscure and sometimes the discussion is more opinionated than helpful, but overall this book is a good follow-up to (More) Effective C++, shedding some light on yet more of C++’s many subtleties.

This page was last updated on 24 February 2010.
Current version available at http://www.kynosarges.de