I’ve ranted about versioning before (and indeed in C# in Depth). I still believe that Microsoft didn’t do the world any favours when they introduced a relatively minor set of changes (just libraries, albeit important ones) with .NET 3.0 and a more major set of changes (languages, LINQ, core library improvements) with .NET 3.5. Using 2.5 and 3.0 would have made more sense, IMO. But never mind.
The fact is, people are confused about what version number applies to what. A number of people claim to be using C# 3.5 when they mean either C# 3.0 or .NET 3.5. (For a quick reference of what’s actually what, see my article on the issue.)
Okay, so far it’s the fault of Microsoft for being confusing and the fault of developers for not keeping up. Both of these are far more forgiveable in my view than being flat out wrong as many books are at the moment. I don’t believe this is any indication on the quality of the book itself (Accelerated C# 2008 is pretty good so far, for example) but I still think it’s pretty awful to make a title so confusing. So, here are some bad titles and others which use version numbers appropriately. (I’ve left out titles like Head First C# and C# in Depth which don’t specify version numbers.)
- Professional C# 2008 (Wrox)
- Pro C# 2008 and the .NET 3.5 Platform (Apress) (only partly incorrect, of course)
- Murach’s C# 2008 (Mike Murach and Associates)
- Accelerated C# 2008 (Apress)
- Illustrated C# 2008 (Apress)
- Pro LINQ: Language Integrated Query in C# 2008 (APress)
- Pro ASP.NET 3.5 in C# 2008 (Apress) (again, only partially incorrect)
- Beginning C# 2008 (Apress)
- Beginning C# 2008 Databases (Apress)
- C# 3.0 in a Nutshell (O’Reilly)
- Programming C# 3.0 (O’Reilly)
- C# 3.0 Cookbook (O’Reilly)
- C# 3.0 Design Patterns (O’Reilly)
- C# 3.0 Pocket Reference (O’Reilly)
- Pro C# with .NET 3.0 (Apress)
- Beginning C# 3.0 (Wrox)
- C# 3.0 Unleashed: With the .NET Framework 3.5 (Sams)
This is the “well, just about” list – because they’re referring to “Microsoft Visual C# 2008” instead of C# 2008, it’s referring to the IDE instead of the language. I think it’s better to name a book after the language instead of the tool you use to write in the language, personally…
- Beginning Microsoft Visual C# 2008 (Wrox)
- Microsoft Visual C# 2008 Step By Step (Microsoft)
- Programming Microsoft Visual C# 2008 (Microsoft)
- Microsoft Visual C# 2008 Express Edition: Build a Program Now! (Microsoft)
Notice a pattern? If anyone at Apress is reading this (unlikely, I know) – there’s no such thing as “C# 2008“.
Rant over for the moment. With any luck I might be able to finish reading Accelerated C# 2008 fairly soon, and give a proper book review.
17 thoughts on “Judging a book by its cover (or title)”
That is pretty ridiculous. Although some technical editor at Apress might be forgiven for thinking, “The way they handled this versioning is absurd. If we call it C# 2008, everyone will know what we are talking about.” That doesn’t excuse it, but it might explain it.
I have also previously expressed my displeasure at the way Microsoft has been versioning .NET at http://commongenius.com/variable_irony/archive/2008/04/28/why-i-hate-marketing.aspx.
Are you kidding? I love seeing “C# 2008” in the titles, because then I know it’ll cover .NET 3.5. Since, as you pointed out, C# 3.5 is not a real thing; and since it’s quite possible for a book to teach you C# 3.0 without using any .NET 3.5 stuff (or worse, to be using “C# 3.0” to mean “The version of C# that comes with .NET 3.0”), C# 2008 is perfectly unambiguous.
No, I’m not kidding. “C# 2008” is a meaningless term. There’s no guarantee that a book about “C# 2008” will cover much of .NET 3.5. It’s likely to cover C# 3.0, but there’s nothing in there saying it’ll cover .NET 3.5.
If a book wants to say it’s covering both language and libraries, it should do so explicitly IMO. For instance, “Pro C# 3.0 and the .NET 3.5 Platform” would have been a fine choice, for example – but with “2008” instead of “3.0” it’s just nonsensical.
Lots of people (i.e. former VB programmers…) don’t know or care that there is such a thing as a C# language separate from the Visual Studio environment, hence the habit of using the IDE version for the language version.
Regarding Microsoft’s 3.0/3.5 version numbering, I certainly agree it’s annoying and confusing that we got C# 3.0 with .NET 3.5. However, having worked with WPF for a while I can appreciate why they felt that a minor version increase didn’t do justice to this very significant change. The new libraries are huge, and the programming model is totally different from Windows Forms. And of course .NET 3.0 has WCF etc. in addition to WPF.
If anything I’d say that .NET 3.5 should have been 3.1 since the changes are relatively small. Physically the changed files are much smaller, and even LINQ is something you can adopt locally and gradually in an existing project whereas WPF requires rewriting the whole thing from scratch.
Chris: if Microsoft had judged that it was worth using the IDE version as the language version, that would have been fine. As it is, referring to “C# 2008” is just plain wrong, and introduces even more confusion than already exists. Now someone explaining what language they use might talk about “C# 3.0” “C# 3.5” or “C# 2008”. If publishers were correct and consistent, this problem would be at least reduced.
As for .NET 3.0 vs 3.5 – I completely agree that WPF is a big improvement, but it’s more of a separate “add on” than a change to the core framework – whereas things like expression trees, the addition of more types in the System namespace etc are more fundamental in my view.
What I’m thinking is that the publishers are aiming their books at an audience that does not know the actual language version, only the IDE version. They don’t care about being technically correct but about reaching the broadest possible audience. I mean, people like you and me clearly understand what “C# 2008” means even though it annoys us, so there’s no loss here.
On a completely different subject, I just discovered that the link to your blog on your website is no longer up-to-date. There’s a “blogs” directory missing between the site name and your name: http://www.msmvps.com/blogs/jon_skeet/
Chris, my point is that if they used the right version number people might actually start to get *more* of a clue instead of *less*. Once it’s on the cover of a book, people will start believing that actually *is* the version of C#.
If publishers want to refer to the version of the IDE, they should use the name of the IDE. Naming a book “Accelerated Visual C# 2008” would be fine, for instance.
Thanks for spotting the failing link, btw. I always used to use just http://msmvps.com/jon.skeet, which still works (as a redirect). It looks ike when the URL was changed to jon_skeet, the base URL redirect stopped working. Have corrected it now, thanks.
I always interpreted the year in these titles as referring to the year in which their material is intended to be current. It’s fairly handy while browsing a store shelf, especially for someone who’s not really “up” on the various versions. If you’ve heard of C#, are interested in learning it, but don’t yet understand the distinction between the language and .NET (much less understand the 3.0’s and 3.5’s, and which are relevant), then having a year on the book is great. When I was first browsing, it was easy to disregard the books with 2005 in the title as being out of date, but not so easy to decide whether I’d be okay with something targeting .NET 3.0 rather than 3.5.
So to me, the year is perfectly acceptable in a book targeting specific and rapidly changing technology, and is useful to pinpoint roughly the period of time for which the book’s version of that technology was relevant. Using the year doesn’t make as much sense when the book is targeted at professionals and people intimately familiar with the nuances of the language and runtime versions (such as your book) or when the book isn’t about a specific language (e.g., Head First C#, which is really designed to teach object oriented programming and C# basics, and which will still be pretty valid after we have C# 4.0 and .NET 4.3 or whatever).
And yeah, I realize the 2005 and 2008 names originally came about because of the Visual Studio versions, and are probably being kept mostly for consistency with earlier titles (or parallel titles from the same publisher for other platforms). Still, that doesn’t make them useless or harmful; I think they’re helpful for beginners and ignorable for those who are more experienced.
Jon, I can tell you why Apress uses the name “C# 2008” in the titles of their books, it’s because Microsoft uses it. At least that is why “C# 2008” is in the title of my book, Pro LINQ: Language Integrated Query in C# 2008.
Open a Visual Studio Command prompt and enter csc.
C:Program FilesMicrosoft Visual Studio 9.0VC>csc
Microsoft (R) Visual C# 2008 Compiler version 3.5.21022.8
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.
fatal error CS2008: No inputs specified
Now you know why Apress uses C# 2008. Notice it doesn’t say C# 3.0. I was concerned about this myself when they changed the title of my book, but after seeing this compiler output, I was OK with it.
Joe – that doesn’t say “C# 2008”, it says “Visual C# 2008” which is the correct product name. It’s not the “C# 2008” compiler, it’s the compiler which is part of “Visual C# 2008”.
I don’t think I’ve seen Microsoft use “C# 2008” on its own – although I’m happy to be corrected.
I am not saying you are wrong or that Apress is correct, I am merely explaining a part of their reasoning for their titling.
Considering there isn’t anything very Visual about a command line compiler, does it seem unreasonable to believe that the Visual part is referring to the IDE and not specifically the compiler itself? And that therefore the compiler is the C# 2008 compiler? I know I am splitting hairs here, and that isn’t my intent. I was just trying to explain part of the reasoning for the titling.
As I recall, I also think part of the reasoning has to do with some of the confusion around the versioning. An inexperienced developer using Visual Studio 2008 may not know that C# 3.0 is the latest version, but they very well may get the 2008 relationship.
Splitting hairs is fine – but it means I’ll split ’em back :) (And yes, I understand you’re only putting forward APress’s argument, rather than necessarily agreeing with it yourself.)
If you treat “C# 2008” as a phrase on its own, that leaves “Microsoft Visual” as a phrase on its own too, which *certainly* doesn’t make sense.
I agree that there’s nothing visual about a compiler, but it seems clear to me that “Visual C# 2008” is a product name, but “C# 2008” isn’t. (Interestingly, if you run csc from a command line on a machine without Visual Studio installed, it still talks about the “Visual C# 2008 compiler”.)
And yes, inexperienced developers may not know about C# 3.0 being the latest version – and I’d argue that’s at least *partly* the fault of publishers like Apress. If *all* publishers used the language version number when referring to the language, the IDE version number when referring to the IDE, and the framework version when referring to the framework, we’d be in a slightly better situation. By taking what might be called the easy option, Apress is adding to the confusion IMO.
What would happen if a new version of Visual Studio came out without any language changes? Anyone seeing a book with “C# 2010” on might justifiably expect to get different language features described than the ones in their “C# 2008” book – but they’d be disappointed.
Sorry, I know I’m ranting – and once again, I acknowledge that you’re only explaining the reasoning Apress uses. I just think it’s shortsighted reasoning and that it gives a poor *impression* of the accuracy of the book itself. (I haven’t read your book yet, so I’m certainly not commenting on the actual accuracy – I’m just saying that referring to a mythical language version doesn’t get a book off to a good start for me.) Then again, judging by the comments here it looks like it’s mostly just me who actually cares about this :)
I’m not really fussed about is people use C# 3.0 or 2008. If you were to hold a gun to my head though and make me choose it would be C# 3.0 everytime.
With that said I think many are misnamed anyway, most books that say they are on C# X are actually on .NET. The dedicate a few chapters to the actual language and then proceed to ASP.NET, WCF etc etc. Thats a bigger criime in my opinion.
At least that’s one crime I’m not guilty of then :)
Seriously, there now seem to be quite a few books (C# 3.0 in a Nutshell and Accelerated C# 2008, for example) which do talk about .NET itself, but only “core” stuff rather than ASP.NET, WCF, WPF, etc. While still not strictly “just” C# (even my book has a few bits which aren’t C#-specific!) it’s a lot better than the “one chapter skimming over each technology” books which used to be more prevalent. Basically .NET is getting too big to do that with, although it looks like Troelsen’s covering a lot in “Pro C# 2008 and the .NET 3.5 Platform”. (Another one for the list…)
I have to agree 100% with Skeet here, I’m frankly surprised no one sees it but this is a PROGRAMMING LANGUAGE, for crying out loud; the way people excuse what Apress does almost makes me wonder why they don’t say rediculous things like, “System.Console, Microsoft.Console .. heck, same difference, nothin wrong with that…”
I don’t buy the “audience” argument; *maybe* the argument flies if the book has the word “Beginning” in it, but nothing else flies, sorry.
I also don’t by the csc argument. Apress is not sitting there with a compiler typing “csc” when they come up with these book names. If they were, they’d probably be bright enough to see the “Visual” in there, too.
There’s no other explanation for what Apress has done except simply that they have confused the IDE and the language, period.
I have come to your blog late but feel that I must comment after buying your book. I am surprised that you are concerned about a little matter like the incorrect use of 2008. I find that your use of “in depth” as a phrase is much more inaccurate, given the serious omissions in your book.
You seem to be overly interested in the new C# 3.0 topics and less on standard functionality that has lived with the language from day 1, such as in depth reviews of multithreading – which is essential knowledge to me.
@Jim: I’m sorry you were disappointed by the book – although I wouldn’t classify multithreading as something which is really a language issues as much as a platform issue. (There are only a few points where they overlap – the C# spec doesn’t give a huge amount of guidance in terms of memory model etc.) If you want a lot of detail about multithreading, I strongly recommend Joe Duffy’s “Concurrent Programming on Windows”.
I’ve tried to make sure that everywhere that has more than just the title of the book – i.e. all the marketing blurbs etc – make it clear that my book assumes existing knowledge of C# 1, and is only giving the new features in C# 2 and 3 in depth. If you could point out a site which gave you the wrong impression, that would be very helpful so that I can correct it.
Once again, I’m sorry to have disappointed you in this. I stand by my comments about incorrect version numbers in titles though.