Head First C#

Andrew Stellman, Jennifer Greene

Mentioned 19

A guide to C# 3.0 and Visual Studio 2008 covers such topics as objects, data types and references, encapsulation, interfaces, exception handling, and LINQ.

More on Amazon.com

Mentioned in questions and answers.

I've been studying C# for a couple of years, reading voraciously, even taking a few C# data access courses from Microsoft. I've also been reading books on OOP. I'm coding a web-based database application at work. While my job title is not "programmer", I'm fortunate enough to be able to work on this as a side project. I coded in Basic in the early 80's and was even good at utilizing pokes and peeks to manipulate the Apple ][ + and the TRS-80 to astound and amaze my friends. But that was a very linear approach to coding.

All this being said, something is just not clicking with me. I haven't had that a-ha moment with either C# or OOP that gives me the ability to sit down, open up VS2008, and start coding. I have to study other people's code so much that it simply seems like I'm not doing anything on my own. I'm getting discouraged.

It's not like I'm not capable of it. I picked up t-sql really quickly. Someone can tell me what information they want out of the database and I can code out the tsql in a matter of a few minutes to give them what they want. SQL is something that I get. This isn't happening for me with OOP or C#. Granted, C# is inherently more complex, but at some point it has to click. Right?

I read over stackoverflow and I'm overwhelmed at how infinitely smart you all are.

What was it for you that made it click?

Edited to add: A lot of the answers here were outstanding. However, one in particular seemed to have risen to the top and that's the one I marked as the "answer". I also hate not marking my questions with the answer.

I can totally sympathize. I have degrees in English and Film; the only programming I'd done before my latter twenties was on an Apply ][e, when I was 12. Classic ASP was my first foray into Web programming, which I only learned because I had to, as a technical writer working on an intranet project documenting real-estate software.

But eventually programming took, and I decided to start learning how to do things right. The transition wasn't easy. But I can say learning C# for Web development, particularly if you don't already sort of "grok" OO, can be daunting -- mainly because OO is so much about creating and managing state and statefulness, and the Web is inherently stateless.

Believe it or not, I learned more about OO writing Ajax apps with JavaScript and Flex apps in ActionScript -- i.e., building stateful clients -- than I ever did trying to force C# into my brain, because Ajax apps and Flex apps force you to think about things in terms of state. Returning to C# after having spent a couple of years (yes, a couple of years) writing lots of JavaScript code, and lots of Flex code, and reading lots and lots of both, was actually pretty easy, because by then, I realized how C# should work, as an OO language.

The Head First series of books is great, too -- people sort of downplay them around here, because they're rather silly, but they teach great concepts and I've been surprised how well their lessons have remained with me over the years. Try the OO title. And spend some time futzing around with JavaScript, too. Maybe have a look at Douglas Crockford's work. It'll click. Just give it some time.

I'm not sure whereabouts you are within your C# journey, but I certainly found Head First C# a very good read and use the mini projects therein as practice. As someone who had been studying C# in their spare time for around a year and a half prior to reading the book, it gave me some mini 'Aha' moments, for example, with delegates and callbacks.

Granted, some of the examples within it are contrived, much like many other programming books, but hey, who doesn't want to build their own Space Invaders?!

I am not that good at programming. I finished my masters degree in electronics. I want to learn C#, the .NET Framework, and SQL. How much time do you think it would take (if I have 5 hours a day to devote to it)? Also, what order do I learn them in? I have Visual Web Developer 2008, is that enough to begin?

Copied from a new question by the same user:
I should have specified that I wish to make a career out .NET Development. I'd like to give myself 2 months to get the 'basics' down. As a developer, what is expected out of you in IT companies? What skillset do they require and what are the responsibilities as a junior or mid-level developer? I don't have any industry experience, will I be able to get a feel of the job duties while at home?

All "relativity" aside, not fast. Based on the fact that you said you never programmed before...to become a basic programmer, a few years.

And to become a good to outstanding (using design patterns and industry recognized standards that relate to common standards as defined by ISO/IEC 9126 Standard such as testability, maintainability, etc.) programmer, it takes years of experience and coding often.. you do not become "Sr." or an "Architect" overnight and the same thing is true for a mid-level developer who doesn't code slop.

