Jon Skeet asks "Is C# 3 too big to learn from scratch?" I say "Absolutely"

Jon Skeet wonders:

I've been looking at C# 3 in a fair amount of detail recently, and likewise going over the features of C# 2....I feel sorry for someone wanting to learn C# 3 from scratch. It's becoming quite a big language....It's often been said in the newsgroups (usually when someone has been moving from another language to C#) that C# itself only takes a few days to learn....I suspect it would be hard to do it any sort of justice in less than about 700 pages, which is a pretty off-putting size (at least for me).

You can't learn C# in days unless you have a background in either C++ or Java. JavaScript won't do it, because you have to learn about static typing, value and reference types, different inheritance model, different model for function objects / delegates / events. My book on C# 1.0 was over 900 pages and, although based onĀ about the most successful structure for teaching Java, was inadequate for a true newcomer. That was before generics, which would take many pages to explain to the point of people "knowing" the idioms, much less lambdas and LINQ, which would be at least another 200.

To compile an object-oriented "Hello, World" in C# (1, much less 3) has a huge conceptual load: namespaces, classes, references, the difference between static and instance methods and variables (which, to really understand, requires a digression into the this pointer and v-tables, which opens a can of worms about how the CLR differs from the underlying memory model).... think about how many concepts you have to understand to understand public static void main(string[] args)

That so many of us learned C# after knowing Java after knowing C++ after knowing C has perpetuated the myth that any of those languages are "learnable in days." It's just not so. I used to teach a hugely successful 5-day course on Java which worked great... as long as they weren't COBOL programmers. I imagine I would face the exact same problems trying to teach newcomers coming from, say, ColdFusion or Flash. Of course some people would "get" it, but I guarantee that those people would be those who had primed themselves on C-derived syntax and object orientation.