A number of book publishers regularly send me books, hoping that I will write a good review for them. Most of the time, I don’t have the time to read them, so they end up on my bookshelf collecting dust, or maybe I will give them away to friends.
Recently, though, I decided to read one of the books that was sent to me with the goal of writing a review. The book was designed to get non-SQL Server developers up to speed on how to develop SQL Server 2008 applications using Transact-SQL. This is a very worthy goal, because based on my experience, it is bad application design and code that is the root of most SQL Server scalability and performance problems. So I had great expectations when I began reading the book.
Before I go any further, I want to give you an example that I think summarizes this book, then I will go into more specifics. For example, let’s say that a company has hired a new developer right out of college. The developer is bright and knows Visual BASIC, C#, .NET, and so on. In other words, he knows application coding inside and out. For his first project, he is assigned to create a new application that will use SQL Server as the backend database. Unfortunately, other than taking a couple of database theory classes in college, he has never written any Transact-SQL code. No problem, this is a bright developer. He picks up a copy of the book (I was reviewing), reads it, and because he is bright, masters the fundamentals of Transact-SQL development quickly, and he is ready to begin coding his first SQL Server-based application. If I was the DBA for this organization, I would be scared, very scared. The problem is that you can’t learn how to develop SQL Server-based applications from a single book, especially if that book focuses strictly on how to write Transact-SQL, and little else.
Reading this book got me thinking. What would the ideal book that teaches developers how to create SQL Server-based applications include? After some thought, I came up with the following suggestions (not in any special order):
- Introduction to DBMS: Assuming the reader has no knowledge of DBMS, the book should begin with strong overview of how DBMS systems work.
- Database Design: While entire books have been written on this topic, it is important that developers learn the basics earlier than later.
- Teach Transact-SQL: Transact-SQL must be taught in an appropriate order, starting with the basics, building a strong foundation, and then moving onto more complex coding.
- Teach How to Resolve Real World Problems: While learning the basics of Transact-SQL is fine and dandy, what is more important is that developers understand how to use it to resolve specific business problems that they will face day-in and day-out. This is one of the biggest mistakes I think most books make. They leave out the messy, real world stuff, instead, focusing on simple examples that are rarely realistic.
- Content Must be Current: While this seems obvious, many books include old information that is no longer true. For example, don’t include recommendations based on SQL Server 6.5 if the book focuses on SQL Server 2008.
- Must be Accurate: Another obvious point, but some books include obvious mistakes and provide misinformation.
- Cover Available Tools: SQL Server has many tools built-in that can make development faster and easier. New developers need to learn how to best take advantage of them.
- Best Practices: Transact-SQL allows you to write bad and great code. As a beginner, this is not always obvious. A great book should include recommended best practices so new developers won’t make obvious mistakes.
- Holistic: SQL Server-based applications aren’t written in isolation. Because of this, the book should include information on SQL Server internals, indexing, scalability, high availability, how SQL Server best interacts with client-side application languages, the operating system, networking, and much more.
After writing the above list, I realize that it is virtually impossible to include everything I have included to fit into a single book. Instead, perhaps a series of book, each building upon the other, might be a good approach. This way, a person new to SQL Server development would properly get up to speed, putting them in the position so that they could write competent database applications, even though they may not have a lot of experience. Of course, experience is the key to writing great applications, but everybody has to start somewhere, and hopefully is not from reading a single, poorly-written book on SQL Server development.
So what do you think? What are the biggest problems you have found with books you have read that “supposedly” teach SQL Server development? Do you agree with my list, and do you have any items you would like to add to it?
Also, if you have read some books that come close to the above ideals, what are they?