|
I've referred to the following books time and time again during my career as a software developer and debugger. I strongly recommend them to you.
Code Complete by Steve McConnell (Microsoft Press, 1993)
This is simply the best book on software construction that I've ever read. Every developer should own a copy and read it cover to cover every year. After reading it annually for nine years, I'm still learning things from this book!
Rapid Development by Steve McConnell (Microsoft Press, 1996)
This book taught me how to manage teams and schedule projects.
Debugging the Development Process by Steve Maguire (Microsoft Press, 1994)
This book is a great introduction to the way Microsoft develops software. Obviously, since Microsoft is the most successful software company on the planet, they must be doing something right. You can learn a great deal from this book.
Dynamics of Software Development by Jim McCarthy (Microsoft Press, 1995)
This book is a very interesting look at software development from the perspective of a manager with a track record for shipping great products. The rules Jim proposes are excellent because they all come from actual experience; he's not just some academic theorizing.
Under Pressure and On Time by Ed Sullivan (Microsoft Press, 2001)
Ed's the great project manager from whom I stole most of my ideas about how to deliver software. This book discusses real-world project management and how Ed built great teams that delivered great products consistently and always on time. Also, the guy who wrote the forward is probably the sexiest developer working today.
The Career Programmer: Guerilla Tactics for an Imperfect World by Christopher Duncan (APress, 2002)
All the books on software development address only the manager's perspective. It's about time someone wrote a book for the developers in the trenches! Chris covers tactics and techniques that enable you to concentrate on getting your job done even when your manager might be an idiot.
Writing Secure Code, Second Edition, by Michael Howard and David LeBlanc (Microsoft Press, 2002)
With security in the forefront of everyone's mind, all developers need to have this book in their collections. Not only does it do a fantastic job of introducing the issues, it's chock full of real-world recommendations and examples of what you need to do in your software.
Don't Make Me Think: A Common Sense Approach to Web Usability by Steve Krug (New Riders, 2000)
Everyone is a user interface expert, and this is especially so the higher up the food chain you go in your development shop. This outstanding book discusses real-world Web page design and shows you the techniques necessary to ensure your designs actually work.
Philip and Alex's Guide to Web Publishing by Philip Greenspun (Morgan Kaufmann, 1999)
If you're designing a Web site, you have to read this book. You might not agree with everything (I sure didn't), but it's one of the most cogent discussions of the issues surrounding how to keep users happy and how to develop Web sites people will come back to. Also, the photographs in the book are excellent. My father, a world class artist, can't seem to figure out why my books don't look so good.
High-Performance Client/Server by Chris Loosley and Frank Douglas (Wiley, 1998)
This is a great book on designing performance into applications and has an especially excellent discussion of high-speed architectures.
Developing International Software, Second Edition by Dr. International (Microsoft Press, 2003)
What's the old joke? A person who speaks three languages is trilingual, a person who speaks two is bilingual, and the person who speaks only one is American. Microsoft makes 60 percent of its revenue from outside the United States and you can too if you plan for it. This book shows you how to develop international applications for all of Microsoft's technologies.
The Practice of Programming by Brian W. Kernighan and Rob Pike (Addison-Wesley, 1999)
This book is a wonderful discussion of developing, debugging, and testing.
Writing Solid Code by Steve Maguire (Microsoft Press, 1993)
Although it focuses mainly on C programming, this book contains excellent advice on interface definitions and avoiding nasty problems in the language.
Managing the Testing Process by Rex Black (Microsoft Press, 1999)
To develop better, you need to know how to test better. This excellent book will change the way you develop and the way you interact with your QA teams.
How Debuggers Work: Algorithms, Data Structures, and Architecture by Jonathan B. Rosenberg (John Wiley & Sons, 1996)
This book is an excellent introduction to how debuggers work and to the issues you need to consider when designing a debugger.
Debugging Windows Programs: Strategies, Tools, and Techniques for Visual C++ Programmers by Everett N. McKay and Mike Woodring (Addison Wesley, 2000)
Right after the first edition of the book you're reading now came out, Everett's and Mike's book showed up. It's a fantastic book, and I wish I'd thought of some of the great ideas they put in there, like how to think about debugging.
Applied Microsoft .NET Framework Programming by Jeffrey Richter (Microsoft Press, 2002)
Applied Microsoft .NET Framework Programming in Microsoft Visual Basic .NET by Jeffrey Richter and Francesco Balena (Microsoft Press, 2002)
Simply the best introduction to the insides of .NET. This is what all those thousands of "Introduction to .NET" books strive to do but fail miserably at doing.
Programming Microsoft .NET by Jeff Prosise (Microsoft Press, 2002)
This is the perfect book to follow Jeffrey Richter's. Somehow Jeff managed to anticipate every single question I ever had about Microsoft ASP.NET and answer them all in his outstanding book.
.NET and COM: The Complete Interoperability Guide by Adam Nathan (Sams, 2002)
If your .NET application is going to communicate outside the CLR to the big bad world of Windows or COM applications, this book is the bible you need to ensure that communication works.
Applied XML Programming for Microsoft .NET by Dino Esposito (Microsoft Press, 2002)
XML is everywhere today, and Dino's book is an outstanding reference on digesting and emitting XML with Microsoft .NET.
.NET Enterprise Design with Visual Basic .NET and SQL Server 2000 by Jimmy Nilsson (Sams, 2002)
Jimmy's book is one of the few books out there that concentrates on real-world development issues. It's a joy to read and to learn about how to apply many different aspects of real-world tools to solve problems.
Performance Testing Microsoft .NET Web Applications by Microsoft Application Consulting and Engineering (ACE) Team (Microsoft Press, 2003)
Although .NET takes care of many programming chores for you, you're still responsible for performance. A great introduction to performance testing.
Inside Microsoft .NET IL Assembler by Serge Lidin (Microsoft Press, 2002)
Although you'll probably never program in IL professionally, it sure is cool to know you can.
The C Programming Language, Second Edition by Brian W. Kernighan and Dennis M. Ritchie (Prentice Hall, 1988)
This book is the definitive guide to C programming and the best-written technical book I've ever read.
Learning C++ by Neill Graham (McGraw-Hill, 1991)
I used this book to learn C++. Unlike other C++ doorstop books, Learning C++ is short, sweet, and to the point.
C++ Programmer's Guide to the Standard Template Library by Mark Nelson (IDG Books, 1995)
I have an intense love-hate relationship with the Standard Template Library. Fortunately, Mark's book does a great job of providing samples and explaining the finer points of using this library.
Programming Windows, Fifth Edition by Charles Petzold (Microsoft Press, 1999)
This one book will teach you everything you need to know about how Windows programs work at the most fundamental level. People could solve many of the problems they ask me about if they only had a better understanding of how message handling, graphics device interface (GDI), and other subjects work at the Microsoft Win32 level.
Programming Applications for Microsoft Windows, Fourth Edition by Jeffrey Richter (Microsoft Press, 1999)
This book covers all the unique aspects of Win32 development. The chapters on DLLs, threads, synchronization, and structured exception handling are the best descriptions available and all relate directly to debugging your problems more quickly and efficiently.
Programming Windows with MFC, Second Edition by Jeff Prosise (Microsoft Press, 1999)
This book is the definitive guide to programming with the Microsoft Foundation Class (MFC) library. If you're using MFC, you must have this book.
Windows++: Writing Reusable Windows Code in C++ by Paul Dilascia (Addison-Wesley, 1992)
Unlike other design books, which have only toy examples, this book produces a strong and viable C++ class library for Windows programming. I learn best by example, and this book taught me how to think in terms of objects.
Essential COM by Don Box (Addison-Wesley, 1998)
In the Disassembly window ("unambiguous mode"), a COM interface is just a pointer to an array of pointers, so COM should be easy to understand. COM is so much more than just a pointer and is so fundamental to programming life, however, that you must understand how it works if you expect to stand a chance of correctly implementing and debugging your code. Don's book will give you a great start along the path of COM enlightenment.
Inside Microsoft Windows 2000, Third Edition by David A. Solomon and Mark E. Russinovich (Microsoft Press, 2000)
The book is the official "big picture" view of the Microsoft Windows 2000 kernel. Although more directly applicable for device driver writers, this book will help you make sense out of how the different parts of the operating system fit together in Windows 2000.
Windows 95 System Programming Secrets by Matt Pietrek (IDG Books, 1995)
Matt's book is out of print, but you should really try to find a copy. Debugging anything more than a simple access violation on Microsoft Windows 95 and Microsoft Windows 98 is an exercise in extreme frustration mainly because Windows 95 and Windows 98 are hybrid 16-bit/32-bit operating systems. Much of the information in the book, such as the Portable Executable (PE) file format chapter, applies to Windows 2000 as well.
ATL Internals by Brent Rector and Chris Sells (Addison-Wesley, 1999)
The Active Template Library (ATL) makes the smallest and fastest COM objects around. To take full advantage of ATL, you have to have this book.
Programming Windows Security by Keith Brown (Addison-Wesley, 2000)
Simply the best book on Windows security programming.
Programming Server-Side Application for Microsoft Windows 2000 by Jeffrey Richter and Jason D. Clark (Microsoft Press, 1999)
If you're doing native server applications, you have to have this book. The section on scalable I/O is the best ever written.
Structured Computer Organization, Fourth Edition by Andrew S. Tanenbaum (Prentice-Hall, 1998)
An excellent introduction to computer architecture, this book is filled with information that I use to debug problems daily. The book has some typos and technical errors, but if you can get past that you'll be glad you read it.
Intel CPU reference manuals
Intel makes available, for free, the CPU manuals for their processors. If you're doing serious debugging, these manuals are extremely helpful and informative. You can download the Adobe PDF files from Intel's Literature Center at developer.intel.com/design/litcentr/index.htm. Intel also provides the manuals in book form if you prefer having hard copies.
The Indispensable PC Hardware Book, Fourth Edition by Hans-Peter Messmer (Addison-Wesley, 2001)
This book is the best discussion of PC hardware around. When you need to interact with hardware, this book is an invaluable resource.
|