It's always a process where you improve. So learning is relative. But to learn the basics, seems simple until you start to design classes and interfaces. And even Leads stumble on the basics..doing things wrong. Everyone does. There is so much to be aware of.

If you're just going to be adding features (using classes your Lead or Architect has stubbed out for the team) and not really adding new classes, etc. it's easier....but you should take care in coding using standards and you still have to know complex areas of OOP. But that's not really OOP. When you start to creating classes, interfaces and knowing about inheritance, heap, references, etc. yada yada...and REALLY understanding it takes time no matter how smart you are or think you may be.

So, for a new programmer. Not easy. Be prepared to code a lot. And if you are not, find a job where you are. It's all about coding as much possible so you can get better.

Read these books FIRST. Do not dive into any others out there because they are not geared toward teaching you the language in a way you can get up to speed fast:

http://www.amazon.com/Head-First-Object-Oriented-Analysis-Design/dp/0596008678/ref=pd_bbs_sr_4?ie=UTF8&s=books&qid=1231280335&sr=8-4

http://www.amazon.com/Head-First-SQL-Brain-Learners/dp/0596526849/ref=pd_bbs_sr_7?ie=UTF8&s=books&qid=1231280335&sr=8-7

http://www.amazon.com/Head-First-C-Brain-Friendly-Guides/dp/0596514824/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1231280393&sr=8-1

http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman/dp/0596007124/ref=pd_bbs_sr_3?ie=UTF8&s=books&qid=1231280393&sr=8-3

they will get you the fasted jump start into understanding, better than any books out there.

Also for these lame type of responses, ignore them:

"Then again, plenty of people (most normal people, non-programmers) never learn those subjects, so if you're like "most" people then the answer would be "it would take forever" or "it will never happen"."

Those come from developers (typically leads) who have some Ego trip that DON'T want you to learn. Everyone learns differently and at different paces and eventually you will become "fast". I get very tired of hearing Sr. developers say statements like this when their sh** also stinks many times no matter how good they are. Instead they should be helping the team to succeed and learn as long as their team is working hard to keep abreast and doing what they can on their own as well (not leachers).

Make sure you try to get a Jr. Level Developer position first...

A friend of mine is interested in learning how to program computers, but she knows nothing about programming. I suggested that Python might be a good language to start with, but after some googling, I couldn't find any tutorials that covered both programming and Python in an adequate way.

I don't want her to go through the tiresome "learn algorithms in pseudocode first" routine. Instead, I'd like a tutorial that will explain the basic ideas while working towards a real goal, e.g. a very simple console game.

Does anyone know of any such tutorials? Do you think that I'm mistaken in how I'm handling this? Is Python a bad choice? I know that something like C, C++ or Java won't work - too many details will be very counterproductive. On the other hand, I think that Lisp might be too mathematical and abstract. Python, on the other hand, will let her even do something like coding primitive graphical games in a short period of time.

Tell her to buy the Head First C# book and not look back. It contains three labs in it amongst other examples, for which you cannot find complete solutions (they have a discussion forum to ask questions); the reader is provided with some code and requirements and then it is up to them to implement the rest. The final lab leads the reader into building their own space invaders.

Apologies this isn't quite a python answer, just putting it out there as another possibility.

Python is a fantastic language to start with. One tutorial I've found useful is The Non-Programmer's Tutorial for Python by Josh Cogliati. I've also heard good things about Python Programming for the Absolute Beginner, which I just ordered myself to prepare a training course.

G'day,

I'm a long time Unix and Linux person with about 30 years and 14 years experience in those technologies, respectively. But wanting to expand my toolbox, I was trawling SO for hints on learning Sharepoint and I was wondering about Jon Skeet's answer to the question "How to begin as a .net and SharePoint developer" where he suggests learning .NET and C# before learning ASP.NET and Sharepoint.

Should I learn .NET and C# before getting involved with ASP.NET and Sharepoint? And can anyone recommend good books for the four technologies?

On SO so far, we've had questions for book recommendations for learning Sharepoint and ASP.NET but I haven't found anything about a "*nix head" dipping his toes into the MS waters for the first time.

At the moment I have Jon's recommendations from his answer above but I've been also been looking at the Head First C# book and a couple of O'Reilly Nutshell books.

The list of possible books I have so far is:

C#:

Sharepoint:

N.B. The Sharepoint list was obtained from the accepted answer to the question "WSS/MOSS". Thanks Pascal Paradis.

Any one help with the suggestions for learning .NET and ASP.NET?

Any thoughts on these books?

cheers,

I suggest you start learning from a book that will introduce you both to .NET and C#. When you will understand .NET world, you can go further to ASP.NET. Since you come from *nix world, you should learn how different .NET world is from your previous experiences, and even from Windows itself. I spent some time reading Andrew Troelsen’s book, and I think they are quite ok to start, and then move to ASP.NET. From the list above I have heard, that Liberty’s book is quite ok.

Troelsen: http://www.amazon.com/2008-NET-Platform-Fourth-Windows-Net/dp/1590598849/ref=sr_1_1?ie=UTF8&s=books&qid=1247572543&sr=1-1

Absolutely you need o learn C# (or VB.NET or any .NET language) and ASP.NET before Sharepoint. Actually Sharepoint is built upon ASP.NET. Though you can use sharepoint by itself (create document libraries and stuff) from the browser, without having to deal with asp.net, but a lot of sharepoint things require .NET and ASP.NET. For example, SmartWebParts in sharepoint depend on creating asp.net user controls, also features in Sharepoint depends on .NET. So yeah! You have to learn C# and ASP.NET for doing real sharepoint stuff.
EDIT:
For the books thing, for me I think that
Inside Windows Sharepoint Services is an awesome book, it's the best one for programmer (IMHO of course).
Pro C# and the .NET 3.5 is very highly recommended for C#
ASP.NET 2.0 Web Site programming Problem, Design, Solution would be my recommendation for ASP.NET

You need knowledge about C# and .NET to developing ASP.NET apps or for SharePoint. Because both technology have same base and it's .NET

Head First C# for absolute beginner in programming (OOP) and C#. And it's good for you if you haven't knowledge about object programming, but if you familiar with OOP, this book wasting your time.

Best way how to get in .NET and C# is C# in Depth: What you need to master C# 2 and 3

This really deserves something more than "Should you walk before you can run?", which was my first thought :)

With 30 odd years of experience (I assume programming experience), you should not really learn the basics, you need to get in depth understanding of the C# developement environment, IIS, SQL Server and SharePoint (in roughly that order). To be efficient, you need to compare these technologies and see how they are different from what you are used to rather than reading yet another book that starts with variable declaration syntax.

I personally would get more from time spent with an expert, but that is not usually an option. Fortunately many of these people blog and those can be really illuminating. (see Eric Lippert)

When reading the detail, you will most likely be able to understand how the details operate without needing a full chapter.

Small snippets of information are going to be more useful to you than large amounts of basic knowledge. E.g. I assume that a snippet of information such as "SharePoint stores all the documents for a Site Collection as a binary field in a single table." will provide you with more information than a several thousand word overview of SharePoint site collections.

I understand delegates encapsulate method calls. However I'm having a hard time understanding their need. Why use delegates at all, what situations are they designed for?

A delegate is basically a method pointer. A delegate let us create a reference variable, but instead of referring to an instance of a class, it refers to a method inside the class. It refers any method that has a return type and has same parameters as specified by that delegate. It's a very very useful aspect of event. For thorough reading I would suggest you to read the topic in Head First C# (by Andrew Stellman and Jennifer Greene). It beautifully explains the delegate topic as well as most concepts in .NET.

If you need to decide at runtime, which method to call, then you use a delegate. The delegate will then respond to some action/event at runtime, and call the the appropriate method. It's like sending a "delegate" to a wedding you don't want to attend yourself :-)

The C people will recognize this as a function pointer, but don't get caught up in the terminology here. All the delegate does (and it is actually a type), is provide the signature of the method that will later be called to implement the appropriate logic.

The "Illustrated C#" book by Dan Solis provides the easiest entry point for learning this concept that I have come across:

http://www.amazon.com/Illustrated-2008-Windows-Net-Daniel-Solis/dp/1590599543

Being a self-taught "amateur" programmer, I do most programming in my spare time, for relatively small projects, or for small study-related utilities. I greatly enjoy it, though, and have learned a great deal over the past couple of years. Through various weblogs and websites, I've become acquainted with version control, bug tracking, unit testing etc.

The languages I'm currently working in are mostly Delphi (2007 for Win32), as well as some PHP. I've been very happy with both (actually, I'm using Delphi for a rather large side-project), but the things I've seen of .NET (especially C#) seem very, very interesting. I haven't really had the time to dive into .NET, though; also, it seems like there are some serious financial burdens one needs to overcome before one can get started with it (the whole VS stack is quite an investment for someone who doesn't spend his whole work day programming).

So my question boils down to, actually, a couple of related questions:

  • What strengths of .NET would make a switch to it worthwhile for an amateur programmer like me?
  • What are good resources to get started with .NET/C#, esp. books?
  • How would you build a relatively cheap development stack for .NET?

I realize this is a rather open question, but I haven't really found a good web resource that covers these topics. Also, advice from experienced programmers like you guys around here tends to be invaluable!

Thanks a lot!

I find the development rate of the .NET Framework and the IDE (Visual Studio) phenomenal.. We are getting some really cool stuff coming out of Redmond, and they seem to be ever-increasing in their responsiveness to user feedback, which I think is awesome :)

There are a lot of good resources already listed. Obviously extensive use of Stack Overflow would be a suggestion I now always make to new developers.

I personally find O'Reilly "Head Rush/First" books to be some of the best software tutorial books on the market.. I always had good results with them. However, I have not read their C# book myself.

Pro C# 2010 and .NET Platform Edition Fifth is also a good book to start with C# and .Net in general.

Apress's Pro C# is an excellent book that covers both the C# language and much of the .NET libraries.

I'd like to study up on the latest technologies for writing Windows desktop apps. My last experience was with VC++ 6 using MFC. The landscape seems more complex these days, I'm not sure if I should learn .NET, don't really know what Windows forms, WPF are etc. All I want to do is be able to write some simple Windows GUI apps, probably using & learning C# along the way.

Any recommendations on books to read etc?

Also, is the free version of VC2008 good enough for writing small apps?

I would go with .NET and WPF. WinForms is still available, but is really a legacy branch of .NET at this point, and not worth learning if you are starting from scratch. WPF offers a lot of good features, and is pretty use to get up and running with.

I found "Windows Presentation Foundation Unleashed" a good introduction to WPF. It explained the foundational concepts well and wasn't just one of those 2,000 page tutorials full of screen shots.

I recommend Head First C#. If you've programmed in C++ before, you should be up to speed fairly quickly.

alt text

I'm reading through Jon Skeet's book reviews and he is going over the numerous inaccuracies of Head First C#.

One of them caught my eye:

[Under Errors Section] Claiming that structs always live on the stack.

In what situations would structs not live on the stack? This goes contrary to what I thought I knew about structs.

One common example is where the struct is a member of an object that is allocated in the heap. There is lots of additional detail in this question here. What’s the difference between struct and class in .Net?

In looking at the use of C# in a ISV setting, I'm wondering what prominent C# based desktop apps are out there? I can think of only Paint .NET.

Is C# a good idea for an ISV, or should one stick to more native environments like Delphi or even QT?

Of course any experienced based advise or feedback would be appreciated.

I'm still just a student, but for what it's worth (and from other answers preceding mine), there seem to be quite a few apps in C#.

I'd advise working through the book Head First C# (Amazon link). This book will give you a pretty solid idea of what you can do with the language.

=-MDP-=

I have two professional programmer friends who are going to teach me, and they both love the language (C#). I know that their specific skills and enthusiasm more than out-weigh any drawbacks to the language, but they seem like such fanboys I'm left wondering what the catch is.

I only have experience of XHTML and CSS, so accept that getting my head around Object orientation will be a challenge, for example. I'm vaguely aware that some languages (python?) allow you to test small sections alone, and that this is particularly useful for beginners. I worry that I'm trying to run before I can walk by going straight for C#.

I'm sorry this is a bit of a rambling question, but advice would be greatly appreciated.

I recommend the Head First Series: Head First C# available at Amazon.com. They do a pretty good job explaining Object Oriented (OO) principles but you also may want to check out a dedicated (OO) book. Head First also makes a decent OO design book: Head First Object-Oriented Analysis and Design available at Amazon.com.

I don't work at a software company, but have taught myself C# and have been using it fairly regularly. Now another engineer in the office (not a software engineer) has expressed an interested in learning to code like I can. I'm helping him through some simple console applications, but he's having some trouble grasping all the OOP concepts. He's an engineer so he's had experience with procedural programing in school, but the concept like objects, classes and instances are really challenging him.

I suggested he get the Head First C# book, but I was also wondering if anyone knew of any good tutorials on line that explained OOP principles. He's using C# but it really could be language agnostic. Also something with a lot of pictures and diagrams would be the most helpful.

I am wanting to learn C# where would be a good place to start?

What tools will I need to code and compile with as well?

Tools - Download MS Visual C# Express Edition 2010.

Books - Head First C# if you are looking basics..

Refer this page for some good videos and links on C#

I am trying to create a simple drawing utility as .net desktop application(i.e Windows Form using C#). What i am planing to develop is:

  1. There should be a canvas area (This is the area where the actual drawing is performed).

  2. The canvas should be zoomable (Zoom in and zoom out)

  3. The canvas areas should have grid lines (the ideal size of grid is 100X100pixel, but it can be changed with zooming)

  4. There is a single character written inside each cell (here by the term "cell" i am refering to the box that is formed by the intersection of grid lines)

Now until this step all the thing are automatic (i.e user don't have to do anything until now all is done by my application)

  1. User is only allowed to draw rectangles in canvas area(my application will also need to keep the track of those rectangles in such a way that user is allowed to resize those rectangles later)

Since i am beginner to C# so i need only guidance. Till now i just look at System.Drawing library (only look at it don't go deep :P) but not sure should it cater all my requirements or not (but i guess it will cater my req) and if it will then from where do i start with and what resource do i need to study in order to create this application.

It sounds like the methods in the System.Drawing will suit the task just fine. Check out the GDI+ FAQ for some guidance in getting started with the drawing. The book Head First C# has an excellent section on drawing (and I think it's a good book if you are just getting started with the language as well).

I'm trying to create a program that pulls int's from a method in a class into another class. When its pulled into the main program, it is supposed to run through an if statement to only display certain values. In the main Program class though, I'm getting the error that the name ### does not exist in the current context. If someone could take a look at this and tell me what I'm missing, it would be much appreciated. I'm having issues with the counter, die1 and die2 variables in the main Program class.

namespace DiceRoll
{
    public class RollClass
    {
        public void RollMethodDice()
        {
            int die1, die2, counter;
            // create Random number generator
            Random rndRoll = new Random();

            // Loop that counts the # of rolls from 1 to 100
            for (counter = 1; counter <= 100; counter++)
            {
                // Random generators for each die
                die1 = rndRoll.Next(1, 7);
                die2 = rndRoll.Next(1, 7);
            }
        }

        public int GetDiceRoll()
        {
            return die1;
            return die2;
            return counter;
        }

        public int die1 { get; set; }
        public int die2 { get; set; }
        public int counter { get; set; }        
    }

    class Program
    {    
        static void Main(string[] args)
        {                
            Console.WriteLine("Welcome to the dice rolling program.");
            Console.WriteLine();
            Console.WriteLine("This program will roll dice 100 times and display the roll where doubles land.");
            Console.WriteLine();
            Console.WriteLine("Rolls that were in doubles:");

            RollClass myRollClass = new RollClass();

            myRollClass.RollMethodDice();

            if (die1 == die2)
            {
                Console.WriteLine("Roll "+ counter + ": "+ die1 + " "+ die2);
            }
        }

        // Key stroke is needed to close console window so results are visible
        Console.ReadKey();
     }
 }

There are several problems in your program.

namespace DiceRoll
{
    public class RollClass
    {
        //int die1, die2, counter;  // <-- Field of class should be defined outside method.
                                    // <-- And since you used auto generated property below, these are not needed here.
        public void RollMethodDice()
        {
            // create Random number generator
            Random rndRoll = new Random();

            // Loop that counts the # of rolls from 1 to 100
            for (counter = 1; counter <= 100; counter++) {
                // Random generators for each die
                die1 = rndRoll.Next(1, 7);
                die2 = rndRoll.Next(1, 7);
            }
        }

        public int GetDiceRoll()
        {
            return die1;
            //return die2;  // <-------- You cannot return multiple values in a method.
            //return counter;  // <----- Instead, an array point/reference is possible.
        }

        public int die1 { get; set; }
        public int die2 { get; set; }
        public int counter { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("Welcome to the dice rolling program.");
            Console.WriteLine();
            Console.WriteLine("This program will roll dice 100 times and display the roll where doubles land.");
            Console.WriteLine();
            Console.WriteLine("Rolls that were in doubles:");

            RollClass myRollClass = new RollClass();

            myRollClass.RollMethodDice();

            if (myRollClass.die1 == myRollClass.die2)  // <--- You need use your class instance to access the property.
            {
                Console.WriteLine("Roll " + myRollClass.counter + ": " + myRollClass.die1 + " " + myRollClass.die2);
            }
            // Key stroke is needed to close console window so results are visible
            Console.ReadKey();  // <--------- Method call should be stay inside a method, not a class.
        }
    }
}

And in one word, you really need to read some basic OOP book. For example Head First C#. And Online tutorial from Microsoft are also helpful.

As an SQL Server DBA, I have still had many a side opportunity to create mini applications in MS Access, which over time, have become quite hefty and feature laden. I would like to get myself trained in C# and ASP.NET so I could graduate these applications to the professional level. I have Visual Studio 2010 Pro and want to get rolling. Where could I find a good source for educational material?

Look at the official Microsoft resources for web development (videos and tutorials):

http://asp.net

And

http://asp.net/mvc

A good starter book for C# is Head First C#.

How can I become an expert in C# and any language I learn?

Also, what are some recommended books....?

A great place to start is the Head First series.

The Head First C# book is totally awesome. I learned a lot from it, and it's super easy, comprehensive (and fun!) to read. (Amazon Link)

Then just start a project on your own and apply what you learned. You will pick up faster than you think you can!

Good luck on your quest!

I am relatively new with C#. Obviously, I need to improve my programing skills in C#. I mostly working in WPF and have often need to write converters and dependency properties. I had a fast experience programming in Actionscript. However, programming similar logic in C# is quite different, especially when it comes to syntax. I realize that I need to expand my knowledge of C# and improve my understanding of the syntax in order to become more comfortable with C#. I am wondering if someone can advise what will be the best methodology to feel this gap and any good web based sources or books that you know. Thank for your help.

If you want to make a purchase, for your C# fundamentals, you couldn't do better than Head First C#. (Reminder: with this or any technical book, as soon as you get it, go to the book's official website, print out the errata, and keep that with the book.)

C# fundamentals for free: check out C# Station's C# Tutorial. It's pretty good but their section on polymorphism is weak. Also, haunt C# questions on Stack Overflow and see how other people use it.

For WPF, check out Sacha Barber's "WPF: A Beginner's Guide." Here is Sacha's article listing. The organization is lacking so just search that page for "WPF: A Beginner's Guide" to find each successive part.

I've offered an out-of-job girl to help her study programming (with an MCSD as the ultimate goal) - and she has no progrmming knowledge. The idea is that she'll study from books and I"ll help.

Help- I need a gentle introduction to programming book, very easy, very practical, very hands-on and up to date. Optimally would be for the .Net 4.0 MS enviornment (C#,Visual Basic) but other alternaitves (Jave, Python etc.) are OK.

Head First C# is a good start.

It is C# 3.0 and uses VS 2008, though all examples should work with VS 2010 and C# 4.0.

Update:

Looks like is has been updated to C# 4.0 and VS 2010.

I wish to become a good developer in C# (especially .NET environment (i.e both windows app & web app)).

Suggest me the way to achieve the same..... It may be books, magazines, journals, code samples, etc.

Two books I found to be very helpful have been Programming C# and C# in Depth. These books are aimed at developers with existing experience in other languages, they may not be helpful if you are less experienced. Some of the other answers may have better suggestions for folks just beginning to learn programming.

You'll probably want to get Visual C# 2008 Express. It's free and very full-featured, you can get started experimenting with code very quickly and easily.

I would recommend starting with the absolute core parts of C# - learn about the type system, strings, numbers, IO, collections etc. I'd personally do this with console applications, where you don't need nearly as much code to get a result as with a GUI, and you can concentrate on the topic you're trying to learn about.

In terms of books, C# 3.0 in a Nutshell is very good. If you're really not a console kind of person, Head First C# may be up your street - it's not my preferred style, but many other people like it. However, make sure you get the latest printing, as lots of errors have been corrected.